From c166ee0be19d353623d9f38a4ff511b5e5a7a6f1 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 13:22:29 +0100 Subject: [PATCH 01/35] First commit. Adds thin strip test (see Cabello2019) --- test/pyWrapper/test_full_system.py | 27 +++++++++++++ .../conformal_thin_strip.fdtd.json | 0 .../conformal_thin_strip_prepost.py | 40 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json create mode 100644 testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index f604597e2..bb433c01d 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1127,3 +1127,30 @@ def test_conformal_delay(tmp_path): tdelta = t4 + 2*(i*1.0/n)*0.02/3e8 assert np.abs(delay - tdelta)/tdelta < 0.01 +def test_conformal_thin_strip_resistance(tmp_path): + fn = CASES_FOLDER + 'conformal_thin_strip/conformal_thin_strip.fdtd.json' + solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, + run_in_folder=tmp_path) + solver.run() + assert solver.hasFinishedSuccessfully() + + exc = pd.read_csv("predefinedExcitation.1.exc", sep='\\s+') + exc = exc.rename(columns={ + exc.columns[0]: 'time', + exc.columns[1]: 'V' + }) + new_freqs = np.geomspace(1e3, 1e7, num=100) + Vexc = exc["V"].to_numpy() + texc = exc["time"].to_numpy() + dt_exc = texc[1]-texc[0] + Vfexc = dt_exc*np.array([np.sum(Vexc * np.exp(-1j * 2 * np.pi * f * texc)) for f in new_freqs]) + + bulk = Probe(solver.getSolvedProbeFilenames("BulkProbe")[0]) + Ibulk = bulk["current"].to_numpy() + tbulk = bulk["time"].to_numpy() + dt_bulk = tbulk[1]-tbulk[0] + Ifbulk = dt_bulk*np.array([np.sum(Ibulk * np.exp(-1j * 2 * np.pi * f * tbulk)) for f in new_freqs]) + # compute + Rdc_th = 0 + #impedance comparison + assert (np.abs(Vfexc/Ifbulk)[0] == Rdc_th) diff --git a/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json b/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json new file mode 100644 index 000000000..e69de29bb diff --git a/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py b/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py new file mode 100644 index 000000000..986aabce2 --- /dev/null +++ b/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py @@ -0,0 +1,40 @@ +# %% +import numpy as np +from numpy.fft import * +import matplotlib.pyplot as plt +import pandas as pd + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '../../../', 'src_pyWrapper')) +SEMBA_EXE = '../../../build/bin/semba-fdtd' + +from pyWrapper import * + +# %% +solver = FDTD(input_filename = 'conformal_thin_strip.fdtd.json', path_to_exe=SEMBA_EXE) +solver.cleanUp() +solver.run() + +# %% +exc = pd.read_csv("predefinedExcitation.1.exc", sep='\\s+') +exc = exc.rename(columns={ + exc.columns[0]: 'time', + exc.columns[1]: 'V' +}) +new_freqs = np.geomspace(1e3, 1e7, num=100) +Vexc = exc["V"].to_numpy() +texc = exc["time"].to_numpy() +dt_exc = texc[1]-texc[0] +Vfexc = dt_exc*np.array([np.sum(Vexc * np.exp(-1j * 2 * np.pi * f * texc)) for f in new_freqs]) + + +bulk = Probe(solver.getSolvedProbeFilenames("BulkProbe")[0]) +Ibulk = bulk["current"].to_numpy() +tbulk = bulk["time"].to_numpy() +dt_bulk = tbulk[1]-tbulk[0] +Ifbulk = dt_bulk*np.array([np.sum(Ibulk * np.exp(-1j * 2 * np.pi * f * tbulk)) for f in new_freqs]) + +#impedance comparison +plt.loglog(new_freqs, np.abs(Vfexc/Ifbulk), label='conformal') +plt.ylabel(r'Z($\Omega$)') +plt.xlabel('f [Hz]') From 68c63ffcd5c8e8087ef60f47228a6ee8b0af8bf7 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 15:25:06 +0100 Subject: [PATCH 02/35] Adds conformalSurface label. Adds support for reading element in json. Adds placeholder json --- src_json_parser/smbjson.F90 | 9 +- src_json_parser/smbjson_labels.F90 | 1 + .../conformal_thin_strip.fdtd.json | 4739 +++++++++++++++++ 3 files changed, 4746 insertions(+), 3 deletions(-) diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 8c0f47f93..ed2d5d05d 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -260,7 +260,7 @@ subroutine addElements(mesh) call mesh%addCellRegion(id, cR) end block - case (J_ELEM_TYPE_CONF_VOLUME) + case (J_ELEM_TYPE_CONF_VOLUME, J_ELEM_TYPE_CONF_VOLUME) block type(conformal_region_t) :: cV type(coordinate_t) :: c @@ -272,8 +272,11 @@ subroutine addElements(mesh) cV%triangles(k)%vertices(j)%position(1:3) = c%position(1:3) end do end do - cV%type = REGION_TYPE_VOLUME cV%intervals = readCellIntervals(je, J_CELL_INTERVALS) + + if (elementType == J_ELEM_TYPE_CONF_VOLUME) cV%type = REGION_TYPE_VOLUME + if (elementType == J_ELEM_TYPE_CONF_SURFACE) cV%type = REGION_TYPE_SURFACE + call mesh%addConformalRegion(id, cV) end block case default @@ -585,7 +588,7 @@ function readConformalRegions(this) result(res) integer :: i, j logical :: found - mAs = this%getMaterialAssociations([J_MAT_TYPE_PEC],[J_ELEM_TYPE_CONF_VOLUME]) + mAs = this%getMaterialAssociations([J_MAT_TYPE_PEC],[J_ELEM_TYPE_CONF_VOLUME, J_ELEM_TYPE_CONF_SURFACE]) do i = 1, size(mAs) do j = 1, size(mAs(i)%elementIds) diff --git a/src_json_parser/smbjson_labels.F90 b/src_json_parser/smbjson_labels.F90 index 20b44d554..ac6cae411 100644 --- a/src_json_parser/smbjson_labels.F90 +++ b/src_json_parser/smbjson_labels.F90 @@ -153,6 +153,7 @@ module smbjson_labels_mod character (len=*), parameter :: J_ELEM_TYPE_CELL = "cell" character (len=*), parameter :: J_CELL_INTERVALS = "intervals" character (len=*), parameter :: J_ELEM_TYPE_CONF_VOLUME = "conformalVolume" + character (len=*), parameter :: J_ELEM_TYPE_CONF_SURFACE = "conformalSurface" character (len=*), parameter :: J_CONF_VOLUME_TRIANGLES = "triangles" character (len=*), parameter :: J_CONF_VOLUME_INTERVALS = "intervals" diff --git a/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json b/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json index e69de29bb..28d187b67 100644 --- a/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json +++ b/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json @@ -0,0 +1,4739 @@ +{ + "_format": "FDTD Input file", + "general": { + "timeStep": 1e-11, + "numberOfSteps": 600000 + }, + "boundary": { + "all": { + "type": "mur" + } + }, + "mesh": { + "grid": { + "numberOfCells": [ + 20, + 20, + 20 + ], + "steps": { + "x": [ + 0.01 + ], + "y": [ + 0.01 + ], + "z": [ + 0.01 + ] + } + }, + "coordinates": [ + { + "id": 1, + "relativePosition": [ + 5.0, + 9.0, + 7.0 + ] + }, + { + "id": 2, + "relativePosition": [ + 5.0, + 8.0, + 7.0 + ] + }, + { + "id": 3, + "relativePosition": [ + 4.5, + 9.0, + 7.0 + ] + }, + { + "id": 4, + "relativePosition": [ + 4.5, + 9.0, + 8.0 + ] + }, + { + "id": 5, + "relativePosition": [ + 5.0, + 8.0, + 8.0 + ] + }, + { + "id": 6, + "relativePosition": [ + 4.5, + 9.0, + 9.0 + ] + }, + { + "id": 7, + "relativePosition": [ + 5.0, + 8.0, + 9.0 + ] + }, + { + "id": 8, + "relativePosition": [ + 4.5, + 9.0, + 10.0 + ] + }, + { + "id": 9, + "relativePosition": [ + 5.0, + 8.0, + 10.0 + ] + }, + { + "id": 10, + "relativePosition": [ + 4.5, + 9.0, + 11.0 + ] + }, + { + "id": 11, + "relativePosition": [ + 5.0, + 8.0, + 11.0 + ] + }, + { + "id": 12, + "relativePosition": [ + 4.5, + 9.0, + 12.0 + ] + }, + { + "id": 13, + "relativePosition": [ + 5.0, + 8.0, + 12.0 + ] + }, + { + "id": 14, + "relativePosition": [ + 4.5, + 9.0, + 13.0 + ] + }, + { + "id": 15, + "relativePosition": [ + 5.0, + 8.0, + 13.0 + ] + }, + { + "id": 16, + "relativePosition": [ + 5.0, + 9.0, + 13.0 + ] + }, + { + "id": 17, + "relativePosition": [ + 5.0, + 10.0, + 7.0 + ] + }, + { + "id": 18, + "relativePosition": [ + 4.2, + 10.0, + 7.0 + ] + }, + { + "id": 19, + "relativePosition": [ + 4.2, + 10.0, + 8.0 + ] + }, + { + "id": 20, + "relativePosition": [ + 4.2, + 10.0, + 9.0 + ] + }, + { + "id": 21, + "relativePosition": [ + 4.2, + 10.0, + 10.0 + ] + }, + { + "id": 22, + "relativePosition": [ + 4.2, + 10.0, + 11.0 + ] + }, + { + "id": 23, + "relativePosition": [ + 4.2, + 10.0, + 12.0 + ] + }, + { + "id": 24, + "relativePosition": [ + 4.2, + 10.0, + 13.0 + ] + }, + { + "id": 25, + "relativePosition": [ + 5.0, + 10.0, + 13.0 + ] + }, + { + "id": 26, + "relativePosition": [ + 5.0, + 11.0, + 7.0 + ] + }, + { + "id": 27, + "relativePosition": [ + 4.2, + 11.0, + 7.0 + ] + }, + { + "id": 28, + "relativePosition": [ + 4.2, + 11.0, + 8.0 + ] + }, + { + "id": 29, + "relativePosition": [ + 4.2, + 11.0, + 9.0 + ] + }, + { + "id": 30, + "relativePosition": [ + 4.2, + 11.0, + 10.0 + ] + }, + { + "id": 31, + "relativePosition": [ + 4.2, + 11.0, + 11.0 + ] + }, + { + "id": 32, + "relativePosition": [ + 4.2, + 11.0, + 12.0 + ] + }, + { + "id": 33, + "relativePosition": [ + 4.2, + 11.0, + 13.0 + ] + }, + { + "id": 34, + "relativePosition": [ + 5.0, + 11.0, + 13.0 + ] + }, + { + "id": 35, + "relativePosition": [ + 5.0, + 12.0, + 7.0 + ] + }, + { + "id": 36, + "relativePosition": [ + 4.35, + 12.0, + 7.0 + ] + }, + { + "id": 37, + "relativePosition": [ + 4.35, + 12.0, + 8.0 + ] + }, + { + "id": 38, + "relativePosition": [ + 4.35, + 12.0, + 9.0 + ] + }, + { + "id": 39, + "relativePosition": [ + 4.35, + 12.0, + 10.0 + ] + }, + { + "id": 40, + "relativePosition": [ + 4.35, + 12.0, + 11.0 + ] + }, + { + "id": 41, + "relativePosition": [ + 4.35, + 12.0, + 12.0 + ] + }, + { + "id": 42, + "relativePosition": [ + 4.35, + 12.0, + 13.0 + ] + }, + { + "id": 43, + "relativePosition": [ + 5.0, + 12.0, + 13.0 + ] + }, + { + "id": 44, + "relativePosition": [ + 4.5, + 13.0, + 7.0 + ] + }, + { + "id": 45, + "relativePosition": [ + 5.0, + 13.0, + 7.0 + ] + }, + { + "id": 46, + "relativePosition": [ + 4.5, + 13.0, + 8.0 + ] + }, + { + "id": 47, + "relativePosition": [ + 4.5, + 13.0, + 9.0 + ] + }, + { + "id": 48, + "relativePosition": [ + 4.5, + 13.0, + 10.0 + ] + }, + { + "id": 49, + "relativePosition": [ + 4.5, + 13.0, + 11.0 + ] + }, + { + "id": 50, + "relativePosition": [ + 4.5, + 13.0, + 12.0 + ] + }, + { + "id": 51, + "relativePosition": [ + 4.5, + 13.0, + 13.0 + ] + }, + { + "id": 52, + "relativePosition": [ + 5.0, + 13.0, + 13.0 + ] + }, + { + "id": 53, + "relativePosition": [ + 5.0, + 14.0, + 7.0 + ] + }, + { + "id": 54, + "relativePosition": [ + 5.0, + 14.0, + 8.0 + ] + }, + { + "id": 55, + "relativePosition": [ + 5.0, + 14.0, + 9.0 + ] + }, + { + "id": 56, + "relativePosition": [ + 5.0, + 14.0, + 10.0 + ] + }, + { + "id": 57, + "relativePosition": [ + 5.0, + 14.0, + 11.0 + ] + }, + { + "id": 58, + "relativePosition": [ + 5.0, + 14.0, + 12.0 + ] + }, + { + "id": 59, + "relativePosition": [ + 5.0, + 14.0, + 13.0 + ] + }, + { + "id": 60, + "relativePosition": [ + 6.0, + 7.0, + 7.0 + ] + }, + { + "id": 61, + "relativePosition": [ + 6.0, + 6.65, + 7.0 + ] + }, + { + "id": 62, + "relativePosition": [ + 5.65, + 7.0, + 7.0 + ] + }, + { + "id": 63, + "relativePosition": [ + 5.65, + 7.0, + 8.0 + ] + }, + { + "id": 64, + "relativePosition": [ + 6.0, + 6.65, + 8.0 + ] + }, + { + "id": 65, + "relativePosition": [ + 5.65, + 7.0, + 9.0 + ] + }, + { + "id": 66, + "relativePosition": [ + 6.0, + 6.65, + 9.0 + ] + }, + { + "id": 67, + "relativePosition": [ + 5.65, + 7.0, + 10.0 + ] + }, + { + "id": 68, + "relativePosition": [ + 6.0, + 6.65, + 10.0 + ] + }, + { + "id": 69, + "relativePosition": [ + 5.65, + 7.0, + 11.0 + ] + }, + { + "id": 70, + "relativePosition": [ + 6.0, + 6.65, + 11.0 + ] + }, + { + "id": 71, + "relativePosition": [ + 5.65, + 7.0, + 12.0 + ] + }, + { + "id": 72, + "relativePosition": [ + 6.0, + 6.65, + 12.0 + ] + }, + { + "id": 73, + "relativePosition": [ + 5.65, + 7.0, + 13.0 + ] + }, + { + "id": 74, + "relativePosition": [ + 6.0, + 6.65, + 13.0 + ] + }, + { + "id": 75, + "relativePosition": [ + 6.0, + 7.0, + 13.0 + ] + }, + { + "id": 76, + "relativePosition": [ + 6.0, + 8.0, + 7.0 + ] + }, + { + "id": 77, + "relativePosition": [ + 6.0, + 8.0, + 13.0 + ] + }, + { + "id": 78, + "relativePosition": [ + 5.65, + 9.0, + 7.0 + ] + }, + { + "id": 79, + "relativePosition": [ + 6.0, + 8.2, + 7.0 + ] + }, + { + "id": 80, + "relativePosition": [ + 6.0, + 8.2, + 8.0 + ] + }, + { + "id": 81, + "relativePosition": [ + 5.65, + 9.0, + 8.0 + ] + }, + { + "id": 82, + "relativePosition": [ + 6.0, + 8.2, + 9.0 + ] + }, + { + "id": 83, + "relativePosition": [ + 5.65, + 9.0, + 9.0 + ] + }, + { + "id": 84, + "relativePosition": [ + 6.0, + 8.2, + 10.0 + ] + }, + { + "id": 85, + "relativePosition": [ + 5.65, + 9.0, + 10.0 + ] + }, + { + "id": 86, + "relativePosition": [ + 6.0, + 8.2, + 11.0 + ] + }, + { + "id": 87, + "relativePosition": [ + 5.65, + 9.0, + 11.0 + ] + }, + { + "id": 88, + "relativePosition": [ + 6.0, + 8.2, + 12.0 + ] + }, + { + "id": 89, + "relativePosition": [ + 5.65, + 9.0, + 12.0 + ] + }, + { + "id": 90, + "relativePosition": [ + 6.0, + 8.2, + 13.0 + ] + }, + { + "id": 91, + "relativePosition": [ + 5.65, + 9.0, + 13.0 + ] + }, + { + "id": 92, + "relativePosition": [ + 5.35, + 10.0, + 7.0 + ] + }, + { + "id": 93, + "relativePosition": [ + 5.35, + 10.0, + 8.0 + ] + }, + { + "id": 94, + "relativePosition": [ + 5.35, + 10.0, + 9.0 + ] + }, + { + "id": 95, + "relativePosition": [ + 5.35, + 10.0, + 10.0 + ] + }, + { + "id": 96, + "relativePosition": [ + 5.35, + 10.0, + 11.0 + ] + }, + { + "id": 97, + "relativePosition": [ + 5.35, + 10.0, + 12.0 + ] + }, + { + "id": 98, + "relativePosition": [ + 5.35, + 10.0, + 13.0 + ] + }, + { + "id": 99, + "relativePosition": [ + 5.2, + 11.0, + 7.0 + ] + }, + { + "id": 100, + "relativePosition": [ + 5.2, + 11.0, + 8.0 + ] + }, + { + "id": 101, + "relativePosition": [ + 5.2, + 11.0, + 9.0 + ] + }, + { + "id": 102, + "relativePosition": [ + 5.2, + 11.0, + 10.0 + ] + }, + { + "id": 103, + "relativePosition": [ + 5.2, + 11.0, + 11.0 + ] + }, + { + "id": 104, + "relativePosition": [ + 5.2, + 11.0, + 12.0 + ] + }, + { + "id": 105, + "relativePosition": [ + 5.2, + 11.0, + 13.0 + ] + }, + { + "id": 106, + "relativePosition": [ + 5.35, + 12.0, + 7.0 + ] + }, + { + "id": 107, + "relativePosition": [ + 5.35, + 12.0, + 8.0 + ] + }, + { + "id": 108, + "relativePosition": [ + 5.35, + 12.0, + 9.0 + ] + }, + { + "id": 109, + "relativePosition": [ + 5.35, + 12.0, + 10.0 + ] + }, + { + "id": 110, + "relativePosition": [ + 5.35, + 12.0, + 11.0 + ] + }, + { + "id": 111, + "relativePosition": [ + 5.35, + 12.0, + 12.0 + ] + }, + { + "id": 112, + "relativePosition": [ + 5.35, + 12.0, + 13.0 + ] + }, + { + "id": 113, + "relativePosition": [ + 5.65, + 13.0, + 7.0 + ] + }, + { + "id": 114, + "relativePosition": [ + 5.65, + 13.0, + 8.0 + ] + }, + { + "id": 115, + "relativePosition": [ + 5.65, + 13.0, + 9.0 + ] + }, + { + "id": 116, + "relativePosition": [ + 5.65, + 13.0, + 10.0 + ] + }, + { + "id": 117, + "relativePosition": [ + 5.65, + 13.0, + 11.0 + ] + }, + { + "id": 118, + "relativePosition": [ + 5.65, + 13.0, + 12.0 + ] + }, + { + "id": 119, + "relativePosition": [ + 5.65, + 13.0, + 13.0 + ] + }, + { + "id": 120, + "relativePosition": [ + 6.0, + 14.0, + 7.0 + ] + }, + { + "id": 121, + "relativePosition": [ + 6.0, + 13.65, + 7.0 + ] + }, + { + "id": 122, + "relativePosition": [ + 6.0, + 13.65, + 8.0 + ] + }, + { + "id": 123, + "relativePosition": [ + 6.0, + 13.65, + 9.0 + ] + }, + { + "id": 124, + "relativePosition": [ + 6.0, + 13.65, + 10.0 + ] + }, + { + "id": 125, + "relativePosition": [ + 6.0, + 13.65, + 11.0 + ] + }, + { + "id": 126, + "relativePosition": [ + 6.0, + 13.65, + 12.0 + ] + }, + { + "id": 127, + "relativePosition": [ + 6.0, + 13.65, + 13.0 + ] + }, + { + "id": 128, + "relativePosition": [ + 6.0, + 14.0, + 13.0 + ] + }, + { + "id": 129, + "relativePosition": [ + 5.8, + 15.0, + 7.0 + ] + }, + { + "id": 130, + "relativePosition": [ + 6.0, + 15.0, + 7.0 + ] + }, + { + "id": 131, + "relativePosition": [ + 5.8, + 15.0, + 8.0 + ] + }, + { + "id": 132, + "relativePosition": [ + 5.8, + 15.0, + 9.0 + ] + }, + { + "id": 133, + "relativePosition": [ + 5.8, + 15.0, + 10.0 + ] + }, + { + "id": 134, + "relativePosition": [ + 5.8, + 15.0, + 11.0 + ] + }, + { + "id": 135, + "relativePosition": [ + 5.8, + 15.0, + 12.0 + ] + }, + { + "id": 136, + "relativePosition": [ + 5.8, + 15.0, + 13.0 + ] + }, + { + "id": 137, + "relativePosition": [ + 6.0, + 15.0, + 13.0 + ] + }, + { + "id": 138, + "relativePosition": [ + 6.0, + 15.2, + 7.0 + ] + }, + { + "id": 139, + "relativePosition": [ + 6.0, + 15.2, + 8.0 + ] + }, + { + "id": 140, + "relativePosition": [ + 6.0, + 15.2, + 9.0 + ] + }, + { + "id": 141, + "relativePosition": [ + 6.0, + 15.2, + 10.0 + ] + }, + { + "id": 142, + "relativePosition": [ + 6.0, + 15.2, + 11.0 + ] + }, + { + "id": 143, + "relativePosition": [ + 6.0, + 15.2, + 12.0 + ] + }, + { + "id": 144, + "relativePosition": [ + 6.0, + 15.2, + 13.0 + ] + }, + { + "id": 145, + "relativePosition": [ + 7.0, + 6.0, + 7.0 + ] + }, + { + "id": 146, + "relativePosition": [ + 7.0, + 5.8, + 7.0 + ] + }, + { + "id": 147, + "relativePosition": [ + 6.8, + 6.0, + 7.0 + ] + }, + { + "id": 148, + "relativePosition": [ + 6.8, + 6.0, + 8.0 + ] + }, + { + "id": 149, + "relativePosition": [ + 7.0, + 5.8, + 8.0 + ] + }, + { + "id": 150, + "relativePosition": [ + 6.8, + 6.0, + 9.0 + ] + }, + { + "id": 151, + "relativePosition": [ + 7.0, + 5.8, + 9.0 + ] + }, + { + "id": 152, + "relativePosition": [ + 6.8, + 6.0, + 10.0 + ] + }, + { + "id": 153, + "relativePosition": [ + 7.0, + 5.8, + 10.0 + ] + }, + { + "id": 154, + "relativePosition": [ + 6.8, + 6.0, + 11.0 + ] + }, + { + "id": 155, + "relativePosition": [ + 7.0, + 5.8, + 11.0 + ] + }, + { + "id": 156, + "relativePosition": [ + 6.8, + 6.0, + 12.0 + ] + }, + { + "id": 157, + "relativePosition": [ + 7.0, + 5.8, + 12.0 + ] + }, + { + "id": 158, + "relativePosition": [ + 6.8, + 6.0, + 13.0 + ] + }, + { + "id": 159, + "relativePosition": [ + 7.0, + 5.8, + 13.0 + ] + }, + { + "id": 160, + "relativePosition": [ + 7.0, + 6.0, + 13.0 + ] + }, + { + "id": 161, + "relativePosition": [ + 7.0, + 7.0, + 7.0 + ] + }, + { + "id": 162, + "relativePosition": [ + 7.0, + 7.0, + 13.0 + ] + }, + { + "id": 163, + "relativePosition": [ + 6.2, + 8.0, + 7.0 + ] + }, + { + "id": 164, + "relativePosition": [ + 7.0, + 7.2, + 7.0 + ] + }, + { + "id": 165, + "relativePosition": [ + 7.0, + 7.2, + 8.0 + ] + }, + { + "id": 166, + "relativePosition": [ + 6.2, + 8.0, + 8.0 + ] + }, + { + "id": 167, + "relativePosition": [ + 7.0, + 7.2, + 9.0 + ] + }, + { + "id": 168, + "relativePosition": [ + 6.2, + 8.0, + 9.0 + ] + }, + { + "id": 169, + "relativePosition": [ + 7.0, + 7.2, + 10.0 + ] + }, + { + "id": 170, + "relativePosition": [ + 6.2, + 8.0, + 10.0 + ] + }, + { + "id": 171, + "relativePosition": [ + 7.0, + 7.2, + 11.0 + ] + }, + { + "id": 172, + "relativePosition": [ + 6.2, + 8.0, + 11.0 + ] + }, + { + "id": 173, + "relativePosition": [ + 7.0, + 7.2, + 12.0 + ] + }, + { + "id": 174, + "relativePosition": [ + 6.2, + 8.0, + 12.0 + ] + }, + { + "id": 175, + "relativePosition": [ + 7.0, + 7.2, + 13.0 + ] + }, + { + "id": 176, + "relativePosition": [ + 6.2, + 8.0, + 13.0 + ] + }, + { + "id": 177, + "relativePosition": [ + 6.2, + 14.0, + 7.0 + ] + }, + { + "id": 178, + "relativePosition": [ + 6.2, + 14.0, + 8.0 + ] + }, + { + "id": 179, + "relativePosition": [ + 6.2, + 14.0, + 9.0 + ] + }, + { + "id": 180, + "relativePosition": [ + 6.2, + 14.0, + 10.0 + ] + }, + { + "id": 181, + "relativePosition": [ + 6.2, + 14.0, + 11.0 + ] + }, + { + "id": 182, + "relativePosition": [ + 6.2, + 14.0, + 12.0 + ] + }, + { + "id": 183, + "relativePosition": [ + 6.2, + 14.0, + 13.0 + ] + }, + { + "id": 184, + "relativePosition": [ + 7.0, + 15.0, + 7.0 + ] + }, + { + "id": 185, + "relativePosition": [ + 7.0, + 14.8, + 7.0 + ] + }, + { + "id": 186, + "relativePosition": [ + 7.0, + 14.8, + 8.0 + ] + }, + { + "id": 187, + "relativePosition": [ + 7.0, + 14.8, + 9.0 + ] + }, + { + "id": 188, + "relativePosition": [ + 7.0, + 14.8, + 10.0 + ] + }, + { + "id": 189, + "relativePosition": [ + 7.0, + 14.8, + 11.0 + ] + }, + { + "id": 190, + "relativePosition": [ + 7.0, + 14.8, + 12.0 + ] + }, + { + "id": 191, + "relativePosition": [ + 7.0, + 14.8, + 13.0 + ] + }, + { + "id": 192, + "relativePosition": [ + 7.0, + 15.0, + 13.0 + ] + }, + { + "id": 193, + "relativePosition": [ + 7.0, + 16.0, + 7.0 + ] + }, + { + "id": 194, + "relativePosition": [ + 7.0, + 16.0, + 8.0 + ] + }, + { + "id": 195, + "relativePosition": [ + 7.0, + 16.0, + 9.0 + ] + }, + { + "id": 196, + "relativePosition": [ + 7.0, + 16.0, + 10.0 + ] + }, + { + "id": 197, + "relativePosition": [ + 7.0, + 16.0, + 11.0 + ] + }, + { + "id": 198, + "relativePosition": [ + 7.0, + 16.0, + 12.0 + ] + }, + { + "id": 199, + "relativePosition": [ + 7.0, + 16.0, + 13.0 + ] + }, + { + "id": 200, + "relativePosition": [ + 8.0, + 6.0, + 7.0 + ] + }, + { + "id": 201, + "relativePosition": [ + 8.0, + 5.35, + 7.0 + ] + }, + { + "id": 202, + "relativePosition": [ + 8.0, + 5.35, + 8.0 + ] + }, + { + "id": 203, + "relativePosition": [ + 8.0, + 5.35, + 9.0 + ] + }, + { + "id": 204, + "relativePosition": [ + 8.0, + 5.35, + 10.0 + ] + }, + { + "id": 205, + "relativePosition": [ + 8.0, + 5.35, + 11.0 + ] + }, + { + "id": 206, + "relativePosition": [ + 8.0, + 5.35, + 12.0 + ] + }, + { + "id": 207, + "relativePosition": [ + 8.0, + 5.35, + 13.0 + ] + }, + { + "id": 208, + "relativePosition": [ + 8.0, + 6.0, + 13.0 + ] + }, + { + "id": 209, + "relativePosition": [ + 8.0, + 6.5, + 7.0 + ] + }, + { + "id": 210, + "relativePosition": [ + 7.2, + 7.0, + 7.0 + ] + }, + { + "id": 211, + "relativePosition": [ + 8.0, + 6.5, + 8.0 + ] + }, + { + "id": 212, + "relativePosition": [ + 7.2, + 7.0, + 8.0 + ] + }, + { + "id": 213, + "relativePosition": [ + 8.0, + 6.5, + 9.0 + ] + }, + { + "id": 214, + "relativePosition": [ + 7.2, + 7.0, + 9.0 + ] + }, + { + "id": 215, + "relativePosition": [ + 8.0, + 6.5, + 10.0 + ] + }, + { + "id": 216, + "relativePosition": [ + 7.2, + 7.0, + 10.0 + ] + }, + { + "id": 217, + "relativePosition": [ + 8.0, + 6.5, + 11.0 + ] + }, + { + "id": 218, + "relativePosition": [ + 7.2, + 7.0, + 11.0 + ] + }, + { + "id": 219, + "relativePosition": [ + 8.0, + 6.5, + 12.0 + ] + }, + { + "id": 220, + "relativePosition": [ + 7.2, + 7.0, + 12.0 + ] + }, + { + "id": 221, + "relativePosition": [ + 8.0, + 6.5, + 13.0 + ] + }, + { + "id": 222, + "relativePosition": [ + 7.2, + 7.0, + 13.0 + ] + }, + { + "id": 223, + "relativePosition": [ + 7.35, + 15.0, + 7.0 + ] + }, + { + "id": 224, + "relativePosition": [ + 7.35, + 15.0, + 8.0 + ] + }, + { + "id": 225, + "relativePosition": [ + 7.35, + 15.0, + 9.0 + ] + }, + { + "id": 226, + "relativePosition": [ + 7.35, + 15.0, + 10.0 + ] + }, + { + "id": 227, + "relativePosition": [ + 7.35, + 15.0, + 11.0 + ] + }, + { + "id": 228, + "relativePosition": [ + 7.35, + 15.0, + 12.0 + ] + }, + { + "id": 229, + "relativePosition": [ + 7.35, + 15.0, + 13.0 + ] + }, + { + "id": 230, + "relativePosition": [ + 8.0, + 16.0, + 7.0 + ] + }, + { + "id": 231, + "relativePosition": [ + 8.0, + 15.35, + 7.0 + ] + }, + { + "id": 232, + "relativePosition": [ + 8.0, + 15.35, + 8.0 + ] + }, + { + "id": 233, + "relativePosition": [ + 8.0, + 15.35, + 9.0 + ] + }, + { + "id": 234, + "relativePosition": [ + 8.0, + 15.35, + 10.0 + ] + }, + { + "id": 235, + "relativePosition": [ + 8.0, + 15.35, + 11.0 + ] + }, + { + "id": 236, + "relativePosition": [ + 8.0, + 15.35, + 12.0 + ] + }, + { + "id": 237, + "relativePosition": [ + 8.0, + 15.35, + 13.0 + ] + }, + { + "id": 238, + "relativePosition": [ + 8.0, + 16.0, + 13.0 + ] + }, + { + "id": 239, + "relativePosition": [ + 8.0, + 16.5, + 7.0 + ] + }, + { + "id": 240, + "relativePosition": [ + 8.0, + 16.5, + 8.0 + ] + }, + { + "id": 241, + "relativePosition": [ + 8.0, + 16.5, + 9.0 + ] + }, + { + "id": 242, + "relativePosition": [ + 8.0, + 16.5, + 10.0 + ] + }, + { + "id": 243, + "relativePosition": [ + 8.0, + 16.5, + 11.0 + ] + }, + { + "id": 244, + "relativePosition": [ + 8.0, + 16.5, + 12.0 + ] + }, + { + "id": 245, + "relativePosition": [ + 8.0, + 16.5, + 13.0 + ] + }, + { + "id": 246, + "relativePosition": [ + 9.0, + 6.0, + 7.0 + ] + }, + { + "id": 247, + "relativePosition": [ + 9.0, + 5.0, + 7.0 + ] + }, + { + "id": 248, + "relativePosition": [ + 9.0, + 5.0, + 8.0 + ] + }, + { + "id": 249, + "relativePosition": [ + 9.0, + 5.0, + 9.0 + ] + }, + { + "id": 250, + "relativePosition": [ + 9.0, + 5.0, + 10.0 + ] + }, + { + "id": 251, + "relativePosition": [ + 9.0, + 5.0, + 11.0 + ] + }, + { + "id": 252, + "relativePosition": [ + 9.0, + 5.0, + 12.0 + ] + }, + { + "id": 253, + "relativePosition": [ + 9.0, + 5.0, + 13.0 + ] + }, + { + "id": 254, + "relativePosition": [ + 9.0, + 6.0, + 13.0 + ] + }, + { + "id": 255, + "relativePosition": [ + 9.0, + 6.0, + 8.0 + ] + }, + { + "id": 256, + "relativePosition": [ + 9.0, + 6.0, + 9.0 + ] + }, + { + "id": 257, + "relativePosition": [ + 9.0, + 6.0, + 10.0 + ] + }, + { + "id": 258, + "relativePosition": [ + 9.0, + 6.0, + 11.0 + ] + }, + { + "id": 259, + "relativePosition": [ + 9.0, + 6.0, + 12.0 + ] + }, + { + "id": 260, + "relativePosition": [ + 9.0, + 16.0, + 7.0 + ] + }, + { + "id": 261, + "relativePosition": [ + 9.0, + 15.8, + 7.0 + ] + }, + { + "id": 262, + "relativePosition": [ + 9.0, + 15.8, + 8.0 + ] + }, + { + "id": 263, + "relativePosition": [ + 9.0, + 15.8, + 9.0 + ] + }, + { + "id": 264, + "relativePosition": [ + 9.0, + 15.8, + 10.0 + ] + }, + { + "id": 265, + "relativePosition": [ + 9.0, + 15.8, + 11.0 + ] + }, + { + "id": 266, + "relativePosition": [ + 9.0, + 15.8, + 12.0 + ] + }, + { + "id": 267, + "relativePosition": [ + 9.0, + 15.8, + 13.0 + ] + }, + { + "id": 268, + "relativePosition": [ + 9.0, + 16.0, + 13.0 + ] + }, + { + "id": 269, + "relativePosition": [ + 9.0, + 16.8, + 7.0 + ] + }, + { + "id": 270, + "relativePosition": [ + 9.0, + 16.8, + 8.0 + ] + }, + { + "id": 271, + "relativePosition": [ + 9.0, + 16.8, + 9.0 + ] + }, + { + "id": 272, + "relativePosition": [ + 9.0, + 16.8, + 10.0 + ] + }, + { + "id": 273, + "relativePosition": [ + 9.0, + 16.8, + 11.0 + ] + }, + { + "id": 274, + "relativePosition": [ + 9.0, + 16.8, + 12.0 + ] + }, + { + "id": 275, + "relativePosition": [ + 9.0, + 16.8, + 13.0 + ] + }, + { + "id": 276, + "relativePosition": [ + 10.0, + 16.0, + 7.0 + ] + }, + { + "id": 277, + "relativePosition": [ + 10.0, + 15.8, + 7.0 + ] + }, + { + "id": 278, + "relativePosition": [ + 10.0, + 15.8, + 8.0 + ] + }, + { + "id": 279, + "relativePosition": [ + 10.0, + 15.8, + 9.0 + ] + }, + { + "id": 280, + "relativePosition": [ + 10.0, + 15.8, + 10.0 + ] + }, + { + "id": 281, + "relativePosition": [ + 10.0, + 15.8, + 11.0 + ] + }, + { + "id": 282, + "relativePosition": [ + 10.0, + 15.8, + 12.0 + ] + }, + { + "id": 283, + "relativePosition": [ + 10.0, + 15.8, + 13.0 + ] + }, + { + "id": 284, + "relativePosition": [ + 10.0, + 16.0, + 13.0 + ] + }, + { + "id": 285, + "relativePosition": [ + 10.0, + 16.8, + 7.0 + ] + }, + { + "id": 286, + "relativePosition": [ + 10.0, + 16.8, + 8.0 + ] + }, + { + "id": 287, + "relativePosition": [ + 10.0, + 16.8, + 9.0 + ] + }, + { + "id": 288, + "relativePosition": [ + 10.0, + 16.8, + 10.0 + ] + }, + { + "id": 289, + "relativePosition": [ + 10.0, + 16.8, + 11.0 + ] + }, + { + "id": 290, + "relativePosition": [ + 10.0, + 16.8, + 12.0 + ] + }, + { + "id": 291, + "relativePosition": [ + 10.0, + 16.8, + 13.0 + ] + }, + { + "id": 292, + "relativePosition": [ + 11.0, + 16.0, + 7.0 + ] + }, + { + "id": 293, + "relativePosition": [ + 11.0, + 15.8, + 7.0 + ] + }, + { + "id": 294, + "relativePosition": [ + 11.0, + 15.8, + 8.0 + ] + }, + { + "id": 295, + "relativePosition": [ + 11.0, + 15.8, + 9.0 + ] + }, + { + "id": 296, + "relativePosition": [ + 11.0, + 15.8, + 10.0 + ] + }, + { + "id": 297, + "relativePosition": [ + 11.0, + 15.8, + 11.0 + ] + }, + { + "id": 298, + "relativePosition": [ + 11.0, + 15.8, + 12.0 + ] + }, + { + "id": 299, + "relativePosition": [ + 11.0, + 15.8, + 13.0 + ] + }, + { + "id": 300, + "relativePosition": [ + 11.0, + 16.0, + 13.0 + ] + }, + { + "id": 301, + "relativePosition": [ + 11.0, + 16.8, + 7.0 + ] + }, + { + "id": 302, + "relativePosition": [ + 11.0, + 16.8, + 8.0 + ] + }, + { + "id": 303, + "relativePosition": [ + 11.0, + 16.8, + 9.0 + ] + }, + { + "id": 304, + "relativePosition": [ + 11.0, + 16.8, + 10.0 + ] + }, + { + "id": 305, + "relativePosition": [ + 11.0, + 16.8, + 11.0 + ] + }, + { + "id": 306, + "relativePosition": [ + 11.0, + 16.8, + 12.0 + ] + }, + { + "id": 307, + "relativePosition": [ + 11.0, + 16.8, + 13.0 + ] + }, + { + "id": 308, + "relativePosition": [ + 12.0, + 16.0, + 7.0 + ] + }, + { + "id": 309, + "relativePosition": [ + 12.0, + 15.5, + 7.0 + ] + }, + { + "id": 310, + "relativePosition": [ + 12.0, + 15.5, + 8.0 + ] + }, + { + "id": 311, + "relativePosition": [ + 12.0, + 15.5, + 9.0 + ] + }, + { + "id": 312, + "relativePosition": [ + 12.0, + 15.5, + 10.0 + ] + }, + { + "id": 313, + "relativePosition": [ + 12.0, + 15.5, + 11.0 + ] + }, + { + "id": 314, + "relativePosition": [ + 12.0, + 15.5, + 12.0 + ] + }, + { + "id": 315, + "relativePosition": [ + 12.0, + 15.5, + 13.0 + ] + }, + { + "id": 316, + "relativePosition": [ + 12.0, + 16.0, + 13.0 + ] + }, + { + "id": 317, + "relativePosition": [ + 12.0, + 16.5, + 7.0 + ] + }, + { + "id": 318, + "relativePosition": [ + 12.0, + 16.5, + 8.0 + ] + }, + { + "id": 319, + "relativePosition": [ + 12.0, + 16.5, + 9.0 + ] + }, + { + "id": 320, + "relativePosition": [ + 12.0, + 16.5, + 10.0 + ] + }, + { + "id": 321, + "relativePosition": [ + 12.0, + 16.5, + 11.0 + ] + }, + { + "id": 322, + "relativePosition": [ + 12.0, + 16.5, + 12.0 + ] + }, + { + "id": 323, + "relativePosition": [ + 12.0, + 16.5, + 13.0 + ] + }, + { + "id": 324, + "relativePosition": [ + 13.0, + 6.0, + 7.0 + ] + }, + { + "id": 325, + "relativePosition": [ + 13.0, + 5.8, + 7.0 + ] + }, + { + "id": 326, + "relativePosition": [ + 12.0, + 5.0, + 7.0 + ] + }, + { + "id": 327, + "relativePosition": [ + 12.0, + 6.0, + 7.0 + ] + }, + { + "id": 328, + "relativePosition": [ + 13.0, + 5.8, + 8.0 + ] + }, + { + "id": 329, + "relativePosition": [ + 12.0, + 5.0, + 8.0 + ] + }, + { + "id": 330, + "relativePosition": [ + 13.0, + 5.8, + 9.0 + ] + }, + { + "id": 331, + "relativePosition": [ + 12.0, + 5.0, + 9.0 + ] + }, + { + "id": 332, + "relativePosition": [ + 13.0, + 5.8, + 10.0 + ] + }, + { + "id": 333, + "relativePosition": [ + 12.0, + 5.0, + 10.0 + ] + }, + { + "id": 334, + "relativePosition": [ + 13.0, + 5.8, + 11.0 + ] + }, + { + "id": 335, + "relativePosition": [ + 12.0, + 5.0, + 11.0 + ] + }, + { + "id": 336, + "relativePosition": [ + 13.0, + 5.8, + 12.0 + ] + }, + { + "id": 337, + "relativePosition": [ + 12.0, + 5.0, + 12.0 + ] + }, + { + "id": 338, + "relativePosition": [ + 13.0, + 5.8, + 13.0 + ] + }, + { + "id": 339, + "relativePosition": [ + 12.0, + 5.0, + 13.0 + ] + }, + { + "id": 340, + "relativePosition": [ + 13.0, + 6.0, + 13.0 + ] + }, + { + "id": 341, + "relativePosition": [ + 12.0, + 6.0, + 13.0 + ] + }, + { + "id": 342, + "relativePosition": [ + 13.0, + 7.0, + 7.0 + ] + }, + { + "id": 343, + "relativePosition": [ + 12.0, + 6.0, + 8.0 + ] + }, + { + "id": 344, + "relativePosition": [ + 13.0, + 7.0, + 8.0 + ] + }, + { + "id": 345, + "relativePosition": [ + 12.0, + 6.0, + 9.0 + ] + }, + { + "id": 346, + "relativePosition": [ + 13.0, + 7.0, + 9.0 + ] + }, + { + "id": 347, + "relativePosition": [ + 12.0, + 6.0, + 10.0 + ] + }, + { + "id": 348, + "relativePosition": [ + 13.0, + 7.0, + 10.0 + ] + }, + { + "id": 349, + "relativePosition": [ + 12.0, + 6.0, + 11.0 + ] + }, + { + "id": 350, + "relativePosition": [ + 13.0, + 7.0, + 11.0 + ] + }, + { + "id": 351, + "relativePosition": [ + 12.0, + 6.0, + 12.0 + ] + }, + { + "id": 352, + "relativePosition": [ + 13.0, + 7.0, + 12.0 + ] + }, + { + "id": 353, + "relativePosition": [ + 13.0, + 7.0, + 13.0 + ] + }, + { + "id": 354, + "relativePosition": [ + 13.0, + 16.0, + 7.0 + ] + }, + { + "id": 355, + "relativePosition": [ + 13.0, + 15.0, + 7.0 + ] + }, + { + "id": 356, + "relativePosition": [ + 13.0, + 15.0, + 8.0 + ] + }, + { + "id": 357, + "relativePosition": [ + 13.0, + 15.0, + 9.0 + ] + }, + { + "id": 358, + "relativePosition": [ + 13.0, + 15.0, + 10.0 + ] + }, + { + "id": 359, + "relativePosition": [ + 13.0, + 15.0, + 11.0 + ] + }, + { + "id": 360, + "relativePosition": [ + 13.0, + 15.0, + 12.0 + ] + }, + { + "id": 361, + "relativePosition": [ + 13.0, + 15.0, + 13.0 + ] + }, + { + "id": 362, + "relativePosition": [ + 13.0, + 16.0, + 13.0 + ] + }, + { + "id": 363, + "relativePosition": [ + 13.0, + 16.2, + 7.0 + ] + }, + { + "id": 364, + "relativePosition": [ + 13.0, + 16.2, + 8.0 + ] + }, + { + "id": 365, + "relativePosition": [ + 13.0, + 16.2, + 9.0 + ] + }, + { + "id": 366, + "relativePosition": [ + 13.0, + 16.2, + 10.0 + ] + }, + { + "id": 367, + "relativePosition": [ + 13.0, + 16.2, + 11.0 + ] + }, + { + "id": 368, + "relativePosition": [ + 13.0, + 16.2, + 12.0 + ] + }, + { + "id": 369, + "relativePosition": [ + 13.0, + 16.2, + 13.0 + ] + }, + { + "id": 370, + "relativePosition": [ + 13.35, + 6.0, + 7.0 + ] + }, + { + "id": 371, + "relativePosition": [ + 13.35, + 6.0, + 8.0 + ] + }, + { + "id": 372, + "relativePosition": [ + 13.35, + 6.0, + 9.0 + ] + }, + { + "id": 373, + "relativePosition": [ + 13.35, + 6.0, + 10.0 + ] + }, + { + "id": 374, + "relativePosition": [ + 13.35, + 6.0, + 11.0 + ] + }, + { + "id": 375, + "relativePosition": [ + 13.35, + 6.0, + 12.0 + ] + }, + { + "id": 376, + "relativePosition": [ + 13.35, + 6.0, + 13.0 + ] + }, + { + "id": 377, + "relativePosition": [ + 14.0, + 7.0, + 7.0 + ] + }, + { + "id": 378, + "relativePosition": [ + 14.0, + 6.5, + 7.0 + ] + }, + { + "id": 379, + "relativePosition": [ + 13.2, + 7.0, + 7.0 + ] + }, + { + "id": 380, + "relativePosition": [ + 14.0, + 6.5, + 8.0 + ] + }, + { + "id": 381, + "relativePosition": [ + 13.2, + 7.0, + 8.0 + ] + }, + { + "id": 382, + "relativePosition": [ + 14.0, + 6.5, + 9.0 + ] + }, + { + "id": 383, + "relativePosition": [ + 13.2, + 7.0, + 9.0 + ] + }, + { + "id": 384, + "relativePosition": [ + 14.0, + 6.5, + 10.0 + ] + }, + { + "id": 385, + "relativePosition": [ + 13.2, + 7.0, + 10.0 + ] + }, + { + "id": 386, + "relativePosition": [ + 14.0, + 6.5, + 11.0 + ] + }, + { + "id": 387, + "relativePosition": [ + 13.2, + 7.0, + 11.0 + ] + }, + { + "id": 388, + "relativePosition": [ + 14.0, + 6.5, + 12.0 + ] + }, + { + "id": 389, + "relativePosition": [ + 13.2, + 7.0, + 12.0 + ] + }, + { + "id": 390, + "relativePosition": [ + 14.0, + 6.5, + 13.0 + ] + }, + { + "id": 391, + "relativePosition": [ + 13.2, + 7.0, + 13.0 + ] + }, + { + "id": 392, + "relativePosition": [ + 14.0, + 7.0, + 13.0 + ] + }, + { + "id": 393, + "relativePosition": [ + 14.0, + 7.8, + 7.0 + ] + }, + { + "id": 394, + "relativePosition": [ + 14.0, + 7.8, + 8.0 + ] + }, + { + "id": 395, + "relativePosition": [ + 14.0, + 8.0, + 7.0 + ] + }, + { + "id": 396, + "relativePosition": [ + 14.0, + 8.0, + 8.0 + ] + }, + { + "id": 397, + "relativePosition": [ + 14.0, + 7.8, + 9.0 + ] + }, + { + "id": 398, + "relativePosition": [ + 14.0, + 8.0, + 9.0 + ] + }, + { + "id": 399, + "relativePosition": [ + 14.0, + 7.8, + 10.0 + ] + }, + { + "id": 400, + "relativePosition": [ + 14.0, + 8.0, + 10.0 + ] + }, + { + "id": 401, + "relativePosition": [ + 14.0, + 7.8, + 11.0 + ] + }, + { + "id": 402, + "relativePosition": [ + 14.0, + 8.0, + 11.0 + ] + }, + { + "id": 403, + "relativePosition": [ + 14.0, + 7.8, + 12.0 + ] + }, + { + "id": 404, + "relativePosition": [ + 14.0, + 8.0, + 12.0 + ] + }, + { + "id": 405, + "relativePosition": [ + 14.0, + 7.8, + 13.0 + ] + }, + { + "id": 406, + "relativePosition": [ + 14.0, + 8.0, + 13.0 + ] + }, + { + "id": 407, + "relativePosition": [ + 14.0, + 15.0, + 7.0 + ] + }, + { + "id": 408, + "relativePosition": [ + 14.0, + 14.0, + 7.0 + ] + }, + { + "id": 409, + "relativePosition": [ + 14.0, + 14.0, + 8.0 + ] + }, + { + "id": 410, + "relativePosition": [ + 14.0, + 14.0, + 9.0 + ] + }, + { + "id": 411, + "relativePosition": [ + 14.0, + 14.0, + 10.0 + ] + }, + { + "id": 412, + "relativePosition": [ + 14.0, + 14.0, + 11.0 + ] + }, + { + "id": 413, + "relativePosition": [ + 14.0, + 14.0, + 12.0 + ] + }, + { + "id": 414, + "relativePosition": [ + 14.0, + 14.0, + 13.0 + ] + }, + { + "id": 415, + "relativePosition": [ + 14.0, + 15.0, + 13.0 + ] + }, + { + "id": 416, + "relativePosition": [ + 13.2, + 16.0, + 7.0 + ] + }, + { + "id": 417, + "relativePosition": [ + 14.0, + 15.5, + 7.0 + ] + }, + { + "id": 418, + "relativePosition": [ + 14.0, + 15.5, + 8.0 + ] + }, + { + "id": 419, + "relativePosition": [ + 13.2, + 16.0, + 8.0 + ] + }, + { + "id": 420, + "relativePosition": [ + 14.0, + 15.5, + 9.0 + ] + }, + { + "id": 421, + "relativePosition": [ + 13.2, + 16.0, + 9.0 + ] + }, + { + "id": 422, + "relativePosition": [ + 14.0, + 15.5, + 10.0 + ] + }, + { + "id": 423, + "relativePosition": [ + 13.2, + 16.0, + 10.0 + ] + }, + { + "id": 424, + "relativePosition": [ + 14.0, + 15.5, + 11.0 + ] + }, + { + "id": 425, + "relativePosition": [ + 13.2, + 16.0, + 11.0 + ] + }, + { + "id": 426, + "relativePosition": [ + 14.0, + 15.5, + 12.0 + ] + }, + { + "id": 427, + "relativePosition": [ + 13.2, + 16.0, + 12.0 + ] + }, + { + "id": 428, + "relativePosition": [ + 14.0, + 15.5, + 13.0 + ] + }, + { + "id": 429, + "relativePosition": [ + 13.2, + 16.0, + 13.0 + ] + }, + { + "id": 430, + "relativePosition": [ + 14.5, + 7.0, + 7.0 + ] + }, + { + "id": 431, + "relativePosition": [ + 14.5, + 7.0, + 8.0 + ] + }, + { + "id": 432, + "relativePosition": [ + 14.5, + 7.0, + 9.0 + ] + }, + { + "id": 433, + "relativePosition": [ + 14.5, + 7.0, + 10.0 + ] + }, + { + "id": 434, + "relativePosition": [ + 14.5, + 7.0, + 11.0 + ] + }, + { + "id": 435, + "relativePosition": [ + 14.5, + 7.0, + 12.0 + ] + }, + { + "id": 436, + "relativePosition": [ + 14.5, + 7.0, + 13.0 + ] + }, + { + "id": 437, + "relativePosition": [ + 15.0, + 8.0, + 7.0 + ] + }, + { + "id": 438, + "relativePosition": [ + 15.0, + 7.5, + 7.0 + ] + }, + { + "id": 439, + "relativePosition": [ + 15.0, + 7.5, + 8.0 + ] + }, + { + "id": 440, + "relativePosition": [ + 15.0, + 7.5, + 9.0 + ] + }, + { + "id": 441, + "relativePosition": [ + 15.0, + 7.5, + 10.0 + ] + }, + { + "id": 442, + "relativePosition": [ + 15.0, + 7.5, + 11.0 + ] + }, + { + "id": 443, + "relativePosition": [ + 15.0, + 7.5, + 12.0 + ] + }, + { + "id": 444, + "relativePosition": [ + 15.0, + 7.5, + 13.0 + ] + }, + { + "id": 445, + "relativePosition": [ + 15.0, + 8.0, + 13.0 + ] + }, + { + "id": 446, + "relativePosition": [ + 14.65, + 9.0, + 7.0 + ] + }, + { + "id": 447, + "relativePosition": [ + 15.0, + 9.0, + 7.0 + ] + }, + { + "id": 448, + "relativePosition": [ + 14.65, + 9.0, + 8.0 + ] + }, + { + "id": 449, + "relativePosition": [ + 14.65, + 9.0, + 9.0 + ] + }, + { + "id": 450, + "relativePosition": [ + 14.65, + 9.0, + 10.0 + ] + }, + { + "id": 451, + "relativePosition": [ + 14.65, + 9.0, + 11.0 + ] + }, + { + "id": 452, + "relativePosition": [ + 14.65, + 9.0, + 12.0 + ] + }, + { + "id": 453, + "relativePosition": [ + 14.65, + 9.0, + 13.0 + ] + }, + { + "id": 454, + "relativePosition": [ + 15.0, + 9.0, + 13.0 + ] + }, + { + "id": 455, + "relativePosition": [ + 15.0, + 10.0, + 7.0 + ] + }, + { + "id": 456, + "relativePosition": [ + 15.0, + 10.0, + 8.0 + ] + }, + { + "id": 457, + "relativePosition": [ + 15.0, + 10.0, + 9.0 + ] + }, + { + "id": 458, + "relativePosition": [ + 15.0, + 10.0, + 10.0 + ] + }, + { + "id": 459, + "relativePosition": [ + 15.0, + 10.0, + 11.0 + ] + }, + { + "id": 460, + "relativePosition": [ + 15.0, + 10.0, + 12.0 + ] + }, + { + "id": 461, + "relativePosition": [ + 15.0, + 10.0, + 13.0 + ] + }, + { + "id": 462, + "relativePosition": [ + 15.0, + 10.2, + 7.0 + ] + }, + { + "id": 463, + "relativePosition": [ + 15.0, + 10.2, + 8.0 + ] + }, + { + "id": 464, + "relativePosition": [ + 15.0, + 11.0, + 8.0 + ] + }, + { + "id": 465, + "relativePosition": [ + 15.0, + 11.0, + 7.0 + ] + }, + { + "id": 466, + "relativePosition": [ + 15.0, + 10.2, + 9.0 + ] + }, + { + "id": 467, + "relativePosition": [ + 15.0, + 11.0, + 9.0 + ] + }, + { + "id": 468, + "relativePosition": [ + 15.0, + 10.2, + 10.0 + ] + }, + { + "id": 469, + "relativePosition": [ + 15.0, + 11.0, + 10.0 + ] + }, + { + "id": 470, + "relativePosition": [ + 15.0, + 10.2, + 11.0 + ] + }, + { + "id": 471, + "relativePosition": [ + 15.0, + 11.0, + 11.0 + ] + }, + { + "id": 472, + "relativePosition": [ + 15.0, + 10.2, + 12.0 + ] + }, + { + "id": 473, + "relativePosition": [ + 15.0, + 11.0, + 12.0 + ] + }, + { + "id": 474, + "relativePosition": [ + 15.0, + 10.2, + 13.0 + ] + }, + { + "id": 475, + "relativePosition": [ + 15.0, + 11.0, + 13.0 + ] + }, + { + "id": 476, + "relativePosition": [ + 15.0, + 11.65, + 8.0 + ] + }, + { + "id": 477, + "relativePosition": [ + 15.0, + 11.65, + 7.0 + ] + }, + { + "id": 478, + "relativePosition": [ + 15.0, + 12.0, + 8.0 + ] + }, + { + "id": 479, + "relativePosition": [ + 15.0, + 12.0, + 7.0 + ] + }, + { + "id": 480, + "relativePosition": [ + 15.0, + 11.65, + 9.0 + ] + }, + { + "id": 481, + "relativePosition": [ + 15.0, + 12.0, + 9.0 + ] + }, + { + "id": 482, + "relativePosition": [ + 15.0, + 11.65, + 10.0 + ] + }, + { + "id": 483, + "relativePosition": [ + 15.0, + 12.0, + 10.0 + ] + }, + { + "id": 484, + "relativePosition": [ + 15.0, + 11.65, + 11.0 + ] + }, + { + "id": 485, + "relativePosition": [ + 15.0, + 12.0, + 11.0 + ] + }, + { + "id": 486, + "relativePosition": [ + 15.0, + 11.65, + 12.0 + ] + }, + { + "id": 487, + "relativePosition": [ + 15.0, + 12.0, + 12.0 + ] + }, + { + "id": 488, + "relativePosition": [ + 15.0, + 11.65, + 13.0 + ] + }, + { + "id": 489, + "relativePosition": [ + 15.0, + 12.0, + 13.0 + ] + }, + { + "id": 490, + "relativePosition": [ + 14.65, + 13.0, + 7.0 + ] + }, + { + "id": 491, + "relativePosition": [ + 15.0, + 13.0, + 7.0 + ] + }, + { + "id": 492, + "relativePosition": [ + 14.65, + 13.0, + 8.0 + ] + }, + { + "id": 493, + "relativePosition": [ + 14.65, + 13.0, + 9.0 + ] + }, + { + "id": 494, + "relativePosition": [ + 14.65, + 13.0, + 10.0 + ] + }, + { + "id": 495, + "relativePosition": [ + 14.65, + 13.0, + 11.0 + ] + }, + { + "id": 496, + "relativePosition": [ + 14.65, + 13.0, + 12.0 + ] + }, + { + "id": 497, + "relativePosition": [ + 14.65, + 13.0, + 13.0 + ] + }, + { + "id": 498, + "relativePosition": [ + 15.0, + 13.0, + 13.0 + ] + }, + { + "id": 499, + "relativePosition": [ + 15.0, + 14.0, + 7.0 + ] + }, + { + "id": 500, + "relativePosition": [ + 15.0, + 14.0, + 13.0 + ] + }, + { + "id": 501, + "relativePosition": [ + 14.5, + 15.0, + 7.0 + ] + }, + { + "id": 502, + "relativePosition": [ + 15.0, + 14.35, + 7.0 + ] + }, + { + "id": 503, + "relativePosition": [ + 15.0, + 14.35, + 8.0 + ] + }, + { + "id": 504, + "relativePosition": [ + 14.5, + 15.0, + 8.0 + ] + }, + { + "id": 505, + "relativePosition": [ + 15.0, + 14.35, + 9.0 + ] + }, + { + "id": 506, + "relativePosition": [ + 14.5, + 15.0, + 9.0 + ] + }, + { + "id": 507, + "relativePosition": [ + 15.0, + 14.35, + 10.0 + ] + }, + { + "id": 508, + "relativePosition": [ + 14.5, + 15.0, + 10.0 + ] + }, + { + "id": 509, + "relativePosition": [ + 15.0, + 14.35, + 11.0 + ] + }, + { + "id": 510, + "relativePosition": [ + 14.5, + 15.0, + 11.0 + ] + }, + { + "id": 511, + "relativePosition": [ + 15.0, + 14.35, + 12.0 + ] + }, + { + "id": 512, + "relativePosition": [ + 14.5, + 15.0, + 12.0 + ] + }, + { + "id": 513, + "relativePosition": [ + 15.0, + 14.35, + 13.0 + ] + }, + { + "id": 514, + "relativePosition": [ + 14.5, + 15.0, + 13.0 + ] + }, + { + "id": 515, + "relativePosition": [ + 15.35, + 8.0, + 7.0 + ] + }, + { + "id": 516, + "relativePosition": [ + 15.35, + 8.0, + 8.0 + ] + }, + { + "id": 517, + "relativePosition": [ + 15.35, + 8.0, + 9.0 + ] + }, + { + "id": 518, + "relativePosition": [ + 15.35, + 8.0, + 10.0 + ] + }, + { + "id": 519, + "relativePosition": [ + 15.35, + 8.0, + 11.0 + ] + }, + { + "id": 520, + "relativePosition": [ + 15.35, + 8.0, + 12.0 + ] + }, + { + "id": 521, + "relativePosition": [ + 15.35, + 8.0, + 13.0 + ] + }, + { + "id": 522, + "relativePosition": [ + 15.8, + 9.0, + 7.0 + ] + }, + { + "id": 523, + "relativePosition": [ + 15.8, + 9.0, + 8.0 + ] + }, + { + "id": 524, + "relativePosition": [ + 15.8, + 9.0, + 9.0 + ] + }, + { + "id": 525, + "relativePosition": [ + 15.8, + 9.0, + 10.0 + ] + }, + { + "id": 526, + "relativePosition": [ + 15.8, + 9.0, + 11.0 + ] + }, + { + "id": 527, + "relativePosition": [ + 15.8, + 9.0, + 12.0 + ] + }, + { + "id": 528, + "relativePosition": [ + 15.8, + 9.0, + 13.0 + ] + }, + { + "id": 529, + "relativePosition": [ + 16.0, + 10.0, + 7.0 + ] + }, + { + "id": 530, + "relativePosition": [ + 16.0, + 10.0, + 8.0 + ] + }, + { + "id": 531, + "relativePosition": [ + 16.0, + 10.0, + 9.0 + ] + }, + { + "id": 532, + "relativePosition": [ + 16.0, + 10.0, + 10.0 + ] + }, + { + "id": 533, + "relativePosition": [ + 16.0, + 10.0, + 11.0 + ] + }, + { + "id": 534, + "relativePosition": [ + 16.0, + 10.0, + 12.0 + ] + }, + { + "id": 535, + "relativePosition": [ + 16.0, + 10.0, + 13.0 + ] + }, + { + "id": 536, + "relativePosition": [ + 16.0, + 11.0, + 7.0 + ] + }, + { + "id": 537, + "relativePosition": [ + 16.0, + 11.0, + 8.0 + ] + }, + { + "id": 538, + "relativePosition": [ + 16.0, + 11.0, + 9.0 + ] + }, + { + "id": 539, + "relativePosition": [ + 16.0, + 11.0, + 10.0 + ] + }, + { + "id": 540, + "relativePosition": [ + 16.0, + 11.0, + 11.0 + ] + }, + { + "id": 541, + "relativePosition": [ + 16.0, + 11.0, + 12.0 + ] + }, + { + "id": 542, + "relativePosition": [ + 16.0, + 11.0, + 13.0 + ] + }, + { + "id": 543, + "relativePosition": [ + 16.0, + 12.0, + 7.0 + ] + }, + { + "id": 544, + "relativePosition": [ + 16.0, + 11.8, + 7.0 + ] + }, + { + "id": 545, + "relativePosition": [ + 16.0, + 11.8, + 8.0 + ] + }, + { + "id": 546, + "relativePosition": [ + 16.0, + 12.0, + 8.0 + ] + }, + { + "id": 547, + "relativePosition": [ + 16.0, + 11.8, + 9.0 + ] + }, + { + "id": 548, + "relativePosition": [ + 16.0, + 12.0, + 9.0 + ] + }, + { + "id": 549, + "relativePosition": [ + 16.0, + 11.8, + 10.0 + ] + }, + { + "id": 550, + "relativePosition": [ + 16.0, + 12.0, + 10.0 + ] + }, + { + "id": 551, + "relativePosition": [ + 16.0, + 11.8, + 11.0 + ] + }, + { + "id": 552, + "relativePosition": [ + 16.0, + 12.0, + 11.0 + ] + }, + { + "id": 553, + "relativePosition": [ + 16.0, + 11.8, + 12.0 + ] + }, + { + "id": 554, + "relativePosition": [ + 16.0, + 12.0, + 12.0 + ] + }, + { + "id": 555, + "relativePosition": [ + 16.0, + 11.8, + 13.0 + ] + }, + { + "id": 556, + "relativePosition": [ + 16.0, + 12.0, + 13.0 + ] + }, + { + "id": 557, + "relativePosition": [ + 15.65, + 13.0, + 7.0 + ] + }, + { + "id": 558, + "relativePosition": [ + 15.65, + 13.0, + 8.0 + ] + }, + { + "id": 559, + "relativePosition": [ + 15.65, + 13.0, + 9.0 + ] + }, + { + "id": 560, + "relativePosition": [ + 15.65, + 13.0, + 10.0 + ] + }, + { + "id": 561, + "relativePosition": [ + 15.65, + 13.0, + 11.0 + ] + }, + { + "id": 562, + "relativePosition": [ + 15.65, + 13.0, + 12.0 + ] + }, + { + "id": 563, + "relativePosition": [ + 15.65, + 13.0, + 13.0 + ] + }, + { + "id": 564, + "relativePosition": [ + 15.2, + 14.0, + 7.0 + ] + }, + { + "id": 565, + "relativePosition": [ + 15.2, + 14.0, + 8.0 + ] + }, + { + "id": 566, + "relativePosition": [ + 15.2, + 14.0, + 9.0 + ] + }, + { + "id": 567, + "relativePosition": [ + 15.2, + 14.0, + 10.0 + ] + }, + { + "id": 568, + "relativePosition": [ + 15.2, + 14.0, + 11.0 + ] + }, + { + "id": 569, + "relativePosition": [ + 15.2, + 14.0, + 12.0 + ] + }, + { + "id": 570, + "relativePosition": [ + 15.2, + 14.0, + 13.0 + ] + }, + { + "id": 571, + "relativePosition": [ + 10.0, + 6.0, + 13.0 + ] + }, + { + "id": 572, + "relativePosition": [ + 11.0, + 6.0, + 13.0 + ] + } + ], + "elements": [ + { + "id": 1, + "type": "conformalSurface", + "intervals": [], + "triangles": [] + }, + { + "id": 2, + "type": "polyline", + "coordinateIds": [ + 571, + 572 + ] + }, + { + "id": 3, + "type": "cell", + "intervals": [ + [ + [ + 10, + 13, + 6 + ], + [ + 10, + 21, + 14 + ] + ] + ] + }, + { + "id": 4, + "type": "node", + "coordinateIds": [ + 572 + ] + } + ] + }, + "materials": [ + { + "name": "PEC", + "id": 1, + "type": "pec" + }, + { + "name": "Isotropic_Material", + "id": 2, + "type": "isotropic", + "relativePermittivity": 1.0, + "relativePermeability": 1.0, + "electricConductivity": 5000.0, + "magneticConductivity": 0.0 + }, + { + "name": "Wire_material", + "id": 3, + "type": "wire", + "radius": 0.0001, + "resistancePerMeter": 0.0, + "inductancePerMeter": 0.0 + }, + { + "name": "Terminal", + "id": 4, + "type": "terminal", + "terminations": [ + { + "type": "series", + "resistance": 0.1, + "capacitance": 1e+22 + } + ] + }, + { + "name": "Short", + "id": 5, + "type": "terminal", + "terminations": [ + { + "type": "short" + } + ] + } + ], + "materialAssociations": [ + { + "materialId": 1, + "elementIds": [ + 1 + ] + }, + { + "name": "Cable", + "type": "cable", + "elementIds": [ + 2 + ], + "materialId": 3, + "initialTerminalId": 4, + "endTerminalId": 5 + } + ], + "sources": [ + { + "name": "Generator", + "type": "generator", + "magnitudeFile": "predefinedExcitation.1.exc", + "elementIds": [ + 4 + ], + "field": "voltage" + } + ], + "probes": [ + { + "name": "BulkProbe", + "type": "bulkCurrent", + "field": "electric", + "elementIds": [ + 3 + ], + "domain": { + "type": "time" + } + } + ] +} \ No newline at end of file From 708755c10495dcc370355e51fa633ee0c632a8b1 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 15:40:52 +0100 Subject: [PATCH 03/35] Typo in smbjson. Changes buildConformalMedia to buildConformalVolume, to separate construction of volumes and surfaces --- src_conformal/conformal.F90 | 2 +- src_json_parser/smbjson.F90 | 2 +- src_main_pub/healer.F90 | 5 +- src_main_pub/preprocess_geom.F90 | 110 +++++++++++++++---------------- test/conformal/test_filling.F90 | 24 +++---- 5 files changed, 70 insertions(+), 73 deletions(-) diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index ca0eb3f18..ca9d2e17a 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -21,7 +21,7 @@ function buildSideMaps(regions) result(res) end do end function - function buildConformalMedia(regions) result(res) + function buildConformalVolumes(regions) result(res) type(ConformalPECRegions), intent(in) :: regions type(ConformalMedia_t), dimension(:), allocatable :: res integer :: i diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index ed2d5d05d..b0665f8bd 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -260,7 +260,7 @@ subroutine addElements(mesh) call mesh%addCellRegion(id, cR) end block - case (J_ELEM_TYPE_CONF_VOLUME, J_ELEM_TYPE_CONF_VOLUME) + case (J_ELEM_TYPE_CONF_VOLUME, J_ELEM_TYPE_CONF_SURFACE) block type(conformal_region_t) :: cV type(coordinate_t) :: c diff --git a/src_main_pub/healer.F90 b/src_main_pub/healer.F90 index 2e591c529..9f0556ea0 100755 --- a/src_main_pub/healer.F90 +++ b/src_main_pub/healer.F90 @@ -64,10 +64,7 @@ SUBROUTINE CreateConformalPECVolume (layoutnumber, Mtag, tags, numertag, MMiEx, & NumMedia, BoundingBox,indicemedio) character(len=BUFSIZE) :: buff TYPE (Shared_t) :: Eshared - ! - ! type(ConformalMedia_t), intent(in) :: conformal_media - ! type(side_tris_map_t), intent(in) :: side_map - ! + INTEGER (KIND=4) :: NumMedia TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med ! diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 9a20d02a5..1361a1da2 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -107,7 +107,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! ! - type(ConformalMedia_t), dimension(:), allocatable :: conformal_media + type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes real(kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios type(side_tris_map_t), dimension(:), allocatable :: side_to_triangles_maps eps0=eps00; mu0=mu00; !chapuz para convertir la variables de paso en globales @@ -148,11 +148,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN integer :: m real :: min_scale_factor = 1.0, dt if (associated(this%conformalRegs%volumes)) then - conformal_media = buildConformalMedia(this%conformalRegs) + conformal_volumes = buildConformalVolumes(this%conformalRegs) side_to_triangles_maps = buildSideMaps(this%conformalRegs) - do m = 1, ubound(conformal_media,1) - if (conformal_media(m)%time_step_scale_factor < min_scale_factor) then - min_scale_factor = conformal_media(m)%time_step_scale_factor + do m = 1, ubound(conformal_volumes,1) + if (conformal_volumes(m)%time_step_scale_factor < min_scale_factor) then + min_scale_factor = conformal_volumes(m)%time_step_scale_factor end if end do dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & @@ -165,7 +165,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN write(*,*) 'New time step: ', sgg%dt end if else - allocate(conformal_media(0)) + allocate(conformal_volumes(0)) end if end block @@ -218,8 +218,8 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! contamedia = contamedia + this%conformalRegs%nEdges + this%conformalRegs%nFaces - edge_ratios = getDifferentEdgeRatios(conformal_media) - face_ratios = getDifferentFaceRatios(conformal_media) + edge_ratios = getDifferentEdgeRatios(conformal_volumes) + face_ratios = getDifferentFaceRatios(conformal_volumes) contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 @@ -2572,10 +2572,10 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do !END SLANTED WIRES - do j = 1, ubound(conformal_media,1) + do j = 1, ubound(conformal_volumes,1) - call addConformalMedia(sgg, media, conformal_media(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j)) - numertag = searchtag(tagtype,conformal_media(j)%tag) + call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j)) + numertag = searchtag(tagtype,conformal_volumes(j)%tag) CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & @@ -4840,31 +4840,31 @@ subroutine initConformalBoundingBox(sgg, bbox) bbox%ZE = -sgg%Alloc(iHz)%ZE end subroutine - function getDifferentEdgeRatios(conformal_media) result(res) - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_media + function getDifferentEdgeRatios(conformal_volumes) result(res) + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_volumes integer :: i, j, k real (kind=rkind), dimension(:), allocatable :: aux real (kind=rkind), dimension(:), allocatable :: res logical :: isNew allocate(res(0)) - do i = 1, ubound(conformal_media,1) - do j = 1, ubound(conformal_media(i)%edge_media,1) + do i = 1, ubound(conformal_volumes,1) + do j = 1, ubound(conformal_volumes(i)%edge_media,1) isNew = .true. do k = 1, ubound(res,1) - if (eq_ratio(res(k), conformal_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. + if (eq_ratio(res(k), conformal_volumes(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. end do if (isNew) then block if (ubound(res,1) == 0) then deallocate(res) allocate(res(1)) - res(1) = conformal_media(i)%edge_media(j)%ratio + res(1) = conformal_volumes(i)%edge_media(j)%ratio else if (allocated(aux)) deallocate(aux) allocate(aux(ubound(res,1) + 1)) aux(1:ubound(res,1)) = res - aux(ubound(res,1) + 1) = conformal_media(i)%edge_media(j)%ratio + aux(ubound(res,1) + 1) = conformal_volumes(i)%edge_media(j)%ratio deallocate(res) allocate(res(ubound(aux,1))) res = aux @@ -4874,31 +4874,31 @@ function getDifferentEdgeRatios(conformal_media) result(res) end do end do end function - function getDifferentFaceRatios(conformal_media) result(res) - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_media + function getDifferentFaceRatios(conformal_volumes) result(res) + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_volumes integer :: i, j, k real (kind=rkind), dimension(:), allocatable :: res real (kind=rkind), dimension(:), allocatable :: aux logical :: isNew allocate(res(0)) - do i = 1, ubound(conformal_media,1) - do j = 1, ubound(conformal_media(i)%face_media,1) + do i = 1, ubound(conformal_volumes,1) + do j = 1, ubound(conformal_volumes(i)%face_media,1) isNew = .true. do k = 1, ubound(res,1) - if (eq_ratio(res(k), conformal_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. + if (eq_ratio(res(k), conformal_volumes(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. end do if (isNew) then block if (ubound(res,1) == 0) then deallocate(res) allocate(res(1)) - res(1) = conformal_media(i)%face_media(j)%ratio + res(1) = conformal_volumes(i)%face_media(j)%ratio else if (allocated(aux)) deallocate(aux) allocate(aux(ubound(res,1) + 1)) aux(1:ubound(res,1)) = res - aux(ubound(res,1) + 1) = conformal_media(i)%face_media(j)%ratio + aux(ubound(res,1) + 1) = conformal_volumes(i)%face_media(j)%ratio deallocate(res) allocate(res(ubound(aux,1))) res = aux @@ -4909,10 +4909,10 @@ function getDifferentFaceRatios(conformal_media) result(res) end do end function - subroutine addConformalMedia(sgg, media, conformal_media, edge_ratios, face_ratios, contamedia, bbox, side_map) + subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map) type(sggfdtdinfo), intent(inout) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_media + type(ConformalMedia_t), intent(in) :: conformal_volumes real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios real(kind=rkind), dimension(:), allocatable :: edge_ratios_no_zero, face_ratios_no_zero integer (kind=4), intent(in) :: contamedia @@ -4948,16 +4948,16 @@ subroutine addConformalMedia(sgg, media, conformal_media, edge_ratios, face_rati face_ratios_no_zero = face_ratios end if num_media = contamedia - call addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ratios_no_zero, bbox) + call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox) num_media = contamedia + ubound(edge_ratios_no_zero,1) - call addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ratios_no_zero, bbox) - call addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge_ratios_no_zero, bbox, side_map) + call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox) + call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) end subroutine - subroutine addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ratios, bbox) + subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox) type (SGGFDTDINFO), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_media + type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios @@ -4965,22 +4965,22 @@ subroutine addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ra integer (kind=4) :: cell(3) type(XYZlimit_t), intent(inout) :: bbox integer :: j, k - do j = 1, conformal_media%n_faces_media - if (conformal_media%face_media(j)%ratio /= 0) then - face_media = num_media + findloc(face_ratios, conformal_media%face_media(j)%ratio, 1) + do j = 1, conformal_volumes%n_faces_media + if (conformal_volumes%face_media(j)%ratio /= 0) then + face_media = num_media + findloc(face_ratios, conformal_volumes%face_media(j)%ratio, 1) sgg%Med(face_media)%Is%ConformalPEC = .TRUE. sgg%Med(face_media)%Is%Needed = .TRUE. sgg%Med(face_media)%Is%Volume = .TRUE. sgg%Med(face_media)%Priority = prior_PEC sgg%Med(face_media)%Epr = this%mats%mats(1)%eps / Eps0 sgg%Med(face_media)%Sigma = 1.0e29_RKIND - sgg%Med(face_media)%Mur = conformal_media%face_media(j)%ratio * this%mats%mats(1)%mu / Mu0 + sgg%Med(face_media)%Mur = conformal_volumes%face_media(j)%ratio * this%mats%mats(1)%mu / Mu0 sgg%Med(face_media)%SigmaM = 0.0_RKIND else face_media = 0 end if - do k = 1, conformal_media%face_media(j)%size - cell(:) = conformal_media%face_media(j)%faces(k)%cell(:) + do k = 1, conformal_volumes%face_media(j)%size + cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) if (cell(1) < bbox%xi) bbox%xi = cell(1) if (cell(1) > bbox%xe) bbox%xe = cell(1) if (cell(2) < bbox%yi) bbox%yi = cell(2) @@ -4988,7 +4988,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ra if (cell(3) < bbox%zi) bbox%zi = cell(3) if (cell(3) > bbox%ze) bbox%ze = cell(3) - select case(conformal_media%face_media(j)%faces(k)%direction) + select case(conformal_volumes%face_media(j)%faces(k)%direction) case(F_X) media%sggMiHx(cell(1), cell(2), cell(3)) = face_media case(F_Y) @@ -5013,10 +5013,10 @@ function getEdgeNormalFromTriangles(triangles) result(res) res = res/ubound(triangles,1) end function - subroutine addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ratios, bbox) + subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox) type (SGGFDTDINFO), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_media + type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios @@ -5027,22 +5027,22 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ra integer :: j, k real, dimension(3) :: normal - do j = 1, conformal_media%n_edges_media - if (conformal_media%edge_media(j)%ratio /= 0) then - edge_media = num_media + findloc(edge_ratios, conformal_media%edge_media(j)%ratio,1) + do j = 1, conformal_volumes%n_edges_media + if (conformal_volumes%edge_media(j)%ratio /= 0) then + edge_media = num_media + findloc(edge_ratios, conformal_volumes%edge_media(j)%ratio,1) sgg%Med(edge_media)%Is%ConformalPEC = .TRUE. sgg%Med(edge_media)%Is%Needed = .TRUE. sgg%Med(edge_media)%Is%Volume = .TRUE. sgg%Med(edge_media)%Priority = prior_PEC - sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_media%edge_media(j)%ratio ) / Eps0 + sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_volumes%edge_media(j)%ratio ) / Eps0 sgg%Med(edge_media)%Sigma = 1.0e29_RKIND sgg%Med(edge_media)%Mur = this%mats%mats(1)%mu / Mu0 sgg%Med(edge_media)%SigmaM = 0.0_RKIND else edge_media = 0 end if - do k = 1, conformal_media%edge_media(j)%size - cell(:) = conformal_media%edge_media(j)%edges(k)%cell(:) + do k = 1, conformal_volumes%edge_media(j)%size + cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) if (cell(1) < bbox%xi) bbox%xi = cell(1) if (cell(1) > bbox%xe) bbox%xe = cell(1) @@ -5051,7 +5051,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ra if (cell(3) < bbox%zi) bbox%zi = cell(3) if (cell(3) > bbox%ze) bbox%ze = cell(3) - select case(conformal_media%edge_media(j)%edges(k)%direction) + select case(conformal_volumes%edge_media(j)%edges(k)%direction) case(E_X) media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media case(E_Y) @@ -5063,10 +5063,10 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ra end do end subroutine - subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge_ratios, bbox, side_map) + subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) type (SGGFDTDINFO), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_media + type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios @@ -5079,14 +5079,14 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge integer :: j, k real, dimension(3) :: normal - do j = 1, conformal_media%n_edges_media - if (conformal_media%edge_media(j)%ratio == 0) then + do j = 1, conformal_volumes%n_edges_media + if (conformal_volumes%edge_media(j)%ratio == 0) then edge_media = 0 - do k = 1, conformal_media%edge_media(j)%size - cell(:) = conformal_media%edge_media(j)%edges(k)%cell(:) + do k = 1, conformal_volumes%edge_media(j)%size + cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) key(1:3) = cell - select case(conformal_media%edge_media(j)%edges(k)%direction) + select case(conformal_volumes%edge_media(j)%edges(k)%direction) case(E_X) key(4) = E_X if (side_map%hasKey(key)) then diff --git a/test/conformal/test_filling.F90 b/test/conformal/test_filling.F90 index 3bf1d57d9..43f1f4761 100644 --- a/test/conformal/test_filling.F90 +++ b/test/conformal/test_filling.F90 @@ -36,7 +36,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -64,7 +64,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -132,7 +132,7 @@ integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -162,7 +162,7 @@ integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -228,7 +228,7 @@ integer function test_conformal_filling_off_face_triangle_z() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -256,7 +256,7 @@ integer function test_conformal_filling_off_face_triangle_z() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -320,7 +320,7 @@ integer function test_conformal_filling_open() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 1) err = err + 1 @@ -385,7 +385,7 @@ integer function test_conformal_filling_closed() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 1) err = err + 1 @@ -447,7 +447,7 @@ integer function test_conformal_edge_next_cell() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 4) err = err + 1 @@ -520,7 +520,7 @@ integer function test_conformal_filling_closed_corner() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 1) err = err + 1 @@ -615,7 +615,7 @@ integer function test_conformal_filling_block_and_corner() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -719,7 +719,7 @@ integer function test_conformal_filling_cylinder_base_on_grid_plane() bind(C) re allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalMedia(cR) + cMs = buildConformalVolumes(cR) cM = cMs(1) ! if (size(cM%edge_media) /= 1) err = err + 1 From 05836c28f279c18d69647f451a74dc37b7e4aa9c Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 16:14:52 +0100 Subject: [PATCH 04/35] Minor refactorization to improve encapsulation --- src_conformal/conformal.F90 | 14 ++++++ src_main_pub/preprocess_geom.F90 | 82 +++++++++++++++++++++----------- 2 files changed, 69 insertions(+), 27 deletions(-) diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index ca9d2e17a..8d8667c2a 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -31,6 +31,20 @@ function buildConformalVolumes(regions) result(res) end do end function + function buildConformalSurfaces(regions) result(res) + type(ConformalPECRegions), intent(in) :: regions + type(ConformalMedia_t), dimension(:), allocatable :: res + integer :: i + allocate(res(size(regions%surfaces))) + do i = 1, size(regions%surfaces) + res(i) = buildConformalSurface(regions%surfaces(i)) + end do + end function + + function buildConformalSurface(surface) result(res) + type(ConformalPECElements), intent(in) :: surface + type(ConformalMedia_t) :: res + end function function buildConformalVolume(volume) result(res) type(ConformalPECElements), intent(in) :: volume diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 1361a1da2..6edb90487 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -107,7 +107,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! ! - type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes + type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes, conformal_surfaces real(kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios type(side_tris_map_t), dimension(:), allocatable :: side_to_triangles_maps eps0=eps00; mu0=mu00; !chapuz para convertir la variables de paso en globales @@ -143,32 +143,9 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%EShared%MaxConta = 10 ALLOCATE (sgg%EShared%elem(1:sgg%EShared%MaxConta)) - - block - integer :: m - real :: min_scale_factor = 1.0, dt - if (associated(this%conformalRegs%volumes)) then - conformal_volumes = buildConformalVolumes(this%conformalRegs) - side_to_triangles_maps = buildSideMaps(this%conformalRegs) - do m = 1, ubound(conformal_volumes,1) - if (conformal_volumes(m)%time_step_scale_factor < min_scale_factor) then - min_scale_factor = conformal_volumes(m)%time_step_scale_factor - end if - end do - dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & - ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & - ((1.0_RKIND / minval(sgg%DZ))**2.0_RKIND )))) - if (sgg%dt > dt*min_scale_factor) then - write(*,*) '-- Conformal geometry requires a time step change' - write(*,*) 'Previous time step: ', sgg%dt - sgg%dt = dt*min_scale_factor - write(*,*) 'New time step: ', sgg%dt - end if - else - allocate(conformal_volumes(0)) - end if - end block - + call buildConformalMedia(this%conformalRegs, conformal_volumes, conformal_surfaces) + sgg%dt = changeTimeStepIfConformalNeeded(sgg%dt) + if (associated(this%conformalRegs%volumes)) side_to_triangles_maps = buildSideMaps(this%conformalRegs) ! Cuenta los medios !!!!!calcula tamanios @@ -4829,6 +4806,57 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + subroutine buildConformalMedia(conformalRegs, volumes, surfaces) + type(ConformalPECRegions), pointer, intent(in) :: conformalRegs + type(ConformalMedia_t), allocatable, dimension(:), intent(inout) :: volumes, surfaces + if (associated(conformalRegs%volumes)) then + volumes = buildConformalVolumes(conformalRegs) + else + allocate(volumes(0)) + end if + if (associated(conformalRegs%surfaces)) then + surfaces = buildConformalSurfaces(conformalRegs) + else + allocate(surfaces(0)) + end if + end subroutine + + function computeConformalTimeFactor(volumes, surfaces) result(res) + type(ConformalMedia_t), allocatable, dimension(:), intent(in) :: volumes, surfaces + real(kind=rkind) :: res + integer :: i + res = 1.0 + do i = 1, ubound(volumes,1) + if (volumes(i)%time_step_scale_factor < res) then + res = volumes(i)%time_step_scale_factor + end if + end do + do i = 1, ubound(surfaces,1) + if (surfaces(i)%time_step_scale_factor < res) then + res = surfaces(i)%time_step_scale_factor + end if + end do + end function + + function changeTimeStepIfConformalNeeded(sgg_dt) result(res) + real(kind=rkind), intent(in) :: sgg_dt + real(kind=rkind) :: yee_dt, time_scale_factor + real(kind=rkind) :: res + time_scale_factor = computeConformalTimeFactor(conformal_volumes, conformal_surfaces) + yee_dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & + ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & + ((1.0_RKIND / minval(sgg%DZ))**2.0_RKIND )))) + if (sgg_dt > yee_dt*time_scale_factor) then + write(*,*) '-- Conformal geometry requires a time step change' + write(*,*) 'Previous time step: ', sgg_dt + res = yee_dt*time_scale_factor + write(*,*) 'New time step: ', res + else + res = sgg_dt + end if + + end function + subroutine initConformalBoundingBox(sgg, bbox) type(sggfdtdinfo), intent(in) :: sgg type(XYZlimit_t), intent(inout) :: bbox From f9388c5fdd747322690a9bb40aaf1148f8edeb26 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 16:16:06 +0100 Subject: [PATCH 05/35] Changes iter name to avoid conflict with variable in parent scope --- src_main_pub/preprocess_geom.F90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 6edb90487..e1e05533a 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -4824,16 +4824,16 @@ subroutine buildConformalMedia(conformalRegs, volumes, surfaces) function computeConformalTimeFactor(volumes, surfaces) result(res) type(ConformalMedia_t), allocatable, dimension(:), intent(in) :: volumes, surfaces real(kind=rkind) :: res - integer :: i + integer :: t res = 1.0 - do i = 1, ubound(volumes,1) - if (volumes(i)%time_step_scale_factor < res) then - res = volumes(i)%time_step_scale_factor + do t = 1, ubound(volumes,1) + if (volumes(t)%time_step_scale_factor < res) then + res = volumes(t)%time_step_scale_factor end if end do - do i = 1, ubound(surfaces,1) - if (surfaces(i)%time_step_scale_factor < res) then - res = surfaces(i)%time_step_scale_factor + do t = 1, ubound(surfaces,1) + if (surfaces(t)%time_step_scale_factor < res) then + res = surfaces(t)%time_step_scale_factor end if end do end function From 1de69ee32dec459ace59e8981ab74569ce4796db Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 16:37:16 +0100 Subject: [PATCH 06/35] Adds media identification from edges and face ratios to conformal surfaces --- src_main_pub/preprocess_geom.F90 | 88 ++++++++++++++++---------------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index e1e05533a..5063cb278 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -193,10 +193,13 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!! contamedia = contamedia +1 !para acomodar los nodal sources como caso especial de linea vacia - ! contamedia = contamedia + this%conformalRegs%nEdges + this%conformalRegs%nFaces - - edge_ratios = getDifferentEdgeRatios(conformal_volumes) - face_ratios = getDifferentFaceRatios(conformal_volumes) + + call getDifferentEdgeRatios(edge_ratios, conformal_volumes) + call getDifferentEdgeRatios(edge_ratios, conformal_surfaces) + call getDifferentFaceRatios(face_ratios, conformal_volumes) + call getDifferentFaceRatios(face_ratios, conformal_surfaces) + ! edge_ratios = getDifferentEdgeRatios(conformal_volumes) + ! face_ratios = getDifferentFaceRatios(conformal_volumes) contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 @@ -4868,74 +4871,73 @@ subroutine initConformalBoundingBox(sgg, bbox) bbox%ZE = -sgg%Alloc(iHz)%ZE end subroutine - function getDifferentEdgeRatios(conformal_volumes) result(res) - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_volumes + subroutine getDifferentEdgeRatios(ratios, conf_media) + real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media integer :: i, j, k real (kind=rkind), dimension(:), allocatable :: aux - real (kind=rkind), dimension(:), allocatable :: res logical :: isNew - allocate(res(0)) - do i = 1, ubound(conformal_volumes,1) - do j = 1, ubound(conformal_volumes(i)%edge_media,1) - + if (.not. allocated(ratios)) allocate(ratios(0)) + do i = 1, ubound(conf_media,1) + do j = 1, ubound(conf_media(i)%edge_media,1) isNew = .true. - do k = 1, ubound(res,1) - if (eq_ratio(res(k), conformal_volumes(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. + do k = 1, ubound(ratios,1) + if (eq_ratio(ratios(k), conf_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. end do if (isNew) then block - if (ubound(res,1) == 0) then - deallocate(res) - allocate(res(1)) - res(1) = conformal_volumes(i)%edge_media(j)%ratio + if (ubound(ratios,1) == 0) then + deallocate(ratios) + allocate(ratios(1)) + ratios(1) = conf_media(i)%edge_media(j)%ratio else if (allocated(aux)) deallocate(aux) - allocate(aux(ubound(res,1) + 1)) - aux(1:ubound(res,1)) = res - aux(ubound(res,1) + 1) = conformal_volumes(i)%edge_media(j)%ratio - deallocate(res) - allocate(res(ubound(aux,1))) - res = aux + allocate(aux(ubound(ratios,1) + 1)) + aux(1:ubound(ratios,1)) = ratios + aux(ubound(ratios,1) + 1) = conf_media(i)%edge_media(j)%ratio + deallocate(ratios) + allocate(ratios(ubound(aux,1))) + ratios = aux end if end block end if end do end do - end function - function getDifferentFaceRatios(conformal_volumes) result(res) - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_volumes + end subroutine + subroutine getDifferentFaceRatios(ratios, conf_media) + real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media integer :: i, j, k - real (kind=rkind), dimension(:), allocatable :: res real (kind=rkind), dimension(:), allocatable :: aux logical :: isNew - allocate(res(0)) - do i = 1, ubound(conformal_volumes,1) - do j = 1, ubound(conformal_volumes(i)%face_media,1) + if (.not. allocated(ratios)) allocate(ratios(0)) + do i = 1, ubound(conf_media,1) + do j = 1, ubound(conf_media(i)%face_media,1) isNew = .true. - do k = 1, ubound(res,1) - if (eq_ratio(res(k), conformal_volumes(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. + do k = 1, ubound(ratios,1) + if (eq_ratio(ratios(k), conf_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. end do if (isNew) then block - if (ubound(res,1) == 0) then - deallocate(res) - allocate(res(1)) - res(1) = conformal_volumes(i)%face_media(j)%ratio + if (ubound(ratios,1) == 0) then + deallocate(ratios) + allocate(ratios(1)) + ratios(1) = conf_media(i)%face_media(j)%ratio else if (allocated(aux)) deallocate(aux) - allocate(aux(ubound(res,1) + 1)) - aux(1:ubound(res,1)) = res - aux(ubound(res,1) + 1) = conformal_volumes(i)%face_media(j)%ratio - deallocate(res) - allocate(res(ubound(aux,1))) - res = aux + allocate(aux(ubound(ratios,1) + 1)) + aux(1:ubound(ratios,1)) = ratios + aux(ubound(ratios,1) + 1) = conf_media(i)%face_media(j)%ratio + deallocate(ratios) + allocate(ratios(ubound(aux,1))) + ratios = aux end if end block end if end do end do - end function + end subroutine subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map) type(sggfdtdinfo), intent(inout) :: sgg From eae8bb884c1f06b1234f9c7bb1d0e55833ee519b Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 27 Nov 2025 16:38:29 +0100 Subject: [PATCH 07/35] Minor, placeholder --- src_main_pub/nfde_types.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index f29859a7e..bc4316b06 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -164,6 +164,8 @@ MODULE NFDETypes TYPE (conformal_edge_media_t), DIMENSION (:), POINTER :: edge_media => NULL () real (kind=rkind) :: time_step_scale_factor = 1.0 character(len=bufsize) :: tag + !! something to deal with region II edges and faces + ! type(new_conf_t) :: thin_panels END TYPE ConformalMedia_t From 6846256aaa2e61f0c42b3f9c6cf39f86117f9304 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Fri, 28 Nov 2025 11:25:38 +0100 Subject: [PATCH 08/35] Adds prepost to test field inside hollow pec conformal sphere --- .../conformal_surface_sphere.fdtd.json | 32650 ++++++++++++++++ .../conformal_surface_sphere_prepost.py | 72 + .../cases/conformal_surface_sphere/gauss.exc | 22001 +++++++++++ 3 files changed, 54723 insertions(+) create mode 100644 testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json create mode 100644 testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py create mode 100644 testData/cases/conformal_surface_sphere/gauss.exc diff --git a/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json b/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json new file mode 100644 index 000000000..f196fd38f --- /dev/null +++ b/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json @@ -0,0 +1,32650 @@ +{ + "general": { + "numberOfSteps": 5000, + "timeStep": 7e-11 + }, + "boundary": { + "all": { + "type": "mur" + } + }, + "mesh": { + "grid": { + "steps": { + "x": [ + 0.05 + ], + "y": [ + 0.05 + ], + "z": [ + 0.05 + ] + }, + "numberOfCells": [ + 60, + 60, + 60 + ], + "origin": [ + -1.5, + -1.5, + -1.5 + ] + }, + "elements": [ + { + "id": 1, + "type": "conformalSurface", + "intervals": [], + "triangles": [ + [ + 1, + 2, + 3 + ], + [ + 1, + 3, + 4 + ], + [ + 4, + 3, + 5 + ], + [ + 4, + 5, + 6 + ], + [ + 6, + 5, + 7 + ], + [ + 6, + 7, + 8 + ], + [ + 8, + 7, + 9 + ], + [ + 8, + 9, + 10 + ], + [ + 5, + 3, + 11 + ], + [ + 5, + 11, + 12 + ], + [ + 5, + 12, + 13 + ], + [ + 5, + 13, + 7 + ], + [ + 10, + 9, + 14 + ], + [ + 10, + 14, + 15 + ], + [ + 7, + 13, + 16 + ], + [ + 3, + 2, + 17 + ], + [ + 7, + 16, + 18 + ], + [ + 15, + 14, + 19 + ], + [ + 7, + 18, + 9 + ], + [ + 3, + 17, + 11 + ], + [ + 15, + 19, + 20 + ], + [ + 2, + 1, + 21 + ], + [ + 9, + 18, + 14 + ], + [ + 20, + 19, + 22 + ], + [ + 12, + 23, + 24 + ], + [ + 12, + 11, + 25 + ], + [ + 18, + 26, + 14 + ], + [ + 20, + 22, + 27 + ], + [ + 12, + 24, + 13 + ], + [ + 28, + 19, + 14 + ], + [ + 13, + 24, + 29 + ], + [ + 12, + 25, + 23 + ], + [ + 26, + 18, + 16 + ], + [ + 26, + 28, + 14 + ], + [ + 13, + 29, + 16 + ], + [ + 2, + 21, + 30 + ], + [ + 19, + 28, + 31 + ], + [ + 11, + 17, + 32 + ], + [ + 16, + 29, + 26 + ], + [ + 19, + 31, + 22 + ], + [ + 26, + 33, + 34 + ], + [ + 11, + 32, + 25 + ], + [ + 22, + 35, + 27 + ], + [ + 26, + 34, + 28 + ], + [ + 27, + 35, + 36 + ], + [ + 29, + 33, + 26 + ], + [ + 22, + 35, + 37 + ], + [ + 24, + 38, + 29 + ], + [ + 23, + 39, + 38 + ], + [ + 27, + 36, + 40 + ], + [ + 23, + 25, + 41 + ], + [ + 2, + 30, + 42 + ], + [ + 29, + 38, + 43 + ], + [ + 23, + 38, + 24 + ], + [ + 23, + 41, + 44 + ], + [ + 31, + 22, + 37 + ], + [ + 28, + 34, + 45 + ], + [ + 29, + 43, + 46 + ], + [ + 23, + 44, + 39 + ], + [ + 2, + 42, + 17 + ], + [ + 28, + 45, + 31 + ], + [ + 35, + 37, + 47 + ], + [ + 29, + 46, + 33 + ], + [ + 35, + 47, + 48 + ], + [ + 33, + 46, + 49 + ], + [ + 35, + 48, + 36 + ], + [ + 31, + 45, + 37 + ], + [ + 33, + 49, + 50 + ], + [ + 40, + 36, + 51 + ], + [ + 45, + 34, + 50 + ], + [ + 33, + 50, + 34 + ], + [ + 39, + 52, + 38 + ], + [ + 32, + 53, + 25 + ], + [ + 53, + 41, + 25 + ], + [ + 45, + 54, + 37 + ], + [ + 52, + 43, + 38 + ], + [ + 55, + 32, + 17 + ], + [ + 40, + 51, + 56 + ], + [ + 42, + 55, + 17 + ], + [ + 56, + 51, + 57 + ], + [ + 44, + 52, + 39 + ], + [ + 37, + 54, + 58 + ], + [ + 52, + 59, + 60 + ], + [ + 37, + 58, + 47 + ], + [ + 36, + 48, + 51 + ], + [ + 43, + 60, + 61 + ], + [ + 44, + 41, + 62 + ], + [ + 52, + 60, + 43 + ], + [ + 56, + 57, + 63 + ], + [ + 50, + 64, + 45 + ], + [ + 44, + 62, + 52 + ], + [ + 48, + 65, + 51 + ], + [ + 43, + 61, + 66 + ], + [ + 48, + 47, + 65 + ], + [ + 50, + 49, + 64 + ], + [ + 43, + 66, + 46 + ], + [ + 67, + 54, + 45 + ], + [ + 32, + 55, + 68 + ], + [ + 64, + 69, + 45 + ], + [ + 46, + 66, + 49 + ], + [ + 62, + 70, + 52 + ], + [ + 65, + 71, + 51 + ], + [ + 69, + 67, + 45 + ], + [ + 70, + 59, + 52 + ], + [ + 41, + 53, + 72 + ], + [ + 32, + 68, + 53 + ], + [ + 41, + 72, + 62 + ], + [ + 71, + 57, + 51 + ], + [ + 47, + 58, + 73 + ], + [ + 42, + 30, + 74 + ], + [ + 66, + 75, + 49 + ], + [ + 47, + 73, + 65 + ], + [ + 54, + 67, + 58 + ], + [ + 76, + 64, + 49 + ], + [ + 42, + 74, + 77 + ], + [ + 63, + 57, + 78 + ], + [ + 75, + 76, + 49 + ], + [ + 62, + 72, + 79 + ], + [ + 42, + 77, + 80 + ], + [ + 64, + 76, + 81 + ], + [ + 66, + 61, + 75 + ], + [ + 65, + 73, + 82 + ], + [ + 62, + 79, + 70 + ], + [ + 42, + 80, + 55 + ], + [ + 65, + 82, + 71 + ], + [ + 67, + 83, + 58 + ], + [ + 64, + 81, + 69 + ], + [ + 60, + 59, + 84 + ], + [ + 78, + 85, + 63 + ], + [ + 60, + 84, + 86 + ], + [ + 59, + 70, + 87 + ], + [ + 88, + 72, + 53 + ], + [ + 60, + 86, + 61 + ], + [ + 89, + 73, + 58 + ], + [ + 69, + 83, + 67 + ], + [ + 83, + 90, + 58 + ], + [ + 61, + 86, + 91 + ], + [ + 85, + 92, + 63 + ], + [ + 57, + 71, + 78 + ], + [ + 59, + 87, + 84 + ], + [ + 68, + 88, + 53 + ], + [ + 61, + 91, + 93 + ], + [ + 30, + 21, + 94 + ], + [ + 90, + 89, + 58 + ], + [ + 95, + 68, + 55 + ], + [ + 61, + 93, + 96 + ], + [ + 61, + 96, + 75 + ], + [ + 30, + 94, + 74 + ], + [ + 71, + 97, + 78 + ], + [ + 69, + 81, + 98 + ], + [ + 80, + 99, + 55 + ], + [ + 75, + 96, + 100 + ], + [ + 79, + 101, + 70 + ], + [ + 99, + 95, + 55 + ], + [ + 102, + 79, + 72 + ], + [ + 97, + 103, + 78 + ], + [ + 69, + 98, + 83 + ], + [ + 75, + 100, + 76 + ], + [ + 88, + 102, + 72 + ], + [ + 84, + 104, + 86 + ], + [ + 103, + 85, + 78 + ], + [ + 83, + 98, + 105 + ], + [ + 100, + 81, + 76 + ], + [ + 101, + 87, + 70 + ], + [ + 68, + 95, + 88 + ], + [ + 106, + 97, + 71 + ], + [ + 89, + 82, + 73 + ], + [ + 82, + 106, + 71 + ], + [ + 83, + 105, + 90 + ], + [ + 104, + 91, + 86 + ], + [ + 81, + 100, + 107 + ], + [ + 79, + 102, + 108 + ], + [ + 92, + 85, + 109 + ], + [ + 84, + 87, + 104 + ], + [ + 92, + 109, + 110 + ], + [ + 81, + 107, + 111 + ], + [ + 97, + 106, + 112 + ], + [ + 89, + 113, + 82 + ], + [ + 77, + 114, + 115 + ], + [ + 77, + 74, + 116 + ], + [ + 96, + 117, + 100 + ], + [ + 79, + 108, + 101 + ], + [ + 95, + 118, + 88 + ], + [ + 89, + 90, + 113 + ], + [ + 113, + 119, + 82 + ], + [ + 87, + 120, + 104 + ], + [ + 97, + 112, + 103 + ], + [ + 81, + 111, + 121 + ], + [ + 104, + 122, + 123 + ], + [ + 77, + 115, + 80 + ], + [ + 124, + 106, + 82 + ], + [ + 125, + 102, + 88 + ], + [ + 117, + 107, + 100 + ], + [ + 117, + 96, + 93 + ], + [ + 118, + 125, + 88 + ], + [ + 77, + 116, + 114 + ], + [ + 119, + 124, + 82 + ], + [ + 81, + 121, + 98 + ], + [ + 91, + 123, + 93 + ], + [ + 120, + 126, + 127 + ], + [ + 104, + 123, + 91 + ], + [ + 90, + 105, + 113 + ], + [ + 105, + 98, + 121 + ], + [ + 117, + 93, + 123 + ], + [ + 95, + 99, + 118 + ], + [ + 103, + 128, + 85 + ], + [ + 120, + 127, + 122 + ], + [ + 129, + 109, + 85 + ], + [ + 120, + 87, + 101 + ], + [ + 130, + 99, + 80 + ], + [ + 110, + 109, + 131 + ], + [ + 113, + 132, + 133 + ], + [ + 117, + 123, + 134 + ], + [ + 120, + 122, + 104 + ], + [ + 1, + 135, + 136 + ], + [ + 105, + 132, + 113 + ], + [ + 115, + 130, + 80 + ], + [ + 110, + 131, + 137 + ], + [ + 74, + 94, + 138 + ], + [ + 128, + 129, + 85 + ], + [ + 112, + 139, + 103 + ], + [ + 117, + 134, + 140 + ], + [ + 112, + 106, + 124 + ], + [ + 112, + 124, + 141 + ], + [ + 113, + 133, + 119 + ], + [ + 117, + 142, + 143 + ], + [ + 117, + 140, + 142 + ], + [ + 101, + 144, + 120 + ], + [ + 99, + 130, + 118 + ], + [ + 144, + 126, + 120 + ], + [ + 74, + 138, + 116 + ], + [ + 139, + 128, + 103 + ], + [ + 121, + 145, + 105 + ], + [ + 117, + 143, + 107 + ], + [ + 131, + 146, + 137 + ], + [ + 112, + 141, + 147 + ], + [ + 111, + 107, + 143 + ], + [ + 109, + 129, + 131 + ], + [ + 123, + 122, + 148 + ], + [ + 149, + 101, + 108 + ], + [ + 125, + 150, + 102 + ], + [ + 151, + 132, + 105 + ], + [ + 150, + 108, + 102 + ], + [ + 152, + 125, + 118 + ], + [ + 119, + 141, + 124 + ], + [ + 111, + 145, + 121 + ], + [ + 123, + 148, + 134 + ], + [ + 130, + 153, + 118 + ], + [ + 1, + 136, + 21 + ], + [ + 146, + 154, + 137 + ], + [ + 129, + 155, + 131 + ], + [ + 112, + 147, + 139 + ], + [ + 156, + 151, + 105 + ], + [ + 153, + 152, + 118 + ], + [ + 129, + 128, + 155 + ], + [ + 157, + 149, + 108 + ], + [ + 149, + 158, + 101 + ], + [ + 145, + 156, + 105 + ], + [ + 111, + 143, + 159 + ], + [ + 122, + 127, + 148 + ], + [ + 114, + 160, + 161 + ], + [ + 155, + 162, + 131 + ], + [ + 111, + 159, + 163 + ], + [ + 158, + 144, + 101 + ], + [ + 115, + 161, + 130 + ], + [ + 114, + 116, + 164 + ], + [ + 165, + 94, + 21 + ], + [ + 128, + 139, + 155 + ], + [ + 157, + 108, + 150 + ], + [ + 130, + 161, + 166 + ], + [ + 167, + 141, + 119 + ], + [ + 148, + 127, + 168 + ], + [ + 114, + 161, + 115 + ], + [ + 133, + 169, + 119 + ], + [ + 133, + 132, + 151 + ], + [ + 148, + 168, + 170 + ], + [ + 125, + 152, + 171 + ], + [ + 114, + 164, + 172 + ], + [ + 162, + 146, + 131 + ], + [ + 111, + 163, + 173 + ], + [ + 168, + 127, + 126 + ], + [ + 130, + 166, + 174 + ], + [ + 148, + 175, + 176 + ], + [ + 169, + 167, + 119 + ], + [ + 142, + 177, + 143 + ], + [ + 125, + 171, + 150 + ], + [ + 114, + 172, + 160 + ], + [ + 111, + 173, + 145 + ], + [ + 126, + 144, + 178 + ], + [ + 130, + 174, + 153 + ], + [ + 136, + 165, + 21 + ], + [ + 139, + 179, + 155 + ], + [ + 148, + 170, + 175 + ], + [ + 148, + 176, + 134 + ], + [ + 177, + 142, + 140 + ], + [ + 134, + 176, + 140 + ], + [ + 177, + 159, + 143 + ], + [ + 126, + 178, + 168 + ], + [ + 151, + 156, + 180 + ], + [ + 151, + 180, + 181 + ], + [ + 153, + 174, + 182 + ], + [ + 141, + 167, + 147 + ], + [ + 155, + 179, + 183 + ], + [ + 156, + 145, + 173 + ], + [ + 140, + 176, + 177 + ], + [ + 157, + 184, + 149 + ], + [ + 185, + 158, + 149 + ], + [ + 153, + 182, + 186 + ], + [ + 156, + 173, + 187 + ], + [ + 146, + 188, + 154 + ], + [ + 155, + 183, + 162 + ], + [ + 147, + 189, + 139 + ], + [ + 178, + 190, + 168 + ], + [ + 184, + 185, + 149 + ], + [ + 191, + 179, + 139 + ], + [ + 147, + 167, + 192 + ], + [ + 151, + 181, + 133 + ], + [ + 193, + 178, + 144 + ], + [ + 153, + 186, + 152 + ], + [ + 160, + 194, + 161 + ], + [ + 138, + 195, + 116 + ], + [ + 188, + 196, + 154 + ], + [ + 146, + 162, + 197 + ], + [ + 189, + 191, + 139 + ], + [ + 181, + 169, + 133 + ], + [ + 177, + 198, + 199 + ], + [ + 176, + 200, + 177 + ], + [ + 195, + 164, + 116 + ], + [ + 147, + 192, + 201 + ], + [ + 152, + 186, + 171 + ], + [ + 194, + 166, + 161 + ], + [ + 190, + 170, + 168 + ], + [ + 202, + 157, + 150 + ], + [ + 203, + 138, + 94 + ], + [ + 146, + 197, + 188 + ], + [ + 177, + 199, + 159 + ], + [ + 171, + 202, + 150 + ], + [ + 156, + 187, + 180 + ], + [ + 204, + 198, + 177 + ], + [ + 178, + 193, + 205 + ], + [ + 158, + 193, + 144 + ], + [ + 194, + 160, + 172 + ], + [ + 147, + 201, + 189 + ], + [ + 163, + 159, + 199 + ], + [ + 200, + 204, + 177 + ], + [ + 166, + 194, + 206 + ], + [ + 165, + 203, + 94 + ], + [ + 162, + 183, + 207 + ], + [ + 163, + 208, + 173 + ], + [ + 157, + 202, + 209 + ], + [ + 163, + 199, + 210 + ], + [ + 175, + 211, + 176 + ], + [ + 178, + 205, + 190 + ], + [ + 169, + 192, + 167 + ], + [ + 169, + 181, + 212 + ], + [ + 193, + 158, + 185 + ], + [ + 193, + 185, + 213 + ], + [ + 172, + 164, + 214 + ], + [ + 179, + 191, + 183 + ], + [ + 169, + 212, + 215 + ], + [ + 211, + 200, + 176 + ], + [ + 186, + 216, + 171 + ], + [ + 166, + 206, + 217 + ], + [ + 162, + 207, + 197 + ], + [ + 208, + 187, + 173 + ], + [ + 157, + 209, + 184 + ], + [ + 218, + 174, + 166 + ], + [ + 172, + 214, + 194 + ], + [ + 169, + 215, + 219 + ], + [ + 213, + 185, + 184 + ], + [ + 181, + 180, + 212 + ], + [ + 193, + 213, + 220 + ], + [ + 186, + 182, + 216 + ], + [ + 169, + 219, + 192 + ], + [ + 163, + 210, + 208 + ], + [ + 198, + 221, + 199 + ], + [ + 207, + 183, + 191 + ], + [ + 170, + 222, + 175 + ], + [ + 223, + 202, + 171 + ], + [ + 224, + 218, + 166 + ], + [ + 217, + 224, + 166 + ], + [ + 214, + 225, + 194 + ], + [ + 222, + 211, + 175 + ], + [ + 216, + 226, + 171 + ], + [ + 188, + 227, + 196 + ], + [ + 211, + 228, + 229 + ], + [ + 193, + 220, + 205 + ], + [ + 174, + 218, + 182 + ], + [ + 211, + 229, + 200 + ], + [ + 226, + 223, + 171 + ], + [ + 225, + 206, + 194 + ], + [ + 189, + 230, + 191 + ], + [ + 201, + 192, + 219 + ], + [ + 187, + 231, + 180 + ], + [ + 232, + 212, + 180 + ], + [ + 221, + 233, + 199 + ], + [ + 222, + 234, + 211 + ], + [ + 222, + 170, + 190 + ], + [ + 184, + 209, + 213 + ], + [ + 235, + 195, + 138 + ], + [ + 227, + 236, + 196 + ], + [ + 233, + 210, + 199 + ], + [ + 237, + 214, + 164 + ], + [ + 231, + 187, + 208 + ], + [ + 204, + 200, + 229 + ], + [ + 204, + 221, + 198 + ], + [ + 195, + 237, + 164 + ], + [ + 203, + 235, + 138 + ], + [ + 231, + 238, + 180 + ], + [ + 222, + 190, + 239 + ], + [ + 230, + 240, + 191 + ], + [ + 204, + 229, + 241 + ], + [ + 234, + 228, + 211 + ], + [ + 218, + 242, + 182 + ], + [ + 197, + 243, + 188 + ], + [ + 240, + 207, + 191 + ], + [ + 201, + 244, + 189 + ], + [ + 209, + 245, + 213 + ], + [ + 246, + 216, + 182 + ], + [ + 222, + 239, + 234 + ], + [ + 212, + 232, + 215 + ], + [ + 238, + 232, + 180 + ], + [ + 208, + 210, + 231 + ], + [ + 136, + 247, + 165 + ], + [ + 243, + 227, + 188 + ], + [ + 223, + 209, + 202 + ], + [ + 242, + 246, + 182 + ], + [ + 244, + 230, + 189 + ], + [ + 201, + 219, + 248 + ], + [ + 204, + 241, + 249 + ], + [ + 229, + 228, + 250 + ], + [ + 251, + 190, + 205 + ], + [ + 218, + 224, + 242 + ], + [ + 252, + 203, + 165 + ], + [ + 210, + 253, + 231 + ], + [ + 204, + 249, + 221 + ], + [ + 236, + 227, + 254 + ], + [ + 224, + 217, + 255 + ], + [ + 256, + 225, + 214 + ], + [ + 237, + 256, + 214 + ], + [ + 257, + 252, + 165 + ], + [ + 207, + 258, + 197 + ], + [ + 201, + 248, + 244 + ], + [ + 215, + 259, + 219 + ], + [ + 223, + 260, + 209 + ], + [ + 206, + 261, + 255 + ], + [ + 247, + 257, + 165 + ], + [ + 253, + 262, + 231 + ], + [ + 229, + 250, + 241 + ], + [ + 251, + 263, + 190 + ], + [ + 206, + 225, + 264 + ], + [ + 258, + 243, + 197 + ], + [ + 221, + 249, + 233 + ], + [ + 206, + 255, + 217 + ], + [ + 265, + 237, + 195 + ], + [ + 240, + 266, + 207 + ], + [ + 262, + 267, + 231 + ], + [ + 245, + 268, + 213 + ], + [ + 260, + 223, + 226 + ], + [ + 269, + 245, + 209 + ], + [ + 270, + 226, + 216 + ], + [ + 224, + 255, + 271 + ], + [ + 236, + 254, + 272 + ], + [ + 240, + 230, + 266 + ], + [ + 215, + 232, + 273 + ], + [ + 205, + 220, + 274 + ], + [ + 268, + 220, + 213 + ], + [ + 260, + 275, + 209 + ], + [ + 259, + 248, + 219 + ], + [ + 231, + 267, + 238 + ], + [ + 233, + 253, + 210 + ], + [ + 206, + 264, + 261 + ], + [ + 235, + 265, + 195 + ], + [ + 227, + 243, + 276 + ], + [ + 230, + 244, + 266 + ], + [ + 263, + 239, + 190 + ], + [ + 224, + 271, + 277 + ], + [ + 234, + 278, + 228 + ], + [ + 246, + 270, + 216 + ], + [ + 266, + 279, + 207 + ], + [ + 232, + 238, + 280 + ], + [ + 205, + 274, + 251 + ], + [ + 275, + 269, + 209 + ], + [ + 224, + 277, + 281 + ], + [ + 225, + 256, + 282 + ], + [ + 215, + 273, + 259 + ], + [ + 283, + 253, + 233 + ], + [ + 251, + 274, + 284 + ], + [ + 285, + 235, + 203 + ], + [ + 227, + 276, + 254 + ], + [ + 279, + 258, + 207 + ], + [ + 226, + 270, + 260 + ], + [ + 224, + 281, + 242 + ], + [ + 225, + 282, + 264 + ], + [ + 249, + 286, + 233 + ], + [ + 287, + 250, + 228 + ], + [ + 288, + 246, + 242 + ], + [ + 252, + 289, + 203 + ], + [ + 244, + 290, + 266 + ], + [ + 232, + 280, + 273 + ], + [ + 251, + 284, + 263 + ], + [ + 238, + 267, + 291 + ], + [ + 289, + 285, + 203 + ], + [ + 239, + 292, + 234 + ], + [ + 293, + 256, + 237 + ], + [ + 265, + 293, + 237 + ], + [ + 290, + 294, + 266 + ], + [ + 278, + 287, + 228 + ], + [ + 270, + 295, + 260 + ], + [ + 261, + 296, + 255 + ], + [ + 297, + 247, + 136 + ], + [ + 286, + 283, + 233 + ], + [ + 262, + 253, + 283 + ], + [ + 241, + 298, + 249 + ], + [ + 281, + 288, + 242 + ], + [ + 270, + 246, + 288 + ], + [ + 258, + 299, + 243 + ], + [ + 235, + 285, + 265 + ], + [ + 135, + 297, + 136 + ], + [ + 300, + 274, + 220 + ], + [ + 269, + 268, + 245 + ], + [ + 238, + 291, + 280 + ], + [ + 241, + 250, + 301 + ], + [ + 292, + 278, + 234 + ], + [ + 268, + 300, + 220 + ], + [ + 270, + 288, + 302 + ], + [ + 299, + 276, + 243 + ], + [ + 239, + 263, + 303 + ], + [ + 296, + 271, + 255 + ], + [ + 304, + 286, + 249 + ], + [ + 241, + 301, + 298 + ], + [ + 261, + 264, + 296 + ], + [ + 266, + 294, + 279 + ], + [ + 305, + 275, + 260 + ], + [ + 279, + 306, + 258 + ], + [ + 248, + 307, + 244 + ], + [ + 262, + 283, + 308 + ], + [ + 301, + 250, + 287 + ], + [ + 239, + 303, + 292 + ], + [ + 295, + 305, + 260 + ], + [ + 270, + 302, + 309 + ], + [ + 254, + 310, + 272 + ], + [ + 307, + 290, + 244 + ], + [ + 262, + 311, + 267 + ], + [ + 269, + 312, + 268 + ], + [ + 265, + 285, + 313 + ], + [ + 298, + 304, + 249 + ], + [ + 301, + 287, + 314 + ], + [ + 270, + 309, + 315 + ], + [ + 281, + 316, + 288 + ], + [ + 306, + 299, + 258 + ], + [ + 278, + 314, + 287 + ], + [ + 312, + 269, + 275 + ], + [ + 312, + 317, + 268 + ], + [ + 293, + 318, + 256 + ], + [ + 265, + 313, + 319 + ], + [ + 320, + 252, + 257 + ], + [ + 310, + 321, + 272 + ], + [ + 263, + 284, + 322 + ], + [ + 271, + 296, + 323 + ], + [ + 307, + 248, + 259 + ], + [ + 273, + 324, + 259 + ], + [ + 311, + 291, + 267 + ], + [ + 301, + 314, + 325 + ], + [ + 326, + 300, + 268 + ], + [ + 316, + 302, + 288 + ], + [ + 264, + 327, + 296 + ], + [ + 262, + 308, + 311 + ], + [ + 263, + 322, + 328 + ], + [ + 270, + 315, + 295 + ], + [ + 281, + 277, + 316 + ], + [ + 327, + 329, + 330 + ], + [ + 265, + 319, + 293 + ], + [ + 247, + 331, + 257 + ], + [ + 332, + 307, + 259 + ], + [ + 292, + 333, + 278 + ], + [ + 334, + 284, + 274 + ], + [ + 271, + 335, + 277 + ], + [ + 271, + 323, + 335 + ], + [ + 318, + 282, + 256 + ], + [ + 306, + 279, + 294 + ], + [ + 286, + 336, + 283 + ], + [ + 333, + 314, + 278 + ], + [ + 263, + 328, + 303 + ], + [ + 300, + 334, + 274 + ], + [ + 317, + 326, + 268 + ], + [ + 285, + 289, + 313 + ], + [ + 276, + 337, + 254 + ], + [ + 290, + 338, + 294 + ], + [ + 301, + 325, + 339 + ], + [ + 301, + 339, + 340 + ], + [ + 275, + 305, + 312 + ], + [ + 327, + 330, + 323 + ], + [ + 341, + 320, + 257 + ], + [ + 342, + 332, + 259 + ], + [ + 301, + 340, + 298 + ], + [ + 292, + 303, + 333 + ], + [ + 305, + 295, + 315 + ], + [ + 277, + 335, + 316 + ], + [ + 343, + 289, + 252 + ], + [ + 290, + 307, + 344 + ], + [ + 331, + 341, + 257 + ], + [ + 280, + 324, + 273 + ], + [ + 314, + 333, + 345 + ], + [ + 327, + 323, + 296 + ], + [ + 337, + 310, + 254 + ], + [ + 276, + 299, + 346 + ], + [ + 324, + 342, + 259 + ], + [ + 280, + 291, + 347 + ], + [ + 336, + 308, + 283 + ], + [ + 286, + 304, + 348 + ], + [ + 312, + 349, + 350 + ], + [ + 327, + 264, + 282 + ], + [ + 351, + 135, + 1 + ], + [ + 338, + 352, + 294 + ], + [ + 286, + 348, + 336 + ], + [ + 320, + 343, + 252 + ], + [ + 313, + 289, + 343 + ], + [ + 290, + 344, + 338 + ], + [ + 280, + 347, + 353 + ], + [ + 304, + 298, + 340 + ], + [ + 305, + 349, + 312 + ], + [ + 314, + 345, + 325 + ], + [ + 334, + 354, + 284 + ], + [ + 335, + 355, + 316 + ], + [ + 276, + 346, + 337 + ], + [ + 352, + 306, + 294 + ], + [ + 303, + 356, + 333 + ], + [ + 326, + 334, + 300 + ], + [ + 312, + 350, + 317 + ], + [ + 282, + 357, + 327 + ], + [ + 280, + 353, + 324 + ], + [ + 358, + 302, + 316 + ], + [ + 357, + 329, + 327 + ], + [ + 299, + 306, + 359 + ], + [ + 333, + 356, + 360 + ], + [ + 354, + 322, + 284 + ], + [ + 319, + 361, + 293 + ], + [ + 313, + 343, + 362 + ], + [ + 340, + 363, + 304 + ], + [ + 326, + 364, + 334 + ], + [ + 315, + 365, + 305 + ], + [ + 309, + 302, + 358 + ], + [ + 366, + 358, + 316 + ], + [ + 310, + 367, + 321 + ], + [ + 355, + 368, + 316 + ], + [ + 368, + 366, + 316 + ], + [ + 361, + 318, + 293 + ], + [ + 299, + 359, + 346 + ], + [ + 342, + 369, + 332 + ], + [ + 342, + 324, + 353 + ], + [ + 311, + 370, + 291 + ], + [ + 333, + 360, + 345 + ], + [ + 328, + 356, + 303 + ], + [ + 282, + 318, + 371 + ], + [ + 372, + 319, + 313 + ], + [ + 339, + 373, + 340 + ], + [ + 317, + 364, + 326 + ], + [ + 309, + 365, + 315 + ], + [ + 374, + 331, + 247 + ], + [ + 297, + 374, + 247 + ], + [ + 367, + 375, + 321 + ], + [ + 328, + 376, + 356 + ], + [ + 377, + 349, + 305 + ], + [ + 4, + 351, + 1 + ], + [ + 308, + 378, + 311 + ], + [ + 363, + 348, + 304 + ], + [ + 323, + 379, + 335 + ], + [ + 362, + 372, + 313 + ], + [ + 359, + 306, + 352 + ], + [ + 369, + 344, + 332 + ], + [ + 370, + 347, + 291 + ], + [ + 373, + 363, + 340 + ], + [ + 376, + 328, + 322 + ], + [ + 371, + 380, + 282 + ], + [ + 378, + 370, + 311 + ], + [ + 309, + 358, + 381 + ], + [ + 337, + 382, + 310 + ], + [ + 332, + 344, + 307 + ], + [ + 353, + 347, + 383 + ], + [ + 336, + 384, + 308 + ], + [ + 379, + 355, + 335 + ], + [ + 364, + 385, + 334 + ], + [ + 385, + 354, + 334 + ], + [ + 386, + 377, + 305 + ], + [ + 309, + 381, + 387 + ], + [ + 388, + 343, + 320 + ], + [ + 338, + 389, + 352 + ], + [ + 384, + 336, + 348 + ], + [ + 376, + 390, + 356 + ], + [ + 323, + 330, + 379 + ], + [ + 380, + 357, + 282 + ], + [ + 371, + 318, + 361 + ], + [ + 341, + 391, + 320 + ], + [ + 353, + 383, + 392 + ], + [ + 325, + 393, + 339 + ], + [ + 391, + 388, + 320 + ], + [ + 135, + 351, + 394 + ], + [ + 348, + 363, + 384 + ], + [ + 395, + 364, + 317 + ], + [ + 350, + 396, + 317 + ], + [ + 365, + 386, + 305 + ], + [ + 377, + 350, + 349 + ], + [ + 309, + 387, + 397 + ], + [ + 382, + 367, + 310 + ], + [ + 337, + 346, + 398 + ], + [ + 338, + 344, + 399 + ], + [ + 353, + 392, + 369 + ], + [ + 384, + 400, + 308 + ], + [ + 390, + 360, + 356 + ], + [ + 329, + 401, + 330 + ], + [ + 388, + 402, + 343 + ], + [ + 331, + 403, + 341 + ], + [ + 400, + 378, + 308 + ], + [ + 393, + 373, + 339 + ], + [ + 325, + 345, + 404 + ], + [ + 396, + 395, + 317 + ], + [ + 309, + 397, + 365 + ], + [ + 330, + 401, + 405 + ], + [ + 371, + 361, + 406 + ], + [ + 379, + 407, + 408 + ], + [ + 409, + 362, + 343 + ], + [ + 410, + 391, + 341 + ], + [ + 337, + 398, + 382 + ], + [ + 411, + 359, + 352 + ], + [ + 412, + 376, + 322 + ], + [ + 366, + 413, + 358 + ], + [ + 403, + 410, + 341 + ], + [ + 135, + 394, + 297 + ], + [ + 389, + 411, + 352 + ], + [ + 338, + 399, + 389 + ], + [ + 325, + 404, + 393 + ], + [ + 354, + 412, + 322 + ], + [ + 330, + 405, + 407 + ], + [ + 379, + 408, + 355 + ], + [ + 329, + 357, + 414 + ], + [ + 353, + 369, + 342 + ], + [ + 368, + 413, + 366 + ], + [ + 413, + 381, + 358 + ], + [ + 329, + 414, + 401 + ], + [ + 415, + 361, + 319 + ], + [ + 367, + 416, + 375 + ], + [ + 364, + 395, + 385 + ], + [ + 396, + 350, + 377 + ], + [ + 355, + 408, + 368 + ], + [ + 363, + 417, + 384 + ], + [ + 384, + 418, + 400 + ], + [ + 372, + 415, + 319 + ], + [ + 406, + 419, + 371 + ], + [ + 402, + 409, + 343 + ], + [ + 359, + 420, + 346 + ], + [ + 378, + 421, + 370 + ], + [ + 417, + 418, + 384 + ], + [ + 386, + 422, + 377 + ], + [ + 330, + 407, + 379 + ], + [ + 423, + 380, + 371 + ], + [ + 388, + 391, + 424 + ], + [ + 359, + 411, + 420 + ], + [ + 383, + 347, + 370 + ], + [ + 397, + 386, + 365 + ], + [ + 425, + 372, + 362 + ], + [ + 416, + 426, + 375 + ], + [ + 420, + 411, + 389 + ], + [ + 369, + 427, + 344 + ], + [ + 385, + 428, + 354 + ], + [ + 414, + 429, + 401 + ], + [ + 419, + 423, + 371 + ], + [ + 388, + 424, + 402 + ], + [ + 421, + 383, + 370 + ], + [ + 360, + 430, + 345 + ], + [ + 431, + 412, + 354 + ], + [ + 385, + 395, + 432 + ], + [ + 331, + 374, + 433 + ], + [ + 434, + 398, + 346 + ], + [ + 399, + 344, + 435 + ], + [ + 436, + 396, + 377 + ], + [ + 437, + 413, + 368 + ], + [ + 438, + 414, + 357 + ], + [ + 427, + 435, + 344 + ], + [ + 400, + 439, + 378 + ], + [ + 422, + 436, + 377 + ], + [ + 408, + 440, + 368 + ], + [ + 297, + 394, + 441 + ], + [ + 382, + 442, + 367 + ], + [ + 420, + 389, + 443 + ], + [ + 373, + 444, + 363 + ], + [ + 445, + 390, + 376 + ], + [ + 428, + 431, + 354 + ], + [ + 372, + 425, + 415 + ], + [ + 446, + 425, + 362 + ], + [ + 409, + 446, + 362 + ], + [ + 331, + 433, + 403 + ], + [ + 392, + 447, + 369 + ], + [ + 444, + 417, + 363 + ], + [ + 430, + 404, + 345 + ], + [ + 448, + 381, + 413 + ], + [ + 429, + 405, + 401 + ], + [ + 449, + 406, + 361 + ], + [ + 420, + 434, + 346 + ], + [ + 390, + 450, + 360 + ], + [ + 412, + 445, + 376 + ], + [ + 385, + 432, + 451 + ], + [ + 397, + 452, + 386 + ], + [ + 415, + 449, + 361 + ], + [ + 442, + 416, + 367 + ], + [ + 382, + 398, + 453 + ], + [ + 392, + 383, + 454 + ], + [ + 395, + 396, + 432 + ], + [ + 297, + 441, + 374 + ], + [ + 439, + 421, + 378 + ], + [ + 455, + 437, + 368 + ], + [ + 380, + 438, + 357 + ], + [ + 385, + 451, + 428 + ], + [ + 437, + 448, + 413 + ], + [ + 408, + 407, + 456 + ], + [ + 420, + 443, + 457 + ], + [ + 389, + 399, + 458 + ], + [ + 417, + 459, + 418 + ], + [ + 393, + 460, + 373 + ], + [ + 450, + 430, + 360 + ], + [ + 387, + 461, + 397 + ], + [ + 438, + 462, + 414 + ], + [ + 391, + 410, + 424 + ], + [ + 448, + 387, + 381 + ], + [ + 382, + 453, + 442 + ], + [ + 392, + 454, + 447 + ], + [ + 418, + 463, + 400 + ], + [ + 460, + 444, + 373 + ], + [ + 408, + 456, + 440 + ], + [ + 423, + 438, + 380 + ], + [ + 398, + 434, + 464 + ], + [ + 389, + 458, + 443 + ], + [ + 431, + 445, + 412 + ], + [ + 452, + 422, + 386 + ], + [ + 440, + 455, + 368 + ], + [ + 424, + 465, + 402 + ], + [ + 424, + 410, + 466 + ], + [ + 458, + 399, + 435 + ], + [ + 445, + 467, + 390 + ], + [ + 436, + 468, + 396 + ], + [ + 438, + 423, + 469 + ], + [ + 464, + 434, + 457 + ], + [ + 434, + 420, + 457 + ], + [ + 459, + 463, + 418 + ], + [ + 461, + 452, + 397 + ], + [ + 470, + 419, + 406 + ], + [ + 471, + 409, + 402 + ], + [ + 404, + 472, + 393 + ], + [ + 462, + 429, + 414 + ], + [ + 449, + 470, + 406 + ], + [ + 425, + 473, + 415 + ], + [ + 424, + 466, + 474 + ], + [ + 468, + 436, + 422 + ], + [ + 475, + 432, + 396 + ], + [ + 438, + 469, + 476 + ], + [ + 403, + 466, + 410 + ], + [ + 398, + 464, + 453 + ], + [ + 468, + 477, + 396 + ], + [ + 423, + 419, + 469 + ], + [ + 465, + 478, + 402 + ], + [ + 458, + 435, + 479 + ], + [ + 444, + 480, + 417 + ], + [ + 472, + 460, + 393 + ], + [ + 467, + 450, + 390 + ], + [ + 448, + 481, + 387 + ], + [ + 437, + 482, + 448 + ], + [ + 483, + 449, + 415 + ], + [ + 416, + 484, + 426 + ], + [ + 464, + 457, + 485 + ], + [ + 435, + 427, + 486 + ], + [ + 445, + 431, + 487 + ], + [ + 405, + 488, + 407 + ], + [ + 489, + 471, + 402 + ], + [ + 435, + 486, + 490 + ], + [ + 421, + 491, + 383 + ], + [ + 488, + 456, + 407 + ], + [ + 425, + 446, + 473 + ], + [ + 478, + 489, + 402 + ], + [ + 424, + 474, + 465 + ], + [ + 374, + 441, + 492 + ], + [ + 447, + 427, + 369 + ], + [ + 493, + 454, + 383 + ], + [ + 477, + 475, + 396 + ], + [ + 473, + 494, + 415 + ], + [ + 416, + 442, + 495 + ], + [ + 457, + 443, + 496 + ], + [ + 422, + 452, + 497 + ], + [ + 438, + 476, + 462 + ], + [ + 494, + 483, + 415 + ], + [ + 471, + 446, + 409 + ], + [ + 435, + 490, + 479 + ], + [ + 486, + 427, + 447 + ], + [ + 491, + 493, + 383 + ], + [ + 463, + 439, + 400 + ], + [ + 480, + 459, + 417 + ], + [ + 444, + 460, + 498 + ], + [ + 451, + 432, + 475 + ], + [ + 422, + 497, + 499 + ], + [ + 456, + 500, + 501 + ], + [ + 488, + 502, + 500 + ], + [ + 469, + 419, + 470 + ], + [ + 403, + 433, + 503 + ], + [ + 484, + 504, + 426 + ], + [ + 482, + 505, + 448 + ], + [ + 505, + 481, + 448 + ], + [ + 481, + 461, + 387 + ], + [ + 437, + 455, + 482 + ], + [ + 429, + 488, + 405 + ], + [ + 374, + 492, + 433 + ], + [ + 416, + 495, + 506 + ], + [ + 430, + 507, + 404 + ], + [ + 428, + 508, + 431 + ], + [ + 456, + 501, + 440 + ], + [ + 403, + 503, + 466 + ], + [ + 457, + 496, + 485 + ], + [ + 439, + 509, + 421 + ], + [ + 444, + 498, + 480 + ], + [ + 507, + 472, + 404 + ], + [ + 445, + 487, + 467 + ], + [ + 422, + 499, + 510 + ], + [ + 440, + 501, + 455 + ], + [ + 488, + 500, + 456 + ], + [ + 469, + 470, + 511 + ], + [ + 428, + 451, + 512 + ], + [ + 416, + 506, + 484 + ], + [ + 508, + 487, + 431 + ], + [ + 461, + 497, + 452 + ], + [ + 447, + 454, + 513 + ], + [ + 422, + 510, + 468 + ], + [ + 455, + 501, + 514 + ], + [ + 471, + 515, + 446 + ], + [ + 453, + 516, + 442 + ], + [ + 509, + 491, + 421 + ], + [ + 460, + 472, + 517 + ], + [ + 475, + 518, + 451 + ], + [ + 429, + 519, + 488 + ], + [ + 520, + 473, + 446 + ], + [ + 450, + 521, + 430 + ], + [ + 428, + 512, + 508 + ], + [ + 453, + 464, + 516 + ], + [ + 463, + 522, + 439 + ], + [ + 518, + 475, + 477 + ], + [ + 483, + 470, + 449 + ], + [ + 351, + 523, + 394 + ], + [ + 516, + 495, + 442 + ], + [ + 458, + 524, + 443 + ], + [ + 447, + 513, + 525 + ], + [ + 459, + 526, + 463 + ], + [ + 521, + 507, + 430 + ], + [ + 455, + 514, + 527 + ], + [ + 515, + 520, + 446 + ], + [ + 466, + 503, + 528 + ], + [ + 516, + 464, + 485 + ], + [ + 460, + 517, + 498 + ], + [ + 529, + 497, + 461 + ], + [ + 462, + 530, + 429 + ], + [ + 490, + 486, + 525 + ], + [ + 447, + 525, + 486 + ], + [ + 519, + 502, + 488 + ], + [ + 531, + 441, + 394 + ], + [ + 524, + 496, + 443 + ], + [ + 455, + 527, + 482 + ], + [ + 470, + 483, + 532 + ], + [ + 479, + 533, + 458 + ], + [ + 467, + 534, + 450 + ], + [ + 518, + 477, + 535 + ], + [ + 510, + 477, + 468 + ], + [ + 481, + 536, + 461 + ], + [ + 505, + 482, + 527 + ], + [ + 478, + 537, + 489 + ], + [ + 466, + 528, + 474 + ], + [ + 433, + 492, + 538 + ], + [ + 516, + 485, + 539 + ], + [ + 454, + 493, + 540 + ], + [ + 500, + 541, + 501 + ], + [ + 471, + 489, + 515 + ], + [ + 537, + 478, + 465 + ], + [ + 542, + 531, + 394 + ], + [ + 523, + 542, + 394 + ], + [ + 479, + 490, + 543 + ], + [ + 526, + 522, + 463 + ], + [ + 530, + 544, + 429 + ], + [ + 484, + 545, + 504 + ], + [ + 493, + 491, + 546 + ], + [ + 459, + 480, + 547 + ], + [ + 534, + 521, + 450 + ], + [ + 536, + 548, + 461 + ], + [ + 530, + 462, + 476 + ], + [ + 511, + 549, + 469 + ], + [ + 470, + 532, + 550 + ], + [ + 545, + 551, + 504 + ], + [ + 516, + 539, + 552 + ], + [ + 487, + 553, + 467 + ], + [ + 548, + 529, + 461 + ], + [ + 549, + 476, + 469 + ], + [ + 470, + 550, + 554 + ], + [ + 532, + 483, + 494 + ], + [ + 433, + 538, + 503 + ], + [ + 545, + 484, + 506 + ], + [ + 493, + 546, + 540 + ], + [ + 522, + 509, + 439 + ], + [ + 507, + 555, + 472 + ], + [ + 553, + 487, + 508 + ], + [ + 510, + 556, + 477 + ], + [ + 557, + 494, + 473 + ], + [ + 558, + 537, + 465 + ], + [ + 479, + 543, + 533 + ], + [ + 505, + 536, + 481 + ], + [ + 541, + 514, + 501 + ], + [ + 470, + 554, + 511 + ], + [ + 459, + 547, + 526 + ], + [ + 507, + 521, + 559 + ], + [ + 555, + 517, + 472 + ], + [ + 518, + 512, + 451 + ], + [ + 556, + 510, + 499 + ], + [ + 544, + 519, + 429 + ], + [ + 530, + 476, + 560 + ], + [ + 474, + 561, + 465 + ], + [ + 562, + 495, + 516 + ], + [ + 533, + 524, + 458 + ], + [ + 454, + 540, + 513 + ], + [ + 491, + 509, + 563 + ], + [ + 520, + 557, + 473 + ], + [ + 532, + 494, + 557 + ], + [ + 537, + 564, + 489 + ], + [ + 565, + 515, + 489 + ], + [ + 545, + 566, + 551 + ], + [ + 562, + 506, + 495 + ], + [ + 506, + 562, + 545 + ], + [ + 508, + 512, + 553 + ], + [ + 552, + 562, + 516 + ], + [ + 491, + 563, + 567 + ], + [ + 553, + 568, + 467 + ], + [ + 502, + 569, + 500 + ], + [ + 561, + 558, + 465 + ], + [ + 570, + 492, + 441 + ], + [ + 496, + 571, + 485 + ], + [ + 571, + 572, + 485 + ], + [ + 496, + 524, + 571 + ], + [ + 507, + 559, + 555 + ], + [ + 556, + 499, + 573 + ], + [ + 529, + 499, + 497 + ], + [ + 525, + 574, + 490 + ], + [ + 568, + 534, + 467 + ], + [ + 503, + 538, + 575 + ], + [ + 491, + 567, + 546 + ], + [ + 498, + 576, + 480 + ], + [ + 577, + 536, + 505 + ], + [ + 527, + 578, + 505 + ], + [ + 562, + 579, + 545 + ], + [ + 580, + 541, + 500 + ], + [ + 532, + 557, + 581 + ], + [ + 564, + 582, + 489 + ], + [ + 528, + 583, + 474 + ], + [ + 531, + 584, + 441 + ], + [ + 566, + 585, + 551 + ], + [ + 571, + 524, + 533 + ], + [ + 556, + 535, + 477 + ], + [ + 529, + 586, + 499 + ], + [ + 527, + 514, + 587 + ], + [ + 569, + 580, + 500 + ], + [ + 588, + 520, + 515 + ], + [ + 513, + 589, + 525 + ], + [ + 512, + 590, + 553 + ], + [ + 519, + 591, + 502 + ], + [ + 537, + 558, + 592 + ], + [ + 503, + 575, + 528 + ], + [ + 584, + 570, + 441 + ], + [ + 572, + 539, + 485 + ], + [ + 509, + 522, + 563 + ], + [ + 534, + 593, + 521 + ], + [ + 512, + 518, + 594 + ], + [ + 586, + 529, + 548 + ], + [ + 527, + 587, + 595 + ], + [ + 560, + 596, + 530 + ], + [ + 476, + 549, + 597 + ], + [ + 582, + 565, + 489 + ], + [ + 6, + 523, + 351 + ], + [ + 562, + 552, + 598 + ], + [ + 571, + 533, + 599 + ], + [ + 522, + 526, + 600 + ], + [ + 576, + 547, + 480 + ], + [ + 548, + 536, + 577 + ], + [ + 520, + 588, + 557 + ], + [ + 583, + 561, + 474 + ], + [ + 579, + 566, + 545 + ], + [ + 574, + 543, + 490 + ], + [ + 589, + 574, + 525 + ], + [ + 578, + 577, + 505 + ], + [ + 596, + 544, + 530 + ], + [ + 476, + 597, + 560 + ], + [ + 565, + 588, + 515 + ], + [ + 537, + 592, + 564 + ], + [ + 538, + 492, + 570 + ], + [ + 4, + 6, + 351 + ], + [ + 571, + 599, + 601 + ], + [ + 522, + 600, + 602 + ], + [ + 590, + 603, + 553 + ], + [ + 591, + 569, + 502 + ], + [ + 554, + 549, + 511 + ], + [ + 540, + 546, + 604 + ], + [ + 593, + 559, + 521 + ], + [ + 594, + 518, + 535 + ], + [ + 527, + 595, + 578 + ], + [ + 562, + 598, + 579 + ], + [ + 540, + 605, + 513 + ], + [ + 517, + 606, + 498 + ], + [ + 534, + 568, + 607 + ], + [ + 586, + 548, + 608 + ], + [ + 572, + 571, + 609 + ], + [ + 571, + 601, + 609 + ], + [ + 522, + 602, + 563 + ], + [ + 541, + 610, + 514 + ], + [ + 557, + 588, + 611 + ], + [ + 603, + 568, + 553 + ], + [ + 512, + 594, + 590 + ], + [ + 612, + 550, + 532 + ], + [ + 604, + 546, + 567 + ], + [ + 526, + 547, + 613 + ], + [ + 586, + 573, + 499 + ], + [ + 581, + 612, + 532 + ], + [ + 606, + 576, + 498 + ], + [ + 594, + 535, + 614 + ], + [ + 549, + 554, + 615 + ], + [ + 588, + 565, + 616 + ], + [ + 528, + 575, + 617 + ], + [ + 538, + 570, + 618 + ], + [ + 539, + 619, + 552 + ], + [ + 555, + 620, + 517 + ], + [ + 534, + 607, + 593 + ], + [ + 541, + 580, + 610 + ], + [ + 557, + 611, + 621 + ], + [ + 558, + 561, + 622 + ], + [ + 566, + 623, + 585 + ], + [ + 540, + 604, + 605 + ], + [ + 604, + 567, + 624 + ], + [ + 610, + 587, + 514 + ], + [ + 544, + 625, + 519 + ], + [ + 549, + 615, + 626 + ], + [ + 543, + 574, + 627 + ], + [ + 605, + 589, + 513 + ], + [ + 526, + 613, + 600 + ], + [ + 568, + 603, + 628 + ], + [ + 625, + 591, + 519 + ], + [ + 615, + 554, + 550 + ], + [ + 557, + 621, + 629 + ], + [ + 588, + 616, + 611 + ], + [ + 558, + 622, + 592 + ], + [ + 630, + 531, + 542 + ], + [ + 543, + 599, + 533 + ], + [ + 613, + 547, + 576 + ], + [ + 549, + 626, + 631 + ], + [ + 538, + 618, + 632 + ], + [ + 572, + 619, + 539 + ], + [ + 543, + 627, + 633 + ], + [ + 567, + 563, + 602 + ], + [ + 556, + 634, + 535 + ], + [ + 635, + 580, + 569 + ], + [ + 544, + 596, + 636 + ], + [ + 528, + 617, + 583 + ], + [ + 613, + 576, + 637 + ], + [ + 620, + 606, + 517 + ], + [ + 577, + 638, + 548 + ], + [ + 549, + 631, + 597 + ], + [ + 557, + 629, + 581 + ], + [ + 639, + 564, + 592 + ], + [ + 538, + 632, + 575 + ], + [ + 523, + 640, + 542 + ], + [ + 619, + 641, + 552 + ], + [ + 619, + 572, + 609 + ], + [ + 591, + 642, + 569 + ], + [ + 643, + 610, + 580 + ], + [ + 644, + 596, + 560 + ], + [ + 645, + 592, + 622 + ], + [ + 623, + 646, + 585 + ], + [ + 641, + 598, + 552 + ], + [ + 578, + 647, + 577 + ], + [ + 544, + 636, + 648 + ], + [ + 597, + 644, + 560 + ], + [ + 565, + 582, + 616 + ], + [ + 584, + 618, + 570 + ], + [ + 543, + 633, + 649 + ], + [ + 559, + 650, + 555 + ], + [ + 610, + 643, + 651 + ], + [ + 642, + 635, + 569 + ], + [ + 652, + 630, + 542 + ], + [ + 579, + 653, + 566 + ], + [ + 619, + 609, + 654 + ], + [ + 600, + 655, + 602 + ], + [ + 637, + 576, + 606 + ], + [ + 568, + 628, + 607 + ], + [ + 610, + 651, + 587 + ], + [ + 640, + 652, + 542 + ], + [ + 590, + 656, + 603 + ], + [ + 657, + 614, + 535 + ], + [ + 635, + 658, + 580 + ], + [ + 544, + 648, + 625 + ], + [ + 639, + 582, + 564 + ], + [ + 589, + 627, + 574 + ], + [ + 590, + 594, + 659 + ], + [ + 634, + 556, + 573 + ], + [ + 634, + 657, + 535 + ], + [ + 591, + 625, + 642 + ], + [ + 550, + 612, + 660 + ], + [ + 581, + 629, + 612 + ], + [ + 645, + 639, + 592 + ], + [ + 661, + 645, + 622 + ], + [ + 662, + 584, + 531 + ], + [ + 543, + 649, + 599 + ], + [ + 655, + 600, + 613 + ], + [ + 586, + 663, + 573 + ], + [ + 561, + 583, + 622 + ], + [ + 589, + 605, + 664 + ], + [ + 650, + 620, + 555 + ], + [ + 656, + 628, + 603 + ], + [ + 638, + 608, + 548 + ], + [ + 647, + 638, + 577 + ], + [ + 658, + 643, + 580 + ], + [ + 596, + 644, + 665 + ], + [ + 582, + 639, + 666 + ], + [ + 630, + 662, + 531 + ], + [ + 653, + 623, + 566 + ], + [ + 619, + 654, + 667 + ], + [ + 589, + 664, + 668 + ], + [ + 624, + 567, + 602 + ], + [ + 637, + 606, + 669 + ], + [ + 593, + 670, + 559 + ], + [ + 671, + 634, + 573 + ], + [ + 587, + 651, + 595 + ], + [ + 550, + 660, + 615 + ], + [ + 642, + 672, + 635 + ], + [ + 582, + 666, + 673 + ], + [ + 674, + 661, + 622 + ], + [ + 618, + 584, + 662 + ], + [ + 609, + 601, + 675 + ], + [ + 590, + 659, + 656 + ], + [ + 663, + 586, + 608 + ], + [ + 631, + 644, + 597 + ], + [ + 598, + 676, + 579 + ], + [ + 595, + 677, + 578 + ], + [ + 596, + 665, + 636 + ], + [ + 601, + 599, + 649 + ], + [ + 609, + 675, + 654 + ], + [ + 655, + 678, + 602 + ], + [ + 655, + 613, + 679 + ], + [ + 663, + 671, + 573 + ], + [ + 644, + 631, + 680 + ], + [ + 582, + 673, + 681 + ], + [ + 583, + 682, + 622 + ], + [ + 589, + 668, + 683 + ], + [ + 670, + 650, + 559 + ], + [ + 684, + 611, + 616 + ], + [ + 598, + 641, + 676 + ], + [ + 606, + 620, + 685 + ], + [ + 614, + 657, + 686 + ], + [ + 608, + 638, + 687 + ], + [ + 672, + 658, + 635 + ], + [ + 625, + 688, + 642 + ], + [ + 642, + 688, + 689 + ], + [ + 631, + 626, + 680 + ], + [ + 682, + 674, + 622 + ], + [ + 618, + 690, + 691 + ], + [ + 676, + 653, + 579 + ], + [ + 589, + 683, + 627 + ], + [ + 663, + 608, + 692 + ], + [ + 677, + 595, + 651 + ], + [ + 693, + 626, + 615 + ], + [ + 582, + 681, + 616 + ], + [ + 632, + 694, + 575 + ], + [ + 646, + 623, + 695 + ], + [ + 667, + 641, + 619 + ], + [ + 607, + 696, + 593 + ], + [ + 677, + 647, + 578 + ], + [ + 643, + 697, + 651 + ], + [ + 601, + 649, + 698 + ], + [ + 604, + 664, + 605 + ], + [ + 678, + 624, + 602 + ], + [ + 606, + 685, + 669 + ], + [ + 671, + 657, + 634 + ], + [ + 644, + 680, + 699 + ], + [ + 629, + 700, + 612 + ], + [ + 681, + 684, + 616 + ], + [ + 611, + 684, + 621 + ], + [ + 639, + 645, + 701 + ], + [ + 694, + 617, + 575 + ], + [ + 618, + 662, + 690 + ], + [ + 613, + 637, + 702 + ], + [ + 614, + 686, + 659 + ], + [ + 625, + 648, + 688 + ], + [ + 660, + 693, + 615 + ], + [ + 629, + 621, + 700 + ], + [ + 617, + 703, + 583 + ], + [ + 618, + 691, + 632 + ], + [ + 6, + 8, + 523 + ], + [ + 8, + 640, + 523 + ], + [ + 659, + 594, + 614 + ], + [ + 642, + 689, + 672 + ], + [ + 704, + 660, + 612 + ], + [ + 583, + 703, + 705 + ], + [ + 706, + 676, + 641 + ], + [ + 696, + 670, + 593 + ], + [ + 687, + 638, + 647 + ], + [ + 688, + 648, + 707 + ], + [ + 639, + 701, + 666 + ], + [ + 662, + 630, + 708 + ], + [ + 709, + 664, + 604 + ], + [ + 624, + 710, + 604 + ], + [ + 608, + 687, + 692 + ], + [ + 711, + 677, + 651 + ], + [ + 644, + 699, + 665 + ], + [ + 653, + 712, + 623 + ], + [ + 712, + 695, + 623 + ], + [ + 712, + 653, + 676 + ], + [ + 620, + 650, + 713 + ], + [ + 687, + 647, + 714 + ], + [ + 643, + 658, + 715 + ], + [ + 688, + 707, + 716 + ], + [ + 648, + 636, + 707 + ], + [ + 708, + 630, + 652 + ], + [ + 695, + 717, + 646 + ], + [ + 667, + 718, + 641 + ], + [ + 613, + 702, + 679 + ], + [ + 697, + 711, + 651 + ], + [ + 601, + 698, + 675 + ], + [ + 633, + 627, + 683 + ], + [ + 633, + 719, + 649 + ], + [ + 668, + 664, + 709 + ], + [ + 624, + 678, + 720 + ], + [ + 628, + 721, + 607 + ], + [ + 671, + 722, + 686 + ], + [ + 687, + 714, + 723 + ], + [ + 626, + 693, + 724 + ], + [ + 725, + 704, + 612 + ], + [ + 583, + 705, + 682 + ], + [ + 703, + 617, + 726 + ], + [ + 706, + 712, + 676 + ], + [ + 624, + 720, + 727 + ], + [ + 710, + 709, + 604 + ], + [ + 700, + 725, + 612 + ], + [ + 645, + 661, + 701 + ], + [ + 717, + 728, + 646 + ], + [ + 620, + 713, + 685 + ], + [ + 677, + 714, + 647 + ], + [ + 729, + 706, + 641 + ], + [ + 643, + 715, + 697 + ], + [ + 688, + 716, + 689 + ], + [ + 626, + 724, + 730 + ], + [ + 731, + 708, + 652 + ], + [ + 719, + 698, + 649 + ], + [ + 720, + 678, + 655 + ], + [ + 656, + 732, + 628 + ], + [ + 663, + 733, + 671 + ], + [ + 704, + 693, + 660 + ], + [ + 654, + 734, + 667 + ], + [ + 674, + 735, + 661 + ], + [ + 712, + 736, + 695 + ], + [ + 734, + 654, + 675 + ], + [ + 683, + 668, + 737 + ], + [ + 650, + 670, + 738 + ], + [ + 656, + 659, + 739 + ], + [ + 677, + 711, + 714 + ], + [ + 636, + 665, + 740 + ], + [ + 626, + 730, + 680 + ], + [ + 684, + 741, + 621 + ], + [ + 742, + 700, + 621 + ], + [ + 684, + 681, + 743 + ], + [ + 617, + 694, + 726 + ], + [ + 632, + 691, + 744 + ], + [ + 708, + 745, + 662 + ], + [ + 640, + 746, + 652 + ], + [ + 734, + 718, + 667 + ], + [ + 719, + 633, + 683 + ], + [ + 624, + 727, + 710 + ], + [ + 669, + 747, + 637 + ], + [ + 732, + 721, + 628 + ], + [ + 703, + 726, + 748 + ], + [ + 749, + 690, + 662 + ], + [ + 721, + 696, + 607 + ], + [ + 750, + 666, + 701 + ], + [ + 751, + 701, + 661 + ], + [ + 752, + 731, + 652 + ], + [ + 718, + 729, + 641 + ], + [ + 655, + 679, + 753 + ], + [ + 733, + 722, + 671 + ], + [ + 672, + 754, + 658 + ], + [ + 636, + 740, + 707 + ], + [ + 693, + 704, + 755 + ], + [ + 735, + 756, + 661 + ], + [ + 675, + 698, + 734 + ], + [ + 683, + 737, + 757 + ], + [ + 747, + 702, + 637 + ], + [ + 650, + 738, + 713 + ], + [ + 656, + 739, + 732 + ], + [ + 671, + 686, + 657 + ], + [ + 692, + 687, + 758 + ], + [ + 684, + 743, + 741 + ], + [ + 632, + 744, + 694 + ], + [ + 759, + 717, + 695 + ], + [ + 711, + 760, + 714 + ], + [ + 761, + 742, + 621 + ], + [ + 746, + 752, + 652 + ], + [ + 737, + 668, + 709 + ], + [ + 754, + 715, + 658 + ], + [ + 681, + 673, + 743 + ], + [ + 762, + 735, + 674 + ], + [ + 703, + 748, + 763 + ], + [ + 706, + 764, + 712 + ], + [ + 727, + 720, + 753 + ], + [ + 655, + 753, + 720 + ], + [ + 670, + 696, + 765 + ], + [ + 665, + 699, + 766 + ], + [ + 680, + 730, + 699 + ], + [ + 704, + 725, + 767 + ], + [ + 750, + 673, + 666 + ], + [ + 737, + 709, + 768 + ], + [ + 753, + 679, + 702 + ], + [ + 685, + 769, + 669 + ], + [ + 659, + 686, + 770 + ], + [ + 692, + 758, + 733 + ], + [ + 707, + 740, + 771 + ], + [ + 704, + 767, + 755 + ], + [ + 741, + 761, + 621 + ], + [ + 751, + 750, + 701 + ], + [ + 756, + 751, + 661 + ], + [ + 690, + 749, + 772 + ], + [ + 745, + 749, + 662 + ], + [ + 736, + 759, + 695 + ], + [ + 764, + 736, + 712 + ], + [ + 698, + 773, + 734 + ], + [ + 757, + 719, + 683 + ], + [ + 670, + 765, + 774 + ], + [ + 692, + 733, + 663 + ], + [ + 760, + 775, + 714 + ], + [ + 682, + 762, + 674 + ], + [ + 735, + 762, + 776 + ], + [ + 703, + 763, + 705 + ], + [ + 708, + 731, + 777 + ], + [ + 773, + 778, + 734 + ], + [ + 685, + 713, + 779 + ], + [ + 689, + 780, + 672 + ], + [ + 665, + 766, + 781 + ], + [ + 693, + 755, + 724 + ], + [ + 742, + 725, + 700 + ], + [ + 737, + 768, + 782 + ], + [ + 753, + 702, + 783 + ], + [ + 696, + 721, + 765 + ], + [ + 686, + 722, + 784 + ], + [ + 707, + 771, + 716 + ], + [ + 694, + 744, + 726 + ], + [ + 690, + 772, + 785 + ], + [ + 698, + 719, + 773 + ], + [ + 709, + 710, + 768 + ], + [ + 769, + 747, + 669 + ], + [ + 670, + 774, + 738 + ], + [ + 708, + 777, + 745 + ], + [ + 786, + 718, + 734 + ], + [ + 685, + 779, + 769 + ], + [ + 659, + 770, + 787 + ], + [ + 787, + 739, + 659 + ], + [ + 775, + 723, + 714 + ], + [ + 697, + 788, + 711 + ], + [ + 725, + 742, + 789 + ], + [ + 790, + 743, + 673 + ], + [ + 735, + 776, + 756 + ], + [ + 682, + 705, + 791 + ], + [ + 8, + 10, + 640 + ], + [ + 727, + 753, + 792 + ], + [ + 723, + 793, + 687 + ], + [ + 665, + 781, + 740 + ], + [ + 699, + 730, + 794 + ], + [ + 728, + 717, + 795 + ], + [ + 753, + 783, + 796 + ], + [ + 784, + 722, + 733 + ], + [ + 689, + 716, + 797 + ], + [ + 780, + 754, + 672 + ], + [ + 744, + 691, + 785 + ], + [ + 690, + 785, + 691 + ], + [ + 729, + 764, + 706 + ], + [ + 778, + 798, + 734 + ], + [ + 783, + 702, + 747 + ], + [ + 721, + 732, + 799 + ], + [ + 788, + 760, + 711 + ], + [ + 800, + 741, + 743 + ], + [ + 750, + 801, + 673 + ], + [ + 10, + 746, + 640 + ], + [ + 798, + 786, + 734 + ], + [ + 699, + 794, + 802 + ], + [ + 682, + 791, + 762 + ], + [ + 729, + 718, + 786 + ], + [ + 727, + 803, + 710 + ], + [ + 783, + 747, + 804 + ], + [ + 713, + 738, + 805 + ], + [ + 715, + 806, + 697 + ], + [ + 730, + 724, + 794 + ], + [ + 744, + 807, + 726 + ], + [ + 719, + 757, + 808 + ], + [ + 784, + 733, + 809 + ], + [ + 689, + 797, + 780 + ], + [ + 725, + 789, + 767 + ], + [ + 742, + 761, + 810 + ], + [ + 790, + 800, + 743 + ], + [ + 762, + 791, + 811 + ], + [ + 717, + 812, + 795 + ], + [ + 721, + 799, + 813 + ], + [ + 760, + 814, + 775 + ], + [ + 742, + 810, + 789 + ], + [ + 815, + 790, + 673 + ], + [ + 812, + 717, + 759 + ], + [ + 719, + 808, + 816 + ], + [ + 793, + 758, + 687 + ], + [ + 750, + 751, + 817 + ], + [ + 726, + 807, + 818 + ], + [ + 752, + 777, + 731 + ], + [ + 795, + 812, + 819 + ], + [ + 803, + 727, + 792 + ], + [ + 804, + 747, + 769 + ], + [ + 721, + 813, + 765 + ], + [ + 732, + 739, + 820 + ], + [ + 699, + 802, + 766 + ], + [ + 741, + 800, + 761 + ], + [ + 801, + 815, + 673 + ], + [ + 821, + 768, + 710 + ], + [ + 713, + 805, + 779 + ], + [ + 686, + 784, + 770 + ], + [ + 775, + 822, + 793 + ], + [ + 814, + 760, + 788 + ], + [ + 716, + 771, + 823 + ], + [ + 762, + 811, + 776 + ], + [ + 736, + 764, + 824 + ], + [ + 786, + 825, + 729 + ], + [ + 824, + 764, + 729 + ], + [ + 719, + 816, + 826 + ], + [ + 808, + 757, + 737 + ], + [ + 806, + 788, + 697 + ], + [ + 715, + 754, + 827 + ], + [ + 781, + 771, + 740 + ], + [ + 750, + 817, + 801 + ], + [ + 726, + 818, + 748 + ], + [ + 828, + 745, + 777 + ], + [ + 719, + 826, + 773 + ], + [ + 705, + 763, + 791 + ], + [ + 791, + 763, + 829 + ], + [ + 745, + 828, + 830 + ], + [ + 777, + 752, + 831 + ], + [ + 778, + 773, + 826 + ], + [ + 803, + 821, + 710 + ], + [ + 813, + 774, + 765 + ], + [ + 732, + 820, + 799 + ], + [ + 715, + 827, + 806 + ], + [ + 755, + 832, + 724 + ], + [ + 785, + 833, + 744 + ], + [ + 795, + 819, + 834 + ], + [ + 835, + 759, + 736 + ], + [ + 759, + 835, + 836 + ], + [ + 736, + 824, + 835 + ], + [ + 798, + 837, + 786 + ], + [ + 803, + 792, + 838 + ], + [ + 804, + 769, + 839 + ], + [ + 745, + 830, + 840 + ], + [ + 837, + 825, + 786 + ], + [ + 753, + 796, + 792 + ], + [ + 758, + 841, + 733 + ], + [ + 775, + 793, + 723 + ], + [ + 814, + 788, + 842 + ], + [ + 814, + 822, + 775 + ], + [ + 716, + 823, + 797 + ], + [ + 832, + 755, + 767 + ], + [ + 800, + 790, + 843 + ], + [ + 746, + 831, + 752 + ], + [ + 774, + 844, + 738 + ], + [ + 845, + 794, + 724 + ], + [ + 791, + 829, + 846 + ], + [ + 763, + 748, + 829 + ], + [ + 777, + 831, + 847 + ], + [ + 737, + 782, + 808 + ], + [ + 820, + 739, + 787 + ], + [ + 832, + 848, + 724 + ], + [ + 832, + 767, + 789 + ], + [ + 800, + 849, + 761 + ], + [ + 800, + 843, + 850 + ], + [ + 745, + 840, + 749 + ], + [ + 851, + 824, + 729 + ], + [ + 768, + 821, + 782 + ], + [ + 774, + 813, + 852 + ], + [ + 841, + 758, + 793 + ], + [ + 853, + 807, + 744 + ], + [ + 759, + 836, + 819 + ], + [ + 844, + 805, + 738 + ], + [ + 787, + 770, + 854 + ], + [ + 754, + 780, + 855 + ], + [ + 781, + 766, + 856 + ], + [ + 756, + 857, + 751 + ], + [ + 833, + 858, + 744 + ], + [ + 785, + 772, + 833 + ], + [ + 859, + 828, + 777 + ], + [ + 733, + 860, + 809 + ], + [ + 848, + 845, + 724 + ], + [ + 800, + 850, + 849 + ], + [ + 857, + 817, + 751 + ], + [ + 777, + 847, + 859 + ], + [ + 808, + 861, + 862 + ], + [ + 796, + 783, + 863 + ], + [ + 813, + 799, + 864 + ], + [ + 787, + 854, + 865 + ], + [ + 832, + 789, + 866 + ], + [ + 791, + 846, + 811 + ], + [ + 858, + 853, + 744 + ], + [ + 825, + 851, + 729 + ], + [ + 838, + 792, + 796 + ], + [ + 769, + 779, + 867 + ], + [ + 854, + 770, + 784 + ], + [ + 841, + 860, + 733 + ], + [ + 841, + 793, + 868 + ], + [ + 754, + 855, + 827 + ], + [ + 781, + 869, + 771 + ], + [ + 781, + 856, + 869 + ], + [ + 829, + 748, + 818 + ], + [ + 840, + 772, + 749 + ], + [ + 759, + 819, + 812 + ], + [ + 774, + 852, + 844 + ], + [ + 787, + 865, + 870 + ], + [ + 832, + 866, + 871 + ], + [ + 849, + 810, + 761 + ], + [ + 790, + 815, + 843 + ], + [ + 872, + 817, + 857 + ], + [ + 778, + 826, + 873 + ], + [ + 778, + 873, + 874 + ], + [ + 778, + 837, + 798 + ], + [ + 782, + 861, + 808 + ], + [ + 769, + 867, + 875 + ], + [ + 813, + 864, + 852 + ], + [ + 870, + 820, + 787 + ], + [ + 794, + 845, + 802 + ], + [ + 15, + 831, + 746 + ], + [ + 10, + 15, + 746 + ], + [ + 863, + 783, + 804 + ], + [ + 832, + 871, + 876 + ], + [ + 756, + 776, + 857 + ], + [ + 808, + 862, + 816 + ], + [ + 784, + 809, + 854 + ], + [ + 780, + 797, + 877 + ], + [ + 817, + 872, + 801 + ], + [ + 829, + 818, + 878 + ], + [ + 824, + 879, + 835 + ], + [ + 821, + 880, + 782 + ], + [ + 779, + 805, + 881 + ], + [ + 793, + 822, + 882 + ], + [ + 806, + 883, + 788 + ], + [ + 869, + 823, + 771 + ], + [ + 810, + 866, + 789 + ], + [ + 801, + 884, + 815 + ], + [ + 863, + 885, + 796 + ], + [ + 769, + 875, + 839 + ], + [ + 815, + 884, + 886 + ], + [ + 872, + 884, + 801 + ], + [ + 857, + 776, + 887 + ], + [ + 840, + 888, + 772 + ], + [ + 825, + 837, + 889 + ], + [ + 778, + 874, + 889 + ], + [ + 880, + 821, + 803 + ], + [ + 863, + 804, + 890 + ], + [ + 806, + 827, + 891 + ], + [ + 802, + 892, + 766 + ], + [ + 893, + 833, + 772 + ], + [ + 879, + 836, + 835 + ], + [ + 779, + 881, + 867 + ], + [ + 822, + 814, + 894 + ], + [ + 883, + 842, + 788 + ], + [ + 780, + 877, + 855 + ], + [ + 895, + 872, + 857 + ], + [ + 778, + 889, + 837 + ], + [ + 880, + 896, + 782 + ], + [ + 885, + 838, + 796 + ], + [ + 881, + 805, + 844 + ], + [ + 820, + 870, + 897 + ], + [ + 809, + 898, + 854 + ], + [ + 793, + 882, + 868 + ], + [ + 806, + 891, + 883 + ], + [ + 853, + 818, + 807 + ], + [ + 820, + 899, + 799 + ], + [ + 857, + 887, + 895 + ], + [ + 834, + 819, + 900 + ], + [ + 901, + 861, + 782 + ], + [ + 890, + 804, + 839 + ], + [ + 881, + 844, + 852 + ], + [ + 810, + 849, + 902 + ], + [ + 815, + 886, + 903 + ], + [ + 811, + 904, + 776 + ], + [ + 888, + 893, + 772 + ], + [ + 825, + 889, + 905 + ], + [ + 863, + 890, + 906 + ], + [ + 865, + 854, + 907 + ], + [ + 894, + 814, + 842 + ], + [ + 823, + 908, + 797 + ], + [ + 802, + 845, + 909 + ], + [ + 892, + 856, + 766 + ], + [ + 810, + 902, + 910 + ], + [ + 833, + 893, + 911 + ], + [ + 803, + 838, + 880 + ], + [ + 898, + 907, + 854 + ], + [ + 822, + 894, + 882 + ], + [ + 815, + 903, + 843 + ], + [ + 884, + 872, + 912 + ], + [ + 816, + 862, + 913 + ], + [ + 816, + 873, + 826 + ], + [ + 896, + 901, + 782 + ], + [ + 810, + 910, + 914 + ], + [ + 818, + 853, + 915 + ], + [ + 828, + 916, + 830 + ], + [ + 15, + 20, + 831 + ], + [ + 20, + 847, + 831 + ], + [ + 890, + 839, + 917 + ], + [ + 876, + 848, + 832 + ], + [ + 845, + 848, + 918 + ], + [ + 840, + 830, + 888 + ], + [ + 916, + 828, + 859 + ], + [ + 851, + 879, + 824 + ], + [ + 863, + 906, + 885 + ], + [ + 881, + 852, + 919 + ], + [ + 894, + 842, + 920 + ], + [ + 833, + 911, + 858 + ], + [ + 900, + 921, + 834 + ], + [ + 900, + 819, + 836 + ], + [ + 838, + 922, + 880 + ], + [ + 899, + 864, + 799 + ], + [ + 820, + 897, + 899 + ], + [ + 860, + 923, + 809 + ], + [ + 855, + 924, + 827 + ], + [ + 823, + 869, + 925 + ], + [ + 802, + 909, + 892 + ], + [ + 884, + 912, + 886 + ], + [ + 904, + 926, + 776 + ], + [ + 904, + 811, + 846 + ], + [ + 878, + 927, + 829 + ], + [ + 818, + 915, + 928 + ], + [ + 851, + 825, + 905 + ], + [ + 860, + 841, + 929 + ], + [ + 908, + 877, + 797 + ], + [ + 845, + 918, + 909 + ], + [ + 810, + 914, + 866 + ], + [ + 927, + 846, + 829 + ], + [ + 858, + 915, + 853 + ], + [ + 818, + 928, + 930 + ], + [ + 874, + 873, + 913 + ], + [ + 823, + 925, + 931 + ], + [ + 849, + 850, + 902 + ], + [ + 903, + 850, + 843 + ], + [ + 816, + 913, + 873 + ], + [ + 906, + 890, + 917 + ], + [ + 865, + 932, + 870 + ], + [ + 920, + 842, + 883 + ], + [ + 848, + 876, + 933 + ], + [ + 866, + 914, + 871 + ], + [ + 818, + 930, + 878 + ], + [ + 934, + 916, + 859 + ], + [ + 913, + 862, + 901 + ], + [ + 862, + 861, + 901 + ], + [ + 881, + 919, + 935 + ], + [ + 860, + 929, + 923 + ], + [ + 856, + 925, + 869 + ], + [ + 872, + 895, + 936 + ], + [ + 905, + 937, + 851 + ], + [ + 938, + 867, + 881 + ], + [ + 924, + 891, + 827 + ], + [ + 855, + 877, + 939 + ], + [ + 926, + 887, + 776 + ], + [ + 916, + 940, + 830 + ], + [ + 847, + 941, + 859 + ], + [ + 921, + 942, + 834 + ], + [ + 943, + 879, + 851 + ], + [ + 880, + 922, + 944 + ], + [ + 838, + 885, + 945 + ], + [ + 906, + 917, + 946 + ], + [ + 839, + 875, + 917 + ], + [ + 852, + 864, + 947 + ], + [ + 932, + 897, + 870 + ], + [ + 904, + 846, + 948 + ], + [ + 949, + 888, + 830 + ], + [ + 950, + 900, + 836 + ], + [ + 935, + 938, + 881 + ], + [ + 852, + 947, + 951 + ], + [ + 920, + 883, + 952 + ], + [ + 823, + 931, + 908 + ], + [ + 850, + 903, + 953 + ], + [ + 872, + 936, + 954 + ], + [ + 858, + 911, + 915 + ], + [ + 938, + 875, + 867 + ], + [ + 875, + 938, + 955 + ], + [ + 855, + 939, + 924 + ], + [ + 941, + 934, + 859 + ], + [ + 874, + 913, + 956 + ], + [ + 913, + 901, + 957 + ], + [ + 880, + 944, + 896 + ], + [ + 852, + 951, + 919 + ], + [ + 868, + 958, + 841 + ], + [ + 848, + 933, + 918 + ], + [ + 876, + 871, + 959 + ], + [ + 879, + 943, + 836 + ], + [ + 901, + 896, + 957 + ], + [ + 945, + 885, + 906 + ], + [ + 923, + 898, + 809 + ], + [ + 872, + 954, + 912 + ], + [ + 960, + 943, + 851 + ], + [ + 961, + 937, + 905 + ], + [ + 889, + 961, + 905 + ], + [ + 875, + 955, + 946 + ], + [ + 898, + 962, + 907 + ], + [ + 868, + 882, + 958 + ], + [ + 856, + 892, + 963 + ], + [ + 895, + 887, + 964 + ], + [ + 904, + 948, + 965 + ], + [ + 20, + 27, + 847 + ], + [ + 950, + 966, + 900 + ], + [ + 937, + 960, + 851 + ], + [ + 943, + 950, + 836 + ], + [ + 838, + 945, + 922 + ], + [ + 907, + 967, + 865 + ], + [ + 856, + 963, + 968 + ], + [ + 850, + 953, + 969 + ], + [ + 903, + 886, + 970 + ], + [ + 888, + 949, + 971 + ], + [ + 913, + 957, + 972 + ], + [ + 883, + 891, + 973 + ], + [ + 876, + 959, + 933 + ], + [ + 903, + 970, + 974 + ], + [ + 904, + 965, + 926 + ], + [ + 940, + 975, + 830 + ], + [ + 916, + 934, + 976 + ], + [ + 966, + 921, + 900 + ], + [ + 945, + 906, + 977 + ], + [ + 895, + 964, + 936 + ], + [ + 846, + 927, + 978 + ], + [ + 975, + 949, + 830 + ], + [ + 961, + 889, + 874 + ], + [ + 875, + 946, + 917 + ], + [ + 947, + 864, + 899 + ], + [ + 962, + 967, + 907 + ], + [ + 979, + 929, + 841 + ], + [ + 850, + 969, + 902 + ], + [ + 915, + 980, + 981 + ], + [ + 911, + 980, + 915 + ], + [ + 888, + 971, + 893 + ], + [ + 27, + 941, + 847 + ], + [ + 957, + 896, + 944 + ], + [ + 938, + 935, + 982 + ], + [ + 983, + 947, + 899 + ], + [ + 883, + 973, + 952 + ], + [ + 908, + 984, + 877 + ], + [ + 925, + 968, + 931 + ], + [ + 916, + 976, + 940 + ], + [ + 958, + 979, + 841 + ], + [ + 856, + 968, + 925 + ], + [ + 902, + 969, + 910 + ], + [ + 903, + 974, + 953 + ], + [ + 893, + 971, + 911 + ], + [ + 977, + 906, + 946 + ], + [ + 894, + 985, + 882 + ], + [ + 846, + 978, + 948 + ], + [ + 930, + 927, + 878 + ], + [ + 913, + 972, + 986 + ], + [ + 938, + 982, + 955 + ], + [ + 897, + 987, + 899 + ], + [ + 967, + 932, + 865 + ], + [ + 923, + 988, + 898 + ], + [ + 989, + 958, + 882 + ], + [ + 914, + 990, + 871 + ], + [ + 915, + 981, + 928 + ], + [ + 911, + 971, + 991 + ], + [ + 937, + 961, + 992 + ], + [ + 984, + 939, + 877 + ], + [ + 909, + 918, + 993 + ], + [ + 914, + 910, + 994 + ], + [ + 886, + 912, + 995 + ], + [ + 887, + 926, + 996 + ], + [ + 874, + 956, + 992 + ], + [ + 957, + 944, + 997 + ], + [ + 985, + 989, + 882 + ], + [ + 931, + 998, + 908 + ], + [ + 990, + 959, + 871 + ], + [ + 886, + 995, + 970 + ], + [ + 935, + 919, + 999 + ], + [ + 1000, + 983, + 899 + ], + [ + 929, + 1001, + 923 + ], + [ + 931, + 968, + 1002 + ], + [ + 909, + 1003, + 892 + ], + [ + 914, + 994, + 990 + ], + [ + 887, + 996, + 964 + ], + [ + 927, + 930, + 1004 + ], + [ + 922, + 945, + 1005 + ], + [ + 977, + 946, + 1006 + ], + [ + 924, + 1007, + 891 + ], + [ + 1003, + 963, + 892 + ], + [ + 912, + 954, + 995 + ], + [ + 911, + 991, + 1008 + ], + [ + 935, + 999, + 1009 + ], + [ + 929, + 979, + 1010 + ], + [ + 909, + 993, + 1003 + ], + [ + 948, + 978, + 1011 + ], + [ + 927, + 1004, + 1012 + ], + [ + 971, + 949, + 1013 + ], + [ + 942, + 921, + 1014 + ], + [ + 943, + 1015, + 950 + ], + [ + 937, + 992, + 1016 + ], + [ + 987, + 1000, + 899 + ], + [ + 988, + 962, + 898 + ], + [ + 920, + 1017, + 894 + ], + [ + 918, + 933, + 1018 + ], + [ + 928, + 1004, + 930 + ], + [ + 934, + 941, + 1019 + ], + [ + 1015, + 966, + 950 + ], + [ + 874, + 992, + 961 + ], + [ + 932, + 987, + 897 + ], + [ + 998, + 984, + 908 + ], + [ + 948, + 1011, + 965 + ], + [ + 911, + 1008, + 1020 + ], + [ + 971, + 1013, + 991 + ], + [ + 934, + 1019, + 976 + ], + [ + 937, + 1016, + 1021 + ], + [ + 922, + 1005, + 944 + ], + [ + 919, + 951, + 999 + ], + [ + 1001, + 988, + 923 + ], + [ + 989, + 979, + 958 + ], + [ + 918, + 1018, + 1022 + ], + [ + 1023, + 954, + 936 + ], + [ + 927, + 1012, + 1024 + ], + [ + 942, + 1014, + 1025 + ], + [ + 992, + 956, + 986 + ], + [ + 956, + 913, + 986 + ], + [ + 1005, + 1026, + 944 + ], + [ + 935, + 1009, + 982 + ], + [ + 929, + 1010, + 1001 + ], + [ + 968, + 963, + 1027 + ], + [ + 969, + 1028, + 910 + ], + [ + 954, + 1023, + 1029 + ], + [ + 927, + 1024, + 978 + ], + [ + 1030, + 940, + 976 + ], + [ + 983, + 951, + 947 + ], + [ + 999, + 951, + 983 + ], + [ + 1007, + 973, + 891 + ], + [ + 931, + 1002, + 998 + ], + [ + 918, + 1022, + 993 + ], + [ + 969, + 953, + 1031 + ], + [ + 936, + 964, + 1032 + ], + [ + 1004, + 928, + 981 + ], + [ + 911, + 1020, + 980 + ], + [ + 972, + 957, + 997 + ], + [ + 1017, + 985, + 894 + ], + [ + 936, + 1032, + 1023 + ], + [ + 975, + 1013, + 949 + ], + [ + 976, + 1019, + 1033 + ], + [ + 992, + 986, + 1034 + ], + [ + 946, + 955, + 1035 + ], + [ + 967, + 1036, + 932 + ], + [ + 967, + 962, + 1036 + ], + [ + 952, + 1037, + 920 + ], + [ + 939, + 1038, + 924 + ], + [ + 960, + 1015, + 943 + ], + [ + 1039, + 987, + 932 + ], + [ + 969, + 1031, + 1028 + ], + [ + 954, + 1029, + 1040 + ], + [ + 965, + 1041, + 926 + ], + [ + 1030, + 975, + 940 + ], + [ + 921, + 966, + 1042 + ], + [ + 972, + 997, + 1043 + ], + [ + 1026, + 1005, + 977 + ], + [ + 999, + 983, + 1044 + ], + [ + 968, + 1027, + 1002 + ], + [ + 1028, + 994, + 910 + ], + [ + 1045, + 970, + 995 + ], + [ + 1046, + 996, + 926 + ], + [ + 1047, + 1030, + 976 + ], + [ + 976, + 1033, + 1048 + ], + [ + 1010, + 979, + 989 + ], + [ + 963, + 1003, + 1049 + ], + [ + 959, + 1018, + 933 + ], + [ + 1004, + 981, + 1050 + ], + [ + 921, + 1042, + 1051 + ], + [ + 1021, + 960, + 937 + ], + [ + 960, + 1021, + 1052 + ], + [ + 1005, + 945, + 977 + ], + [ + 989, + 985, + 1053 + ], + [ + 939, + 984, + 1054 + ], + [ + 1038, + 1007, + 924 + ], + [ + 1041, + 1046, + 926 + ], + [ + 27, + 1019, + 941 + ], + [ + 992, + 1034, + 1055 + ], + [ + 1056, + 997, + 944 + ], + [ + 946, + 1035, + 1006 + ], + [ + 1037, + 1017, + 920 + ], + [ + 959, + 990, + 1057 + ], + [ + 1023, + 1032, + 1058 + ], + [ + 965, + 1011, + 1059 + ], + [ + 975, + 1030, + 1060 + ], + [ + 976, + 1048, + 1047 + ], + [ + 1042, + 966, + 1015 + ], + [ + 999, + 1044, + 1061 + ], + [ + 1009, + 999, + 1061 + ], + [ + 1062, + 1039, + 932 + ], + [ + 953, + 974, + 1063 + ], + [ + 970, + 1045, + 974 + ], + [ + 1040, + 1045, + 995 + ], + [ + 954, + 1040, + 995 + ], + [ + 964, + 996, + 1064 + ], + [ + 1004, + 1050, + 1065 + ], + [ + 980, + 1020, + 981 + ], + [ + 960, + 1052, + 1066 + ], + [ + 992, + 1055, + 1067 + ], + [ + 955, + 982, + 1068 + ], + [ + 1036, + 1062, + 932 + ], + [ + 989, + 1053, + 1069 + ], + [ + 973, + 1070, + 952 + ], + [ + 964, + 1064, + 1032 + ], + [ + 921, + 1051, + 1014 + ], + [ + 972, + 1034, + 986 + ], + [ + 1026, + 1056, + 944 + ], + [ + 1026, + 977, + 1071 + ], + [ + 963, + 1049, + 1027 + ], + [ + 978, + 1024, + 1011 + ], + [ + 27, + 40, + 1019 + ], + [ + 955, + 1068, + 1035 + ], + [ + 988, + 1072, + 962 + ], + [ + 985, + 1017, + 1073 + ], + [ + 939, + 1054, + 1038 + ], + [ + 959, + 1057, + 1074 + ], + [ + 953, + 1063, + 1031 + ], + [ + 1023, + 1058, + 1029 + ], + [ + 965, + 1059, + 1041 + ], + [ + 1013, + 1075, + 1076 + ], + [ + 975, + 1060, + 1077 + ], + [ + 983, + 1000, + 1078 + ], + [ + 1011, + 1024, + 1079 + ], + [ + 984, + 998, + 1080 + ], + [ + 959, + 1074, + 1018 + ], + [ + 974, + 1045, + 1081 + ], + [ + 1004, + 1065, + 1012 + ], + [ + 40, + 1033, + 1019 + ], + [ + 960, + 1066, + 1015 + ], + [ + 972, + 1043, + 1082 + ], + [ + 1068, + 982, + 1009 + ], + [ + 1039, + 1000, + 987 + ], + [ + 1083, + 1036, + 962 + ], + [ + 1072, + 1084, + 962 + ], + [ + 1049, + 1003, + 993 + ], + [ + 1013, + 1076, + 991 + ], + [ + 975, + 1077, + 1075 + ], + [ + 1085, + 1086, + 1025 + ], + [ + 983, + 1078, + 1044 + ], + [ + 1069, + 1010, + 989 + ], + [ + 985, + 1073, + 1053 + ], + [ + 1070, + 1037, + 952 + ], + [ + 993, + 1022, + 1087 + ], + [ + 990, + 994, + 1088 + ], + [ + 1032, + 1064, + 1089 + ], + [ + 1020, + 1090, + 981 + ], + [ + 1091, + 977, + 1006 + ], + [ + 1045, + 1040, + 1092 + ], + [ + 975, + 1075, + 1013 + ], + [ + 1014, + 1085, + 1025 + ], + [ + 1066, + 1042, + 1015 + ], + [ + 1072, + 988, + 1001 + ], + [ + 1084, + 1083, + 962 + ], + [ + 1007, + 1093, + 973 + ], + [ + 1018, + 1074, + 1022 + ], + [ + 990, + 1088, + 1057 + ], + [ + 1011, + 1079, + 1094 + ], + [ + 991, + 1076, + 1008 + ], + [ + 977, + 1091, + 1095 + ], + [ + 984, + 1080, + 1054 + ], + [ + 974, + 1081, + 1063 + ], + [ + 1046, + 1064, + 996 + ], + [ + 1096, + 1050, + 981 + ], + [ + 1016, + 1052, + 1021 + ], + [ + 972, + 1082, + 1034 + ], + [ + 1035, + 1068, + 1097 + ], + [ + 993, + 1087, + 1049 + ], + [ + 1030, + 1047, + 1098 + ], + [ + 1006, + 1035, + 1099 + ], + [ + 1097, + 1068, + 1009 + ], + [ + 1100, + 1072, + 1001 + ], + [ + 1032, + 1089, + 1058 + ], + [ + 1064, + 1046, + 1101 + ], + [ + 1078, + 1000, + 1039 + ], + [ + 1010, + 1102, + 1001 + ], + [ + 1045, + 1092, + 1081 + ], + [ + 1011, + 1094, + 1059 + ], + [ + 1012, + 1079, + 1024 + ], + [ + 1008, + 1090, + 1020 + ], + [ + 1030, + 1098, + 1060 + ], + [ + 1086, + 1085, + 1103 + ], + [ + 1067, + 1016, + 992 + ], + [ + 1006, + 1099, + 1091 + ], + [ + 1022, + 1074, + 1104 + ], + [ + 1064, + 1101, + 1105 + ], + [ + 1106, + 1096, + 981 + ], + [ + 1051, + 1085, + 1014 + ], + [ + 1082, + 1043, + 1056 + ], + [ + 1056, + 1043, + 997 + ], + [ + 1035, + 1097, + 1099 + ], + [ + 1061, + 1107, + 1009 + ], + [ + 1039, + 1062, + 1108 + ], + [ + 1093, + 1070, + 973 + ], + [ + 1002, + 1027, + 1109 + ], + [ + 1028, + 1110, + 994 + ], + [ + 1028, + 1031, + 1111 + ], + [ + 1040, + 1029, + 1112 + ], + [ + 977, + 1095, + 1071 + ], + [ + 1083, + 1062, + 1036 + ], + [ + 1039, + 1108, + 1113 + ], + [ + 1037, + 1114, + 1017 + ], + [ + 1038, + 1115, + 1007 + ], + [ + 1002, + 1116, + 998 + ], + [ + 1110, + 1088, + 994 + ], + [ + 1041, + 1101, + 1046 + ], + [ + 1008, + 1076, + 1117 + ], + [ + 1028, + 1111, + 1118 + ], + [ + 1098, + 1047, + 1048 + ], + [ + 1082, + 1056, + 1119 + ], + [ + 1120, + 1097, + 1009 + ], + [ + 1102, + 1100, + 1001 + ], + [ + 1069, + 1121, + 1010 + ], + [ + 1063, + 1111, + 1031 + ], + [ + 1090, + 1106, + 981 + ], + [ + 1086, + 1103, + 1122 + ], + [ + 1113, + 1078, + 1039 + ], + [ + 1028, + 1118, + 1110 + ], + [ + 1040, + 1112, + 1092 + ], + [ + 1064, + 1105, + 1089 + ], + [ + 1008, + 1117, + 1123 + ], + [ + 1124, + 1052, + 1016 + ], + [ + 1067, + 1125, + 1016 + ], + [ + 1034, + 1082, + 1126 + ], + [ + 1082, + 1119, + 1127 + ], + [ + 1061, + 1044, + 1128 + ], + [ + 1121, + 1069, + 1053 + ], + [ + 1114, + 1073, + 1017 + ], + [ + 1111, + 1063, + 1081 + ], + [ + 1050, + 1096, + 1065 + ], + [ + 1129, + 1079, + 1012 + ], + [ + 1065, + 1130, + 1012 + ], + [ + 1119, + 1056, + 1026 + ], + [ + 1070, + 1131, + 1037 + ], + [ + 1115, + 1093, + 1007 + ], + [ + 1002, + 1109, + 1116 + ], + [ + 1116, + 1080, + 998 + ], + [ + 1022, + 1104, + 1087 + ], + [ + 1057, + 1132, + 1074 + ], + [ + 1099, + 1133, + 1091 + ], + [ + 1061, + 1128, + 1107 + ], + [ + 1053, + 1073, + 1121 + ], + [ + 1038, + 1054, + 1134 + ], + [ + 1027, + 1049, + 1135 + ], + [ + 1041, + 1059, + 1136 + ], + [ + 1107, + 1120, + 1009 + ], + [ + 1100, + 1084, + 1072 + ], + [ + 1121, + 1137, + 1010 + ], + [ + 1029, + 1058, + 1138 + ], + [ + 1008, + 1123, + 1139 + ], + [ + 1076, + 1075, + 1140 + ], + [ + 1048, + 1033, + 1141 + ], + [ + 1051, + 1142, + 1143 + ], + [ + 1052, + 1124, + 1144 + ], + [ + 1125, + 1124, + 1016 + ], + [ + 1034, + 1126, + 1055 + ], + [ + 1128, + 1044, + 1078 + ], + [ + 1131, + 1114, + 1037 + ], + [ + 1111, + 1081, + 1145 + ], + [ + 1041, + 1136, + 1101 + ], + [ + 1130, + 1129, + 1012 + ], + [ + 1146, + 1060, + 1098 + ], + [ + 1051, + 1042, + 1142 + ], + [ + 1147, + 1095, + 1091 + ], + [ + 1027, + 1135, + 1109 + ], + [ + 1132, + 1104, + 1074 + ], + [ + 1065, + 1096, + 1148 + ], + [ + 1149, + 1098, + 1048 + ], + [ + 1141, + 1033, + 40 + ], + [ + 1128, + 1078, + 1113 + ], + [ + 1083, + 1150, + 1062 + ], + [ + 1038, + 1134, + 1115 + ], + [ + 1008, + 1139, + 1090 + ], + [ + 1076, + 1140, + 1117 + ], + [ + 1141, + 1151, + 1048 + ], + [ + 1052, + 1144, + 1152 + ], + [ + 1026, + 1071, + 1119 + ], + [ + 1133, + 1147, + 1091 + ], + [ + 1084, + 1153, + 1083 + ], + [ + 1137, + 1102, + 1010 + ], + [ + 1111, + 1145, + 1154 + ], + [ + 1051, + 1143, + 1103 + ], + [ + 1099, + 1097, + 1155 + ], + [ + 1029, + 1138, + 1112 + ], + [ + 1146, + 1077, + 1060 + ], + [ + 1140, + 1075, + 1077 + ], + [ + 1052, + 1152, + 1066 + ], + [ + 1055, + 1125, + 1067 + ], + [ + 1093, + 1156, + 1070 + ], + [ + 56, + 1141, + 40 + ], + [ + 1066, + 1152, + 1042 + ], + [ + 1128, + 1113, + 1157 + ], + [ + 1054, + 1080, + 1158 + ], + [ + 1110, + 1159, + 1088 + ], + [ + 1058, + 1089, + 1160 + ], + [ + 1101, + 1136, + 1161 + ], + [ + 1106, + 1162, + 1096 + ], + [ + 1149, + 1146, + 1098 + ], + [ + 1152, + 1142, + 1042 + ], + [ + 1099, + 1155, + 1133 + ], + [ + 1153, + 1150, + 1083 + ], + [ + 1073, + 1163, + 1121 + ], + [ + 1054, + 1158, + 1164 + ], + [ + 1049, + 1087, + 1165 + ], + [ + 1059, + 1094, + 1166 + ], + [ + 1151, + 1149, + 1048 + ], + [ + 1128, + 1157, + 1167 + ], + [ + 1054, + 1164, + 1134 + ], + [ + 1081, + 1092, + 1168 + ], + [ + 1101, + 1161, + 1105 + ], + [ + 1079, + 1129, + 1094 + ], + [ + 1065, + 1148, + 1130 + ], + [ + 1090, + 1139, + 1106 + ], + [ + 1071, + 1169, + 1119 + ], + [ + 1150, + 1108, + 1062 + ], + [ + 1100, + 1170, + 1084 + ], + [ + 1156, + 1131, + 1070 + ], + [ + 1080, + 1116, + 1158 + ], + [ + 1088, + 1132, + 1057 + ], + [ + 56, + 63, + 1141 + ], + [ + 1051, + 1103, + 1085 + ], + [ + 1169, + 1171, + 1119 + ], + [ + 1128, + 1167, + 1172 + ], + [ + 1100, + 1102, + 1170 + ], + [ + 1049, + 1165, + 1173 + ], + [ + 1081, + 1168, + 1145 + ], + [ + 1077, + 1146, + 1174 + ], + [ + 1126, + 1175, + 1055 + ], + [ + 1049, + 1173, + 1135 + ], + [ + 1159, + 1132, + 1088 + ], + [ + 1154, + 1118, + 1111 + ], + [ + 1058, + 1160, + 1138 + ], + [ + 1106, + 1139, + 1176 + ], + [ + 1162, + 1148, + 1096 + ], + [ + 1175, + 1125, + 1055 + ], + [ + 1177, + 1107, + 1128 + ], + [ + 1157, + 1113, + 1108 + ], + [ + 1121, + 1163, + 1178 + ], + [ + 1059, + 1166, + 1179 + ], + [ + 1094, + 1129, + 1180 + ], + [ + 1140, + 1181, + 1182 + ], + [ + 1077, + 1174, + 1183 + ], + [ + 1097, + 1120, + 1155 + ], + [ + 1089, + 1105, + 1184 + ], + [ + 1059, + 1179, + 1136 + ], + [ + 1122, + 1103, + 1185 + ], + [ + 1071, + 1095, + 1186 + ], + [ + 1115, + 1187, + 1093 + ], + [ + 1077, + 1183, + 1181 + ], + [ + 63, + 1151, + 1141 + ], + [ + 1170, + 1188, + 1084 + ], + [ + 1121, + 1178, + 1137 + ], + [ + 1114, + 1189, + 1073 + ], + [ + 1118, + 1190, + 1110 + ], + [ + 1092, + 1112, + 1191 + ], + [ + 1094, + 1180, + 1192 + ], + [ + 1140, + 1182, + 1117 + ], + [ + 1171, + 1169, + 1186 + ], + [ + 1071, + 1186, + 1169 + ], + [ + 1172, + 1177, + 1128 + ], + [ + 1177, + 1120, + 1107 + ], + [ + 1188, + 1153, + 1084 + ], + [ + 1193, + 1163, + 1073 + ], + [ + 1109, + 1194, + 1116 + ], + [ + 1087, + 1104, + 1195 + ], + [ + 1171, + 1127, + 1119 + ], + [ + 1120, + 1177, + 1196 + ], + [ + 1187, + 1156, + 1093 + ], + [ + 1089, + 1184, + 1160 + ], + [ + 1197, + 1126, + 1082 + ], + [ + 1189, + 1193, + 1073 + ], + [ + 1190, + 1118, + 1154 + ], + [ + 1092, + 1191, + 1168 + ], + [ + 1106, + 1176, + 1162 + ], + [ + 1198, + 1143, + 1142 + ], + [ + 1152, + 1198, + 1142 + ], + [ + 1150, + 1199, + 1108 + ], + [ + 1200, + 1158, + 1116 + ], + [ + 1190, + 1159, + 1110 + ], + [ + 1154, + 1145, + 1201 + ], + [ + 1077, + 1181, + 1140 + ], + [ + 1122, + 1185, + 1202 + ], + [ + 1175, + 1126, + 1197 + ], + [ + 1171, + 1186, + 1203 + ], + [ + 1120, + 1196, + 1204 + ], + [ + 1132, + 1205, + 1104 + ], + [ + 1094, + 1192, + 1166 + ], + [ + 1123, + 1206, + 1139 + ], + [ + 1123, + 1117, + 1182 + ], + [ + 1146, + 1149, + 1207 + ], + [ + 1208, + 1124, + 1125 + ], + [ + 1186, + 1095, + 1147 + ], + [ + 1137, + 1209, + 1102 + ], + [ + 1131, + 1210, + 1114 + ], + [ + 1134, + 1211, + 1115 + ], + [ + 1194, + 1200, + 1116 + ], + [ + 1109, + 1135, + 1212 + ], + [ + 1087, + 1195, + 1165 + ], + [ + 1105, + 1161, + 1213 + ], + [ + 1175, + 1197, + 1214 + ], + [ + 1120, + 1204, + 1215 + ], + [ + 1199, + 1150, + 1153 + ], + [ + 1216, + 1157, + 1108 + ], + [ + 1199, + 1217, + 1108 + ], + [ + 1218, + 1170, + 1102 + ], + [ + 1146, + 1207, + 1174 + ], + [ + 1186, + 1147, + 1219 + ], + [ + 1211, + 1187, + 1115 + ], + [ + 1112, + 1138, + 1220 + ], + [ + 1130, + 1180, + 1129 + ], + [ + 1130, + 1148, + 1221 + ], + [ + 1206, + 1176, + 1139 + ], + [ + 1175, + 1208, + 1125 + ], + [ + 1127, + 1197, + 1082 + ], + [ + 1177, + 1172, + 1222 + ], + [ + 1209, + 1218, + 1102 + ], + [ + 1109, + 1212, + 1194 + ], + [ + 1205, + 1195, + 1104 + ], + [ + 1154, + 1201, + 1223 + ], + [ + 1136, + 1179, + 1161 + ], + [ + 1152, + 1144, + 1198 + ], + [ + 1133, + 1219, + 1147 + ], + [ + 1137, + 1178, + 1224 + ], + [ + 1210, + 1189, + 1114 + ], + [ + 1105, + 1213, + 1184 + ], + [ + 1130, + 1221, + 1225 + ], + [ + 1123, + 1182, + 1226 + ], + [ + 1120, + 1215, + 1155 + ], + [ + 1177, + 1222, + 1196 + ], + [ + 1217, + 1216, + 1108 + ], + [ + 1158, + 1200, + 1164 + ], + [ + 1161, + 1179, + 1227 + ], + [ + 1148, + 1162, + 1221 + ], + [ + 1186, + 1219, + 1228 + ], + [ + 1164, + 1229, + 1134 + ], + [ + 1132, + 1159, + 1230 + ], + [ + 1112, + 1220, + 1191 + ], + [ + 1182, + 1181, + 1231 + ], + [ + 1155, + 1215, + 1133 + ], + [ + 1193, + 1178, + 1163 + ], + [ + 1135, + 1173, + 1232 + ], + [ + 1223, + 1190, + 1154 + ], + [ + 1130, + 1225, + 1233 + ], + [ + 1149, + 1151, + 1234 + ], + [ + 1137, + 1224, + 1209 + ], + [ + 1156, + 1235, + 1131 + ], + [ + 1164, + 1200, + 1236 + ], + [ + 1182, + 1231, + 1237 + ], + [ + 1186, + 1228, + 1203 + ], + [ + 1215, + 1219, + 1133 + ], + [ + 1153, + 1188, + 1238 + ], + [ + 1135, + 1232, + 1212 + ], + [ + 1132, + 1230, + 1239 + ], + [ + 1168, + 1240, + 1145 + ], + [ + 1130, + 1233, + 1180 + ], + [ + 1221, + 1162, + 1176 + ], + [ + 1123, + 1226, + 1206 + ], + [ + 1149, + 1234, + 1207 + ], + [ + 1143, + 1241, + 1103 + ], + [ + 1165, + 1242, + 1173 + ], + [ + 1132, + 1239, + 1205 + ], + [ + 1243, + 1144, + 1124 + ], + [ + 1214, + 1197, + 1171 + ], + [ + 1216, + 1167, + 1157 + ], + [ + 1218, + 1188, + 1170 + ], + [ + 1229, + 1211, + 1134 + ], + [ + 1182, + 1237, + 1226 + ], + [ + 1143, + 1198, + 1244 + ], + [ + 1193, + 1245, + 1178 + ], + [ + 1156, + 1187, + 1246 + ], + [ + 1195, + 1242, + 1165 + ], + [ + 1160, + 1247, + 1138 + ], + [ + 1197, + 1127, + 1171 + ], + [ + 1153, + 1238, + 1199 + ], + [ + 1193, + 1189, + 1245 + ], + [ + 1235, + 1210, + 1131 + ], + [ + 1164, + 1236, + 1229 + ], + [ + 1240, + 1201, + 1145 + ], + [ + 1168, + 1191, + 1248 + ], + [ + 1161, + 1227, + 1213 + ], + [ + 1221, + 1176, + 1249 + ], + [ + 1207, + 1250, + 1251 + ], + [ + 1241, + 1185, + 1103 + ], + [ + 1167, + 1222, + 1172 + ], + [ + 1156, + 1246, + 1252 + ], + [ + 1242, + 1253, + 1173 + ], + [ + 1166, + 1254, + 1179 + ], + [ + 1180, + 1233, + 1192 + ], + [ + 1221, + 1249, + 1255 + ], + [ + 1207, + 1251, + 1174 + ], + [ + 1207, + 1234, + 1256 + ], + [ + 1214, + 1171, + 1257 + ], + [ + 1190, + 1258, + 1159 + ], + [ + 1151, + 63, + 1234 + ], + [ + 1208, + 1243, + 1124 + ], + [ + 1244, + 1198, + 1144 + ], + [ + 1219, + 1215, + 1259 + ], + [ + 1194, + 1260, + 1200 + ], + [ + 1253, + 1232, + 1173 + ], + [ + 1195, + 1205, + 1242 + ], + [ + 1190, + 1223, + 1261 + ], + [ + 1247, + 1220, + 1138 + ], + [ + 1160, + 1184, + 1262 + ], + [ + 1166, + 1192, + 1263 + ], + [ + 1183, + 1231, + 1181 + ], + [ + 1189, + 1210, + 1245 + ], + [ + 1156, + 1252, + 1235 + ], + [ + 1176, + 1206, + 1249 + ], + [ + 1183, + 1174, + 1251 + ], + [ + 1207, + 1256, + 1250 + ], + [ + 1143, + 1244, + 1241 + ], + [ + 1175, + 1214, + 1264 + ], + [ + 1219, + 1259, + 1228 + ], + [ + 1216, + 1265, + 1167 + ], + [ + 1218, + 1266, + 1188 + ], + [ + 1245, + 1267, + 1178 + ], + [ + 1168, + 1248, + 1240 + ], + [ + 1221, + 1255, + 1268 + ], + [ + 63, + 92, + 1234 + ], + [ + 1202, + 1185, + 1269 + ], + [ + 1270, + 1222, + 1167 + ], + [ + 1209, + 1266, + 1218 + ], + [ + 1187, + 1211, + 1271 + ], + [ + 1260, + 1236, + 1200 + ], + [ + 1160, + 1262, + 1247 + ], + [ + 1267, + 1224, + 1178 + ], + [ + 1166, + 1263, + 1254 + ], + [ + 1175, + 1264, + 1272 + ], + [ + 1187, + 1271, + 1246 + ], + [ + 1190, + 1261, + 1258 + ], + [ + 1254, + 1227, + 1179 + ], + [ + 1192, + 1233, + 1273 + ], + [ + 1243, + 1244, + 1144 + ], + [ + 1265, + 1274, + 1167 + ], + [ + 1212, + 1275, + 1194 + ], + [ + 1205, + 1276, + 1242 + ], + [ + 1258, + 1230, + 1159 + ], + [ + 1175, + 1272, + 1208 + ], + [ + 1216, + 1217, + 1265 + ], + [ + 1277, + 1217, + 1199 + ], + [ + 1278, + 1238, + 1188 + ], + [ + 1266, + 1279, + 1188 + ], + [ + 1209, + 1224, + 1266 + ], + [ + 1229, + 1271, + 1211 + ], + [ + 1280, + 1231, + 1183 + ], + [ + 1251, + 1281, + 1183 + ], + [ + 92, + 1256, + 1234 + ], + [ + 1274, + 1270, + 1167 + ], + [ + 1210, + 1282, + 1245 + ], + [ + 1184, + 1213, + 1283 + ], + [ + 1284, + 1171, + 1203 + ], + [ + 1238, + 1277, + 1199 + ], + [ + 1276, + 1285, + 1242 + ], + [ + 1201, + 1286, + 1223 + ], + [ + 1220, + 1287, + 1191 + ], + [ + 1288, + 1249, + 1206 + ], + [ + 1171, + 1284, + 1289 + ], + [ + 1290, + 1196, + 1222 + ], + [ + 1279, + 1278, + 1188 + ], + [ + 1242, + 1285, + 1253 + ], + [ + 1202, + 1269, + 1291 + ], + [ + 1215, + 1204, + 1259 + ], + [ + 1275, + 1260, + 1194 + ], + [ + 1205, + 1239, + 1292 + ], + [ + 1268, + 1225, + 1221 + ], + [ + 1226, + 1293, + 1206 + ], + [ + 1243, + 1208, + 1272 + ], + [ + 1270, + 1290, + 1222 + ], + [ + 1287, + 1248, + 1191 + ], + [ + 1184, + 1283, + 1262 + ], + [ + 1281, + 1280, + 1183 + ], + [ + 1231, + 1280, + 1237 + ], + [ + 1250, + 1294, + 1251 + ], + [ + 1224, + 1295, + 1266 + ], + [ + 1296, + 1271, + 1229 + ], + [ + 1232, + 1297, + 1212 + ], + [ + 1249, + 1288, + 1255 + ], + [ + 1290, + 1204, + 1196 + ], + [ + 1235, + 1298, + 1210 + ], + [ + 1298, + 1282, + 1210 + ], + [ + 1286, + 1261, + 1223 + ], + [ + 1225, + 1299, + 1233 + ], + [ + 1171, + 1289, + 1257 + ], + [ + 1284, + 1203, + 1228 + ], + [ + 1282, + 1300, + 1245 + ], + [ + 1253, + 1301, + 1232 + ], + [ + 1230, + 1302, + 1239 + ], + [ + 1227, + 1303, + 1213 + ], + [ + 1192, + 1273, + 1263 + ], + [ + 1293, + 1304, + 1206 + ], + [ + 1304, + 1288, + 1206 + ], + [ + 1305, + 1265, + 1217 + ], + [ + 1300, + 1267, + 1245 + ], + [ + 1271, + 1296, + 1306 + ], + [ + 1236, + 1307, + 1229 + ], + [ + 1247, + 1308, + 1220 + ], + [ + 1278, + 1277, + 1238 + ], + [ + 1235, + 1252, + 1298 + ], + [ + 1240, + 1309, + 1201 + ], + [ + 1227, + 1254, + 1303 + ], + [ + 1294, + 1281, + 1251 + ], + [ + 1272, + 1310, + 1243 + ], + [ + 1284, + 1228, + 1311 + ], + [ + 1228, + 1259, + 1312 + ], + [ + 1277, + 1305, + 1217 + ], + [ + 1271, + 1306, + 1246 + ], + [ + 1297, + 1275, + 1212 + ], + [ + 1205, + 1292, + 1276 + ], + [ + 1237, + 1293, + 1226 + ], + [ + 1250, + 1256, + 1313 + ], + [ + 1298, + 1252, + 1306 + ], + [ + 1301, + 1297, + 1232 + ], + [ + 1247, + 1262, + 1314 + ], + [ + 1308, + 1287, + 1220 + ], + [ + 1237, + 1280, + 1315 + ], + [ + 1290, + 1316, + 1204 + ], + [ + 1312, + 1259, + 1204 + ], + [ + 1298, + 1317, + 1282 + ], + [ + 1236, + 1260, + 1318 + ], + [ + 1307, + 1296, + 1229 + ], + [ + 1250, + 1313, + 1319 + ], + [ + 1228, + 1312, + 1311 + ], + [ + 1246, + 1306, + 1252 + ], + [ + 1236, + 1318, + 1320 + ], + [ + 1302, + 1292, + 1239 + ], + [ + 1309, + 1286, + 1201 + ], + [ + 1240, + 1248, + 1321 + ], + [ + 1303, + 1322, + 1213 + ], + [ + 1299, + 1273, + 1233 + ], + [ + 1290, + 1270, + 1323 + ], + [ + 1277, + 1278, + 1324 + ], + [ + 1298, + 1306, + 1325 + ], + [ + 1322, + 1283, + 1213 + ], + [ + 1268, + 1326, + 1225 + ], + [ + 1327, + 1244, + 1243 + ], + [ + 1258, + 1328, + 1230 + ], + [ + 1254, + 1263, + 1329 + ], + [ + 1330, + 1279, + 1266 + ], + [ + 1236, + 1320, + 1307 + ], + [ + 1258, + 1261, + 1328 + ], + [ + 1247, + 1314, + 1308 + ], + [ + 1250, + 1319, + 1294 + ], + [ + 1310, + 1327, + 1243 + ], + [ + 1316, + 1331, + 1204 + ], + [ + 1290, + 1323, + 1316 + ], + [ + 1267, + 1332, + 1224 + ], + [ + 1285, + 1333, + 1301 + ], + [ + 1276, + 1334, + 1285 + ], + [ + 1237, + 1315, + 1335 + ], + [ + 92, + 110, + 1256 + ], + [ + 1311, + 1336, + 1284 + ], + [ + 1331, + 1312, + 1204 + ], + [ + 1295, + 1330, + 1266 + ], + [ + 1332, + 1295, + 1224 + ], + [ + 1317, + 1300, + 1282 + ], + [ + 1298, + 1325, + 1317 + ], + [ + 1240, + 1321, + 1309 + ], + [ + 1262, + 1283, + 1337 + ], + [ + 1254, + 1329, + 1338 + ], + [ + 1255, + 1339, + 1268 + ], + [ + 1280, + 1281, + 1340 + ], + [ + 1277, + 1324, + 1341 + ], + [ + 1279, + 1324, + 1278 + ], + [ + 1255, + 1288, + 1342 + ], + [ + 1280, + 1340, + 1343 + ], + [ + 1264, + 1310, + 1272 + ], + [ + 1344, + 1264, + 1214 + ], + [ + 1323, + 1270, + 1274 + ], + [ + 1275, + 1318, + 1260 + ], + [ + 1326, + 1299, + 1225 + ], + [ + 1257, + 1344, + 1214 + ], + [ + 1345, + 1274, + 1265 + ], + [ + 1275, + 1297, + 1346 + ], + [ + 1334, + 1333, + 1285 + ], + [ + 1347, + 1302, + 1230 + ], + [ + 1262, + 1337, + 1314 + ], + [ + 1303, + 1338, + 1322 + ], + [ + 1237, + 1335, + 1293 + ], + [ + 1348, + 1241, + 1244 + ], + [ + 1285, + 1301, + 1253 + ], + [ + 1254, + 1338, + 1303 + ], + [ + 1304, + 1293, + 1335 + ], + [ + 1280, + 1343, + 1315 + ], + [ + 1305, + 1345, + 1265 + ], + [ + 1300, + 1349, + 1267 + ], + [ + 1275, + 1346, + 1350 + ], + [ + 1286, + 1351, + 1261 + ], + [ + 1287, + 1352, + 1248 + ], + [ + 110, + 1313, + 1256 + ], + [ + 1336, + 1289, + 1284 + ], + [ + 1277, + 1341, + 1353 + ], + [ + 1296, + 1354, + 1306 + ], + [ + 1334, + 1276, + 1292 + ], + [ + 1355, + 1328, + 1261 + ], + [ + 1241, + 1348, + 1269 + ], + [ + 1279, + 1330, + 1356 + ], + [ + 1328, + 1347, + 1230 + ], + [ + 1339, + 1326, + 1268 + ], + [ + 1255, + 1342, + 1339 + ], + [ + 1281, + 1294, + 1357 + ], + [ + 1311, + 1312, + 1358 + ], + [ + 1295, + 1332, + 1330 + ], + [ + 1275, + 1350, + 1359 + ], + [ + 1283, + 1322, + 1360 + ], + [ + 1273, + 1361, + 1263 + ], + [ + 1288, + 1304, + 1362 + ], + [ + 1277, + 1353, + 1305 + ], + [ + 1349, + 1332, + 1267 + ], + [ + 1352, + 1321, + 1248 + ], + [ + 1291, + 1269, + 1363 + ], + [ + 1241, + 1269, + 1185 + ], + [ + 1327, + 1348, + 1244 + ], + [ + 1354, + 1325, + 1306 + ], + [ + 1302, + 1364, + 1292 + ], + [ + 1351, + 1355, + 1261 + ], + [ + 1288, + 1362, + 1342 + ], + [ + 1281, + 1357, + 1340 + ], + [ + 1279, + 1356, + 1324 + ], + [ + 1296, + 1307, + 1365 + ], + [ + 1283, + 1360, + 1337 + ], + [ + 1357, + 1294, + 1319 + ], + [ + 1311, + 1358, + 1336 + ], + [ + 1297, + 1301, + 1346 + ], + [ + 1366, + 1310, + 1264 + ], + [ + 1257, + 1289, + 1367 + ], + [ + 1317, + 1368, + 1300 + ], + [ + 1296, + 1365, + 1369 + ], + [ + 1275, + 1359, + 1318 + ], + [ + 1309, + 1370, + 1286 + ], + [ + 1308, + 1371, + 1287 + ], + [ + 1361, + 1329, + 1263 + ], + [ + 1299, + 1326, + 1372 + ], + [ + 1344, + 1366, + 1264 + ], + [ + 1373, + 1323, + 1274 + ], + [ + 1359, + 1320, + 1318 + ], + [ + 1299, + 1374, + 1273 + ], + [ + 1257, + 1367, + 1344 + ], + [ + 1375, + 1316, + 1323 + ], + [ + 1345, + 1373, + 1274 + ], + [ + 1328, + 1355, + 1347 + ], + [ + 1322, + 1338, + 1376 + ], + [ + 1299, + 1372, + 1377 + ], + [ + 1378, + 1319, + 1313 + ], + [ + 1353, + 1345, + 1305 + ], + [ + 1296, + 1369, + 1354 + ], + [ + 1379, + 1334, + 1292 + ], + [ + 1347, + 1380, + 1302 + ], + [ + 1308, + 1314, + 1381 + ], + [ + 1362, + 1304, + 1335 + ], + [ + 110, + 137, + 1313 + ], + [ + 1291, + 1363, + 1382 + ], + [ + 1312, + 1331, + 1358 + ], + [ + 1332, + 1383, + 1330 + ], + [ + 1330, + 1383, + 1384 + ], + [ + 1364, + 1379, + 1292 + ], + [ + 1371, + 1352, + 1287 + ], + [ + 1385, + 1357, + 1319 + ], + [ + 1331, + 1316, + 1375 + ], + [ + 1370, + 1351, + 1286 + ], + [ + 1373, + 1386, + 1323 + ], + [ + 1368, + 1349, + 1300 + ], + [ + 1329, + 1387, + 1338 + ], + [ + 1374, + 1361, + 1273 + ], + [ + 1299, + 1377, + 1374 + ], + [ + 137, + 1378, + 1313 + ], + [ + 1358, + 1331, + 1375 + ], + [ + 1386, + 1375, + 1323 + ], + [ + 1330, + 1384, + 1388 + ], + [ + 1320, + 1365, + 1307 + ], + [ + 1380, + 1364, + 1302 + ], + [ + 1321, + 1389, + 1309 + ], + [ + 1378, + 1390, + 1319 + ], + [ + 1325, + 1391, + 1317 + ], + [ + 1320, + 1359, + 1392 + ], + [ + 1333, + 1393, + 1301 + ], + [ + 1394, + 1346, + 1301 + ], + [ + 1308, + 1381, + 1371 + ], + [ + 1289, + 1336, + 1395 + ], + [ + 1322, + 1376, + 1360 + ], + [ + 1326, + 1339, + 1372 + ], + [ + 1315, + 1396, + 1335 + ], + [ + 1397, + 1340, + 1357 + ], + [ + 1336, + 1358, + 1398 + ], + [ + 1358, + 1375, + 1399 + ], + [ + 1330, + 1388, + 1356 + ], + [ + 1366, + 1400, + 1310 + ], + [ + 1400, + 1327, + 1310 + ], + [ + 1289, + 1395, + 1401 + ], + [ + 1380, + 1347, + 1355 + ], + [ + 1329, + 1361, + 1402 + ], + [ + 1339, + 1342, + 1403 + ], + [ + 1404, + 1362, + 1335 + ], + [ + 1396, + 1404, + 1335 + ], + [ + 137, + 154, + 1378 + ], + [ + 1358, + 1399, + 1398 + ], + [ + 1353, + 1405, + 1345 + ], + [ + 1349, + 1383, + 1332 + ], + [ + 1391, + 1368, + 1317 + ], + [ + 1389, + 1370, + 1309 + ], + [ + 1343, + 1340, + 1397 + ], + [ + 1385, + 1397, + 1357 + ], + [ + 1315, + 1343, + 1406 + ], + [ + 1390, + 1385, + 1319 + ], + [ + 1320, + 1392, + 1407 + ], + [ + 1408, + 1394, + 1301 + ], + [ + 1334, + 1393, + 1333 + ], + [ + 1351, + 1409, + 1355 + ], + [ + 1321, + 1352, + 1410 + ], + [ + 1387, + 1376, + 1338 + ], + [ + 1289, + 1401, + 1367 + ], + [ + 1336, + 1398, + 1395 + ], + [ + 1325, + 1354, + 1411 + ], + [ + 1393, + 1408, + 1301 + ], + [ + 1379, + 1412, + 1334 + ], + [ + 1337, + 1413, + 1314 + ], + [ + 1414, + 1373, + 1345 + ], + [ + 1415, + 1341, + 1324 + ], + [ + 1341, + 1405, + 1353 + ], + [ + 1320, + 1407, + 1365 + ], + [ + 1339, + 1403, + 1416 + ], + [ + 1325, + 1411, + 1391 + ], + [ + 1359, + 1350, + 1417 + ], + [ + 1321, + 1410, + 1389 + ], + [ + 1329, + 1402, + 1387 + ], + [ + 1356, + 1415, + 1324 + ], + [ + 1349, + 1418, + 1383 + ], + [ + 1339, + 1416, + 1372 + ], + [ + 1315, + 1406, + 1396 + ], + [ + 1343, + 1397, + 1419 + ], + [ + 1369, + 1411, + 1354 + ], + [ + 1346, + 1394, + 1350 + ], + [ + 1412, + 1420, + 1334 + ], + [ + 1409, + 1421, + 1355 + ], + [ + 1413, + 1381, + 1314 + ], + [ + 1337, + 1360, + 1422 + ], + [ + 154, + 1390, + 1378 + ], + [ + 1423, + 1366, + 1344 + ], + [ + 1359, + 1417, + 1392 + ], + [ + 1424, + 1393, + 1334 + ], + [ + 1327, + 1400, + 1425 + ], + [ + 1418, + 1384, + 1383 + ], + [ + 1426, + 1349, + 1368 + ], + [ + 1407, + 1369, + 1365 + ], + [ + 1411, + 1369, + 1407 + ], + [ + 1350, + 1394, + 1427 + ], + [ + 1367, + 1423, + 1344 + ], + [ + 1405, + 1428, + 1345 + ], + [ + 1428, + 1414, + 1345 + ], + [ + 1341, + 1415, + 1429 + ], + [ + 1364, + 1412, + 1379 + ], + [ + 1421, + 1380, + 1355 + ], + [ + 1370, + 1430, + 1351 + ], + [ + 1342, + 1362, + 1431 + ], + [ + 1397, + 1385, + 1432 + ], + [ + 1420, + 1424, + 1334 + ], + [ + 1371, + 1433, + 1352 + ], + [ + 1337, + 1422, + 1413 + ], + [ + 1377, + 1434, + 1374 + ], + [ + 1362, + 1404, + 1435 + ], + [ + 1343, + 1419, + 1406 + ], + [ + 1360, + 1376, + 1436 + ], + [ + 1377, + 1372, + 1416 + ], + [ + 1342, + 1431, + 1403 + ], + [ + 1386, + 1399, + 1375 + ], + [ + 1437, + 1412, + 1364 + ], + [ + 1430, + 1409, + 1351 + ], + [ + 1327, + 1425, + 1348 + ], + [ + 1341, + 1429, + 1405 + ], + [ + 1368, + 1391, + 1438 + ], + [ + 1411, + 1407, + 1439 + ], + [ + 1380, + 1440, + 1364 + ], + [ + 1374, + 1402, + 1361 + ], + [ + 1397, + 1432, + 1419 + ], + [ + 1366, + 1423, + 1441 + ], + [ + 1373, + 1414, + 1386 + ], + [ + 1368, + 1438, + 1426 + ], + [ + 1411, + 1439, + 1442 + ], + [ + 1434, + 1402, + 1374 + ], + [ + 1426, + 1443, + 1349 + ], + [ + 1411, + 1444, + 1438 + ], + [ + 1394, + 1408, + 1445 + ], + [ + 1389, + 1446, + 1370 + ], + [ + 1433, + 1410, + 1352 + ], + [ + 1376, + 1387, + 1447 + ], + [ + 1362, + 1435, + 1431 + ], + [ + 1348, + 1425, + 1363 + ], + [ + 1350, + 1427, + 1417 + ], + [ + 1360, + 1436, + 1422 + ], + [ + 1377, + 1416, + 1448 + ], + [ + 1396, + 1449, + 1404 + ], + [ + 1366, + 1441, + 1400 + ], + [ + 1386, + 1414, + 1450 + ], + [ + 1388, + 1415, + 1356 + ], + [ + 1394, + 1445, + 1427 + ], + [ + 1381, + 1451, + 1371 + ], + [ + 1411, + 1442, + 1444 + ], + [ + 1411, + 1438, + 1391 + ], + [ + 1393, + 1424, + 1408 + ], + [ + 1440, + 1437, + 1364 + ], + [ + 1376, + 1447, + 1436 + ], + [ + 1396, + 1406, + 1449 + ], + [ + 1367, + 1401, + 1423 + ], + [ + 1386, + 1450, + 1452 + ], + [ + 1388, + 1453, + 1415 + ], + [ + 1426, + 1438, + 1454 + ], + [ + 1443, + 1418, + 1349 + ], + [ + 1421, + 1455, + 1380 + ], + [ + 1446, + 1430, + 1370 + ], + [ + 1390, + 1456, + 1385 + ], + [ + 1409, + 1455, + 1421 + ], + [ + 1384, + 1453, + 1388 + ], + [ + 1392, + 1457, + 1407 + ], + [ + 1403, + 1458, + 1416 + ], + [ + 1449, + 1459, + 1404 + ], + [ + 1386, + 1452, + 1399 + ], + [ + 1405, + 1429, + 1460 + ], + [ + 1451, + 1433, + 1371 + ], + [ + 1387, + 1402, + 1461 + ], + [ + 154, + 196, + 1390 + ], + [ + 1423, + 1401, + 1462 + ], + [ + 1453, + 1384, + 1463 + ], + [ + 1426, + 1454, + 1464 + ], + [ + 1408, + 1424, + 1465 + ], + [ + 1455, + 1466, + 1380 + ], + [ + 1410, + 1467, + 1389 + ], + [ + 1377, + 1448, + 1434 + ], + [ + 1456, + 1432, + 1385 + ], + [ + 1348, + 1363, + 1269 + ], + [ + 1405, + 1460, + 1428 + ], + [ + 1457, + 1439, + 1407 + ], + [ + 1417, + 1457, + 1392 + ], + [ + 1409, + 1430, + 1455 + ], + [ + 1413, + 1468, + 1381 + ], + [ + 1459, + 1435, + 1404 + ], + [ + 1462, + 1401, + 1395 + ], + [ + 1423, + 1462, + 1469 + ], + [ + 1399, + 1452, + 1470 + ], + [ + 1406, + 1419, + 1471 + ], + [ + 1395, + 1398, + 1472 + ], + [ + 1437, + 1420, + 1412 + ], + [ + 1387, + 1461, + 1447 + ], + [ + 1458, + 1448, + 1416 + ], + [ + 1453, + 1473, + 1415 + ], + [ + 1426, + 1464, + 1443 + ], + [ + 1420, + 1474, + 1424 + ], + [ + 1466, + 1440, + 1380 + ], + [ + 1406, + 1471, + 1475 + ], + [ + 1399, + 1470, + 1472 + ], + [ + 1473, + 1429, + 1415 + ], + [ + 1408, + 1465, + 1445 + ], + [ + 1467, + 1446, + 1389 + ], + [ + 1395, + 1472, + 1462 + ], + [ + 1384, + 1418, + 1463 + ], + [ + 1417, + 1427, + 1457 + ], + [ + 1468, + 1451, + 1381 + ], + [ + 1423, + 1469, + 1441 + ], + [ + 1399, + 1472, + 1398 + ], + [ + 1444, + 1476, + 1438 + ], + [ + 196, + 1456, + 1390 + ], + [ + 1428, + 1450, + 1414 + ], + [ + 1430, + 1477, + 1455 + ], + [ + 1433, + 1478, + 1410 + ], + [ + 1427, + 1479, + 1457 + ], + [ + 1420, + 1437, + 1480 + ], + [ + 1422, + 1481, + 1413 + ], + [ + 1435, + 1482, + 1431 + ], + [ + 1449, + 1475, + 1459 + ], + [ + 1406, + 1475, + 1449 + ], + [ + 1474, + 1465, + 1424 + ], + [ + 1420, + 1480, + 1483 + ], + [ + 1478, + 1467, + 1410 + ], + [ + 1422, + 1436, + 1481 + ], + [ + 1431, + 1458, + 1403 + ], + [ + 1419, + 1432, + 1484 + ], + [ + 1437, + 1440, + 1480 + ], + [ + 1434, + 1485, + 1402 + ], + [ + 1476, + 1454, + 1438 + ], + [ + 1402, + 1486, + 1461 + ], + [ + 1482, + 1458, + 1431 + ], + [ + 1487, + 1450, + 1428 + ], + [ + 1479, + 1488, + 1457 + ], + [ + 1445, + 1479, + 1427 + ], + [ + 1455, + 1477, + 1489 + ], + [ + 1418, + 1443, + 1463 + ], + [ + 1490, + 1439, + 1457 + ], + [ + 1451, + 1491, + 1433 + ], + [ + 1492, + 1468, + 1413 + ], + [ + 1419, + 1484, + 1471 + ], + [ + 1400, + 1441, + 1493 + ], + [ + 1462, + 1472, + 1494 + ], + [ + 1460, + 1487, + 1428 + ], + [ + 1463, + 1495, + 1453 + ], + [ + 1488, + 1496, + 1457 + ], + [ + 1420, + 1483, + 1474 + ], + [ + 1485, + 1486, + 1402 + ], + [ + 1459, + 1497, + 1435 + ], + [ + 1442, + 1476, + 1444 + ], + [ + 1455, + 1489, + 1466 + ], + [ + 1481, + 1492, + 1413 + ], + [ + 1462, + 1494, + 1469 + ], + [ + 1495, + 1473, + 1453 + ], + [ + 1439, + 1490, + 1442 + ], + [ + 1479, + 1445, + 1465 + ], + [ + 1446, + 1498, + 1430 + ], + [ + 1499, + 1477, + 1430 + ], + [ + 1447, + 1500, + 1436 + ], + [ + 1434, + 1448, + 1501 + ], + [ + 1432, + 1456, + 1502 + ], + [ + 1496, + 1490, + 1457 + ], + [ + 1503, + 1460, + 1429 + ], + [ + 1479, + 1465, + 1504 + ], + [ + 1491, + 1478, + 1433 + ], + [ + 1505, + 1481, + 1436 + ], + [ + 1448, + 1458, + 1506 + ], + [ + 1459, + 1475, + 1507 + ], + [ + 1443, + 1508, + 1463 + ], + [ + 1476, + 1442, + 1490 + ], + [ + 1497, + 1482, + 1435 + ], + [ + 1432, + 1502, + 1484 + ], + [ + 1400, + 1493, + 1425 + ], + [ + 1479, + 1504, + 1509 + ], + [ + 1498, + 1499, + 1430 + ], + [ + 1464, + 1508, + 1443 + ], + [ + 1510, + 1480, + 1440 + ], + [ + 1468, + 1511, + 1451 + ], + [ + 1479, + 1509, + 1512 + ], + [ + 1466, + 1513, + 1440 + ], + [ + 1500, + 1505, + 1436 + ], + [ + 1448, + 1506, + 1501 + ], + [ + 196, + 236, + 1456 + ], + [ + 1514, + 1452, + 1450 + ], + [ + 1508, + 1515, + 1495 + ], + [ + 1467, + 1516, + 1446 + ], + [ + 1434, + 1501, + 1485 + ], + [ + 1459, + 1507, + 1497 + ], + [ + 1474, + 1504, + 1465 + ], + [ + 1461, + 1517, + 1447 + ], + [ + 1471, + 1518, + 1475 + ], + [ + 1487, + 1514, + 1450 + ], + [ + 1470, + 1452, + 1514 + ], + [ + 1454, + 1519, + 1464 + ], + [ + 1476, + 1520, + 1519 + ], + [ + 1490, + 1496, + 1521 + ], + [ + 1520, + 1476, + 1490 + ], + [ + 1513, + 1510, + 1440 + ], + [ + 1516, + 1498, + 1446 + ], + [ + 1473, + 1503, + 1429 + ], + [ + 1464, + 1519, + 1508 + ], + [ + 1511, + 1491, + 1451 + ], + [ + 1481, + 1505, + 1492 + ], + [ + 1472, + 1470, + 1494 + ], + [ + 1470, + 1514, + 1522 + ], + [ + 1503, + 1523, + 1460 + ], + [ + 1508, + 1495, + 1463 + ], + [ + 1476, + 1519, + 1454 + ], + [ + 1466, + 1489, + 1524 + ], + [ + 1467, + 1478, + 1525 + ], + [ + 1492, + 1526, + 1468 + ], + [ + 1518, + 1507, + 1475 + ], + [ + 1523, + 1487, + 1460 + ], + [ + 1490, + 1521, + 1527 + ], + [ + 1474, + 1483, + 1504 + ], + [ + 1477, + 1499, + 1489 + ], + [ + 1479, + 1512, + 1488 + ], + [ + 1517, + 1500, + 1447 + ], + [ + 1519, + 1528, + 1508 + ], + [ + 1529, + 1520, + 1490 + ], + [ + 1486, + 1530, + 1461 + ], + [ + 1482, + 1531, + 1458 + ], + [ + 236, + 1502, + 1456 + ], + [ + 1441, + 1469, + 1532 + ], + [ + 1469, + 1494, + 1533 + ], + [ + 1467, + 1525, + 1516 + ], + [ + 1492, + 1505, + 1534 + ], + [ + 1466, + 1524, + 1513 + ], + [ + 1489, + 1499, + 1535 + ], + [ + 1526, + 1511, + 1468 + ], + [ + 1485, + 1536, + 1486 + ], + [ + 1484, + 1537, + 1471 + ], + [ + 1469, + 1533, + 1532 + ], + [ + 1510, + 1483, + 1480 + ], + [ + 1495, + 1503, + 1473 + ], + [ + 1527, + 1529, + 1490 + ], + [ + 1483, + 1538, + 1504 + ], + [ + 1499, + 1498, + 1535 + ], + [ + 1531, + 1539, + 1458 + ], + [ + 1482, + 1497, + 1540 + ], + [ + 1441, + 1532, + 1493 + ], + [ + 1488, + 1521, + 1496 + ], + [ + 1489, + 1535, + 1541 + ], + [ + 1500, + 1542, + 1505 + ], + [ + 1501, + 1536, + 1485 + ], + [ + 1537, + 1518, + 1471 + ], + [ + 1492, + 1534, + 1526 + ], + [ + 1533, + 1494, + 1470 + ], + [ + 1519, + 1520, + 1543 + ], + [ + 1536, + 1544, + 1486 + ], + [ + 1501, + 1506, + 1536 + ], + [ + 1528, + 1515, + 1508 + ], + [ + 1535, + 1498, + 1516 + ], + [ + 1544, + 1530, + 1486 + ], + [ + 1458, + 1539, + 1506 + ], + [ + 1502, + 1545, + 1484 + ], + [ + 1487, + 1523, + 1546 + ], + [ + 1491, + 1547, + 1478 + ], + [ + 1425, + 1493, + 1548 + ], + [ + 1495, + 1549, + 1503 + ], + [ + 1549, + 1523, + 1503 + ], + [ + 1512, + 1550, + 1488 + ], + [ + 1510, + 1551, + 1483 + ], + [ + 1530, + 1517, + 1461 + ], + [ + 1482, + 1540, + 1531 + ], + [ + 1519, + 1543, + 1528 + ], + [ + 1552, + 1521, + 1488 + ], + [ + 1489, + 1541, + 1524 + ], + [ + 1553, + 1525, + 1478 + ], + [ + 1542, + 1534, + 1505 + ], + [ + 1513, + 1551, + 1510 + ], + [ + 1535, + 1516, + 1554 + ], + [ + 1511, + 1555, + 1491 + ], + [ + 236, + 272, + 1502 + ], + [ + 1522, + 1533, + 1470 + ], + [ + 1487, + 1546, + 1556 + ], + [ + 1517, + 1557, + 1500 + ], + [ + 1506, + 1558, + 1536 + ], + [ + 1545, + 1537, + 1484 + ], + [ + 1550, + 1559, + 1488 + ], + [ + 1512, + 1509, + 1550 + ], + [ + 1560, + 1509, + 1504 + ], + [ + 1551, + 1561, + 1483 + ], + [ + 1551, + 1513, + 1524 + ], + [ + 1547, + 1553, + 1478 + ], + [ + 1511, + 1526, + 1555 + ], + [ + 1517, + 1530, + 1562 + ], + [ + 1507, + 1563, + 1497 + ], + [ + 1487, + 1556, + 1514 + ], + [ + 1564, + 1538, + 1483 + ], + [ + 1506, + 1539, + 1565 + ], + [ + 1566, + 1495, + 1515 + ], + [ + 1538, + 1560, + 1504 + ], + [ + 1518, + 1567, + 1507 + ], + [ + 1521, + 1552, + 1568 + ], + [ + 1559, + 1552, + 1488 + ], + [ + 1561, + 1564, + 1483 + ], + [ + 1555, + 1547, + 1491 + ], + [ + 1536, + 1569, + 1544 + ], + [ + 1558, + 1569, + 1536 + ], + [ + 272, + 1545, + 1502 + ], + [ + 1425, + 1548, + 1363 + ], + [ + 1551, + 1524, + 1570 + ], + [ + 1557, + 1542, + 1500 + ], + [ + 1520, + 1529, + 1543 + ], + [ + 1521, + 1568, + 1527 + ], + [ + 1517, + 1562, + 1557 + ], + [ + 1563, + 1540, + 1497 + ], + [ + 1566, + 1571, + 1495 + ], + [ + 1516, + 1525, + 1572 + ], + [ + 1573, + 1555, + 1526 + ], + [ + 1556, + 1522, + 1514 + ], + [ + 1527, + 1568, + 1529 + ], + [ + 1516, + 1572, + 1554 + ], + [ + 1539, + 1531, + 1574 + ], + [ + 1567, + 1563, + 1507 + ], + [ + 1518, + 1537, + 1575 + ], + [ + 1506, + 1565, + 1558 + ], + [ + 1554, + 1576, + 1535 + ], + [ + 1534, + 1577, + 1526 + ], + [ + 1544, + 1578, + 1530 + ], + [ + 1529, + 1568, + 1579 + ], + [ + 1580, + 1550, + 1509 + ], + [ + 1560, + 1580, + 1509 + ], + [ + 1572, + 1525, + 1553 + ], + [ + 1539, + 1574, + 1565 + ], + [ + 1528, + 1581, + 1566 + ], + [ + 1576, + 1541, + 1535 + ], + [ + 1582, + 1547, + 1555 + ], + [ + 1529, + 1579, + 1583 + ], + [ + 1538, + 1564, + 1560 + ], + [ + 1518, + 1575, + 1567 + ], + [ + 1571, + 1549, + 1495 + ], + [ + 1528, + 1566, + 1515 + ], + [ + 1572, + 1584, + 1554 + ], + [ + 1577, + 1573, + 1526 + ], + [ + 1556, + 1585, + 1522 + ], + [ + 1529, + 1583, + 1586 + ], + [ + 1582, + 1553, + 1547 + ], + [ + 1553, + 1582, + 1572 + ], + [ + 1578, + 1562, + 1530 + ], + [ + 1543, + 1586, + 1581 + ], + [ + 1573, + 1582, + 1555 + ], + [ + 1542, + 1587, + 1534 + ], + [ + 1578, + 1544, + 1569 + ], + [ + 1537, + 1545, + 1588 + ], + [ + 1568, + 1552, + 1589 + ], + [ + 1540, + 1590, + 1531 + ], + [ + 1532, + 1533, + 1591 + ], + [ + 1591, + 1533, + 1522 + ], + [ + 1556, + 1546, + 1585 + ], + [ + 1564, + 1592, + 1560 + ], + [ + 1529, + 1586, + 1543 + ], + [ + 1543, + 1581, + 1528 + ], + [ + 1568, + 1589, + 1579 + ], + [ + 1584, + 1576, + 1554 + ], + [ + 1585, + 1591, + 1522 + ], + [ + 1581, + 1593, + 1566 + ], + [ + 1570, + 1594, + 1551 + ], + [ + 1541, + 1595, + 1524 + ], + [ + 1582, + 1596, + 1572 + ], + [ + 1558, + 1597, + 1569 + ], + [ + 1532, + 1598, + 1493 + ], + [ + 1594, + 1561, + 1551 + ], + [ + 1595, + 1570, + 1524 + ], + [ + 1587, + 1599, + 1534 + ], + [ + 1537, + 1588, + 1575 + ], + [ + 272, + 321, + 1545 + ], + [ + 1532, + 1591, + 1598 + ], + [ + 1600, + 1546, + 1523 + ], + [ + 1559, + 1589, + 1552 + ], + [ + 1601, + 1559, + 1550 + ], + [ + 1561, + 1592, + 1564 + ], + [ + 1599, + 1577, + 1534 + ], + [ + 1587, + 1542, + 1557 + ], + [ + 1549, + 1600, + 1523 + ], + [ + 1563, + 1590, + 1540 + ], + [ + 1596, + 1584, + 1572 + ], + [ + 1557, + 1562, + 1602 + ], + [ + 1597, + 1603, + 1569 + ], + [ + 1604, + 1574, + 1531 + ], + [ + 1593, + 1571, + 1566 + ], + [ + 1580, + 1601, + 1550 + ], + [ + 1605, + 1580, + 1560 + ], + [ + 1576, + 1606, + 1541 + ], + [ + 1573, + 1607, + 1582 + ], + [ + 1557, + 1602, + 1608 + ], + [ + 1603, + 1578, + 1569 + ], + [ + 1567, + 1609, + 1563 + ], + [ + 1590, + 1604, + 1531 + ], + [ + 1610, + 1590, + 1563 + ], + [ + 1559, + 1601, + 1589 + ], + [ + 1565, + 1611, + 1558 + ], + [ + 1581, + 1586, + 1612 + ], + [ + 1613, + 1605, + 1560 + ], + [ + 1592, + 1613, + 1560 + ], + [ + 1570, + 1595, + 1594 + ], + [ + 1607, + 1596, + 1582 + ], + [ + 1557, + 1608, + 1614 + ], + [ + 321, + 1588, + 1545 + ], + [ + 1548, + 1615, + 1363 + ], + [ + 1598, + 1548, + 1493 + ], + [ + 1606, + 1595, + 1541 + ], + [ + 1573, + 1577, + 1616 + ], + [ + 1609, + 1610, + 1563 + ], + [ + 1567, + 1575, + 1617 + ], + [ + 1581, + 1612, + 1593 + ], + [ + 1589, + 1618, + 1619 + ], + [ + 1576, + 1584, + 1620 + ], + [ + 1587, + 1614, + 1599 + ], + [ + 1574, + 1621, + 1565 + ], + [ + 1622, + 1592, + 1561 + ], + [ + 1594, + 1622, + 1561 + ], + [ + 1573, + 1616, + 1623 + ], + [ + 1557, + 1614, + 1587 + ], + [ + 1624, + 1585, + 1546 + ], + [ + 1574, + 1604, + 1625 + ], + [ + 1567, + 1617, + 1609 + ], + [ + 1589, + 1619, + 1626 + ], + [ + 1578, + 1603, + 1627 + ], + [ + 1611, + 1597, + 1558 + ], + [ + 1590, + 1610, + 1604 + ], + [ + 1600, + 1624, + 1546 + ], + [ + 1601, + 1618, + 1589 + ], + [ + 1576, + 1620, + 1606 + ], + [ + 1573, + 1623, + 1607 + ], + [ + 1578, + 1602, + 1562 + ], + [ + 1578, + 1627, + 1628 + ], + [ + 1621, + 1611, + 1565 + ], + [ + 1615, + 1382, + 1363 + ], + [ + 1571, + 1629, + 1549 + ], + [ + 1629, + 1600, + 1549 + ], + [ + 1589, + 1626, + 1579 + ], + [ + 1580, + 1605, + 1601 + ], + [ + 1574, + 1625, + 1621 + ], + [ + 1583, + 1579, + 1626 + ], + [ + 1595, + 1630, + 1594 + ], + [ + 1575, + 1588, + 1631 + ], + [ + 1583, + 1612, + 1586 + ], + [ + 1584, + 1596, + 1632 + ], + [ + 1616, + 1577, + 1599 + ], + [ + 1601, + 1605, + 1633 + ], + [ + 1578, + 1628, + 1634 + ], + [ + 1571, + 1593, + 1635 + ], + [ + 1584, + 1632, + 1620 + ], + [ + 1599, + 1614, + 1636 + ], + [ + 1571, + 1635, + 1637 + ], + [ + 1630, + 1638, + 1594 + ], + [ + 1575, + 1631, + 1617 + ], + [ + 1639, + 1591, + 1585 + ], + [ + 1640, + 1622, + 1594 + ], + [ + 321, + 375, + 1631 + ], + [ + 1624, + 1639, + 1585 + ], + [ + 1601, + 1633, + 1641 + ], + [ + 1595, + 1606, + 1630 + ], + [ + 1578, + 1634, + 1602 + ], + [ + 1612, + 1642, + 1635 + ], + [ + 1605, + 1613, + 1633 + ], + [ + 1597, + 1611, + 1643 + ], + [ + 1597, + 1627, + 1603 + ], + [ + 1609, + 1644, + 1610 + ], + [ + 1571, + 1637, + 1629 + ], + [ + 1642, + 1612, + 1583 + ], + [ + 1626, + 1645, + 1583 + ], + [ + 1599, + 1636, + 1646 + ], + [ + 1597, + 1643, + 1647 + ], + [ + 1610, + 1648, + 1604 + ], + [ + 1601, + 1641, + 1649 + ], + [ + 1638, + 1640, + 1594 + ], + [ + 1612, + 1635, + 1593 + ], + [ + 1607, + 1650, + 1596 + ], + [ + 1599, + 1646, + 1616 + ], + [ + 321, + 1631, + 1588 + ], + [ + 1601, + 1649, + 1618 + ], + [ + 1651, + 1613, + 1592 + ], + [ + 1609, + 1617, + 1652 + ], + [ + 1645, + 1642, + 1583 + ], + [ + 1622, + 1651, + 1592 + ], + [ + 1607, + 1623, + 1650 + ], + [ + 1602, + 1634, + 1608 + ], + [ + 1597, + 1647, + 1653 + ], + [ + 1644, + 1648, + 1610 + ], + [ + 1654, + 1624, + 1600 + ], + [ + 1606, + 1655, + 1630 + ], + [ + 1608, + 1656, + 1614 + ], + [ + 1620, + 1657, + 1606 + ], + [ + 1646, + 1623, + 1616 + ], + [ + 1597, + 1653, + 1627 + ], + [ + 1629, + 1654, + 1600 + ], + [ + 1650, + 1632, + 1596 + ], + [ + 1643, + 1611, + 1621 + ], + [ + 1609, + 1652, + 1644 + ], + [ + 1619, + 1645, + 1626 + ], + [ + 1619, + 1618, + 1649 + ], + [ + 1623, + 1646, + 1650 + ], + [ + 1656, + 1636, + 1614 + ], + [ + 1608, + 1634, + 1658 + ], + [ + 1621, + 1625, + 1659 + ], + [ + 1648, + 1625, + 1604 + ], + [ + 1655, + 1638, + 1630 + ], + [ + 1657, + 1620, + 1632 + ], + [ + 1660, + 1633, + 1613 + ], + [ + 1621, + 1659, + 1661 + ], + [ + 1617, + 1631, + 1662 + ], + [ + 1548, + 1598, + 1663 + ], + [ + 1663, + 1598, + 1591 + ], + [ + 1651, + 1660, + 1613 + ], + [ + 1664, + 1632, + 1650 + ], + [ + 1639, + 1663, + 1591 + ], + [ + 1657, + 1665, + 1606 + ], + [ + 1646, + 1666, + 1650 + ], + [ + 1608, + 1658, + 1656 + ], + [ + 1640, + 1651, + 1622 + ], + [ + 1664, + 1657, + 1632 + ], + [ + 1621, + 1661, + 1643 + ], + [ + 1617, + 1662, + 1652 + ], + [ + 1548, + 1663, + 1615 + ], + [ + 1654, + 1667, + 1624 + ], + [ + 1628, + 1668, + 1634 + ], + [ + 1627, + 1653, + 1628 + ], + [ + 1625, + 1648, + 1669 + ], + [ + 1631, + 375, + 426 + ], + [ + 1651, + 1640, + 1670 + ], + [ + 1671, + 1664, + 1650 + ], + [ + 1631, + 426, + 1662 + ], + [ + 1667, + 1639, + 1624 + ], + [ + 1629, + 1637, + 1654 + ], + [ + 1665, + 1655, + 1606 + ], + [ + 1625, + 1669, + 1672 + ], + [ + 1649, + 1673, + 1619 + ], + [ + 1674, + 1645, + 1619 + ], + [ + 1638, + 1670, + 1640 + ], + [ + 1651, + 1670, + 1675 + ], + [ + 1676, + 1671, + 1650 + ], + [ + 1668, + 1658, + 1634 + ], + [ + 1648, + 1644, + 1669 + ], + [ + 1670, + 1638, + 1677 + ], + [ + 1664, + 1678, + 1657 + ], + [ + 1636, + 1679, + 1646 + ], + [ + 1628, + 1653, + 1680 + ], + [ + 1643, + 1661, + 1647 + ], + [ + 1625, + 1672, + 1659 + ], + [ + 1637, + 1681, + 1654 + ], + [ + 1673, + 1674, + 1619 + ], + [ + 1666, + 1676, + 1650 + ], + [ + 1636, + 1656, + 1679 + ], + [ + 1635, + 1681, + 1637 + ], + [ + 1645, + 1674, + 1682 + ], + [ + 1651, + 1675, + 1660 + ], + [ + 1679, + 1666, + 1646 + ], + [ + 1649, + 1641, + 1673 + ], + [ + 1681, + 1683, + 1654 + ], + [ + 1645, + 1682, + 1684 + ], + [ + 1644, + 1652, + 1685 + ], + [ + 1686, + 1641, + 1633 + ], + [ + 1687, + 1665, + 1657 + ], + [ + 1642, + 1684, + 1681 + ], + [ + 1645, + 1684, + 1642 + ], + [ + 1638, + 1655, + 1677 + ], + [ + 1647, + 1688, + 1653 + ], + [ + 1671, + 1689, + 1664 + ], + [ + 1644, + 1685, + 1669 + ], + [ + 1683, + 1667, + 1654 + ], + [ + 1660, + 1686, + 1633 + ], + [ + 1628, + 1680, + 1668 + ], + [ + 1647, + 1661, + 1690 + ], + [ + 1642, + 1681, + 1635 + ], + [ + 1678, + 1687, + 1657 + ], + [ + 1658, + 1691, + 1656 + ], + [ + 1692, + 1679, + 1656 + ], + [ + 1688, + 1680, + 1653 + ], + [ + 1647, + 1690, + 1693 + ], + [ + 1641, + 1686, + 1694 + ], + [ + 1689, + 1678, + 1664 + ], + [ + 1658, + 1668, + 1691 + ], + [ + 1669, + 1685, + 1695 + ], + [ + 1652, + 1662, + 1696 + ], + [ + 1697, + 1666, + 1679 + ], + [ + 1641, + 1694, + 1673 + ], + [ + 1647, + 1693, + 1688 + ], + [ + 1681, + 1684, + 1698 + ], + [ + 1655, + 1665, + 1677 + ], + [ + 1676, + 1689, + 1671 + ], + [ + 1691, + 1699, + 1656 + ], + [ + 1690, + 1661, + 1659 + ], + [ + 1652, + 1696, + 1700 + ], + [ + 1677, + 1701, + 1670 + ], + [ + 1666, + 1697, + 1676 + ], + [ + 426, + 504, + 1696 + ], + [ + 1701, + 1675, + 1670 + ], + [ + 1692, + 1697, + 1679 + ], + [ + 1699, + 1692, + 1656 + ], + [ + 1669, + 1695, + 1672 + ], + [ + 1673, + 1694, + 1702 + ], + [ + 1659, + 1672, + 1703 + ], + [ + 1652, + 1700, + 1685 + ], + [ + 1681, + 1698, + 1683 + ], + [ + 1665, + 1704, + 1677 + ], + [ + 1676, + 1697, + 1705 + ], + [ + 1668, + 1680, + 1706 + ], + [ + 1667, + 1707, + 1639 + ], + [ + 1708, + 1686, + 1660 + ], + [ + 1668, + 1706, + 1709 + ], + [ + 1659, + 1703, + 1710 + ], + [ + 1707, + 1663, + 1639 + ], + [ + 1673, + 1702, + 1674 + ], + [ + 426, + 1696, + 1662 + ], + [ + 1676, + 1705, + 1711 + ], + [ + 1668, + 1709, + 1712 + ], + [ + 1665, + 1687, + 1704 + ], + [ + 1659, + 1710, + 1690 + ], + [ + 1704, + 1713, + 1677 + ], + [ + 1676, + 1711, + 1714 + ], + [ + 1680, + 1688, + 1706 + ], + [ + 1687, + 1715, + 1704 + ], + [ + 1668, + 1712, + 1691 + ], + [ + 1675, + 1708, + 1660 + ], + [ + 1684, + 1682, + 1698 + ], + [ + 1715, + 1687, + 1678 + ], + [ + 1715, + 1678, + 1689 + ], + [ + 1692, + 1716, + 1697 + ], + [ + 1691, + 1712, + 1699 + ], + [ + 1672, + 1695, + 1717 + ], + [ + 1674, + 1702, + 1718 + ], + [ + 1708, + 1719, + 1686 + ], + [ + 1719, + 1694, + 1686 + ], + [ + 1713, + 1701, + 1677 + ], + [ + 1676, + 1714, + 1689 + ], + [ + 1688, + 1693, + 1706 + ], + [ + 1685, + 1700, + 1695 + ], + [ + 1714, + 1715, + 1689 + ], + [ + 1695, + 1700, + 1720 + ], + [ + 1674, + 1718, + 1682 + ], + [ + 1715, + 1721, + 1704 + ], + [ + 1690, + 1710, + 1693 + ], + [ + 1672, + 1717, + 1703 + ], + [ + 1716, + 1705, + 1697 + ], + [ + 1683, + 1722, + 1667 + ], + [ + 1698, + 1723, + 1722 + ], + [ + 1675, + 1701, + 1708 + ], + [ + 1693, + 1724, + 1706 + ], + [ + 1695, + 1720, + 1725 + ], + [ + 1716, + 1692, + 1699 + ], + [ + 1700, + 1696, + 1720 + ], + [ + 1722, + 1707, + 1667 + ], + [ + 1699, + 1712, + 1726 + ], + [ + 1724, + 1727, + 1709 + ], + [ + 1693, + 1710, + 1728 + ], + [ + 1698, + 1722, + 1683 + ], + [ + 1682, + 1718, + 1723 + ], + [ + 1721, + 1713, + 1704 + ], + [ + 1714, + 1729, + 1715 + ], + [ + 1699, + 1726, + 1730 + ], + [ + 1693, + 1728, + 1731 + ], + [ + 1695, + 1725, + 1717 + ], + [ + 504, + 551, + 1720 + ], + [ + 1701, + 1732, + 1708 + ], + [ + 1699, + 1730, + 1733 + ], + [ + 1710, + 1703, + 1728 + ], + [ + 1682, + 1723, + 1698 + ], + [ + 1732, + 1719, + 1708 + ], + [ + 504, + 1720, + 1696 + ], + [ + 1734, + 1702, + 1694 + ], + [ + 1724, + 1709, + 1706 + ], + [ + 1729, + 1721, + 1715 + ], + [ + 1699, + 1733, + 1716 + ], + [ + 1693, + 1731, + 1735 + ], + [ + 1713, + 1736, + 1701 + ], + [ + 1737, + 1705, + 1716 + ], + [ + 1726, + 1712, + 1709 + ], + [ + 1720, + 551, + 585 + ], + [ + 1707, + 1738, + 1663 + ], + [ + 1739, + 1734, + 1694 + ], + [ + 1719, + 1739, + 1694 + ], + [ + 1693, + 1735, + 1724 + ], + [ + 1703, + 1717, + 1740 + ], + [ + 1720, + 585, + 1725 + ], + [ + 1738, + 1615, + 1663 + ], + [ + 1702, + 1734, + 1718 + ], + [ + 1711, + 1729, + 1714 + ], + [ + 1705, + 1737, + 1711 + ], + [ + 1733, + 1737, + 1716 + ], + [ + 1709, + 1727, + 1741 + ], + [ + 1736, + 1742, + 1701 + ], + [ + 1736, + 1713, + 1721 + ], + [ + 1718, + 1734, + 1743 + ], + [ + 1703, + 1740, + 1728 + ], + [ + 1709, + 1741, + 1726 + ], + [ + 1724, + 1735, + 1727 + ], + [ + 1718, + 1743, + 1744 + ], + [ + 1742, + 1732, + 1701 + ], + [ + 1745, + 1736, + 1721 + ], + [ + 1737, + 1746, + 1711 + ], + [ + 1747, + 1729, + 1711 + ], + [ + 1717, + 1725, + 1748 + ], + [ + 1745, + 1721, + 1729 + ], + [ + 1726, + 1741, + 1749 + ], + [ + 1717, + 1748, + 1740 + ], + [ + 1718, + 1744, + 1723 + ], + [ + 1734, + 1739, + 1743 + ], + [ + 1727, + 1735, + 1750 + ], + [ + 1707, + 1722, + 1751 + ], + [ + 1733, + 1752, + 1737 + ], + [ + 1746, + 1753, + 1711 + ], + [ + 1726, + 1749, + 1730 + ], + [ + 1740, + 1754, + 1728 + ], + [ + 1753, + 1747, + 1711 + ], + [ + 1754, + 1731, + 1728 + ], + [ + 1747, + 1745, + 1729 + ], + [ + 585, + 646, + 1748 + ], + [ + 1755, + 1739, + 1719 + ], + [ + 1745, + 1756, + 1736 + ], + [ + 1732, + 1755, + 1719 + ], + [ + 1752, + 1746, + 1737 + ], + [ + 1727, + 1750, + 1757 + ], + [ + 1731, + 1750, + 1735 + ], + [ + 1707, + 1751, + 1738 + ], + [ + 1733, + 1730, + 1752 + ], + [ + 1751, + 1722, + 1723 + ], + [ + 1756, + 1742, + 1736 + ], + [ + 585, + 1748, + 1725 + ], + [ + 1730, + 1749, + 1752 + ], + [ + 1727, + 1757, + 1758 + ], + [ + 1731, + 1754, + 1759 + ], + [ + 1727, + 1758, + 1741 + ], + [ + 1739, + 1755, + 1760 + ], + [ + 1752, + 1761, + 1762 + ], + [ + 1740, + 1748, + 1763 + ], + [ + 1738, + 1764, + 1615 + ], + [ + 1744, + 1751, + 1723 + ], + [ + 1747, + 1765, + 1745 + ], + [ + 1731, + 1759, + 1750 + ], + [ + 1739, + 1760, + 1743 + ], + [ + 1752, + 1762, + 1766 + ], + [ + 1765, + 1756, + 1745 + ], + [ + 1749, + 1761, + 1752 + ], + [ + 1740, + 1763, + 1754 + ], + [ + 1752, + 1766, + 1746 + ], + [ + 1743, + 1760, + 1767 + ], + [ + 1768, + 1755, + 1732 + ], + [ + 1741, + 1758, + 1749 + ], + [ + 1754, + 1763, + 1769 + ], + [ + 1764, + 1382, + 1615 + ], + [ + 1742, + 1768, + 1732 + ], + [ + 1749, + 1758, + 1770 + ], + [ + 1753, + 1765, + 1747 + ], + [ + 1754, + 1769, + 1771 + ], + [ + 1766, + 1753, + 1746 + ], + [ + 1750, + 1759, + 1772 + ], + [ + 1743, + 1767, + 1744 + ], + [ + 1756, + 1773, + 1742 + ], + [ + 1753, + 1766, + 1774 + ], + [ + 1754, + 1771, + 1759 + ], + [ + 1763, + 1748, + 646 + ], + [ + 1775, + 1768, + 1742 + ], + [ + 1749, + 1770, + 1776 + ], + [ + 646, + 728, + 1769 + ], + [ + 1773, + 1756, + 1765 + ], + [ + 1753, + 1774, + 1777 + ], + [ + 1749, + 1776, + 1778 + ], + [ + 1757, + 1770, + 1758 + ], + [ + 1750, + 1772, + 1757 + ], + [ + 646, + 1769, + 1763 + ], + [ + 1773, + 1775, + 1742 + ], + [ + 1749, + 1778, + 1761 + ], + [ + 1753, + 1777, + 1765 + ], + [ + 1779, + 1760, + 1755 + ], + [ + 1768, + 1779, + 1755 + ], + [ + 1777, + 1773, + 1765 + ], + [ + 1762, + 1774, + 1766 + ], + [ + 1780, + 1751, + 1744 + ], + [ + 1761, + 1778, + 1762 + ], + [ + 1772, + 1781, + 1757 + ], + [ + 1771, + 1772, + 1759 + ], + [ + 1767, + 1780, + 1744 + ], + [ + 1781, + 1770, + 1757 + ], + [ + 1762, + 1778, + 1782 + ], + [ + 1751, + 1780, + 1738 + ], + [ + 1779, + 1783, + 1760 + ], + [ + 1772, + 1771, + 1784 + ], + [ + 1762, + 1782, + 1785 + ], + [ + 1783, + 1767, + 1760 + ], + [ + 1775, + 1779, + 1768 + ], + [ + 1772, + 1784, + 1786 + ], + [ + 1770, + 1781, + 1787 + ], + [ + 1771, + 1769, + 1784 + ], + [ + 1775, + 1788, + 1779 + ], + [ + 1762, + 1785, + 1774 + ], + [ + 1773, + 1788, + 1775 + ], + [ + 1772, + 1786, + 1781 + ], + [ + 1770, + 1787, + 1776 + ], + [ + 1784, + 1769, + 728 + ], + [ + 1780, + 1764, + 1738 + ], + [ + 1788, + 1789, + 1779 + ], + [ + 1790, + 1777, + 1774 + ], + [ + 1784, + 728, + 795 + ], + [ + 1776, + 1782, + 1778 + ], + [ + 1789, + 1783, + 1779 + ], + [ + 1777, + 1790, + 1773 + ], + [ + 1790, + 1788, + 1773 + ], + [ + 1785, + 1791, + 1774 + ], + [ + 1791, + 1790, + 1774 + ], + [ + 1776, + 1787, + 1792 + ], + [ + 1784, + 795, + 834 + ], + [ + 1784, + 834, + 1786 + ], + [ + 1776, + 1792, + 1782 + ], + [ + 1781, + 1786, + 1793 + ], + [ + 1783, + 1794, + 1767 + ], + [ + 1794, + 1780, + 1767 + ], + [ + 1790, + 1795, + 1788 + ], + [ + 1795, + 1789, + 1788 + ], + [ + 1796, + 1785, + 1782 + ], + [ + 1781, + 1793, + 1787 + ], + [ + 1787, + 1793, + 1797 + ], + [ + 1792, + 1796, + 1782 + ], + [ + 1787, + 1797, + 1792 + ], + [ + 1790, + 1791, + 1795 + ], + [ + 1789, + 1798, + 1783 + ], + [ + 1799, + 1791, + 1785 + ], + [ + 1786, + 834, + 1793 + ], + [ + 1793, + 834, + 942 + ], + [ + 1795, + 1800, + 1789 + ], + [ + 1798, + 1794, + 1783 + ], + [ + 1793, + 942, + 1797 + ], + [ + 1800, + 1795, + 1791 + ], + [ + 1796, + 1799, + 1785 + ], + [ + 1792, + 1797, + 1801 + ], + [ + 1799, + 1800, + 1791 + ], + [ + 1800, + 1798, + 1789 + ], + [ + 1792, + 1801, + 1802 + ], + [ + 1794, + 1803, + 1780 + ], + [ + 1792, + 1802, + 1796 + ], + [ + 1803, + 1764, + 1780 + ], + [ + 1796, + 1802, + 1799 + ], + [ + 1799, + 1802, + 1804 + ], + [ + 1799, + 1804, + 1805 + ], + [ + 1799, + 1805, + 1800 + ], + [ + 1797, + 942, + 1025 + ], + [ + 1797, + 1025, + 1801 + ], + [ + 1800, + 1805, + 1806 + ], + [ + 1798, + 1806, + 1794 + ], + [ + 1801, + 1804, + 1802 + ], + [ + 1800, + 1806, + 1798 + ], + [ + 1764, + 1803, + 1291 + ], + [ + 1801, + 1025, + 1086 + ], + [ + 1806, + 1803, + 1794 + ], + [ + 1801, + 1086, + 1804 + ], + [ + 1764, + 1291, + 1382 + ], + [ + 1086, + 1122, + 1805 + ], + [ + 1086, + 1805, + 1804 + ], + [ + 1805, + 1122, + 1202 + ], + [ + 1805, + 1202, + 1806 + ], + [ + 1803, + 1806, + 1202 + ], + [ + 1803, + 1202, + 1291 + ] + ] + }, + { + "id": 2, + "type": "cell", + "intervals": [ + [ + [ + 8, + 8, + 8 + ], + [ + 52, + 52, + 52 + ] + ] + ] + }, + { + "id": 3, + "type": "node", + "coordinateIds": [ + 1807 + ] + }, + { + "id": 4, + "type": "cell", + "intervals": [ + [ + [ + 4, + 4, + 4 + ], + [ + 56, + 56, + 56 + ] + ] + ] + } + ], + "coordinates": [ + { + "id": 1, + "relativePosition": [ + 30.0, + 30.0, + 20.0 + ] + }, + { + "id": 2, + "relativePosition": [ + 30.0, + 31.0, + 20.043800048828125 + ] + }, + { + "id": 3, + "relativePosition": [ + 31.0, + 31.0, + 20.102100219726562 + ] + }, + { + "id": 4, + "relativePosition": [ + 31.0, + 30.0, + 20.043800048828125 + ] + }, + { + "id": 5, + "relativePosition": [ + 32.0, + 31.0, + 20.25739990234375 + ] + }, + { + "id": 6, + "relativePosition": [ + 32.0, + 30.0, + 20.199099731445312 + ] + }, + { + "id": 7, + "relativePosition": [ + 33.0, + 31.0, + 20.50969970703125 + ] + }, + { + "id": 8, + "relativePosition": [ + 33.0, + 30.0, + 20.451500244140625 + ] + }, + { + "id": 9, + "relativePosition": [ + 34.0, + 31.0, + 20.897899780273438 + ] + }, + { + "id": 10, + "relativePosition": [ + 34.0, + 30.0, + 20.83969970703125 + ] + }, + { + "id": 11, + "relativePosition": [ + 31.0, + 32.0, + 20.25739990234375 + ] + }, + { + "id": 12, + "relativePosition": [ + 32.0, + 32.0, + 20.41260009765625 + ] + }, + { + "id": 13, + "relativePosition": [ + 33.0, + 32.0, + 20.665 + ] + }, + { + "id": 14, + "relativePosition": [ + 34.23790008544922, + 31.0, + 21.0 + ] + }, + { + "id": 15, + "relativePosition": [ + 34.35440002441406, + 30.0, + 21.0 + ] + }, + { + "id": 16, + "relativePosition": [ + 33.878500061035155, + 32.0, + 21.0 + ] + }, + { + "id": 17, + "relativePosition": [ + 30.0, + 32.0, + 20.199099731445312 + ] + }, + { + "id": 18, + "relativePosition": [ + 34.0, + 31.723200073242186, + 21.0 + ] + }, + { + "id": 19, + "relativePosition": [ + 35.0, + 31.0, + 21.393200073242188 + ] + }, + { + "id": 20, + "relativePosition": [ + 35.0, + 30.0, + 21.335 + ] + }, + { + "id": 21, + "relativePosition": [ + 29.0, + 30.0, + 20.043800048828125 + ] + }, + { + "id": 22, + "relativePosition": [ + 35.91739990234375, + 31.0, + 22.0 + ] + }, + { + "id": 23, + "relativePosition": [ + 32.0, + 33.0, + 20.665 + ] + }, + { + "id": 24, + "relativePosition": [ + 33.0, + 33.0, + 20.936799926757814 + ] + }, + { + "id": 25, + "relativePosition": [ + 31.0, + 33.0, + 20.50969970703125 + ] + }, + { + "id": 26, + "relativePosition": [ + 34.0, + 32.0, + 21.063200073242186 + ] + }, + { + "id": 27, + "relativePosition": [ + 36.0, + 30.0, + 22.0 + ] + }, + { + "id": 28, + "relativePosition": [ + 35.0, + 32.0, + 21.567899780273436 + ] + }, + { + "id": 29, + "relativePosition": [ + 33.16029998779297, + 33.0, + 21.0 + ] + }, + { + "id": 30, + "relativePosition": [ + 29.0, + 31.0, + 20.102100219726562 + ] + }, + { + "id": 31, + "relativePosition": [ + 35.665, + 32.0, + 22.0 + ] + }, + { + "id": 32, + "relativePosition": [ + 30.0, + 33.0, + 20.451500244140625 + ] + }, + { + "id": 33, + "relativePosition": [ + 34.0, + 33.0, + 21.335 + ] + }, + { + "id": 34, + "relativePosition": [ + 35.0, + 33.0, + 21.878499755859377 + ] + }, + { + "id": 35, + "relativePosition": [ + 36.0, + 31.0, + 22.063200073242186 + ] + }, + { + "id": 36, + "relativePosition": [ + 37.0, + 31.0, + 22.936799926757814 + ] + }, + { + "id": 37, + "relativePosition": [ + 36.0, + 32.0, + 22.25739990234375 + ] + }, + { + "id": 38, + "relativePosition": [ + 33.0, + 33.16029998779297, + 21.0 + ] + }, + { + "id": 39, + "relativePosition": [ + 32.0, + 33.878500061035155, + 21.0 + ] + }, + { + "id": 40, + "relativePosition": [ + 37.0, + 30.0, + 22.859099731445312 + ] + }, + { + "id": 41, + "relativePosition": [ + 31.0, + 34.0, + 20.897899780273438 + ] + }, + { + "id": 42, + "relativePosition": [ + 29.0, + 32.0, + 20.25739990234375 + ] + }, + { + "id": 43, + "relativePosition": [ + 33.0, + 34.0, + 21.335 + ] + }, + { + "id": 44, + "relativePosition": [ + 31.723200073242186, + 34.0, + 21.0 + ] + }, + { + "id": 45, + "relativePosition": [ + 35.199099731445315, + 33.0, + 22.0 + ] + }, + { + "id": 46, + "relativePosition": [ + 34.0, + 34.0, + 21.762100219726562 + ] + }, + { + "id": 47, + "relativePosition": [ + 36.85909973144531, + 32.0, + 23.0 + ] + }, + { + "id": 48, + "relativePosition": [ + 37.0, + 31.412599945068358, + 23.0 + ] + }, + { + "id": 49, + "relativePosition": [ + 34.470899963378905, + 34.0, + 22.0 + ] + }, + { + "id": 50, + "relativePosition": [ + 35.0, + 33.31559997558594, + 22.0 + ] + }, + { + "id": 51, + "relativePosition": [ + 37.063200073242186, + 31.0, + 23.0 + ] + }, + { + "id": 52, + "relativePosition": [ + 32.0, + 34.0, + 21.063200073242186 + ] + }, + { + "id": 53, + "relativePosition": [ + 30.0, + 34.0, + 20.83969970703125 + ] + }, + { + "id": 54, + "relativePosition": [ + 36.0, + 33.0, + 22.58739990234375 + ] + }, + { + "id": 55, + "relativePosition": [ + 29.0, + 33.0, + 20.50969970703125 + ] + }, + { + "id": 56, + "relativePosition": [ + 37.14090026855469, + 30.0, + 23.0 + ] + }, + { + "id": 57, + "relativePosition": [ + 37.936799926757814, + 31.0, + 24.0 + ] + }, + { + "id": 58, + "relativePosition": [ + 36.470900268554686, + 33.0, + 23.0 + ] + }, + { + "id": 59, + "relativePosition": [ + 32.0, + 35.0, + 21.567899780273436 + ] + }, + { + "id": 60, + "relativePosition": [ + 33.0, + 35.0, + 21.878499755859377 + ] + }, + { + "id": 61, + "relativePosition": [ + 33.31559997558594, + 35.0, + 22.0 + ] + }, + { + "id": 62, + "relativePosition": [ + 31.0, + 34.23790008544922, + 21.0 + ] + }, + { + "id": 63, + "relativePosition": [ + 38.0, + 30.0, + 24.0 + ] + }, + { + "id": 64, + "relativePosition": [ + 35.0, + 34.0, + 22.315599975585936 + ] + }, + { + "id": 65, + "relativePosition": [ + 37.0, + 32.0, + 23.140900268554688 + ] + }, + { + "id": 66, + "relativePosition": [ + 34.0, + 34.470899963378905, + 22.0 + ] + }, + { + "id": 67, + "relativePosition": [ + 36.0, + 33.878500061035155, + 23.0 + ] + }, + { + "id": 68, + "relativePosition": [ + 29.0, + 34.0, + 20.897899780273438 + ] + }, + { + "id": 69, + "relativePosition": [ + 35.91739990234375, + 34.0, + 23.0 + ] + }, + { + "id": 70, + "relativePosition": [ + 31.0, + 35.0, + 21.393200073242188 + ] + }, + { + "id": 71, + "relativePosition": [ + 37.74260009765625, + 32.0, + 24.0 + ] + }, + { + "id": 72, + "relativePosition": [ + 30.0, + 34.35440002441406, + 21.0 + ] + }, + { + "id": 73, + "relativePosition": [ + 37.0, + 33.0, + 23.529099731445314 + ] + }, + { + "id": 74, + "relativePosition": [ + 28.0, + 31.0, + 20.25739990234375 + ] + }, + { + "id": 75, + "relativePosition": [ + 34.0, + 35.0, + 22.315599975585936 + ] + }, + { + "id": 76, + "relativePosition": [ + 35.0, + 35.0, + 22.936799926757814 + ] + }, + { + "id": 77, + "relativePosition": [ + 28.0, + 32.0, + 20.41260009765625 + ] + }, + { + "id": 78, + "relativePosition": [ + 38.0, + 31.0, + 24.08260009765625 + ] + }, + { + "id": 79, + "relativePosition": [ + 30.0, + 35.0, + 21.335 + ] + }, + { + "id": 80, + "relativePosition": [ + 28.0, + 33.0, + 20.665 + ] + }, + { + "id": 81, + "relativePosition": [ + 35.102099914550784, + 35.0, + 23.0 + ] + }, + { + "id": 82, + "relativePosition": [ + 37.41260009765625, + 33.0, + 24.0 + ] + }, + { + "id": 83, + "relativePosition": [ + 36.0, + 34.0, + 23.063200073242186 + ] + }, + { + "id": 84, + "relativePosition": [ + 32.0, + 35.665, + 22.0 + ] + }, + { + "id": 85, + "relativePosition": [ + 38.606799926757816, + 31.0, + 25.0 + ] + }, + { + "id": 86, + "relativePosition": [ + 33.0, + 35.199099731445315, + 22.0 + ] + }, + { + "id": 87, + "relativePosition": [ + 31.0, + 35.91739990234375, + 22.0 + ] + }, + { + "id": 88, + "relativePosition": [ + 29.0, + 34.23790008544922, + 21.0 + ] + }, + { + "id": 89, + "relativePosition": [ + 37.0, + 33.878500061035155, + 24.0 + ] + }, + { + "id": 90, + "relativePosition": [ + 36.91739990234375, + 34.0, + 24.0 + ] + }, + { + "id": 91, + "relativePosition": [ + 33.0, + 36.0, + 22.58739990234375 + ] + }, + { + "id": 92, + "relativePosition": [ + 38.665, + 30.0, + 25.0 + ] + }, + { + "id": 93, + "relativePosition": [ + 33.878500061035155, + 36.0, + 23.0 + ] + }, + { + "id": 94, + "relativePosition": [ + 28.0, + 30.0, + 20.199099731445312 + ] + }, + { + "id": 95, + "relativePosition": [ + 28.276799926757814, + 34.0, + 21.0 + ] + }, + { + "id": 96, + "relativePosition": [ + 34.0, + 35.91739990234375, + 23.0 + ] + }, + { + "id": 97, + "relativePosition": [ + 38.0, + 32.0, + 24.354400024414062 + ] + }, + { + "id": 98, + "relativePosition": [ + 36.0, + 35.0, + 23.762100219726562 + ] + }, + { + "id": 99, + "relativePosition": [ + 28.0, + 33.878500061035155, + 21.0 + ] + }, + { + "id": 100, + "relativePosition": [ + 35.0, + 35.102099914550784, + 23.0 + ] + }, + { + "id": 101, + "relativePosition": [ + 30.0, + 36.0, + 22.0 + ] + }, + { + "id": 102, + "relativePosition": [ + 29.0, + 35.0, + 21.393200073242188 + ] + }, + { + "id": 103, + "relativePosition": [ + 38.432100219726564, + 32.0, + 25.0 + ] + }, + { + "id": 104, + "relativePosition": [ + 32.0, + 36.0, + 22.25739990234375 + ] + }, + { + "id": 105, + "relativePosition": [ + 36.23789978027344, + 35.0, + 24.0 + ] + }, + { + "id": 106, + "relativePosition": [ + 38.0, + 33.0, + 24.800900268554688 + ] + }, + { + "id": 107, + "relativePosition": [ + 35.0, + 36.0, + 23.762100219726562 + ] + }, + { + "id": 108, + "relativePosition": [ + 29.0, + 35.91739990234375, + 22.0 + ] + }, + { + "id": 109, + "relativePosition": [ + 39.0, + 31.0, + 25.76209991455078 + ] + }, + { + "id": 110, + "relativePosition": [ + 39.0, + 30.0, + 25.645599975585938 + ] + }, + { + "id": 111, + "relativePosition": [ + 35.29619995117187, + 36.0, + 24.0 + ] + }, + { + "id": 112, + "relativePosition": [ + 38.12150024414063, + 33.0, + 25.0 + ] + }, + { + "id": 113, + "relativePosition": [ + 37.0, + 34.0, + 24.08260009765625 + ] + }, + { + "id": 114, + "relativePosition": [ + 27.0, + 32.0, + 20.665 + ] + }, + { + "id": 115, + "relativePosition": [ + 27.0, + 33.0, + 20.936799926757814 + ] + }, + { + "id": 116, + "relativePosition": [ + 27.0, + 31.0, + 20.50969970703125 + ] + }, + { + "id": 117, + "relativePosition": [ + 34.0, + 36.0, + 23.063200073242186 + ] + }, + { + "id": 118, + "relativePosition": [ + 28.0, + 34.0, + 21.063200073242186 + ] + }, + { + "id": 119, + "relativePosition": [ + 37.68440002441406, + 34.0, + 25.0 + ] + }, + { + "id": 120, + "relativePosition": [ + 31.0, + 36.0, + 22.063200073242186 + ] + }, + { + "id": 121, + "relativePosition": [ + 36.0, + 35.29619995117187, + 24.0 + ] + }, + { + "id": 122, + "relativePosition": [ + 32.0, + 36.85909973144531, + 23.0 + ] + }, + { + "id": 123, + "relativePosition": [ + 33.0, + 36.470900268554686, + 23.0 + ] + }, + { + "id": 124, + "relativePosition": [ + 38.0, + 33.31559997558594, + 25.0 + ] + }, + { + "id": 125, + "relativePosition": [ + 28.0, + 35.0, + 21.567899780273436 + ] + }, + { + "id": 126, + "relativePosition": [ + 31.0, + 37.0, + 22.936799926757814 + ] + }, + { + "id": 127, + "relativePosition": [ + 31.412599945068358, + 37.0, + 23.0 + ] + }, + { + "id": 128, + "relativePosition": [ + 38.936799926757814, + 32.0, + 26.0 + ] + }, + { + "id": 129, + "relativePosition": [ + 39.0, + 31.723200073242186, + 26.0 + ] + }, + { + "id": 130, + "relativePosition": [ + 27.0, + 33.16029998779297, + 21.0 + ] + }, + { + "id": 131, + "relativePosition": [ + 39.102100219726566, + 31.0, + 26.0 + ] + }, + { + "id": 132, + "relativePosition": [ + 37.0, + 35.0, + 24.89790008544922 + ] + }, + { + "id": 133, + "relativePosition": [ + 37.063200073242186, + 35.0, + 25.0 + ] + }, + { + "id": 134, + "relativePosition": [ + 33.0, + 37.0, + 23.529099731445314 + ] + }, + { + "id": 135, + "relativePosition": [ + 30.0, + 29.0, + 20.043800048828125 + ] + }, + { + "id": 136, + "relativePosition": [ + 29.0, + 29.0, + 20.102100219726562 + ] + }, + { + "id": 137, + "relativePosition": [ + 39.16030029296875, + 30.0, + 26.0 + ] + }, + { + "id": 138, + "relativePosition": [ + 27.0, + 30.0, + 20.451500244140625 + ] + }, + { + "id": 139, + "relativePosition": [ + 38.665, + 33.0, + 26.0 + ] + }, + { + "id": 140, + "relativePosition": [ + 33.878500061035155, + 37.0, + 24.0 + ] + }, + { + "id": 141, + "relativePosition": [ + 38.0, + 34.0, + 25.529100036621095 + ] + }, + { + "id": 142, + "relativePosition": [ + 34.0, + 36.91739990234375, + 24.0 + ] + }, + { + "id": 143, + "relativePosition": [ + 35.0, + 36.23789978027344, + 24.0 + ] + }, + { + "id": 144, + "relativePosition": [ + 30.0, + 37.0, + 22.859099731445312 + ] + }, + { + "id": 145, + "relativePosition": [ + 36.0, + 36.0, + 24.703800048828125 + ] + }, + { + "id": 146, + "relativePosition": [ + 39.49030029296875, + 31.0, + 27.0 + ] + }, + { + "id": 147, + "relativePosition": [ + 38.23789978027344, + 34.0, + 26.0 + ] + }, + { + "id": 148, + "relativePosition": [ + 32.0, + 37.0, + 23.140900268554688 + ] + }, + { + "id": 149, + "relativePosition": [ + 29.0, + 36.0, + 22.063200073242186 + ] + }, + { + "id": 150, + "relativePosition": [ + 28.0, + 35.665, + 22.0 + ] + }, + { + "id": 151, + "relativePosition": [ + 37.0, + 35.102099914550784, + 25.0 + ] + }, + { + "id": 152, + "relativePosition": [ + 27.0, + 35.0, + 21.878499755859377 + ] + }, + { + "id": 153, + "relativePosition": [ + 27.0, + 34.0, + 21.335 + ] + }, + { + "id": 154, + "relativePosition": [ + 39.548499755859375, + 30.0, + 27.0 + ] + }, + { + "id": 155, + "relativePosition": [ + 39.0, + 32.0, + 26.121499938964845 + ] + }, + { + "id": 156, + "relativePosition": [ + 36.23789978027344, + 36.0, + 25.0 + ] + }, + { + "id": 157, + "relativePosition": [ + 28.0, + 36.0, + 22.25739990234375 + ] + }, + { + "id": 158, + "relativePosition": [ + 29.0, + 37.0, + 22.936799926757814 + ] + }, + { + "id": 159, + "relativePosition": [ + 35.0, + 37.0, + 24.89790008544922 + ] + }, + { + "id": 160, + "relativePosition": [ + 26.121499938964845, + 32.0, + 21.0 + ] + }, + { + "id": 161, + "relativePosition": [ + 26.839700012207032, + 33.0, + 21.0 + ] + }, + { + "id": 162, + "relativePosition": [ + 39.335, + 32.0, + 27.0 + ] + }, + { + "id": 163, + "relativePosition": [ + 35.102099914550784, + 37.0, + 25.0 + ] + }, + { + "id": 164, + "relativePosition": [ + 26.0, + 31.0, + 20.897899780273438 + ] + }, + { + "id": 165, + "relativePosition": [ + 28.0, + 29.0, + 20.25739990234375 + ] + }, + { + "id": 166, + "relativePosition": [ + 26.0, + 33.0, + 21.335 + ] + }, + { + "id": 167, + "relativePosition": [ + 38.0, + 34.470899963378905, + 26.0 + ] + }, + { + "id": 168, + "relativePosition": [ + 31.0, + 37.063200073242186, + 23.0 + ] + }, + { + "id": 169, + "relativePosition": [ + 37.68440002441406, + 35.0, + 26.0 + ] + }, + { + "id": 170, + "relativePosition": [ + 31.0, + 37.936799926757814, + 24.0 + ] + }, + { + "id": 171, + "relativePosition": [ + 27.0, + 35.199099731445315, + 22.0 + ] + }, + { + "id": 172, + "relativePosition": [ + 26.0, + 31.723200073242186, + 21.0 + ] + }, + { + "id": 173, + "relativePosition": [ + 36.0, + 36.23789978027344, + 25.0 + ] + }, + { + "id": 174, + "relativePosition": [ + 26.0, + 34.0, + 21.762100219726562 + ] + }, + { + "id": 175, + "relativePosition": [ + 32.0, + 37.74260009765625, + 24.0 + ] + }, + { + "id": 176, + "relativePosition": [ + 33.0, + 37.41260009765625, + 24.0 + ] + }, + { + "id": 177, + "relativePosition": [ + 34.0, + 37.0, + 24.08260009765625 + ] + }, + { + "id": 178, + "relativePosition": [ + 30.0, + 37.14090026855469, + 23.0 + ] + }, + { + "id": 179, + "relativePosition": [ + 39.0, + 33.0, + 26.839700012207032 + ] + }, + { + "id": 180, + "relativePosition": [ + 36.91739990234375, + 36.0, + 26.0 + ] + }, + { + "id": 181, + "relativePosition": [ + 37.0, + 35.91739990234375, + 26.0 + ] + }, + { + "id": 182, + "relativePosition": [ + 26.0, + 34.470899963378905, + 22.0 + ] + }, + { + "id": 183, + "relativePosition": [ + 39.063200073242186, + 33.0, + 27.0 + ] + }, + { + "id": 184, + "relativePosition": [ + 28.0, + 36.85909973144531, + 23.0 + ] + }, + { + "id": 185, + "relativePosition": [ + 28.587400054931642, + 37.0, + 23.0 + ] + }, + { + "id": 186, + "relativePosition": [ + 26.684400024414064, + 35.0, + 22.0 + ] + }, + { + "id": 187, + "relativePosition": [ + 36.0, + 36.91739990234375, + 26.0 + ] + }, + { + "id": 188, + "relativePosition": [ + 39.74260009765625, + 31.0, + 28.0 + ] + }, + { + "id": 189, + "relativePosition": [ + 38.665, + 34.0, + 27.0 + ] + }, + { + "id": 190, + "relativePosition": [ + 30.0, + 38.0, + 24.0 + ] + }, + { + "id": 191, + "relativePosition": [ + 39.0, + 33.16029998779297, + 27.0 + ] + }, + { + "id": 192, + "relativePosition": [ + 38.0, + 35.0, + 26.684400024414064 + ] + }, + { + "id": 193, + "relativePosition": [ + 29.0, + 37.063200073242186, + 23.0 + ] + }, + { + "id": 194, + "relativePosition": [ + 26.0, + 32.0, + 21.063200073242186 + ] + }, + { + "id": 195, + "relativePosition": [ + 26.0, + 30.0, + 20.83969970703125 + ] + }, + { + "id": 196, + "relativePosition": [ + 39.800900268554685, + 30.0, + 28.0 + ] + }, + { + "id": 197, + "relativePosition": [ + 39.58739990234375, + 32.0, + 28.0 + ] + }, + { + "id": 198, + "relativePosition": [ + 34.0, + 37.68440002441406, + 25.0 + ] + }, + { + "id": 199, + "relativePosition": [ + 35.0, + 37.063200073242186, + 25.0 + ] + }, + { + "id": 200, + "relativePosition": [ + 33.0, + 38.0, + 24.800900268554688 + ] + }, + { + "id": 201, + "relativePosition": [ + 38.12150024414063, + 35.0, + 27.0 + ] + }, + { + "id": 202, + "relativePosition": [ + 27.0, + 36.0, + 22.58739990234375 + ] + }, + { + "id": 203, + "relativePosition": [ + 27.0, + 29.0, + 20.50969970703125 + ] + }, + { + "id": 204, + "relativePosition": [ + 33.31559997558594, + 38.0, + 25.0 + ] + }, + { + "id": 205, + "relativePosition": [ + 29.0, + 37.936799926757814, + 24.0 + ] + }, + { + "id": 206, + "relativePosition": [ + 25.0, + 32.0, + 21.567899780273436 + ] + }, + { + "id": 207, + "relativePosition": [ + 39.335, + 33.0, + 28.0 + ] + }, + { + "id": 208, + "relativePosition": [ + 35.91739990234375, + 37.0, + 26.0 + ] + }, + { + "id": 209, + "relativePosition": [ + 27.0, + 36.470900268554686, + 23.0 + ] + }, + { + "id": 210, + "relativePosition": [ + 35.0, + 37.68440002441406, + 26.0 + ] + }, + { + "id": 211, + "relativePosition": [ + 32.0, + 38.0, + 24.335 + ] + }, + { + "id": 212, + "relativePosition": [ + 37.0, + 36.0, + 26.121499938964845 + ] + }, + { + "id": 213, + "relativePosition": [ + 28.0, + 37.0, + 23.140900268554688 + ] + }, + { + "id": 214, + "relativePosition": [ + 25.76209991455078, + 31.0, + 21.0 + ] + }, + { + "id": 215, + "relativePosition": [ + 37.41260009765625, + 36.0, + 27.0 + ] + }, + { + "id": 216, + "relativePosition": [ + 26.0, + 35.0, + 22.315599975585936 + ] + }, + { + "id": 217, + "relativePosition": [ + 25.0, + 33.0, + 21.878499755859377 + ] + }, + { + "id": 218, + "relativePosition": [ + 25.529100036621095, + 34.0, + 22.0 + ] + }, + { + "id": 219, + "relativePosition": [ + 38.0, + 35.199099731445315, + 27.0 + ] + }, + { + "id": 220, + "relativePosition": [ + 28.0, + 37.74260009765625, + 24.0 + ] + }, + { + "id": 221, + "relativePosition": [ + 34.0, + 38.0, + 25.529100036621095 + ] + }, + { + "id": 222, + "relativePosition": [ + 31.0, + 38.0, + 24.08260009765625 + ] + }, + { + "id": 223, + "relativePosition": [ + 26.121499938964845, + 36.0, + 23.0 + ] + }, + { + "id": 224, + "relativePosition": [ + 25.0, + 33.31559997558594, + 22.0 + ] + }, + { + "id": 225, + "relativePosition": [ + 25.0, + 31.0, + 21.393200073242188 + ] + }, + { + "id": 226, + "relativePosition": [ + 26.0, + 35.91739990234375, + 23.0 + ] + }, + { + "id": 227, + "relativePosition": [ + 39.897899780273434, + 31.0, + 29.0 + ] + }, + { + "id": 228, + "relativePosition": [ + 32.0, + 38.432100219726564, + 25.0 + ] + }, + { + "id": 229, + "relativePosition": [ + 33.0, + 38.12150024414063, + 25.0 + ] + }, + { + "id": 230, + "relativePosition": [ + 38.936799926757814, + 34.0, + 28.0 + ] + }, + { + "id": 231, + "relativePosition": [ + 36.0, + 37.0, + 26.121499938964845 + ] + }, + { + "id": 232, + "relativePosition": [ + 37.0, + 36.470900268554686, + 27.0 + ] + }, + { + "id": 233, + "relativePosition": [ + 34.470899963378905, + 38.0, + 26.0 + ] + }, + { + "id": 234, + "relativePosition": [ + 31.0, + 38.606799926757816, + 25.0 + ] + }, + { + "id": 235, + "relativePosition": [ + 26.0, + 29.0, + 20.897899780273438 + ] + }, + { + "id": 236, + "relativePosition": [ + 39.956199951171875, + 30.0, + 29.0 + ] + }, + { + "id": 237, + "relativePosition": [ + 25.645599975585938, + 30.0, + 21.0 + ] + }, + { + "id": 238, + "relativePosition": [ + 36.470900268554686, + 37.0, + 27.0 + ] + }, + { + "id": 239, + "relativePosition": [ + 30.0, + 38.665, + 25.0 + ] + }, + { + "id": 240, + "relativePosition": [ + 39.0, + 33.878500061035155, + 28.0 + ] + }, + { + "id": 241, + "relativePosition": [ + 33.0, + 38.665, + 26.0 + ] + }, + { + "id": 242, + "relativePosition": [ + 25.0, + 34.0, + 22.315599975585936 + ] + }, + { + "id": 243, + "relativePosition": [ + 39.74260009765625, + 32.0, + 29.0 + ] + }, + { + "id": 244, + "relativePosition": [ + 38.432100219726564, + 35.0, + 28.0 + ] + }, + { + "id": 245, + "relativePosition": [ + 27.0, + 37.0, + 23.529099731445314 + ] + }, + { + "id": 246, + "relativePosition": [ + 25.0, + 35.0, + 22.936799926757814 + ] + }, + { + "id": 247, + "relativePosition": [ + 29.0, + 28.0, + 20.25739990234375 + ] + }, + { + "id": 248, + "relativePosition": [ + 38.0, + 35.64559997558594, + 28.0 + ] + }, + { + "id": 249, + "relativePosition": [ + 34.0, + 38.23789978027344, + 26.0 + ] + }, + { + "id": 250, + "relativePosition": [ + 32.0, + 38.936799926757814, + 26.0 + ] + }, + { + "id": 251, + "relativePosition": [ + 29.0, + 38.0, + 24.08260009765625 + ] + }, + { + "id": 252, + "relativePosition": [ + 27.0, + 28.0, + 20.665 + ] + }, + { + "id": 253, + "relativePosition": [ + 35.0, + 38.0, + 26.684400024414064 + ] + }, + { + "id": 254, + "relativePosition": [ + 39.956199951171875, + 31.0, + 30.0 + ] + }, + { + "id": 255, + "relativePosition": [ + 24.800900268554688, + 33.0, + 22.0 + ] + }, + { + "id": 256, + "relativePosition": [ + 25.0, + 30.0, + 21.335 + ] + }, + { + "id": 257, + "relativePosition": [ + 28.0, + 28.0, + 20.41260009765625 + ] + }, + { + "id": 258, + "relativePosition": [ + 39.49030029296875, + 33.0, + 29.0 + ] + }, + { + "id": 259, + "relativePosition": [ + 37.74260009765625, + 36.0, + 28.0 + ] + }, + { + "id": 260, + "relativePosition": [ + 26.0, + 36.0, + 23.063200073242186 + ] + }, + { + "id": 261, + "relativePosition": [ + 24.335, + 32.0, + 22.0 + ] + }, + { + "id": 262, + "relativePosition": [ + 35.199099731445315, + 38.0, + 27.0 + ] + }, + { + "id": 263, + "relativePosition": [ + 29.0, + 38.606799926757816, + 25.0 + ] + }, + { + "id": 264, + "relativePosition": [ + 24.08260009765625, + 31.0, + 22.0 + ] + }, + { + "id": 265, + "relativePosition": [ + 25.76209991455078, + 29.0, + 21.0 + ] + }, + { + "id": 266, + "relativePosition": [ + 39.0, + 34.0, + 28.276799926757814 + ] + }, + { + "id": 267, + "relativePosition": [ + 36.0, + 37.41260009765625, + 27.0 + ] + }, + { + "id": 268, + "relativePosition": [ + 27.0, + 37.41260009765625, + 24.0 + ] + }, + { + "id": 269, + "relativePosition": [ + 26.121499938964845, + 37.0, + 24.0 + ] + }, + { + "id": 270, + "relativePosition": [ + 25.0, + 35.102099914550784, + 23.0 + ] + }, + { + "id": 271, + "relativePosition": [ + 24.0, + 33.0, + 22.58739990234375 + ] + }, + { + "id": 272, + "relativePosition": [ + 40.0, + 30.0, + 30.0 + ] + }, + { + "id": 273, + "relativePosition": [ + 37.0, + 36.85909973144531, + 28.0 + ] + }, + { + "id": 274, + "relativePosition": [ + 28.0, + 38.0, + 24.354400024414062 + ] + }, + { + "id": 275, + "relativePosition": [ + 26.0, + 36.91739990234375, + 24.0 + ] + }, + { + "id": 276, + "relativePosition": [ + 39.800900268554685, + 32.0, + 30.0 + ] + }, + { + "id": 277, + "relativePosition": [ + 24.0, + 33.878500061035155, + 23.0 + ] + }, + { + "id": 278, + "relativePosition": [ + 31.0, + 39.0, + 25.76209991455078 + ] + }, + { + "id": 279, + "relativePosition": [ + 39.102100219726566, + 34.0, + 29.0 + ] + }, + { + "id": 280, + "relativePosition": [ + 36.85909973144531, + 37.0, + 28.0 + ] + }, + { + "id": 281, + "relativePosition": [ + 24.08260009765625, + 34.0, + 23.0 + ] + }, + { + "id": 282, + "relativePosition": [ + 24.0, + 30.0, + 22.0 + ] + }, + { + "id": 283, + "relativePosition": [ + 35.0, + 38.12150024414063, + 27.0 + ] + }, + { + "id": 284, + "relativePosition": [ + 28.0, + 38.432100219726564, + 25.0 + ] + }, + { + "id": 285, + "relativePosition": [ + 26.0, + 28.276799926757814, + 21.0 + ] + }, + { + "id": 286, + "relativePosition": [ + 34.0, + 38.665, + 27.0 + ] + }, + { + "id": 287, + "relativePosition": [ + 31.723200073242186, + 39.0, + 26.0 + ] + }, + { + "id": 288, + "relativePosition": [ + 24.89790008544922, + 35.0, + 23.0 + ] + }, + { + "id": 289, + "relativePosition": [ + 26.121499938964845, + 28.0, + 21.0 + ] + }, + { + "id": 290, + "relativePosition": [ + 38.606799926757816, + 35.0, + 29.0 + ] + }, + { + "id": 291, + "relativePosition": [ + 36.0, + 37.74260009765625, + 28.0 + ] + }, + { + "id": 292, + "relativePosition": [ + 30.0, + 39.0, + 25.645599975585938 + ] + }, + { + "id": 293, + "relativePosition": [ + 25.0, + 29.0, + 21.393200073242188 + ] + }, + { + "id": 294, + "relativePosition": [ + 39.0, + 34.23790008544922, + 29.0 + ] + }, + { + "id": 295, + "relativePosition": [ + 25.0, + 36.0, + 23.762100219726562 + ] + }, + { + "id": 296, + "relativePosition": [ + 24.0, + 32.0, + 22.25739990234375 + ] + }, + { + "id": 297, + "relativePosition": [ + 30.0, + 28.0, + 20.199099731445312 + ] + }, + { + "id": 298, + "relativePosition": [ + 33.0, + 39.0, + 26.839700012207032 + ] + }, + { + "id": 299, + "relativePosition": [ + 39.529099731445314, + 33.0, + 30.0 + ] + }, + { + "id": 300, + "relativePosition": [ + 27.0, + 38.0, + 24.800900268554688 + ] + }, + { + "id": 301, + "relativePosition": [ + 32.0, + 39.0, + 26.121499938964845 + ] + }, + { + "id": 302, + "relativePosition": [ + 24.0, + 35.0, + 23.762100219726562 + ] + }, + { + "id": 303, + "relativePosition": [ + 29.0, + 39.0, + 25.76209991455078 + ] + }, + { + "id": 304, + "relativePosition": [ + 33.16029998779297, + 39.0, + 27.0 + ] + }, + { + "id": 305, + "relativePosition": [ + 25.0, + 36.23789978027344, + 24.0 + ] + }, + { + "id": 306, + "relativePosition": [ + 39.16030029296875, + 34.0, + 30.0 + ] + }, + { + "id": 307, + "relativePosition": [ + 38.0, + 35.91739990234375, + 29.0 + ] + }, + { + "id": 308, + "relativePosition": [ + 35.0, + 38.432100219726564, + 28.0 + ] + }, + { + "id": 309, + "relativePosition": [ + 24.0, + 35.29619995117187, + 24.0 + ] + }, + { + "id": 310, + "relativePosition": [ + 39.897899780273434, + 31.0, + 31.0 + ] + }, + { + "id": 311, + "relativePosition": [ + 35.64559997558594, + 38.0, + 28.0 + ] + }, + { + "id": 312, + "relativePosition": [ + 26.0, + 37.0, + 24.08260009765625 + ] + }, + { + "id": 313, + "relativePosition": [ + 26.0, + 28.0, + 21.063200073242186 + ] + }, + { + "id": 314, + "relativePosition": [ + 31.0, + 39.102100219726566, + 26.0 + ] + }, + { + "id": 315, + "relativePosition": [ + 24.703800048828125, + 36.0, + 24.0 + ] + }, + { + "id": 316, + "relativePosition": [ + 24.0, + 34.0, + 23.063200073242186 + ] + }, + { + "id": 317, + "relativePosition": [ + 26.0, + 37.68440002441406, + 25.0 + ] + }, + { + "id": 318, + "relativePosition": [ + 24.08260009765625, + 29.0, + 22.0 + ] + }, + { + "id": 319, + "relativePosition": [ + 25.0, + 28.0, + 21.567899780273436 + ] + }, + { + "id": 320, + "relativePosition": [ + 27.0, + 27.0, + 20.936799926757814 + ] + }, + { + "id": 321, + "relativePosition": [ + 39.956199951171875, + 30.0, + 31.0 + ] + }, + { + "id": 322, + "relativePosition": [ + 28.0, + 38.936799926757814, + 26.0 + ] + }, + { + "id": 323, + "relativePosition": [ + 23.140900268554688, + 32.0, + 23.0 + ] + }, + { + "id": 324, + "relativePosition": [ + 37.0, + 37.0, + 28.587400054931642 + ] + }, + { + "id": 325, + "relativePosition": [ + 31.0, + 39.49030029296875, + 27.0 + ] + }, + { + "id": 326, + "relativePosition": [ + 26.684400024414064, + 38.0, + 25.0 + ] + }, + { + "id": 327, + "relativePosition": [ + 24.0, + 31.0, + 22.063200073242186 + ] + }, + { + "id": 328, + "relativePosition": [ + 28.276799926757814, + 39.0, + 26.0 + ] + }, + { + "id": 329, + "relativePosition": [ + 23.0, + 31.0, + 22.936799926757814 + ] + }, + { + "id": 330, + "relativePosition": [ + 23.0, + 31.412599945068358, + 23.0 + ] + }, + { + "id": 331, + "relativePosition": [ + 29.0, + 27.0, + 20.50969970703125 + ] + }, + { + "id": 332, + "relativePosition": [ + 37.936799926757814, + 36.0, + 29.0 + ] + }, + { + "id": 333, + "relativePosition": [ + 30.0, + 39.16030029296875, + 26.0 + ] + }, + { + "id": 334, + "relativePosition": [ + 27.0, + 38.12150024414063, + 25.0 + ] + }, + { + "id": 335, + "relativePosition": [ + 23.529099731445314, + 33.0, + 23.0 + ] + }, + { + "id": 336, + "relativePosition": [ + 34.0, + 38.936799926757814, + 28.0 + ] + }, + { + "id": 337, + "relativePosition": [ + 39.74260009765625, + 32.0, + 31.0 + ] + }, + { + "id": 338, + "relativePosition": [ + 38.665, + 35.0, + 30.0 + ] + }, + { + "id": 339, + "relativePosition": [ + 32.0, + 39.335, + 27.0 + ] + }, + { + "id": 340, + "relativePosition": [ + 33.0, + 39.063200073242186, + 27.0 + ] + }, + { + "id": 341, + "relativePosition": [ + 28.0, + 27.0, + 20.665 + ] + }, + { + "id": 342, + "relativePosition": [ + 37.063200073242186, + 37.0, + 29.0 + ] + }, + { + "id": 343, + "relativePosition": [ + 26.839700012207032, + 27.0, + 21.0 + ] + }, + { + "id": 344, + "relativePosition": [ + 38.0, + 36.0, + 30.0 + ] + }, + { + "id": 345, + "relativePosition": [ + 30.0, + 39.529099731445314, + 27.0 + ] + }, + { + "id": 346, + "relativePosition": [ + 39.49030029296875, + 33.0, + 31.0 + ] + }, + { + "id": 347, + "relativePosition": [ + 36.0, + 37.936799926757814, + 29.0 + ] + }, + { + "id": 348, + "relativePosition": [ + 33.878500061035155, + 39.0, + 28.0 + ] + }, + { + "id": 349, + "relativePosition": [ + 25.0, + 37.0, + 24.89790008544922 + ] + }, + { + "id": 350, + "relativePosition": [ + 25.0, + 37.063200073242186, + 25.0 + ] + }, + { + "id": 351, + "relativePosition": [ + 31.0, + 29.0, + 20.102100219726562 + ] + }, + { + "id": 352, + "relativePosition": [ + 39.0, + 34.35440002441406, + 30.0 + ] + }, + { + "id": 353, + "relativePosition": [ + 37.0, + 37.063200073242186, + 29.0 + ] + }, + { + "id": 354, + "relativePosition": [ + 27.0, + 38.665, + 26.0 + ] + }, + { + "id": 355, + "relativePosition": [ + 23.0, + 33.0, + 23.529099731445314 + ] + }, + { + "id": 356, + "relativePosition": [ + 29.0, + 39.102100219726566, + 26.0 + ] + }, + { + "id": 357, + "relativePosition": [ + 23.0, + 30.0, + 22.859099731445312 + ] + }, + { + "id": 358, + "relativePosition": [ + 23.762100219726562, + 35.0, + 24.0 + ] + }, + { + "id": 359, + "relativePosition": [ + 39.102100219726566, + 34.0, + 31.0 + ] + }, + { + "id": 360, + "relativePosition": [ + 29.0, + 39.49030029296875, + 27.0 + ] + }, + { + "id": 361, + "relativePosition": [ + 24.335, + 28.0, + 22.0 + ] + }, + { + "id": 362, + "relativePosition": [ + 26.0, + 27.0, + 21.335 + ] + }, + { + "id": 363, + "relativePosition": [ + 33.0, + 39.335, + 28.0 + ] + }, + { + "id": 364, + "relativePosition": [ + 26.0, + 38.0, + 25.529100036621095 + ] + }, + { + "id": 365, + "relativePosition": [ + 24.0, + 36.0, + 24.703800048828125 + ] + }, + { + "id": 366, + "relativePosition": [ + 23.08260009765625, + 34.0, + 24.0 + ] + }, + { + "id": 367, + "relativePosition": [ + 39.74260009765625, + 31.0, + 32.0 + ] + }, + { + "id": 368, + "relativePosition": [ + 23.0, + 33.878500061035155, + 24.0 + ] + }, + { + "id": 369, + "relativePosition": [ + 37.14090026855469, + 37.0, + 30.0 + ] + }, + { + "id": 370, + "relativePosition": [ + 35.91739990234375, + 38.0, + 29.0 + ] + }, + { + "id": 371, + "relativePosition": [ + 24.0, + 29.0, + 22.063200073242186 + ] + }, + { + "id": 372, + "relativePosition": [ + 25.0, + 27.0, + 21.878499755859377 + ] + }, + { + "id": 373, + "relativePosition": [ + 32.0, + 39.58739990234375, + 28.0 + ] + }, + { + "id": 374, + "relativePosition": [ + 30.0, + 27.0, + 20.451500244140625 + ] + }, + { + "id": 375, + "relativePosition": [ + 39.800900268554685, + 30.0, + 32.0 + ] + }, + { + "id": 376, + "relativePosition": [ + 28.0, + 39.0, + 26.121499938964845 + ] + }, + { + "id": 377, + "relativePosition": [ + 24.89790008544922, + 37.0, + 25.0 + ] + }, + { + "id": 378, + "relativePosition": [ + 35.0, + 38.606799926757816, + 29.0 + ] + }, + { + "id": 379, + "relativePosition": [ + 23.0, + 32.0, + 23.140900268554688 + ] + }, + { + "id": 380, + "relativePosition": [ + 23.0, + 29.0, + 22.936799926757814 + ] + }, + { + "id": 381, + "relativePosition": [ + 23.0, + 35.0, + 24.89790008544922 + ] + }, + { + "id": 382, + "relativePosition": [ + 39.58739990234375, + 32.0, + 32.0 + ] + }, + { + "id": 383, + "relativePosition": [ + 36.0, + 38.0, + 30.0 + ] + }, + { + "id": 384, + "relativePosition": [ + 34.0, + 39.0, + 28.276799926757814 + ] + }, + { + "id": 385, + "relativePosition": [ + 26.0, + 38.23789978027344, + 26.0 + ] + }, + { + "id": 386, + "relativePosition": [ + 24.0, + 36.23789978027344, + 25.0 + ] + }, + { + "id": 387, + "relativePosition": [ + 23.0, + 35.102099914550784, + 25.0 + ] + }, + { + "id": 388, + "relativePosition": [ + 27.0, + 26.839700012207032, + 21.0 + ] + }, + { + "id": 389, + "relativePosition": [ + 38.606799926757816, + 35.0, + 31.0 + ] + }, + { + "id": 390, + "relativePosition": [ + 28.0, + 39.335, + 27.0 + ] + }, + { + "id": 391, + "relativePosition": [ + 28.0, + 26.121499938964845, + 21.0 + ] + }, + { + "id": 392, + "relativePosition": [ + 37.0, + 37.14090026855469, + 30.0 + ] + }, + { + "id": 393, + "relativePosition": [ + 31.0, + 39.74260009765625, + 28.0 + ] + }, + { + "id": 394, + "relativePosition": [ + 31.0, + 28.0, + 20.25739990234375 + ] + }, + { + "id": 395, + "relativePosition": [ + 25.529100036621095, + 38.0, + 26.0 + ] + }, + { + "id": 396, + "relativePosition": [ + 25.0, + 37.68440002441406, + 26.0 + ] + }, + { + "id": 397, + "relativePosition": [ + 23.762100219726562, + 36.0, + 25.0 + ] + }, + { + "id": 398, + "relativePosition": [ + 39.335, + 33.0, + 32.0 + ] + }, + { + "id": 399, + "relativePosition": [ + 38.0, + 35.91739990234375, + 31.0 + ] + }, + { + "id": 400, + "relativePosition": [ + 34.23790008544922, + 39.0, + 29.0 + ] + }, + { + "id": 401, + "relativePosition": [ + 22.936799926757814, + 31.0, + 23.0 + ] + }, + { + "id": 402, + "relativePosition": [ + 27.0, + 26.0, + 21.335 + ] + }, + { + "id": 403, + "relativePosition": [ + 29.0, + 26.0, + 20.897899780273438 + ] + }, + { + "id": 404, + "relativePosition": [ + 30.0, + 39.800900268554685, + 28.0 + ] + }, + { + "id": 405, + "relativePosition": [ + 22.063200073242186, + 31.0, + 24.0 + ] + }, + { + "id": 406, + "relativePosition": [ + 24.0, + 28.0, + 22.25739990234375 + ] + }, + { + "id": 407, + "relativePosition": [ + 22.25739990234375, + 32.0, + 24.0 + ] + }, + { + "id": 408, + "relativePosition": [ + 22.58739990234375, + 33.0, + 24.0 + ] + }, + { + "id": 409, + "relativePosition": [ + 26.0, + 26.0, + 21.762100219726562 + ] + }, + { + "id": 410, + "relativePosition": [ + 28.276799926757814, + 26.0, + 21.0 + ] + }, + { + "id": 411, + "relativePosition": [ + 39.0, + 34.23790008544922, + 31.0 + ] + }, + { + "id": 412, + "relativePosition": [ + 27.0, + 39.0, + 26.839700012207032 + ] + }, + { + "id": 413, + "relativePosition": [ + 23.0, + 34.0, + 24.08260009765625 + ] + }, + { + "id": 414, + "relativePosition": [ + 22.859099731445312, + 30.0, + 23.0 + ] + }, + { + "id": 415, + "relativePosition": [ + 24.800900268554688, + 27.0, + 22.0 + ] + }, + { + "id": 416, + "relativePosition": [ + 39.49030029296875, + 31.0, + 33.0 + ] + }, + { + "id": 417, + "relativePosition": [ + 33.0, + 39.49030029296875, + 29.0 + ] + }, + { + "id": 418, + "relativePosition": [ + 34.0, + 39.102100219726566, + 29.0 + ] + }, + { + "id": 419, + "relativePosition": [ + 23.140900268554688, + 28.0, + 23.0 + ] + }, + { + "id": 420, + "relativePosition": [ + 39.0, + 34.0, + 31.723200073242186 + ] + }, + { + "id": 421, + "relativePosition": [ + 35.0, + 38.665, + 30.0 + ] + }, + { + "id": 422, + "relativePosition": [ + 24.0, + 36.91739990234375, + 26.0 + ] + }, + { + "id": 423, + "relativePosition": [ + 23.0, + 28.587400054931642, + 23.0 + ] + }, + { + "id": 424, + "relativePosition": [ + 28.0, + 26.0, + 21.063200073242186 + ] + }, + { + "id": 425, + "relativePosition": [ + 25.0, + 26.684400024414064, + 22.0 + ] + }, + { + "id": 426, + "relativePosition": [ + 39.548499755859375, + 30.0, + 33.0 + ] + }, + { + "id": 427, + "relativePosition": [ + 37.063200073242186, + 37.0, + 31.0 + ] + }, + { + "id": 428, + "relativePosition": [ + 26.0, + 38.665, + 27.0 + ] + }, + { + "id": 429, + "relativePosition": [ + 22.0, + 30.0, + 24.0 + ] + }, + { + "id": 430, + "relativePosition": [ + 29.0, + 39.74260009765625, + 28.0 + ] + }, + { + "id": 431, + "relativePosition": [ + 26.839700012207032, + 39.0, + 27.0 + ] + }, + { + "id": 432, + "relativePosition": [ + 25.0, + 38.0, + 26.684400024414064 + ] + }, + { + "id": 433, + "relativePosition": [ + 30.0, + 26.0, + 20.83969970703125 + ] + }, + { + "id": 434, + "relativePosition": [ + 39.0, + 33.878500061035155, + 32.0 + ] + }, + { + "id": 435, + "relativePosition": [ + 37.936799926757814, + 36.0, + 31.0 + ] + }, + { + "id": 436, + "relativePosition": [ + 24.08260009765625, + 37.0, + 26.0 + ] + }, + { + "id": 437, + "relativePosition": [ + 22.315599975585936, + 34.0, + 25.0 + ] + }, + { + "id": 438, + "relativePosition": [ + 22.936799926757814, + 29.0, + 23.0 + ] + }, + { + "id": 439, + "relativePosition": [ + 34.35440002441406, + 39.0, + 30.0 + ] + }, + { + "id": 440, + "relativePosition": [ + 22.0, + 33.0, + 24.800900268554688 + ] + }, + { + "id": 441, + "relativePosition": [ + 31.0, + 27.0, + 20.50969970703125 + ] + }, + { + "id": 442, + "relativePosition": [ + 39.335, + 32.0, + 33.0 + ] + }, + { + "id": 443, + "relativePosition": [ + 38.432100219726564, + 35.0, + 32.0 + ] + }, + { + "id": 444, + "relativePosition": [ + 32.0, + 39.74260009765625, + 29.0 + ] + }, + { + "id": 445, + "relativePosition": [ + 27.0, + 39.063200073242186, + 27.0 + ] + }, + { + "id": 446, + "relativePosition": [ + 25.529100036621095, + 26.0, + 22.0 + ] + }, + { + "id": 447, + "relativePosition": [ + 37.0, + 37.063200073242186, + 31.0 + ] + }, + { + "id": 448, + "relativePosition": [ + 22.936799926757814, + 35.0, + 25.0 + ] + }, + { + "id": 449, + "relativePosition": [ + 24.0, + 27.0, + 22.58739990234375 + ] + }, + { + "id": 450, + "relativePosition": [ + 28.0, + 39.58739990234375, + 28.0 + ] + }, + { + "id": 451, + "relativePosition": [ + 25.0, + 38.12150024414063, + 27.0 + ] + }, + { + "id": 452, + "relativePosition": [ + 23.08260009765625, + 36.0, + 26.0 + ] + }, + { + "id": 453, + "relativePosition": [ + 39.063200073242186, + 33.0, + 33.0 + ] + }, + { + "id": 454, + "relativePosition": [ + 36.0, + 37.936799926757814, + 31.0 + ] + }, + { + "id": 455, + "relativePosition": [ + 22.0, + 33.31559997558594, + 25.0 + ] + }, + { + "id": 456, + "relativePosition": [ + 22.0, + 32.0, + 24.335 + ] + }, + { + "id": 457, + "relativePosition": [ + 38.936799926757814, + 34.0, + 32.0 + ] + }, + { + "id": 458, + "relativePosition": [ + 38.0, + 35.64559997558594, + 32.0 + ] + }, + { + "id": 459, + "relativePosition": [ + 33.0, + 39.529099731445314, + 30.0 + ] + }, + { + "id": 460, + "relativePosition": [ + 31.0, + 39.897899780273434, + 29.0 + ] + }, + { + "id": 461, + "relativePosition": [ + 23.0, + 35.91739990234375, + 26.0 + ] + }, + { + "id": 462, + "relativePosition": [ + 22.063200073242186, + 29.0, + 24.0 + ] + }, + { + "id": 463, + "relativePosition": [ + 34.0, + 39.16030029296875, + 30.0 + ] + }, + { + "id": 464, + "relativePosition": [ + 39.0, + 33.16029998779297, + 33.0 + ] + }, + { + "id": 465, + "relativePosition": [ + 28.0, + 25.0, + 21.567899780273436 + ] + }, + { + "id": 466, + "relativePosition": [ + 29.0, + 25.76209991455078, + 21.0 + ] + }, + { + "id": 467, + "relativePosition": [ + 27.0, + 39.335, + 28.0 + ] + }, + { + "id": 468, + "relativePosition": [ + 24.0, + 37.0, + 26.121499938964845 + ] + }, + { + "id": 469, + "relativePosition": [ + 23.0, + 28.0, + 23.140900268554688 + ] + }, + { + "id": 470, + "relativePosition": [ + 23.529099731445314, + 27.0, + 23.0 + ] + }, + { + "id": 471, + "relativePosition": [ + 26.0, + 25.529100036621095, + 22.0 + ] + }, + { + "id": 472, + "relativePosition": [ + 30.0, + 39.956199951171875, + 29.0 + ] + }, + { + "id": 473, + "relativePosition": [ + 25.0, + 26.0, + 22.315599975585936 + ] + }, + { + "id": 474, + "relativePosition": [ + 29.0, + 25.0, + 21.393200073242188 + ] + }, + { + "id": 475, + "relativePosition": [ + 24.800900268554688, + 38.0, + 27.0 + ] + }, + { + "id": 476, + "relativePosition": [ + 22.25739990234375, + 28.0, + 24.0 + ] + }, + { + "id": 477, + "relativePosition": [ + 24.0, + 37.41260009765625, + 27.0 + ] + }, + { + "id": 478, + "relativePosition": [ + 27.0, + 25.0, + 21.878499755859377 + ] + }, + { + "id": 479, + "relativePosition": [ + 37.74260009765625, + 36.0, + 32.0 + ] + }, + { + "id": 480, + "relativePosition": [ + 32.0, + 39.800900268554685, + 30.0 + ] + }, + { + "id": 481, + "relativePosition": [ + 22.315599975585936, + 35.0, + 26.0 + ] + }, + { + "id": 482, + "relativePosition": [ + 22.0, + 34.0, + 25.529100036621095 + ] + }, + { + "id": 483, + "relativePosition": [ + 24.0, + 26.121499938964845, + 23.0 + ] + }, + { + "id": 484, + "relativePosition": [ + 39.102100219726566, + 31.0, + 34.0 + ] + }, + { + "id": 485, + "relativePosition": [ + 38.665, + 34.0, + 33.0 + ] + }, + { + "id": 486, + "relativePosition": [ + 37.0, + 37.0, + 31.412599945068358 + ] + }, + { + "id": 487, + "relativePosition": [ + 26.121499938964845, + 39.0, + 28.0 + ] + }, + { + "id": 488, + "relativePosition": [ + 22.0, + 31.0, + 24.08260009765625 + ] + }, + { + "id": 489, + "relativePosition": [ + 26.684400024414064, + 25.0, + 22.0 + ] + }, + { + "id": 490, + "relativePosition": [ + 37.0, + 36.85909973144531, + 32.0 + ] + }, + { + "id": 491, + "relativePosition": [ + 35.0, + 38.606799926757816, + 31.0 + ] + }, + { + "id": 492, + "relativePosition": [ + 31.0, + 26.0, + 20.897899780273438 + ] + }, + { + "id": 493, + "relativePosition": [ + 35.91739990234375, + 38.0, + 31.0 + ] + }, + { + "id": 494, + "relativePosition": [ + 24.08260009765625, + 26.0, + 23.0 + ] + }, + { + "id": 495, + "relativePosition": [ + 39.0, + 32.0, + 33.878500061035155 + ] + }, + { + "id": 496, + "relativePosition": [ + 38.12150024414063, + 35.0, + 33.0 + ] + }, + { + "id": 497, + "relativePosition": [ + 23.0, + 36.0, + 26.121499938964845 + ] + }, + { + "id": 498, + "relativePosition": [ + 31.0, + 39.956199951171875, + 30.0 + ] + }, + { + "id": 499, + "relativePosition": [ + 23.0, + 36.470900268554686, + 27.0 + ] + }, + { + "id": 500, + "relativePosition": [ + 21.567899780273436, + 32.0, + 25.0 + ] + }, + { + "id": 501, + "relativePosition": [ + 21.878499755859377, + 33.0, + 25.0 + ] + }, + { + "id": 502, + "relativePosition": [ + 21.393200073242188, + 31.0, + 25.0 + ] + }, + { + "id": 503, + "relativePosition": [ + 30.0, + 25.645599975585938, + 21.0 + ] + }, + { + "id": 504, + "relativePosition": [ + 39.16030029296875, + 30.0, + 34.0 + ] + }, + { + "id": 505, + "relativePosition": [ + 22.0, + 34.470899963378905, + 26.0 + ] + }, + { + "id": 506, + "relativePosition": [ + 39.0, + 31.723200073242186, + 34.0 + ] + }, + { + "id": 507, + "relativePosition": [ + 29.0, + 39.897899780273434, + 29.0 + ] + }, + { + "id": 508, + "relativePosition": [ + 26.0, + 38.936799926757814, + 28.0 + ] + }, + { + "id": 509, + "relativePosition": [ + 34.23790008544922, + 39.0, + 31.0 + ] + }, + { + "id": 510, + "relativePosition": [ + 23.529099731445314, + 37.0, + 27.0 + ] + }, + { + "id": 511, + "relativePosition": [ + 23.0, + 27.0, + 23.529099731445314 + ] + }, + { + "id": 512, + "relativePosition": [ + 25.0, + 38.432100219726564, + 28.0 + ] + }, + { + "id": 513, + "relativePosition": [ + 36.0, + 37.74260009765625, + 32.0 + ] + }, + { + "id": 514, + "relativePosition": [ + 21.335, + 33.0, + 26.0 + ] + }, + { + "id": 515, + "relativePosition": [ + 26.0, + 25.0, + 22.315599975585936 + ] + }, + { + "id": 516, + "relativePosition": [ + 39.0, + 33.0, + 33.16029998779297 + ] + }, + { + "id": 517, + "relativePosition": [ + 30.0, + 40.0, + 30.0 + ] + }, + { + "id": 518, + "relativePosition": [ + 24.354400024414062, + 38.0, + 28.0 + ] + }, + { + "id": 519, + "relativePosition": [ + 21.335, + 30.0, + 25.0 + ] + }, + { + "id": 520, + "relativePosition": [ + 25.0, + 25.0, + 22.936799926757814 + ] + }, + { + "id": 521, + "relativePosition": [ + 28.0, + 39.74260009765625, + 29.0 + ] + }, + { + "id": 522, + "relativePosition": [ + 34.0, + 39.102100219726566, + 31.0 + ] + }, + { + "id": 523, + "relativePosition": [ + 32.0, + 29.0, + 20.25739990234375 + ] + }, + { + "id": 524, + "relativePosition": [ + 38.0, + 35.199099731445315, + 33.0 + ] + }, + { + "id": 525, + "relativePosition": [ + 36.85909973144531, + 37.0, + 32.0 + ] + }, + { + "id": 526, + "relativePosition": [ + 33.0, + 39.49030029296875, + 31.0 + ] + }, + { + "id": 527, + "relativePosition": [ + 21.762100219726562, + 34.0, + 26.0 + ] + }, + { + "id": 528, + "relativePosition": [ + 30.0, + 25.0, + 21.335 + ] + }, + { + "id": 529, + "relativePosition": [ + 22.58739990234375, + 36.0, + 27.0 + ] + }, + { + "id": 530, + "relativePosition": [ + 22.0, + 29.0, + 24.08260009765625 + ] + }, + { + "id": 531, + "relativePosition": [ + 32.0, + 27.0, + 20.665 + ] + }, + { + "id": 532, + "relativePosition": [ + 24.0, + 26.0, + 23.063200073242186 + ] + }, + { + "id": 533, + "relativePosition": [ + 37.41260009765625, + 36.0, + 33.0 + ] + }, + { + "id": 534, + "relativePosition": [ + 27.0, + 39.49030029296875, + 29.0 + ] + }, + { + "id": 535, + "relativePosition": [ + 24.0, + 37.74260009765625, + 28.0 + ] + }, + { + "id": 536, + "relativePosition": [ + 22.0, + 35.0, + 26.684400024414064 + ] + }, + { + "id": 537, + "relativePosition": [ + 27.0, + 24.800900268554688, + 22.0 + ] + }, + { + "id": 538, + "relativePosition": [ + 31.0, + 25.76209991455078, + 21.0 + ] + }, + { + "id": 539, + "relativePosition": [ + 38.23789978027344, + 34.0, + 34.0 + ] + }, + { + "id": 540, + "relativePosition": [ + 35.64559997558594, + 38.0, + 32.0 + ] + }, + { + "id": 541, + "relativePosition": [ + 21.063200073242186, + 32.0, + 26.0 + ] + }, + { + "id": 542, + "relativePosition": [ + 32.0, + 28.0, + 20.41260009765625 + ] + }, + { + "id": 543, + "relativePosition": [ + 37.0, + 36.470900268554686, + 33.0 + ] + }, + { + "id": 544, + "relativePosition": [ + 21.393200073242188, + 29.0, + 25.0 + ] + }, + { + "id": 545, + "relativePosition": [ + 39.0, + 31.0, + 34.23790008544922 + ] + }, + { + "id": 546, + "relativePosition": [ + 35.0, + 38.432100219726564, + 32.0 + ] + }, + { + "id": 547, + "relativePosition": [ + 32.0, + 39.74260009765625, + 31.0 + ] + }, + { + "id": 548, + "relativePosition": [ + 22.0, + 35.199099731445315, + 27.0 + ] + }, + { + "id": 549, + "relativePosition": [ + 22.58739990234375, + 27.0, + 24.0 + ] + }, + { + "id": 550, + "relativePosition": [ + 23.08260009765625, + 26.0, + 24.0 + ] + }, + { + "id": 551, + "relativePosition": [ + 39.0, + 30.0, + 34.35440002441406 + ] + }, + { + "id": 552, + "relativePosition": [ + 38.665, + 33.0, + 34.0 + ] + }, + { + "id": 553, + "relativePosition": [ + 26.0, + 39.0, + 28.276799926757814 + ] + }, + { + "id": 554, + "relativePosition": [ + 23.0, + 26.121499938964845, + 24.0 + ] + }, + { + "id": 555, + "relativePosition": [ + 29.0, + 39.956199951171875, + 30.0 + ] + }, + { + "id": 556, + "relativePosition": [ + 23.140900268554688, + 37.0, + 28.0 + ] + }, + { + "id": 557, + "relativePosition": [ + 24.89790008544922, + 25.0, + 23.0 + ] + }, + { + "id": 558, + "relativePosition": [ + 28.0, + 24.335, + 22.0 + ] + }, + { + "id": 559, + "relativePosition": [ + 28.0, + 39.800900268554685, + 30.0 + ] + }, + { + "id": 560, + "relativePosition": [ + 22.0, + 28.0, + 24.335 + ] + }, + { + "id": 561, + "relativePosition": [ + 29.0, + 24.08260009765625, + 22.0 + ] + }, + { + "id": 562, + "relativePosition": [ + 38.936799926757814, + 32.0, + 34.0 + ] + }, + { + "id": 563, + "relativePosition": [ + 34.0, + 39.0, + 31.723200073242186 + ] + }, + { + "id": 564, + "relativePosition": [ + 27.0, + 24.0, + 22.58739990234375 + ] + }, + { + "id": 565, + "relativePosition": [ + 26.0, + 24.08260009765625, + 23.0 + ] + }, + { + "id": 566, + "relativePosition": [ + 38.606799926757816, + 31.0, + 35.0 + ] + }, + { + "id": 567, + "relativePosition": [ + 34.0, + 38.936799926757814, + 32.0 + ] + }, + { + "id": 568, + "relativePosition": [ + 26.0, + 39.102100219726566, + 29.0 + ] + }, + { + "id": 569, + "relativePosition": [ + 21.0, + 31.0, + 25.76209991455078 + ] + }, + { + "id": 570, + "relativePosition": [ + 31.723200073242186, + 26.0, + 21.0 + ] + }, + { + "id": 571, + "relativePosition": [ + 38.0, + 35.0, + 33.31559997558594 + ] + }, + { + "id": 572, + "relativePosition": [ + 38.0, + 34.470899963378905, + 34.0 + ] + }, + { + "id": 573, + "relativePosition": [ + 23.0, + 36.85909973144531, + 28.0 + ] + }, + { + "id": 574, + "relativePosition": [ + 36.470900268554686, + 37.0, + 33.0 + ] + }, + { + "id": 575, + "relativePosition": [ + 31.0, + 25.0, + 21.393200073242188 + ] + }, + { + "id": 576, + "relativePosition": [ + 31.0, + 39.897899780273434, + 31.0 + ] + }, + { + "id": 577, + "relativePosition": [ + 21.878499755859377, + 35.0, + 27.0 + ] + }, + { + "id": 578, + "relativePosition": [ + 21.335, + 34.0, + 27.0 + ] + }, + { + "id": 579, + "relativePosition": [ + 38.432100219726564, + 32.0, + 35.0 + ] + }, + { + "id": 580, + "relativePosition": [ + 21.0, + 31.723200073242186, + 26.0 + ] + }, + { + "id": 581, + "relativePosition": [ + 24.0, + 25.0, + 23.762100219726562 + ] + }, + { + "id": 582, + "relativePosition": [ + 26.121499938964845, + 24.0, + 23.0 + ] + }, + { + "id": 583, + "relativePosition": [ + 30.0, + 24.0, + 22.0 + ] + }, + { + "id": 584, + "relativePosition": [ + 32.0, + 26.121499938964845, + 21.0 + ] + }, + { + "id": 585, + "relativePosition": [ + 38.665, + 30.0, + 35.0 + ] + }, + { + "id": 586, + "relativePosition": [ + 22.25739990234375, + 36.0, + 28.0 + ] + }, + { + "id": 587, + "relativePosition": [ + 21.0, + 33.0, + 26.839700012207032 + ] + }, + { + "id": 588, + "relativePosition": [ + 25.0, + 24.89790008544922, + 23.0 + ] + }, + { + "id": 589, + "relativePosition": [ + 36.0, + 37.41260009765625, + 33.0 + ] + }, + { + "id": 590, + "relativePosition": [ + 25.0, + 38.606799926757816, + 29.0 + ] + }, + { + "id": 591, + "relativePosition": [ + 21.0, + 30.0, + 25.645599975585938 + ] + }, + { + "id": 592, + "relativePosition": [ + 28.0, + 24.0, + 22.25739990234375 + ] + }, + { + "id": 593, + "relativePosition": [ + 27.0, + 39.529099731445314, + 30.0 + ] + }, + { + "id": 594, + "relativePosition": [ + 24.08260009765625, + 38.0, + 29.0 + ] + }, + { + "id": 595, + "relativePosition": [ + 21.0, + 33.16029998779297, + 27.0 + ] + }, + { + "id": 596, + "relativePosition": [ + 21.567899780273436, + 28.0, + 25.0 + ] + }, + { + "id": 597, + "relativePosition": [ + 22.0, + 27.0, + 24.800900268554688 + ] + }, + { + "id": 598, + "relativePosition": [ + 38.12150024414063, + 33.0, + 35.0 + ] + }, + { + "id": 599, + "relativePosition": [ + 37.0, + 36.0, + 33.878500061035155 + ] + }, + { + "id": 600, + "relativePosition": [ + 33.0, + 39.335, + 32.0 + ] + }, + { + "id": 601, + "relativePosition": [ + 37.0, + 35.91739990234375, + 34.0 + ] + }, + { + "id": 602, + "relativePosition": [ + 33.878500061035155, + 39.0, + 32.0 + ] + }, + { + "id": 603, + "relativePosition": [ + 25.76209991455078, + 39.0, + 29.0 + ] + }, + { + "id": 604, + "relativePosition": [ + 35.0, + 38.12150024414063, + 33.0 + ] + }, + { + "id": 605, + "relativePosition": [ + 35.199099731445315, + 38.0, + 33.0 + ] + }, + { + "id": 606, + "relativePosition": [ + 30.0, + 39.956199951171875, + 31.0 + ] + }, + { + "id": 607, + "relativePosition": [ + 26.0, + 39.16030029296875, + 30.0 + ] + }, + { + "id": 608, + "relativePosition": [ + 22.0, + 35.64559997558594, + 28.0 + ] + }, + { + "id": 609, + "relativePosition": [ + 37.68440002441406, + 35.0, + 34.0 + ] + }, + { + "id": 610, + "relativePosition": [ + 21.0, + 32.0, + 26.121499938964845 + ] + }, + { + "id": 611, + "relativePosition": [ + 25.0, + 24.0, + 23.762100219726562 + ] + }, + { + "id": 612, + "relativePosition": [ + 23.762100219726562, + 25.0, + 24.0 + ] + }, + { + "id": 613, + "relativePosition": [ + 32.0, + 39.58739990234375, + 32.0 + ] + }, + { + "id": 614, + "relativePosition": [ + 24.0, + 37.936799926757814, + 29.0 + ] + }, + { + "id": 615, + "relativePosition": [ + 23.0, + 26.0, + 24.08260009765625 + ] + }, + { + "id": 616, + "relativePosition": [ + 26.0, + 24.0, + 23.063200073242186 + ] + }, + { + "id": 617, + "relativePosition": [ + 31.0, + 24.08260009765625, + 22.0 + ] + }, + { + "id": 618, + "relativePosition": [ + 32.0, + 26.0, + 21.063200073242186 + ] + }, + { + "id": 619, + "relativePosition": [ + 38.0, + 34.0, + 34.470899963378905 + ] + }, + { + "id": 620, + "relativePosition": [ + 29.0, + 39.897899780273434, + 31.0 + ] + }, + { + "id": 621, + "relativePosition": [ + 24.703800048828125, + 24.0, + 24.0 + ] + }, + { + "id": 622, + "relativePosition": [ + 29.0, + 24.0, + 22.063200073242186 + ] + }, + { + "id": 623, + "relativePosition": [ + 38.0, + 31.0, + 35.91739990234375 + ] + }, + { + "id": 624, + "relativePosition": [ + 34.0, + 38.665, + 33.0 + ] + }, + { + "id": 625, + "relativePosition": [ + 21.0, + 29.0, + 25.76209991455078 + ] + }, + { + "id": 626, + "relativePosition": [ + 22.315599975585936, + 26.0, + 25.0 + ] + }, + { + "id": 627, + "relativePosition": [ + 36.0, + 37.0, + 33.878500061035155 + ] + }, + { + "id": 628, + "relativePosition": [ + 25.645599975585938, + 39.0, + 30.0 + ] + }, + { + "id": 629, + "relativePosition": [ + 24.0, + 24.703800048828125, + 24.0 + ] + }, + { + "id": 630, + "relativePosition": [ + 33.0, + 27.0, + 20.936799926757814 + ] + }, + { + "id": 631, + "relativePosition": [ + 22.0, + 26.684400024414064, + 25.0 + ] + }, + { + "id": 632, + "relativePosition": [ + 32.0, + 25.0, + 21.567899780273436 + ] + }, + { + "id": 633, + "relativePosition": [ + 36.0, + 36.91739990234375, + 34.0 + ] + }, + { + "id": 634, + "relativePosition": [ + 23.0, + 37.0, + 28.587400054931642 + ] + }, + { + "id": 635, + "relativePosition": [ + 20.897899780273438, + 31.0, + 26.0 + ] + }, + { + "id": 636, + "relativePosition": [ + 21.063200073242186, + 28.0, + 26.0 + ] + }, + { + "id": 637, + "relativePosition": [ + 31.0, + 39.74260009765625, + 32.0 + ] + }, + { + "id": 638, + "relativePosition": [ + 21.567899780273436, + 35.0, + 28.0 + ] + }, + { + "id": 639, + "relativePosition": [ + 27.0, + 23.529099731445314, + 23.0 + ] + }, + { + "id": 640, + "relativePosition": [ + 33.0, + 29.0, + 20.50969970703125 + ] + }, + { + "id": 641, + "relativePosition": [ + 38.0, + 33.31559997558594, + 35.0 + ] + }, + { + "id": 642, + "relativePosition": [ + 20.83969970703125, + 30.0, + 26.0 + ] + }, + { + "id": 643, + "relativePosition": [ + 20.665, + 32.0, + 27.0 + ] + }, + { + "id": 644, + "relativePosition": [ + 21.878499755859377, + 27.0, + 25.0 + ] + }, + { + "id": 645, + "relativePosition": [ + 28.0, + 23.140900268554688, + 23.0 + ] + }, + { + "id": 646, + "relativePosition": [ + 38.0, + 30.0, + 36.0 + ] + }, + { + "id": 647, + "relativePosition": [ + 21.063200073242186, + 34.0, + 28.0 + ] + }, + { + "id": 648, + "relativePosition": [ + 21.0, + 28.276799926757814, + 26.0 + ] + }, + { + "id": 649, + "relativePosition": [ + 36.91739990234375, + 36.0, + 34.0 + ] + }, + { + "id": 650, + "relativePosition": [ + 28.0, + 39.74260009765625, + 31.0 + ] + }, + { + "id": 651, + "relativePosition": [ + 20.936799926757814, + 33.0, + 27.0 + ] + }, + { + "id": 652, + "relativePosition": [ + 33.0, + 28.0, + 20.665 + ] + }, + { + "id": 653, + "relativePosition": [ + 38.0, + 32.0, + 35.665 + ] + }, + { + "id": 654, + "relativePosition": [ + 37.063200073242186, + 35.0, + 35.0 + ] + }, + { + "id": 655, + "relativePosition": [ + 33.0, + 39.063200073242186, + 33.0 + ] + }, + { + "id": 656, + "relativePosition": [ + 25.0, + 38.665, + 30.0 + ] + }, + { + "id": 657, + "relativePosition": [ + 23.0, + 37.063200073242186, + 29.0 + ] + }, + { + "id": 658, + "relativePosition": [ + 20.50969970703125, + 31.0, + 27.0 + ] + }, + { + "id": 659, + "relativePosition": [ + 24.0, + 38.0, + 30.0 + ] + }, + { + "id": 660, + "relativePosition": [ + 23.0, + 25.0, + 24.89790008544922 + ] + }, + { + "id": 661, + "relativePosition": [ + 28.587400054931642, + 23.0, + 23.0 + ] + }, + { + "id": 662, + "relativePosition": [ + 33.0, + 26.839700012207032, + 21.0 + ] + }, + { + "id": 663, + "relativePosition": [ + 22.063200073242186, + 36.0, + 29.0 + ] + }, + { + "id": 664, + "relativePosition": [ + 35.0, + 38.0, + 33.31559997558594 + ] + }, + { + "id": 665, + "relativePosition": [ + 21.335, + 27.0, + 26.0 + ] + }, + { + "id": 666, + "relativePosition": [ + 27.0, + 23.0, + 23.529099731445314 + ] + }, + { + "id": 667, + "relativePosition": [ + 37.68440002441406, + 34.0, + 35.0 + ] + }, + { + "id": 668, + "relativePosition": [ + 35.0, + 37.68440002441406, + 34.0 + ] + }, + { + "id": 669, + "relativePosition": [ + 30.0, + 39.800900268554685, + 32.0 + ] + }, + { + "id": 670, + "relativePosition": [ + 27.0, + 39.49030029296875, + 31.0 + ] + }, + { + "id": 671, + "relativePosition": [ + 22.936799926757814, + 37.0, + 29.0 + ] + }, + { + "id": 672, + "relativePosition": [ + 20.470900268554686, + 30.0, + 27.0 + ] + }, + { + "id": 673, + "relativePosition": [ + 26.121499938964845, + 23.0, + 24.0 + ] + }, + { + "id": 674, + "relativePosition": [ + 29.0, + 23.0, + 22.936799926757814 + ] + }, + { + "id": 675, + "relativePosition": [ + 37.0, + 35.102099914550784, + 35.0 + ] + }, + { + "id": 676, + "relativePosition": [ + 38.0, + 33.0, + 35.199099731445315 + ] + }, + { + "id": 677, + "relativePosition": [ + 21.0, + 33.878500061035155, + 28.0 + ] + }, + { + "id": 678, + "relativePosition": [ + 33.16029998779297, + 39.0, + 33.0 + ] + }, + { + "id": 679, + "relativePosition": [ + 32.0, + 39.335, + 33.0 + ] + }, + { + "id": 680, + "relativePosition": [ + 22.0, + 26.0, + 25.529100036621095 + ] + }, + { + "id": 681, + "relativePosition": [ + 26.0, + 23.08260009765625, + 24.0 + ] + }, + { + "id": 682, + "relativePosition": [ + 30.0, + 23.0, + 22.859099731445312 + ] + }, + { + "id": 683, + "relativePosition": [ + 35.91739990234375, + 37.0, + 34.0 + ] + }, + { + "id": 684, + "relativePosition": [ + 25.0, + 23.762100219726562, + 24.0 + ] + }, + { + "id": 685, + "relativePosition": [ + 29.0, + 39.74260009765625, + 32.0 + ] + }, + { + "id": 686, + "relativePosition": [ + 23.0, + 37.14090026855469, + 30.0 + ] + }, + { + "id": 687, + "relativePosition": [ + 21.393200073242188, + 35.0, + 29.0 + ] + }, + { + "id": 688, + "relativePosition": [ + 20.897899780273438, + 29.0, + 26.0 + ] + }, + { + "id": 689, + "relativePosition": [ + 20.50969970703125, + 29.0, + 27.0 + ] + }, + { + "id": 690, + "relativePosition": [ + 33.0, + 26.0, + 21.335 + ] + }, + { + "id": 691, + "relativePosition": [ + 33.0, + 25.0, + 21.878499755859377 + ] + }, + { + "id": 692, + "relativePosition": [ + 22.0, + 35.91739990234375, + 29.0 + ] + }, + { + "id": 693, + "relativePosition": [ + 22.936799926757814, + 25.0, + 25.0 + ] + }, + { + "id": 694, + "relativePosition": [ + 32.0, + 24.335, + 22.0 + ] + }, + { + "id": 695, + "relativePosition": [ + 37.936799926757814, + 31.0, + 36.0 + ] + }, + { + "id": 696, + "relativePosition": [ + 26.0, + 39.102100219726566, + 31.0 + ] + }, + { + "id": 697, + "relativePosition": [ + 20.41260009765625, + 32.0, + 28.0 + ] + }, + { + "id": 698, + "relativePosition": [ + 36.23789978027344, + 36.0, + 35.0 + ] + }, + { + "id": 699, + "relativePosition": [ + 21.762100219726562, + 26.0, + 26.0 + ] + }, + { + "id": 700, + "relativePosition": [ + 24.0, + 24.0, + 24.703800048828125 + ] + }, + { + "id": 701, + "relativePosition": [ + 28.0, + 23.0, + 23.140900268554688 + ] + }, + { + "id": 702, + "relativePosition": [ + 31.0, + 39.49030029296875, + 33.0 + ] + }, + { + "id": 703, + "relativePosition": [ + 31.0, + 24.0, + 22.063200073242186 + ] + }, + { + "id": 704, + "relativePosition": [ + 23.0, + 24.89790008544922, + 25.0 + ] + }, + { + "id": 705, + "relativePosition": [ + 31.0, + 23.0, + 22.936799926757814 + ] + }, + { + "id": 706, + "relativePosition": [ + 37.41260009765625, + 33.0, + 36.0 + ] + }, + { + "id": 707, + "relativePosition": [ + 21.0, + 28.0, + 26.121499938964845 + ] + }, + { + "id": 708, + "relativePosition": [ + 33.16029998779297, + 27.0, + 21.0 + ] + }, + { + "id": 709, + "relativePosition": [ + 34.470899963378905, + 38.0, + 34.0 + ] + }, + { + "id": 710, + "relativePosition": [ + 34.0, + 38.23789978027344, + 34.0 + ] + }, + { + "id": 711, + "relativePosition": [ + 20.665, + 33.0, + 28.0 + ] + }, + { + "id": 712, + "relativePosition": [ + 37.74260009765625, + 32.0, + 36.0 + ] + }, + { + "id": 713, + "relativePosition": [ + 28.0, + 39.58739990234375, + 32.0 + ] + }, + { + "id": 714, + "relativePosition": [ + 21.0, + 34.0, + 28.276799926757814 + ] + }, + { + "id": 715, + "relativePosition": [ + 20.25739990234375, + 31.0, + 28.0 + ] + }, + { + "id": 716, + "relativePosition": [ + 20.665, + 28.0, + 27.0 + ] + }, + { + "id": 717, + "relativePosition": [ + 37.063200073242186, + 31.0, + 37.0 + ] + }, + { + "id": 718, + "relativePosition": [ + 37.0, + 34.0, + 35.91739990234375 + ] + }, + { + "id": 719, + "relativePosition": [ + 36.0, + 36.23789978027344, + 35.0 + ] + }, + { + "id": 720, + "relativePosition": [ + 33.0, + 39.0, + 33.16029998779297 + ] + }, + { + "id": 721, + "relativePosition": [ + 25.76209991455078, + 39.0, + 31.0 + ] + }, + { + "id": 722, + "relativePosition": [ + 22.859099731445312, + 37.0, + 30.0 + ] + }, + { + "id": 723, + "relativePosition": [ + 21.0, + 34.23790008544922, + 29.0 + ] + }, + { + "id": 724, + "relativePosition": [ + 22.315599975585936, + 25.0, + 26.0 + ] + }, + { + "id": 725, + "relativePosition": [ + 23.762100219726562, + 24.0, + 25.0 + ] + }, + { + "id": 726, + "relativePosition": [ + 32.0, + 24.0, + 22.25739990234375 + ] + }, + { + "id": 727, + "relativePosition": [ + 33.0, + 38.665, + 34.0 + ] + }, + { + "id": 728, + "relativePosition": [ + 37.14090026855469, + 30.0, + 37.0 + ] + }, + { + "id": 729, + "relativePosition": [ + 37.0, + 33.878500061035155, + 36.0 + ] + }, + { + "id": 730, + "relativePosition": [ + 22.0, + 25.529100036621095, + 26.0 + ] + }, + { + "id": 731, + "relativePosition": [ + 33.878500061035155, + 28.0, + 21.0 + ] + }, + { + "id": 732, + "relativePosition": [ + 25.0, + 38.606799926757816, + 31.0 + ] + }, + { + "id": 733, + "relativePosition": [ + 22.0, + 36.0, + 30.0 + ] + }, + { + "id": 734, + "relativePosition": [ + 37.0, + 35.0, + 35.102099914550784 + ] + }, + { + "id": 735, + "relativePosition": [ + 29.0, + 22.936799926757814, + 23.0 + ] + }, + { + "id": 736, + "relativePosition": [ + 37.0, + 32.0, + 36.85909973144531 + ] + }, + { + "id": 737, + "relativePosition": [ + 35.0, + 37.063200073242186, + 35.0 + ] + }, + { + "id": 738, + "relativePosition": [ + 27.0, + 39.335, + 32.0 + ] + }, + { + "id": 739, + "relativePosition": [ + 24.08260009765625, + 38.0, + 31.0 + ] + }, + { + "id": 740, + "relativePosition": [ + 21.0, + 27.0, + 26.839700012207032 + ] + }, + { + "id": 741, + "relativePosition": [ + 25.0, + 23.0, + 24.89790008544922 + ] + }, + { + "id": 742, + "relativePosition": [ + 24.0, + 23.762100219726562, + 25.0 + ] + }, + { + "id": 743, + "relativePosition": [ + 26.0, + 23.0, + 24.08260009765625 + ] + }, + { + "id": 744, + "relativePosition": [ + 33.0, + 24.800900268554688, + 22.0 + ] + }, + { + "id": 745, + "relativePosition": [ + 34.0, + 27.0, + 21.335 + ] + }, + { + "id": 746, + "relativePosition": [ + 34.0, + 29.0, + 20.897899780273438 + ] + }, + { + "id": 747, + "relativePosition": [ + 30.0, + 39.529099731445314, + 33.0 + ] + }, + { + "id": 748, + "relativePosition": [ + 32.0, + 23.140900268554688, + 23.0 + ] + }, + { + "id": 749, + "relativePosition": [ + 34.0, + 26.0, + 21.762100219726562 + ] + }, + { + "id": 750, + "relativePosition": [ + 27.0, + 22.58739990234375, + 24.0 + ] + }, + { + "id": 751, + "relativePosition": [ + 28.0, + 22.25739990234375, + 24.0 + ] + }, + { + "id": 752, + "relativePosition": [ + 34.0, + 28.276799926757814, + 21.0 + ] + }, + { + "id": 753, + "relativePosition": [ + 32.0, + 39.0, + 33.878500061035155 + ] + }, + { + "id": 754, + "relativePosition": [ + 20.199099731445312, + 30.0, + 28.0 + ] + }, + { + "id": 755, + "relativePosition": [ + 23.0, + 24.08260009765625, + 26.0 + ] + }, + { + "id": 756, + "relativePosition": [ + 29.0, + 22.063200073242186, + 24.0 + ] + }, + { + "id": 757, + "relativePosition": [ + 35.102099914550784, + 37.0, + 35.0 + ] + }, + { + "id": 758, + "relativePosition": [ + 21.335, + 35.0, + 30.0 + ] + }, + { + "id": 759, + "relativePosition": [ + 37.0, + 31.412599945068358, + 37.0 + ] + }, + { + "id": 760, + "relativePosition": [ + 20.50969970703125, + 33.0, + 29.0 + ] + }, + { + "id": 761, + "relativePosition": [ + 24.89790008544922, + 23.0, + 25.0 + ] + }, + { + "id": 762, + "relativePosition": [ + 30.0, + 22.859099731445312, + 23.0 + ] + }, + { + "id": 763, + "relativePosition": [ + 31.412599945068358, + 23.0, + 23.0 + ] + }, + { + "id": 764, + "relativePosition": [ + 37.0, + 33.0, + 36.470900268554686 + ] + }, + { + "id": 765, + "relativePosition": [ + 26.0, + 39.0, + 31.723200073242186 + ] + }, + { + "id": 766, + "relativePosition": [ + 21.335, + 26.0, + 27.0 + ] + }, + { + "id": 767, + "relativePosition": [ + 23.08260009765625, + 24.0, + 26.0 + ] + }, + { + "id": 768, + "relativePosition": [ + 34.0, + 38.0, + 34.470899963378905 + ] + }, + { + "id": 769, + "relativePosition": [ + 29.0, + 39.49030029296875, + 33.0 + ] + }, + { + "id": 770, + "relativePosition": [ + 23.0, + 37.063200073242186, + 31.0 + ] + }, + { + "id": 771, + "relativePosition": [ + 20.936799926757814, + 27.0, + 27.0 + ] + }, + { + "id": 772, + "relativePosition": [ + 34.0, + 25.529100036621095, + 22.0 + ] + }, + { + "id": 773, + "relativePosition": [ + 36.0, + 36.0, + 35.29619995117187 + ] + }, + { + "id": 774, + "relativePosition": [ + 26.121499938964845, + 39.0, + 32.0 + ] + }, + { + "id": 775, + "relativePosition": [ + 20.897899780273438, + 34.0, + 29.0 + ] + }, + { + "id": 776, + "relativePosition": [ + 30.0, + 22.0, + 24.0 + ] + }, + { + "id": 777, + "relativePosition": [ + 34.0, + 28.0, + 21.063200073242186 + ] + }, + { + "id": 778, + "relativePosition": [ + 36.0, + 35.29619995117187, + 36.0 + ] + }, + { + "id": 779, + "relativePosition": [ + 28.0, + 39.335, + 33.0 + ] + }, + { + "id": 780, + "relativePosition": [ + 20.25739990234375, + 29.0, + 28.0 + ] + }, + { + "id": 781, + "relativePosition": [ + 21.0, + 26.839700012207032, + 27.0 + ] + }, + { + "id": 782, + "relativePosition": [ + 34.0, + 37.68440002441406, + 35.0 + ] + }, + { + "id": 783, + "relativePosition": [ + 31.0, + 39.102100219726566, + 34.0 + ] + }, + { + "id": 784, + "relativePosition": [ + 22.936799926757814, + 37.0, + 31.0 + ] + }, + { + "id": 785, + "relativePosition": [ + 33.31559997558594, + 25.0, + 22.0 + ] + }, + { + "id": 786, + "relativePosition": [ + 36.91739990234375, + 34.0, + 36.0 + ] + }, + { + "id": 787, + "relativePosition": [ + 24.0, + 37.936799926757814, + 31.0 + ] + }, + { + "id": 788, + "relativePosition": [ + 20.25739990234375, + 32.0, + 29.0 + ] + }, + { + "id": 789, + "relativePosition": [ + 24.0, + 23.08260009765625, + 26.0 + ] + }, + { + "id": 790, + "relativePosition": [ + 26.0, + 22.315599975585936, + 25.0 + ] + }, + { + "id": 791, + "relativePosition": [ + 31.0, + 22.936799926757814, + 23.0 + ] + }, + { + "id": 792, + "relativePosition": [ + 32.0, + 38.936799926757814, + 34.0 + ] + }, + { + "id": 793, + "relativePosition": [ + 21.0, + 34.35440002441406, + 30.0 + ] + }, + { + "id": 794, + "relativePosition": [ + 22.0, + 25.0, + 26.684400024414064 + ] + }, + { + "id": 795, + "relativePosition": [ + 37.0, + 30.0, + 37.14090026855469 + ] + }, + { + "id": 796, + "relativePosition": [ + 31.723200073242186, + 39.0, + 34.0 + ] + }, + { + "id": 797, + "relativePosition": [ + 20.41260009765625, + 28.0, + 28.0 + ] + }, + { + "id": 798, + "relativePosition": [ + 36.23789978027344, + 35.0, + 36.0 + ] + }, + { + "id": 799, + "relativePosition": [ + 25.0, + 38.432100219726564, + 32.0 + ] + }, + { + "id": 800, + "relativePosition": [ + 25.0, + 22.936799926757814, + 25.0 + ] + }, + { + "id": 801, + "relativePosition": [ + 27.0, + 22.0, + 24.800900268554688 + ] + }, + { + "id": 802, + "relativePosition": [ + 21.878499755859377, + 25.0, + 27.0 + ] + }, + { + "id": 803, + "relativePosition": [ + 33.0, + 38.12150024414063, + 35.0 + ] + }, + { + "id": 804, + "relativePosition": [ + 30.0, + 39.16030029296875, + 34.0 + ] + }, + { + "id": 805, + "relativePosition": [ + 27.0, + 39.063200073242186, + 33.0 + ] + }, + { + "id": 806, + "relativePosition": [ + 20.102100219726562, + 31.0, + 29.0 + ] + }, + { + "id": 807, + "relativePosition": [ + 33.0, + 24.0, + 22.58739990234375 + ] + }, + { + "id": 808, + "relativePosition": [ + 35.0, + 37.0, + 35.102099914550784 + ] + }, + { + "id": 809, + "relativePosition": [ + 22.063200073242186, + 36.0, + 31.0 + ] + }, + { + "id": 810, + "relativePosition": [ + 24.08260009765625, + 23.0, + 26.0 + ] + }, + { + "id": 811, + "relativePosition": [ + 31.0, + 22.063200073242186, + 24.0 + ] + }, + { + "id": 812, + "relativePosition": [ + 37.0, + 31.0, + 37.063200073242186 + ] + }, + { + "id": 813, + "relativePosition": [ + 26.0, + 38.936799926757814, + 32.0 + ] + }, + { + "id": 814, + "relativePosition": [ + 20.470900268554686, + 33.0, + 30.0 + ] + }, + { + "id": 815, + "relativePosition": [ + 26.684400024414064, + 22.0, + 25.0 + ] + }, + { + "id": 816, + "relativePosition": [ + 35.0, + 36.23789978027344, + 36.0 + ] + }, + { + "id": 817, + "relativePosition": [ + 28.0, + 22.0, + 24.354400024414062 + ] + }, + { + "id": 818, + "relativePosition": [ + 33.0, + 23.529099731445314, + 23.0 + ] + }, + { + "id": 819, + "relativePosition": [ + 36.0, + 31.0, + 37.936799926757814 + ] + }, + { + "id": 820, + "relativePosition": [ + 24.354400024414062, + 38.0, + 32.0 + ] + }, + { + "id": 821, + "relativePosition": [ + 33.31559997558594, + 38.0, + 35.0 + ] + }, + { + "id": 822, + "relativePosition": [ + 20.83969970703125, + 34.0, + 30.0 + ] + }, + { + "id": 823, + "relativePosition": [ + 20.665, + 27.0, + 28.0 + ] + }, + { + "id": 824, + "relativePosition": [ + 36.470900268554686, + 33.0, + 37.0 + ] + }, + { + "id": 825, + "relativePosition": [ + 36.0, + 34.0, + 36.936799926757814 + ] + }, + { + "id": 826, + "relativePosition": [ + 35.29619995117187, + 36.0, + 36.0 + ] + }, + { + "id": 827, + "relativePosition": [ + 20.043800048828125, + 30.0, + 29.0 + ] + }, + { + "id": 828, + "relativePosition": [ + 35.0, + 27.0, + 21.878499755859377 + ] + }, + { + "id": 829, + "relativePosition": [ + 32.0, + 23.0, + 23.140900268554688 + ] + }, + { + "id": 830, + "relativePosition": [ + 35.0, + 26.684400024414064, + 22.0 + ] + }, + { + "id": 831, + "relativePosition": [ + 34.23790008544922, + 29.0, + 21.0 + ] + }, + { + "id": 832, + "relativePosition": [ + 23.0, + 24.0, + 26.121499938964845 + ] + }, + { + "id": 833, + "relativePosition": [ + 34.0, + 25.0, + 22.315599975585936 + ] + }, + { + "id": 834, + "relativePosition": [ + 36.0, + 30.0, + 38.0 + ] + }, + { + "id": 835, + "relativePosition": [ + 36.85909973144531, + 32.0, + 37.0 + ] + }, + { + "id": 836, + "relativePosition": [ + 36.0, + 32.0, + 37.74260009765625 + ] + }, + { + "id": 837, + "relativePosition": [ + 36.0, + 35.0, + 36.23789978027344 + ] + }, + { + "id": 838, + "relativePosition": [ + 32.0, + 38.432100219726564, + 35.0 + ] + }, + { + "id": 839, + "relativePosition": [ + 29.0, + 39.102100219726566, + 34.0 + ] + }, + { + "id": 840, + "relativePosition": [ + 34.470899963378905, + 26.0, + 22.0 + ] + }, + { + "id": 841, + "relativePosition": [ + 21.393200073242188, + 35.0, + 31.0 + ] + }, + { + "id": 842, + "relativePosition": [ + 20.199099731445312, + 32.0, + 30.0 + ] + }, + { + "id": 843, + "relativePosition": [ + 26.0, + 22.0, + 25.529100036621095 + ] + }, + { + "id": 844, + "relativePosition": [ + 26.839700012207032, + 39.0, + 33.0 + ] + }, + { + "id": 845, + "relativePosition": [ + 22.0, + 24.800900268554688, + 27.0 + ] + }, + { + "id": 846, + "relativePosition": [ + 32.0, + 22.25739990234375, + 24.0 + ] + }, + { + "id": 847, + "relativePosition": [ + 35.0, + 29.0, + 21.393200073242188 + ] + }, + { + "id": 848, + "relativePosition": [ + 22.58739990234375, + 24.0, + 27.0 + ] + }, + { + "id": 849, + "relativePosition": [ + 25.0, + 22.315599975585936, + 26.0 + ] + }, + { + "id": 850, + "relativePosition": [ + 25.529100036621095, + 22.0, + 26.0 + ] + }, + { + "id": 851, + "relativePosition": [ + 36.0, + 33.878500061035155, + 37.0 + ] + }, + { + "id": 852, + "relativePosition": [ + 26.0, + 38.665, + 33.0 + ] + }, + { + "id": 853, + "relativePosition": [ + 33.878500061035155, + 24.0, + 23.0 + ] + }, + { + "id": 854, + "relativePosition": [ + 23.0, + 37.0, + 31.412599945068358 + ] + }, + { + "id": 855, + "relativePosition": [ + 20.102100219726562, + 29.0, + 29.0 + ] + }, + { + "id": 856, + "relativePosition": [ + 21.063200073242186, + 26.0, + 28.0 + ] + }, + { + "id": 857, + "relativePosition": [ + 29.0, + 22.0, + 24.08260009765625 + ] + }, + { + "id": 858, + "relativePosition": [ + 34.0, + 24.08260009765625, + 23.0 + ] + }, + { + "id": 859, + "relativePosition": [ + 35.0, + 28.0, + 21.567899780273436 + ] + }, + { + "id": 860, + "relativePosition": [ + 22.0, + 35.91739990234375, + 31.0 + ] + }, + { + "id": 861, + "relativePosition": [ + 34.0, + 37.0, + 35.91739990234375 + ] + }, + { + "id": 862, + "relativePosition": [ + 34.0, + 36.91739990234375, + 36.0 + ] + }, + { + "id": 863, + "relativePosition": [ + 31.0, + 39.0, + 34.23790008544922 + ] + }, + { + "id": 864, + "relativePosition": [ + 25.0, + 38.12150024414063, + 33.0 + ] + }, + { + "id": 865, + "relativePosition": [ + 23.140900268554688, + 37.0, + 32.0 + ] + }, + { + "id": 866, + "relativePosition": [ + 24.0, + 23.0, + 26.121499938964845 + ] + }, + { + "id": 867, + "relativePosition": [ + 28.0, + 39.0, + 33.878500061035155 + ] + }, + { + "id": 868, + "relativePosition": [ + 21.0, + 34.23790008544922, + 31.0 + ] + }, + { + "id": 869, + "relativePosition": [ + 21.0, + 26.121499938964845, + 28.0 + ] + }, + { + "id": 870, + "relativePosition": [ + 24.0, + 37.74260009765625, + 32.0 + ] + }, + { + "id": 871, + "relativePosition": [ + 23.529099731445314, + 23.0, + 27.0 + ] + }, + { + "id": 872, + "relativePosition": [ + 28.0, + 21.567899780273436, + 25.0 + ] + }, + { + "id": 873, + "relativePosition": [ + 35.0, + 36.0, + 36.23789978027344 + ] + }, + { + "id": 874, + "relativePosition": [ + 35.0, + 35.102099914550784, + 37.0 + ] + }, + { + "id": 875, + "relativePosition": [ + 28.276799926757814, + 39.0, + 34.0 + ] + }, + { + "id": 876, + "relativePosition": [ + 23.0, + 23.529099731445314, + 27.0 + ] + }, + { + "id": 877, + "relativePosition": [ + 20.25739990234375, + 28.0, + 29.0 + ] + }, + { + "id": 878, + "relativePosition": [ + 33.0, + 23.0, + 23.529099731445314 + ] + }, + { + "id": 879, + "relativePosition": [ + 36.0, + 33.0, + 37.41260009765625 + ] + }, + { + "id": 880, + "relativePosition": [ + 33.0, + 38.0, + 35.199099731445315 + ] + }, + { + "id": 881, + "relativePosition": [ + 27.0, + 39.0, + 33.16029998779297 + ] + }, + { + "id": 882, + "relativePosition": [ + 20.897899780273438, + 34.0, + 31.0 + ] + }, + { + "id": 883, + "relativePosition": [ + 20.043800048828125, + 31.0, + 30.0 + ] + }, + { + "id": 884, + "relativePosition": [ + 27.0, + 21.878499755859377, + 25.0 + ] + }, + { + "id": 885, + "relativePosition": [ + 31.0, + 38.606799926757816, + 35.0 + ] + }, + { + "id": 886, + "relativePosition": [ + 27.0, + 21.335, + 26.0 + ] + }, + { + "id": 887, + "relativePosition": [ + 30.0, + 21.335, + 25.0 + ] + }, + { + "id": 888, + "relativePosition": [ + 35.0, + 26.0, + 22.315599975585936 + ] + }, + { + "id": 889, + "relativePosition": [ + 35.102099914550784, + 35.0, + 37.0 + ] + }, + { + "id": 890, + "relativePosition": [ + 30.0, + 39.0, + 34.35440002441406 + ] + }, + { + "id": 891, + "relativePosition": [ + 20.0, + 30.0, + 30.0 + ] + }, + { + "id": 892, + "relativePosition": [ + 21.567899780273436, + 25.0, + 28.0 + ] + }, + { + "id": 893, + "relativePosition": [ + 35.0, + 25.0, + 22.936799926757814 + ] + }, + { + "id": 894, + "relativePosition": [ + 20.50969970703125, + 33.0, + 31.0 + ] + }, + { + "id": 895, + "relativePosition": [ + 29.0, + 21.393200073242188, + 25.0 + ] + }, + { + "id": 896, + "relativePosition": [ + 33.0, + 37.41260009765625, + 36.0 + ] + }, + { + "id": 897, + "relativePosition": [ + 24.0, + 37.41260009765625, + 33.0 + ] + }, + { + "id": 898, + "relativePosition": [ + 22.25739990234375, + 36.0, + 32.0 + ] + }, + { + "id": 899, + "relativePosition": [ + 24.800900268554688, + 38.0, + 33.0 + ] + }, + { + "id": 900, + "relativePosition": [ + 35.91739990234375, + 31.0, + 38.0 + ] + }, + { + "id": 901, + "relativePosition": [ + 33.878500061035155, + 37.0, + 36.0 + ] + }, + { + "id": 902, + "relativePosition": [ + 25.0, + 22.0, + 26.684400024414064 + ] + }, + { + "id": 903, + "relativePosition": [ + 26.0, + 21.762100219726562, + 26.0 + ] + }, + { + "id": 904, + "relativePosition": [ + 31.0, + 22.0, + 24.08260009765625 + ] + }, + { + "id": 905, + "relativePosition": [ + 35.91739990234375, + 34.0, + 37.0 + ] + }, + { + "id": 906, + "relativePosition": [ + 30.0, + 38.665, + 35.0 + ] + }, + { + "id": 907, + "relativePosition": [ + 23.0, + 36.85909973144531, + 32.0 + ] + }, + { + "id": 908, + "relativePosition": [ + 20.50969970703125, + 27.0, + 29.0 + ] + }, + { + "id": 909, + "relativePosition": [ + 22.0, + 24.354400024414062, + 28.0 + ] + }, + { + "id": 910, + "relativePosition": [ + 24.800900268554688, + 22.0, + 27.0 + ] + }, + { + "id": 911, + "relativePosition": [ + 35.0, + 24.89790008544922, + 23.0 + ] + }, + { + "id": 912, + "relativePosition": [ + 28.0, + 21.063200073242186, + 26.0 + ] + }, + { + "id": 913, + "relativePosition": [ + 34.0, + 36.0, + 36.936799926757814 + ] + }, + { + "id": 914, + "relativePosition": [ + 24.0, + 22.58739990234375, + 27.0 + ] + }, + { + "id": 915, + "relativePosition": [ + 34.0, + 24.0, + 23.063200073242186 + ] + }, + { + "id": 916, + "relativePosition": [ + 35.199099731445315, + 27.0, + 22.0 + ] + }, + { + "id": 917, + "relativePosition": [ + 29.0, + 39.0, + 34.23790008544922 + ] + }, + { + "id": 918, + "relativePosition": [ + 22.25739990234375, + 24.0, + 28.0 + ] + }, + { + "id": 919, + "relativePosition": [ + 26.0, + 38.23789978027344, + 34.0 + ] + }, + { + "id": 920, + "relativePosition": [ + 20.25739990234375, + 32.0, + 31.0 + ] + }, + { + "id": 921, + "relativePosition": [ + 35.0, + 31.0, + 38.606799926757816 + ] + }, + { + "id": 922, + "relativePosition": [ + 32.0, + 38.0, + 35.64559997558594 + ] + }, + { + "id": 923, + "relativePosition": [ + 22.0, + 35.64559997558594, + 32.0 + ] + }, + { + "id": 924, + "relativePosition": [ + 20.043800048828125, + 29.0, + 30.0 + ] + }, + { + "id": 925, + "relativePosition": [ + 21.0, + 26.0, + 28.276799926757814 + ] + }, + { + "id": 926, + "relativePosition": [ + 31.0, + 21.393200073242188, + 25.0 + ] + }, + { + "id": 927, + "relativePosition": [ + 33.0, + 22.58739990234375, + 24.0 + ] + }, + { + "id": 928, + "relativePosition": [ + 34.0, + 23.08260009765625, + 24.0 + ] + }, + { + "id": 929, + "relativePosition": [ + 21.567899780273436, + 35.0, + 32.0 + ] + }, + { + "id": 930, + "relativePosition": [ + 33.878500061035155, + 23.0, + 24.0 + ] + }, + { + "id": 931, + "relativePosition": [ + 20.897899780273438, + 26.0, + 29.0 + ] + }, + { + "id": 932, + "relativePosition": [ + 23.529099731445314, + 37.0, + 33.0 + ] + }, + { + "id": 933, + "relativePosition": [ + 23.0, + 23.140900268554688, + 28.0 + ] + }, + { + "id": 934, + "relativePosition": [ + 35.665, + 28.0, + 22.0 + ] + }, + { + "id": 935, + "relativePosition": [ + 27.0, + 38.665, + 34.0 + ] + }, + { + "id": 936, + "relativePosition": [ + 29.0, + 21.0, + 25.76209991455078 + ] + }, + { + "id": 937, + "relativePosition": [ + 35.0, + 34.0, + 37.68440002441406 + ] + }, + { + "id": 938, + "relativePosition": [ + 28.0, + 38.936799926757814, + 34.0 + ] + }, + { + "id": 939, + "relativePosition": [ + 20.199099731445312, + 28.0, + 30.0 + ] + }, + { + "id": 940, + "relativePosition": [ + 36.0, + 27.0, + 22.58739990234375 + ] + }, + { + "id": 941, + "relativePosition": [ + 35.91739990234375, + 29.0, + 22.0 + ] + }, + { + "id": 942, + "relativePosition": [ + 35.0, + 30.0, + 38.665 + ] + }, + { + "id": 943, + "relativePosition": [ + 35.199099731445315, + 33.0, + 38.0 + ] + }, + { + "id": 944, + "relativePosition": [ + 32.0, + 37.74260009765625, + 36.0 + ] + }, + { + "id": 945, + "relativePosition": [ + 31.0, + 38.0, + 35.91739990234375 + ] + }, + { + "id": 946, + "relativePosition": [ + 29.0, + 38.606799926757816, + 35.0 + ] + }, + { + "id": 947, + "relativePosition": [ + 25.0, + 38.0, + 33.31559997558594 + ] + }, + { + "id": 948, + "relativePosition": [ + 32.0, + 22.0, + 24.335 + ] + }, + { + "id": 949, + "relativePosition": [ + 35.91739990234375, + 26.0, + 23.0 + ] + }, + { + "id": 950, + "relativePosition": [ + 35.665, + 32.0, + 38.0 + ] + }, + { + "id": 951, + "relativePosition": [ + 25.529100036621095, + 38.0, + 34.0 + ] + }, + { + "id": 952, + "relativePosition": [ + 20.102100219726562, + 31.0, + 31.0 + ] + }, + { + "id": 953, + "relativePosition": [ + 26.0, + 21.335, + 27.0 + ] + }, + { + "id": 954, + "relativePosition": [ + 28.276799926757814, + 21.0, + 26.0 + ] + }, + { + "id": 955, + "relativePosition": [ + 28.0, + 38.432100219726564, + 35.0 + ] + }, + { + "id": 956, + "relativePosition": [ + 34.0, + 35.91739990234375, + 37.0 + ] + }, + { + "id": 957, + "relativePosition": [ + 33.0, + 37.0, + 36.470900268554686 + ] + }, + { + "id": 958, + "relativePosition": [ + 21.0, + 34.0, + 31.723200073242186 + ] + }, + { + "id": 959, + "relativePosition": [ + 23.140900268554688, + 23.0, + 28.0 + ] + }, + { + "id": 960, + "relativePosition": [ + 35.0, + 33.31559997558594, + 38.0 + ] + }, + { + "id": 961, + "relativePosition": [ + 35.0, + 35.0, + 37.063200073242186 + ] + }, + { + "id": 962, + "relativePosition": [ + 22.58739990234375, + 36.0, + 33.0 + ] + }, + { + "id": 963, + "relativePosition": [ + 21.393200073242188, + 25.0, + 29.0 + ] + }, + { + "id": 964, + "relativePosition": [ + 30.0, + 21.0, + 25.645599975585938 + ] + }, + { + "id": 965, + "relativePosition": [ + 32.0, + 21.567899780273436, + 25.0 + ] + }, + { + "id": 966, + "relativePosition": [ + 35.0, + 32.0, + 38.432100219726564 + ] + }, + { + "id": 967, + "relativePosition": [ + 23.0, + 36.470900268554686, + 33.0 + ] + }, + { + "id": 968, + "relativePosition": [ + 21.0, + 25.76209991455078, + 29.0 + ] + }, + { + "id": 969, + "relativePosition": [ + 25.0, + 21.878499755859377, + 27.0 + ] + }, + { + "id": 970, + "relativePosition": [ + 27.0, + 21.0, + 26.839700012207032 + ] + }, + { + "id": 971, + "relativePosition": [ + 35.102099914550784, + 25.0, + 23.0 + ] + }, + { + "id": 972, + "relativePosition": [ + 33.0, + 36.470900268554686, + 37.0 + ] + }, + { + "id": 973, + "relativePosition": [ + 20.043800048828125, + 30.0, + 31.0 + ] + }, + { + "id": 974, + "relativePosition": [ + 26.839700012207032, + 21.0, + 27.0 + ] + }, + { + "id": 975, + "relativePosition": [ + 36.0, + 26.121499938964845, + 23.0 + ] + }, + { + "id": 976, + "relativePosition": [ + 36.0, + 28.0, + 22.25739990234375 + ] + }, + { + "id": 977, + "relativePosition": [ + 30.0, + 38.0, + 36.0 + ] + }, + { + "id": 978, + "relativePosition": [ + 33.0, + 22.0, + 24.800900268554688 + ] + }, + { + "id": 979, + "relativePosition": [ + 21.063200073242186, + 34.0, + 32.0 + ] + }, + { + "id": 980, + "relativePosition": [ + 35.0, + 24.0, + 23.762100219726562 + ] + }, + { + "id": 981, + "relativePosition": [ + 35.0, + 23.762100219726562, + 24.0 + ] + }, + { + "id": 982, + "relativePosition": [ + 27.0, + 38.12150024414063, + 35.0 + ] + }, + { + "id": 983, + "relativePosition": [ + 25.0, + 37.68440002441406, + 34.0 + ] + }, + { + "id": 984, + "relativePosition": [ + 20.470900268554686, + 27.0, + 30.0 + ] + }, + { + "id": 985, + "relativePosition": [ + 20.665, + 33.0, + 32.0 + ] + }, + { + "id": 986, + "relativePosition": [ + 33.878500061035155, + 36.0, + 37.0 + ] + }, + { + "id": 987, + "relativePosition": [ + 24.0, + 37.0, + 33.878500061035155 + ] + }, + { + "id": 988, + "relativePosition": [ + 22.0, + 35.199099731445315, + 33.0 + ] + }, + { + "id": 989, + "relativePosition": [ + 21.0, + 33.878500061035155, + 32.0 + ] + }, + { + "id": 990, + "relativePosition": [ + 24.0, + 22.25739990234375, + 28.0 + ] + }, + { + "id": 991, + "relativePosition": [ + 36.0, + 25.0, + 23.762100219726562 + ] + }, + { + "id": 992, + "relativePosition": [ + 34.0, + 35.0, + 37.68440002441406 + ] + }, + { + "id": 993, + "relativePosition": [ + 22.063200073242186, + 24.0, + 29.0 + ] + }, + { + "id": 994, + "relativePosition": [ + 24.354400024414062, + 22.0, + 28.0 + ] + }, + { + "id": 995, + "relativePosition": [ + 28.0, + 21.0, + 26.121499938964845 + ] + }, + { + "id": 996, + "relativePosition": [ + 31.0, + 21.0, + 25.76209991455078 + ] + }, + { + "id": 997, + "relativePosition": [ + 32.0, + 37.0, + 36.85909973144531 + ] + }, + { + "id": 998, + "relativePosition": [ + 20.83969970703125, + 26.0, + 30.0 + ] + }, + { + "id": 999, + "relativePosition": [ + 26.0, + 38.0, + 34.470899963378905 + ] + }, + { + "id": 1000, + "relativePosition": [ + 24.08260009765625, + 37.0, + 34.0 + ] + }, + { + "id": 1001, + "relativePosition": [ + 21.878499755859377, + 35.0, + 33.0 + ] + }, + { + "id": 1002, + "relativePosition": [ + 21.0, + 25.645599975585938, + 30.0 + ] + }, + { + "id": 1003, + "relativePosition": [ + 22.0, + 24.08260009765625, + 29.0 + ] + }, + { + "id": 1004, + "relativePosition": [ + 34.0, + 23.0, + 24.08260009765625 + ] + }, + { + "id": 1005, + "relativePosition": [ + 31.0, + 37.936799926757814, + 36.0 + ] + }, + { + "id": 1006, + "relativePosition": [ + 29.0, + 38.0, + 35.91739990234375 + ] + }, + { + "id": 1007, + "relativePosition": [ + 20.102100219726562, + 29.0, + 31.0 + ] + }, + { + "id": 1008, + "relativePosition": [ + 36.0, + 24.703800048828125, + 24.0 + ] + }, + { + "id": 1009, + "relativePosition": [ + 26.684400024414064, + 38.0, + 35.0 + ] + }, + { + "id": 1010, + "relativePosition": [ + 21.335, + 34.0, + 33.0 + ] + }, + { + "id": 1011, + "relativePosition": [ + 33.0, + 21.878499755859377, + 25.0 + ] + }, + { + "id": 1012, + "relativePosition": [ + 34.0, + 22.315599975585936, + 25.0 + ] + }, + { + "id": 1013, + "relativePosition": [ + 36.0, + 26.0, + 23.063200073242186 + ] + }, + { + "id": 1014, + "relativePosition": [ + 34.23790008544922, + 31.0, + 39.0 + ] + }, + { + "id": 1015, + "relativePosition": [ + 35.0, + 33.0, + 38.12150024414063 + ] + }, + { + "id": 1016, + "relativePosition": [ + 34.0, + 34.470899963378905, + 38.0 + ] + }, + { + "id": 1017, + "relativePosition": [ + 20.41260009765625, + 32.0, + 32.0 + ] + }, + { + "id": 1018, + "relativePosition": [ + 23.0, + 23.0, + 28.587400054931642 + ] + }, + { + "id": 1019, + "relativePosition": [ + 36.0, + 29.0, + 22.063200073242186 + ] + }, + { + "id": 1020, + "relativePosition": [ + 35.29619995117187, + 24.0, + 24.0 + ] + }, + { + "id": 1021, + "relativePosition": [ + 34.470899963378905, + 34.0, + 38.0 + ] + }, + { + "id": 1022, + "relativePosition": [ + 22.936799926757814, + 23.0, + 29.0 + ] + }, + { + "id": 1023, + "relativePosition": [ + 29.0, + 20.897899780273438, + 26.0 + ] + }, + { + "id": 1024, + "relativePosition": [ + 33.31559997558594, + 22.0, + 25.0 + ] + }, + { + "id": 1025, + "relativePosition": [ + 34.35440002441406, + 30.0, + 39.0 + ] + }, + { + "id": 1026, + "relativePosition": [ + 31.0, + 37.063200073242186, + 37.0 + ] + }, + { + "id": 1027, + "relativePosition": [ + 21.335, + 25.0, + 30.0 + ] + }, + { + "id": 1028, + "relativePosition": [ + 25.0, + 21.567899780273436, + 28.0 + ] + }, + { + "id": 1029, + "relativePosition": [ + 29.0, + 20.50969970703125, + 27.0 + ] + }, + { + "id": 1030, + "relativePosition": [ + 36.470900268554686, + 27.0, + 23.0 + ] + }, + { + "id": 1031, + "relativePosition": [ + 26.0, + 21.063200073242186, + 28.0 + ] + }, + { + "id": 1032, + "relativePosition": [ + 30.0, + 20.83969970703125, + 26.0 + ] + }, + { + "id": 1033, + "relativePosition": [ + 37.0, + 29.0, + 22.936799926757814 + ] + }, + { + "id": 1034, + "relativePosition": [ + 33.0, + 36.0, + 37.41260009765625 + ] + }, + { + "id": 1035, + "relativePosition": [ + 28.0, + 38.0, + 35.665 + ] + }, + { + "id": 1036, + "relativePosition": [ + 23.0, + 36.0, + 33.878500061035155 + ] + }, + { + "id": 1037, + "relativePosition": [ + 20.25739990234375, + 31.0, + 32.0 + ] + }, + { + "id": 1038, + "relativePosition": [ + 20.25739990234375, + 28.0, + 31.0 + ] + }, + { + "id": 1039, + "relativePosition": [ + 24.0, + 36.91739990234375, + 34.0 + ] + }, + { + "id": 1040, + "relativePosition": [ + 28.0, + 20.665, + 27.0 + ] + }, + { + "id": 1041, + "relativePosition": [ + 32.0, + 21.063200073242186, + 26.0 + ] + }, + { + "id": 1042, + "relativePosition": [ + 34.0, + 32.0, + 38.936799926757814 + ] + }, + { + "id": 1043, + "relativePosition": [ + 32.0, + 36.85909973144531, + 37.0 + ] + }, + { + "id": 1044, + "relativePosition": [ + 25.0, + 37.063200073242186, + 35.0 + ] + }, + { + "id": 1045, + "relativePosition": [ + 27.0, + 20.936799926757814, + 27.0 + ] + }, + { + "id": 1046, + "relativePosition": [ + 31.723200073242186, + 21.0, + 26.0 + ] + }, + { + "id": 1047, + "relativePosition": [ + 36.85909973144531, + 28.0, + 23.0 + ] + }, + { + "id": 1048, + "relativePosition": [ + 37.0, + 28.587400054931642, + 23.0 + ] + }, + { + "id": 1049, + "relativePosition": [ + 22.0, + 24.0, + 30.0 + ] + }, + { + "id": 1050, + "relativePosition": [ + 35.0, + 23.0, + 24.89790008544922 + ] + }, + { + "id": 1051, + "relativePosition": [ + 34.0, + 31.723200073242186, + 39.0 + ] + }, + { + "id": 1052, + "relativePosition": [ + 34.0, + 34.0, + 38.23789978027344 + ] + }, + { + "id": 1053, + "relativePosition": [ + 20.936799926757814, + 33.0, + 33.0 + ] + }, + { + "id": 1054, + "relativePosition": [ + 20.50969970703125, + 27.0, + 31.0 + ] + }, + { + "id": 1055, + "relativePosition": [ + 33.0, + 35.199099731445315, + 38.0 + ] + }, + { + "id": 1056, + "relativePosition": [ + 31.412599945068358, + 37.0, + 37.0 + ] + }, + { + "id": 1057, + "relativePosition": [ + 24.0, + 22.063200073242186, + 29.0 + ] + }, + { + "id": 1058, + "relativePosition": [ + 30.0, + 20.470900268554686, + 27.0 + ] + }, + { + "id": 1059, + "relativePosition": [ + 33.0, + 21.335, + 26.0 + ] + }, + { + "id": 1060, + "relativePosition": [ + 37.0, + 27.0, + 23.529099731445314 + ] + }, + { + "id": 1061, + "relativePosition": [ + 26.0, + 37.68440002441406, + 35.0 + ] + }, + { + "id": 1062, + "relativePosition": [ + 23.08260009765625, + 36.0, + 34.0 + ] + }, + { + "id": 1063, + "relativePosition": [ + 26.121499938964845, + 21.0, + 28.0 + ] + }, + { + "id": 1064, + "relativePosition": [ + 31.0, + 20.897899780273438, + 26.0 + ] + }, + { + "id": 1065, + "relativePosition": [ + 35.0, + 22.936799926757814, + 25.0 + ] + }, + { + "id": 1066, + "relativePosition": [ + 34.0, + 33.0, + 38.665 + ] + }, + { + "id": 1067, + "relativePosition": [ + 33.31559997558594, + 35.0, + 38.0 + ] + }, + { + "id": 1068, + "relativePosition": [ + 27.0, + 38.0, + 35.199099731445315 + ] + }, + { + "id": 1069, + "relativePosition": [ + 21.0, + 33.16029998779297, + 33.0 + ] + }, + { + "id": 1070, + "relativePosition": [ + 20.199099731445312, + 30.0, + 32.0 + ] + }, + { + "id": 1071, + "relativePosition": [ + 30.0, + 37.14090026855469, + 37.0 + ] + }, + { + "id": 1072, + "relativePosition": [ + 22.0, + 35.0, + 33.31559997558594 + ] + }, + { + "id": 1073, + "relativePosition": [ + 20.665, + 32.0, + 33.0 + ] + }, + { + "id": 1074, + "relativePosition": [ + 23.0, + 22.936799926757814, + 29.0 + ] + }, + { + "id": 1075, + "relativePosition": [ + 36.91739990234375, + 26.0, + 24.0 + ] + }, + { + "id": 1076, + "relativePosition": [ + 36.23789978027344, + 25.0, + 24.0 + ] + }, + { + "id": 1077, + "relativePosition": [ + 37.0, + 26.121499938964845, + 24.0 + ] + }, + { + "id": 1078, + "relativePosition": [ + 24.89790008544922, + 37.0, + 35.0 + ] + }, + { + "id": 1079, + "relativePosition": [ + 34.0, + 22.0, + 25.529100036621095 + ] + }, + { + "id": 1080, + "relativePosition": [ + 20.897899780273438, + 26.0, + 31.0 + ] + }, + { + "id": 1081, + "relativePosition": [ + 27.0, + 20.665, + 28.0 + ] + }, + { + "id": 1082, + "relativePosition": [ + 32.0, + 36.0, + 37.74260009765625 + ] + }, + { + "id": 1083, + "relativePosition": [ + 23.0, + 35.91739990234375, + 34.0 + ] + }, + { + "id": 1084, + "relativePosition": [ + 22.315599975585936, + 35.0, + 34.0 + ] + }, + { + "id": 1085, + "relativePosition": [ + 34.0, + 31.0, + 39.102100219726566 + ] + }, + { + "id": 1086, + "relativePosition": [ + 34.0, + 30.0, + 39.16030029296875 + ] + }, + { + "id": 1087, + "relativePosition": [ + 22.859099731445312, + 23.0, + 30.0 + ] + }, + { + "id": 1088, + "relativePosition": [ + 24.08260009765625, + 22.0, + 29.0 + ] + }, + { + "id": 1089, + "relativePosition": [ + 31.0, + 20.50969970703125, + 27.0 + ] + }, + { + "id": 1090, + "relativePosition": [ + 36.0, + 24.0, + 24.703800048828125 + ] + }, + { + "id": 1091, + "relativePosition": [ + 29.0, + 37.936799926757814, + 36.0 + ] + }, + { + "id": 1092, + "relativePosition": [ + 28.0, + 20.41260009765625, + 28.0 + ] + }, + { + "id": 1093, + "relativePosition": [ + 20.25739990234375, + 29.0, + 32.0 + ] + }, + { + "id": 1094, + "relativePosition": [ + 34.0, + 21.762100219726562, + 26.0 + ] + }, + { + "id": 1095, + "relativePosition": [ + 29.0, + 37.063200073242186, + 37.0 + ] + }, + { + "id": 1096, + "relativePosition": [ + 35.102099914550784, + 23.0, + 25.0 + ] + }, + { + "id": 1097, + "relativePosition": [ + 27.0, + 37.41260009765625, + 36.0 + ] + }, + { + "id": 1098, + "relativePosition": [ + 37.0, + 28.0, + 23.140900268554688 + ] + }, + { + "id": 1099, + "relativePosition": [ + 28.0, + 37.74260009765625, + 36.0 + ] + }, + { + "id": 1100, + "relativePosition": [ + 22.0, + 34.470899963378905, + 34.0 + ] + }, + { + "id": 1101, + "relativePosition": [ + 32.0, + 21.0, + 26.121499938964845 + ] + }, + { + "id": 1102, + "relativePosition": [ + 21.762100219726562, + 34.0, + 34.0 + ] + }, + { + "id": 1103, + "relativePosition": [ + 33.0, + 31.0, + 39.49030029296875 + ] + }, + { + "id": 1104, + "relativePosition": [ + 23.0, + 22.859099731445312, + 30.0 + ] + }, + { + "id": 1105, + "relativePosition": [ + 32.0, + 20.665, + 27.0 + ] + }, + { + "id": 1106, + "relativePosition": [ + 36.0, + 23.762100219726562, + 25.0 + ] + }, + { + "id": 1107, + "relativePosition": [ + 26.0, + 37.0, + 35.91739990234375 + ] + }, + { + "id": 1108, + "relativePosition": [ + 23.762100219726562, + 36.0, + 35.0 + ] + }, + { + "id": 1109, + "relativePosition": [ + 21.393200073242188, + 25.0, + 31.0 + ] + }, + { + "id": 1110, + "relativePosition": [ + 25.0, + 21.393200073242188, + 29.0 + ] + }, + { + "id": 1111, + "relativePosition": [ + 26.0, + 21.0, + 28.276799926757814 + ] + }, + { + "id": 1112, + "relativePosition": [ + 29.0, + 20.25739990234375, + 28.0 + ] + }, + { + "id": 1113, + "relativePosition": [ + 24.0, + 36.23789978027344, + 35.0 + ] + }, + { + "id": 1114, + "relativePosition": [ + 20.50969970703125, + 31.0, + 33.0 + ] + }, + { + "id": 1115, + "relativePosition": [ + 20.41260009765625, + 28.0, + 32.0 + ] + }, + { + "id": 1116, + "relativePosition": [ + 21.0, + 25.76209991455078, + 31.0 + ] + }, + { + "id": 1117, + "relativePosition": [ + 37.0, + 25.0, + 24.89790008544922 + ] + }, + { + "id": 1118, + "relativePosition": [ + 25.76209991455078, + 21.0, + 29.0 + ] + }, + { + "id": 1119, + "relativePosition": [ + 31.0, + 37.0, + 37.063200073242186 + ] + }, + { + "id": 1120, + "relativePosition": [ + 26.121499938964845, + 37.0, + 36.0 + ] + }, + { + "id": 1121, + "relativePosition": [ + 21.0, + 33.0, + 33.16029998779297 + ] + }, + { + "id": 1122, + "relativePosition": [ + 33.0, + 30.0, + 39.548499755859375 + ] + }, + { + "id": 1123, + "relativePosition": [ + 37.0, + 24.89790008544922, + 25.0 + ] + }, + { + "id": 1124, + "relativePosition": [ + 33.0, + 34.0, + 38.665 + ] + }, + { + "id": 1125, + "relativePosition": [ + 33.0, + 35.0, + 38.12150024414063 + ] + }, + { + "id": 1126, + "relativePosition": [ + 32.0, + 35.665, + 38.0 + ] + }, + { + "id": 1127, + "relativePosition": [ + 31.0, + 36.0, + 37.936799926757814 + ] + }, + { + "id": 1128, + "relativePosition": [ + 25.0, + 37.0, + 35.102099914550784 + ] + }, + { + "id": 1129, + "relativePosition": [ + 34.470899963378905, + 22.0, + 26.0 + ] + }, + { + "id": 1130, + "relativePosition": [ + 35.0, + 22.315599975585936, + 26.0 + ] + }, + { + "id": 1131, + "relativePosition": [ + 20.470900268554686, + 30.0, + 33.0 + ] + }, + { + "id": 1132, + "relativePosition": [ + 24.0, + 22.0, + 30.0 + ] + }, + { + "id": 1133, + "relativePosition": [ + 28.0, + 37.0, + 36.85909973144531 + ] + }, + { + "id": 1134, + "relativePosition": [ + 20.665, + 27.0, + 32.0 + ] + }, + { + "id": 1135, + "relativePosition": [ + 22.0, + 24.08260009765625, + 31.0 + ] + }, + { + "id": 1136, + "relativePosition": [ + 33.0, + 21.0, + 26.839700012207032 + ] + }, + { + "id": 1137, + "relativePosition": [ + 21.335, + 33.0, + 34.0 + ] + }, + { + "id": 1138, + "relativePosition": [ + 30.0, + 20.199099731445312, + 28.0 + ] + }, + { + "id": 1139, + "relativePosition": [ + 36.23789978027344, + 24.0, + 25.0 + ] + }, + { + "id": 1140, + "relativePosition": [ + 37.0, + 26.0, + 24.08260009765625 + ] + }, + { + "id": 1141, + "relativePosition": [ + 37.063200073242186, + 29.0, + 23.0 + ] + }, + { + "id": 1142, + "relativePosition": [ + 33.878500061035155, + 32.0, + 39.0 + ] + }, + { + "id": 1143, + "relativePosition": [ + 33.0, + 32.0, + 39.335 + ] + }, + { + "id": 1144, + "relativePosition": [ + 33.0, + 33.16029998779297, + 39.0 + ] + }, + { + "id": 1145, + "relativePosition": [ + 27.0, + 20.50969970703125, + 29.0 + ] + }, + { + "id": 1146, + "relativePosition": [ + 37.41260009765625, + 27.0, + 24.0 + ] + }, + { + "id": 1147, + "relativePosition": [ + 28.587400054931642, + 37.0, + 37.0 + ] + }, + { + "id": 1148, + "relativePosition": [ + 35.91739990234375, + 23.0, + 26.0 + ] + }, + { + "id": 1149, + "relativePosition": [ + 37.74260009765625, + 28.0, + 24.0 + ] + }, + { + "id": 1150, + "relativePosition": [ + 23.0, + 35.102099914550784, + 35.0 + ] + }, + { + "id": 1151, + "relativePosition": [ + 37.936799926757814, + 29.0, + 24.0 + ] + }, + { + "id": 1152, + "relativePosition": [ + 33.16029998779297, + 33.0, + 39.0 + ] + }, + { + "id": 1153, + "relativePosition": [ + 22.936799926757814, + 35.0, + 35.0 + ] + }, + { + "id": 1154, + "relativePosition": [ + 26.0, + 20.897899780273438, + 29.0 + ] + }, + { + "id": 1155, + "relativePosition": [ + 27.0, + 37.0, + 36.470900268554686 + ] + }, + { + "id": 1156, + "relativePosition": [ + 20.50969970703125, + 29.0, + 33.0 + ] + }, + { + "id": 1157, + "relativePosition": [ + 24.0, + 36.0, + 35.29619995117187 + ] + }, + { + "id": 1158, + "relativePosition": [ + 21.0, + 26.0, + 31.723200073242186 + ] + }, + { + "id": 1159, + "relativePosition": [ + 25.0, + 21.335, + 30.0 + ] + }, + { + "id": 1160, + "relativePosition": [ + 31.0, + 20.25739990234375, + 28.0 + ] + }, + { + "id": 1161, + "relativePosition": [ + 33.0, + 20.936799926757814, + 27.0 + ] + }, + { + "id": 1162, + "relativePosition": [ + 36.0, + 23.08260009765625, + 26.0 + ] + }, + { + "id": 1163, + "relativePosition": [ + 21.0, + 32.0, + 33.878500061035155 + ] + }, + { + "id": 1164, + "relativePosition": [ + 21.0, + 26.121499938964845, + 32.0 + ] + }, + { + "id": 1165, + "relativePosition": [ + 22.936799926757814, + 23.0, + 31.0 + ] + }, + { + "id": 1166, + "relativePosition": [ + 34.0, + 21.335, + 27.0 + ] + }, + { + "id": 1167, + "relativePosition": [ + 24.703800048828125, + 36.0, + 36.0 + ] + }, + { + "id": 1168, + "relativePosition": [ + 28.0, + 20.25739990234375, + 29.0 + ] + }, + { + "id": 1169, + "relativePosition": [ + 30.0, + 37.0, + 37.14090026855469 + ] + }, + { + "id": 1170, + "relativePosition": [ + 22.0, + 34.0, + 34.470899963378905 + ] + }, + { + "id": 1171, + "relativePosition": [ + 30.0, + 36.0, + 38.0 + ] + }, + { + "id": 1172, + "relativePosition": [ + 25.0, + 36.23789978027344, + 36.0 + ] + }, + { + "id": 1173, + "relativePosition": [ + 22.063200073242186, + 24.0, + 31.0 + ] + }, + { + "id": 1174, + "relativePosition": [ + 38.0, + 27.0, + 24.800900268554688 + ] + }, + { + "id": 1175, + "relativePosition": [ + 32.0, + 35.0, + 38.432100219726564 + ] + }, + { + "id": 1176, + "relativePosition": [ + 36.91739990234375, + 24.0, + 26.0 + ] + }, + { + "id": 1177, + "relativePosition": [ + 26.0, + 36.91739990234375, + 36.0 + ] + }, + { + "id": 1178, + "relativePosition": [ + 21.063200073242186, + 32.0, + 34.0 + ] + }, + { + "id": 1179, + "relativePosition": [ + 33.16029998779297, + 21.0, + 27.0 + ] + }, + { + "id": 1180, + "relativePosition": [ + 35.0, + 22.0, + 26.684400024414064 + ] + }, + { + "id": 1181, + "relativePosition": [ + 37.68440002441406, + 26.0, + 25.0 + ] + }, + { + "id": 1182, + "relativePosition": [ + 37.063200073242186, + 25.0, + 25.0 + ] + }, + { + "id": 1183, + "relativePosition": [ + 38.0, + 26.684400024414064, + 25.0 + ] + }, + { + "id": 1184, + "relativePosition": [ + 32.0, + 20.41260009765625, + 28.0 + ] + }, + { + "id": 1185, + "relativePosition": [ + 32.0, + 31.0, + 39.74260009765625 + ] + }, + { + "id": 1186, + "relativePosition": [ + 29.0, + 37.0, + 37.063200073242186 + ] + }, + { + "id": 1187, + "relativePosition": [ + 20.665, + 28.0, + 33.0 + ] + }, + { + "id": 1188, + "relativePosition": [ + 22.315599975585936, + 34.0, + 35.0 + ] + }, + { + "id": 1189, + "relativePosition": [ + 20.897899780273438, + 31.0, + 34.0 + ] + }, + { + "id": 1190, + "relativePosition": [ + 25.645599975585938, + 21.0, + 30.0 + ] + }, + { + "id": 1191, + "relativePosition": [ + 29.0, + 20.102100219726562, + 29.0 + ] + }, + { + "id": 1192, + "relativePosition": [ + 35.0, + 21.878499755859377, + 27.0 + ] + }, + { + "id": 1193, + "relativePosition": [ + 21.0, + 31.723200073242186, + 34.0 + ] + }, + { + "id": 1194, + "relativePosition": [ + 21.567899780273436, + 25.0, + 32.0 + ] + }, + { + "id": 1195, + "relativePosition": [ + 23.0, + 22.936799926757814, + 31.0 + ] + }, + { + "id": 1196, + "relativePosition": [ + 26.0, + 36.0, + 36.936799926757814 + ] + }, + { + "id": 1197, + "relativePosition": [ + 31.0, + 35.91739990234375, + 38.0 + ] + }, + { + "id": 1198, + "relativePosition": [ + 33.0, + 33.0, + 39.063200073242186 + ] + }, + { + "id": 1199, + "relativePosition": [ + 23.0, + 35.0, + 35.102099914550784 + ] + }, + { + "id": 1200, + "relativePosition": [ + 21.063200073242186, + 26.0, + 32.0 + ] + }, + { + "id": 1201, + "relativePosition": [ + 27.0, + 20.470900268554686, + 30.0 + ] + }, + { + "id": 1202, + "relativePosition": [ + 32.0, + 30.0, + 39.800900268554685 + ] + }, + { + "id": 1203, + "relativePosition": [ + 29.0, + 36.0, + 37.936799926757814 + ] + }, + { + "id": 1204, + "relativePosition": [ + 26.121499938964845, + 36.0, + 37.0 + ] + }, + { + "id": 1205, + "relativePosition": [ + 24.0, + 22.063200073242186, + 31.0 + ] + }, + { + "id": 1206, + "relativePosition": [ + 37.0, + 24.08260009765625, + 26.0 + ] + }, + { + "id": 1207, + "relativePosition": [ + 38.0, + 28.0, + 24.354400024414062 + ] + }, + { + "id": 1208, + "relativePosition": [ + 32.0, + 34.0, + 38.936799926757814 + ] + }, + { + "id": 1209, + "relativePosition": [ + 21.878499755859377, + 33.0, + 35.0 + ] + }, + { + "id": 1210, + "relativePosition": [ + 20.83969970703125, + 30.0, + 34.0 + ] + }, + { + "id": 1211, + "relativePosition": [ + 20.936799926757814, + 27.0, + 33.0 + ] + }, + { + "id": 1212, + "relativePosition": [ + 22.0, + 24.354400024414062, + 32.0 + ] + }, + { + "id": 1213, + "relativePosition": [ + 33.0, + 20.665, + 28.0 + ] + }, + { + "id": 1214, + "relativePosition": [ + 31.0, + 35.0, + 38.606799926757816 + ] + }, + { + "id": 1215, + "relativePosition": [ + 27.0, + 36.470900268554686, + 37.0 + ] + }, + { + "id": 1216, + "relativePosition": [ + 24.0, + 35.29619995117187, + 36.0 + ] + }, + { + "id": 1217, + "relativePosition": [ + 23.762100219726562, + 35.0, + 36.0 + ] + }, + { + "id": 1218, + "relativePosition": [ + 22.0, + 33.31559997558594, + 35.0 + ] + }, + { + "id": 1219, + "relativePosition": [ + 28.0, + 36.85909973144531, + 37.0 + ] + }, + { + "id": 1220, + "relativePosition": [ + 30.0, + 20.043800048828125, + 29.0 + ] + }, + { + "id": 1221, + "relativePosition": [ + 36.0, + 23.0, + 26.121499938964845 + ] + }, + { + "id": 1222, + "relativePosition": [ + 25.0, + 36.0, + 36.23789978027344 + ] + }, + { + "id": 1223, + "relativePosition": [ + 26.0, + 20.83969970703125, + 30.0 + ] + }, + { + "id": 1224, + "relativePosition": [ + 21.567899780273436, + 32.0, + 35.0 + ] + }, + { + "id": 1225, + "relativePosition": [ + 36.0, + 22.58739990234375, + 27.0 + ] + }, + { + "id": 1226, + "relativePosition": [ + 37.68440002441406, + 25.0, + 26.0 + ] + }, + { + "id": 1227, + "relativePosition": [ + 33.878500061035155, + 21.0, + 28.0 + ] + }, + { + "id": 1228, + "relativePosition": [ + 28.0, + 36.0, + 37.74260009765625 + ] + }, + { + "id": 1229, + "relativePosition": [ + 21.0, + 26.839700012207032, + 33.0 + ] + }, + { + "id": 1230, + "relativePosition": [ + 25.0, + 21.393200073242188, + 31.0 + ] + }, + { + "id": 1231, + "relativePosition": [ + 38.0, + 26.0, + 25.529100036621095 + ] + }, + { + "id": 1232, + "relativePosition": [ + 22.25739990234375, + 24.0, + 32.0 + ] + }, + { + "id": 1233, + "relativePosition": [ + 35.199099731445315, + 22.0, + 27.0 + ] + }, + { + "id": 1234, + "relativePosition": [ + 38.0, + 29.0, + 24.08260009765625 + ] + }, + { + "id": 1235, + "relativePosition": [ + 20.897899780273438, + 29.0, + 34.0 + ] + }, + { + "id": 1236, + "relativePosition": [ + 21.335, + 26.0, + 33.0 + ] + }, + { + "id": 1237, + "relativePosition": [ + 38.0, + 25.529100036621095, + 26.0 + ] + }, + { + "id": 1238, + "relativePosition": [ + 23.0, + 34.0, + 35.91739990234375 + ] + }, + { + "id": 1239, + "relativePosition": [ + 24.08260009765625, + 22.0, + 31.0 + ] + }, + { + "id": 1240, + "relativePosition": [ + 28.0, + 20.199099731445312, + 30.0 + ] + }, + { + "id": 1241, + "relativePosition": [ + 32.0, + 32.0, + 39.58739990234375 + ] + }, + { + "id": 1242, + "relativePosition": [ + 23.0, + 23.0, + 31.412599945068358 + ] + }, + { + "id": 1243, + "relativePosition": [ + 32.0, + 33.878500061035155, + 39.0 + ] + }, + { + "id": 1244, + "relativePosition": [ + 32.0, + 33.0, + 39.335 + ] + }, + { + "id": 1245, + "relativePosition": [ + 21.0, + 31.0, + 34.23790008544922 + ] + }, + { + "id": 1246, + "relativePosition": [ + 21.0, + 28.0, + 33.878500061035155 + ] + }, + { + "id": 1247, + "relativePosition": [ + 31.0, + 20.102100219726562, + 29.0 + ] + }, + { + "id": 1248, + "relativePosition": [ + 29.0, + 20.043800048828125, + 30.0 + ] + }, + { + "id": 1249, + "relativePosition": [ + 37.0, + 24.0, + 26.121499938964845 + ] + }, + { + "id": 1250, + "relativePosition": [ + 38.432100219726564, + 28.0, + 25.0 + ] + }, + { + "id": 1251, + "relativePosition": [ + 38.12150024414063, + 27.0, + 25.0 + ] + }, + { + "id": 1252, + "relativePosition": [ + 21.0, + 28.276799926757814, + 34.0 + ] + }, + { + "id": 1253, + "relativePosition": [ + 23.0, + 23.140900268554688, + 32.0 + ] + }, + { + "id": 1254, + "relativePosition": [ + 34.0, + 21.063200073242186, + 28.0 + ] + }, + { + "id": 1255, + "relativePosition": [ + 37.0, + 23.529099731445314, + 27.0 + ] + }, + { + "id": 1256, + "relativePosition": [ + 38.606799926757816, + 29.0, + 25.0 + ] + }, + { + "id": 1257, + "relativePosition": [ + 30.0, + 35.0, + 38.665 + ] + }, + { + "id": 1258, + "relativePosition": [ + 25.76209991455078, + 21.0, + 31.0 + ] + }, + { + "id": 1259, + "relativePosition": [ + 27.0, + 36.0, + 37.41260009765625 + ] + }, + { + "id": 1260, + "relativePosition": [ + 21.878499755859377, + 25.0, + 33.0 + ] + }, + { + "id": 1261, + "relativePosition": [ + 26.0, + 20.897899780273438, + 31.0 + ] + }, + { + "id": 1262, + "relativePosition": [ + 32.0, + 20.25739990234375, + 29.0 + ] + }, + { + "id": 1263, + "relativePosition": [ + 35.0, + 21.567899780273436, + 28.0 + ] + }, + { + "id": 1264, + "relativePosition": [ + 31.0, + 34.23790008544922, + 39.0 + ] + }, + { + "id": 1265, + "relativePosition": [ + 24.0, + 35.0, + 36.23789978027344 + ] + }, + { + "id": 1266, + "relativePosition": [ + 22.0, + 33.0, + 35.199099731445315 + ] + }, + { + "id": 1267, + "relativePosition": [ + 21.393200073242188, + 31.0, + 35.0 + ] + }, + { + "id": 1268, + "relativePosition": [ + 36.470900268554686, + 23.0, + 27.0 + ] + }, + { + "id": 1269, + "relativePosition": [ + 31.0, + 31.0, + 39.897899780273434 + ] + }, + { + "id": 1270, + "relativePosition": [ + 25.0, + 35.102099914550784, + 37.0 + ] + }, + { + "id": 1271, + "relativePosition": [ + 21.0, + 27.0, + 33.16029998779297 + ] + }, + { + "id": 1272, + "relativePosition": [ + 31.723200073242186, + 34.0, + 39.0 + ] + }, + { + "id": 1273, + "relativePosition": [ + 35.64559997558594, + 22.0, + 28.0 + ] + }, + { + "id": 1274, + "relativePosition": [ + 24.89790008544922, + 35.0, + 37.0 + ] + }, + { + "id": 1275, + "relativePosition": [ + 22.0, + 24.800900268554688, + 33.0 + ] + }, + { + "id": 1276, + "relativePosition": [ + 24.0, + 22.25739990234375, + 32.0 + ] + }, + { + "id": 1277, + "relativePosition": [ + 23.08260009765625, + 34.0, + 36.0 + ] + }, + { + "id": 1278, + "relativePosition": [ + 23.0, + 33.878500061035155, + 36.0 + ] + }, + { + "id": 1279, + "relativePosition": [ + 22.58739990234375, + 33.0, + 36.0 + ] + }, + { + "id": 1280, + "relativePosition": [ + 38.23789978027344, + 26.0, + 26.0 + ] + }, + { + "id": 1281, + "relativePosition": [ + 38.665, + 27.0, + 26.0 + ] + }, + { + "id": 1282, + "relativePosition": [ + 21.0, + 30.0, + 34.35440002441406 + ] + }, + { + "id": 1283, + "relativePosition": [ + 33.0, + 20.50969970703125, + 29.0 + ] + }, + { + "id": 1284, + "relativePosition": [ + 29.0, + 35.91739990234375, + 38.0 + ] + }, + { + "id": 1285, + "relativePosition": [ + 23.140900268554688, + 23.0, + 32.0 + ] + }, + { + "id": 1286, + "relativePosition": [ + 27.0, + 20.50969970703125, + 31.0 + ] + }, + { + "id": 1287, + "relativePosition": [ + 30.0, + 20.0, + 30.0 + ] + }, + { + "id": 1288, + "relativePosition": [ + 37.41260009765625, + 24.0, + 27.0 + ] + }, + { + "id": 1289, + "relativePosition": [ + 29.0, + 35.0, + 38.606799926757816 + ] + }, + { + "id": 1290, + "relativePosition": [ + 26.0, + 35.91739990234375, + 37.0 + ] + }, + { + "id": 1291, + "relativePosition": [ + 31.0, + 30.0, + 39.956199951171875 + ] + }, + { + "id": 1292, + "relativePosition": [ + 24.354400024414062, + 22.0, + 32.0 + ] + }, + { + "id": 1293, + "relativePosition": [ + 38.0, + 25.0, + 26.684400024414064 + ] + }, + { + "id": 1294, + "relativePosition": [ + 38.936799926757814, + 28.0, + 26.0 + ] + }, + { + "id": 1295, + "relativePosition": [ + 22.0, + 32.0, + 35.64559997558594 + ] + }, + { + "id": 1296, + "relativePosition": [ + 21.335, + 27.0, + 34.0 + ] + }, + { + "id": 1297, + "relativePosition": [ + 22.58739990234375, + 24.0, + 33.0 + ] + }, + { + "id": 1298, + "relativePosition": [ + 21.0, + 29.0, + 34.23790008544922 + ] + }, + { + "id": 1299, + "relativePosition": [ + 36.0, + 22.25739990234375, + 28.0 + ] + }, + { + "id": 1300, + "relativePosition": [ + 21.335, + 30.0, + 35.0 + ] + }, + { + "id": 1301, + "relativePosition": [ + 23.0, + 23.529099731445314, + 33.0 + ] + }, + { + "id": 1302, + "relativePosition": [ + 25.0, + 21.567899780273436, + 32.0 + ] + }, + { + "id": 1303, + "relativePosition": [ + 34.0, + 21.0, + 28.276799926757814 + ] + }, + { + "id": 1304, + "relativePosition": [ + 38.0, + 24.800900268554688, + 27.0 + ] + }, + { + "id": 1305, + "relativePosition": [ + 24.0, + 34.0, + 36.936799926757814 + ] + }, + { + "id": 1306, + "relativePosition": [ + 21.063200073242186, + 28.0, + 34.0 + ] + }, + { + "id": 1307, + "relativePosition": [ + 21.762100219726562, + 26.0, + 34.0 + ] + }, + { + "id": 1308, + "relativePosition": [ + 31.0, + 20.043800048828125, + 30.0 + ] + }, + { + "id": 1309, + "relativePosition": [ + 28.0, + 20.25739990234375, + 31.0 + ] + }, + { + "id": 1310, + "relativePosition": [ + 31.0, + 34.0, + 39.102100219726566 + ] + }, + { + "id": 1311, + "relativePosition": [ + 28.0, + 35.665, + 38.0 + ] + }, + { + "id": 1312, + "relativePosition": [ + 27.0, + 35.199099731445315, + 38.0 + ] + }, + { + "id": 1313, + "relativePosition": [ + 39.0, + 29.0, + 25.76209991455078 + ] + }, + { + "id": 1314, + "relativePosition": [ + 32.0, + 20.199099731445312, + 30.0 + ] + }, + { + "id": 1315, + "relativePosition": [ + 38.665, + 26.0, + 27.0 + ] + }, + { + "id": 1316, + "relativePosition": [ + 26.0, + 35.0, + 37.68440002441406 + ] + }, + { + "id": 1317, + "relativePosition": [ + 21.393200073242188, + 29.0, + 35.0 + ] + }, + { + "id": 1318, + "relativePosition": [ + 22.0, + 25.0, + 33.31559997558594 + ] + }, + { + "id": 1319, + "relativePosition": [ + 39.0, + 28.276799926757814, + 26.0 + ] + }, + { + "id": 1320, + "relativePosition": [ + 22.0, + 25.529100036621095, + 34.0 + ] + }, + { + "id": 1321, + "relativePosition": [ + 29.0, + 20.102100219726562, + 31.0 + ] + }, + { + "id": 1322, + "relativePosition": [ + 34.0, + 20.897899780273438, + 29.0 + ] + }, + { + "id": 1323, + "relativePosition": [ + 25.0, + 35.0, + 37.063200073242186 + ] + }, + { + "id": 1324, + "relativePosition": [ + 23.0, + 33.0, + 36.470900268554686 + ] + }, + { + "id": 1325, + "relativePosition": [ + 21.567899780273436, + 28.0, + 35.0 + ] + }, + { + "id": 1326, + "relativePosition": [ + 36.85909973144531, + 23.0, + 28.0 + ] + }, + { + "id": 1327, + "relativePosition": [ + 31.0, + 33.0, + 39.49030029296875 + ] + }, + { + "id": 1328, + "relativePosition": [ + 26.0, + 21.0, + 31.723200073242186 + ] + }, + { + "id": 1329, + "relativePosition": [ + 35.0, + 21.393200073242188, + 29.0 + ] + }, + { + "id": 1330, + "relativePosition": [ + 22.25739990234375, + 32.0, + 36.0 + ] + }, + { + "id": 1331, + "relativePosition": [ + 26.684400024414064, + 35.0, + 38.0 + ] + }, + { + "id": 1332, + "relativePosition": [ + 22.0, + 31.0, + 35.91739990234375 + ] + }, + { + "id": 1333, + "relativePosition": [ + 23.529099731445314, + 23.0, + 33.0 + ] + }, + { + "id": 1334, + "relativePosition": [ + 24.0, + 22.58739990234375, + 33.0 + ] + }, + { + "id": 1335, + "relativePosition": [ + 38.12150024414063, + 25.0, + 27.0 + ] + }, + { + "id": 1336, + "relativePosition": [ + 28.0, + 35.0, + 38.432100219726564 + ] + }, + { + "id": 1337, + "relativePosition": [ + 33.0, + 20.470900268554686, + 30.0 + ] + }, + { + "id": 1338, + "relativePosition": [ + 34.23790008544922, + 21.0, + 29.0 + ] + }, + { + "id": 1339, + "relativePosition": [ + 37.0, + 23.140900268554688, + 28.0 + ] + }, + { + "id": 1340, + "relativePosition": [ + 39.0, + 27.0, + 26.839700012207032 + ] + }, + { + "id": 1341, + "relativePosition": [ + 23.529099731445314, + 33.0, + 37.0 + ] + }, + { + "id": 1342, + "relativePosition": [ + 37.74260009765625, + 24.0, + 28.0 + ] + }, + { + "id": 1343, + "relativePosition": [ + 39.0, + 26.839700012207032, + 27.0 + ] + }, + { + "id": 1344, + "relativePosition": [ + 30.0, + 34.35440002441406, + 39.0 + ] + }, + { + "id": 1345, + "relativePosition": [ + 24.08260009765625, + 34.0, + 37.0 + ] + }, + { + "id": 1346, + "relativePosition": [ + 23.0, + 24.0, + 33.878500061035155 + ] + }, + { + "id": 1347, + "relativePosition": [ + 26.0, + 21.063200073242186, + 32.0 + ] + }, + { + "id": 1348, + "relativePosition": [ + 31.0, + 32.0, + 39.74260009765625 + ] + }, + { + "id": 1349, + "relativePosition": [ + 22.0, + 30.0, + 36.0 + ] + }, + { + "id": 1350, + "relativePosition": [ + 23.0, + 24.08260009765625, + 34.0 + ] + }, + { + "id": 1351, + "relativePosition": [ + 27.0, + 20.665, + 32.0 + ] + }, + { + "id": 1352, + "relativePosition": [ + 30.0, + 20.043800048828125, + 31.0 + ] + }, + { + "id": 1353, + "relativePosition": [ + 24.0, + 33.878500061035155, + 37.0 + ] + }, + { + "id": 1354, + "relativePosition": [ + 21.878499755859377, + 27.0, + 35.0 + ] + }, + { + "id": 1355, + "relativePosition": [ + 26.121499938964845, + 21.0, + 32.0 + ] + }, + { + "id": 1356, + "relativePosition": [ + 23.0, + 32.0, + 36.85909973144531 + ] + }, + { + "id": 1357, + "relativePosition": [ + 39.0, + 28.0, + 26.121499938964845 + ] + }, + { + "id": 1358, + "relativePosition": [ + 27.0, + 35.0, + 38.12150024414063 + ] + }, + { + "id": 1359, + "relativePosition": [ + 22.315599975585936, + 25.0, + 34.0 + ] + }, + { + "id": 1360, + "relativePosition": [ + 34.0, + 20.83969970703125, + 30.0 + ] + }, + { + "id": 1361, + "relativePosition": [ + 35.91739990234375, + 22.0, + 29.0 + ] + }, + { + "id": 1362, + "relativePosition": [ + 38.0, + 24.354400024414062, + 28.0 + ] + }, + { + "id": 1363, + "relativePosition": [ + 30.0, + 31.0, + 39.956199951171875 + ] + }, + { + "id": 1364, + "relativePosition": [ + 25.0, + 21.878499755859377, + 33.0 + ] + }, + { + "id": 1365, + "relativePosition": [ + 22.0, + 26.0, + 34.470899963378905 + ] + }, + { + "id": 1366, + "relativePosition": [ + 30.0, + 34.0, + 39.16030029296875 + ] + }, + { + "id": 1367, + "relativePosition": [ + 29.0, + 34.23790008544922, + 39.0 + ] + }, + { + "id": 1368, + "relativePosition": [ + 22.0, + 29.0, + 35.91739990234375 + ] + }, + { + "id": 1369, + "relativePosition": [ + 22.0, + 26.684400024414064, + 35.0 + ] + }, + { + "id": 1370, + "relativePosition": [ + 28.0, + 20.41260009765625, + 32.0 + ] + }, + { + "id": 1371, + "relativePosition": [ + 31.0, + 20.102100219726562, + 31.0 + ] + }, + { + "id": 1372, + "relativePosition": [ + 37.0, + 23.0, + 28.587400054931642 + ] + }, + { + "id": 1373, + "relativePosition": [ + 25.0, + 34.0, + 37.68440002441406 + ] + }, + { + "id": 1374, + "relativePosition": [ + 36.0, + 22.063200073242186, + 29.0 + ] + }, + { + "id": 1375, + "relativePosition": [ + 26.0, + 34.470899963378905, + 38.0 + ] + }, + { + "id": 1376, + "relativePosition": [ + 34.35440002441406, + 21.0, + 30.0 + ] + }, + { + "id": 1377, + "relativePosition": [ + 37.0, + 22.936799926757814, + 29.0 + ] + }, + { + "id": 1378, + "relativePosition": [ + 39.102100219726566, + 29.0, + 26.0 + ] + }, + { + "id": 1379, + "relativePosition": [ + 24.800900268554688, + 22.0, + 33.0 + ] + }, + { + "id": 1380, + "relativePosition": [ + 26.0, + 21.335, + 33.0 + ] + }, + { + "id": 1381, + "relativePosition": [ + 32.0, + 20.25739990234375, + 31.0 + ] + }, + { + "id": 1382, + "relativePosition": [ + 30.0, + 30.0, + 40.0 + ] + }, + { + "id": 1383, + "relativePosition": [ + 22.063200073242186, + 31.0, + 36.0 + ] + }, + { + "id": 1384, + "relativePosition": [ + 22.936799926757814, + 31.0, + 37.0 + ] + }, + { + "id": 1385, + "relativePosition": [ + 39.335, + 28.0, + 27.0 + ] + }, + { + "id": 1386, + "relativePosition": [ + 25.529100036621095, + 34.0, + 38.0 + ] + }, + { + "id": 1387, + "relativePosition": [ + 35.0, + 21.335, + 30.0 + ] + }, + { + "id": 1388, + "relativePosition": [ + 23.0, + 31.412599945068358, + 37.0 + ] + }, + { + "id": 1389, + "relativePosition": [ + 29.0, + 20.25739990234375, + 32.0 + ] + }, + { + "id": 1390, + "relativePosition": [ + 39.49030029296875, + 29.0, + 27.0 + ] + }, + { + "id": 1391, + "relativePosition": [ + 22.0, + 28.0, + 35.64559997558594 + ] + }, + { + "id": 1392, + "relativePosition": [ + 22.936799926757814, + 25.0, + 35.0 + ] + }, + { + "id": 1393, + "relativePosition": [ + 24.0, + 23.0, + 33.878500061035155 + ] + }, + { + "id": 1394, + "relativePosition": [ + 23.08260009765625, + 24.0, + 34.0 + ] + }, + { + "id": 1395, + "relativePosition": [ + 28.0, + 34.0, + 38.936799926757814 + ] + }, + { + "id": 1396, + "relativePosition": [ + 38.936799926757814, + 26.0, + 28.0 + ] + }, + { + "id": 1397, + "relativePosition": [ + 39.063200073242186, + 27.0, + 27.0 + ] + }, + { + "id": 1398, + "relativePosition": [ + 27.0, + 34.0, + 38.665 + ] + }, + { + "id": 1399, + "relativePosition": [ + 26.0, + 34.0, + 38.23789978027344 + ] + }, + { + "id": 1400, + "relativePosition": [ + 30.0, + 33.0, + 39.548499755859375 + ] + }, + { + "id": 1401, + "relativePosition": [ + 28.276799926757814, + 34.0, + 39.0 + ] + }, + { + "id": 1402, + "relativePosition": [ + 36.0, + 22.0, + 30.0 + ] + }, + { + "id": 1403, + "relativePosition": [ + 37.936799926757814, + 24.0, + 29.0 + ] + }, + { + "id": 1404, + "relativePosition": [ + 38.432100219726564, + 25.0, + 28.0 + ] + }, + { + "id": 1405, + "relativePosition": [ + 24.0, + 33.0, + 37.41260009765625 + ] + }, + { + "id": 1406, + "relativePosition": [ + 39.0, + 26.121499938964845, + 28.0 + ] + }, + { + "id": 1407, + "relativePosition": [ + 22.315599975585936, + 26.0, + 35.0 + ] + }, + { + "id": 1408, + "relativePosition": [ + 24.0, + 23.08260009765625, + 34.0 + ] + }, + { + "id": 1409, + "relativePosition": [ + 27.0, + 20.936799926757814, + 33.0 + ] + }, + { + "id": 1410, + "relativePosition": [ + 30.0, + 20.199099731445312, + 32.0 + ] + }, + { + "id": 1411, + "relativePosition": [ + 22.0, + 27.0, + 35.199099731445315 + ] + }, + { + "id": 1412, + "relativePosition": [ + 25.0, + 22.0, + 33.31559997558594 + ] + }, + { + "id": 1413, + "relativePosition": [ + 33.0, + 20.50969970703125, + 31.0 + ] + }, + { + "id": 1414, + "relativePosition": [ + 25.0, + 33.31559997558594, + 38.0 + ] + }, + { + "id": 1415, + "relativePosition": [ + 23.140900268554688, + 32.0, + 37.0 + ] + }, + { + "id": 1416, + "relativePosition": [ + 37.063200073242186, + 23.0, + 29.0 + ] + }, + { + "id": 1417, + "relativePosition": [ + 23.0, + 24.89790008544922, + 35.0 + ] + }, + { + "id": 1418, + "relativePosition": [ + 22.859099731445312, + 30.0, + 37.0 + ] + }, + { + "id": 1419, + "relativePosition": [ + 39.335, + 27.0, + 28.0 + ] + }, + { + "id": 1420, + "relativePosition": [ + 25.0, + 22.315599975585936, + 34.0 + ] + }, + { + "id": 1421, + "relativePosition": [ + 26.839700012207032, + 21.0, + 33.0 + ] + }, + { + "id": 1422, + "relativePosition": [ + 34.0, + 20.897899780273438, + 31.0 + ] + }, + { + "id": 1423, + "relativePosition": [ + 29.0, + 34.0, + 39.102100219726566 + ] + }, + { + "id": 1424, + "relativePosition": [ + 24.08260009765625, + 23.0, + 34.0 + ] + }, + { + "id": 1425, + "relativePosition": [ + 30.0, + 32.0, + 39.800900268554685 + ] + }, + { + "id": 1426, + "relativePosition": [ + 22.063200073242186, + 29.0, + 36.0 + ] + }, + { + "id": 1427, + "relativePosition": [ + 23.762100219726562, + 24.0, + 35.0 + ] + }, + { + "id": 1428, + "relativePosition": [ + 24.800900268554688, + 33.0, + 38.0 + ] + }, + { + "id": 1429, + "relativePosition": [ + 24.0, + 32.0, + 37.74260009765625 + ] + }, + { + "id": 1430, + "relativePosition": [ + 28.0, + 20.665, + 33.0 + ] + }, + { + "id": 1431, + "relativePosition": [ + 38.0, + 24.08260009765625, + 29.0 + ] + }, + { + "id": 1432, + "relativePosition": [ + 39.58739990234375, + 28.0, + 28.0 + ] + }, + { + "id": 1433, + "relativePosition": [ + 31.0, + 20.25739990234375, + 32.0 + ] + }, + { + "id": 1434, + "relativePosition": [ + 37.0, + 22.859099731445312, + 30.0 + ] + }, + { + "id": 1435, + "relativePosition": [ + 38.606799926757816, + 25.0, + 29.0 + ] + }, + { + "id": 1436, + "relativePosition": [ + 34.23790008544922, + 21.0, + 31.0 + ] + }, + { + "id": 1437, + "relativePosition": [ + 25.529100036621095, + 22.0, + 34.0 + ] + }, + { + "id": 1438, + "relativePosition": [ + 22.25739990234375, + 28.0, + 36.0 + ] + }, + { + "id": 1439, + "relativePosition": [ + 23.0, + 26.0, + 35.91739990234375 + ] + }, + { + "id": 1440, + "relativePosition": [ + 26.0, + 21.762100219726562, + 34.0 + ] + }, + { + "id": 1441, + "relativePosition": [ + 29.0, + 33.0, + 39.49030029296875 + ] + }, + { + "id": 1442, + "relativePosition": [ + 23.0, + 26.121499938964845, + 36.0 + ] + }, + { + "id": 1443, + "relativePosition": [ + 22.936799926757814, + 29.0, + 37.0 + ] + }, + { + "id": 1444, + "relativePosition": [ + 22.58739990234375, + 27.0, + 36.0 + ] + }, + { + "id": 1445, + "relativePosition": [ + 24.0, + 23.762100219726562, + 35.0 + ] + }, + { + "id": 1446, + "relativePosition": [ + 29.0, + 20.50969970703125, + 33.0 + ] + }, + { + "id": 1447, + "relativePosition": [ + 35.0, + 21.393200073242188, + 31.0 + ] + }, + { + "id": 1448, + "relativePosition": [ + 37.14090026855469, + 23.0, + 30.0 + ] + }, + { + "id": 1449, + "relativePosition": [ + 39.0, + 26.0, + 28.276799926757814 + ] + }, + { + "id": 1450, + "relativePosition": [ + 25.0, + 33.0, + 38.12150024414063 + ] + }, + { + "id": 1451, + "relativePosition": [ + 32.0, + 20.41260009765625, + 32.0 + ] + }, + { + "id": 1452, + "relativePosition": [ + 26.0, + 33.0, + 38.665 + ] + }, + { + "id": 1453, + "relativePosition": [ + 23.0, + 31.0, + 37.063200073242186 + ] + }, + { + "id": 1454, + "relativePosition": [ + 23.0, + 28.0, + 36.85909973144531 + ] + }, + { + "id": 1455, + "relativePosition": [ + 27.0, + 21.0, + 33.16029998779297 + ] + }, + { + "id": 1456, + "relativePosition": [ + 39.74260009765625, + 29.0, + 28.0 + ] + }, + { + "id": 1457, + "relativePosition": [ + 23.0, + 25.0, + 35.102099914550784 + ] + }, + { + "id": 1458, + "relativePosition": [ + 38.0, + 24.0, + 30.0 + ] + }, + { + "id": 1459, + "relativePosition": [ + 39.0, + 25.76209991455078, + 29.0 + ] + }, + { + "id": 1460, + "relativePosition": [ + 24.335, + 32.0, + 38.0 + ] + }, + { + "id": 1461, + "relativePosition": [ + 35.91739990234375, + 22.0, + 31.0 + ] + }, + { + "id": 1462, + "relativePosition": [ + 28.0, + 33.878500061035155, + 39.0 + ] + }, + { + "id": 1463, + "relativePosition": [ + 23.0, + 30.0, + 37.14090026855469 + ] + }, + { + "id": 1464, + "relativePosition": [ + 23.0, + 28.587400054931642, + 37.0 + ] + }, + { + "id": 1465, + "relativePosition": [ + 24.89790008544922, + 23.0, + 35.0 + ] + }, + { + "id": 1466, + "relativePosition": [ + 27.0, + 21.335, + 34.0 + ] + }, + { + "id": 1467, + "relativePosition": [ + 30.0, + 20.470900268554686, + 33.0 + ] + }, + { + "id": 1468, + "relativePosition": [ + 33.0, + 20.665, + 32.0 + ] + }, + { + "id": 1469, + "relativePosition": [ + 28.0, + 33.0, + 39.335 + ] + }, + { + "id": 1470, + "relativePosition": [ + 26.839700012207032, + 33.0, + 39.0 + ] + }, + { + "id": 1471, + "relativePosition": [ + 39.49030029296875, + 27.0, + 29.0 + ] + }, + { + "id": 1472, + "relativePosition": [ + 27.0, + 33.16029998779297, + 39.0 + ] + }, + { + "id": 1473, + "relativePosition": [ + 24.0, + 31.0, + 37.936799926757814 + ] + }, + { + "id": 1474, + "relativePosition": [ + 25.0, + 22.936799926757814, + 35.0 + ] + }, + { + "id": 1475, + "relativePosition": [ + 39.102100219726566, + 26.0, + 29.0 + ] + }, + { + "id": 1476, + "relativePosition": [ + 23.0, + 27.0, + 36.470900268554686 + ] + }, + { + "id": 1477, + "relativePosition": [ + 28.0, + 21.0, + 33.878500061035155 + ] + }, + { + "id": 1478, + "relativePosition": [ + 31.0, + 20.50969970703125, + 33.0 + ] + }, + { + "id": 1479, + "relativePosition": [ + 24.0, + 24.0, + 35.29619995117187 + ] + }, + { + "id": 1480, + "relativePosition": [ + 26.0, + 22.0, + 34.470899963378905 + ] + }, + { + "id": 1481, + "relativePosition": [ + 34.0, + 21.0, + 31.723200073242186 + ] + }, + { + "id": 1482, + "relativePosition": [ + 38.665, + 25.0, + 30.0 + ] + }, + { + "id": 1483, + "relativePosition": [ + 26.0, + 22.315599975585936, + 35.0 + ] + }, + { + "id": 1484, + "relativePosition": [ + 39.74260009765625, + 28.0, + 29.0 + ] + }, + { + "id": 1485, + "relativePosition": [ + 37.0, + 22.936799926757814, + 31.0 + ] + }, + { + "id": 1486, + "relativePosition": [ + 36.0, + 22.063200073242186, + 31.0 + ] + }, + { + "id": 1487, + "relativePosition": [ + 25.0, + 32.0, + 38.432100219726564 + ] + }, + { + "id": 1488, + "relativePosition": [ + 24.0, + 24.703800048828125, + 36.0 + ] + }, + { + "id": 1489, + "relativePosition": [ + 28.0, + 21.063200073242186, + 34.0 + ] + }, + { + "id": 1490, + "relativePosition": [ + 23.08260009765625, + 26.0, + 36.0 + ] + }, + { + "id": 1491, + "relativePosition": [ + 32.0, + 20.665, + 33.0 + ] + }, + { + "id": 1492, + "relativePosition": [ + 33.878500061035155, + 21.0, + 32.0 + ] + }, + { + "id": 1493, + "relativePosition": [ + 29.0, + 32.0, + 39.74260009765625 + ] + }, + { + "id": 1494, + "relativePosition": [ + 27.0, + 33.0, + 39.063200073242186 + ] + }, + { + "id": 1495, + "relativePosition": [ + 24.0, + 30.0, + 38.0 + ] + }, + { + "id": 1496, + "relativePosition": [ + 23.762100219726562, + 25.0, + 36.0 + ] + }, + { + "id": 1497, + "relativePosition": [ + 39.0, + 25.645599975585938, + 30.0 + ] + }, + { + "id": 1498, + "relativePosition": [ + 29.0, + 20.897899780273438, + 34.0 + ] + }, + { + "id": 1499, + "relativePosition": [ + 28.276799926757814, + 21.0, + 34.0 + ] + }, + { + "id": 1500, + "relativePosition": [ + 35.0, + 21.567899780273436, + 32.0 + ] + }, + { + "id": 1501, + "relativePosition": [ + 37.063200073242186, + 23.0, + 31.0 + ] + }, + { + "id": 1502, + "relativePosition": [ + 39.897899780273434, + 29.0, + 29.0 + ] + }, + { + "id": 1503, + "relativePosition": [ + 24.08260009765625, + 31.0, + 38.0 + ] + }, + { + "id": 1504, + "relativePosition": [ + 25.0, + 23.0, + 35.102099914550784 + ] + }, + { + "id": 1505, + "relativePosition": [ + 34.0, + 21.063200073242186, + 32.0 + ] + }, + { + "id": 1506, + "relativePosition": [ + 37.936799926757814, + 24.0, + 31.0 + ] + }, + { + "id": 1507, + "relativePosition": [ + 39.16030029296875, + 26.0, + 30.0 + ] + }, + { + "id": 1508, + "relativePosition": [ + 23.0, + 29.0, + 37.063200073242186 + ] + }, + { + "id": 1509, + "relativePosition": [ + 25.0, + 23.762100219726562, + 36.0 + ] + }, + { + "id": 1510, + "relativePosition": [ + 26.684400024414064, + 22.0, + 35.0 + ] + }, + { + "id": 1511, + "relativePosition": [ + 33.0, + 20.936799926757814, + 33.0 + ] + }, + { + "id": 1512, + "relativePosition": [ + 24.703800048828125, + 24.0, + 36.0 + ] + }, + { + "id": 1513, + "relativePosition": [ + 27.0, + 21.878499755859377, + 35.0 + ] + }, + { + "id": 1514, + "relativePosition": [ + 26.0, + 32.0, + 38.936799926757814 + ] + }, + { + "id": 1515, + "relativePosition": [ + 24.0, + 29.0, + 37.936799926757814 + ] + }, + { + "id": 1516, + "relativePosition": [ + 30.0, + 20.83969970703125, + 34.0 + ] + }, + { + "id": 1517, + "relativePosition": [ + 35.64559997558594, + 22.0, + 32.0 + ] + }, + { + "id": 1518, + "relativePosition": [ + 39.529099731445314, + 27.0, + 30.0 + ] + }, + { + "id": 1519, + "relativePosition": [ + 23.140900268554688, + 28.0, + 37.0 + ] + }, + { + "id": 1520, + "relativePosition": [ + 23.529099731445314, + 27.0, + 37.0 + ] + }, + { + "id": 1521, + "relativePosition": [ + 24.0, + 25.0, + 36.23789978027344 + ] + }, + { + "id": 1522, + "relativePosition": [ + 26.121499938964845, + 32.0, + 39.0 + ] + }, + { + "id": 1523, + "relativePosition": [ + 25.0, + 31.0, + 38.606799926757816 + ] + }, + { + "id": 1524, + "relativePosition": [ + 28.0, + 21.567899780273436, + 35.0 + ] + }, + { + "id": 1525, + "relativePosition": [ + 31.0, + 20.897899780273438, + 34.0 + ] + }, + { + "id": 1526, + "relativePosition": [ + 33.16029998779297, + 21.0, + 33.0 + ] + }, + { + "id": 1527, + "relativePosition": [ + 24.0, + 26.0, + 36.936799926757814 + ] + }, + { + "id": 1528, + "relativePosition": [ + 24.0, + 28.0, + 37.74260009765625 + ] + }, + { + "id": 1529, + "relativePosition": [ + 24.0, + 26.121499938964845, + 37.0 + ] + }, + { + "id": 1530, + "relativePosition": [ + 36.0, + 22.25739990234375, + 32.0 + ] + }, + { + "id": 1531, + "relativePosition": [ + 38.606799926757816, + 25.0, + 31.0 + ] + }, + { + "id": 1532, + "relativePosition": [ + 28.0, + 32.0, + 39.58739990234375 + ] + }, + { + "id": 1533, + "relativePosition": [ + 27.0, + 32.0, + 39.335 + ] + }, + { + "id": 1534, + "relativePosition": [ + 34.0, + 21.335, + 33.0 + ] + }, + { + "id": 1535, + "relativePosition": [ + 29.0, + 21.0, + 34.23790008544922 + ] + }, + { + "id": 1536, + "relativePosition": [ + 37.0, + 23.0, + 31.412599945068358 + ] + }, + { + "id": 1537, + "relativePosition": [ + 39.800900268554685, + 28.0, + 30.0 + ] + }, + { + "id": 1538, + "relativePosition": [ + 26.0, + 23.0, + 35.91739990234375 + ] + }, + { + "id": 1539, + "relativePosition": [ + 38.0, + 24.08260009765625, + 31.0 + ] + }, + { + "id": 1540, + "relativePosition": [ + 39.0, + 25.76209991455078, + 31.0 + ] + }, + { + "id": 1541, + "relativePosition": [ + 29.0, + 21.393200073242188, + 35.0 + ] + }, + { + "id": 1542, + "relativePosition": [ + 35.0, + 21.878499755859377, + 33.0 + ] + }, + { + "id": 1543, + "relativePosition": [ + 24.0, + 27.0, + 37.41260009765625 + ] + }, + { + "id": 1544, + "relativePosition": [ + 36.85909973144531, + 23.0, + 32.0 + ] + }, + { + "id": 1545, + "relativePosition": [ + 39.956199951171875, + 29.0, + 30.0 + ] + }, + { + "id": 1546, + "relativePosition": [ + 25.76209991455078, + 31.0, + 39.0 + ] + }, + { + "id": 1547, + "relativePosition": [ + 32.0, + 21.0, + 33.878500061035155 + ] + }, + { + "id": 1548, + "relativePosition": [ + 29.0, + 31.0, + 39.897899780273434 + ] + }, + { + "id": 1549, + "relativePosition": [ + 25.0, + 30.0, + 38.665 + ] + }, + { + "id": 1550, + "relativePosition": [ + 25.0, + 24.0, + 36.23789978027344 + ] + }, + { + "id": 1551, + "relativePosition": [ + 27.0, + 22.0, + 35.199099731445315 + ] + }, + { + "id": 1552, + "relativePosition": [ + 24.89790008544922, + 25.0, + 37.0 + ] + }, + { + "id": 1553, + "relativePosition": [ + 31.723200073242186, + 21.0, + 34.0 + ] + }, + { + "id": 1554, + "relativePosition": [ + 30.0, + 21.0, + 34.35440002441406 + ] + }, + { + "id": 1555, + "relativePosition": [ + 33.0, + 21.0, + 33.16029998779297 + ] + }, + { + "id": 1556, + "relativePosition": [ + 26.0, + 31.723200073242186, + 39.0 + ] + }, + { + "id": 1557, + "relativePosition": [ + 35.199099731445315, + 22.0, + 33.0 + ] + }, + { + "id": 1558, + "relativePosition": [ + 37.74260009765625, + 24.0, + 32.0 + ] + }, + { + "id": 1559, + "relativePosition": [ + 25.0, + 24.89790008544922, + 37.0 + ] + }, + { + "id": 1560, + "relativePosition": [ + 26.0, + 23.08260009765625, + 36.0 + ] + }, + { + "id": 1561, + "relativePosition": [ + 27.0, + 22.58739990234375, + 36.0 + ] + }, + { + "id": 1562, + "relativePosition": [ + 36.0, + 22.58739990234375, + 33.0 + ] + }, + { + "id": 1563, + "relativePosition": [ + 39.102100219726566, + 26.0, + 31.0 + ] + }, + { + "id": 1564, + "relativePosition": [ + 26.121499938964845, + 23.0, + 36.0 + ] + }, + { + "id": 1565, + "relativePosition": [ + 38.0, + 24.354400024414062, + 32.0 + ] + }, + { + "id": 1566, + "relativePosition": [ + 24.08260009765625, + 29.0, + 38.0 + ] + }, + { + "id": 1567, + "relativePosition": [ + 39.49030029296875, + 27.0, + 31.0 + ] + }, + { + "id": 1568, + "relativePosition": [ + 24.08260009765625, + 26.0, + 37.0 + ] + }, + { + "id": 1569, + "relativePosition": [ + 37.0, + 23.140900268554688, + 32.0 + ] + }, + { + "id": 1570, + "relativePosition": [ + 28.0, + 22.0, + 35.665 + ] + }, + { + "id": 1571, + "relativePosition": [ + 25.0, + 29.0, + 38.606799926757816 + ] + }, + { + "id": 1572, + "relativePosition": [ + 31.0, + 21.0, + 34.23790008544922 + ] + }, + { + "id": 1573, + "relativePosition": [ + 33.0, + 21.335, + 34.0 + ] + }, + { + "id": 1574, + "relativePosition": [ + 38.432100219726564, + 25.0, + 32.0 + ] + }, + { + "id": 1575, + "relativePosition": [ + 39.74260009765625, + 28.0, + 31.0 + ] + }, + { + "id": 1576, + "relativePosition": [ + 30.0, + 21.335, + 35.0 + ] + }, + { + "id": 1577, + "relativePosition": [ + 34.0, + 21.762100219726562, + 34.0 + ] + }, + { + "id": 1578, + "relativePosition": [ + 36.470900268554686, + 23.0, + 33.0 + ] + }, + { + "id": 1579, + "relativePosition": [ + 25.0, + 26.0, + 37.68440002441406 + ] + }, + { + "id": 1580, + "relativePosition": [ + 26.0, + 24.0, + 36.936799926757814 + ] + }, + { + "id": 1581, + "relativePosition": [ + 24.335, + 28.0, + 38.0 + ] + }, + { + "id": 1582, + "relativePosition": [ + 32.0, + 21.063200073242186, + 34.0 + ] + }, + { + "id": 1583, + "relativePosition": [ + 25.0, + 26.684400024414064, + 38.0 + ] + }, + { + "id": 1584, + "relativePosition": [ + 31.0, + 21.393200073242188, + 35.0 + ] + }, + { + "id": 1585, + "relativePosition": [ + 26.0, + 31.0, + 39.102100219726566 + ] + }, + { + "id": 1586, + "relativePosition": [ + 24.800900268554688, + 27.0, + 38.0 + ] + }, + { + "id": 1587, + "relativePosition": [ + 35.0, + 22.0, + 33.31559997558594 + ] + }, + { + "id": 1588, + "relativePosition": [ + 39.897899780273434, + 29.0, + 31.0 + ] + }, + { + "id": 1589, + "relativePosition": [ + 25.0, + 25.0, + 37.063200073242186 + ] + }, + { + "id": 1590, + "relativePosition": [ + 39.0, + 26.0, + 31.723200073242186 + ] + }, + { + "id": 1591, + "relativePosition": [ + 27.0, + 31.0, + 39.49030029296875 + ] + }, + { + "id": 1592, + "relativePosition": [ + 27.0, + 23.0, + 36.470900268554686 + ] + }, + { + "id": 1593, + "relativePosition": [ + 25.0, + 28.0, + 38.432100219726564 + ] + }, + { + "id": 1594, + "relativePosition": [ + 28.0, + 22.25739990234375, + 36.0 + ] + }, + { + "id": 1595, + "relativePosition": [ + 29.0, + 22.0, + 35.91739990234375 + ] + }, + { + "id": 1596, + "relativePosition": [ + 32.0, + 21.567899780273436, + 35.0 + ] + }, + { + "id": 1597, + "relativePosition": [ + 37.41260009765625, + 24.0, + 33.0 + ] + }, + { + "id": 1598, + "relativePosition": [ + 28.0, + 31.0, + 39.74260009765625 + ] + }, + { + "id": 1599, + "relativePosition": [ + 34.470899963378905, + 22.0, + 34.0 + ] + }, + { + "id": 1600, + "relativePosition": [ + 25.645599975585938, + 30.0, + 39.0 + ] + }, + { + "id": 1601, + "relativePosition": [ + 26.0, + 24.08260009765625, + 37.0 + ] + }, + { + "id": 1602, + "relativePosition": [ + 36.0, + 23.0, + 33.878500061035155 + ] + }, + { + "id": 1603, + "relativePosition": [ + 37.0, + 23.529099731445314, + 33.0 + ] + }, + { + "id": 1604, + "relativePosition": [ + 38.936799926757814, + 26.0, + 32.0 + ] + }, + { + "id": 1605, + "relativePosition": [ + 26.121499938964845, + 24.0, + 37.0 + ] + }, + { + "id": 1606, + "relativePosition": [ + 30.0, + 22.0, + 36.0 + ] + }, + { + "id": 1607, + "relativePosition": [ + 33.0, + 21.878499755859377, + 35.0 + ] + }, + { + "id": 1608, + "relativePosition": [ + 35.91739990234375, + 23.0, + 34.0 + ] + }, + { + "id": 1609, + "relativePosition": [ + 39.335, + 27.0, + 32.0 + ] + }, + { + "id": 1610, + "relativePosition": [ + 39.0, + 26.121499938964845, + 32.0 + ] + }, + { + "id": 1611, + "relativePosition": [ + 38.0, + 24.800900268554688, + 33.0 + ] + }, + { + "id": 1612, + "relativePosition": [ + 25.0, + 27.0, + 38.12150024414063 + ] + }, + { + "id": 1613, + "relativePosition": [ + 27.0, + 23.529099731445314, + 37.0 + ] + }, + { + "id": 1614, + "relativePosition": [ + 35.0, + 22.315599975585936, + 34.0 + ] + }, + { + "id": 1615, + "relativePosition": [ + 29.0, + 30.0, + 39.956199951171875 + ] + }, + { + "id": 1616, + "relativePosition": [ + 34.0, + 22.0, + 34.470899963378905 + ] + }, + { + "id": 1617, + "relativePosition": [ + 39.58739990234375, + 28.0, + 32.0 + ] + }, + { + "id": 1618, + "relativePosition": [ + 26.0, + 25.0, + 37.68440002441406 + ] + }, + { + "id": 1619, + "relativePosition": [ + 26.0, + 25.529100036621095, + 38.0 + ] + }, + { + "id": 1620, + "relativePosition": [ + 31.0, + 22.0, + 35.91739990234375 + ] + }, + { + "id": 1621, + "relativePosition": [ + 38.12150024414063, + 25.0, + 33.0 + ] + }, + { + "id": 1622, + "relativePosition": [ + 28.0, + 23.0, + 36.85909973144531 + ] + }, + { + "id": 1623, + "relativePosition": [ + 33.31559997558594, + 22.0, + 35.0 + ] + }, + { + "id": 1624, + "relativePosition": [ + 26.0, + 30.0, + 39.16030029296875 + ] + }, + { + "id": 1625, + "relativePosition": [ + 38.665, + 26.0, + 33.0 + ] + }, + { + "id": 1626, + "relativePosition": [ + 25.529100036621095, + 26.0, + 38.0 + ] + }, + { + "id": 1627, + "relativePosition": [ + 37.0, + 24.0, + 33.878500061035155 + ] + }, + { + "id": 1628, + "relativePosition": [ + 36.91739990234375, + 24.0, + 34.0 + ] + }, + { + "id": 1629, + "relativePosition": [ + 25.76209991455078, + 29.0, + 39.0 + ] + }, + { + "id": 1630, + "relativePosition": [ + 29.0, + 22.063200073242186, + 36.0 + ] + }, + { + "id": 1631, + "relativePosition": [ + 39.74260009765625, + 29.0, + 32.0 + ] + }, + { + "id": 1632, + "relativePosition": [ + 32.0, + 22.0, + 35.64559997558594 + ] + }, + { + "id": 1633, + "relativePosition": [ + 27.0, + 24.0, + 37.41260009765625 + ] + }, + { + "id": 1634, + "relativePosition": [ + 36.0, + 23.08260009765625, + 34.0 + ] + }, + { + "id": 1635, + "relativePosition": [ + 26.0, + 28.0, + 38.936799926757814 + ] + }, + { + "id": 1636, + "relativePosition": [ + 35.0, + 22.936799926757814, + 35.0 + ] + }, + { + "id": 1637, + "relativePosition": [ + 26.0, + 28.276799926757814, + 39.0 + ] + }, + { + "id": 1638, + "relativePosition": [ + 29.0, + 22.936799926757814, + 37.0 + ] + }, + { + "id": 1639, + "relativePosition": [ + 27.0, + 30.0, + 39.548499755859375 + ] + }, + { + "id": 1640, + "relativePosition": [ + 28.587400054931642, + 23.0, + 37.0 + ] + }, + { + "id": 1641, + "relativePosition": [ + 27.0, + 24.800900268554688, + 38.0 + ] + }, + { + "id": 1642, + "relativePosition": [ + 26.0, + 27.0, + 38.665 + ] + }, + { + "id": 1643, + "relativePosition": [ + 38.0, + 25.0, + 33.31559997558594 + ] + }, + { + "id": 1644, + "relativePosition": [ + 39.063200073242186, + 27.0, + 33.0 + ] + }, + { + "id": 1645, + "relativePosition": [ + 26.0, + 26.0, + 38.23789978027344 + ] + }, + { + "id": 1646, + "relativePosition": [ + 34.0, + 22.315599975585936, + 35.0 + ] + }, + { + "id": 1647, + "relativePosition": [ + 37.68440002441406, + 25.0, + 34.0 + ] + }, + { + "id": 1648, + "relativePosition": [ + 39.0, + 26.839700012207032, + 33.0 + ] + }, + { + "id": 1649, + "relativePosition": [ + 26.684400024414064, + 25.0, + 38.0 + ] + }, + { + "id": 1650, + "relativePosition": [ + 33.0, + 22.0, + 35.199099731445315 + ] + }, + { + "id": 1651, + "relativePosition": [ + 28.0, + 23.140900268554688, + 37.0 + ] + }, + { + "id": 1652, + "relativePosition": [ + 39.335, + 28.0, + 33.0 + ] + }, + { + "id": 1653, + "relativePosition": [ + 37.0, + 24.08260009765625, + 34.0 + ] + }, + { + "id": 1654, + "relativePosition": [ + 26.0, + 29.0, + 39.102100219726566 + ] + }, + { + "id": 1655, + "relativePosition": [ + 30.0, + 22.859099731445312, + 37.0 + ] + }, + { + "id": 1656, + "relativePosition": [ + 35.102099914550784, + 23.0, + 35.0 + ] + }, + { + "id": 1657, + "relativePosition": [ + 31.0, + 22.063200073242186, + 36.0 + ] + }, + { + "id": 1658, + "relativePosition": [ + 36.0, + 23.762100219726562, + 35.0 + ] + }, + { + "id": 1659, + "relativePosition": [ + 38.23789978027344, + 26.0, + 34.0 + ] + }, + { + "id": 1660, + "relativePosition": [ + 28.0, + 24.0, + 37.74260009765625 + ] + }, + { + "id": 1661, + "relativePosition": [ + 38.0, + 25.529100036621095, + 34.0 + ] + }, + { + "id": 1662, + "relativePosition": [ + 39.49030029296875, + 29.0, + 33.0 + ] + }, + { + "id": 1663, + "relativePosition": [ + 28.0, + 30.0, + 39.800900268554685 + ] + }, + { + "id": 1664, + "relativePosition": [ + 32.0, + 22.25739990234375, + 36.0 + ] + }, + { + "id": 1665, + "relativePosition": [ + 31.0, + 22.936799926757814, + 37.0 + ] + }, + { + "id": 1666, + "relativePosition": [ + 34.0, + 23.0, + 35.91739990234375 + ] + }, + { + "id": 1667, + "relativePosition": [ + 27.0, + 29.0, + 39.49030029296875 + ] + }, + { + "id": 1668, + "relativePosition": [ + 36.23789978027344, + 24.0, + 35.0 + ] + }, + { + "id": 1669, + "relativePosition": [ + 39.0, + 27.0, + 33.16029998779297 + ] + }, + { + "id": 1670, + "relativePosition": [ + 29.0, + 23.0, + 37.063200073242186 + ] + }, + { + "id": 1671, + "relativePosition": [ + 33.0, + 22.58739990234375, + 36.0 + ] + }, + { + "id": 1672, + "relativePosition": [ + 38.665, + 27.0, + 34.0 + ] + }, + { + "id": 1673, + "relativePosition": [ + 27.0, + 25.0, + 38.12150024414063 + ] + }, + { + "id": 1674, + "relativePosition": [ + 27.0, + 26.0, + 38.665 + ] + }, + { + "id": 1675, + "relativePosition": [ + 29.0, + 24.0, + 37.936799926757814 + ] + }, + { + "id": 1676, + "relativePosition": [ + 33.878500061035155, + 23.0, + 36.0 + ] + }, + { + "id": 1677, + "relativePosition": [ + 30.0, + 23.0, + 37.14090026855469 + ] + }, + { + "id": 1678, + "relativePosition": [ + 32.0, + 23.0, + 36.85909973144531 + ] + }, + { + "id": 1679, + "relativePosition": [ + 35.0, + 23.0, + 35.102099914550784 + ] + }, + { + "id": 1680, + "relativePosition": [ + 37.0, + 24.89790008544922, + 35.0 + ] + }, + { + "id": 1681, + "relativePosition": [ + 26.121499938964845, + 28.0, + 39.0 + ] + }, + { + "id": 1682, + "relativePosition": [ + 27.0, + 26.839700012207032, + 39.0 + ] + }, + { + "id": 1683, + "relativePosition": [ + 27.0, + 28.0, + 39.335 + ] + }, + { + "id": 1684, + "relativePosition": [ + 26.839700012207032, + 27.0, + 39.0 + ] + }, + { + "id": 1685, + "relativePosition": [ + 39.0, + 28.0, + 33.878500061035155 + ] + }, + { + "id": 1686, + "relativePosition": [ + 28.0, + 24.335, + 38.0 + ] + }, + { + "id": 1687, + "relativePosition": [ + 31.412599945068358, + 23.0, + 37.0 + ] + }, + { + "id": 1688, + "relativePosition": [ + 37.063200073242186, + 25.0, + 35.0 + ] + }, + { + "id": 1689, + "relativePosition": [ + 33.0, + 23.0, + 36.470900268554686 + ] + }, + { + "id": 1690, + "relativePosition": [ + 38.0, + 26.0, + 34.470899963378905 + ] + }, + { + "id": 1691, + "relativePosition": [ + 36.0, + 24.0, + 35.29619995117187 + ] + }, + { + "id": 1692, + "relativePosition": [ + 35.0, + 23.762100219726562, + 36.0 + ] + }, + { + "id": 1693, + "relativePosition": [ + 37.68440002441406, + 26.0, + 35.0 + ] + }, + { + "id": 1694, + "relativePosition": [ + 28.0, + 25.0, + 38.432100219726564 + ] + }, + { + "id": 1695, + "relativePosition": [ + 38.936799926757814, + 28.0, + 34.0 + ] + }, + { + "id": 1696, + "relativePosition": [ + 39.102100219726566, + 29.0, + 34.0 + ] + }, + { + "id": 1697, + "relativePosition": [ + 34.0, + 23.08260009765625, + 36.0 + ] + }, + { + "id": 1698, + "relativePosition": [ + 27.0, + 27.0, + 39.063200073242186 + ] + }, + { + "id": 1699, + "relativePosition": [ + 35.29619995117187, + 24.0, + 36.0 + ] + }, + { + "id": 1700, + "relativePosition": [ + 39.0, + 28.276799926757814, + 34.0 + ] + }, + { + "id": 1701, + "relativePosition": [ + 30.0, + 24.0, + 38.0 + ] + }, + { + "id": 1702, + "relativePosition": [ + 28.0, + 26.0, + 38.936799926757814 + ] + }, + { + "id": 1703, + "relativePosition": [ + 38.12150024414063, + 27.0, + 35.0 + ] + }, + { + "id": 1704, + "relativePosition": [ + 31.0, + 23.0, + 37.063200073242186 + ] + }, + { + "id": 1705, + "relativePosition": [ + 34.0, + 24.0, + 36.936799926757814 + ] + }, + { + "id": 1706, + "relativePosition": [ + 37.0, + 25.0, + 35.102099914550784 + ] + }, + { + "id": 1707, + "relativePosition": [ + 28.0, + 29.0, + 39.74260009765625 + ] + }, + { + "id": 1708, + "relativePosition": [ + 29.0, + 24.08260009765625, + 38.0 + ] + }, + { + "id": 1709, + "relativePosition": [ + 36.23789978027344, + 25.0, + 36.0 + ] + }, + { + "id": 1710, + "relativePosition": [ + 38.0, + 26.684400024414064, + 35.0 + ] + }, + { + "id": 1711, + "relativePosition": [ + 33.878500061035155, + 24.0, + 37.0 + ] + }, + { + "id": 1712, + "relativePosition": [ + 36.0, + 24.703800048828125, + 36.0 + ] + }, + { + "id": 1713, + "relativePosition": [ + 31.0, + 24.0, + 37.936799926757814 + ] + }, + { + "id": 1714, + "relativePosition": [ + 33.0, + 23.529099731445314, + 37.0 + ] + }, + { + "id": 1715, + "relativePosition": [ + 32.0, + 23.140900268554688, + 37.0 + ] + }, + { + "id": 1716, + "relativePosition": [ + 35.0, + 24.0, + 36.23789978027344 + ] + }, + { + "id": 1717, + "relativePosition": [ + 38.432100219726564, + 28.0, + 35.0 + ] + }, + { + "id": 1718, + "relativePosition": [ + 28.0, + 26.121499938964845, + 39.0 + ] + }, + { + "id": 1719, + "relativePosition": [ + 29.0, + 25.0, + 38.606799926757816 + ] + }, + { + "id": 1720, + "relativePosition": [ + 39.0, + 29.0, + 34.23790008544922 + ] + }, + { + "id": 1721, + "relativePosition": [ + 32.0, + 24.0, + 37.74260009765625 + ] + }, + { + "id": 1722, + "relativePosition": [ + 28.0, + 28.0, + 39.58739990234375 + ] + }, + { + "id": 1723, + "relativePosition": [ + 28.0, + 27.0, + 39.335 + ] + }, + { + "id": 1724, + "relativePosition": [ + 37.0, + 26.0, + 35.91739990234375 + ] + }, + { + "id": 1725, + "relativePosition": [ + 38.606799926757816, + 29.0, + 35.0 + ] + }, + { + "id": 1726, + "relativePosition": [ + 36.0, + 25.0, + 36.23789978027344 + ] + }, + { + "id": 1727, + "relativePosition": [ + 36.91739990234375, + 26.0, + 36.0 + ] + }, + { + "id": 1728, + "relativePosition": [ + 38.0, + 27.0, + 35.199099731445315 + ] + }, + { + "id": 1729, + "relativePosition": [ + 33.0, + 24.0, + 37.41260009765625 + ] + }, + { + "id": 1730, + "relativePosition": [ + 35.102099914550784, + 25.0, + 37.0 + ] + }, + { + "id": 1731, + "relativePosition": [ + 37.41260009765625, + 27.0, + 36.0 + ] + }, + { + "id": 1732, + "relativePosition": [ + 30.0, + 25.0, + 38.665 + ] + }, + { + "id": 1733, + "relativePosition": [ + 35.0, + 24.89790008544922, + 37.0 + ] + }, + { + "id": 1734, + "relativePosition": [ + 28.276799926757814, + 26.0, + 39.0 + ] + }, + { + "id": 1735, + "relativePosition": [ + 37.0, + 26.121499938964845, + 36.0 + ] + }, + { + "id": 1736, + "relativePosition": [ + 31.0, + 24.08260009765625, + 38.0 + ] + }, + { + "id": 1737, + "relativePosition": [ + 34.0, + 24.08260009765625, + 37.0 + ] + }, + { + "id": 1738, + "relativePosition": [ + 29.0, + 29.0, + 39.897899780273434 + ] + }, + { + "id": 1739, + "relativePosition": [ + 29.0, + 25.76209991455078, + 39.0 + ] + }, + { + "id": 1740, + "relativePosition": [ + 38.0, + 28.0, + 35.665 + ] + }, + { + "id": 1741, + "relativePosition": [ + 36.0, + 26.0, + 36.936799926757814 + ] + }, + { + "id": 1742, + "relativePosition": [ + 31.0, + 25.0, + 38.606799926757816 + ] + }, + { + "id": 1743, + "relativePosition": [ + 29.0, + 26.0, + 39.102100219726566 + ] + }, + { + "id": 1744, + "relativePosition": [ + 29.0, + 27.0, + 39.49030029296875 + ] + }, + { + "id": 1745, + "relativePosition": [ + 32.0, + 24.335, + 38.0 + ] + }, + { + "id": 1746, + "relativePosition": [ + 34.0, + 25.0, + 37.68440002441406 + ] + }, + { + "id": 1747, + "relativePosition": [ + 33.0, + 24.800900268554688, + 38.0 + ] + }, + { + "id": 1748, + "relativePosition": [ + 38.0, + 29.0, + 35.91739990234375 + ] + }, + { + "id": 1749, + "relativePosition": [ + 35.91739990234375, + 26.0, + 37.0 + ] + }, + { + "id": 1750, + "relativePosition": [ + 37.0, + 27.0, + 36.470900268554686 + ] + }, + { + "id": 1751, + "relativePosition": [ + 29.0, + 28.0, + 39.74260009765625 + ] + }, + { + "id": 1752, + "relativePosition": [ + 35.0, + 25.0, + 37.063200073242186 + ] + }, + { + "id": 1753, + "relativePosition": [ + 33.31559997558594, + 25.0, + 38.0 + ] + }, + { + "id": 1754, + "relativePosition": [ + 37.74260009765625, + 28.0, + 36.0 + ] + }, + { + "id": 1755, + "relativePosition": [ + 30.0, + 25.645599975585938, + 39.0 + ] + }, + { + "id": 1756, + "relativePosition": [ + 32.0, + 25.0, + 38.432100219726564 + ] + }, + { + "id": 1757, + "relativePosition": [ + 36.470900268554686, + 27.0, + 37.0 + ] + }, + { + "id": 1758, + "relativePosition": [ + 36.0, + 26.121499938964845, + 37.0 + ] + }, + { + "id": 1759, + "relativePosition": [ + 37.0, + 28.0, + 36.85909973144531 + ] + }, + { + "id": 1760, + "relativePosition": [ + 30.0, + 26.0, + 39.16030029296875 + ] + }, + { + "id": 1761, + "relativePosition": [ + 35.0, + 26.0, + 37.68440002441406 + ] + }, + { + "id": 1762, + "relativePosition": [ + 34.470899963378905, + 26.0, + 38.0 + ] + }, + { + "id": 1763, + "relativePosition": [ + 37.936799926757814, + 29.0, + 36.0 + ] + }, + { + "id": 1764, + "relativePosition": [ + 30.0, + 29.0, + 39.956199951171875 + ] + }, + { + "id": 1765, + "relativePosition": [ + 33.0, + 25.0, + 38.12150024414063 + ] + }, + { + "id": 1766, + "relativePosition": [ + 34.0, + 25.529100036621095, + 38.0 + ] + }, + { + "id": 1767, + "relativePosition": [ + 30.0, + 27.0, + 39.548499755859375 + ] + }, + { + "id": 1768, + "relativePosition": [ + 31.0, + 25.76209991455078, + 39.0 + ] + }, + { + "id": 1769, + "relativePosition": [ + 37.063200073242186, + 29.0, + 37.0 + ] + }, + { + "id": 1770, + "relativePosition": [ + 36.0, + 27.0, + 37.41260009765625 + ] + }, + { + "id": 1771, + "relativePosition": [ + 37.0, + 28.587400054931642, + 37.0 + ] + }, + { + "id": 1772, + "relativePosition": [ + 36.85909973144531, + 28.0, + 37.0 + ] + }, + { + "id": 1773, + "relativePosition": [ + 32.0, + 26.0, + 38.936799926757814 + ] + }, + { + "id": 1774, + "relativePosition": [ + 34.0, + 26.0, + 38.23789978027344 + ] + }, + { + "id": 1775, + "relativePosition": [ + 31.723200073242186, + 26.0, + 39.0 + ] + }, + { + "id": 1776, + "relativePosition": [ + 35.199099731445315, + 27.0, + 38.0 + ] + }, + { + "id": 1777, + "relativePosition": [ + 33.0, + 26.0, + 38.665 + ] + }, + { + "id": 1778, + "relativePosition": [ + 35.0, + 26.684400024414064, + 38.0 + ] + }, + { + "id": 1779, + "relativePosition": [ + 31.0, + 26.0, + 39.102100219726566 + ] + }, + { + "id": 1780, + "relativePosition": [ + 30.0, + 28.0, + 39.800900268554685 + ] + }, + { + "id": 1781, + "relativePosition": [ + 36.0, + 28.0, + 37.74260009765625 + ] + }, + { + "id": 1782, + "relativePosition": [ + 35.0, + 27.0, + 38.12150024414063 + ] + }, + { + "id": 1783, + "relativePosition": [ + 31.0, + 27.0, + 39.49030029296875 + ] + }, + { + "id": 1784, + "relativePosition": [ + 37.0, + 29.0, + 37.063200073242186 + ] + }, + { + "id": 1785, + "relativePosition": [ + 34.0, + 27.0, + 38.665 + ] + }, + { + "id": 1786, + "relativePosition": [ + 36.0, + 29.0, + 37.936799926757814 + ] + }, + { + "id": 1787, + "relativePosition": [ + 35.665, + 28.0, + 38.0 + ] + }, + { + "id": 1788, + "relativePosition": [ + 32.0, + 26.121499938964845, + 39.0 + ] + }, + { + "id": 1789, + "relativePosition": [ + 32.0, + 27.0, + 39.335 + ] + }, + { + "id": 1790, + "relativePosition": [ + 33.0, + 26.839700012207032, + 39.0 + ] + }, + { + "id": 1791, + "relativePosition": [ + 33.16029998779297, + 27.0, + 39.0 + ] + }, + { + "id": 1792, + "relativePosition": [ + 35.0, + 28.0, + 38.432100219726564 + ] + }, + { + "id": 1793, + "relativePosition": [ + 35.91739990234375, + 29.0, + 38.0 + ] + }, + { + "id": 1794, + "relativePosition": [ + 31.0, + 28.0, + 39.74260009765625 + ] + }, + { + "id": 1795, + "relativePosition": [ + 33.0, + 27.0, + 39.063200073242186 + ] + }, + { + "id": 1796, + "relativePosition": [ + 34.0, + 28.0, + 38.936799926757814 + ] + }, + { + "id": 1797, + "relativePosition": [ + 35.0, + 29.0, + 38.606799926757816 + ] + }, + { + "id": 1798, + "relativePosition": [ + 32.0, + 28.0, + 39.58739990234375 + ] + }, + { + "id": 1799, + "relativePosition": [ + 33.878500061035155, + 28.0, + 39.0 + ] + }, + { + "id": 1800, + "relativePosition": [ + 33.0, + 28.0, + 39.335 + ] + }, + { + "id": 1801, + "relativePosition": [ + 34.23790008544922, + 29.0, + 39.0 + ] + }, + { + "id": 1802, + "relativePosition": [ + 34.0, + 28.276799926757814, + 39.0 + ] + }, + { + "id": 1803, + "relativePosition": [ + 31.0, + 29.0, + 39.897899780273434 + ] + }, + { + "id": 1804, + "relativePosition": [ + 34.0, + 29.0, + 39.102100219726566 + ] + }, + { + "id": 1805, + "relativePosition": [ + 33.0, + 29.0, + 39.49030029296875 + ] + }, + { + "id": 1806, + "relativePosition": [ + 32.0, + 29.0, + 39.74260009765625 + ] + }, + { + "id": 1807, + "relativePosition": [ + 30, + 30, + 30 + ] + } + ] + }, + "materials": [ + { + "id": 1, + "type": "pec" + } + ], + "materialAssociations": [ + { + "materialId": 1, + "elementIds": [ + 1 + ] + } + ], + "sources": [ + { + "type": "planewave", + "magnitudeFile": "gauss.exc", + "elementIds": [ + 2 + ], + "direction": { + "theta": -1.5707963267948966, + "phi": 0.0 + }, + "polarization": { + "theta": 1.5707963267948966, + "phi": 1.5707963267948966 + } + } + ], + "probes": [ + { + "name": "inside", + "type": "point", + "elementIds": [ + 3 + ] + }, + { + "name": "n2ff", + "type": "farField", + "elementIds": [ + 4 + ], + "theta": { + "initial": -90, + "final": 90, + "step": 90 + }, + "phi": { + "initial": -90, + "final": 90, + "step": 90 + }, + "domain": { + "type": "frequency", + "initialFrequency": 1e7, + "finalFrequency": 2e9, + "numberOfFrequencies": 200, + "frequencySpacing": "logarithmic" + } + } + ] +} \ No newline at end of file diff --git a/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py b/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py new file mode 100644 index 000000000..699eabaf3 --- /dev/null +++ b/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py @@ -0,0 +1,72 @@ +# %% +import numpy as np +from numpy.fft import * +import matplotlib.pyplot as plt +import scipy.constants +from scipy.special import hankel2 as h +from scipy.special import h2vp as hp + +import sys, os +sys.path.append(os.path.join(os.path.dirname(__file__), '../../../', 'src_pyWrapper')) +SEMBA_EXE = '../../../build/bin/semba-fdtd' + +from pyWrapper import * + + +# %% Structured +solver = FDTD(input_filename = 'conformal_surface_sphere.fdtd.json', path_to_exe=SEMBA_EXE) +solver.cleanUp() +solver.run() + +# %% Structured +far = Probe(solver.getSolvedProbeFilenames("n2f")[0]) +ra90_0 = far.data.loc[(far.data['Theta'] == 90.0) & (far.data['Phi'] == 0.0), 'rcs_arit'] +rg90_0 = far.data.loc[(far.data['Theta'] == 90.0) & (far.data['Phi'] == 0.0), 'rcs_geom'] +f90_0 = far.data.loc[(far.data['Theta'] == 90.0) & (far.data['Phi'] == 0.0), 'freq'] + +ex = Probe(solver.getSolvedProbeFilenames("indside_Ex")[0]) +ey = Probe(solver.getSolvedProbeFilenames("indside_Ey")[0]) +ez = Probe(solver.getSolvedProbeFilenames("indside_Ez")[0]) + +# %% analytical result + +def h_sph(n,z): + return np.sqrt(0.5*np.pi*z)*h(n+0.5,z) + +def h_sph_der(n,z): + return 0.25*np.pi*(0.5*np.pi*z)**(-0.5)*h(n+0.5,z) + np.sqrt(0.5*np.pi*z)*hp(n+0.5,z) + +def ha(n,z): + return (1j)**(n+1)*np.exp(-1j*z) +def had(n,z): + return (1j)**n*np.exp(-1j*z) + +a = 0.5 #radius +f = np.linspace(1e7,6e8,201) +l = 3.0e8/f +beta = 2*np.pi*f/3.0e8 + +rcs = 0.0 +for n in range(1,50): + rcs = rcs + (-1)**n*(2*n+1)/(h_sph_der(n,beta*a)*h_sph(n,beta*a)) +rcs = np.abs(rcs)**2*(l**2/(4*np.pi)) + + +# %% plot results +plt.loglog(f, rcs/(np.pi*a**2), '.', label='analytical') +plt.loglog(f90_0, rg90_0/(np.pi*(a)**2), '--', label='Structured') +plt.xlabel('f [Hz]') +plt.ylabel(r'rcs/$\pi*a^2$') +plt.title('Sphere radar cross section') +plt.hlines(1,0.0,7e8, colors ='red', linestyles='--') +plt.legend() + +# %% plot results +plt.plot(ex['time']*1e6, ex['field'], label=r'$E_x$') +plt.plot(ey['time']*1e6, ey['field'], label=r'$E_y$') +plt.plot(ez['time']*1e6, ez['field'], label=r'$E_z$') +plt.xlabel(r't [$\mu$s]') +plt.ylabel(r'|E|') +plt.title('Field inside hollow PEC sphere') +plt.legend() + diff --git a/testData/cases/conformal_surface_sphere/gauss.exc b/testData/cases/conformal_surface_sphere/gauss.exc new file mode 100644 index 000000000..046171d28 --- /dev/null +++ b/testData/cases/conformal_surface_sphere/gauss.exc @@ -0,0 +1,22001 @@ +0.000000000000000000e+00 0.000000000000000000e+00 +4.999999999999999899e-13 0.000000000000000000e+00 +9.999999999999999799e-13 0.000000000000000000e+00 +1.500000000000000071e-12 0.000000000000000000e+00 +1.999999999999999960e-12 0.000000000000000000e+00 +2.499999999999999849e-12 0.000000000000000000e+00 +3.000000000000000142e-12 0.000000000000000000e+00 +3.500000000000000031e-12 0.000000000000000000e+00 +3.999999999999999920e-12 0.000000000000000000e+00 +4.499999999999999809e-12 0.000000000000000000e+00 +4.999999999999999697e-12 0.000000000000000000e+00 +5.499999999999999586e-12 0.000000000000000000e+00 +6.000000000000000283e-12 0.000000000000000000e+00 +6.500000000000000172e-12 0.000000000000000000e+00 +7.000000000000000061e-12 0.000000000000000000e+00 +7.499999999999999950e-12 0.000000000000000000e+00 +7.999999999999999839e-12 0.000000000000000000e+00 +8.499999999999999728e-12 0.000000000000000000e+00 +8.999999999999999617e-12 0.000000000000000000e+00 +9.499999999999999506e-12 0.000000000000000000e+00 +9.999999999999999395e-12 0.000000000000000000e+00 +1.049999999999999928e-11 0.000000000000000000e+00 +1.099999999999999917e-11 0.000000000000000000e+00 +1.149999999999999906e-11 0.000000000000000000e+00 +1.200000000000000057e-11 0.000000000000000000e+00 +1.250000000000000046e-11 0.000000000000000000e+00 +1.300000000000000034e-11 0.000000000000000000e+00 +1.350000000000000023e-11 0.000000000000000000e+00 +1.400000000000000012e-11 0.000000000000000000e+00 +1.450000000000000001e-11 0.000000000000000000e+00 +1.499999999999999990e-11 0.000000000000000000e+00 +1.549999999999999817e-11 0.000000000000000000e+00 +1.599999999999999968e-11 0.000000000000000000e+00 +1.650000000000000118e-11 0.000000000000000000e+00 +1.699999999999999946e-11 0.000000000000000000e+00 +1.750000000000000096e-11 0.000000000000000000e+00 +1.799999999999999923e-11 0.000000000000000000e+00 +1.850000000000000074e-11 0.000000000000000000e+00 +1.899999999999999901e-11 0.000000000000000000e+00 +1.950000000000000052e-11 0.000000000000000000e+00 +1.999999999999999879e-11 0.000000000000000000e+00 +2.050000000000000029e-11 0.000000000000000000e+00 +2.099999999999999857e-11 0.000000000000000000e+00 +2.150000000000000007e-11 0.000000000000000000e+00 +2.199999999999999835e-11 0.000000000000000000e+00 +2.249999999999999985e-11 0.000000000000000000e+00 +2.299999999999999812e-11 0.000000000000000000e+00 +2.349999999999999963e-11 0.000000000000000000e+00 +2.400000000000000113e-11 0.000000000000000000e+00 +2.449999999999999941e-11 0.000000000000000000e+00 +2.500000000000000091e-11 0.000000000000000000e+00 +2.549999999999999918e-11 0.000000000000000000e+00 +2.600000000000000069e-11 0.000000000000000000e+00 +2.649999999999999896e-11 0.000000000000000000e+00 +2.700000000000000047e-11 0.000000000000000000e+00 +2.749999999999999874e-11 0.000000000000000000e+00 +2.800000000000000024e-11 0.000000000000000000e+00 +2.849999999999999852e-11 0.000000000000000000e+00 +2.900000000000000002e-11 0.000000000000000000e+00 +2.950000000000000153e-11 0.000000000000000000e+00 +2.999999999999999980e-11 0.000000000000000000e+00 +3.049999999999999807e-11 0.000000000000000000e+00 +3.099999999999999635e-11 0.000000000000000000e+00 +3.150000000000000108e-11 0.000000000000000000e+00 +3.199999999999999936e-11 0.000000000000000000e+00 +3.249999999999999763e-11 0.000000000000000000e+00 +3.300000000000000237e-11 0.000000000000000000e+00 +3.350000000000000064e-11 0.000000000000000000e+00 +3.399999999999999891e-11 0.000000000000000000e+00 +3.449999999999999719e-11 0.000000000000000000e+00 +3.500000000000000192e-11 0.000000000000000000e+00 +3.550000000000000019e-11 0.000000000000000000e+00 +3.599999999999999847e-11 0.000000000000000000e+00 +3.649999999999999674e-11 0.000000000000000000e+00 +3.700000000000000148e-11 0.000000000000000000e+00 +3.749999999999999975e-11 0.000000000000000000e+00 +3.799999999999999802e-11 0.000000000000000000e+00 +3.849999999999999630e-11 0.000000000000000000e+00 +3.900000000000000103e-11 0.000000000000000000e+00 +3.949999999999999931e-11 0.000000000000000000e+00 +3.999999999999999758e-11 0.000000000000000000e+00 +4.050000000000000232e-11 0.000000000000000000e+00 +4.100000000000000059e-11 0.000000000000000000e+00 +4.149999999999999886e-11 0.000000000000000000e+00 +4.199999999999999714e-11 0.000000000000000000e+00 +4.250000000000000187e-11 0.000000000000000000e+00 +4.300000000000000014e-11 0.000000000000000000e+00 +4.349999999999999842e-11 0.000000000000000000e+00 +4.399999999999999669e-11 0.000000000000000000e+00 +4.450000000000000143e-11 0.000000000000000000e+00 +4.499999999999999970e-11 0.000000000000000000e+00 +4.549999999999999797e-11 0.000000000000000000e+00 +4.599999999999999625e-11 0.000000000000000000e+00 +4.650000000000000098e-11 0.000000000000000000e+00 +4.699999999999999926e-11 0.000000000000000000e+00 +4.749999999999999753e-11 0.000000000000000000e+00 +4.800000000000000227e-11 0.000000000000000000e+00 +4.850000000000000054e-11 0.000000000000000000e+00 +4.899999999999999881e-11 0.000000000000000000e+00 +4.949999999999999709e-11 0.000000000000000000e+00 +5.000000000000000182e-11 0.000000000000000000e+00 +5.050000000000000009e-11 0.000000000000000000e+00 +5.099999999999999837e-11 0.000000000000000000e+00 +5.149999999999999664e-11 0.000000000000000000e+00 +5.200000000000000138e-11 0.000000000000000000e+00 +5.249999999999999965e-11 0.000000000000000000e+00 +5.299999999999999792e-11 0.000000000000000000e+00 +5.349999999999999620e-11 0.000000000000000000e+00 +5.400000000000000093e-11 0.000000000000000000e+00 +5.449999999999999921e-11 0.000000000000000000e+00 +5.499999999999999748e-11 0.000000000000000000e+00 +5.549999999999999575e-11 0.000000000000000000e+00 +5.600000000000000049e-11 0.000000000000000000e+00 +5.649999999999999876e-11 0.000000000000000000e+00 +5.699999999999999704e-11 0.000000000000000000e+00 +5.750000000000000177e-11 0.000000000000000000e+00 +5.800000000000000005e-11 0.000000000000000000e+00 +5.850000000000000478e-11 0.000000000000000000e+00 +5.900000000000000305e-11 0.000000000000000000e+00 +5.950000000000000133e-11 0.000000000000000000e+00 +5.999999999999999960e-11 0.000000000000000000e+00 +6.049999999999999787e-11 0.000000000000000000e+00 +6.099999999999999615e-11 0.000000000000000000e+00 +6.149999999999999442e-11 0.000000000000000000e+00 +6.199999999999999269e-11 0.000000000000000000e+00 +6.250000000000000389e-11 0.000000000000000000e+00 +6.300000000000000217e-11 0.000000000000000000e+00 +6.350000000000000044e-11 0.000000000000000000e+00 +6.399999999999999871e-11 0.000000000000000000e+00 +6.449999999999999699e-11 0.000000000000000000e+00 +6.499999999999999526e-11 0.000000000000000000e+00 +6.549999999999999353e-11 0.000000000000000000e+00 +6.600000000000000473e-11 0.000000000000000000e+00 +6.650000000000000300e-11 0.000000000000000000e+00 +6.700000000000000128e-11 0.000000000000000000e+00 +6.749999999999999955e-11 0.000000000000000000e+00 +6.799999999999999782e-11 0.000000000000000000e+00 +6.849999999999999610e-11 0.000000000000000000e+00 +6.899999999999999437e-11 0.000000000000000000e+00 +6.949999999999999264e-11 0.000000000000000000e+00 +7.000000000000000384e-11 0.000000000000000000e+00 +7.050000000000000212e-11 0.000000000000000000e+00 +7.100000000000000039e-11 0.000000000000000000e+00 +7.149999999999999866e-11 0.000000000000000000e+00 +7.199999999999999694e-11 0.000000000000000000e+00 +7.249999999999999521e-11 0.000000000000000000e+00 +7.299999999999999348e-11 0.000000000000000000e+00 +7.350000000000000468e-11 0.000000000000000000e+00 +7.400000000000000295e-11 0.000000000000000000e+00 +7.450000000000000123e-11 0.000000000000000000e+00 +7.499999999999999950e-11 0.000000000000000000e+00 +7.549999999999999777e-11 0.000000000000000000e+00 +7.599999999999999605e-11 0.000000000000000000e+00 +7.649999999999999432e-11 0.000000000000000000e+00 +7.699999999999999259e-11 0.000000000000000000e+00 +7.750000000000000379e-11 0.000000000000000000e+00 +7.800000000000000207e-11 0.000000000000000000e+00 +7.850000000000000034e-11 0.000000000000000000e+00 +7.899999999999999861e-11 0.000000000000000000e+00 +7.949999999999999689e-11 0.000000000000000000e+00 +7.999999999999999516e-11 0.000000000000000000e+00 +8.049999999999999343e-11 0.000000000000000000e+00 +8.100000000000000463e-11 0.000000000000000000e+00 +8.150000000000000290e-11 0.000000000000000000e+00 +8.200000000000000118e-11 0.000000000000000000e+00 +8.249999999999999945e-11 0.000000000000000000e+00 +8.299999999999999772e-11 0.000000000000000000e+00 +8.349999999999999600e-11 0.000000000000000000e+00 +8.399999999999999427e-11 0.000000000000000000e+00 +8.449999999999999254e-11 0.000000000000000000e+00 +8.500000000000000374e-11 0.000000000000000000e+00 +8.550000000000000202e-11 0.000000000000000000e+00 +8.600000000000000029e-11 0.000000000000000000e+00 +8.649999999999999856e-11 0.000000000000000000e+00 +8.699999999999999684e-11 0.000000000000000000e+00 +8.749999999999999511e-11 0.000000000000000000e+00 +8.799999999999999338e-11 0.000000000000000000e+00 +8.850000000000000458e-11 0.000000000000000000e+00 +8.900000000000000285e-11 0.000000000000000000e+00 +8.950000000000000113e-11 0.000000000000000000e+00 +8.999999999999999940e-11 0.000000000000000000e+00 +9.049999999999999767e-11 0.000000000000000000e+00 +9.099999999999999595e-11 0.000000000000000000e+00 +9.149999999999999422e-11 0.000000000000000000e+00 +9.199999999999999250e-11 0.000000000000000000e+00 +9.250000000000000369e-11 0.000000000000000000e+00 +9.300000000000000197e-11 0.000000000000000000e+00 +9.350000000000000024e-11 0.000000000000000000e+00 +9.399999999999999851e-11 0.000000000000000000e+00 +9.449999999999999679e-11 0.000000000000000000e+00 +9.499999999999999506e-11 0.000000000000000000e+00 +9.549999999999999333e-11 0.000000000000000000e+00 +9.600000000000000453e-11 0.000000000000000000e+00 +9.650000000000000280e-11 0.000000000000000000e+00 +9.700000000000000108e-11 0.000000000000000000e+00 +9.749999999999999935e-11 0.000000000000000000e+00 +9.799999999999999762e-11 0.000000000000000000e+00 +9.849999999999999590e-11 0.000000000000000000e+00 +9.899999999999999417e-11 0.000000000000000000e+00 +9.949999999999999245e-11 0.000000000000000000e+00 +1.000000000000000036e-10 0.000000000000000000e+00 +1.005000000000000019e-10 0.000000000000000000e+00 +1.010000000000000002e-10 0.000000000000000000e+00 +1.014999999999999985e-10 0.000000000000000000e+00 +1.019999999999999967e-10 0.000000000000000000e+00 +1.024999999999999950e-10 0.000000000000000000e+00 +1.029999999999999933e-10 0.000000000000000000e+00 +1.034999999999999916e-10 0.000000000000000000e+00 +1.040000000000000028e-10 0.000000000000000000e+00 +1.045000000000000010e-10 0.000000000000000000e+00 +1.049999999999999993e-10 0.000000000000000000e+00 +1.054999999999999976e-10 0.000000000000000000e+00 +1.059999999999999958e-10 0.000000000000000000e+00 +1.064999999999999941e-10 0.000000000000000000e+00 +1.069999999999999924e-10 0.000000000000000000e+00 +1.075000000000000036e-10 0.000000000000000000e+00 +1.080000000000000019e-10 0.000000000000000000e+00 +1.085000000000000001e-10 0.000000000000000000e+00 +1.089999999999999984e-10 0.000000000000000000e+00 +1.094999999999999967e-10 0.000000000000000000e+00 +1.099999999999999950e-10 0.000000000000000000e+00 +1.104999999999999932e-10 0.000000000000000000e+00 +1.109999999999999915e-10 0.000000000000000000e+00 +1.115000000000000027e-10 0.000000000000000000e+00 +1.120000000000000010e-10 0.000000000000000000e+00 +1.124999999999999993e-10 0.000000000000000000e+00 +1.129999999999999975e-10 0.000000000000000000e+00 +1.134999999999999958e-10 0.000000000000000000e+00 +1.139999999999999941e-10 0.000000000000000000e+00 +1.144999999999999923e-10 0.000000000000000000e+00 +1.150000000000000035e-10 0.000000000000000000e+00 +1.155000000000000018e-10 0.000000000000000000e+00 +1.160000000000000001e-10 0.000000000000000000e+00 +1.164999999999999854e-10 0.000000000000000000e+00 +1.170000000000000096e-10 0.000000000000000000e+00 +1.175000000000000078e-10 0.000000000000000000e+00 +1.180000000000000061e-10 0.000000000000000000e+00 +1.185000000000000044e-10 0.000000000000000000e+00 +1.190000000000000027e-10 0.000000000000000000e+00 +1.195000000000000009e-10 0.000000000000000000e+00 +1.199999999999999992e-10 0.000000000000000000e+00 +1.204999999999999975e-10 0.000000000000000000e+00 +1.209999999999999957e-10 0.000000000000000000e+00 +1.214999999999999940e-10 0.000000000000000000e+00 +1.219999999999999923e-10 0.000000000000000000e+00 +1.224999999999999906e-10 0.000000000000000000e+00 +1.229999999999999888e-10 0.000000000000000000e+00 +1.234999999999999871e-10 0.000000000000000000e+00 +1.239999999999999854e-10 0.000000000000000000e+00 +1.245000000000000095e-10 0.000000000000000000e+00 +1.250000000000000078e-10 0.000000000000000000e+00 +1.255000000000000061e-10 0.000000000000000000e+00 +1.260000000000000043e-10 0.000000000000000000e+00 +1.265000000000000026e-10 0.000000000000000000e+00 +1.270000000000000009e-10 0.000000000000000000e+00 +1.274999999999999992e-10 0.000000000000000000e+00 +1.279999999999999974e-10 0.000000000000000000e+00 +1.284999999999999957e-10 0.000000000000000000e+00 +1.289999999999999940e-10 0.000000000000000000e+00 +1.294999999999999922e-10 0.000000000000000000e+00 +1.299999999999999905e-10 0.000000000000000000e+00 +1.304999999999999888e-10 0.000000000000000000e+00 +1.309999999999999871e-10 0.000000000000000000e+00 +1.314999999999999853e-10 0.000000000000000000e+00 +1.320000000000000095e-10 0.000000000000000000e+00 +1.325000000000000077e-10 0.000000000000000000e+00 +1.330000000000000060e-10 0.000000000000000000e+00 +1.335000000000000043e-10 0.000000000000000000e+00 +1.340000000000000026e-10 0.000000000000000000e+00 +1.345000000000000008e-10 0.000000000000000000e+00 +1.349999999999999991e-10 0.000000000000000000e+00 +1.354999999999999974e-10 0.000000000000000000e+00 +1.359999999999999956e-10 0.000000000000000000e+00 +1.364999999999999939e-10 0.000000000000000000e+00 +1.369999999999999922e-10 0.000000000000000000e+00 +1.374999999999999905e-10 0.000000000000000000e+00 +1.379999999999999887e-10 0.000000000000000000e+00 +1.384999999999999870e-10 0.000000000000000000e+00 +1.389999999999999853e-10 0.000000000000000000e+00 +1.395000000000000094e-10 0.000000000000000000e+00 +1.400000000000000077e-10 0.000000000000000000e+00 +1.405000000000000060e-10 0.000000000000000000e+00 +1.410000000000000042e-10 0.000000000000000000e+00 +1.415000000000000025e-10 0.000000000000000000e+00 +1.420000000000000008e-10 0.000000000000000000e+00 +1.424999999999999991e-10 0.000000000000000000e+00 +1.429999999999999973e-10 0.000000000000000000e+00 +1.434999999999999956e-10 0.000000000000000000e+00 +1.439999999999999939e-10 0.000000000000000000e+00 +1.444999999999999921e-10 0.000000000000000000e+00 +1.449999999999999904e-10 0.000000000000000000e+00 +1.454999999999999887e-10 0.000000000000000000e+00 +1.459999999999999870e-10 0.000000000000000000e+00 +1.464999999999999852e-10 0.000000000000000000e+00 +1.470000000000000094e-10 0.000000000000000000e+00 +1.475000000000000076e-10 0.000000000000000000e+00 +1.480000000000000059e-10 0.000000000000000000e+00 +1.485000000000000042e-10 0.000000000000000000e+00 +1.490000000000000025e-10 0.000000000000000000e+00 +1.495000000000000007e-10 0.000000000000000000e+00 +1.499999999999999990e-10 0.000000000000000000e+00 +1.504999999999999973e-10 0.000000000000000000e+00 +1.509999999999999955e-10 0.000000000000000000e+00 +1.514999999999999938e-10 0.000000000000000000e+00 +1.519999999999999921e-10 0.000000000000000000e+00 +1.524999999999999904e-10 0.000000000000000000e+00 +1.529999999999999886e-10 0.000000000000000000e+00 +1.534999999999999869e-10 0.000000000000000000e+00 +1.539999999999999852e-10 0.000000000000000000e+00 +1.545000000000000093e-10 0.000000000000000000e+00 +1.550000000000000076e-10 0.000000000000000000e+00 +1.555000000000000059e-10 0.000000000000000000e+00 +1.560000000000000041e-10 0.000000000000000000e+00 +1.565000000000000024e-10 0.000000000000000000e+00 +1.570000000000000007e-10 0.000000000000000000e+00 +1.574999999999999990e-10 0.000000000000000000e+00 +1.579999999999999972e-10 0.000000000000000000e+00 +1.584999999999999955e-10 0.000000000000000000e+00 +1.589999999999999938e-10 0.000000000000000000e+00 +1.594999999999999920e-10 0.000000000000000000e+00 +1.599999999999999903e-10 0.000000000000000000e+00 +1.604999999999999886e-10 0.000000000000000000e+00 +1.609999999999999869e-10 0.000000000000000000e+00 +1.614999999999999851e-10 0.000000000000000000e+00 +1.620000000000000093e-10 0.000000000000000000e+00 +1.625000000000000075e-10 0.000000000000000000e+00 +1.630000000000000058e-10 0.000000000000000000e+00 +1.635000000000000041e-10 0.000000000000000000e+00 +1.640000000000000024e-10 0.000000000000000000e+00 +1.645000000000000006e-10 0.000000000000000000e+00 +1.649999999999999989e-10 0.000000000000000000e+00 +1.654999999999999972e-10 0.000000000000000000e+00 +1.659999999999999954e-10 0.000000000000000000e+00 +1.664999999999999937e-10 0.000000000000000000e+00 +1.669999999999999920e-10 0.000000000000000000e+00 +1.674999999999999903e-10 0.000000000000000000e+00 +1.679999999999999885e-10 0.000000000000000000e+00 +1.684999999999999868e-10 0.000000000000000000e+00 +1.689999999999999851e-10 0.000000000000000000e+00 +1.695000000000000092e-10 0.000000000000000000e+00 +1.700000000000000075e-10 0.000000000000000000e+00 +1.705000000000000058e-10 0.000000000000000000e+00 +1.710000000000000040e-10 0.000000000000000000e+00 +1.715000000000000023e-10 0.000000000000000000e+00 +1.720000000000000006e-10 0.000000000000000000e+00 +1.724999999999999989e-10 0.000000000000000000e+00 +1.729999999999999971e-10 0.000000000000000000e+00 +1.734999999999999954e-10 0.000000000000000000e+00 +1.739999999999999937e-10 0.000000000000000000e+00 +1.744999999999999919e-10 0.000000000000000000e+00 +1.749999999999999902e-10 0.000000000000000000e+00 +1.754999999999999885e-10 0.000000000000000000e+00 +1.759999999999999868e-10 0.000000000000000000e+00 +1.764999999999999850e-10 0.000000000000000000e+00 +1.770000000000000092e-10 0.000000000000000000e+00 +1.775000000000000074e-10 0.000000000000000000e+00 +1.780000000000000057e-10 0.000000000000000000e+00 +1.785000000000000040e-10 0.000000000000000000e+00 +1.790000000000000023e-10 0.000000000000000000e+00 +1.795000000000000005e-10 0.000000000000000000e+00 +1.799999999999999988e-10 0.000000000000000000e+00 +1.804999999999999971e-10 0.000000000000000000e+00 +1.809999999999999953e-10 0.000000000000000000e+00 +1.814999999999999936e-10 0.000000000000000000e+00 +1.819999999999999919e-10 0.000000000000000000e+00 +1.824999999999999902e-10 0.000000000000000000e+00 +1.829999999999999884e-10 0.000000000000000000e+00 +1.834999999999999867e-10 0.000000000000000000e+00 +1.839999999999999850e-10 0.000000000000000000e+00 +1.845000000000000091e-10 0.000000000000000000e+00 +1.850000000000000074e-10 0.000000000000000000e+00 +1.855000000000000057e-10 0.000000000000000000e+00 +1.860000000000000039e-10 0.000000000000000000e+00 +1.865000000000000022e-10 0.000000000000000000e+00 +1.870000000000000005e-10 0.000000000000000000e+00 +1.874999999999999988e-10 0.000000000000000000e+00 +1.879999999999999970e-10 0.000000000000000000e+00 +1.884999999999999953e-10 0.000000000000000000e+00 +1.889999999999999936e-10 0.000000000000000000e+00 +1.894999999999999918e-10 0.000000000000000000e+00 +1.899999999999999901e-10 0.000000000000000000e+00 +1.904999999999999884e-10 0.000000000000000000e+00 +1.909999999999999867e-10 0.000000000000000000e+00 +1.914999999999999849e-10 0.000000000000000000e+00 +1.920000000000000091e-10 0.000000000000000000e+00 +1.925000000000000073e-10 0.000000000000000000e+00 +1.930000000000000056e-10 0.000000000000000000e+00 +1.935000000000000039e-10 0.000000000000000000e+00 +1.940000000000000022e-10 0.000000000000000000e+00 +1.945000000000000004e-10 0.000000000000000000e+00 +1.949999999999999987e-10 0.000000000000000000e+00 +1.954999999999999970e-10 0.000000000000000000e+00 +1.959999999999999952e-10 0.000000000000000000e+00 +1.964999999999999935e-10 0.000000000000000000e+00 +1.969999999999999918e-10 0.000000000000000000e+00 +1.974999999999999901e-10 0.000000000000000000e+00 +1.979999999999999883e-10 0.000000000000000000e+00 +1.984999999999999866e-10 0.000000000000000000e+00 +1.989999999999999849e-10 0.000000000000000000e+00 +1.994999999999999832e-10 0.000000000000000000e+00 +2.000000000000000073e-10 0.000000000000000000e+00 +2.005000000000000056e-10 0.000000000000000000e+00 +2.010000000000000038e-10 0.000000000000000000e+00 +2.015000000000000021e-10 0.000000000000000000e+00 +2.020000000000000004e-10 0.000000000000000000e+00 +2.024999999999999987e-10 0.000000000000000000e+00 +2.029999999999999969e-10 0.000000000000000000e+00 +2.034999999999999952e-10 0.000000000000000000e+00 +2.039999999999999935e-10 0.000000000000000000e+00 +2.044999999999999917e-10 0.000000000000000000e+00 +2.049999999999999900e-10 0.000000000000000000e+00 +2.054999999999999883e-10 0.000000000000000000e+00 +2.059999999999999866e-10 0.000000000000000000e+00 +2.064999999999999848e-10 0.000000000000000000e+00 +2.069999999999999831e-10 0.000000000000000000e+00 +2.075000000000000072e-10 0.000000000000000000e+00 +2.080000000000000055e-10 0.000000000000000000e+00 +2.085000000000000038e-10 0.000000000000000000e+00 +2.090000000000000021e-10 0.000000000000000000e+00 +2.095000000000000003e-10 0.000000000000000000e+00 +2.099999999999999986e-10 0.000000000000000000e+00 +2.104999999999999969e-10 0.000000000000000000e+00 +2.109999999999999952e-10 0.000000000000000000e+00 +2.114999999999999934e-10 0.000000000000000000e+00 +2.119999999999999917e-10 0.000000000000000000e+00 +2.124999999999999900e-10 0.000000000000000000e+00 +2.129999999999999882e-10 0.000000000000000000e+00 +2.134999999999999865e-10 0.000000000000000000e+00 +2.139999999999999848e-10 0.000000000000000000e+00 +2.144999999999999831e-10 0.000000000000000000e+00 +2.150000000000000072e-10 0.000000000000000000e+00 +2.155000000000000055e-10 0.000000000000000000e+00 +2.160000000000000037e-10 0.000000000000000000e+00 +2.165000000000000020e-10 0.000000000000000000e+00 +2.170000000000000003e-10 0.000000000000000000e+00 +2.174999999999999986e-10 0.000000000000000000e+00 +2.179999999999999968e-10 0.000000000000000000e+00 +2.184999999999999951e-10 0.000000000000000000e+00 +2.189999999999999934e-10 0.000000000000000000e+00 +2.194999999999999916e-10 0.000000000000000000e+00 +2.199999999999999899e-10 0.000000000000000000e+00 +2.204999999999999882e-10 0.000000000000000000e+00 +2.209999999999999865e-10 0.000000000000000000e+00 +2.214999999999999847e-10 0.000000000000000000e+00 +2.219999999999999830e-10 0.000000000000000000e+00 +2.225000000000000071e-10 0.000000000000000000e+00 +2.230000000000000054e-10 0.000000000000000000e+00 +2.235000000000000037e-10 0.000000000000000000e+00 +2.240000000000000020e-10 0.000000000000000000e+00 +2.245000000000000002e-10 0.000000000000000000e+00 +2.249999999999999985e-10 0.000000000000000000e+00 +2.254999999999999968e-10 0.000000000000000000e+00 +2.259999999999999951e-10 0.000000000000000000e+00 +2.264999999999999933e-10 0.000000000000000000e+00 +2.269999999999999916e-10 0.000000000000000000e+00 +2.274999999999999899e-10 0.000000000000000000e+00 +2.279999999999999881e-10 0.000000000000000000e+00 +2.284999999999999864e-10 0.000000000000000000e+00 +2.289999999999999847e-10 0.000000000000000000e+00 +2.294999999999999830e-10 0.000000000000000000e+00 +2.300000000000000071e-10 0.000000000000000000e+00 +2.305000000000000054e-10 0.000000000000000000e+00 +2.310000000000000036e-10 0.000000000000000000e+00 +2.315000000000000019e-10 0.000000000000000000e+00 +2.320000000000000002e-10 0.000000000000000000e+00 +2.324999999999999985e-10 0.000000000000000000e+00 +2.329999999999999709e-10 0.000000000000000000e+00 +2.335000000000000209e-10 0.000000000000000000e+00 +2.340000000000000191e-10 0.000000000000000000e+00 +2.345000000000000174e-10 0.000000000000000000e+00 +2.350000000000000157e-10 0.000000000000000000e+00 +2.355000000000000139e-10 0.000000000000000000e+00 +2.360000000000000122e-10 0.000000000000000000e+00 +2.365000000000000105e-10 0.000000000000000000e+00 +2.370000000000000088e-10 0.000000000000000000e+00 +2.375000000000000070e-10 0.000000000000000000e+00 +2.380000000000000053e-10 0.000000000000000000e+00 +2.385000000000000036e-10 0.000000000000000000e+00 +2.390000000000000019e-10 0.000000000000000000e+00 +2.395000000000000001e-10 0.000000000000000000e+00 +2.399999999999999984e-10 0.000000000000000000e+00 +2.404999999999999967e-10 0.000000000000000000e+00 +2.409999999999999950e-10 0.000000000000000000e+00 +2.414999999999999932e-10 0.000000000000000000e+00 +2.419999999999999915e-10 0.000000000000000000e+00 +2.424999999999999898e-10 0.000000000000000000e+00 +2.429999999999999880e-10 0.000000000000000000e+00 +2.434999999999999863e-10 0.000000000000000000e+00 +2.439999999999999846e-10 0.000000000000000000e+00 +2.444999999999999829e-10 0.000000000000000000e+00 +2.449999999999999811e-10 0.000000000000000000e+00 +2.454999999999999794e-10 0.000000000000000000e+00 +2.459999999999999777e-10 0.000000000000000000e+00 +2.464999999999999760e-10 0.000000000000000000e+00 +2.469999999999999742e-10 0.000000000000000000e+00 +2.474999999999999725e-10 0.000000000000000000e+00 +2.479999999999999708e-10 0.000000000000000000e+00 +2.485000000000000208e-10 0.000000000000000000e+00 +2.490000000000000190e-10 0.000000000000000000e+00 +2.495000000000000173e-10 0.000000000000000000e+00 +2.500000000000000156e-10 0.000000000000000000e+00 +2.505000000000000138e-10 0.000000000000000000e+00 +2.510000000000000121e-10 0.000000000000000000e+00 +2.515000000000000104e-10 0.000000000000000000e+00 +2.520000000000000087e-10 0.000000000000000000e+00 +2.525000000000000069e-10 0.000000000000000000e+00 +2.530000000000000052e-10 0.000000000000000000e+00 +2.535000000000000035e-10 0.000000000000000000e+00 +2.540000000000000018e-10 0.000000000000000000e+00 +2.545000000000000000e-10 0.000000000000000000e+00 +2.549999999999999983e-10 0.000000000000000000e+00 +2.554999999999999966e-10 0.000000000000000000e+00 +2.559999999999999949e-10 0.000000000000000000e+00 +2.564999999999999931e-10 0.000000000000000000e+00 +2.569999999999999914e-10 0.000000000000000000e+00 +2.574999999999999897e-10 0.000000000000000000e+00 +2.579999999999999879e-10 0.000000000000000000e+00 +2.584999999999999862e-10 0.000000000000000000e+00 +2.589999999999999845e-10 0.000000000000000000e+00 +2.594999999999999828e-10 0.000000000000000000e+00 +2.599999999999999810e-10 0.000000000000000000e+00 +2.604999999999999793e-10 0.000000000000000000e+00 +2.609999999999999776e-10 0.000000000000000000e+00 +2.614999999999999759e-10 0.000000000000000000e+00 +2.619999999999999741e-10 0.000000000000000000e+00 +2.624999999999999724e-10 0.000000000000000000e+00 +2.629999999999999707e-10 0.000000000000000000e+00 +2.634999999999999690e-10 0.000000000000000000e+00 +2.640000000000000189e-10 0.000000000000000000e+00 +2.645000000000000172e-10 0.000000000000000000e+00 +2.650000000000000155e-10 0.000000000000000000e+00 +2.655000000000000137e-10 0.000000000000000000e+00 +2.660000000000000120e-10 0.000000000000000000e+00 +2.665000000000000103e-10 0.000000000000000000e+00 +2.670000000000000086e-10 0.000000000000000000e+00 +2.675000000000000068e-10 0.000000000000000000e+00 +2.680000000000000051e-10 0.000000000000000000e+00 +2.685000000000000034e-10 0.000000000000000000e+00 +2.690000000000000017e-10 0.000000000000000000e+00 +2.694999999999999999e-10 0.000000000000000000e+00 +2.699999999999999982e-10 0.000000000000000000e+00 +2.704999999999999965e-10 0.000000000000000000e+00 +2.709999999999999948e-10 0.000000000000000000e+00 +2.714999999999999930e-10 0.000000000000000000e+00 +2.719999999999999913e-10 0.000000000000000000e+00 +2.724999999999999896e-10 0.000000000000000000e+00 +2.729999999999999878e-10 0.000000000000000000e+00 +2.734999999999999861e-10 0.000000000000000000e+00 +2.739999999999999844e-10 0.000000000000000000e+00 +2.744999999999999827e-10 0.000000000000000000e+00 +2.749999999999999809e-10 0.000000000000000000e+00 +2.754999999999999792e-10 0.000000000000000000e+00 +2.759999999999999775e-10 0.000000000000000000e+00 +2.764999999999999758e-10 0.000000000000000000e+00 +2.769999999999999740e-10 0.000000000000000000e+00 +2.774999999999999723e-10 0.000000000000000000e+00 +2.779999999999999706e-10 0.000000000000000000e+00 +2.784999999999999689e-10 0.000000000000000000e+00 +2.790000000000000188e-10 0.000000000000000000e+00 +2.795000000000000171e-10 0.000000000000000000e+00 +2.800000000000000154e-10 0.000000000000000000e+00 +2.805000000000000136e-10 0.000000000000000000e+00 +2.810000000000000119e-10 0.000000000000000000e+00 +2.815000000000000102e-10 0.000000000000000000e+00 +2.820000000000000085e-10 0.000000000000000000e+00 +2.825000000000000067e-10 0.000000000000000000e+00 +2.830000000000000050e-10 0.000000000000000000e+00 +2.835000000000000033e-10 0.000000000000000000e+00 +2.840000000000000016e-10 0.000000000000000000e+00 +2.844999999999999998e-10 0.000000000000000000e+00 +2.849999999999999981e-10 0.000000000000000000e+00 +2.854999999999999964e-10 0.000000000000000000e+00 +2.859999999999999947e-10 0.000000000000000000e+00 +2.864999999999999929e-10 0.000000000000000000e+00 +2.869999999999999912e-10 0.000000000000000000e+00 +2.874999999999999895e-10 0.000000000000000000e+00 +2.879999999999999877e-10 0.000000000000000000e+00 +2.884999999999999860e-10 0.000000000000000000e+00 +2.889999999999999843e-10 0.000000000000000000e+00 +2.894999999999999826e-10 0.000000000000000000e+00 +2.899999999999999808e-10 0.000000000000000000e+00 +2.904999999999999791e-10 0.000000000000000000e+00 +2.909999999999999774e-10 0.000000000000000000e+00 +2.914999999999999757e-10 0.000000000000000000e+00 +2.919999999999999739e-10 0.000000000000000000e+00 +2.924999999999999722e-10 0.000000000000000000e+00 +2.929999999999999705e-10 0.000000000000000000e+00 +2.934999999999999688e-10 0.000000000000000000e+00 +2.940000000000000187e-10 0.000000000000000000e+00 +2.945000000000000170e-10 0.000000000000000000e+00 +2.950000000000000153e-10 0.000000000000000000e+00 +2.955000000000000135e-10 0.000000000000000000e+00 +2.960000000000000118e-10 0.000000000000000000e+00 +2.965000000000000101e-10 0.000000000000000000e+00 +2.970000000000000084e-10 0.000000000000000000e+00 +2.975000000000000066e-10 0.000000000000000000e+00 +2.980000000000000049e-10 0.000000000000000000e+00 +2.985000000000000032e-10 0.000000000000000000e+00 +2.990000000000000015e-10 0.000000000000000000e+00 +2.994999999999999997e-10 0.000000000000000000e+00 +2.999999999999999980e-10 0.000000000000000000e+00 +3.004999999999999963e-10 0.000000000000000000e+00 +3.009999999999999946e-10 0.000000000000000000e+00 +3.014999999999999928e-10 0.000000000000000000e+00 +3.019999999999999911e-10 0.000000000000000000e+00 +3.024999999999999894e-10 0.000000000000000000e+00 +3.029999999999999876e-10 0.000000000000000000e+00 +3.034999999999999859e-10 0.000000000000000000e+00 +3.039999999999999842e-10 0.000000000000000000e+00 +3.044999999999999825e-10 0.000000000000000000e+00 +3.049999999999999807e-10 0.000000000000000000e+00 +3.054999999999999790e-10 0.000000000000000000e+00 +3.059999999999999773e-10 0.000000000000000000e+00 +3.064999999999999756e-10 0.000000000000000000e+00 +3.069999999999999738e-10 0.000000000000000000e+00 +3.074999999999999721e-10 0.000000000000000000e+00 +3.079999999999999704e-10 0.000000000000000000e+00 +3.084999999999999687e-10 0.000000000000000000e+00 +3.090000000000000186e-10 0.000000000000000000e+00 +3.095000000000000169e-10 0.000000000000000000e+00 +3.100000000000000152e-10 0.000000000000000000e+00 +3.105000000000000134e-10 0.000000000000000000e+00 +3.110000000000000117e-10 0.000000000000000000e+00 +3.115000000000000100e-10 0.000000000000000000e+00 +3.120000000000000083e-10 0.000000000000000000e+00 +3.125000000000000065e-10 0.000000000000000000e+00 +3.130000000000000048e-10 0.000000000000000000e+00 +3.135000000000000031e-10 0.000000000000000000e+00 +3.140000000000000014e-10 0.000000000000000000e+00 +3.144999999999999996e-10 0.000000000000000000e+00 +3.149999999999999979e-10 0.000000000000000000e+00 +3.154999999999999962e-10 0.000000000000000000e+00 +3.159999999999999945e-10 0.000000000000000000e+00 +3.164999999999999927e-10 0.000000000000000000e+00 +3.169999999999999910e-10 0.000000000000000000e+00 +3.174999999999999893e-10 0.000000000000000000e+00 +3.179999999999999875e-10 0.000000000000000000e+00 +3.184999999999999858e-10 0.000000000000000000e+00 +3.189999999999999841e-10 0.000000000000000000e+00 +3.194999999999999824e-10 0.000000000000000000e+00 +3.199999999999999806e-10 0.000000000000000000e+00 +3.204999999999999789e-10 0.000000000000000000e+00 +3.209999999999999772e-10 0.000000000000000000e+00 +3.214999999999999755e-10 0.000000000000000000e+00 +3.219999999999999737e-10 0.000000000000000000e+00 +3.224999999999999720e-10 0.000000000000000000e+00 +3.229999999999999703e-10 0.000000000000000000e+00 +3.234999999999999686e-10 0.000000000000000000e+00 +3.240000000000000185e-10 0.000000000000000000e+00 +3.245000000000000168e-10 0.000000000000000000e+00 +3.250000000000000151e-10 0.000000000000000000e+00 +3.255000000000000133e-10 0.000000000000000000e+00 +3.260000000000000116e-10 0.000000000000000000e+00 +3.265000000000000099e-10 0.000000000000000000e+00 +3.270000000000000082e-10 0.000000000000000000e+00 +3.275000000000000064e-10 0.000000000000000000e+00 +3.280000000000000047e-10 0.000000000000000000e+00 +3.285000000000000030e-10 0.000000000000000000e+00 +3.290000000000000013e-10 0.000000000000000000e+00 +3.294999999999999995e-10 0.000000000000000000e+00 +3.299999999999999978e-10 0.000000000000000000e+00 +3.304999999999999961e-10 0.000000000000000000e+00 +3.309999999999999944e-10 0.000000000000000000e+00 +3.314999999999999926e-10 0.000000000000000000e+00 +3.319999999999999909e-10 0.000000000000000000e+00 +3.324999999999999892e-10 0.000000000000000000e+00 +3.329999999999999874e-10 0.000000000000000000e+00 +3.334999999999999857e-10 0.000000000000000000e+00 +3.339999999999999840e-10 0.000000000000000000e+00 +3.344999999999999823e-10 0.000000000000000000e+00 +3.349999999999999805e-10 0.000000000000000000e+00 +3.354999999999999788e-10 0.000000000000000000e+00 +3.359999999999999771e-10 0.000000000000000000e+00 +3.364999999999999754e-10 0.000000000000000000e+00 +3.369999999999999736e-10 0.000000000000000000e+00 +3.374999999999999719e-10 0.000000000000000000e+00 +3.379999999999999702e-10 0.000000000000000000e+00 +3.384999999999999685e-10 0.000000000000000000e+00 +3.390000000000000184e-10 0.000000000000000000e+00 +3.395000000000000167e-10 0.000000000000000000e+00 +3.400000000000000150e-10 0.000000000000000000e+00 +3.405000000000000132e-10 0.000000000000000000e+00 +3.410000000000000115e-10 0.000000000000000000e+00 +3.415000000000000098e-10 0.000000000000000000e+00 +3.420000000000000081e-10 0.000000000000000000e+00 +3.425000000000000063e-10 0.000000000000000000e+00 +3.430000000000000046e-10 0.000000000000000000e+00 +3.435000000000000029e-10 0.000000000000000000e+00 +3.440000000000000012e-10 0.000000000000000000e+00 +3.444999999999999994e-10 0.000000000000000000e+00 +3.449999999999999977e-10 0.000000000000000000e+00 +3.454999999999999960e-10 0.000000000000000000e+00 +3.459999999999999943e-10 0.000000000000000000e+00 +3.464999999999999925e-10 0.000000000000000000e+00 +3.469999999999999908e-10 0.000000000000000000e+00 +3.474999999999999891e-10 0.000000000000000000e+00 +3.479999999999999873e-10 0.000000000000000000e+00 +3.484999999999999856e-10 0.000000000000000000e+00 +3.489999999999999839e-10 0.000000000000000000e+00 +3.494999999999999822e-10 0.000000000000000000e+00 +3.499999999999999804e-10 0.000000000000000000e+00 +3.504999999999999787e-10 0.000000000000000000e+00 +3.509999999999999770e-10 0.000000000000000000e+00 +3.514999999999999753e-10 0.000000000000000000e+00 +3.519999999999999735e-10 0.000000000000000000e+00 +3.524999999999999718e-10 0.000000000000000000e+00 +3.529999999999999701e-10 0.000000000000000000e+00 +3.534999999999999684e-10 0.000000000000000000e+00 +3.540000000000000183e-10 0.000000000000000000e+00 +3.545000000000000166e-10 0.000000000000000000e+00 +3.550000000000000149e-10 0.000000000000000000e+00 +3.555000000000000131e-10 0.000000000000000000e+00 +3.560000000000000114e-10 0.000000000000000000e+00 +3.565000000000000097e-10 0.000000000000000000e+00 +3.570000000000000080e-10 0.000000000000000000e+00 +3.575000000000000062e-10 0.000000000000000000e+00 +3.580000000000000045e-10 0.000000000000000000e+00 +3.585000000000000028e-10 0.000000000000000000e+00 +3.590000000000000011e-10 0.000000000000000000e+00 +3.594999999999999993e-10 0.000000000000000000e+00 +3.599999999999999976e-10 0.000000000000000000e+00 +3.604999999999999959e-10 0.000000000000000000e+00 +3.609999999999999942e-10 0.000000000000000000e+00 +3.614999999999999924e-10 0.000000000000000000e+00 +3.619999999999999907e-10 0.000000000000000000e+00 +3.624999999999999890e-10 0.000000000000000000e+00 +3.629999999999999872e-10 0.000000000000000000e+00 +3.634999999999999855e-10 0.000000000000000000e+00 +3.639999999999999838e-10 0.000000000000000000e+00 +3.644999999999999821e-10 0.000000000000000000e+00 +3.649999999999999803e-10 0.000000000000000000e+00 +3.654999999999999786e-10 0.000000000000000000e+00 +3.659999999999999769e-10 0.000000000000000000e+00 +3.664999999999999752e-10 0.000000000000000000e+00 +3.669999999999999734e-10 0.000000000000000000e+00 +3.674999999999999717e-10 0.000000000000000000e+00 +3.679999999999999700e-10 0.000000000000000000e+00 +3.684999999999999683e-10 0.000000000000000000e+00 +3.690000000000000182e-10 0.000000000000000000e+00 +3.695000000000000165e-10 0.000000000000000000e+00 +3.700000000000000148e-10 0.000000000000000000e+00 +3.705000000000000130e-10 0.000000000000000000e+00 +3.710000000000000113e-10 0.000000000000000000e+00 +3.715000000000000096e-10 0.000000000000000000e+00 +3.720000000000000079e-10 0.000000000000000000e+00 +3.725000000000000061e-10 0.000000000000000000e+00 +3.730000000000000044e-10 0.000000000000000000e+00 +3.735000000000000027e-10 0.000000000000000000e+00 +3.740000000000000010e-10 0.000000000000000000e+00 +3.744999999999999992e-10 0.000000000000000000e+00 +3.749999999999999975e-10 0.000000000000000000e+00 +3.754999999999999958e-10 0.000000000000000000e+00 +3.759999999999999941e-10 0.000000000000000000e+00 +3.764999999999999923e-10 0.000000000000000000e+00 +3.769999999999999906e-10 0.000000000000000000e+00 +3.774999999999999889e-10 0.000000000000000000e+00 +3.779999999999999871e-10 0.000000000000000000e+00 +3.784999999999999854e-10 0.000000000000000000e+00 +3.789999999999999837e-10 0.000000000000000000e+00 +3.794999999999999820e-10 0.000000000000000000e+00 +3.799999999999999802e-10 0.000000000000000000e+00 +3.804999999999999785e-10 0.000000000000000000e+00 +3.809999999999999768e-10 0.000000000000000000e+00 +3.814999999999999751e-10 0.000000000000000000e+00 +3.819999999999999733e-10 0.000000000000000000e+00 +3.824999999999999716e-10 0.000000000000000000e+00 +3.829999999999999699e-10 0.000000000000000000e+00 +3.834999999999999682e-10 0.000000000000000000e+00 +3.840000000000000181e-10 0.000000000000000000e+00 +3.845000000000000164e-10 0.000000000000000000e+00 +3.850000000000000147e-10 0.000000000000000000e+00 +3.855000000000000129e-10 0.000000000000000000e+00 +3.860000000000000112e-10 0.000000000000000000e+00 +3.865000000000000095e-10 0.000000000000000000e+00 +3.870000000000000078e-10 0.000000000000000000e+00 +3.875000000000000060e-10 0.000000000000000000e+00 +3.880000000000000043e-10 0.000000000000000000e+00 +3.885000000000000026e-10 0.000000000000000000e+00 +3.890000000000000009e-10 0.000000000000000000e+00 +3.894999999999999991e-10 0.000000000000000000e+00 +3.899999999999999974e-10 0.000000000000000000e+00 +3.904999999999999957e-10 0.000000000000000000e+00 +3.909999999999999940e-10 0.000000000000000000e+00 +3.914999999999999922e-10 0.000000000000000000e+00 +3.919999999999999905e-10 0.000000000000000000e+00 +3.924999999999999888e-10 0.000000000000000000e+00 +3.929999999999999870e-10 0.000000000000000000e+00 +3.934999999999999853e-10 0.000000000000000000e+00 +3.939999999999999836e-10 0.000000000000000000e+00 +3.944999999999999819e-10 0.000000000000000000e+00 +3.949999999999999801e-10 0.000000000000000000e+00 +3.954999999999999784e-10 0.000000000000000000e+00 +3.959999999999999767e-10 0.000000000000000000e+00 +3.964999999999999750e-10 0.000000000000000000e+00 +3.969999999999999732e-10 0.000000000000000000e+00 +3.974999999999999715e-10 0.000000000000000000e+00 +3.979999999999999698e-10 0.000000000000000000e+00 +3.984999999999999681e-10 0.000000000000000000e+00 +3.989999999999999663e-10 0.000000000000000000e+00 +3.995000000000000163e-10 0.000000000000000000e+00 +4.000000000000000146e-10 0.000000000000000000e+00 +4.005000000000000128e-10 0.000000000000000000e+00 +4.010000000000000111e-10 0.000000000000000000e+00 +4.015000000000000094e-10 0.000000000000000000e+00 +4.020000000000000077e-10 0.000000000000000000e+00 +4.025000000000000059e-10 0.000000000000000000e+00 +4.030000000000000042e-10 0.000000000000000000e+00 +4.035000000000000025e-10 0.000000000000000000e+00 +4.040000000000000008e-10 0.000000000000000000e+00 +4.044999999999999990e-10 0.000000000000000000e+00 +4.049999999999999973e-10 0.000000000000000000e+00 +4.054999999999999956e-10 0.000000000000000000e+00 +4.059999999999999939e-10 0.000000000000000000e+00 +4.064999999999999921e-10 0.000000000000000000e+00 +4.069999999999999904e-10 0.000000000000000000e+00 +4.074999999999999887e-10 0.000000000000000000e+00 +4.079999999999999869e-10 0.000000000000000000e+00 +4.084999999999999852e-10 0.000000000000000000e+00 +4.089999999999999835e-10 0.000000000000000000e+00 +4.094999999999999818e-10 0.000000000000000000e+00 +4.099999999999999800e-10 0.000000000000000000e+00 +4.104999999999999783e-10 0.000000000000000000e+00 +4.109999999999999766e-10 0.000000000000000000e+00 +4.114999999999999749e-10 0.000000000000000000e+00 +4.119999999999999731e-10 0.000000000000000000e+00 +4.124999999999999714e-10 0.000000000000000000e+00 +4.129999999999999697e-10 0.000000000000000000e+00 +4.134999999999999680e-10 0.000000000000000000e+00 +4.139999999999999662e-10 0.000000000000000000e+00 +4.145000000000000162e-10 0.000000000000000000e+00 +4.150000000000000145e-10 0.000000000000000000e+00 +4.155000000000000127e-10 0.000000000000000000e+00 +4.160000000000000110e-10 0.000000000000000000e+00 +4.165000000000000093e-10 0.000000000000000000e+00 +4.170000000000000076e-10 0.000000000000000000e+00 +4.175000000000000058e-10 0.000000000000000000e+00 +4.180000000000000041e-10 0.000000000000000000e+00 +4.185000000000000024e-10 0.000000000000000000e+00 +4.190000000000000007e-10 0.000000000000000000e+00 +4.194999999999999989e-10 0.000000000000000000e+00 +4.199999999999999972e-10 0.000000000000000000e+00 +4.204999999999999955e-10 0.000000000000000000e+00 +4.209999999999999938e-10 0.000000000000000000e+00 +4.214999999999999920e-10 0.000000000000000000e+00 +4.219999999999999903e-10 0.000000000000000000e+00 +4.224999999999999886e-10 0.000000000000000000e+00 +4.229999999999999868e-10 0.000000000000000000e+00 +4.234999999999999851e-10 0.000000000000000000e+00 +4.239999999999999834e-10 0.000000000000000000e+00 +4.244999999999999817e-10 0.000000000000000000e+00 +4.249999999999999799e-10 0.000000000000000000e+00 +4.254999999999999782e-10 0.000000000000000000e+00 +4.259999999999999765e-10 0.000000000000000000e+00 +4.264999999999999748e-10 0.000000000000000000e+00 +4.269999999999999730e-10 0.000000000000000000e+00 +4.274999999999999713e-10 0.000000000000000000e+00 +4.279999999999999696e-10 0.000000000000000000e+00 +4.284999999999999679e-10 0.000000000000000000e+00 +4.289999999999999661e-10 0.000000000000000000e+00 +4.295000000000000161e-10 0.000000000000000000e+00 +4.300000000000000144e-10 0.000000000000000000e+00 +4.305000000000000126e-10 0.000000000000000000e+00 +4.310000000000000109e-10 0.000000000000000000e+00 +4.315000000000000092e-10 0.000000000000000000e+00 +4.320000000000000075e-10 0.000000000000000000e+00 +4.325000000000000057e-10 0.000000000000000000e+00 +4.330000000000000040e-10 0.000000000000000000e+00 +4.335000000000000023e-10 0.000000000000000000e+00 +4.340000000000000006e-10 0.000000000000000000e+00 +4.344999999999999988e-10 0.000000000000000000e+00 +4.349999999999999971e-10 0.000000000000000000e+00 +4.354999999999999954e-10 0.000000000000000000e+00 +4.359999999999999937e-10 0.000000000000000000e+00 +4.364999999999999919e-10 0.000000000000000000e+00 +4.369999999999999902e-10 0.000000000000000000e+00 +4.374999999999999885e-10 0.000000000000000000e+00 +4.379999999999999867e-10 0.000000000000000000e+00 +4.384999999999999850e-10 0.000000000000000000e+00 +4.389999999999999833e-10 0.000000000000000000e+00 +4.394999999999999816e-10 0.000000000000000000e+00 +4.399999999999999798e-10 0.000000000000000000e+00 +4.404999999999999781e-10 0.000000000000000000e+00 +4.409999999999999764e-10 0.000000000000000000e+00 +4.414999999999999747e-10 0.000000000000000000e+00 +4.419999999999999729e-10 0.000000000000000000e+00 +4.424999999999999712e-10 0.000000000000000000e+00 +4.429999999999999695e-10 0.000000000000000000e+00 +4.434999999999999678e-10 0.000000000000000000e+00 +4.439999999999999660e-10 0.000000000000000000e+00 +4.445000000000000160e-10 0.000000000000000000e+00 +4.450000000000000143e-10 0.000000000000000000e+00 +4.455000000000000125e-10 0.000000000000000000e+00 +4.460000000000000108e-10 0.000000000000000000e+00 +4.465000000000000091e-10 0.000000000000000000e+00 +4.470000000000000074e-10 0.000000000000000000e+00 +4.475000000000000056e-10 0.000000000000000000e+00 +4.480000000000000039e-10 0.000000000000000000e+00 +4.485000000000000022e-10 0.000000000000000000e+00 +4.490000000000000005e-10 0.000000000000000000e+00 +4.494999999999999987e-10 0.000000000000000000e+00 +4.499999999999999970e-10 0.000000000000000000e+00 +4.504999999999999953e-10 0.000000000000000000e+00 +4.509999999999999936e-10 0.000000000000000000e+00 +4.514999999999999918e-10 0.000000000000000000e+00 +4.519999999999999901e-10 0.000000000000000000e+00 +4.524999999999999884e-10 0.000000000000000000e+00 +4.529999999999999866e-10 0.000000000000000000e+00 +4.534999999999999849e-10 0.000000000000000000e+00 +4.539999999999999832e-10 0.000000000000000000e+00 +4.544999999999999815e-10 0.000000000000000000e+00 +4.549999999999999797e-10 0.000000000000000000e+00 +4.554999999999999780e-10 0.000000000000000000e+00 +4.559999999999999763e-10 0.000000000000000000e+00 +4.564999999999999746e-10 0.000000000000000000e+00 +4.569999999999999728e-10 0.000000000000000000e+00 +4.574999999999999711e-10 0.000000000000000000e+00 +4.579999999999999694e-10 0.000000000000000000e+00 +4.584999999999999677e-10 0.000000000000000000e+00 +4.589999999999999659e-10 0.000000000000000000e+00 +4.595000000000000159e-10 0.000000000000000000e+00 +4.600000000000000142e-10 0.000000000000000000e+00 +4.605000000000000124e-10 0.000000000000000000e+00 +4.610000000000000107e-10 0.000000000000000000e+00 +4.615000000000000090e-10 0.000000000000000000e+00 +4.620000000000000073e-10 0.000000000000000000e+00 +4.625000000000000055e-10 0.000000000000000000e+00 +4.630000000000000038e-10 0.000000000000000000e+00 +4.635000000000000021e-10 0.000000000000000000e+00 +4.640000000000000004e-10 0.000000000000000000e+00 +4.644999999999999986e-10 0.000000000000000000e+00 +4.649999999999999969e-10 0.000000000000000000e+00 +4.654999999999999952e-10 0.000000000000000000e+00 +4.659999999999999418e-10 0.000000000000000000e+00 +4.664999999999999917e-10 0.000000000000000000e+00 +4.670000000000000417e-10 0.000000000000000000e+00 +4.674999999999999883e-10 0.000000000000000000e+00 +4.680000000000000382e-10 0.000000000000000000e+00 +4.684999999999999848e-10 0.000000000000000000e+00 +4.690000000000000348e-10 0.000000000000000000e+00 +4.694999999999999814e-10 0.000000000000000000e+00 +4.700000000000000313e-10 0.000000000000000000e+00 +4.704999999999999779e-10 0.000000000000000000e+00 +4.710000000000000279e-10 0.000000000000000000e+00 +4.714999999999999745e-10 0.000000000000000000e+00 +4.720000000000000244e-10 0.000000000000000000e+00 +4.724999999999999710e-10 0.000000000000000000e+00 +4.730000000000000210e-10 0.000000000000000000e+00 +4.734999999999999676e-10 0.000000000000000000e+00 +4.740000000000000175e-10 0.000000000000000000e+00 +4.744999999999999641e-10 0.000000000000000000e+00 +4.750000000000000141e-10 0.000000000000000000e+00 +4.754999999999999606e-10 0.000000000000000000e+00 +4.760000000000000106e-10 0.000000000000000000e+00 +4.764999999999999572e-10 0.000000000000000000e+00 +4.770000000000000072e-10 0.000000000000000000e+00 +4.774999999999999537e-10 0.000000000000000000e+00 +4.780000000000000037e-10 0.000000000000000000e+00 +4.784999999999999503e-10 0.000000000000000000e+00 +4.790000000000000003e-10 0.000000000000000000e+00 +4.794999999999999468e-10 0.000000000000000000e+00 +4.799999999999999968e-10 0.000000000000000000e+00 +4.804999999999999434e-10 0.000000000000000000e+00 +4.809999999999999934e-10 0.000000000000000000e+00 +4.814999999999999399e-10 0.000000000000000000e+00 +4.819999999999999899e-10 0.000000000000000000e+00 +4.825000000000000399e-10 0.000000000000000000e+00 +4.829999999999999864e-10 0.000000000000000000e+00 +4.835000000000000364e-10 0.000000000000000000e+00 +4.839999999999999830e-10 0.000000000000000000e+00 +4.845000000000000330e-10 0.000000000000000000e+00 +4.849999999999999795e-10 0.000000000000000000e+00 +4.855000000000000295e-10 0.000000000000000000e+00 +4.859999999999999761e-10 0.000000000000000000e+00 +4.865000000000000261e-10 0.000000000000000000e+00 +4.869999999999999726e-10 0.000000000000000000e+00 +4.875000000000000226e-10 0.000000000000000000e+00 +4.879999999999999692e-10 0.000000000000000000e+00 +4.885000000000000192e-10 0.000000000000000000e+00 +4.889999999999999657e-10 0.000000000000000000e+00 +4.895000000000000157e-10 0.000000000000000000e+00 +4.899999999999999623e-10 0.000000000000000000e+00 +4.905000000000000122e-10 0.000000000000000000e+00 +4.909999999999999588e-10 0.000000000000000000e+00 +4.915000000000000088e-10 0.000000000000000000e+00 +4.919999999999999554e-10 0.000000000000000000e+00 +4.925000000000000053e-10 0.000000000000000000e+00 +4.929999999999999519e-10 0.000000000000000000e+00 +4.935000000000000019e-10 0.000000000000000000e+00 +4.939999999999999485e-10 0.000000000000000000e+00 +4.944999999999999984e-10 0.000000000000000000e+00 +4.949999999999999450e-10 0.000000000000000000e+00 +4.954999999999999950e-10 0.000000000000000000e+00 +4.959999999999999416e-10 0.000000000000000000e+00 +4.964999999999999915e-10 0.000000000000000000e+00 +4.970000000000000415e-10 0.000000000000000000e+00 +4.974999999999999881e-10 0.000000000000000000e+00 +4.980000000000000380e-10 0.000000000000000000e+00 +4.984999999999999846e-10 0.000000000000000000e+00 +4.990000000000000346e-10 0.000000000000000000e+00 +4.994999999999999812e-10 0.000000000000000000e+00 +5.000000000000000311e-10 0.000000000000000000e+00 +5.004999999999999777e-10 0.000000000000000000e+00 +5.010000000000000277e-10 0.000000000000000000e+00 +5.014999999999999743e-10 0.000000000000000000e+00 +5.020000000000000242e-10 0.000000000000000000e+00 +5.024999999999999708e-10 0.000000000000000000e+00 +5.030000000000000208e-10 0.000000000000000000e+00 +5.034999999999999674e-10 0.000000000000000000e+00 +5.040000000000000173e-10 0.000000000000000000e+00 +5.044999999999999639e-10 0.000000000000000000e+00 +5.050000000000000139e-10 0.000000000000000000e+00 +5.054999999999999604e-10 0.000000000000000000e+00 +5.060000000000000104e-10 0.000000000000000000e+00 +5.064999999999999570e-10 0.000000000000000000e+00 +5.070000000000000070e-10 0.000000000000000000e+00 +5.074999999999999535e-10 0.000000000000000000e+00 +5.080000000000000035e-10 0.000000000000000000e+00 +5.084999999999999501e-10 0.000000000000000000e+00 +5.090000000000000001e-10 0.000000000000000000e+00 +5.094999999999999466e-10 0.000000000000000000e+00 +5.099999999999999966e-10 0.000000000000000000e+00 +5.104999999999999432e-10 0.000000000000000000e+00 +5.109999999999999932e-10 0.000000000000000000e+00 +5.114999999999999397e-10 0.000000000000000000e+00 +5.119999999999999897e-10 0.000000000000000000e+00 +5.125000000000000397e-10 0.000000000000000000e+00 +5.129999999999999862e-10 0.000000000000000000e+00 +5.135000000000000362e-10 0.000000000000000000e+00 +5.139999999999999828e-10 0.000000000000000000e+00 +5.145000000000000328e-10 0.000000000000000000e+00 +5.149999999999999793e-10 0.000000000000000000e+00 +5.155000000000000293e-10 0.000000000000000000e+00 +5.159999999999999759e-10 0.000000000000000000e+00 +5.165000000000000259e-10 0.000000000000000000e+00 +5.169999999999999724e-10 0.000000000000000000e+00 +5.175000000000000224e-10 0.000000000000000000e+00 +5.179999999999999690e-10 0.000000000000000000e+00 +5.185000000000000190e-10 0.000000000000000000e+00 +5.189999999999999655e-10 0.000000000000000000e+00 +5.195000000000000155e-10 0.000000000000000000e+00 +5.199999999999999621e-10 0.000000000000000000e+00 +5.205000000000000120e-10 0.000000000000000000e+00 +5.209999999999999586e-10 0.000000000000000000e+00 +5.215000000000000086e-10 0.000000000000000000e+00 +5.219999999999999552e-10 0.000000000000000000e+00 +5.225000000000000051e-10 0.000000000000000000e+00 +5.229999999999999517e-10 0.000000000000000000e+00 +5.235000000000000017e-10 0.000000000000000000e+00 +5.239999999999999483e-10 0.000000000000000000e+00 +5.244999999999999982e-10 0.000000000000000000e+00 +5.249999999999999448e-10 0.000000000000000000e+00 +5.254999999999999948e-10 0.000000000000000000e+00 +5.259999999999999414e-10 0.000000000000000000e+00 +5.264999999999999913e-10 0.000000000000000000e+00 +5.269999999999999379e-10 0.000000000000000000e+00 +5.274999999999999879e-10 0.000000000000000000e+00 +5.280000000000000378e-10 0.000000000000000000e+00 +5.284999999999999844e-10 0.000000000000000000e+00 +5.290000000000000344e-10 0.000000000000000000e+00 +5.294999999999999810e-10 0.000000000000000000e+00 +5.300000000000000309e-10 0.000000000000000000e+00 +5.304999999999999775e-10 0.000000000000000000e+00 +5.310000000000000275e-10 0.000000000000000000e+00 +5.314999999999999741e-10 0.000000000000000000e+00 +5.320000000000000240e-10 0.000000000000000000e+00 +5.324999999999999706e-10 0.000000000000000000e+00 +5.330000000000000206e-10 0.000000000000000000e+00 +5.334999999999999672e-10 0.000000000000000000e+00 +5.340000000000000171e-10 0.000000000000000000e+00 +5.344999999999999637e-10 0.000000000000000000e+00 +5.350000000000000137e-10 0.000000000000000000e+00 +5.354999999999999602e-10 0.000000000000000000e+00 +5.360000000000000102e-10 0.000000000000000000e+00 +5.364999999999999568e-10 0.000000000000000000e+00 +5.370000000000000068e-10 0.000000000000000000e+00 +5.374999999999999533e-10 0.000000000000000000e+00 +5.380000000000000033e-10 0.000000000000000000e+00 +5.384999999999999499e-10 0.000000000000000000e+00 +5.389999999999999999e-10 0.000000000000000000e+00 +5.394999999999999464e-10 0.000000000000000000e+00 +5.399999999999999964e-10 0.000000000000000000e+00 +5.404999999999999430e-10 0.000000000000000000e+00 +5.409999999999999930e-10 0.000000000000000000e+00 +5.414999999999999395e-10 0.000000000000000000e+00 +5.419999999999999895e-10 0.000000000000000000e+00 +5.425000000000000395e-10 0.000000000000000000e+00 +5.429999999999999860e-10 0.000000000000000000e+00 +5.435000000000000360e-10 0.000000000000000000e+00 +5.439999999999999826e-10 0.000000000000000000e+00 +5.445000000000000326e-10 0.000000000000000000e+00 +5.449999999999999791e-10 0.000000000000000000e+00 +5.455000000000000291e-10 0.000000000000000000e+00 +5.459999999999999757e-10 0.000000000000000000e+00 +5.465000000000000257e-10 0.000000000000000000e+00 +5.469999999999999722e-10 0.000000000000000000e+00 +5.475000000000000222e-10 0.000000000000000000e+00 +5.479999999999999688e-10 0.000000000000000000e+00 +5.485000000000000188e-10 0.000000000000000000e+00 +5.489999999999999653e-10 0.000000000000000000e+00 +5.495000000000000153e-10 0.000000000000000000e+00 +5.499999999999999619e-10 0.000000000000000000e+00 +5.505000000000000118e-10 0.000000000000000000e+00 +5.509999999999999584e-10 0.000000000000000000e+00 +5.515000000000000084e-10 0.000000000000000000e+00 +5.519999999999999550e-10 0.000000000000000000e+00 +5.525000000000000049e-10 0.000000000000000000e+00 +5.529999999999999515e-10 0.000000000000000000e+00 +5.535000000000000015e-10 0.000000000000000000e+00 +5.539999999999999481e-10 0.000000000000000000e+00 +5.544999999999999980e-10 0.000000000000000000e+00 +5.549999999999999446e-10 0.000000000000000000e+00 +5.554999999999999946e-10 0.000000000000000000e+00 +5.559999999999999412e-10 0.000000000000000000e+00 +5.564999999999999911e-10 0.000000000000000000e+00 +5.569999999999999377e-10 0.000000000000000000e+00 +5.574999999999999877e-10 0.000000000000000000e+00 +5.580000000000000376e-10 0.000000000000000000e+00 +5.584999999999999842e-10 0.000000000000000000e+00 +5.590000000000000342e-10 0.000000000000000000e+00 +5.594999999999999808e-10 0.000000000000000000e+00 +5.600000000000000307e-10 0.000000000000000000e+00 +5.604999999999999773e-10 0.000000000000000000e+00 +5.610000000000000273e-10 0.000000000000000000e+00 +5.614999999999999739e-10 0.000000000000000000e+00 +5.620000000000000238e-10 0.000000000000000000e+00 +5.624999999999999704e-10 0.000000000000000000e+00 +5.630000000000000204e-10 0.000000000000000000e+00 +5.634999999999999670e-10 0.000000000000000000e+00 +5.640000000000000169e-10 0.000000000000000000e+00 +5.644999999999999635e-10 0.000000000000000000e+00 +5.650000000000000135e-10 0.000000000000000000e+00 +5.654999999999999601e-10 0.000000000000000000e+00 +5.660000000000000100e-10 0.000000000000000000e+00 +5.664999999999999566e-10 0.000000000000000000e+00 +5.670000000000000066e-10 0.000000000000000000e+00 +5.674999999999999531e-10 0.000000000000000000e+00 +5.680000000000000031e-10 0.000000000000000000e+00 +5.684999999999999497e-10 0.000000000000000000e+00 +5.689999999999999997e-10 0.000000000000000000e+00 +5.694999999999999462e-10 0.000000000000000000e+00 +5.699999999999999962e-10 0.000000000000000000e+00 +5.704999999999999428e-10 0.000000000000000000e+00 +5.709999999999999928e-10 0.000000000000000000e+00 +5.714999999999999393e-10 0.000000000000000000e+00 +5.719999999999999893e-10 0.000000000000000000e+00 +5.725000000000000393e-10 0.000000000000000000e+00 +5.729999999999999858e-10 0.000000000000000000e+00 +5.735000000000000358e-10 0.000000000000000000e+00 +5.739999999999999824e-10 0.000000000000000000e+00 +5.745000000000000324e-10 0.000000000000000000e+00 +5.749999999999999789e-10 0.000000000000000000e+00 +5.755000000000000289e-10 0.000000000000000000e+00 +5.759999999999999755e-10 0.000000000000000000e+00 +5.765000000000000255e-10 0.000000000000000000e+00 +5.769999999999999720e-10 0.000000000000000000e+00 +5.775000000000000220e-10 0.000000000000000000e+00 +5.779999999999999686e-10 0.000000000000000000e+00 +5.785000000000000186e-10 0.000000000000000000e+00 +5.789999999999999651e-10 0.000000000000000000e+00 +5.795000000000000151e-10 0.000000000000000000e+00 +5.799999999999999617e-10 0.000000000000000000e+00 +5.805000000000000116e-10 0.000000000000000000e+00 +5.809999999999999582e-10 0.000000000000000000e+00 +5.815000000000000082e-10 0.000000000000000000e+00 +5.819999999999999548e-10 0.000000000000000000e+00 +5.825000000000000047e-10 0.000000000000000000e+00 +5.829999999999999513e-10 0.000000000000000000e+00 +5.835000000000000013e-10 0.000000000000000000e+00 +5.839999999999999479e-10 0.000000000000000000e+00 +5.844999999999999978e-10 0.000000000000000000e+00 +5.849999999999999444e-10 0.000000000000000000e+00 +5.854999999999999944e-10 0.000000000000000000e+00 +5.859999999999999410e-10 0.000000000000000000e+00 +5.864999999999999909e-10 0.000000000000000000e+00 +5.869999999999999375e-10 0.000000000000000000e+00 +5.874999999999999875e-10 0.000000000000000000e+00 +5.880000000000000374e-10 0.000000000000000000e+00 +5.884999999999999840e-10 0.000000000000000000e+00 +5.890000000000000340e-10 0.000000000000000000e+00 +5.894999999999999806e-10 0.000000000000000000e+00 +5.900000000000000305e-10 0.000000000000000000e+00 +5.904999999999999771e-10 0.000000000000000000e+00 +5.910000000000000271e-10 0.000000000000000000e+00 +5.914999999999999737e-10 0.000000000000000000e+00 +5.920000000000000236e-10 0.000000000000000000e+00 +5.924999999999999702e-10 0.000000000000000000e+00 +5.930000000000000202e-10 0.000000000000000000e+00 +5.934999999999999668e-10 0.000000000000000000e+00 +5.940000000000000167e-10 0.000000000000000000e+00 +5.944999999999999633e-10 0.000000000000000000e+00 +5.950000000000000133e-10 0.000000000000000000e+00 +5.954999999999999599e-10 0.000000000000000000e+00 +5.960000000000000098e-10 0.000000000000000000e+00 +5.964999999999999564e-10 0.000000000000000000e+00 +5.970000000000000064e-10 0.000000000000000000e+00 +5.974999999999999529e-10 0.000000000000000000e+00 +5.980000000000000029e-10 0.000000000000000000e+00 +5.984999999999999495e-10 0.000000000000000000e+00 +5.989999999999999995e-10 0.000000000000000000e+00 +5.994999999999999460e-10 0.000000000000000000e+00 +5.999999999999999960e-10 0.000000000000000000e+00 +6.004999999999999426e-10 0.000000000000000000e+00 +6.009999999999999926e-10 0.000000000000000000e+00 +6.014999999999999391e-10 0.000000000000000000e+00 +6.019999999999999891e-10 0.000000000000000000e+00 +6.025000000000000391e-10 0.000000000000000000e+00 +6.029999999999999857e-10 0.000000000000000000e+00 +6.035000000000000356e-10 0.000000000000000000e+00 +6.039999999999999822e-10 0.000000000000000000e+00 +6.045000000000000322e-10 0.000000000000000000e+00 +6.049999999999999787e-10 0.000000000000000000e+00 +6.055000000000000287e-10 0.000000000000000000e+00 +6.059999999999999753e-10 0.000000000000000000e+00 +6.065000000000000253e-10 0.000000000000000000e+00 +6.069999999999999718e-10 0.000000000000000000e+00 +6.075000000000000218e-10 0.000000000000000000e+00 +6.079999999999999684e-10 0.000000000000000000e+00 +6.085000000000000184e-10 0.000000000000000000e+00 +6.089999999999999649e-10 0.000000000000000000e+00 +6.095000000000000149e-10 0.000000000000000000e+00 +6.099999999999999615e-10 0.000000000000000000e+00 +6.105000000000000114e-10 0.000000000000000000e+00 +6.109999999999999580e-10 0.000000000000000000e+00 +6.115000000000000080e-10 0.000000000000000000e+00 +6.119999999999999546e-10 0.000000000000000000e+00 +6.125000000000000045e-10 0.000000000000000000e+00 +6.129999999999999511e-10 0.000000000000000000e+00 +6.135000000000000011e-10 0.000000000000000000e+00 +6.139999999999999477e-10 0.000000000000000000e+00 +6.144999999999999976e-10 0.000000000000000000e+00 +6.149999999999999442e-10 0.000000000000000000e+00 +6.154999999999999942e-10 0.000000000000000000e+00 +6.159999999999999408e-10 0.000000000000000000e+00 +6.164999999999999907e-10 0.000000000000000000e+00 +6.169999999999999373e-10 0.000000000000000000e+00 +6.174999999999999873e-10 0.000000000000000000e+00 +6.180000000000000372e-10 0.000000000000000000e+00 +6.184999999999999838e-10 0.000000000000000000e+00 +6.190000000000000338e-10 0.000000000000000000e+00 +6.194999999999999804e-10 0.000000000000000000e+00 +6.200000000000000303e-10 0.000000000000000000e+00 +6.204999999999999769e-10 0.000000000000000000e+00 +6.210000000000000269e-10 0.000000000000000000e+00 +6.214999999999999735e-10 0.000000000000000000e+00 +6.220000000000000234e-10 0.000000000000000000e+00 +6.224999999999999700e-10 0.000000000000000000e+00 +6.230000000000000200e-10 0.000000000000000000e+00 +6.234999999999999666e-10 0.000000000000000000e+00 +6.240000000000000165e-10 0.000000000000000000e+00 +6.244999999999999631e-10 0.000000000000000000e+00 +6.250000000000000131e-10 0.000000000000000000e+00 +6.254999999999999597e-10 0.000000000000000000e+00 +6.260000000000000096e-10 0.000000000000000000e+00 +6.264999999999999562e-10 0.000000000000000000e+00 +6.270000000000000062e-10 0.000000000000000000e+00 +6.274999999999999527e-10 0.000000000000000000e+00 +6.280000000000000027e-10 0.000000000000000000e+00 +6.284999999999999493e-10 0.000000000000000000e+00 +6.289999999999999993e-10 0.000000000000000000e+00 +6.294999999999999458e-10 0.000000000000000000e+00 +6.299999999999999958e-10 0.000000000000000000e+00 +6.304999999999999424e-10 0.000000000000000000e+00 +6.309999999999999924e-10 0.000000000000000000e+00 +6.314999999999999389e-10 0.000000000000000000e+00 +6.319999999999999889e-10 0.000000000000000000e+00 +6.325000000000000389e-10 0.000000000000000000e+00 +6.329999999999999855e-10 0.000000000000000000e+00 +6.335000000000000354e-10 0.000000000000000000e+00 +6.339999999999999820e-10 0.000000000000000000e+00 +6.345000000000000320e-10 0.000000000000000000e+00 +6.349999999999999785e-10 0.000000000000000000e+00 +6.355000000000000285e-10 0.000000000000000000e+00 +6.359999999999999751e-10 0.000000000000000000e+00 +6.365000000000000251e-10 0.000000000000000000e+00 +6.369999999999999716e-10 0.000000000000000000e+00 +6.375000000000000216e-10 0.000000000000000000e+00 +6.379999999999999682e-10 0.000000000000000000e+00 +6.385000000000000182e-10 0.000000000000000000e+00 +6.389999999999999647e-10 0.000000000000000000e+00 +6.395000000000000147e-10 0.000000000000000000e+00 +6.399999999999999613e-10 0.000000000000000000e+00 +6.405000000000000113e-10 0.000000000000000000e+00 +6.409999999999999578e-10 0.000000000000000000e+00 +6.415000000000000078e-10 0.000000000000000000e+00 +6.419999999999999544e-10 0.000000000000000000e+00 +6.425000000000000043e-10 0.000000000000000000e+00 +6.429999999999999509e-10 0.000000000000000000e+00 +6.435000000000000009e-10 0.000000000000000000e+00 +6.439999999999999475e-10 0.000000000000000000e+00 +6.444999999999999974e-10 0.000000000000000000e+00 +6.449999999999999440e-10 0.000000000000000000e+00 +6.454999999999999940e-10 0.000000000000000000e+00 +6.459999999999999406e-10 0.000000000000000000e+00 +6.464999999999999905e-10 0.000000000000000000e+00 +6.469999999999999371e-10 0.000000000000000000e+00 +6.474999999999999871e-10 0.000000000000000000e+00 +6.480000000000000370e-10 0.000000000000000000e+00 +6.484999999999999836e-10 0.000000000000000000e+00 +6.490000000000000336e-10 0.000000000000000000e+00 +6.494999999999999802e-10 0.000000000000000000e+00 +6.500000000000000301e-10 0.000000000000000000e+00 +6.504999999999999767e-10 0.000000000000000000e+00 +6.510000000000000267e-10 0.000000000000000000e+00 +6.514999999999999733e-10 0.000000000000000000e+00 +6.520000000000000232e-10 0.000000000000000000e+00 +6.524999999999999698e-10 0.000000000000000000e+00 +6.530000000000000198e-10 0.000000000000000000e+00 +6.534999999999999664e-10 0.000000000000000000e+00 +6.540000000000000163e-10 0.000000000000000000e+00 +6.544999999999999629e-10 0.000000000000000000e+00 +6.550000000000000129e-10 0.000000000000000000e+00 +6.554999999999999595e-10 0.000000000000000000e+00 +6.560000000000000094e-10 0.000000000000000000e+00 +6.564999999999999560e-10 0.000000000000000000e+00 +6.570000000000000060e-10 0.000000000000000000e+00 +6.574999999999999525e-10 0.000000000000000000e+00 +6.580000000000000025e-10 0.000000000000000000e+00 +6.584999999999999491e-10 0.000000000000000000e+00 +6.589999999999999991e-10 0.000000000000000000e+00 +6.594999999999999456e-10 0.000000000000000000e+00 +6.599999999999999956e-10 0.000000000000000000e+00 +6.604999999999999422e-10 0.000000000000000000e+00 +6.609999999999999922e-10 0.000000000000000000e+00 +6.614999999999999387e-10 0.000000000000000000e+00 +6.619999999999999887e-10 0.000000000000000000e+00 +6.624999999999999353e-10 0.000000000000000000e+00 +6.629999999999999853e-10 0.000000000000000000e+00 +6.635000000000000352e-10 0.000000000000000000e+00 +6.639999999999999818e-10 0.000000000000000000e+00 +6.645000000000000318e-10 0.000000000000000000e+00 +6.649999999999999783e-10 0.000000000000000000e+00 +6.655000000000000283e-10 0.000000000000000000e+00 +6.659999999999999749e-10 0.000000000000000000e+00 +6.665000000000000249e-10 0.000000000000000000e+00 +6.669999999999999714e-10 0.000000000000000000e+00 +6.675000000000000214e-10 0.000000000000000000e+00 +6.679999999999999680e-10 0.000000000000000000e+00 +6.685000000000000180e-10 0.000000000000000000e+00 +6.689999999999999645e-10 0.000000000000000000e+00 +6.695000000000000145e-10 0.000000000000000000e+00 +6.699999999999999611e-10 0.000000000000000000e+00 +6.705000000000000111e-10 0.000000000000000000e+00 +6.709999999999999576e-10 0.000000000000000000e+00 +6.715000000000000076e-10 0.000000000000000000e+00 +6.719999999999999542e-10 0.000000000000000000e+00 +6.725000000000000041e-10 0.000000000000000000e+00 +6.729999999999999507e-10 0.000000000000000000e+00 +6.735000000000000007e-10 0.000000000000000000e+00 +6.739999999999999473e-10 0.000000000000000000e+00 +6.744999999999999972e-10 0.000000000000000000e+00 +6.749999999999999438e-10 0.000000000000000000e+00 +6.754999999999999938e-10 0.000000000000000000e+00 +6.759999999999999404e-10 0.000000000000000000e+00 +6.764999999999999903e-10 0.000000000000000000e+00 +6.769999999999999369e-10 0.000000000000000000e+00 +6.774999999999999869e-10 0.000000000000000000e+00 +6.780000000000000369e-10 0.000000000000000000e+00 +6.784999999999999834e-10 0.000000000000000000e+00 +6.790000000000000334e-10 0.000000000000000000e+00 +6.794999999999999800e-10 0.000000000000000000e+00 +6.800000000000000299e-10 0.000000000000000000e+00 +6.804999999999999765e-10 0.000000000000000000e+00 +6.810000000000000265e-10 0.000000000000000000e+00 +6.814999999999999731e-10 0.000000000000000000e+00 +6.820000000000000230e-10 0.000000000000000000e+00 +6.824999999999999696e-10 0.000000000000000000e+00 +6.830000000000000196e-10 0.000000000000000000e+00 +6.834999999999999662e-10 0.000000000000000000e+00 +6.840000000000000161e-10 0.000000000000000000e+00 +6.844999999999999627e-10 0.000000000000000000e+00 +6.850000000000000127e-10 0.000000000000000000e+00 +6.854999999999999593e-10 0.000000000000000000e+00 +6.860000000000000092e-10 0.000000000000000000e+00 +6.864999999999999558e-10 0.000000000000000000e+00 +6.870000000000000058e-10 0.000000000000000000e+00 +6.874999999999999523e-10 0.000000000000000000e+00 +6.880000000000000023e-10 0.000000000000000000e+00 +6.884999999999999489e-10 0.000000000000000000e+00 +6.889999999999999989e-10 0.000000000000000000e+00 +6.894999999999999454e-10 0.000000000000000000e+00 +6.899999999999999954e-10 0.000000000000000000e+00 +6.904999999999999420e-10 0.000000000000000000e+00 +6.909999999999999920e-10 0.000000000000000000e+00 +6.914999999999999385e-10 0.000000000000000000e+00 +6.919999999999999885e-10 0.000000000000000000e+00 +6.924999999999999351e-10 0.000000000000000000e+00 +6.929999999999999851e-10 0.000000000000000000e+00 +6.935000000000000350e-10 0.000000000000000000e+00 +6.939999999999999816e-10 0.000000000000000000e+00 +6.945000000000000316e-10 0.000000000000000000e+00 +6.949999999999999781e-10 0.000000000000000000e+00 +6.955000000000000281e-10 0.000000000000000000e+00 +6.959999999999999747e-10 0.000000000000000000e+00 +6.965000000000000247e-10 0.000000000000000000e+00 +6.969999999999999712e-10 0.000000000000000000e+00 +6.975000000000000212e-10 0.000000000000000000e+00 +6.979999999999999678e-10 0.000000000000000000e+00 +6.985000000000000178e-10 0.000000000000000000e+00 +6.989999999999999643e-10 0.000000000000000000e+00 +6.995000000000000143e-10 0.000000000000000000e+00 +6.999999999999999609e-10 0.000000000000000000e+00 +7.005000000000000109e-10 0.000000000000000000e+00 +7.009999999999999574e-10 0.000000000000000000e+00 +7.015000000000000074e-10 0.000000000000000000e+00 +7.019999999999999540e-10 0.000000000000000000e+00 +7.025000000000000039e-10 0.000000000000000000e+00 +7.029999999999999505e-10 0.000000000000000000e+00 +7.035000000000000005e-10 0.000000000000000000e+00 +7.039999999999999471e-10 0.000000000000000000e+00 +7.044999999999999970e-10 0.000000000000000000e+00 +7.049999999999999436e-10 0.000000000000000000e+00 +7.054999999999999936e-10 0.000000000000000000e+00 +7.059999999999999402e-10 0.000000000000000000e+00 +7.064999999999999901e-10 0.000000000000000000e+00 +7.069999999999999367e-10 0.000000000000000000e+00 +7.074999999999999867e-10 0.000000000000000000e+00 +7.080000000000000367e-10 0.000000000000000000e+00 +7.084999999999999832e-10 0.000000000000000000e+00 +7.090000000000000332e-10 0.000000000000000000e+00 +7.094999999999999798e-10 0.000000000000000000e+00 +7.100000000000000297e-10 0.000000000000000000e+00 +7.104999999999999763e-10 0.000000000000000000e+00 +7.110000000000000263e-10 0.000000000000000000e+00 +7.114999999999999729e-10 0.000000000000000000e+00 +7.120000000000000228e-10 0.000000000000000000e+00 +7.124999999999999694e-10 0.000000000000000000e+00 +7.130000000000000194e-10 0.000000000000000000e+00 +7.134999999999999660e-10 0.000000000000000000e+00 +7.140000000000000159e-10 0.000000000000000000e+00 +7.144999999999999625e-10 0.000000000000000000e+00 +7.150000000000000125e-10 0.000000000000000000e+00 +7.154999999999999591e-10 0.000000000000000000e+00 +7.160000000000000090e-10 0.000000000000000000e+00 +7.164999999999999556e-10 0.000000000000000000e+00 +7.170000000000000056e-10 0.000000000000000000e+00 +7.174999999999999521e-10 0.000000000000000000e+00 +7.180000000000000021e-10 0.000000000000000000e+00 +7.184999999999999487e-10 0.000000000000000000e+00 +7.189999999999999987e-10 0.000000000000000000e+00 +7.194999999999999452e-10 0.000000000000000000e+00 +7.199999999999999952e-10 0.000000000000000000e+00 +7.204999999999999418e-10 0.000000000000000000e+00 +7.209999999999999918e-10 0.000000000000000000e+00 +7.214999999999999383e-10 0.000000000000000000e+00 +7.219999999999999883e-10 0.000000000000000000e+00 +7.224999999999999349e-10 0.000000000000000000e+00 +7.229999999999999849e-10 0.000000000000000000e+00 +7.235000000000000348e-10 0.000000000000000000e+00 +7.239999999999999814e-10 0.000000000000000000e+00 +7.245000000000000314e-10 0.000000000000000000e+00 +7.249999999999999779e-10 0.000000000000000000e+00 +7.255000000000000279e-10 0.000000000000000000e+00 +7.259999999999999745e-10 0.000000000000000000e+00 +7.265000000000000245e-10 0.000000000000000000e+00 +7.269999999999999710e-10 0.000000000000000000e+00 +7.275000000000000210e-10 0.000000000000000000e+00 +7.279999999999999676e-10 0.000000000000000000e+00 +7.285000000000000176e-10 0.000000000000000000e+00 +7.289999999999999641e-10 0.000000000000000000e+00 +7.295000000000000141e-10 0.000000000000000000e+00 +7.299999999999999607e-10 0.000000000000000000e+00 +7.305000000000000107e-10 0.000000000000000000e+00 +7.309999999999999572e-10 0.000000000000000000e+00 +7.315000000000000072e-10 0.000000000000000000e+00 +7.319999999999999538e-10 0.000000000000000000e+00 +7.325000000000000037e-10 0.000000000000000000e+00 +7.329999999999999503e-10 0.000000000000000000e+00 +7.335000000000000003e-10 0.000000000000000000e+00 +7.339999999999999469e-10 0.000000000000000000e+00 +7.344999999999999968e-10 0.000000000000000000e+00 +7.349999999999999434e-10 0.000000000000000000e+00 +7.354999999999999934e-10 0.000000000000000000e+00 +7.359999999999999400e-10 0.000000000000000000e+00 +7.364999999999999899e-10 0.000000000000000000e+00 +7.369999999999999365e-10 0.000000000000000000e+00 +7.374999999999999865e-10 0.000000000000000000e+00 +7.380000000000000365e-10 0.000000000000000000e+00 +7.384999999999999830e-10 0.000000000000000000e+00 +7.390000000000000330e-10 0.000000000000000000e+00 +7.394999999999999796e-10 0.000000000000000000e+00 +7.400000000000000295e-10 0.000000000000000000e+00 +7.404999999999999761e-10 0.000000000000000000e+00 +7.410000000000000261e-10 0.000000000000000000e+00 +7.414999999999999727e-10 0.000000000000000000e+00 +7.420000000000000226e-10 0.000000000000000000e+00 +7.424999999999999692e-10 0.000000000000000000e+00 +7.430000000000000192e-10 0.000000000000000000e+00 +7.434999999999999658e-10 0.000000000000000000e+00 +7.440000000000000157e-10 0.000000000000000000e+00 +7.444999999999999623e-10 0.000000000000000000e+00 +7.450000000000000123e-10 0.000000000000000000e+00 +7.454999999999999589e-10 0.000000000000000000e+00 +7.460000000000000088e-10 0.000000000000000000e+00 +7.464999999999999554e-10 0.000000000000000000e+00 +7.470000000000000054e-10 0.000000000000000000e+00 +7.474999999999999519e-10 0.000000000000000000e+00 +7.480000000000000019e-10 0.000000000000000000e+00 +7.484999999999999485e-10 0.000000000000000000e+00 +7.489999999999999985e-10 0.000000000000000000e+00 +7.494999999999999450e-10 0.000000000000000000e+00 +7.499999999999999950e-10 0.000000000000000000e+00 +7.504999999999999416e-10 0.000000000000000000e+00 +7.509999999999999916e-10 0.000000000000000000e+00 +7.514999999999999381e-10 0.000000000000000000e+00 +7.519999999999999881e-10 0.000000000000000000e+00 +7.524999999999999347e-10 0.000000000000000000e+00 +7.529999999999999847e-10 0.000000000000000000e+00 +7.535000000000000346e-10 0.000000000000000000e+00 +7.539999999999999812e-10 0.000000000000000000e+00 +7.545000000000000312e-10 0.000000000000000000e+00 +7.549999999999999777e-10 0.000000000000000000e+00 +7.555000000000000277e-10 0.000000000000000000e+00 +7.559999999999999743e-10 0.000000000000000000e+00 +7.565000000000000243e-10 0.000000000000000000e+00 +7.569999999999999708e-10 0.000000000000000000e+00 +7.575000000000000208e-10 0.000000000000000000e+00 +7.579999999999999674e-10 0.000000000000000000e+00 +7.585000000000000174e-10 0.000000000000000000e+00 +7.589999999999999639e-10 0.000000000000000000e+00 +7.595000000000000139e-10 0.000000000000000000e+00 +7.599999999999999605e-10 0.000000000000000000e+00 +7.605000000000000105e-10 0.000000000000000000e+00 +7.609999999999999570e-10 0.000000000000000000e+00 +7.615000000000000070e-10 0.000000000000000000e+00 +7.619999999999999536e-10 0.000000000000000000e+00 +7.625000000000000035e-10 0.000000000000000000e+00 +7.629999999999999501e-10 0.000000000000000000e+00 +7.635000000000000001e-10 0.000000000000000000e+00 +7.639999999999999467e-10 0.000000000000000000e+00 +7.644999999999999966e-10 0.000000000000000000e+00 +7.649999999999999432e-10 0.000000000000000000e+00 +7.654999999999999932e-10 0.000000000000000000e+00 +7.659999999999999398e-10 0.000000000000000000e+00 +7.664999999999999897e-10 0.000000000000000000e+00 +7.669999999999999363e-10 0.000000000000000000e+00 +7.674999999999999863e-10 0.000000000000000000e+00 +7.680000000000000363e-10 0.000000000000000000e+00 +7.684999999999999828e-10 0.000000000000000000e+00 +7.690000000000000328e-10 0.000000000000000000e+00 +7.694999999999999794e-10 0.000000000000000000e+00 +7.700000000000000293e-10 0.000000000000000000e+00 +7.704999999999999759e-10 0.000000000000000000e+00 +7.710000000000000259e-10 0.000000000000000000e+00 +7.714999999999999725e-10 0.000000000000000000e+00 +7.720000000000000224e-10 0.000000000000000000e+00 +7.724999999999999690e-10 0.000000000000000000e+00 +7.730000000000000190e-10 0.000000000000000000e+00 +7.734999999999999656e-10 0.000000000000000000e+00 +7.740000000000000155e-10 0.000000000000000000e+00 +7.744999999999999621e-10 0.000000000000000000e+00 +7.750000000000000121e-10 0.000000000000000000e+00 +7.754999999999999587e-10 0.000000000000000000e+00 +7.760000000000000086e-10 0.000000000000000000e+00 +7.764999999999999552e-10 0.000000000000000000e+00 +7.770000000000000052e-10 0.000000000000000000e+00 +7.774999999999999517e-10 0.000000000000000000e+00 +7.780000000000000017e-10 0.000000000000000000e+00 +7.784999999999999483e-10 0.000000000000000000e+00 +7.789999999999999983e-10 0.000000000000000000e+00 +7.794999999999999448e-10 0.000000000000000000e+00 +7.799999999999999948e-10 0.000000000000000000e+00 +7.804999999999999414e-10 0.000000000000000000e+00 +7.809999999999999914e-10 0.000000000000000000e+00 +7.814999999999999379e-10 0.000000000000000000e+00 +7.819999999999999879e-10 0.000000000000000000e+00 +7.824999999999999345e-10 0.000000000000000000e+00 +7.829999999999999845e-10 0.000000000000000000e+00 +7.835000000000000344e-10 0.000000000000000000e+00 +7.839999999999999810e-10 0.000000000000000000e+00 +7.845000000000000310e-10 0.000000000000000000e+00 +7.849999999999999775e-10 0.000000000000000000e+00 +7.855000000000000275e-10 0.000000000000000000e+00 +7.859999999999999741e-10 0.000000000000000000e+00 +7.865000000000000241e-10 0.000000000000000000e+00 +7.869999999999999706e-10 0.000000000000000000e+00 +7.875000000000000206e-10 0.000000000000000000e+00 +7.879999999999999672e-10 0.000000000000000000e+00 +7.885000000000000172e-10 0.000000000000000000e+00 +7.889999999999999637e-10 0.000000000000000000e+00 +7.895000000000000137e-10 0.000000000000000000e+00 +7.899999999999999603e-10 0.000000000000000000e+00 +7.905000000000000103e-10 0.000000000000000000e+00 +7.909999999999999568e-10 0.000000000000000000e+00 +7.915000000000000068e-10 0.000000000000000000e+00 +7.919999999999999534e-10 0.000000000000000000e+00 +7.925000000000000033e-10 0.000000000000000000e+00 +7.929999999999999499e-10 0.000000000000000000e+00 +7.934999999999999999e-10 0.000000000000000000e+00 +7.939999999999999465e-10 0.000000000000000000e+00 +7.944999999999999964e-10 0.000000000000000000e+00 +7.949999999999999430e-10 0.000000000000000000e+00 +7.954999999999999930e-10 0.000000000000000000e+00 +7.959999999999999396e-10 0.000000000000000000e+00 +7.964999999999999895e-10 0.000000000000000000e+00 +7.969999999999999361e-10 0.000000000000000000e+00 +7.974999999999999861e-10 0.000000000000000000e+00 +7.979999999999999327e-10 0.000000000000000000e+00 +7.984999999999999826e-10 0.000000000000000000e+00 +7.990000000000000326e-10 0.000000000000000000e+00 +7.994999999999999792e-10 0.000000000000000000e+00 +8.000000000000000291e-10 0.000000000000000000e+00 +8.004999999999999757e-10 0.000000000000000000e+00 +8.010000000000000257e-10 0.000000000000000000e+00 +8.014999999999999723e-10 0.000000000000000000e+00 +8.020000000000000222e-10 0.000000000000000000e+00 +8.024999999999999688e-10 0.000000000000000000e+00 +8.030000000000000188e-10 0.000000000000000000e+00 +8.034999999999999654e-10 0.000000000000000000e+00 +8.040000000000000153e-10 0.000000000000000000e+00 +8.044999999999999619e-10 0.000000000000000000e+00 +8.050000000000000119e-10 0.000000000000000000e+00 +8.054999999999999585e-10 0.000000000000000000e+00 +8.060000000000000084e-10 0.000000000000000000e+00 +8.064999999999999550e-10 0.000000000000000000e+00 +8.070000000000000050e-10 0.000000000000000000e+00 +8.074999999999999515e-10 0.000000000000000000e+00 +8.080000000000000015e-10 0.000000000000000000e+00 +8.084999999999999481e-10 0.000000000000000000e+00 +8.089999999999999981e-10 0.000000000000000000e+00 +8.094999999999999446e-10 0.000000000000000000e+00 +8.099999999999999946e-10 0.000000000000000000e+00 +8.104999999999999412e-10 0.000000000000000000e+00 +8.109999999999999912e-10 0.000000000000000000e+00 +8.114999999999999377e-10 0.000000000000000000e+00 +8.119999999999999877e-10 0.000000000000000000e+00 +8.124999999999999343e-10 0.000000000000000000e+00 +8.129999999999999843e-10 0.000000000000000000e+00 +8.135000000000000342e-10 0.000000000000000000e+00 +8.139999999999999808e-10 0.000000000000000000e+00 +8.145000000000000308e-10 0.000000000000000000e+00 +8.149999999999999773e-10 0.000000000000000000e+00 +8.155000000000000273e-10 0.000000000000000000e+00 +8.159999999999999739e-10 0.000000000000000000e+00 +8.165000000000000239e-10 0.000000000000000000e+00 +8.169999999999999704e-10 0.000000000000000000e+00 +8.175000000000000204e-10 0.000000000000000000e+00 +8.179999999999999670e-10 0.000000000000000000e+00 +8.185000000000000170e-10 0.000000000000000000e+00 +8.189999999999999635e-10 0.000000000000000000e+00 +8.195000000000000135e-10 0.000000000000000000e+00 +8.199999999999999601e-10 0.000000000000000000e+00 +8.205000000000000101e-10 0.000000000000000000e+00 +8.209999999999999566e-10 0.000000000000000000e+00 +8.215000000000000066e-10 0.000000000000000000e+00 +8.219999999999999532e-10 0.000000000000000000e+00 +8.225000000000000031e-10 0.000000000000000000e+00 +8.229999999999999497e-10 0.000000000000000000e+00 +8.234999999999999997e-10 0.000000000000000000e+00 +8.239999999999999463e-10 0.000000000000000000e+00 +8.244999999999999962e-10 0.000000000000000000e+00 +8.249999999999999428e-10 0.000000000000000000e+00 +8.254999999999999928e-10 0.000000000000000000e+00 +8.259999999999999394e-10 0.000000000000000000e+00 +8.264999999999999893e-10 0.000000000000000000e+00 +8.269999999999999359e-10 0.000000000000000000e+00 +8.274999999999999859e-10 0.000000000000000000e+00 +8.279999999999999325e-10 0.000000000000000000e+00 +8.284999999999999824e-10 0.000000000000000000e+00 +8.290000000000000324e-10 0.000000000000000000e+00 +8.294999999999999790e-10 0.000000000000000000e+00 +8.300000000000000289e-10 0.000000000000000000e+00 +8.304999999999999755e-10 0.000000000000000000e+00 +8.310000000000000255e-10 0.000000000000000000e+00 +8.314999999999999721e-10 0.000000000000000000e+00 +8.320000000000000220e-10 0.000000000000000000e+00 +8.324999999999999686e-10 0.000000000000000000e+00 +8.330000000000000186e-10 0.000000000000000000e+00 +8.334999999999999652e-10 0.000000000000000000e+00 +8.340000000000000151e-10 0.000000000000000000e+00 +8.344999999999999617e-10 0.000000000000000000e+00 +8.350000000000000117e-10 0.000000000000000000e+00 +8.354999999999999583e-10 0.000000000000000000e+00 +8.360000000000000082e-10 0.000000000000000000e+00 +8.364999999999999548e-10 0.000000000000000000e+00 +8.370000000000000048e-10 0.000000000000000000e+00 +8.374999999999999513e-10 0.000000000000000000e+00 +8.380000000000000013e-10 0.000000000000000000e+00 +8.384999999999999479e-10 0.000000000000000000e+00 +8.389999999999999979e-10 0.000000000000000000e+00 +8.394999999999999444e-10 0.000000000000000000e+00 +8.399999999999999944e-10 0.000000000000000000e+00 +8.404999999999999410e-10 0.000000000000000000e+00 +8.409999999999999910e-10 0.000000000000000000e+00 +8.414999999999999375e-10 0.000000000000000000e+00 +8.419999999999999875e-10 0.000000000000000000e+00 +8.424999999999999341e-10 0.000000000000000000e+00 +8.429999999999999841e-10 0.000000000000000000e+00 +8.435000000000000340e-10 0.000000000000000000e+00 +8.439999999999999806e-10 0.000000000000000000e+00 +8.445000000000000306e-10 0.000000000000000000e+00 +8.449999999999999771e-10 0.000000000000000000e+00 +8.455000000000000271e-10 0.000000000000000000e+00 +8.459999999999999737e-10 0.000000000000000000e+00 +8.465000000000000237e-10 0.000000000000000000e+00 +8.469999999999999702e-10 0.000000000000000000e+00 +8.475000000000000202e-10 0.000000000000000000e+00 +8.479999999999999668e-10 0.000000000000000000e+00 +8.485000000000000168e-10 0.000000000000000000e+00 +8.489999999999999633e-10 0.000000000000000000e+00 +8.495000000000000133e-10 0.000000000000000000e+00 +8.499999999999999599e-10 0.000000000000000000e+00 +8.505000000000000099e-10 0.000000000000000000e+00 +8.509999999999999564e-10 0.000000000000000000e+00 +8.515000000000000064e-10 0.000000000000000000e+00 +8.519999999999999530e-10 0.000000000000000000e+00 +8.525000000000000029e-10 0.000000000000000000e+00 +8.529999999999999495e-10 0.000000000000000000e+00 +8.534999999999999995e-10 0.000000000000000000e+00 +8.539999999999999461e-10 0.000000000000000000e+00 +8.544999999999999960e-10 0.000000000000000000e+00 +8.549999999999999426e-10 0.000000000000000000e+00 +8.554999999999999926e-10 0.000000000000000000e+00 +8.559999999999999392e-10 0.000000000000000000e+00 +8.564999999999999891e-10 0.000000000000000000e+00 +8.569999999999999357e-10 0.000000000000000000e+00 +8.574999999999999857e-10 0.000000000000000000e+00 +8.579999999999999323e-10 0.000000000000000000e+00 +8.584999999999999822e-10 0.000000000000000000e+00 +8.590000000000000322e-10 0.000000000000000000e+00 +8.594999999999999788e-10 0.000000000000000000e+00 +8.600000000000000287e-10 0.000000000000000000e+00 +8.604999999999999753e-10 0.000000000000000000e+00 +8.610000000000000253e-10 0.000000000000000000e+00 +8.614999999999999719e-10 0.000000000000000000e+00 +8.620000000000000218e-10 0.000000000000000000e+00 +8.624999999999999684e-10 0.000000000000000000e+00 +8.630000000000000184e-10 0.000000000000000000e+00 +8.634999999999999650e-10 0.000000000000000000e+00 +8.640000000000000149e-10 0.000000000000000000e+00 +8.644999999999999615e-10 0.000000000000000000e+00 +8.650000000000000115e-10 0.000000000000000000e+00 +8.654999999999999581e-10 0.000000000000000000e+00 +8.660000000000000080e-10 0.000000000000000000e+00 +8.664999999999999546e-10 0.000000000000000000e+00 +8.670000000000000046e-10 0.000000000000000000e+00 +8.674999999999999511e-10 0.000000000000000000e+00 +8.680000000000000011e-10 0.000000000000000000e+00 +8.684999999999999477e-10 0.000000000000000000e+00 +8.689999999999999977e-10 0.000000000000000000e+00 +8.694999999999999442e-10 0.000000000000000000e+00 +8.699999999999999942e-10 0.000000000000000000e+00 +8.704999999999999408e-10 0.000000000000000000e+00 +8.709999999999999908e-10 0.000000000000000000e+00 +8.714999999999999373e-10 0.000000000000000000e+00 +8.719999999999999873e-10 0.000000000000000000e+00 +8.724999999999999339e-10 0.000000000000000000e+00 +8.729999999999999839e-10 0.000000000000000000e+00 +8.735000000000000338e-10 0.000000000000000000e+00 +8.739999999999999804e-10 0.000000000000000000e+00 +8.745000000000000304e-10 0.000000000000000000e+00 +8.749999999999999769e-10 0.000000000000000000e+00 +8.755000000000000269e-10 0.000000000000000000e+00 +8.759999999999999735e-10 0.000000000000000000e+00 +8.765000000000000235e-10 0.000000000000000000e+00 +8.769999999999999700e-10 0.000000000000000000e+00 +8.775000000000000200e-10 0.000000000000000000e+00 +8.779999999999999666e-10 0.000000000000000000e+00 +8.785000000000000166e-10 0.000000000000000000e+00 +8.789999999999999631e-10 0.000000000000000000e+00 +8.795000000000000131e-10 0.000000000000000000e+00 +8.799999999999999597e-10 0.000000000000000000e+00 +8.805000000000000097e-10 0.000000000000000000e+00 +8.809999999999999562e-10 0.000000000000000000e+00 +8.815000000000000062e-10 0.000000000000000000e+00 +8.819999999999999528e-10 0.000000000000000000e+00 +8.825000000000000027e-10 0.000000000000000000e+00 +8.829999999999999493e-10 0.000000000000000000e+00 +8.834999999999999993e-10 0.000000000000000000e+00 +8.839999999999999459e-10 0.000000000000000000e+00 +8.844999999999999958e-10 0.000000000000000000e+00 +8.849999999999999424e-10 0.000000000000000000e+00 +8.854999999999999924e-10 0.000000000000000000e+00 +8.859999999999999390e-10 0.000000000000000000e+00 +8.864999999999999889e-10 0.000000000000000000e+00 +8.869999999999999355e-10 0.000000000000000000e+00 +8.874999999999999855e-10 0.000000000000000000e+00 +8.879999999999999321e-10 0.000000000000000000e+00 +8.884999999999999820e-10 0.000000000000000000e+00 +8.890000000000000320e-10 0.000000000000000000e+00 +8.894999999999999786e-10 0.000000000000000000e+00 +8.900000000000000285e-10 0.000000000000000000e+00 +8.904999999999999751e-10 0.000000000000000000e+00 +8.910000000000000251e-10 0.000000000000000000e+00 +8.914999999999999717e-10 0.000000000000000000e+00 +8.920000000000000216e-10 0.000000000000000000e+00 +8.924999999999999682e-10 0.000000000000000000e+00 +8.930000000000000182e-10 0.000000000000000000e+00 +8.934999999999999648e-10 0.000000000000000000e+00 +8.940000000000000147e-10 0.000000000000000000e+00 +8.944999999999999613e-10 0.000000000000000000e+00 +8.950000000000000113e-10 0.000000000000000000e+00 +8.954999999999999579e-10 0.000000000000000000e+00 +8.960000000000000078e-10 0.000000000000000000e+00 +8.964999999999999544e-10 0.000000000000000000e+00 +8.970000000000000044e-10 0.000000000000000000e+00 +8.974999999999999509e-10 0.000000000000000000e+00 +8.980000000000000009e-10 0.000000000000000000e+00 +8.984999999999999475e-10 0.000000000000000000e+00 +8.989999999999999975e-10 0.000000000000000000e+00 +8.994999999999999440e-10 0.000000000000000000e+00 +8.999999999999999940e-10 0.000000000000000000e+00 +9.004999999999999406e-10 0.000000000000000000e+00 +9.009999999999999906e-10 0.000000000000000000e+00 +9.014999999999999371e-10 0.000000000000000000e+00 +9.019999999999999871e-10 0.000000000000000000e+00 +9.024999999999999337e-10 0.000000000000000000e+00 +9.029999999999999837e-10 0.000000000000000000e+00 +9.034999999999999302e-10 0.000000000000000000e+00 +9.039999999999999802e-10 0.000000000000000000e+00 +9.045000000000000302e-10 0.000000000000000000e+00 +9.049999999999999767e-10 0.000000000000000000e+00 +9.055000000000000267e-10 0.000000000000000000e+00 +9.059999999999999733e-10 0.000000000000000000e+00 +9.065000000000000233e-10 0.000000000000000000e+00 +9.069999999999999698e-10 0.000000000000000000e+00 +9.075000000000000198e-10 0.000000000000000000e+00 +9.079999999999999664e-10 0.000000000000000000e+00 +9.085000000000000164e-10 0.000000000000000000e+00 +9.089999999999999629e-10 0.000000000000000000e+00 +9.095000000000000129e-10 0.000000000000000000e+00 +9.099999999999999595e-10 0.000000000000000000e+00 +9.105000000000000095e-10 0.000000000000000000e+00 +9.109999999999999560e-10 0.000000000000000000e+00 +9.115000000000000060e-10 0.000000000000000000e+00 +9.119999999999999526e-10 0.000000000000000000e+00 +9.125000000000000025e-10 0.000000000000000000e+00 +9.129999999999999491e-10 0.000000000000000000e+00 +9.134999999999999991e-10 0.000000000000000000e+00 +9.139999999999999457e-10 0.000000000000000000e+00 +9.144999999999999956e-10 0.000000000000000000e+00 +9.149999999999999422e-10 0.000000000000000000e+00 +9.154999999999999922e-10 0.000000000000000000e+00 +9.159999999999999388e-10 0.000000000000000000e+00 +9.164999999999999887e-10 0.000000000000000000e+00 +9.169999999999999353e-10 0.000000000000000000e+00 +9.174999999999999853e-10 0.000000000000000000e+00 +9.179999999999999319e-10 0.000000000000000000e+00 +9.184999999999999818e-10 0.000000000000000000e+00 +9.190000000000000318e-10 0.000000000000000000e+00 +9.194999999999999784e-10 0.000000000000000000e+00 +9.200000000000000283e-10 0.000000000000000000e+00 +9.204999999999999749e-10 0.000000000000000000e+00 +9.210000000000000249e-10 0.000000000000000000e+00 +9.214999999999999715e-10 0.000000000000000000e+00 +9.220000000000000214e-10 0.000000000000000000e+00 +9.224999999999999680e-10 0.000000000000000000e+00 +9.230000000000000180e-10 0.000000000000000000e+00 +9.234999999999999646e-10 0.000000000000000000e+00 +9.240000000000000145e-10 0.000000000000000000e+00 +9.244999999999999611e-10 0.000000000000000000e+00 +9.250000000000000111e-10 0.000000000000000000e+00 +9.254999999999999577e-10 0.000000000000000000e+00 +9.260000000000000076e-10 0.000000000000000000e+00 +9.264999999999999542e-10 0.000000000000000000e+00 +9.270000000000000042e-10 0.000000000000000000e+00 +9.274999999999999507e-10 0.000000000000000000e+00 +9.280000000000000007e-10 0.000000000000000000e+00 +9.284999999999999473e-10 0.000000000000000000e+00 +9.289999999999999973e-10 0.000000000000000000e+00 +9.294999999999999438e-10 0.000000000000000000e+00 +9.299999999999999938e-10 0.000000000000000000e+00 +9.304999999999999404e-10 0.000000000000000000e+00 +9.309999999999999904e-10 0.000000000000000000e+00 +9.314999999999999369e-10 0.000000000000000000e+00 +9.319999999999998835e-10 0.000000000000000000e+00 +9.325000000000000369e-10 0.000000000000000000e+00 +9.329999999999999835e-10 0.000000000000000000e+00 +9.334999999999999300e-10 0.000000000000000000e+00 +9.340000000000000834e-10 0.000000000000000000e+00 +9.345000000000000300e-10 0.000000000000000000e+00 +9.349999999999999765e-10 0.000000000000000000e+00 +9.354999999999999231e-10 0.000000000000000000e+00 +9.360000000000000765e-10 0.000000000000000000e+00 +9.365000000000000231e-10 0.000000000000000000e+00 +9.369999999999999696e-10 0.000000000000000000e+00 +9.374999999999999162e-10 0.000000000000000000e+00 +9.380000000000000696e-10 0.000000000000000000e+00 +9.385000000000000162e-10 0.000000000000000000e+00 +9.389999999999999627e-10 0.000000000000000000e+00 +9.394999999999999093e-10 0.000000000000000000e+00 +9.400000000000000627e-10 0.000000000000000000e+00 +9.405000000000000093e-10 0.000000000000000000e+00 +9.409999999999999558e-10 0.000000000000000000e+00 +9.414999999999999024e-10 0.000000000000000000e+00 +9.420000000000000558e-10 0.000000000000000000e+00 +9.425000000000000023e-10 0.000000000000000000e+00 +9.429999999999999489e-10 0.000000000000000000e+00 +9.434999999999998955e-10 0.000000000000000000e+00 +9.440000000000000489e-10 0.000000000000000000e+00 +9.444999999999999954e-10 0.000000000000000000e+00 +9.449999999999999420e-10 0.000000000000000000e+00 +9.454999999999998886e-10 0.000000000000000000e+00 +9.460000000000000420e-10 0.000000000000000000e+00 +9.464999999999999885e-10 0.000000000000000000e+00 +9.469999999999999351e-10 0.000000000000000000e+00 +9.474999999999998817e-10 0.000000000000000000e+00 +9.480000000000000351e-10 0.000000000000000000e+00 +9.484999999999999816e-10 0.000000000000000000e+00 +9.489999999999999282e-10 0.000000000000000000e+00 +9.495000000000000816e-10 0.000000000000000000e+00 +9.500000000000000281e-10 0.000000000000000000e+00 +9.504999999999999747e-10 0.000000000000000000e+00 +9.509999999999999213e-10 0.000000000000000000e+00 +9.515000000000000747e-10 0.000000000000000000e+00 +9.520000000000000212e-10 0.000000000000000000e+00 +9.524999999999999678e-10 0.000000000000000000e+00 +9.529999999999999144e-10 0.000000000000000000e+00 +9.535000000000000678e-10 0.000000000000000000e+00 +9.540000000000000143e-10 0.000000000000000000e+00 +9.544999999999999609e-10 0.000000000000000000e+00 +9.549999999999999075e-10 0.000000000000000000e+00 +9.555000000000000609e-10 0.000000000000000000e+00 +9.560000000000000074e-10 0.000000000000000000e+00 +9.564999999999999540e-10 0.000000000000000000e+00 +9.569999999999999006e-10 0.000000000000000000e+00 +9.575000000000000539e-10 0.000000000000000000e+00 +9.580000000000000005e-10 0.000000000000000000e+00 +9.584999999999999471e-10 0.000000000000000000e+00 +9.589999999999998937e-10 0.000000000000000000e+00 +9.595000000000000470e-10 0.000000000000000000e+00 +9.599999999999999936e-10 0.000000000000000000e+00 +9.604999999999999402e-10 0.000000000000000000e+00 +9.609999999999998868e-10 0.000000000000000000e+00 +9.615000000000000401e-10 0.000000000000000000e+00 +9.619999999999999867e-10 0.000000000000000000e+00 +9.624999999999999333e-10 0.000000000000000000e+00 +9.629999999999998799e-10 0.000000000000000000e+00 +9.635000000000000332e-10 0.000000000000000000e+00 +9.639999999999999798e-10 0.000000000000000000e+00 +9.644999999999999264e-10 0.000000000000000000e+00 +9.650000000000000797e-10 0.000000000000000000e+00 +9.655000000000000263e-10 0.000000000000000000e+00 +9.659999999999999729e-10 0.000000000000000000e+00 +9.664999999999999195e-10 0.000000000000000000e+00 +9.670000000000000728e-10 0.000000000000000000e+00 +9.675000000000000194e-10 0.000000000000000000e+00 +9.679999999999999660e-10 0.000000000000000000e+00 +9.684999999999999126e-10 0.000000000000000000e+00 +9.690000000000000659e-10 0.000000000000000000e+00 +9.695000000000000125e-10 0.000000000000000000e+00 +9.699999999999999591e-10 0.000000000000000000e+00 +9.704999999999999057e-10 0.000000000000000000e+00 +9.710000000000000590e-10 0.000000000000000000e+00 +9.715000000000000056e-10 0.000000000000000000e+00 +9.719999999999999522e-10 0.000000000000000000e+00 +9.724999999999998988e-10 0.000000000000000000e+00 +9.730000000000000521e-10 0.000000000000000000e+00 +9.734999999999999987e-10 0.000000000000000000e+00 +9.739999999999999453e-10 0.000000000000000000e+00 +9.744999999999998918e-10 0.000000000000000000e+00 +9.750000000000000452e-10 0.000000000000000000e+00 +9.754999999999999918e-10 0.000000000000000000e+00 +9.759999999999999384e-10 0.000000000000000000e+00 +9.764999999999998849e-10 0.000000000000000000e+00 +9.770000000000000383e-10 0.000000000000000000e+00 +9.774999999999999849e-10 0.000000000000000000e+00 +9.779999999999999315e-10 0.000000000000000000e+00 +9.784999999999998780e-10 0.000000000000000000e+00 +9.790000000000000314e-10 0.000000000000000000e+00 +9.794999999999999780e-10 0.000000000000000000e+00 +9.799999999999999246e-10 0.000000000000000000e+00 +9.805000000000000779e-10 0.000000000000000000e+00 +9.810000000000000245e-10 0.000000000000000000e+00 +9.814999999999999711e-10 0.000000000000000000e+00 +9.819999999999999176e-10 0.000000000000000000e+00 +9.825000000000000710e-10 0.000000000000000000e+00 +9.830000000000000176e-10 0.000000000000000000e+00 +9.834999999999999642e-10 0.000000000000000000e+00 +9.839999999999999107e-10 0.000000000000000000e+00 +9.845000000000000641e-10 0.000000000000000000e+00 +9.850000000000000107e-10 0.000000000000000000e+00 +9.854999999999999573e-10 0.000000000000000000e+00 +9.859999999999999038e-10 0.000000000000000000e+00 +9.865000000000000572e-10 0.000000000000000000e+00 +9.870000000000000038e-10 0.000000000000000000e+00 +9.874999999999999504e-10 0.000000000000000000e+00 +9.879999999999998969e-10 0.000000000000000000e+00 +9.885000000000000503e-10 0.000000000000000000e+00 +9.889999999999999969e-10 0.000000000000000000e+00 +9.894999999999999434e-10 0.000000000000000000e+00 +9.899999999999998900e-10 0.000000000000000000e+00 +9.905000000000000434e-10 0.000000000000000000e+00 +9.909999999999999900e-10 0.000000000000000000e+00 +9.914999999999999365e-10 0.000000000000000000e+00 +9.919999999999998831e-10 0.000000000000000000e+00 +9.925000000000000365e-10 0.000000000000000000e+00 +9.929999999999999831e-10 0.000000000000000000e+00 +9.934999999999999296e-10 0.000000000000000000e+00 +9.940000000000000830e-10 0.000000000000000000e+00 +9.945000000000000296e-10 0.000000000000000000e+00 +9.949999999999999762e-10 0.000000000000000000e+00 +9.954999999999999227e-10 0.000000000000000000e+00 +9.960000000000000761e-10 0.000000000000000000e+00 +9.965000000000000227e-10 0.000000000000000000e+00 +9.969999999999999692e-10 0.000000000000000000e+00 +9.974999999999999158e-10 0.000000000000000000e+00 +9.980000000000000692e-10 0.000000000000000000e+00 +9.985000000000000158e-10 0.000000000000000000e+00 +9.989999999999999623e-10 0.000000000000000000e+00 +9.994999999999999089e-10 0.000000000000000000e+00 +1.000000000000000062e-09 0.000000000000000000e+00 +1.000500000000000009e-09 0.000000000000000000e+00 +1.000999999999999955e-09 0.000000000000000000e+00 +1.001499999999999902e-09 0.000000000000000000e+00 +1.002000000000000055e-09 0.000000000000000000e+00 +1.002500000000000002e-09 0.000000000000000000e+00 +1.002999999999999949e-09 0.000000000000000000e+00 +1.003499999999999895e-09 0.000000000000000000e+00 +1.004000000000000048e-09 0.000000000000000000e+00 +1.004499999999999995e-09 0.000000000000000000e+00 +1.004999999999999942e-09 0.000000000000000000e+00 +1.005499999999999888e-09 0.000000000000000000e+00 +1.006000000000000042e-09 0.000000000000000000e+00 +1.006499999999999988e-09 0.000000000000000000e+00 +1.006999999999999935e-09 0.000000000000000000e+00 +1.007499999999999881e-09 0.000000000000000000e+00 +1.008000000000000035e-09 0.000000000000000000e+00 +1.008499999999999981e-09 0.000000000000000000e+00 +1.008999999999999928e-09 0.000000000000000000e+00 +1.009500000000000081e-09 0.000000000000000000e+00 +1.010000000000000028e-09 0.000000000000000000e+00 +1.010499999999999974e-09 0.000000000000000000e+00 +1.010999999999999921e-09 0.000000000000000000e+00 +1.011500000000000074e-09 0.000000000000000000e+00 +1.012000000000000021e-09 0.000000000000000000e+00 +1.012499999999999967e-09 0.000000000000000000e+00 +1.012999999999999914e-09 0.000000000000000000e+00 +1.013500000000000067e-09 0.000000000000000000e+00 +1.014000000000000014e-09 0.000000000000000000e+00 +1.014499999999999961e-09 0.000000000000000000e+00 +1.014999999999999907e-09 0.000000000000000000e+00 +1.015500000000000060e-09 0.000000000000000000e+00 +1.016000000000000007e-09 0.000000000000000000e+00 +1.016499999999999954e-09 0.000000000000000000e+00 +1.016999999999999900e-09 0.000000000000000000e+00 +1.017500000000000054e-09 0.000000000000000000e+00 +1.018000000000000000e-09 0.000000000000000000e+00 +1.018499999999999947e-09 0.000000000000000000e+00 +1.018999999999999893e-09 0.000000000000000000e+00 +1.019500000000000047e-09 0.000000000000000000e+00 +1.019999999999999993e-09 0.000000000000000000e+00 +1.020499999999999940e-09 0.000000000000000000e+00 +1.020999999999999886e-09 0.000000000000000000e+00 +1.021500000000000040e-09 0.000000000000000000e+00 +1.021999999999999986e-09 0.000000000000000000e+00 +1.022499999999999933e-09 0.000000000000000000e+00 +1.022999999999999879e-09 0.000000000000000000e+00 +1.023500000000000033e-09 0.000000000000000000e+00 +1.023999999999999979e-09 0.000000000000000000e+00 +1.024499999999999926e-09 0.000000000000000000e+00 +1.025000000000000079e-09 0.000000000000000000e+00 +1.025500000000000026e-09 0.000000000000000000e+00 +1.025999999999999972e-09 0.000000000000000000e+00 +1.026499999999999919e-09 0.000000000000000000e+00 +1.027000000000000072e-09 0.000000000000000000e+00 +1.027500000000000019e-09 0.000000000000000000e+00 +1.027999999999999966e-09 0.000000000000000000e+00 +1.028499999999999912e-09 0.000000000000000000e+00 +1.029000000000000066e-09 0.000000000000000000e+00 +1.029500000000000012e-09 0.000000000000000000e+00 +1.029999999999999959e-09 0.000000000000000000e+00 +1.030499999999999905e-09 0.000000000000000000e+00 +1.031000000000000059e-09 0.000000000000000000e+00 +1.031500000000000005e-09 0.000000000000000000e+00 +1.031999999999999952e-09 0.000000000000000000e+00 +1.032499999999999898e-09 0.000000000000000000e+00 +1.033000000000000052e-09 0.000000000000000000e+00 +1.033499999999999998e-09 0.000000000000000000e+00 +1.033999999999999945e-09 0.000000000000000000e+00 +1.034499999999999891e-09 0.000000000000000000e+00 +1.035000000000000045e-09 0.000000000000000000e+00 +1.035499999999999991e-09 0.000000000000000000e+00 +1.035999999999999938e-09 0.000000000000000000e+00 +1.036499999999999885e-09 0.000000000000000000e+00 +1.037000000000000038e-09 0.000000000000000000e+00 +1.037499999999999984e-09 0.000000000000000000e+00 +1.037999999999999931e-09 0.000000000000000000e+00 +1.038499999999999878e-09 0.000000000000000000e+00 +1.039000000000000031e-09 0.000000000000000000e+00 +1.039499999999999978e-09 0.000000000000000000e+00 +1.039999999999999924e-09 0.000000000000000000e+00 +1.040500000000000078e-09 0.000000000000000000e+00 +1.041000000000000024e-09 0.000000000000000000e+00 +1.041499999999999971e-09 0.000000000000000000e+00 +1.041999999999999917e-09 0.000000000000000000e+00 +1.042500000000000071e-09 0.000000000000000000e+00 +1.043000000000000017e-09 0.000000000000000000e+00 +1.043499999999999964e-09 0.000000000000000000e+00 +1.043999999999999910e-09 0.000000000000000000e+00 +1.044500000000000064e-09 0.000000000000000000e+00 +1.045000000000000010e-09 0.000000000000000000e+00 +1.045499999999999957e-09 0.000000000000000000e+00 +1.045999999999999903e-09 0.000000000000000000e+00 +1.046500000000000057e-09 0.000000000000000000e+00 +1.047000000000000003e-09 0.000000000000000000e+00 +1.047499999999999950e-09 0.000000000000000000e+00 +1.047999999999999897e-09 0.000000000000000000e+00 +1.048500000000000050e-09 0.000000000000000000e+00 +1.048999999999999996e-09 0.000000000000000000e+00 +1.049499999999999943e-09 0.000000000000000000e+00 +1.049999999999999890e-09 0.000000000000000000e+00 +1.050500000000000043e-09 0.000000000000000000e+00 +1.050999999999999990e-09 0.000000000000000000e+00 +1.051499999999999936e-09 0.000000000000000000e+00 +1.051999999999999883e-09 0.000000000000000000e+00 +1.052500000000000036e-09 0.000000000000000000e+00 +1.052999999999999983e-09 0.000000000000000000e+00 +1.053499999999999929e-09 0.000000000000000000e+00 +1.053999999999999876e-09 0.000000000000000000e+00 +1.054500000000000029e-09 0.000000000000000000e+00 +1.054999999999999976e-09 0.000000000000000000e+00 +1.055499999999999922e-09 0.000000000000000000e+00 +1.056000000000000076e-09 0.000000000000000000e+00 +1.056500000000000022e-09 0.000000000000000000e+00 +1.056999999999999969e-09 0.000000000000000000e+00 +1.057499999999999915e-09 0.000000000000000000e+00 +1.058000000000000069e-09 0.000000000000000000e+00 +1.058500000000000015e-09 0.000000000000000000e+00 +1.058999999999999962e-09 0.000000000000000000e+00 +1.059499999999999909e-09 0.000000000000000000e+00 +1.060000000000000062e-09 0.000000000000000000e+00 +1.060500000000000008e-09 0.000000000000000000e+00 +1.060999999999999955e-09 0.000000000000000000e+00 +1.061499999999999902e-09 0.000000000000000000e+00 +1.062000000000000055e-09 0.000000000000000000e+00 +1.062500000000000002e-09 0.000000000000000000e+00 +1.062999999999999948e-09 0.000000000000000000e+00 +1.063499999999999895e-09 0.000000000000000000e+00 +1.064000000000000048e-09 0.000000000000000000e+00 +1.064499999999999995e-09 0.000000000000000000e+00 +1.064999999999999941e-09 0.000000000000000000e+00 +1.065499999999999888e-09 0.000000000000000000e+00 +1.066000000000000041e-09 0.000000000000000000e+00 +1.066499999999999988e-09 0.000000000000000000e+00 +1.066999999999999934e-09 0.000000000000000000e+00 +1.067499999999999881e-09 0.000000000000000000e+00 +1.068000000000000034e-09 0.000000000000000000e+00 +1.068499999999999981e-09 0.000000000000000000e+00 +1.068999999999999927e-09 0.000000000000000000e+00 +1.069500000000000081e-09 0.000000000000000000e+00 +1.070000000000000027e-09 0.000000000000000000e+00 +1.070499999999999974e-09 0.000000000000000000e+00 +1.070999999999999920e-09 0.000000000000000000e+00 +1.071500000000000074e-09 0.000000000000000000e+00 +1.072000000000000020e-09 0.000000000000000000e+00 +1.072499999999999967e-09 0.000000000000000000e+00 +1.072999999999999914e-09 0.000000000000000000e+00 +1.073500000000000067e-09 0.000000000000000000e+00 +1.074000000000000014e-09 0.000000000000000000e+00 +1.074499999999999960e-09 0.000000000000000000e+00 +1.074999999999999907e-09 0.000000000000000000e+00 +1.075500000000000060e-09 0.000000000000000000e+00 +1.076000000000000007e-09 0.000000000000000000e+00 +1.076499999999999953e-09 0.000000000000000000e+00 +1.076999999999999900e-09 0.000000000000000000e+00 +1.077500000000000053e-09 0.000000000000000000e+00 +1.078000000000000000e-09 0.000000000000000000e+00 +1.078499999999999946e-09 0.000000000000000000e+00 +1.078999999999999893e-09 0.000000000000000000e+00 +1.079500000000000046e-09 0.000000000000000000e+00 +1.079999999999999993e-09 0.000000000000000000e+00 +1.080499999999999939e-09 0.000000000000000000e+00 +1.080999999999999886e-09 0.000000000000000000e+00 +1.081500000000000039e-09 0.000000000000000000e+00 +1.081999999999999986e-09 0.000000000000000000e+00 +1.082499999999999932e-09 0.000000000000000000e+00 +1.082999999999999879e-09 0.000000000000000000e+00 +1.083500000000000032e-09 0.000000000000000000e+00 +1.083999999999999979e-09 0.000000000000000000e+00 +1.084499999999999926e-09 0.000000000000000000e+00 +1.085000000000000079e-09 0.000000000000000000e+00 +1.085500000000000026e-09 0.000000000000000000e+00 +1.085999999999999972e-09 0.000000000000000000e+00 +1.086499999999999919e-09 0.000000000000000000e+00 +1.087000000000000072e-09 0.000000000000000000e+00 +1.087500000000000019e-09 0.000000000000000000e+00 +1.087999999999999965e-09 0.000000000000000000e+00 +1.088499999999999912e-09 0.000000000000000000e+00 +1.089000000000000065e-09 0.000000000000000000e+00 +1.089500000000000012e-09 0.000000000000000000e+00 +1.089999999999999958e-09 0.000000000000000000e+00 +1.090499999999999905e-09 0.000000000000000000e+00 +1.091000000000000058e-09 0.000000000000000000e+00 +1.091500000000000005e-09 0.000000000000000000e+00 +1.091999999999999951e-09 0.000000000000000000e+00 +1.092499999999999898e-09 0.000000000000000000e+00 +1.093000000000000051e-09 0.000000000000000000e+00 +1.093499999999999998e-09 0.000000000000000000e+00 +1.093999999999999944e-09 0.000000000000000000e+00 +1.094499999999999891e-09 0.000000000000000000e+00 +1.095000000000000044e-09 0.000000000000000000e+00 +1.095499999999999991e-09 0.000000000000000000e+00 +1.095999999999999938e-09 0.000000000000000000e+00 +1.096499999999999884e-09 0.000000000000000000e+00 +1.097000000000000038e-09 0.000000000000000000e+00 +1.097499999999999984e-09 0.000000000000000000e+00 +1.097999999999999931e-09 0.000000000000000000e+00 +1.098499999999999877e-09 0.000000000000000000e+00 +1.099000000000000031e-09 0.000000000000000000e+00 +1.099499999999999977e-09 0.000000000000000000e+00 +1.099999999999999924e-09 0.000000000000000000e+00 +1.100500000000000077e-09 0.000000000000000000e+00 +1.101000000000000024e-09 0.000000000000000000e+00 +1.101499999999999970e-09 0.000000000000000000e+00 +1.101999999999999917e-09 0.000000000000000000e+00 +1.102500000000000070e-09 0.000000000000000000e+00 +1.103000000000000017e-09 0.000000000000000000e+00 +1.103499999999999963e-09 0.000000000000000000e+00 +1.103999999999999910e-09 0.000000000000000000e+00 +1.104500000000000063e-09 0.000000000000000000e+00 +1.105000000000000010e-09 0.000000000000000000e+00 +1.105499999999999956e-09 0.000000000000000000e+00 +1.105999999999999903e-09 0.000000000000000000e+00 +1.106500000000000056e-09 0.000000000000000000e+00 +1.107000000000000003e-09 0.000000000000000000e+00 +1.107499999999999950e-09 0.000000000000000000e+00 +1.107999999999999896e-09 0.000000000000000000e+00 +1.108500000000000049e-09 0.000000000000000000e+00 +1.108999999999999996e-09 0.000000000000000000e+00 +1.109499999999999943e-09 0.000000000000000000e+00 +1.109999999999999889e-09 0.000000000000000000e+00 +1.110500000000000043e-09 0.000000000000000000e+00 +1.110999999999999989e-09 0.000000000000000000e+00 +1.111499999999999936e-09 0.000000000000000000e+00 +1.111999999999999882e-09 0.000000000000000000e+00 +1.112500000000000036e-09 0.000000000000000000e+00 +1.112999999999999982e-09 0.000000000000000000e+00 +1.113499999999999929e-09 0.000000000000000000e+00 +1.113999999999999875e-09 0.000000000000000000e+00 +1.114500000000000029e-09 0.000000000000000000e+00 +1.114999999999999975e-09 0.000000000000000000e+00 +1.115499999999999922e-09 0.000000000000000000e+00 +1.116000000000000075e-09 0.000000000000000000e+00 +1.116500000000000022e-09 0.000000000000000000e+00 +1.116999999999999968e-09 0.000000000000000000e+00 +1.117499999999999915e-09 0.000000000000000000e+00 +1.118000000000000068e-09 0.000000000000000000e+00 +1.118500000000000015e-09 0.000000000000000000e+00 +1.118999999999999962e-09 0.000000000000000000e+00 +1.119499999999999908e-09 0.000000000000000000e+00 +1.120000000000000061e-09 0.000000000000000000e+00 +1.120500000000000008e-09 0.000000000000000000e+00 +1.120999999999999955e-09 0.000000000000000000e+00 +1.121499999999999901e-09 0.000000000000000000e+00 +1.122000000000000055e-09 0.000000000000000000e+00 +1.122500000000000001e-09 0.000000000000000000e+00 +1.122999999999999948e-09 0.000000000000000000e+00 +1.123499999999999894e-09 0.000000000000000000e+00 +1.124000000000000048e-09 0.000000000000000000e+00 +1.124499999999999994e-09 0.000000000000000000e+00 +1.124999999999999941e-09 0.000000000000000000e+00 +1.125499999999999887e-09 0.000000000000000000e+00 +1.126000000000000041e-09 0.000000000000000000e+00 +1.126499999999999987e-09 0.000000000000000000e+00 +1.126999999999999934e-09 0.000000000000000000e+00 +1.127499999999999880e-09 0.000000000000000000e+00 +1.128000000000000034e-09 0.000000000000000000e+00 +1.128499999999999980e-09 0.000000000000000000e+00 +1.128999999999999927e-09 0.000000000000000000e+00 +1.129500000000000080e-09 0.000000000000000000e+00 +1.130000000000000027e-09 0.000000000000000000e+00 +1.130499999999999974e-09 0.000000000000000000e+00 +1.130999999999999920e-09 0.000000000000000000e+00 +1.131500000000000073e-09 0.000000000000000000e+00 +1.132000000000000020e-09 0.000000000000000000e+00 +1.132499999999999967e-09 0.000000000000000000e+00 +1.132999999999999913e-09 0.000000000000000000e+00 +1.133500000000000067e-09 0.000000000000000000e+00 +1.134000000000000013e-09 0.000000000000000000e+00 +1.134499999999999960e-09 0.000000000000000000e+00 +1.134999999999999906e-09 0.000000000000000000e+00 +1.135500000000000060e-09 0.000000000000000000e+00 +1.136000000000000006e-09 0.000000000000000000e+00 +1.136499999999999953e-09 0.000000000000000000e+00 +1.136999999999999899e-09 0.000000000000000000e+00 +1.137500000000000053e-09 0.000000000000000000e+00 +1.137999999999999999e-09 0.000000000000000000e+00 +1.138499999999999946e-09 0.000000000000000000e+00 +1.138999999999999892e-09 0.000000000000000000e+00 +1.139500000000000046e-09 0.000000000000000000e+00 +1.139999999999999992e-09 0.000000000000000000e+00 +1.140499999999999939e-09 0.000000000000000000e+00 +1.140999999999999886e-09 0.000000000000000000e+00 +1.141500000000000039e-09 0.000000000000000000e+00 +1.141999999999999986e-09 0.000000000000000000e+00 +1.142499999999999932e-09 0.000000000000000000e+00 +1.142999999999999879e-09 0.000000000000000000e+00 +1.143500000000000032e-09 0.000000000000000000e+00 +1.143999999999999979e-09 0.000000000000000000e+00 +1.144499999999999925e-09 0.000000000000000000e+00 +1.145000000000000079e-09 0.000000000000000000e+00 +1.145500000000000025e-09 0.000000000000000000e+00 +1.145999999999999972e-09 0.000000000000000000e+00 +1.146499999999999918e-09 0.000000000000000000e+00 +1.147000000000000072e-09 0.000000000000000000e+00 +1.147500000000000018e-09 0.000000000000000000e+00 +1.147999999999999965e-09 0.000000000000000000e+00 +1.148499999999999911e-09 0.000000000000000000e+00 +1.149000000000000065e-09 0.000000000000000000e+00 +1.149500000000000011e-09 0.000000000000000000e+00 +1.149999999999999958e-09 0.000000000000000000e+00 +1.150499999999999904e-09 0.000000000000000000e+00 +1.151000000000000058e-09 0.000000000000000000e+00 +1.151500000000000004e-09 0.000000000000000000e+00 +1.151999999999999951e-09 0.000000000000000000e+00 +1.152499999999999898e-09 0.000000000000000000e+00 +1.153000000000000051e-09 0.000000000000000000e+00 +1.153499999999999997e-09 0.000000000000000000e+00 +1.153999999999999944e-09 0.000000000000000000e+00 +1.154499999999999891e-09 0.000000000000000000e+00 +1.155000000000000044e-09 0.000000000000000000e+00 +1.155499999999999991e-09 0.000000000000000000e+00 +1.155999999999999937e-09 0.000000000000000000e+00 +1.156499999999999884e-09 0.000000000000000000e+00 +1.157000000000000037e-09 0.000000000000000000e+00 +1.157499999999999984e-09 0.000000000000000000e+00 +1.157999999999999930e-09 0.000000000000000000e+00 +1.158499999999999877e-09 0.000000000000000000e+00 +1.159000000000000030e-09 0.000000000000000000e+00 +1.159499999999999977e-09 0.000000000000000000e+00 +1.159999999999999923e-09 0.000000000000000000e+00 +1.160500000000000077e-09 0.000000000000000000e+00 +1.161000000000000023e-09 0.000000000000000000e+00 +1.161499999999999970e-09 0.000000000000000000e+00 +1.161999999999999916e-09 0.000000000000000000e+00 +1.162500000000000070e-09 0.000000000000000000e+00 +1.163000000000000016e-09 0.000000000000000000e+00 +1.163499999999999963e-09 0.000000000000000000e+00 +1.163999999999999910e-09 0.000000000000000000e+00 +1.164500000000000063e-09 0.000000000000000000e+00 +1.165000000000000009e-09 0.000000000000000000e+00 +1.165499999999999956e-09 0.000000000000000000e+00 +1.165999999999999903e-09 0.000000000000000000e+00 +1.166500000000000056e-09 0.000000000000000000e+00 +1.167000000000000003e-09 0.000000000000000000e+00 +1.167499999999999949e-09 0.000000000000000000e+00 +1.167999999999999896e-09 0.000000000000000000e+00 +1.168500000000000049e-09 0.000000000000000000e+00 +1.168999999999999996e-09 0.000000000000000000e+00 +1.169499999999999942e-09 0.000000000000000000e+00 +1.169999999999999889e-09 0.000000000000000000e+00 +1.170500000000000042e-09 0.000000000000000000e+00 +1.170999999999999989e-09 0.000000000000000000e+00 +1.171499999999999935e-09 0.000000000000000000e+00 +1.171999999999999882e-09 0.000000000000000000e+00 +1.172500000000000035e-09 0.000000000000000000e+00 +1.172999999999999982e-09 0.000000000000000000e+00 +1.173499999999999928e-09 0.000000000000000000e+00 +1.173999999999999875e-09 0.000000000000000000e+00 +1.174500000000000028e-09 0.000000000000000000e+00 +1.174999999999999975e-09 0.000000000000000000e+00 +1.175499999999999922e-09 0.000000000000000000e+00 +1.176000000000000075e-09 0.000000000000000000e+00 +1.176500000000000021e-09 0.000000000000000000e+00 +1.176999999999999968e-09 0.000000000000000000e+00 +1.177499999999999915e-09 0.000000000000000000e+00 +1.178000000000000068e-09 0.000000000000000000e+00 +1.178500000000000015e-09 0.000000000000000000e+00 +1.178999999999999961e-09 0.000000000000000000e+00 +1.179499999999999908e-09 0.000000000000000000e+00 +1.180000000000000061e-09 0.000000000000000000e+00 +1.180500000000000008e-09 0.000000000000000000e+00 +1.180999999999999954e-09 0.000000000000000000e+00 +1.181499999999999901e-09 0.000000000000000000e+00 +1.182000000000000054e-09 0.000000000000000000e+00 +1.182500000000000001e-09 0.000000000000000000e+00 +1.182999999999999947e-09 0.000000000000000000e+00 +1.183499999999999894e-09 0.000000000000000000e+00 +1.184000000000000047e-09 0.000000000000000000e+00 +1.184499999999999994e-09 0.000000000000000000e+00 +1.184999999999999940e-09 0.000000000000000000e+00 +1.185499999999999887e-09 0.000000000000000000e+00 +1.186000000000000040e-09 0.000000000000000000e+00 +1.186499999999999987e-09 0.000000000000000000e+00 +1.186999999999999934e-09 0.000000000000000000e+00 +1.187499999999999880e-09 0.000000000000000000e+00 +1.188000000000000033e-09 0.000000000000000000e+00 +1.188499999999999980e-09 0.000000000000000000e+00 +1.188999999999999927e-09 0.000000000000000000e+00 +1.189499999999999873e-09 0.000000000000000000e+00 +1.190000000000000027e-09 0.000000000000000000e+00 +1.190499999999999973e-09 0.000000000000000000e+00 +1.190999999999999920e-09 0.000000000000000000e+00 +1.191500000000000073e-09 0.000000000000000000e+00 +1.192000000000000020e-09 0.000000000000000000e+00 +1.192499999999999966e-09 0.000000000000000000e+00 +1.192999999999999913e-09 0.000000000000000000e+00 +1.193500000000000066e-09 0.000000000000000000e+00 +1.194000000000000013e-09 0.000000000000000000e+00 +1.194499999999999959e-09 0.000000000000000000e+00 +1.194999999999999906e-09 0.000000000000000000e+00 +1.195500000000000059e-09 0.000000000000000000e+00 +1.196000000000000006e-09 0.000000000000000000e+00 +1.196499999999999952e-09 0.000000000000000000e+00 +1.196999999999999899e-09 0.000000000000000000e+00 +1.197500000000000052e-09 0.000000000000000000e+00 +1.197999999999999999e-09 0.000000000000000000e+00 +1.198499999999999946e-09 0.000000000000000000e+00 +1.198999999999999892e-09 0.000000000000000000e+00 +1.199500000000000045e-09 0.000000000000000000e+00 +1.199999999999999992e-09 0.000000000000000000e+00 +1.200499999999999939e-09 0.000000000000000000e+00 +1.200999999999999885e-09 0.000000000000000000e+00 +1.201500000000000039e-09 0.000000000000000000e+00 +1.201999999999999985e-09 0.000000000000000000e+00 +1.202499999999999932e-09 0.000000000000000000e+00 +1.202999999999999878e-09 0.000000000000000000e+00 +1.203500000000000032e-09 0.000000000000000000e+00 +1.203999999999999978e-09 0.000000000000000000e+00 +1.204499999999999925e-09 0.000000000000000000e+00 +1.205000000000000078e-09 0.000000000000000000e+00 +1.205500000000000025e-09 0.000000000000000000e+00 +1.205999999999999971e-09 0.000000000000000000e+00 +1.206499999999999918e-09 0.000000000000000000e+00 +1.207000000000000071e-09 0.000000000000000000e+00 +1.207500000000000018e-09 0.000000000000000000e+00 +1.207999999999999964e-09 0.000000000000000000e+00 +1.208499999999999911e-09 0.000000000000000000e+00 +1.209000000000000064e-09 0.000000000000000000e+00 +1.209500000000000011e-09 0.000000000000000000e+00 +1.209999999999999957e-09 0.000000000000000000e+00 +1.210499999999999904e-09 0.000000000000000000e+00 +1.211000000000000057e-09 0.000000000000000000e+00 +1.211500000000000004e-09 0.000000000000000000e+00 +1.211999999999999951e-09 0.000000000000000000e+00 +1.212499999999999897e-09 0.000000000000000000e+00 +1.213000000000000051e-09 0.000000000000000000e+00 +1.213499999999999997e-09 0.000000000000000000e+00 +1.213999999999999944e-09 0.000000000000000000e+00 +1.214499999999999890e-09 0.000000000000000000e+00 +1.215000000000000044e-09 0.000000000000000000e+00 +1.215499999999999990e-09 0.000000000000000000e+00 +1.215999999999999937e-09 0.000000000000000000e+00 +1.216499999999999883e-09 0.000000000000000000e+00 +1.217000000000000037e-09 0.000000000000000000e+00 +1.217499999999999983e-09 0.000000000000000000e+00 +1.217999999999999930e-09 0.000000000000000000e+00 +1.218499999999999876e-09 0.000000000000000000e+00 +1.219000000000000030e-09 0.000000000000000000e+00 +1.219499999999999976e-09 0.000000000000000000e+00 +1.219999999999999923e-09 0.000000000000000000e+00 +1.220500000000000076e-09 0.000000000000000000e+00 +1.221000000000000023e-09 0.000000000000000000e+00 +1.221499999999999969e-09 0.000000000000000000e+00 +1.221999999999999916e-09 0.000000000000000000e+00 +1.222500000000000069e-09 0.000000000000000000e+00 +1.223000000000000016e-09 0.000000000000000000e+00 +1.223499999999999963e-09 0.000000000000000000e+00 +1.223999999999999909e-09 0.000000000000000000e+00 +1.224500000000000063e-09 0.000000000000000000e+00 +1.225000000000000009e-09 0.000000000000000000e+00 +1.225499999999999956e-09 0.000000000000000000e+00 +1.225999999999999902e-09 0.000000000000000000e+00 +1.226500000000000056e-09 0.000000000000000000e+00 +1.227000000000000002e-09 0.000000000000000000e+00 +1.227499999999999949e-09 0.000000000000000000e+00 +1.227999999999999895e-09 0.000000000000000000e+00 +1.228500000000000049e-09 0.000000000000000000e+00 +1.228999999999999995e-09 0.000000000000000000e+00 +1.229499999999999942e-09 0.000000000000000000e+00 +1.229999999999999888e-09 0.000000000000000000e+00 +1.230500000000000042e-09 0.000000000000000000e+00 +1.230999999999999988e-09 0.000000000000000000e+00 +1.231499999999999935e-09 0.000000000000000000e+00 +1.231999999999999882e-09 0.000000000000000000e+00 +1.232500000000000035e-09 0.000000000000000000e+00 +1.232999999999999981e-09 0.000000000000000000e+00 +1.233499999999999928e-09 0.000000000000000000e+00 +1.233999999999999875e-09 0.000000000000000000e+00 +1.234500000000000028e-09 0.000000000000000000e+00 +1.234999999999999975e-09 0.000000000000000000e+00 +1.235499999999999921e-09 0.000000000000000000e+00 +1.236000000000000074e-09 0.000000000000000000e+00 +1.236500000000000021e-09 0.000000000000000000e+00 +1.236999999999999968e-09 0.000000000000000000e+00 +1.237499999999999914e-09 0.000000000000000000e+00 +1.238000000000000068e-09 0.000000000000000000e+00 +1.238500000000000014e-09 0.000000000000000000e+00 +1.238999999999999961e-09 0.000000000000000000e+00 +1.239499999999999907e-09 0.000000000000000000e+00 +1.240000000000000061e-09 0.000000000000000000e+00 +1.240500000000000007e-09 0.000000000000000000e+00 +1.240999999999999954e-09 0.000000000000000000e+00 +1.241499999999999900e-09 0.000000000000000000e+00 +1.242000000000000054e-09 0.000000000000000000e+00 +1.242500000000000000e-09 0.000000000000000000e+00 +1.242999999999999947e-09 0.000000000000000000e+00 +1.243499999999999894e-09 0.000000000000000000e+00 +1.244000000000000047e-09 0.000000000000000000e+00 +1.244499999999999993e-09 0.000000000000000000e+00 +1.244999999999999940e-09 0.000000000000000000e+00 +1.245499999999999887e-09 0.000000000000000000e+00 +1.246000000000000040e-09 0.000000000000000000e+00 +1.246499999999999987e-09 0.000000000000000000e+00 +1.246999999999999933e-09 0.000000000000000000e+00 +1.247499999999999880e-09 0.000000000000000000e+00 +1.248000000000000033e-09 0.000000000000000000e+00 +1.248499999999999980e-09 0.000000000000000000e+00 +1.248999999999999926e-09 0.000000000000000000e+00 +1.249499999999999873e-09 0.000000000000000000e+00 +1.250000000000000026e-09 0.000000000000000000e+00 +1.250499999999999973e-09 0.000000000000000000e+00 +1.250999999999999919e-09 0.000000000000000000e+00 +1.251500000000000073e-09 0.000000000000000000e+00 +1.252000000000000019e-09 0.000000000000000000e+00 +1.252499999999999966e-09 0.000000000000000000e+00 +1.252999999999999912e-09 0.000000000000000000e+00 +1.253500000000000066e-09 0.000000000000000000e+00 +1.254000000000000012e-09 0.000000000000000000e+00 +1.254499999999999959e-09 0.000000000000000000e+00 +1.254999999999999905e-09 0.000000000000000000e+00 +1.255500000000000059e-09 0.000000000000000000e+00 +1.256000000000000005e-09 0.000000000000000000e+00 +1.256499999999999952e-09 0.000000000000000000e+00 +1.256999999999999899e-09 0.000000000000000000e+00 +1.257500000000000052e-09 0.000000000000000000e+00 +1.257999999999999999e-09 0.000000000000000000e+00 +1.258499999999999945e-09 0.000000000000000000e+00 +1.258999999999999892e-09 0.000000000000000000e+00 +1.259500000000000045e-09 0.000000000000000000e+00 +1.259999999999999992e-09 0.000000000000000000e+00 +1.260499999999999938e-09 0.000000000000000000e+00 +1.260999999999999885e-09 0.000000000000000000e+00 +1.261500000000000038e-09 0.000000000000000000e+00 +1.261999999999999985e-09 0.000000000000000000e+00 +1.262499999999999931e-09 0.000000000000000000e+00 +1.262999999999999878e-09 0.000000000000000000e+00 +1.263500000000000031e-09 0.000000000000000000e+00 +1.263999999999999978e-09 0.000000000000000000e+00 +1.264499999999999924e-09 0.000000000000000000e+00 +1.265000000000000078e-09 0.000000000000000000e+00 +1.265500000000000024e-09 0.000000000000000000e+00 +1.265999999999999971e-09 0.000000000000000000e+00 +1.266499999999999917e-09 0.000000000000000000e+00 +1.267000000000000071e-09 0.000000000000000000e+00 +1.267500000000000017e-09 0.000000000000000000e+00 +1.267999999999999964e-09 0.000000000000000000e+00 +1.268499999999999911e-09 0.000000000000000000e+00 +1.269000000000000064e-09 0.000000000000000000e+00 +1.269500000000000011e-09 0.000000000000000000e+00 +1.269999999999999957e-09 0.000000000000000000e+00 +1.270499999999999904e-09 0.000000000000000000e+00 +1.271000000000000057e-09 0.000000000000000000e+00 +1.271500000000000004e-09 0.000000000000000000e+00 +1.271999999999999950e-09 0.000000000000000000e+00 +1.272499999999999897e-09 0.000000000000000000e+00 +1.273000000000000050e-09 0.000000000000000000e+00 +1.273499999999999997e-09 0.000000000000000000e+00 +1.273999999999999943e-09 0.000000000000000000e+00 +1.274499999999999890e-09 0.000000000000000000e+00 +1.275000000000000043e-09 0.000000000000000000e+00 +1.275499999999999990e-09 0.000000000000000000e+00 +1.275999999999999936e-09 0.000000000000000000e+00 +1.276499999999999883e-09 0.000000000000000000e+00 +1.277000000000000036e-09 0.000000000000000000e+00 +1.277499999999999983e-09 0.000000000000000000e+00 +1.277999999999999929e-09 0.000000000000000000e+00 +1.278499999999999876e-09 0.000000000000000000e+00 +1.279000000000000029e-09 0.000000000000000000e+00 +1.279499999999999976e-09 0.000000000000000000e+00 +1.279999999999999923e-09 0.000000000000000000e+00 +1.280500000000000076e-09 0.000000000000000000e+00 +1.281000000000000023e-09 0.000000000000000000e+00 +1.281499999999999969e-09 0.000000000000000000e+00 +1.281999999999999916e-09 0.000000000000000000e+00 +1.282500000000000069e-09 0.000000000000000000e+00 +1.283000000000000016e-09 0.000000000000000000e+00 +1.283499999999999962e-09 0.000000000000000000e+00 +1.283999999999999909e-09 0.000000000000000000e+00 +1.284500000000000062e-09 0.000000000000000000e+00 +1.285000000000000009e-09 0.000000000000000000e+00 +1.285499999999999955e-09 0.000000000000000000e+00 +1.285999999999999902e-09 0.000000000000000000e+00 +1.286500000000000055e-09 0.000000000000000000e+00 +1.287000000000000002e-09 0.000000000000000000e+00 +1.287499999999999948e-09 0.000000000000000000e+00 +1.287999999999999895e-09 0.000000000000000000e+00 +1.288500000000000048e-09 0.000000000000000000e+00 +1.288999999999999995e-09 0.000000000000000000e+00 +1.289499999999999941e-09 0.000000000000000000e+00 +1.289999999999999888e-09 0.000000000000000000e+00 +1.290500000000000041e-09 0.000000000000000000e+00 +1.290999999999999988e-09 0.000000000000000000e+00 +1.291499999999999935e-09 0.000000000000000000e+00 +1.291999999999999881e-09 0.000000000000000000e+00 +1.292500000000000034e-09 0.000000000000000000e+00 +1.292999999999999981e-09 0.000000000000000000e+00 +1.293499999999999928e-09 0.000000000000000000e+00 +1.293999999999999874e-09 0.000000000000000000e+00 +1.294500000000000028e-09 0.000000000000000000e+00 +1.294999999999999974e-09 0.000000000000000000e+00 +1.295499999999999921e-09 0.000000000000000000e+00 +1.296000000000000074e-09 0.000000000000000000e+00 +1.296500000000000021e-09 0.000000000000000000e+00 +1.296999999999999967e-09 0.000000000000000000e+00 +1.297499999999999914e-09 0.000000000000000000e+00 +1.298000000000000067e-09 0.000000000000000000e+00 +1.298500000000000014e-09 0.000000000000000000e+00 +1.298999999999999960e-09 0.000000000000000000e+00 +1.299499999999999907e-09 0.000000000000000000e+00 +1.300000000000000060e-09 0.000000000000000000e+00 +1.300500000000000007e-09 0.000000000000000000e+00 +1.300999999999999953e-09 0.000000000000000000e+00 +1.301499999999999900e-09 0.000000000000000000e+00 +1.302000000000000053e-09 0.000000000000000000e+00 +1.302500000000000000e-09 0.000000000000000000e+00 +1.302999999999999947e-09 0.000000000000000000e+00 +1.303499999999999893e-09 0.000000000000000000e+00 +1.304000000000000046e-09 0.000000000000000000e+00 +1.304499999999999993e-09 0.000000000000000000e+00 +1.304999999999999940e-09 0.000000000000000000e+00 +1.305499999999999886e-09 0.000000000000000000e+00 +1.306000000000000040e-09 0.000000000000000000e+00 +1.306499999999999986e-09 0.000000000000000000e+00 +1.306999999999999933e-09 0.000000000000000000e+00 +1.307499999999999879e-09 0.000000000000000000e+00 +1.308000000000000033e-09 0.000000000000000000e+00 +1.308499999999999979e-09 0.000000000000000000e+00 +1.308999999999999926e-09 0.000000000000000000e+00 +1.309499999999999872e-09 0.000000000000000000e+00 +1.310000000000000026e-09 0.000000000000000000e+00 +1.310499999999999972e-09 0.000000000000000000e+00 +1.310999999999999919e-09 0.000000000000000000e+00 +1.311500000000000072e-09 0.000000000000000000e+00 +1.312000000000000019e-09 0.000000000000000000e+00 +1.312499999999999965e-09 0.000000000000000000e+00 +1.312999999999999912e-09 0.000000000000000000e+00 +1.313500000000000065e-09 0.000000000000000000e+00 +1.314000000000000012e-09 0.000000000000000000e+00 +1.314499999999999959e-09 0.000000000000000000e+00 +1.314999999999999905e-09 0.000000000000000000e+00 +1.315500000000000058e-09 0.000000000000000000e+00 +1.316000000000000005e-09 0.000000000000000000e+00 +1.316499999999999952e-09 0.000000000000000000e+00 +1.316999999999999898e-09 0.000000000000000000e+00 +1.317500000000000052e-09 0.000000000000000000e+00 +1.317999999999999998e-09 0.000000000000000000e+00 +1.318499999999999945e-09 0.000000000000000000e+00 +1.318999999999999891e-09 0.000000000000000000e+00 +1.319500000000000045e-09 0.000000000000000000e+00 +1.319999999999999991e-09 0.000000000000000000e+00 +1.320499999999999938e-09 0.000000000000000000e+00 +1.320999999999999884e-09 0.000000000000000000e+00 +1.321500000000000038e-09 0.000000000000000000e+00 +1.321999999999999984e-09 0.000000000000000000e+00 +1.322499999999999931e-09 0.000000000000000000e+00 +1.322999999999999877e-09 0.000000000000000000e+00 +1.323500000000000031e-09 0.000000000000000000e+00 +1.323999999999999977e-09 0.000000000000000000e+00 +1.324499999999999924e-09 0.000000000000000000e+00 +1.324999999999999871e-09 0.000000000000000000e+00 +1.325500000000000024e-09 0.000000000000000000e+00 +1.325999999999999971e-09 0.000000000000000000e+00 +1.326499999999999917e-09 0.000000000000000000e+00 +1.327000000000000070e-09 0.000000000000000000e+00 +1.327500000000000017e-09 0.000000000000000000e+00 +1.327999999999999964e-09 0.000000000000000000e+00 +1.328499999999999910e-09 0.000000000000000000e+00 +1.329000000000000064e-09 0.000000000000000000e+00 +1.329500000000000010e-09 0.000000000000000000e+00 +1.329999999999999957e-09 0.000000000000000000e+00 +1.330499999999999903e-09 0.000000000000000000e+00 +1.331000000000000057e-09 0.000000000000000000e+00 +1.331500000000000003e-09 0.000000000000000000e+00 +1.331999999999999950e-09 0.000000000000000000e+00 +1.332499999999999896e-09 0.000000000000000000e+00 +1.333000000000000050e-09 0.000000000000000000e+00 +1.333499999999999996e-09 0.000000000000000000e+00 +1.333999999999999943e-09 0.000000000000000000e+00 +1.334499999999999889e-09 0.000000000000000000e+00 +1.335000000000000043e-09 0.000000000000000000e+00 +1.335499999999999989e-09 0.000000000000000000e+00 +1.335999999999999936e-09 0.000000000000000000e+00 +1.336499999999999883e-09 0.000000000000000000e+00 +1.337000000000000036e-09 0.000000000000000000e+00 +1.337499999999999982e-09 0.000000000000000000e+00 +1.337999999999999929e-09 0.000000000000000000e+00 +1.338499999999999876e-09 0.000000000000000000e+00 +1.339000000000000029e-09 0.000000000000000000e+00 +1.339499999999999976e-09 0.000000000000000000e+00 +1.339999999999999922e-09 0.000000000000000000e+00 +1.340500000000000076e-09 0.000000000000000000e+00 +1.341000000000000022e-09 0.000000000000000000e+00 +1.341499999999999969e-09 0.000000000000000000e+00 +1.341999999999999915e-09 0.000000000000000000e+00 +1.342500000000000069e-09 0.000000000000000000e+00 +1.343000000000000015e-09 0.000000000000000000e+00 +1.343499999999999962e-09 0.000000000000000000e+00 +1.343999999999999908e-09 0.000000000000000000e+00 +1.344500000000000062e-09 0.000000000000000000e+00 +1.345000000000000008e-09 0.000000000000000000e+00 +1.345499999999999955e-09 0.000000000000000000e+00 +1.345999999999999901e-09 0.000000000000000000e+00 +1.346500000000000055e-09 0.000000000000000000e+00 +1.347000000000000001e-09 0.000000000000000000e+00 +1.347499999999999948e-09 0.000000000000000000e+00 +1.347999999999999895e-09 0.000000000000000000e+00 +1.348500000000000048e-09 0.000000000000000000e+00 +1.348999999999999994e-09 0.000000000000000000e+00 +1.349499999999999941e-09 0.000000000000000000e+00 +1.349999999999999888e-09 0.000000000000000000e+00 +1.350500000000000041e-09 0.000000000000000000e+00 +1.350999999999999988e-09 0.000000000000000000e+00 +1.351499999999999934e-09 0.000000000000000000e+00 +1.351999999999999881e-09 0.000000000000000000e+00 +1.352500000000000034e-09 0.000000000000000000e+00 +1.352999999999999981e-09 0.000000000000000000e+00 +1.353499999999999927e-09 0.000000000000000000e+00 +1.353999999999999874e-09 0.000000000000000000e+00 +1.354500000000000027e-09 0.000000000000000000e+00 +1.354999999999999974e-09 0.000000000000000000e+00 +1.355499999999999920e-09 0.000000000000000000e+00 +1.356000000000000074e-09 0.000000000000000000e+00 +1.356500000000000020e-09 0.000000000000000000e+00 +1.356999999999999967e-09 0.000000000000000000e+00 +1.357499999999999913e-09 0.000000000000000000e+00 +1.358000000000000067e-09 0.000000000000000000e+00 +1.358500000000000013e-09 0.000000000000000000e+00 +1.358999999999999960e-09 0.000000000000000000e+00 +1.359499999999999907e-09 0.000000000000000000e+00 +1.360000000000000060e-09 0.000000000000000000e+00 +1.360500000000000006e-09 0.000000000000000000e+00 +1.360999999999999953e-09 0.000000000000000000e+00 +1.361499999999999900e-09 0.000000000000000000e+00 +1.362000000000000053e-09 0.000000000000000000e+00 +1.362500000000000000e-09 0.000000000000000000e+00 +1.362999999999999946e-09 0.000000000000000000e+00 +1.363499999999999893e-09 0.000000000000000000e+00 +1.364000000000000046e-09 0.000000000000000000e+00 +1.364499999999999993e-09 0.000000000000000000e+00 +1.364999999999999939e-09 0.000000000000000000e+00 +1.365499999999999886e-09 0.000000000000000000e+00 +1.366000000000000039e-09 0.000000000000000000e+00 +1.366499999999999986e-09 0.000000000000000000e+00 +1.366999999999999932e-09 0.000000000000000000e+00 +1.367499999999999879e-09 0.000000000000000000e+00 +1.368000000000000032e-09 0.000000000000000000e+00 +1.368499999999999979e-09 0.000000000000000000e+00 +1.368999999999999925e-09 0.000000000000000000e+00 +1.369499999999999872e-09 0.000000000000000000e+00 +1.370000000000000025e-09 0.000000000000000000e+00 +1.370499999999999972e-09 0.000000000000000000e+00 +1.370999999999999919e-09 0.000000000000000000e+00 +1.371500000000000072e-09 0.000000000000000000e+00 +1.372000000000000018e-09 0.000000000000000000e+00 +1.372499999999999965e-09 0.000000000000000000e+00 +1.372999999999999912e-09 0.000000000000000000e+00 +1.373500000000000065e-09 0.000000000000000000e+00 +1.374000000000000012e-09 0.000000000000000000e+00 +1.374499999999999958e-09 0.000000000000000000e+00 +1.374999999999999905e-09 0.000000000000000000e+00 +1.375500000000000058e-09 0.000000000000000000e+00 +1.376000000000000005e-09 0.000000000000000000e+00 +1.376499999999999951e-09 0.000000000000000000e+00 +1.376999999999999898e-09 0.000000000000000000e+00 +1.377500000000000051e-09 0.000000000000000000e+00 +1.377999999999999998e-09 0.000000000000000000e+00 +1.378499999999999944e-09 0.000000000000000000e+00 +1.378999999999999891e-09 0.000000000000000000e+00 +1.379500000000000044e-09 0.000000000000000000e+00 +1.379999999999999991e-09 0.000000000000000000e+00 +1.380499999999999937e-09 0.000000000000000000e+00 +1.380999999999999884e-09 0.000000000000000000e+00 +1.381500000000000037e-09 0.000000000000000000e+00 +1.381999999999999984e-09 0.000000000000000000e+00 +1.382499999999999930e-09 0.000000000000000000e+00 +1.382999999999999877e-09 0.000000000000000000e+00 +1.383500000000000030e-09 0.000000000000000000e+00 +1.383999999999999977e-09 0.000000000000000000e+00 +1.384499999999999924e-09 0.000000000000000000e+00 +1.384999999999999870e-09 0.000000000000000000e+00 +1.385500000000000024e-09 0.000000000000000000e+00 +1.385999999999999970e-09 0.000000000000000000e+00 +1.386499999999999917e-09 0.000000000000000000e+00 +1.387000000000000070e-09 0.000000000000000000e+00 +1.387500000000000017e-09 0.000000000000000000e+00 +1.387999999999999963e-09 0.000000000000000000e+00 +1.388499999999999910e-09 0.000000000000000000e+00 +1.389000000000000063e-09 0.000000000000000000e+00 +1.389500000000000010e-09 0.000000000000000000e+00 +1.389999999999999956e-09 0.000000000000000000e+00 +1.390499999999999903e-09 0.000000000000000000e+00 +1.391000000000000056e-09 0.000000000000000000e+00 +1.391500000000000003e-09 0.000000000000000000e+00 +1.391999999999999949e-09 0.000000000000000000e+00 +1.392499999999999896e-09 0.000000000000000000e+00 +1.393000000000000049e-09 0.000000000000000000e+00 +1.393499999999999996e-09 0.000000000000000000e+00 +1.393999999999999942e-09 0.000000000000000000e+00 +1.394499999999999889e-09 0.000000000000000000e+00 +1.395000000000000042e-09 0.000000000000000000e+00 +1.395499999999999989e-09 0.000000000000000000e+00 +1.395999999999999936e-09 0.000000000000000000e+00 +1.396499999999999882e-09 0.000000000000000000e+00 +1.397000000000000036e-09 0.000000000000000000e+00 +1.397499999999999982e-09 0.000000000000000000e+00 +1.397999999999999929e-09 0.000000000000000000e+00 +1.398499999999999875e-09 0.000000000000000000e+00 +1.399000000000000029e-09 0.000000000000000000e+00 +1.399499999999999975e-09 0.000000000000000000e+00 +1.399999999999999922e-09 0.000000000000000000e+00 +1.400500000000000075e-09 0.000000000000000000e+00 +1.401000000000000022e-09 0.000000000000000000e+00 +1.401499999999999968e-09 0.000000000000000000e+00 +1.401999999999999915e-09 0.000000000000000000e+00 +1.402500000000000068e-09 0.000000000000000000e+00 +1.403000000000000015e-09 0.000000000000000000e+00 +1.403499999999999961e-09 0.000000000000000000e+00 +1.403999999999999908e-09 0.000000000000000000e+00 +1.404500000000000061e-09 0.000000000000000000e+00 +1.405000000000000008e-09 0.000000000000000000e+00 +1.405499999999999954e-09 0.000000000000000000e+00 +1.405999999999999901e-09 0.000000000000000000e+00 +1.406500000000000054e-09 0.000000000000000000e+00 +1.407000000000000001e-09 0.000000000000000000e+00 +1.407499999999999948e-09 0.000000000000000000e+00 +1.407999999999999894e-09 0.000000000000000000e+00 +1.408500000000000048e-09 0.000000000000000000e+00 +1.408999999999999994e-09 0.000000000000000000e+00 +1.409499999999999941e-09 0.000000000000000000e+00 +1.409999999999999887e-09 0.000000000000000000e+00 +1.410500000000000041e-09 0.000000000000000000e+00 +1.410999999999999987e-09 0.000000000000000000e+00 +1.411499999999999934e-09 0.000000000000000000e+00 +1.411999999999999880e-09 0.000000000000000000e+00 +1.412500000000000034e-09 0.000000000000000000e+00 +1.412999999999999980e-09 0.000000000000000000e+00 +1.413499999999999927e-09 0.000000000000000000e+00 +1.413999999999999873e-09 0.000000000000000000e+00 +1.414500000000000027e-09 0.000000000000000000e+00 +1.414999999999999973e-09 0.000000000000000000e+00 +1.415499999999999920e-09 0.000000000000000000e+00 +1.416000000000000073e-09 0.000000000000000000e+00 +1.416500000000000020e-09 0.000000000000000000e+00 +1.416999999999999966e-09 0.000000000000000000e+00 +1.417499999999999913e-09 0.000000000000000000e+00 +1.418000000000000066e-09 0.000000000000000000e+00 +1.418500000000000013e-09 0.000000000000000000e+00 +1.418999999999999960e-09 0.000000000000000000e+00 +1.419499999999999906e-09 0.000000000000000000e+00 +1.420000000000000059e-09 0.000000000000000000e+00 +1.420500000000000006e-09 0.000000000000000000e+00 +1.420999999999999953e-09 0.000000000000000000e+00 +1.421499999999999899e-09 0.000000000000000000e+00 +1.422000000000000053e-09 0.000000000000000000e+00 +1.422499999999999999e-09 0.000000000000000000e+00 +1.422999999999999946e-09 0.000000000000000000e+00 +1.423499999999999892e-09 0.000000000000000000e+00 +1.424000000000000046e-09 0.000000000000000000e+00 +1.424499999999999992e-09 0.000000000000000000e+00 +1.424999999999999939e-09 0.000000000000000000e+00 +1.425499999999999885e-09 0.000000000000000000e+00 +1.426000000000000039e-09 0.000000000000000000e+00 +1.426499999999999985e-09 0.000000000000000000e+00 +1.426999999999999932e-09 0.000000000000000000e+00 +1.427499999999999878e-09 0.000000000000000000e+00 +1.428000000000000032e-09 0.000000000000000000e+00 +1.428499999999999978e-09 0.000000000000000000e+00 +1.428999999999999925e-09 0.000000000000000000e+00 +1.429499999999999872e-09 0.000000000000000000e+00 +1.430000000000000025e-09 0.000000000000000000e+00 +1.430499999999999972e-09 0.000000000000000000e+00 +1.430999999999999918e-09 0.000000000000000000e+00 +1.431500000000000071e-09 0.000000000000000000e+00 +1.432000000000000018e-09 0.000000000000000000e+00 +1.432499999999999965e-09 0.000000000000000000e+00 +1.432999999999999911e-09 0.000000000000000000e+00 +1.433500000000000065e-09 0.000000000000000000e+00 +1.434000000000000011e-09 0.000000000000000000e+00 +1.434499999999999958e-09 0.000000000000000000e+00 +1.434999999999999904e-09 0.000000000000000000e+00 +1.435500000000000058e-09 0.000000000000000000e+00 +1.436000000000000004e-09 0.000000000000000000e+00 +1.436499999999999951e-09 0.000000000000000000e+00 +1.436999999999999897e-09 0.000000000000000000e+00 +1.437500000000000051e-09 0.000000000000000000e+00 +1.437999999999999997e-09 0.000000000000000000e+00 +1.438499999999999944e-09 0.000000000000000000e+00 +1.438999999999999890e-09 0.000000000000000000e+00 +1.439500000000000044e-09 0.000000000000000000e+00 +1.439999999999999990e-09 0.000000000000000000e+00 +1.440499999999999937e-09 0.000000000000000000e+00 +1.440999999999999884e-09 0.000000000000000000e+00 +1.441500000000000037e-09 0.000000000000000000e+00 +1.441999999999999984e-09 0.000000000000000000e+00 +1.442499999999999930e-09 0.000000000000000000e+00 +1.442999999999999877e-09 0.000000000000000000e+00 +1.443500000000000030e-09 0.000000000000000000e+00 +1.443999999999999977e-09 0.000000000000000000e+00 +1.444499999999999923e-09 0.000000000000000000e+00 +1.444999999999999870e-09 0.000000000000000000e+00 +1.445500000000000023e-09 0.000000000000000000e+00 +1.445999999999999970e-09 0.000000000000000000e+00 +1.446499999999999916e-09 0.000000000000000000e+00 +1.447000000000000070e-09 0.000000000000000000e+00 +1.447500000000000016e-09 0.000000000000000000e+00 +1.447999999999999963e-09 0.000000000000000000e+00 +1.448499999999999909e-09 0.000000000000000000e+00 +1.449000000000000063e-09 0.000000000000000000e+00 +1.449500000000000009e-09 0.000000000000000000e+00 +1.449999999999999956e-09 0.000000000000000000e+00 +1.450499999999999902e-09 0.000000000000000000e+00 +1.451000000000000056e-09 0.000000000000000000e+00 +1.451500000000000002e-09 0.000000000000000000e+00 +1.451999999999999949e-09 0.000000000000000000e+00 +1.452499999999999896e-09 0.000000000000000000e+00 +1.453000000000000049e-09 0.000000000000000000e+00 +1.453499999999999996e-09 0.000000000000000000e+00 +1.453999999999999942e-09 0.000000000000000000e+00 +1.454499999999999889e-09 0.000000000000000000e+00 +1.455000000000000042e-09 0.000000000000000000e+00 +1.455499999999999989e-09 0.000000000000000000e+00 +1.455999999999999935e-09 0.000000000000000000e+00 +1.456499999999999882e-09 0.000000000000000000e+00 +1.457000000000000035e-09 0.000000000000000000e+00 +1.457499999999999982e-09 0.000000000000000000e+00 +1.457999999999999928e-09 0.000000000000000000e+00 +1.458499999999999875e-09 0.000000000000000000e+00 +1.459000000000000028e-09 0.000000000000000000e+00 +1.459499999999999975e-09 0.000000000000000000e+00 +1.459999999999999921e-09 0.000000000000000000e+00 +1.460499999999999868e-09 0.000000000000000000e+00 +1.461000000000000021e-09 0.000000000000000000e+00 +1.461499999999999968e-09 0.000000000000000000e+00 +1.461999999999999914e-09 0.000000000000000000e+00 +1.462500000000000068e-09 0.000000000000000000e+00 +1.463000000000000014e-09 0.000000000000000000e+00 +1.463499999999999961e-09 0.000000000000000000e+00 +1.463999999999999908e-09 0.000000000000000000e+00 +1.464500000000000061e-09 0.000000000000000000e+00 +1.465000000000000007e-09 0.000000000000000000e+00 +1.465499999999999954e-09 0.000000000000000000e+00 +1.465999999999999901e-09 0.000000000000000000e+00 +1.466500000000000054e-09 0.000000000000000000e+00 +1.467000000000000001e-09 0.000000000000000000e+00 +1.467499999999999947e-09 0.000000000000000000e+00 +1.467999999999999894e-09 0.000000000000000000e+00 +1.468500000000000047e-09 0.000000000000000000e+00 +1.468999999999999994e-09 0.000000000000000000e+00 +1.469499999999999940e-09 0.000000000000000000e+00 +1.469999999999999887e-09 0.000000000000000000e+00 +1.470500000000000040e-09 0.000000000000000000e+00 +1.470999999999999987e-09 0.000000000000000000e+00 +1.471499999999999933e-09 0.000000000000000000e+00 +1.471999999999999880e-09 0.000000000000000000e+00 +1.472500000000000033e-09 0.000000000000000000e+00 +1.472999999999999980e-09 0.000000000000000000e+00 +1.473499999999999926e-09 0.000000000000000000e+00 +1.473999999999999873e-09 0.000000000000000000e+00 +1.474500000000000026e-09 0.000000000000000000e+00 +1.474999999999999973e-09 0.000000000000000000e+00 +1.475499999999999920e-09 0.000000000000000000e+00 +1.476000000000000073e-09 0.000000000000000000e+00 +1.476500000000000019e-09 0.000000000000000000e+00 +1.476999999999999966e-09 0.000000000000000000e+00 +1.477499999999999913e-09 0.000000000000000000e+00 +1.478000000000000066e-09 0.000000000000000000e+00 +1.478500000000000013e-09 0.000000000000000000e+00 +1.478999999999999959e-09 0.000000000000000000e+00 +1.479499999999999906e-09 0.000000000000000000e+00 +1.480000000000000059e-09 0.000000000000000000e+00 +1.480500000000000006e-09 0.000000000000000000e+00 +1.480999999999999952e-09 0.000000000000000000e+00 +1.481499999999999899e-09 0.000000000000000000e+00 +1.482000000000000052e-09 0.000000000000000000e+00 +1.482499999999999999e-09 0.000000000000000000e+00 +1.482999999999999945e-09 0.000000000000000000e+00 +1.483499999999999892e-09 0.000000000000000000e+00 +1.484000000000000045e-09 0.000000000000000000e+00 +1.484499999999999992e-09 0.000000000000000000e+00 +1.484999999999999938e-09 0.000000000000000000e+00 +1.485499999999999885e-09 0.000000000000000000e+00 +1.486000000000000038e-09 0.000000000000000000e+00 +1.486499999999999985e-09 0.000000000000000000e+00 +1.486999999999999932e-09 0.000000000000000000e+00 +1.487499999999999878e-09 0.000000000000000000e+00 +1.488000000000000031e-09 0.000000000000000000e+00 +1.488499999999999978e-09 0.000000000000000000e+00 +1.488999999999999925e-09 0.000000000000000000e+00 +1.489499999999999871e-09 0.000000000000000000e+00 +1.490000000000000025e-09 0.000000000000000000e+00 +1.490499999999999971e-09 0.000000000000000000e+00 +1.490999999999999918e-09 0.000000000000000000e+00 +1.491500000000000071e-09 0.000000000000000000e+00 +1.492000000000000018e-09 0.000000000000000000e+00 +1.492499999999999964e-09 0.000000000000000000e+00 +1.492999999999999911e-09 0.000000000000000000e+00 +1.493500000000000064e-09 0.000000000000000000e+00 +1.494000000000000011e-09 0.000000000000000000e+00 +1.494499999999999957e-09 0.000000000000000000e+00 +1.494999999999999904e-09 0.000000000000000000e+00 +1.495500000000000057e-09 0.000000000000000000e+00 +1.496000000000000004e-09 0.000000000000000000e+00 +1.496499999999999950e-09 0.000000000000000000e+00 +1.496999999999999897e-09 0.000000000000000000e+00 +1.497500000000000050e-09 0.000000000000000000e+00 +1.497999999999999997e-09 0.000000000000000000e+00 +1.498499999999999944e-09 0.000000000000000000e+00 +1.498999999999999890e-09 0.000000000000000000e+00 +1.499500000000000043e-09 0.000000000000000000e+00 +1.499999999999999990e-09 0.000000000000000000e+00 +1.500499999999999937e-09 0.000000000000000000e+00 +1.500999999999999883e-09 0.000000000000000000e+00 +1.501500000000000037e-09 0.000000000000000000e+00 +1.501999999999999983e-09 0.000000000000000000e+00 +1.502499999999999930e-09 0.000000000000000000e+00 +1.502999999999999876e-09 0.000000000000000000e+00 +1.503500000000000030e-09 0.000000000000000000e+00 +1.503999999999999976e-09 0.000000000000000000e+00 +1.504499999999999923e-09 0.000000000000000000e+00 +1.504999999999999869e-09 0.000000000000000000e+00 +1.505500000000000023e-09 0.000000000000000000e+00 +1.505999999999999969e-09 0.000000000000000000e+00 +1.506499999999999916e-09 0.000000000000000000e+00 +1.507000000000000069e-09 0.000000000000000000e+00 +1.507500000000000016e-09 0.000000000000000000e+00 +1.507999999999999962e-09 0.000000000000000000e+00 +1.508499999999999909e-09 0.000000000000000000e+00 +1.509000000000000062e-09 0.000000000000000000e+00 +1.509500000000000009e-09 0.000000000000000000e+00 +1.509999999999999955e-09 0.000000000000000000e+00 +1.510499999999999902e-09 0.000000000000000000e+00 +1.511000000000000055e-09 0.000000000000000000e+00 +1.511500000000000002e-09 0.000000000000000000e+00 +1.511999999999999949e-09 0.000000000000000000e+00 +1.512499999999999895e-09 0.000000000000000000e+00 +1.513000000000000049e-09 0.000000000000000000e+00 +1.513499999999999995e-09 0.000000000000000000e+00 +1.513999999999999942e-09 0.000000000000000000e+00 +1.514499999999999888e-09 0.000000000000000000e+00 +1.515000000000000042e-09 0.000000000000000000e+00 +1.515499999999999988e-09 0.000000000000000000e+00 +1.515999999999999935e-09 0.000000000000000000e+00 +1.516499999999999881e-09 0.000000000000000000e+00 +1.517000000000000035e-09 0.000000000000000000e+00 +1.517499999999999981e-09 0.000000000000000000e+00 +1.517999999999999928e-09 0.000000000000000000e+00 +1.518499999999999874e-09 0.000000000000000000e+00 +1.519000000000000028e-09 0.000000000000000000e+00 +1.519499999999999974e-09 0.000000000000000000e+00 +1.519999999999999921e-09 0.000000000000000000e+00 +1.520499999999999868e-09 0.000000000000000000e+00 +1.521000000000000021e-09 0.000000000000000000e+00 +1.521499999999999967e-09 0.000000000000000000e+00 +1.521999999999999914e-09 0.000000000000000000e+00 +1.522500000000000067e-09 0.000000000000000000e+00 +1.523000000000000014e-09 0.000000000000000000e+00 +1.523499999999999961e-09 0.000000000000000000e+00 +1.523999999999999907e-09 0.000000000000000000e+00 +1.524500000000000061e-09 0.000000000000000000e+00 +1.525000000000000007e-09 0.000000000000000000e+00 +1.525499999999999954e-09 0.000000000000000000e+00 +1.525999999999999900e-09 0.000000000000000000e+00 +1.526500000000000054e-09 0.000000000000000000e+00 +1.527000000000000000e-09 0.000000000000000000e+00 +1.527499999999999947e-09 0.000000000000000000e+00 +1.527999999999999893e-09 0.000000000000000000e+00 +1.528500000000000047e-09 0.000000000000000000e+00 +1.528999999999999993e-09 0.000000000000000000e+00 +1.529499999999999940e-09 0.000000000000000000e+00 +1.529999999999999886e-09 0.000000000000000000e+00 +1.530500000000000040e-09 0.000000000000000000e+00 +1.530999999999999986e-09 0.000000000000000000e+00 +1.531499999999999933e-09 0.000000000000000000e+00 +1.531999999999999880e-09 0.000000000000000000e+00 +1.532500000000000033e-09 0.000000000000000000e+00 +1.532999999999999979e-09 0.000000000000000000e+00 +1.533499999999999926e-09 0.000000000000000000e+00 +1.533999999999999873e-09 0.000000000000000000e+00 +1.534500000000000026e-09 0.000000000000000000e+00 +1.534999999999999973e-09 0.000000000000000000e+00 +1.535499999999999919e-09 0.000000000000000000e+00 +1.536000000000000073e-09 0.000000000000000000e+00 +1.536500000000000019e-09 0.000000000000000000e+00 +1.536999999999999966e-09 0.000000000000000000e+00 +1.537499999999999912e-09 0.000000000000000000e+00 +1.538000000000000066e-09 0.000000000000000000e+00 +1.538500000000000012e-09 0.000000000000000000e+00 +1.538999999999999959e-09 0.000000000000000000e+00 +1.539499999999999905e-09 0.000000000000000000e+00 +1.540000000000000059e-09 0.000000000000000000e+00 +1.540500000000000005e-09 0.000000000000000000e+00 +1.540999999999999952e-09 0.000000000000000000e+00 +1.541499999999999898e-09 0.000000000000000000e+00 +1.542000000000000052e-09 0.000000000000000000e+00 +1.542499999999999998e-09 0.000000000000000000e+00 +1.542999999999999945e-09 0.000000000000000000e+00 +1.543499999999999892e-09 0.000000000000000000e+00 +1.544000000000000045e-09 0.000000000000000000e+00 +1.544499999999999991e-09 0.000000000000000000e+00 +1.544999999999999938e-09 0.000000000000000000e+00 +1.545499999999999885e-09 0.000000000000000000e+00 +1.546000000000000038e-09 0.000000000000000000e+00 +1.546499999999999985e-09 0.000000000000000000e+00 +1.546999999999999931e-09 0.000000000000000000e+00 +1.547499999999999878e-09 0.000000000000000000e+00 +1.548000000000000031e-09 0.000000000000000000e+00 +1.548499999999999978e-09 0.000000000000000000e+00 +1.548999999999999924e-09 0.000000000000000000e+00 +1.549499999999999871e-09 0.000000000000000000e+00 +1.550000000000000024e-09 0.000000000000000000e+00 +1.550499999999999971e-09 0.000000000000000000e+00 +1.550999999999999917e-09 0.000000000000000000e+00 +1.551500000000000071e-09 0.000000000000000000e+00 +1.552000000000000017e-09 0.000000000000000000e+00 +1.552499999999999964e-09 0.000000000000000000e+00 +1.552999999999999910e-09 0.000000000000000000e+00 +1.553500000000000064e-09 0.000000000000000000e+00 +1.554000000000000010e-09 0.000000000000000000e+00 +1.554499999999999957e-09 0.000000000000000000e+00 +1.554999999999999903e-09 0.000000000000000000e+00 +1.555500000000000057e-09 0.000000000000000000e+00 +1.556000000000000003e-09 0.000000000000000000e+00 +1.556499999999999950e-09 0.000000000000000000e+00 +1.556999999999999897e-09 0.000000000000000000e+00 +1.557500000000000050e-09 0.000000000000000000e+00 +1.557999999999999997e-09 0.000000000000000000e+00 +1.558499999999999943e-09 0.000000000000000000e+00 +1.558999999999999890e-09 0.000000000000000000e+00 +1.559500000000000043e-09 0.000000000000000000e+00 +1.559999999999999990e-09 0.000000000000000000e+00 +1.560499999999999936e-09 0.000000000000000000e+00 +1.560999999999999883e-09 0.000000000000000000e+00 +1.561500000000000036e-09 0.000000000000000000e+00 +1.561999999999999983e-09 0.000000000000000000e+00 +1.562499999999999929e-09 0.000000000000000000e+00 +1.562999999999999876e-09 0.000000000000000000e+00 +1.563500000000000029e-09 0.000000000000000000e+00 +1.563999999999999976e-09 0.000000000000000000e+00 +1.564499999999999922e-09 0.000000000000000000e+00 +1.564999999999999869e-09 0.000000000000000000e+00 +1.565500000000000022e-09 0.000000000000000000e+00 +1.565999999999999969e-09 0.000000000000000000e+00 +1.566499999999999915e-09 0.000000000000000000e+00 +1.567000000000000069e-09 0.000000000000000000e+00 +1.567500000000000015e-09 0.000000000000000000e+00 +1.567999999999999962e-09 0.000000000000000000e+00 +1.568499999999999909e-09 0.000000000000000000e+00 +1.569000000000000062e-09 0.000000000000000000e+00 +1.569500000000000009e-09 0.000000000000000000e+00 +1.569999999999999955e-09 0.000000000000000000e+00 +1.570499999999999902e-09 0.000000000000000000e+00 +1.571000000000000055e-09 0.000000000000000000e+00 +1.571500000000000002e-09 0.000000000000000000e+00 +1.571999999999999948e-09 0.000000000000000000e+00 +1.572499999999999895e-09 0.000000000000000000e+00 +1.573000000000000048e-09 0.000000000000000000e+00 +1.573499999999999995e-09 0.000000000000000000e+00 +1.573999999999999941e-09 0.000000000000000000e+00 +1.574499999999999888e-09 0.000000000000000000e+00 +1.575000000000000041e-09 0.000000000000000000e+00 +1.575499999999999988e-09 0.000000000000000000e+00 +1.575999999999999934e-09 0.000000000000000000e+00 +1.576499999999999881e-09 0.000000000000000000e+00 +1.577000000000000034e-09 0.000000000000000000e+00 +1.577499999999999981e-09 0.000000000000000000e+00 +1.577999999999999927e-09 0.000000000000000000e+00 +1.578499999999999874e-09 0.000000000000000000e+00 +1.579000000000000027e-09 0.000000000000000000e+00 +1.579499999999999974e-09 0.000000000000000000e+00 +1.579999999999999921e-09 0.000000000000000000e+00 +1.580499999999999867e-09 0.000000000000000000e+00 +1.581000000000000021e-09 0.000000000000000000e+00 +1.581499999999999967e-09 0.000000000000000000e+00 +1.581999999999999914e-09 0.000000000000000000e+00 +1.582500000000000067e-09 0.000000000000000000e+00 +1.583000000000000014e-09 0.000000000000000000e+00 +1.583499999999999960e-09 0.000000000000000000e+00 +1.583999999999999907e-09 0.000000000000000000e+00 +1.584500000000000060e-09 0.000000000000000000e+00 +1.585000000000000007e-09 0.000000000000000000e+00 +1.585499999999999953e-09 0.000000000000000000e+00 +1.585999999999999900e-09 0.000000000000000000e+00 +1.586500000000000053e-09 0.000000000000000000e+00 +1.587000000000000000e-09 0.000000000000000000e+00 +1.587499999999999946e-09 0.000000000000000000e+00 +1.587999999999999893e-09 0.000000000000000000e+00 +1.588500000000000046e-09 0.000000000000000000e+00 +1.588999999999999993e-09 0.000000000000000000e+00 +1.589499999999999939e-09 0.000000000000000000e+00 +1.589999999999999886e-09 0.000000000000000000e+00 +1.590500000000000039e-09 0.000000000000000000e+00 +1.590999999999999986e-09 0.000000000000000000e+00 +1.591499999999999933e-09 0.000000000000000000e+00 +1.591999999999999879e-09 0.000000000000000000e+00 +1.592500000000000032e-09 0.000000000000000000e+00 +1.592999999999999979e-09 0.000000000000000000e+00 +1.593499999999999926e-09 0.000000000000000000e+00 +1.593999999999999872e-09 0.000000000000000000e+00 +1.594500000000000026e-09 0.000000000000000000e+00 +1.594999999999999972e-09 0.000000000000000000e+00 +1.595499999999999919e-09 0.000000000000000000e+00 +1.595999999999999865e-09 0.000000000000000000e+00 +1.596500000000000019e-09 0.000000000000000000e+00 +1.596999999999999965e-09 0.000000000000000000e+00 +1.597499999999999912e-09 0.000000000000000000e+00 +1.598000000000000065e-09 0.000000000000000000e+00 +1.598500000000000012e-09 0.000000000000000000e+00 +1.598999999999999958e-09 0.000000000000000000e+00 +1.599499999999999905e-09 0.000000000000000000e+00 +1.600000000000000058e-09 0.000000000000000000e+00 +1.600500000000000005e-09 0.000000000000000000e+00 +1.600999999999999951e-09 0.000000000000000000e+00 +1.601499999999999898e-09 0.000000000000000000e+00 +1.602000000000000051e-09 0.000000000000000000e+00 +1.602499999999999998e-09 0.000000000000000000e+00 +1.602999999999999945e-09 0.000000000000000000e+00 +1.603499999999999891e-09 0.000000000000000000e+00 +1.604000000000000044e-09 0.000000000000000000e+00 +1.604499999999999991e-09 0.000000000000000000e+00 +1.604999999999999938e-09 0.000000000000000000e+00 +1.605499999999999884e-09 0.000000000000000000e+00 +1.606000000000000038e-09 0.000000000000000000e+00 +1.606499999999999984e-09 0.000000000000000000e+00 +1.606999999999999931e-09 0.000000000000000000e+00 +1.607499999999999877e-09 0.000000000000000000e+00 +1.608000000000000031e-09 0.000000000000000000e+00 +1.608499999999999977e-09 0.000000000000000000e+00 +1.608999999999999924e-09 0.000000000000000000e+00 +1.609499999999999870e-09 0.000000000000000000e+00 +1.610000000000000024e-09 0.000000000000000000e+00 +1.610499999999999970e-09 0.000000000000000000e+00 +1.610999999999999917e-09 0.000000000000000000e+00 +1.611500000000000070e-09 0.000000000000000000e+00 +1.612000000000000017e-09 0.000000000000000000e+00 +1.612499999999999963e-09 0.000000000000000000e+00 +1.612999999999999910e-09 0.000000000000000000e+00 +1.613500000000000063e-09 0.000000000000000000e+00 +1.614000000000000010e-09 0.000000000000000000e+00 +1.614499999999999957e-09 0.000000000000000000e+00 +1.614999999999999903e-09 0.000000000000000000e+00 +1.615500000000000056e-09 0.000000000000000000e+00 +1.616000000000000003e-09 0.000000000000000000e+00 +1.616499999999999950e-09 0.000000000000000000e+00 +1.616999999999999896e-09 0.000000000000000000e+00 +1.617500000000000050e-09 0.000000000000000000e+00 +1.617999999999999996e-09 0.000000000000000000e+00 +1.618499999999999943e-09 0.000000000000000000e+00 +1.618999999999999889e-09 0.000000000000000000e+00 +1.619500000000000043e-09 0.000000000000000000e+00 +1.619999999999999989e-09 0.000000000000000000e+00 +1.620499999999999936e-09 0.000000000000000000e+00 +1.620999999999999882e-09 0.000000000000000000e+00 +1.621500000000000036e-09 0.000000000000000000e+00 +1.621999999999999982e-09 0.000000000000000000e+00 +1.622499999999999929e-09 0.000000000000000000e+00 +1.622999999999999875e-09 0.000000000000000000e+00 +1.623500000000000029e-09 0.000000000000000000e+00 +1.623999999999999975e-09 0.000000000000000000e+00 +1.624499999999999922e-09 0.000000000000000000e+00 +1.624999999999999869e-09 0.000000000000000000e+00 +1.625500000000000022e-09 0.000000000000000000e+00 +1.625999999999999969e-09 0.000000000000000000e+00 +1.626499999999999915e-09 0.000000000000000000e+00 +1.627000000000000068e-09 0.000000000000000000e+00 +1.627500000000000015e-09 0.000000000000000000e+00 +1.627999999999999962e-09 0.000000000000000000e+00 +1.628499999999999908e-09 0.000000000000000000e+00 +1.629000000000000062e-09 0.000000000000000000e+00 +1.629500000000000008e-09 0.000000000000000000e+00 +1.629999999999999955e-09 0.000000000000000000e+00 +1.630499999999999901e-09 0.000000000000000000e+00 +1.631000000000000055e-09 0.000000000000000000e+00 +1.631500000000000001e-09 0.000000000000000000e+00 +1.631999999999999948e-09 0.000000000000000000e+00 +1.632499999999999894e-09 0.000000000000000000e+00 +1.633000000000000048e-09 0.000000000000000000e+00 +1.633499999999999994e-09 0.000000000000000000e+00 +1.633999999999999941e-09 0.000000000000000000e+00 +1.634499999999999887e-09 0.000000000000000000e+00 +1.635000000000000041e-09 0.000000000000000000e+00 +1.635499999999999987e-09 0.000000000000000000e+00 +1.635999999999999934e-09 0.000000000000000000e+00 +1.636499999999999881e-09 0.000000000000000000e+00 +1.637000000000000034e-09 0.000000000000000000e+00 +1.637499999999999980e-09 0.000000000000000000e+00 +1.637999999999999927e-09 0.000000000000000000e+00 +1.638499999999999874e-09 0.000000000000000000e+00 +1.639000000000000027e-09 0.000000000000000000e+00 +1.639499999999999974e-09 0.000000000000000000e+00 +1.639999999999999920e-09 0.000000000000000000e+00 +1.640499999999999867e-09 0.000000000000000000e+00 +1.641000000000000020e-09 0.000000000000000000e+00 +1.641499999999999967e-09 0.000000000000000000e+00 +1.641999999999999913e-09 0.000000000000000000e+00 +1.642500000000000067e-09 0.000000000000000000e+00 +1.643000000000000013e-09 0.000000000000000000e+00 +1.643499999999999960e-09 0.000000000000000000e+00 +1.643999999999999906e-09 0.000000000000000000e+00 +1.644500000000000060e-09 0.000000000000000000e+00 +1.645000000000000006e-09 0.000000000000000000e+00 +1.645499999999999953e-09 0.000000000000000000e+00 +1.645999999999999899e-09 0.000000000000000000e+00 +1.646500000000000053e-09 0.000000000000000000e+00 +1.646999999999999999e-09 0.000000000000000000e+00 +1.647499999999999946e-09 0.000000000000000000e+00 +1.647999999999999893e-09 0.000000000000000000e+00 +1.648500000000000046e-09 0.000000000000000000e+00 +1.648999999999999992e-09 0.000000000000000000e+00 +1.649499999999999939e-09 0.000000000000000000e+00 +1.649999999999999886e-09 0.000000000000000000e+00 +1.650500000000000039e-09 0.000000000000000000e+00 +1.650999999999999986e-09 0.000000000000000000e+00 +1.651499999999999932e-09 0.000000000000000000e+00 +1.651999999999999879e-09 0.000000000000000000e+00 +1.652500000000000032e-09 0.000000000000000000e+00 +1.652999999999999979e-09 0.000000000000000000e+00 +1.653499999999999925e-09 0.000000000000000000e+00 +1.653999999999999872e-09 0.000000000000000000e+00 +1.654500000000000025e-09 0.000000000000000000e+00 +1.654999999999999972e-09 0.000000000000000000e+00 +1.655499999999999918e-09 0.000000000000000000e+00 +1.655999999999999865e-09 0.000000000000000000e+00 +1.656500000000000018e-09 0.000000000000000000e+00 +1.656999999999999965e-09 0.000000000000000000e+00 +1.657499999999999911e-09 0.000000000000000000e+00 +1.658000000000000065e-09 0.000000000000000000e+00 +1.658500000000000011e-09 0.000000000000000000e+00 +1.658999999999999958e-09 0.000000000000000000e+00 +1.659499999999999905e-09 0.000000000000000000e+00 +1.660000000000000058e-09 0.000000000000000000e+00 +1.660500000000000004e-09 0.000000000000000000e+00 +1.660999999999999951e-09 0.000000000000000000e+00 +1.661499999999999898e-09 0.000000000000000000e+00 +1.662000000000000051e-09 0.000000000000000000e+00 +1.662499999999999998e-09 0.000000000000000000e+00 +1.662999999999999944e-09 0.000000000000000000e+00 +1.663499999999999891e-09 0.000000000000000000e+00 +1.664000000000000044e-09 0.000000000000000000e+00 +1.664499999999999991e-09 0.000000000000000000e+00 +1.664999999999999937e-09 0.000000000000000000e+00 +1.665499999999999884e-09 0.000000000000000000e+00 +1.666000000000000037e-09 0.000000000000000000e+00 +1.666499999999999984e-09 0.000000000000000000e+00 +1.666999999999999930e-09 0.000000000000000000e+00 +1.667499999999999877e-09 0.000000000000000000e+00 +1.668000000000000030e-09 0.000000000000000000e+00 +1.668499999999999977e-09 0.000000000000000000e+00 +1.668999999999999923e-09 0.000000000000000000e+00 +1.669499999999999870e-09 0.000000000000000000e+00 +1.670000000000000023e-09 0.000000000000000000e+00 +1.670499999999999970e-09 0.000000000000000000e+00 +1.670999999999999917e-09 0.000000000000000000e+00 +1.671499999999999863e-09 0.000000000000000000e+00 +1.672000000000000016e-09 0.000000000000000000e+00 +1.672499999999999963e-09 0.000000000000000000e+00 +1.672999999999999910e-09 0.000000000000000000e+00 +1.673500000000000063e-09 0.000000000000000000e+00 +1.674000000000000010e-09 0.000000000000000000e+00 +1.674499999999999956e-09 0.000000000000000000e+00 +1.674999999999999903e-09 0.000000000000000000e+00 +1.675500000000000056e-09 0.000000000000000000e+00 +1.676000000000000003e-09 0.000000000000000000e+00 +1.676499999999999949e-09 0.000000000000000000e+00 +1.676999999999999896e-09 0.000000000000000000e+00 +1.677500000000000049e-09 0.000000000000000000e+00 +1.677999999999999996e-09 0.000000000000000000e+00 +1.678499999999999942e-09 0.000000000000000000e+00 +1.678999999999999889e-09 0.000000000000000000e+00 +1.679500000000000042e-09 0.000000000000000000e+00 +1.679999999999999989e-09 0.000000000000000000e+00 +1.680499999999999935e-09 0.000000000000000000e+00 +1.680999999999999882e-09 0.000000000000000000e+00 +1.681500000000000035e-09 0.000000000000000000e+00 +1.681999999999999982e-09 0.000000000000000000e+00 +1.682499999999999928e-09 0.000000000000000000e+00 +1.682999999999999875e-09 0.000000000000000000e+00 +1.683500000000000028e-09 0.000000000000000000e+00 +1.683999999999999975e-09 0.000000000000000000e+00 +1.684499999999999922e-09 0.000000000000000000e+00 +1.684999999999999868e-09 0.000000000000000000e+00 +1.685500000000000022e-09 0.000000000000000000e+00 +1.685999999999999968e-09 0.000000000000000000e+00 +1.686499999999999915e-09 0.000000000000000000e+00 +1.687000000000000068e-09 0.000000000000000000e+00 +1.687500000000000015e-09 0.000000000000000000e+00 +1.687999999999999961e-09 0.000000000000000000e+00 +1.688499999999999908e-09 0.000000000000000000e+00 +1.689000000000000061e-09 0.000000000000000000e+00 +1.689500000000000008e-09 0.000000000000000000e+00 +1.689999999999999954e-09 0.000000000000000000e+00 +1.690499999999999901e-09 0.000000000000000000e+00 +1.691000000000000054e-09 0.000000000000000000e+00 +1.691500000000000001e-09 0.000000000000000000e+00 +1.691999999999999947e-09 0.000000000000000000e+00 +1.692499999999999894e-09 0.000000000000000000e+00 +1.693000000000000047e-09 0.000000000000000000e+00 +1.693499999999999994e-09 0.000000000000000000e+00 +1.693999999999999940e-09 0.000000000000000000e+00 +1.694499999999999887e-09 0.000000000000000000e+00 +1.695000000000000040e-09 0.000000000000000000e+00 +1.695499999999999987e-09 0.000000000000000000e+00 +1.695999999999999934e-09 0.000000000000000000e+00 +1.696499999999999880e-09 0.000000000000000000e+00 +1.697000000000000034e-09 0.000000000000000000e+00 +1.697499999999999980e-09 0.000000000000000000e+00 +1.697999999999999927e-09 0.000000000000000000e+00 +1.698499999999999873e-09 0.000000000000000000e+00 +1.699000000000000027e-09 0.000000000000000000e+00 +1.699499999999999973e-09 0.000000000000000000e+00 +1.699999999999999920e-09 0.000000000000000000e+00 +1.700499999999999866e-09 0.000000000000000000e+00 +1.701000000000000020e-09 0.000000000000000000e+00 +1.701499999999999966e-09 0.000000000000000000e+00 +1.701999999999999913e-09 0.000000000000000000e+00 +1.702500000000000066e-09 0.000000000000000000e+00 +1.703000000000000013e-09 0.000000000000000000e+00 +1.703499999999999959e-09 0.000000000000000000e+00 +1.703999999999999906e-09 0.000000000000000000e+00 +1.704500000000000059e-09 0.000000000000000000e+00 +1.705000000000000006e-09 0.000000000000000000e+00 +1.705499999999999952e-09 0.000000000000000000e+00 +1.705999999999999899e-09 0.000000000000000000e+00 +1.706500000000000052e-09 0.000000000000000000e+00 +1.706999999999999999e-09 0.000000000000000000e+00 +1.707499999999999946e-09 0.000000000000000000e+00 +1.707999999999999892e-09 0.000000000000000000e+00 +1.708500000000000046e-09 0.000000000000000000e+00 +1.708999999999999992e-09 0.000000000000000000e+00 +1.709499999999999939e-09 0.000000000000000000e+00 +1.709999999999999885e-09 0.000000000000000000e+00 +1.710500000000000039e-09 0.000000000000000000e+00 +1.710999999999999985e-09 0.000000000000000000e+00 +1.711499999999999932e-09 0.000000000000000000e+00 +1.711999999999999878e-09 0.000000000000000000e+00 +1.712500000000000032e-09 0.000000000000000000e+00 +1.712999999999999978e-09 0.000000000000000000e+00 +1.713499999999999925e-09 0.000000000000000000e+00 +1.713999999999999871e-09 0.000000000000000000e+00 +1.714500000000000025e-09 0.000000000000000000e+00 +1.714999999999999971e-09 0.000000000000000000e+00 +1.715499999999999918e-09 0.000000000000000000e+00 +1.715999999999999865e-09 0.000000000000000000e+00 +1.716500000000000018e-09 0.000000000000000000e+00 +1.716999999999999964e-09 0.000000000000000000e+00 +1.717499999999999911e-09 0.000000000000000000e+00 +1.718000000000000064e-09 0.000000000000000000e+00 +1.718500000000000011e-09 0.000000000000000000e+00 +1.718999999999999958e-09 0.000000000000000000e+00 +1.719499999999999904e-09 0.000000000000000000e+00 +1.720000000000000057e-09 0.000000000000000000e+00 +1.720500000000000004e-09 0.000000000000000000e+00 +1.720999999999999951e-09 0.000000000000000000e+00 +1.721499999999999897e-09 0.000000000000000000e+00 +1.722000000000000051e-09 0.000000000000000000e+00 +1.722499999999999997e-09 0.000000000000000000e+00 +1.722999999999999944e-09 0.000000000000000000e+00 +1.723499999999999890e-09 0.000000000000000000e+00 +1.724000000000000044e-09 0.000000000000000000e+00 +1.724499999999999990e-09 0.000000000000000000e+00 +1.724999999999999937e-09 0.000000000000000000e+00 +1.725499999999999883e-09 0.000000000000000000e+00 +1.726000000000000037e-09 0.000000000000000000e+00 +1.726499999999999983e-09 0.000000000000000000e+00 +1.726999999999999930e-09 0.000000000000000000e+00 +1.727499999999999876e-09 0.000000000000000000e+00 +1.728000000000000030e-09 0.000000000000000000e+00 +1.728499999999999976e-09 0.000000000000000000e+00 +1.728999999999999923e-09 0.000000000000000000e+00 +1.729499999999999870e-09 0.000000000000000000e+00 +1.730000000000000023e-09 0.000000000000000000e+00 +1.730499999999999970e-09 0.000000000000000000e+00 +1.730999999999999916e-09 0.000000000000000000e+00 +1.731499999999999863e-09 0.000000000000000000e+00 +1.732000000000000016e-09 0.000000000000000000e+00 +1.732499999999999963e-09 0.000000000000000000e+00 +1.732999999999999909e-09 0.000000000000000000e+00 +1.733500000000000063e-09 0.000000000000000000e+00 +1.734000000000000009e-09 0.000000000000000000e+00 +1.734499999999999956e-09 0.000000000000000000e+00 +1.734999999999999902e-09 0.000000000000000000e+00 +1.735500000000000056e-09 0.000000000000000000e+00 +1.736000000000000002e-09 0.000000000000000000e+00 +1.736499999999999949e-09 0.000000000000000000e+00 +1.736999999999999895e-09 0.000000000000000000e+00 +1.737500000000000049e-09 0.000000000000000000e+00 +1.737999999999999995e-09 0.000000000000000000e+00 +1.738499999999999942e-09 0.000000000000000000e+00 +1.738999999999999888e-09 0.000000000000000000e+00 +1.739500000000000042e-09 0.000000000000000000e+00 +1.739999999999999988e-09 0.000000000000000000e+00 +1.740499999999999935e-09 0.000000000000000000e+00 +1.740999999999999882e-09 0.000000000000000000e+00 +1.741500000000000035e-09 0.000000000000000000e+00 +1.741999999999999982e-09 0.000000000000000000e+00 +1.742499999999999928e-09 0.000000000000000000e+00 +1.742999999999999875e-09 0.000000000000000000e+00 +1.743500000000000028e-09 0.000000000000000000e+00 +1.743999999999999975e-09 0.000000000000000000e+00 +1.744499999999999921e-09 0.000000000000000000e+00 +1.744999999999999868e-09 0.000000000000000000e+00 +1.745500000000000021e-09 0.000000000000000000e+00 +1.745999999999999968e-09 0.000000000000000000e+00 +1.746499999999999914e-09 0.000000000000000000e+00 +1.747000000000000068e-09 0.000000000000000000e+00 +1.747500000000000014e-09 0.000000000000000000e+00 +1.747999999999999961e-09 0.000000000000000000e+00 +1.748499999999999907e-09 0.000000000000000000e+00 +1.749000000000000061e-09 0.000000000000000000e+00 +1.749500000000000007e-09 0.000000000000000000e+00 +1.749999999999999954e-09 0.000000000000000000e+00 +1.750499999999999900e-09 0.000000000000000000e+00 +1.751000000000000054e-09 0.000000000000000000e+00 +1.751500000000000000e-09 0.000000000000000000e+00 +1.751999999999999947e-09 0.000000000000000000e+00 +1.752499999999999894e-09 0.000000000000000000e+00 +1.753000000000000047e-09 0.000000000000000000e+00 +1.753499999999999994e-09 0.000000000000000000e+00 +1.753999999999999940e-09 0.000000000000000000e+00 +1.754499999999999887e-09 0.000000000000000000e+00 +1.755000000000000040e-09 0.000000000000000000e+00 +1.755499999999999987e-09 0.000000000000000000e+00 +1.755999999999999933e-09 0.000000000000000000e+00 +1.756499999999999880e-09 0.000000000000000000e+00 +1.757000000000000033e-09 0.000000000000000000e+00 +1.757499999999999980e-09 0.000000000000000000e+00 +1.757999999999999926e-09 0.000000000000000000e+00 +1.758499999999999873e-09 0.000000000000000000e+00 +1.759000000000000026e-09 0.000000000000000000e+00 +1.759499999999999973e-09 0.000000000000000000e+00 +1.759999999999999919e-09 0.000000000000000000e+00 +1.760499999999999866e-09 0.000000000000000000e+00 +1.761000000000000019e-09 0.000000000000000000e+00 +1.761499999999999966e-09 0.000000000000000000e+00 +1.761999999999999912e-09 0.000000000000000000e+00 +1.762500000000000066e-09 0.000000000000000000e+00 +1.763000000000000012e-09 0.000000000000000000e+00 +1.763499999999999959e-09 0.000000000000000000e+00 +1.763999999999999906e-09 0.000000000000000000e+00 +1.764500000000000059e-09 0.000000000000000000e+00 +1.765000000000000005e-09 0.000000000000000000e+00 +1.765499999999999952e-09 0.000000000000000000e+00 +1.765999999999999899e-09 0.000000000000000000e+00 +1.766500000000000052e-09 0.000000000000000000e+00 +1.766999999999999999e-09 0.000000000000000000e+00 +1.767499999999999945e-09 0.000000000000000000e+00 +1.767999999999999892e-09 0.000000000000000000e+00 +1.768500000000000045e-09 0.000000000000000000e+00 +1.768999999999999992e-09 0.000000000000000000e+00 +1.769499999999999938e-09 0.000000000000000000e+00 +1.769999999999999885e-09 0.000000000000000000e+00 +1.770500000000000038e-09 0.000000000000000000e+00 +1.770999999999999985e-09 0.000000000000000000e+00 +1.771499999999999931e-09 0.000000000000000000e+00 +1.771999999999999878e-09 0.000000000000000000e+00 +1.772500000000000031e-09 0.000000000000000000e+00 +1.772999999999999978e-09 0.000000000000000000e+00 +1.773499999999999924e-09 0.000000000000000000e+00 +1.773999999999999871e-09 0.000000000000000000e+00 +1.774500000000000024e-09 0.000000000000000000e+00 +1.774999999999999971e-09 0.000000000000000000e+00 +1.775499999999999918e-09 0.000000000000000000e+00 +1.775999999999999864e-09 0.000000000000000000e+00 +1.776500000000000017e-09 0.000000000000000000e+00 +1.776999999999999964e-09 0.000000000000000000e+00 +1.777499999999999911e-09 0.000000000000000000e+00 +1.778000000000000064e-09 0.000000000000000000e+00 +1.778500000000000011e-09 0.000000000000000000e+00 +1.778999999999999957e-09 0.000000000000000000e+00 +1.779499999999999904e-09 0.000000000000000000e+00 +1.780000000000000057e-09 0.000000000000000000e+00 +1.780500000000000004e-09 0.000000000000000000e+00 +1.780999999999999950e-09 0.000000000000000000e+00 +1.781499999999999897e-09 0.000000000000000000e+00 +1.782000000000000050e-09 0.000000000000000000e+00 +1.782499999999999997e-09 0.000000000000000000e+00 +1.782999999999999943e-09 0.000000000000000000e+00 +1.783499999999999890e-09 0.000000000000000000e+00 +1.784000000000000043e-09 0.000000000000000000e+00 +1.784499999999999990e-09 0.000000000000000000e+00 +1.784999999999999936e-09 0.000000000000000000e+00 +1.785499999999999883e-09 0.000000000000000000e+00 +1.786000000000000036e-09 0.000000000000000000e+00 +1.786499999999999983e-09 0.000000000000000000e+00 +1.786999999999999930e-09 0.000000000000000000e+00 +1.787499999999999876e-09 0.000000000000000000e+00 +1.788000000000000029e-09 0.000000000000000000e+00 +1.788499999999999976e-09 0.000000000000000000e+00 +1.788999999999999923e-09 0.000000000000000000e+00 +1.789499999999999869e-09 0.000000000000000000e+00 +1.790000000000000023e-09 0.000000000000000000e+00 +1.790499999999999969e-09 0.000000000000000000e+00 +1.790999999999999916e-09 0.000000000000000000e+00 +1.791499999999999862e-09 0.000000000000000000e+00 +1.792000000000000016e-09 0.000000000000000000e+00 +1.792499999999999962e-09 0.000000000000000000e+00 +1.792999999999999909e-09 0.000000000000000000e+00 +1.793500000000000062e-09 0.000000000000000000e+00 +1.794000000000000009e-09 0.000000000000000000e+00 +1.794499999999999955e-09 0.000000000000000000e+00 +1.794999999999999902e-09 0.000000000000000000e+00 +1.795500000000000055e-09 0.000000000000000000e+00 +1.796000000000000002e-09 0.000000000000000000e+00 +1.796499999999999948e-09 0.000000000000000000e+00 +1.796999999999999895e-09 0.000000000000000000e+00 +1.797500000000000048e-09 0.000000000000000000e+00 +1.797999999999999995e-09 0.000000000000000000e+00 +1.798499999999999942e-09 0.000000000000000000e+00 +1.798999999999999888e-09 0.000000000000000000e+00 +1.799500000000000041e-09 0.000000000000000000e+00 +1.799999999999999988e-09 0.000000000000000000e+00 +1.800499999999999935e-09 0.000000000000000000e+00 +1.800999999999999881e-09 0.000000000000000000e+00 +1.801500000000000035e-09 0.000000000000000000e+00 +1.801999999999999981e-09 0.000000000000000000e+00 +1.802499999999999928e-09 0.000000000000000000e+00 +1.802999999999999874e-09 0.000000000000000000e+00 +1.803500000000000028e-09 0.000000000000000000e+00 +1.803999999999999974e-09 0.000000000000000000e+00 +1.804499999999999921e-09 0.000000000000000000e+00 +1.804999999999999867e-09 0.000000000000000000e+00 +1.805500000000000021e-09 0.000000000000000000e+00 +1.805999999999999967e-09 0.000000000000000000e+00 +1.806499999999999914e-09 0.000000000000000000e+00 +1.806999999999999860e-09 0.000000000000000000e+00 +1.807500000000000014e-09 0.000000000000000000e+00 +1.807999999999999960e-09 0.000000000000000000e+00 +1.808499999999999907e-09 0.000000000000000000e+00 +1.809000000000000060e-09 0.000000000000000000e+00 +1.809500000000000007e-09 0.000000000000000000e+00 +1.809999999999999953e-09 0.000000000000000000e+00 +1.810499999999999900e-09 0.000000000000000000e+00 +1.811000000000000053e-09 0.000000000000000000e+00 +1.811500000000000000e-09 0.000000000000000000e+00 +1.811999999999999947e-09 0.000000000000000000e+00 +1.812499999999999893e-09 0.000000000000000000e+00 +1.813000000000000047e-09 0.000000000000000000e+00 +1.813499999999999993e-09 0.000000000000000000e+00 +1.813999999999999940e-09 0.000000000000000000e+00 +1.814499999999999886e-09 0.000000000000000000e+00 +1.815000000000000040e-09 0.000000000000000000e+00 +1.815499999999999986e-09 0.000000000000000000e+00 +1.815999999999999933e-09 0.000000000000000000e+00 +1.816499999999999879e-09 0.000000000000000000e+00 +1.817000000000000033e-09 0.000000000000000000e+00 +1.817499999999999979e-09 0.000000000000000000e+00 +1.817999999999999926e-09 0.000000000000000000e+00 +1.818499999999999872e-09 0.000000000000000000e+00 +1.819000000000000026e-09 0.000000000000000000e+00 +1.819499999999999972e-09 0.000000000000000000e+00 +1.819999999999999919e-09 0.000000000000000000e+00 +1.820499999999999866e-09 0.000000000000000000e+00 +1.821000000000000019e-09 0.000000000000000000e+00 +1.821499999999999965e-09 0.000000000000000000e+00 +1.821999999999999912e-09 0.000000000000000000e+00 +1.822500000000000065e-09 0.000000000000000000e+00 +1.823000000000000012e-09 0.000000000000000000e+00 +1.823499999999999959e-09 0.000000000000000000e+00 +1.823999999999999905e-09 0.000000000000000000e+00 +1.824500000000000059e-09 0.000000000000000000e+00 +1.825000000000000005e-09 0.000000000000000000e+00 +1.825499999999999952e-09 0.000000000000000000e+00 +1.825999999999999898e-09 0.000000000000000000e+00 +1.826500000000000052e-09 0.000000000000000000e+00 +1.826999999999999998e-09 0.000000000000000000e+00 +1.827499999999999945e-09 0.000000000000000000e+00 +1.827999999999999891e-09 0.000000000000000000e+00 +1.828500000000000045e-09 0.000000000000000000e+00 +1.828999999999999991e-09 0.000000000000000000e+00 +1.829499999999999938e-09 0.000000000000000000e+00 +1.829999999999999884e-09 0.000000000000000000e+00 +1.830500000000000038e-09 0.000000000000000000e+00 +1.830999999999999984e-09 0.000000000000000000e+00 +1.831499999999999931e-09 0.000000000000000000e+00 +1.831999999999999878e-09 0.000000000000000000e+00 +1.832500000000000031e-09 0.000000000000000000e+00 +1.832999999999999977e-09 0.000000000000000000e+00 +1.833499999999999924e-09 0.000000000000000000e+00 +1.833999999999999871e-09 0.000000000000000000e+00 +1.834500000000000024e-09 0.000000000000000000e+00 +1.834999999999999971e-09 0.000000000000000000e+00 +1.835499999999999917e-09 0.000000000000000000e+00 +1.835999999999999864e-09 0.000000000000000000e+00 +1.836500000000000017e-09 0.000000000000000000e+00 +1.836999999999999964e-09 0.000000000000000000e+00 +1.837499999999999910e-09 0.000000000000000000e+00 +1.838000000000000064e-09 0.000000000000000000e+00 +1.838500000000000010e-09 0.000000000000000000e+00 +1.838999999999999957e-09 0.000000000000000000e+00 +1.839499999999999903e-09 0.000000000000000000e+00 +1.840000000000000057e-09 0.000000000000000000e+00 +1.840500000000000003e-09 0.000000000000000000e+00 +1.840999999999999950e-09 0.000000000000000000e+00 +1.841499999999999896e-09 0.000000000000000000e+00 +1.842000000000000050e-09 0.000000000000000000e+00 +1.842499999999999996e-09 0.000000000000000000e+00 +1.842999999999999943e-09 0.000000000000000000e+00 +1.843499999999999890e-09 0.000000000000000000e+00 +1.844000000000000043e-09 0.000000000000000000e+00 +1.844499999999999989e-09 0.000000000000000000e+00 +1.844999999999999936e-09 0.000000000000000000e+00 +1.845499999999999883e-09 0.000000000000000000e+00 +1.846000000000000036e-09 0.000000000000000000e+00 +1.846499999999999983e-09 0.000000000000000000e+00 +1.846999999999999929e-09 0.000000000000000000e+00 +1.847499999999999876e-09 0.000000000000000000e+00 +1.848000000000000029e-09 0.000000000000000000e+00 +1.848499999999999976e-09 0.000000000000000000e+00 +1.848999999999999922e-09 0.000000000000000000e+00 +1.849499999999999869e-09 0.000000000000000000e+00 +1.850000000000000022e-09 0.000000000000000000e+00 +1.850499999999999969e-09 0.000000000000000000e+00 +1.850999999999999915e-09 0.000000000000000000e+00 +1.851499999999999862e-09 0.000000000000000000e+00 +1.852000000000000015e-09 0.000000000000000000e+00 +1.852499999999999962e-09 0.000000000000000000e+00 +1.852999999999999908e-09 0.000000000000000000e+00 +1.853500000000000062e-09 0.000000000000000000e+00 +1.854000000000000008e-09 0.000000000000000000e+00 +1.854499999999999955e-09 0.000000000000000000e+00 +1.854999999999999901e-09 0.000000000000000000e+00 +1.855500000000000055e-09 0.000000000000000000e+00 +1.856000000000000001e-09 0.000000000000000000e+00 +1.856499999999999948e-09 0.000000000000000000e+00 +1.856999999999999895e-09 0.000000000000000000e+00 +1.857500000000000048e-09 0.000000000000000000e+00 +1.857999999999999995e-09 0.000000000000000000e+00 +1.858499999999999941e-09 0.000000000000000000e+00 +1.858999999999999888e-09 0.000000000000000000e+00 +1.859500000000000041e-09 0.000000000000000000e+00 +1.859999999999999988e-09 0.000000000000000000e+00 +1.860499999999999934e-09 0.000000000000000000e+00 +1.860999999999999881e-09 0.000000000000000000e+00 +1.861500000000000034e-09 0.000000000000000000e+00 +1.861999999999999981e-09 0.000000000000000000e+00 +1.862499999999999927e-09 0.000000000000000000e+00 +1.862999999999999874e-09 0.000000000000000000e+00 +1.863500000000000027e-09 0.000000000000000000e+00 +1.863999999999999767e-09 0.000000000000000000e+00 +1.864499999999999920e-09 0.000000000000000000e+00 +1.865000000000000074e-09 0.000000000000000000e+00 +1.865499999999999814e-09 0.000000000000000000e+00 +1.865999999999999967e-09 0.000000000000000000e+00 +1.866500000000000120e-09 0.000000000000000000e+00 +1.866999999999999860e-09 0.000000000000000000e+00 +1.867500000000000013e-09 0.000000000000000000e+00 +1.868000000000000167e-09 0.000000000000000000e+00 +1.868499999999999907e-09 0.000000000000000000e+00 +1.869000000000000060e-09 0.000000000000000000e+00 +1.869499999999999800e-09 0.000000000000000000e+00 +1.869999999999999953e-09 0.000000000000000000e+00 +1.870500000000000106e-09 0.000000000000000000e+00 +1.870999999999999846e-09 0.000000000000000000e+00 +1.871500000000000000e-09 0.000000000000000000e+00 +1.872000000000000153e-09 0.000000000000000000e+00 +1.872499999999999893e-09 0.000000000000000000e+00 +1.873000000000000046e-09 0.000000000000000000e+00 +1.873499999999999786e-09 0.000000000000000000e+00 +1.873999999999999939e-09 0.000000000000000000e+00 +1.874500000000000093e-09 0.000000000000000000e+00 +1.874999999999999832e-09 0.000000000000000000e+00 +1.875499999999999986e-09 0.000000000000000000e+00 +1.876000000000000139e-09 0.000000000000000000e+00 +1.876499999999999879e-09 0.000000000000000000e+00 +1.877000000000000032e-09 0.000000000000000000e+00 +1.877499999999999772e-09 0.000000000000000000e+00 +1.877999999999999925e-09 0.000000000000000000e+00 +1.878500000000000079e-09 0.000000000000000000e+00 +1.878999999999999819e-09 0.000000000000000000e+00 +1.879499999999999972e-09 0.000000000000000000e+00 +1.880000000000000125e-09 0.000000000000000000e+00 +1.880499999999999865e-09 0.000000000000000000e+00 +1.881000000000000019e-09 0.000000000000000000e+00 +1.881499999999999758e-09 0.000000000000000000e+00 +1.881999999999999912e-09 0.000000000000000000e+00 +1.882500000000000065e-09 0.000000000000000000e+00 +1.882999999999999805e-09 0.000000000000000000e+00 +1.883499999999999958e-09 0.000000000000000000e+00 +1.884000000000000112e-09 0.000000000000000000e+00 +1.884499999999999851e-09 0.000000000000000000e+00 +1.885000000000000005e-09 0.000000000000000000e+00 +1.885500000000000158e-09 0.000000000000000000e+00 +1.885999999999999898e-09 0.000000000000000000e+00 +1.886500000000000051e-09 0.000000000000000000e+00 +1.886999999999999791e-09 0.000000000000000000e+00 +1.887499999999999944e-09 0.000000000000000000e+00 +1.888000000000000098e-09 0.000000000000000000e+00 +1.888499999999999838e-09 0.000000000000000000e+00 +1.888999999999999991e-09 0.000000000000000000e+00 +1.889500000000000144e-09 0.000000000000000000e+00 +1.889999999999999884e-09 0.000000000000000000e+00 +1.890500000000000037e-09 0.000000000000000000e+00 +1.890999999999999777e-09 0.000000000000000000e+00 +1.891499999999999931e-09 0.000000000000000000e+00 +1.892000000000000084e-09 0.000000000000000000e+00 +1.892499999999999824e-09 0.000000000000000000e+00 +1.892999999999999977e-09 0.000000000000000000e+00 +1.893500000000000130e-09 0.000000000000000000e+00 +1.893999999999999870e-09 0.000000000000000000e+00 +1.894500000000000024e-09 0.000000000000000000e+00 +1.894999999999999763e-09 0.000000000000000000e+00 +1.895499999999999917e-09 0.000000000000000000e+00 +1.896000000000000070e-09 0.000000000000000000e+00 +1.896499999999999810e-09 0.000000000000000000e+00 +1.896999999999999963e-09 0.000000000000000000e+00 +1.897500000000000117e-09 0.000000000000000000e+00 +1.897999999999999856e-09 0.000000000000000000e+00 +1.898500000000000010e-09 0.000000000000000000e+00 +1.899000000000000163e-09 0.000000000000000000e+00 +1.899499999999999903e-09 0.000000000000000000e+00 +1.900000000000000056e-09 0.000000000000000000e+00 +1.900499999999999796e-09 0.000000000000000000e+00 +1.900999999999999949e-09 0.000000000000000000e+00 +1.901500000000000103e-09 0.000000000000000000e+00 +1.901999999999999843e-09 0.000000000000000000e+00 +1.902499999999999996e-09 0.000000000000000000e+00 +1.903000000000000149e-09 0.000000000000000000e+00 +1.903499999999999889e-09 0.000000000000000000e+00 +1.904000000000000042e-09 0.000000000000000000e+00 +1.904499999999999782e-09 0.000000000000000000e+00 +1.904999999999999936e-09 0.000000000000000000e+00 +1.905500000000000089e-09 0.000000000000000000e+00 +1.905999999999999829e-09 0.000000000000000000e+00 +1.906499999999999982e-09 0.000000000000000000e+00 +1.907000000000000136e-09 0.000000000000000000e+00 +1.907499999999999875e-09 0.000000000000000000e+00 +1.908000000000000029e-09 0.000000000000000000e+00 +1.908499999999999768e-09 0.000000000000000000e+00 +1.908999999999999922e-09 0.000000000000000000e+00 +1.909500000000000075e-09 0.000000000000000000e+00 +1.909999999999999815e-09 0.000000000000000000e+00 +1.910499999999999968e-09 0.000000000000000000e+00 +1.911000000000000122e-09 0.000000000000000000e+00 +1.911499999999999861e-09 0.000000000000000000e+00 +1.912000000000000015e-09 0.000000000000000000e+00 +1.912500000000000168e-09 0.000000000000000000e+00 +1.912999999999999908e-09 0.000000000000000000e+00 +1.913500000000000061e-09 0.000000000000000000e+00 +1.913999999999999801e-09 0.000000000000000000e+00 +1.914499999999999955e-09 0.000000000000000000e+00 +1.915000000000000108e-09 0.000000000000000000e+00 +1.915499999999999848e-09 0.000000000000000000e+00 +1.916000000000000001e-09 0.000000000000000000e+00 +1.916500000000000154e-09 0.000000000000000000e+00 +1.916999999999999894e-09 0.000000000000000000e+00 +1.917500000000000048e-09 0.000000000000000000e+00 +1.917999999999999787e-09 0.000000000000000000e+00 +1.918499999999999941e-09 0.000000000000000000e+00 +1.919000000000000094e-09 0.000000000000000000e+00 +1.919499999999999834e-09 0.000000000000000000e+00 +1.919999999999999987e-09 0.000000000000000000e+00 +1.920500000000000141e-09 0.000000000000000000e+00 +1.920999999999999880e-09 0.000000000000000000e+00 +1.921500000000000034e-09 0.000000000000000000e+00 +1.921999999999999774e-09 0.000000000000000000e+00 +1.922499999999999927e-09 0.000000000000000000e+00 +1.923000000000000080e-09 0.000000000000000000e+00 +1.923499999999999820e-09 0.000000000000000000e+00 +1.923999999999999973e-09 0.000000000000000000e+00 +1.924500000000000127e-09 0.000000000000000000e+00 +1.924999999999999867e-09 0.000000000000000000e+00 +1.925500000000000020e-09 0.000000000000000000e+00 +1.925999999999999760e-09 0.000000000000000000e+00 +1.926499999999999913e-09 0.000000000000000000e+00 +1.927000000000000066e-09 0.000000000000000000e+00 +1.927499999999999806e-09 0.000000000000000000e+00 +1.927999999999999960e-09 0.000000000000000000e+00 +1.928500000000000113e-09 0.000000000000000000e+00 +1.928999999999999853e-09 0.000000000000000000e+00 +1.929500000000000006e-09 0.000000000000000000e+00 +1.930000000000000159e-09 0.000000000000000000e+00 +1.930499999999999899e-09 0.000000000000000000e+00 +1.931000000000000053e-09 0.000000000000000000e+00 +1.931499999999999792e-09 0.000000000000000000e+00 +1.931999999999999946e-09 0.000000000000000000e+00 +1.932500000000000099e-09 0.000000000000000000e+00 +1.932999999999999839e-09 0.000000000000000000e+00 +1.933499999999999992e-09 0.000000000000000000e+00 +1.934000000000000146e-09 0.000000000000000000e+00 +1.934499999999999885e-09 0.000000000000000000e+00 +1.935000000000000039e-09 0.000000000000000000e+00 +1.935499999999999779e-09 0.000000000000000000e+00 +1.935999999999999932e-09 0.000000000000000000e+00 +1.936500000000000085e-09 0.000000000000000000e+00 +1.936999999999999825e-09 0.000000000000000000e+00 +1.937499999999999978e-09 0.000000000000000000e+00 +1.938000000000000132e-09 0.000000000000000000e+00 +1.938499999999999872e-09 0.000000000000000000e+00 +1.939000000000000025e-09 0.000000000000000000e+00 +1.939499999999999765e-09 0.000000000000000000e+00 +1.939999999999999918e-09 0.000000000000000000e+00 +1.940500000000000072e-09 0.000000000000000000e+00 +1.940999999999999811e-09 0.000000000000000000e+00 +1.941499999999999965e-09 0.000000000000000000e+00 +1.942000000000000118e-09 0.000000000000000000e+00 +1.942499999999999858e-09 0.000000000000000000e+00 +1.943000000000000011e-09 0.000000000000000000e+00 +1.943500000000000165e-09 0.000000000000000000e+00 +1.943999999999999904e-09 0.000000000000000000e+00 +1.944500000000000058e-09 0.000000000000000000e+00 +1.944999999999999798e-09 0.000000000000000000e+00 +1.945499999999999951e-09 0.000000000000000000e+00 +1.946000000000000104e-09 0.000000000000000000e+00 +1.946499999999999844e-09 0.000000000000000000e+00 +1.946999999999999997e-09 0.000000000000000000e+00 +1.947500000000000151e-09 0.000000000000000000e+00 +1.947999999999999891e-09 0.000000000000000000e+00 +1.948500000000000044e-09 0.000000000000000000e+00 +1.948999999999999784e-09 0.000000000000000000e+00 +1.949499999999999937e-09 0.000000000000000000e+00 +1.950000000000000090e-09 0.000000000000000000e+00 +1.950499999999999830e-09 0.000000000000000000e+00 +1.950999999999999984e-09 0.000000000000000000e+00 +1.951500000000000137e-09 0.000000000000000000e+00 +1.951999999999999877e-09 0.000000000000000000e+00 +1.952500000000000030e-09 0.000000000000000000e+00 +1.952999999999999770e-09 0.000000000000000000e+00 +1.953499999999999923e-09 0.000000000000000000e+00 +1.954000000000000077e-09 0.000000000000000000e+00 +1.954499999999999816e-09 0.000000000000000000e+00 +1.954999999999999970e-09 0.000000000000000000e+00 +1.955500000000000123e-09 0.000000000000000000e+00 +1.955999999999999863e-09 0.000000000000000000e+00 +1.956500000000000016e-09 0.000000000000000000e+00 +1.956999999999999756e-09 0.000000000000000000e+00 +1.957499999999999909e-09 0.000000000000000000e+00 +1.958000000000000063e-09 0.000000000000000000e+00 +1.958499999999999803e-09 0.000000000000000000e+00 +1.958999999999999956e-09 0.000000000000000000e+00 +1.959500000000000109e-09 0.000000000000000000e+00 +1.959999999999999849e-09 0.000000000000000000e+00 +1.960500000000000002e-09 0.000000000000000000e+00 +1.961000000000000156e-09 0.000000000000000000e+00 +1.961499999999999896e-09 0.000000000000000000e+00 +1.962000000000000049e-09 0.000000000000000000e+00 +1.962499999999999789e-09 0.000000000000000000e+00 +1.962999999999999942e-09 0.000000000000000000e+00 +1.963500000000000096e-09 0.000000000000000000e+00 +1.963999999999999835e-09 0.000000000000000000e+00 +1.964499999999999989e-09 0.000000000000000000e+00 +1.965000000000000142e-09 0.000000000000000000e+00 +1.965499999999999882e-09 0.000000000000000000e+00 +1.966000000000000035e-09 0.000000000000000000e+00 +1.966499999999999775e-09 0.000000000000000000e+00 +1.966999999999999928e-09 0.000000000000000000e+00 +1.967500000000000082e-09 0.000000000000000000e+00 +1.967999999999999821e-09 0.000000000000000000e+00 +1.968499999999999975e-09 0.000000000000000000e+00 +1.969000000000000128e-09 0.000000000000000000e+00 +1.969499999999999868e-09 0.000000000000000000e+00 +1.970000000000000021e-09 0.000000000000000000e+00 +1.970499999999999761e-09 0.000000000000000000e+00 +1.970999999999999915e-09 0.000000000000000000e+00 +1.971500000000000068e-09 0.000000000000000000e+00 +1.971999999999999808e-09 0.000000000000000000e+00 +1.972499999999999961e-09 0.000000000000000000e+00 +1.973000000000000114e-09 0.000000000000000000e+00 +1.973499999999999854e-09 0.000000000000000000e+00 +1.974000000000000008e-09 0.000000000000000000e+00 +1.974500000000000161e-09 0.000000000000000000e+00 +1.974999999999999901e-09 0.000000000000000000e+00 +1.975500000000000054e-09 0.000000000000000000e+00 +1.975999999999999794e-09 0.000000000000000000e+00 +1.976499999999999947e-09 0.000000000000000000e+00 +1.977000000000000101e-09 0.000000000000000000e+00 +1.977499999999999840e-09 0.000000000000000000e+00 +1.977999999999999994e-09 0.000000000000000000e+00 +1.978500000000000147e-09 0.000000000000000000e+00 +1.978999999999999887e-09 0.000000000000000000e+00 +1.979500000000000040e-09 0.000000000000000000e+00 +1.979999999999999780e-09 0.000000000000000000e+00 +1.980499999999999933e-09 0.000000000000000000e+00 +1.981000000000000087e-09 0.000000000000000000e+00 +1.981499999999999827e-09 0.000000000000000000e+00 +1.981999999999999980e-09 0.000000000000000000e+00 +1.982500000000000133e-09 0.000000000000000000e+00 +1.982999999999999873e-09 0.000000000000000000e+00 +1.983500000000000026e-09 0.000000000000000000e+00 +1.983999999999999766e-09 0.000000000000000000e+00 +1.984499999999999920e-09 0.000000000000000000e+00 +1.985000000000000073e-09 0.000000000000000000e+00 +1.985499999999999813e-09 0.000000000000000000e+00 +1.985999999999999966e-09 0.000000000000000000e+00 +1.986500000000000119e-09 0.000000000000000000e+00 +1.986999999999999859e-09 0.000000000000000000e+00 +1.987500000000000013e-09 0.000000000000000000e+00 +1.988000000000000166e-09 0.000000000000000000e+00 +1.988499999999999906e-09 0.000000000000000000e+00 +1.989000000000000059e-09 0.000000000000000000e+00 +1.989499999999999799e-09 0.000000000000000000e+00 +1.989999999999999952e-09 0.000000000000000000e+00 +1.990500000000000106e-09 0.000000000000000000e+00 +1.990999999999999845e-09 0.000000000000000000e+00 +1.991499999999999999e-09 0.000000000000000000e+00 +1.992000000000000152e-09 0.000000000000000000e+00 +1.992499999999999892e-09 0.000000000000000000e+00 +1.993000000000000045e-09 0.000000000000000000e+00 +1.993499999999999785e-09 0.000000000000000000e+00 +1.993999999999999938e-09 0.000000000000000000e+00 +1.994500000000000092e-09 0.000000000000000000e+00 +1.994999999999999832e-09 0.000000000000000000e+00 +1.995499999999999985e-09 0.000000000000000000e+00 +1.996000000000000138e-09 0.000000000000000000e+00 +1.996499999999999878e-09 0.000000000000000000e+00 +1.997000000000000032e-09 0.000000000000000000e+00 +1.997499999999999771e-09 0.000000000000000000e+00 +1.997999999999999925e-09 0.000000000000000000e+00 +1.998500000000000078e-09 0.000000000000000000e+00 +1.998999999999999818e-09 0.000000000000000000e+00 +1.999499999999999971e-09 0.000000000000000000e+00 +2.000000000000000125e-09 0.000000000000000000e+00 +2.000499999999999864e-09 0.000000000000000000e+00 +2.001000000000000018e-09 0.000000000000000000e+00 +2.001499999999999757e-09 0.000000000000000000e+00 +2.001999999999999911e-09 0.000000000000000000e+00 +2.002500000000000064e-09 0.000000000000000000e+00 +2.002999999999999804e-09 0.000000000000000000e+00 +2.003499999999999957e-09 0.000000000000000000e+00 +2.004000000000000111e-09 0.000000000000000000e+00 +2.004499999999999851e-09 0.000000000000000000e+00 +2.005000000000000004e-09 0.000000000000000000e+00 +2.005500000000000157e-09 0.000000000000000000e+00 +2.005999999999999897e-09 0.000000000000000000e+00 +2.006500000000000050e-09 0.000000000000000000e+00 +2.006999999999999790e-09 0.000000000000000000e+00 +2.007499999999999944e-09 0.000000000000000000e+00 +2.008000000000000097e-09 0.000000000000000000e+00 +2.008499999999999837e-09 0.000000000000000000e+00 +2.008999999999999990e-09 0.000000000000000000e+00 +2.009500000000000143e-09 0.000000000000000000e+00 +2.009999999999999883e-09 0.000000000000000000e+00 +2.010500000000000037e-09 0.000000000000000000e+00 +2.010999999999999776e-09 0.000000000000000000e+00 +2.011499999999999930e-09 0.000000000000000000e+00 +2.012000000000000083e-09 0.000000000000000000e+00 +2.012499999999999823e-09 0.000000000000000000e+00 +2.012999999999999976e-09 0.000000000000000000e+00 +2.013500000000000130e-09 0.000000000000000000e+00 +2.013999999999999869e-09 0.000000000000000000e+00 +2.014500000000000023e-09 0.000000000000000000e+00 +2.014999999999999763e-09 0.000000000000000000e+00 +2.015499999999999916e-09 0.000000000000000000e+00 +2.016000000000000069e-09 0.000000000000000000e+00 +2.016499999999999809e-09 0.000000000000000000e+00 +2.016999999999999962e-09 0.000000000000000000e+00 +2.017500000000000116e-09 0.000000000000000000e+00 +2.017999999999999856e-09 0.000000000000000000e+00 +2.018500000000000009e-09 0.000000000000000000e+00 +2.019000000000000162e-09 0.000000000000000000e+00 +2.019499999999999902e-09 0.000000000000000000e+00 +2.020000000000000055e-09 0.000000000000000000e+00 +2.020499999999999795e-09 0.000000000000000000e+00 +2.020999999999999949e-09 0.000000000000000000e+00 +2.021500000000000102e-09 0.000000000000000000e+00 +2.021999999999999842e-09 0.000000000000000000e+00 +2.022499999999999995e-09 0.000000000000000000e+00 +2.023000000000000149e-09 0.000000000000000000e+00 +2.023499999999999888e-09 0.000000000000000000e+00 +2.024000000000000042e-09 0.000000000000000000e+00 +2.024499999999999781e-09 0.000000000000000000e+00 +2.024999999999999935e-09 0.000000000000000000e+00 +2.025500000000000088e-09 0.000000000000000000e+00 +2.025999999999999828e-09 0.000000000000000000e+00 +2.026499999999999981e-09 0.000000000000000000e+00 +2.027000000000000135e-09 0.000000000000000000e+00 +2.027499999999999875e-09 0.000000000000000000e+00 +2.028000000000000028e-09 0.000000000000000000e+00 +2.028499999999999768e-09 0.000000000000000000e+00 +2.028999999999999921e-09 0.000000000000000000e+00 +2.029500000000000074e-09 0.000000000000000000e+00 +2.029999999999999814e-09 0.000000000000000000e+00 +2.030499999999999968e-09 0.000000000000000000e+00 +2.031000000000000121e-09 0.000000000000000000e+00 +2.031499999999999861e-09 0.000000000000000000e+00 +2.032000000000000014e-09 0.000000000000000000e+00 +2.032499999999999754e-09 0.000000000000000000e+00 +2.032999999999999907e-09 0.000000000000000000e+00 +2.033500000000000061e-09 0.000000000000000000e+00 +2.033999999999999800e-09 0.000000000000000000e+00 +2.034499999999999954e-09 0.000000000000000000e+00 +2.035000000000000107e-09 0.000000000000000000e+00 +2.035499999999999847e-09 0.000000000000000000e+00 +2.036000000000000000e-09 0.000000000000000000e+00 +2.036500000000000154e-09 0.000000000000000000e+00 +2.036999999999999893e-09 0.000000000000000000e+00 +2.037500000000000047e-09 0.000000000000000000e+00 +2.037999999999999787e-09 0.000000000000000000e+00 +2.038499999999999940e-09 0.000000000000000000e+00 +2.039000000000000093e-09 0.000000000000000000e+00 +2.039499999999999833e-09 0.000000000000000000e+00 +2.039999999999999986e-09 0.000000000000000000e+00 +2.040500000000000140e-09 0.000000000000000000e+00 +2.040999999999999880e-09 0.000000000000000000e+00 +2.041500000000000033e-09 0.000000000000000000e+00 +2.041999999999999773e-09 0.000000000000000000e+00 +2.042499999999999926e-09 0.000000000000000000e+00 +2.043000000000000079e-09 0.000000000000000000e+00 +2.043499999999999819e-09 0.000000000000000000e+00 +2.043999999999999973e-09 0.000000000000000000e+00 +2.044500000000000126e-09 0.000000000000000000e+00 +2.044999999999999866e-09 0.000000000000000000e+00 +2.045500000000000019e-09 0.000000000000000000e+00 +2.045999999999999759e-09 0.000000000000000000e+00 +2.046499999999999912e-09 0.000000000000000000e+00 +2.047000000000000066e-09 0.000000000000000000e+00 +2.047499999999999805e-09 0.000000000000000000e+00 +2.047999999999999959e-09 0.000000000000000000e+00 +2.048500000000000112e-09 0.000000000000000000e+00 +2.048999999999999852e-09 0.000000000000000000e+00 +2.049500000000000005e-09 0.000000000000000000e+00 +2.050000000000000159e-09 0.000000000000000000e+00 +2.050499999999999898e-09 0.000000000000000000e+00 +2.051000000000000052e-09 0.000000000000000000e+00 +2.051499999999999792e-09 0.000000000000000000e+00 +2.051999999999999945e-09 0.000000000000000000e+00 +2.052500000000000098e-09 0.000000000000000000e+00 +2.052999999999999838e-09 0.000000000000000000e+00 +2.053499999999999992e-09 0.000000000000000000e+00 +2.054000000000000145e-09 0.000000000000000000e+00 +2.054499999999999885e-09 0.000000000000000000e+00 +2.055000000000000038e-09 0.000000000000000000e+00 +2.055499999999999778e-09 0.000000000000000000e+00 +2.055999999999999931e-09 0.000000000000000000e+00 +2.056500000000000085e-09 0.000000000000000000e+00 +2.056999999999999824e-09 0.000000000000000000e+00 +2.057499999999999978e-09 0.000000000000000000e+00 +2.058000000000000131e-09 0.000000000000000000e+00 +2.058499999999999871e-09 0.000000000000000000e+00 +2.059000000000000024e-09 0.000000000000000000e+00 +2.059499999999999764e-09 0.000000000000000000e+00 +2.059999999999999917e-09 0.000000000000000000e+00 +2.060500000000000071e-09 0.000000000000000000e+00 +2.060999999999999811e-09 0.000000000000000000e+00 +2.061499999999999964e-09 0.000000000000000000e+00 +2.062000000000000117e-09 0.000000000000000000e+00 +2.062499999999999857e-09 0.000000000000000000e+00 +2.063000000000000010e-09 0.000000000000000000e+00 +2.063500000000000164e-09 0.000000000000000000e+00 +2.063999999999999904e-09 0.000000000000000000e+00 +2.064500000000000057e-09 0.000000000000000000e+00 +2.064999999999999797e-09 0.000000000000000000e+00 +2.065499999999999950e-09 0.000000000000000000e+00 +2.066000000000000103e-09 0.000000000000000000e+00 +2.066499999999999843e-09 0.000000000000000000e+00 +2.066999999999999997e-09 0.000000000000000000e+00 +2.067500000000000150e-09 0.000000000000000000e+00 +2.067999999999999890e-09 0.000000000000000000e+00 +2.068500000000000043e-09 0.000000000000000000e+00 +2.068999999999999783e-09 0.000000000000000000e+00 +2.069499999999999936e-09 0.000000000000000000e+00 +2.070000000000000090e-09 0.000000000000000000e+00 +2.070499999999999829e-09 0.000000000000000000e+00 +2.070999999999999983e-09 0.000000000000000000e+00 +2.071500000000000136e-09 0.000000000000000000e+00 +2.071999999999999876e-09 0.000000000000000000e+00 +2.072500000000000029e-09 0.000000000000000000e+00 +2.072999999999999769e-09 0.000000000000000000e+00 +2.073499999999999922e-09 0.000000000000000000e+00 +2.074000000000000076e-09 0.000000000000000000e+00 +2.074499999999999816e-09 0.000000000000000000e+00 +2.074999999999999969e-09 0.000000000000000000e+00 +2.075500000000000122e-09 0.000000000000000000e+00 +2.075999999999999862e-09 0.000000000000000000e+00 +2.076500000000000015e-09 0.000000000000000000e+00 +2.076999999999999755e-09 0.000000000000000000e+00 +2.077499999999999909e-09 0.000000000000000000e+00 +2.078000000000000062e-09 0.000000000000000000e+00 +2.078499999999999802e-09 0.000000000000000000e+00 +2.078999999999999955e-09 0.000000000000000000e+00 +2.079500000000000109e-09 0.000000000000000000e+00 +2.079999999999999848e-09 0.000000000000000000e+00 +2.080500000000000002e-09 0.000000000000000000e+00 +2.081000000000000155e-09 0.000000000000000000e+00 +2.081499999999999895e-09 0.000000000000000000e+00 +2.082000000000000048e-09 0.000000000000000000e+00 +2.082499999999999788e-09 0.000000000000000000e+00 +2.082999999999999941e-09 0.000000000000000000e+00 +2.083500000000000095e-09 0.000000000000000000e+00 +2.083999999999999834e-09 0.000000000000000000e+00 +2.084499999999999988e-09 0.000000000000000000e+00 +2.085000000000000141e-09 0.000000000000000000e+00 +2.085499999999999881e-09 0.000000000000000000e+00 +2.086000000000000034e-09 0.000000000000000000e+00 +2.086499999999999774e-09 0.000000000000000000e+00 +2.086999999999999928e-09 0.000000000000000000e+00 +2.087500000000000081e-09 0.000000000000000000e+00 +2.087999999999999821e-09 0.000000000000000000e+00 +2.088499999999999974e-09 0.000000000000000000e+00 +2.089000000000000127e-09 0.000000000000000000e+00 +2.089499999999999867e-09 0.000000000000000000e+00 +2.090000000000000021e-09 0.000000000000000000e+00 +2.090499999999999760e-09 0.000000000000000000e+00 +2.090999999999999914e-09 0.000000000000000000e+00 +2.091500000000000067e-09 0.000000000000000000e+00 +2.091999999999999807e-09 0.000000000000000000e+00 +2.092499999999999960e-09 0.000000000000000000e+00 +2.093000000000000114e-09 0.000000000000000000e+00 +2.093499999999999853e-09 0.000000000000000000e+00 +2.094000000000000007e-09 0.000000000000000000e+00 +2.094500000000000160e-09 0.000000000000000000e+00 +2.094999999999999900e-09 0.000000000000000000e+00 +2.095500000000000053e-09 0.000000000000000000e+00 +2.095999999999999793e-09 0.000000000000000000e+00 +2.096499999999999946e-09 0.000000000000000000e+00 +2.097000000000000100e-09 0.000000000000000000e+00 +2.097499999999999840e-09 0.000000000000000000e+00 +2.097999999999999993e-09 0.000000000000000000e+00 +2.098500000000000146e-09 0.000000000000000000e+00 +2.098999999999999886e-09 0.000000000000000000e+00 +2.099500000000000039e-09 0.000000000000000000e+00 +2.099999999999999779e-09 0.000000000000000000e+00 +2.100499999999999933e-09 0.000000000000000000e+00 +2.101000000000000086e-09 0.000000000000000000e+00 +2.101499999999999826e-09 0.000000000000000000e+00 +2.101999999999999979e-09 0.000000000000000000e+00 +2.102500000000000132e-09 0.000000000000000000e+00 +2.102999999999999872e-09 0.000000000000000000e+00 +2.103500000000000026e-09 0.000000000000000000e+00 +2.103999999999999765e-09 0.000000000000000000e+00 +2.104499999999999919e-09 0.000000000000000000e+00 +2.105000000000000072e-09 0.000000000000000000e+00 +2.105499999999999812e-09 0.000000000000000000e+00 +2.105999999999999965e-09 0.000000000000000000e+00 +2.106500000000000119e-09 0.000000000000000000e+00 +2.106999999999999858e-09 0.000000000000000000e+00 +2.107500000000000012e-09 0.000000000000000000e+00 +2.107999999999999752e-09 0.000000000000000000e+00 +2.108499999999999905e-09 0.000000000000000000e+00 +2.109000000000000058e-09 0.000000000000000000e+00 +2.109499999999999798e-09 0.000000000000000000e+00 +2.109999999999999952e-09 0.000000000000000000e+00 +2.110500000000000105e-09 0.000000000000000000e+00 +2.110999999999999845e-09 0.000000000000000000e+00 +2.111499999999999998e-09 0.000000000000000000e+00 +2.112000000000000151e-09 0.000000000000000000e+00 +2.112499999999999891e-09 0.000000000000000000e+00 +2.113000000000000045e-09 0.000000000000000000e+00 +2.113499999999999784e-09 0.000000000000000000e+00 +2.113999999999999938e-09 0.000000000000000000e+00 +2.114500000000000091e-09 0.000000000000000000e+00 +2.114999999999999831e-09 0.000000000000000000e+00 +2.115499999999999984e-09 0.000000000000000000e+00 +2.116000000000000138e-09 0.000000000000000000e+00 +2.116499999999999877e-09 0.000000000000000000e+00 +2.117000000000000031e-09 0.000000000000000000e+00 +2.117499999999999771e-09 0.000000000000000000e+00 +2.117999999999999924e-09 0.000000000000000000e+00 +2.118500000000000077e-09 0.000000000000000000e+00 +2.118999999999999817e-09 0.000000000000000000e+00 +2.119499999999999970e-09 0.000000000000000000e+00 +2.120000000000000124e-09 0.000000000000000000e+00 +2.120499999999999864e-09 0.000000000000000000e+00 +2.121000000000000017e-09 0.000000000000000000e+00 +2.121499999999999757e-09 0.000000000000000000e+00 +2.121999999999999910e-09 0.000000000000000000e+00 +2.122500000000000063e-09 0.000000000000000000e+00 +2.122999999999999803e-09 0.000000000000000000e+00 +2.123499999999999957e-09 0.000000000000000000e+00 +2.124000000000000110e-09 0.000000000000000000e+00 +2.124499999999999850e-09 0.000000000000000000e+00 +2.125000000000000003e-09 0.000000000000000000e+00 +2.125500000000000156e-09 0.000000000000000000e+00 +2.125999999999999896e-09 0.000000000000000000e+00 +2.126500000000000050e-09 0.000000000000000000e+00 +2.126999999999999789e-09 0.000000000000000000e+00 +2.127499999999999943e-09 0.000000000000000000e+00 +2.128000000000000096e-09 0.000000000000000000e+00 +2.128499999999999836e-09 0.000000000000000000e+00 +2.128999999999999989e-09 0.000000000000000000e+00 +2.129500000000000143e-09 0.000000000000000000e+00 +2.129999999999999882e-09 0.000000000000000000e+00 +2.130500000000000036e-09 0.000000000000000000e+00 +2.130999999999999776e-09 0.000000000000000000e+00 +2.131499999999999929e-09 0.000000000000000000e+00 +2.132000000000000082e-09 0.000000000000000000e+00 +2.132499999999999822e-09 0.000000000000000000e+00 +2.132999999999999975e-09 0.000000000000000000e+00 +2.133500000000000129e-09 0.000000000000000000e+00 +2.133999999999999869e-09 0.000000000000000000e+00 +2.134500000000000022e-09 0.000000000000000000e+00 +2.134999999999999762e-09 0.000000000000000000e+00 +2.135499999999999915e-09 0.000000000000000000e+00 +2.136000000000000069e-09 0.000000000000000000e+00 +2.136499999999999808e-09 0.000000000000000000e+00 +2.136999999999999962e-09 0.000000000000000000e+00 +2.137500000000000115e-09 0.000000000000000000e+00 +2.137999999999999855e-09 0.000000000000000000e+00 +2.138500000000000008e-09 0.000000000000000000e+00 +2.139000000000000162e-09 0.000000000000000000e+00 +2.139499999999999901e-09 0.000000000000000000e+00 +2.140000000000000055e-09 0.000000000000000000e+00 +2.140499999999999794e-09 0.000000000000000000e+00 +2.140999999999999948e-09 0.000000000000000000e+00 +2.141500000000000101e-09 0.000000000000000000e+00 +2.141999999999999841e-09 0.000000000000000000e+00 +2.142499999999999994e-09 0.000000000000000000e+00 +2.143000000000000148e-09 0.000000000000000000e+00 +2.143499999999999888e-09 0.000000000000000000e+00 +2.144000000000000041e-09 0.000000000000000000e+00 +2.144499999999999781e-09 0.000000000000000000e+00 +2.144999999999999934e-09 0.000000000000000000e+00 +2.145500000000000087e-09 0.000000000000000000e+00 +2.145999999999999827e-09 0.000000000000000000e+00 +2.146499999999999981e-09 0.000000000000000000e+00 +2.147000000000000134e-09 0.000000000000000000e+00 +2.147499999999999874e-09 0.000000000000000000e+00 +2.148000000000000027e-09 0.000000000000000000e+00 +2.148499999999999767e-09 0.000000000000000000e+00 +2.148999999999999920e-09 0.000000000000000000e+00 +2.149500000000000074e-09 0.000000000000000000e+00 +2.149999999999999813e-09 0.000000000000000000e+00 +2.150499999999999967e-09 0.000000000000000000e+00 +2.151000000000000120e-09 0.000000000000000000e+00 +2.151499999999999860e-09 0.000000000000000000e+00 +2.152000000000000013e-09 0.000000000000000000e+00 +2.152499999999999753e-09 0.000000000000000000e+00 +2.152999999999999906e-09 0.000000000000000000e+00 +2.153500000000000060e-09 0.000000000000000000e+00 +2.153999999999999800e-09 0.000000000000000000e+00 +2.154499999999999953e-09 0.000000000000000000e+00 +2.155000000000000106e-09 0.000000000000000000e+00 +2.155499999999999846e-09 0.000000000000000000e+00 +2.155999999999999999e-09 0.000000000000000000e+00 +2.156500000000000153e-09 0.000000000000000000e+00 +2.156999999999999893e-09 0.000000000000000000e+00 +2.157500000000000046e-09 0.000000000000000000e+00 +2.157999999999999786e-09 0.000000000000000000e+00 +2.158499999999999939e-09 0.000000000000000000e+00 +2.159000000000000092e-09 0.000000000000000000e+00 +2.159499999999999832e-09 0.000000000000000000e+00 +2.159999999999999986e-09 0.000000000000000000e+00 +2.160500000000000139e-09 0.000000000000000000e+00 +2.160999999999999879e-09 0.000000000000000000e+00 +2.161500000000000032e-09 0.000000000000000000e+00 +2.161999999999999772e-09 0.000000000000000000e+00 +2.162499999999999925e-09 0.000000000000000000e+00 +2.163000000000000079e-09 0.000000000000000000e+00 +2.163499999999999818e-09 0.000000000000000000e+00 +2.163999999999999972e-09 0.000000000000000000e+00 +2.164500000000000125e-09 0.000000000000000000e+00 +2.164999999999999865e-09 0.000000000000000000e+00 +2.165500000000000018e-09 0.000000000000000000e+00 +2.165999999999999758e-09 0.000000000000000000e+00 +2.166499999999999911e-09 0.000000000000000000e+00 +2.167000000000000065e-09 0.000000000000000000e+00 +2.167499999999999805e-09 0.000000000000000000e+00 +2.167999999999999958e-09 0.000000000000000000e+00 +2.168500000000000111e-09 0.000000000000000000e+00 +2.168999999999999851e-09 0.000000000000000000e+00 +2.169500000000000005e-09 0.000000000000000000e+00 +2.170000000000000158e-09 0.000000000000000000e+00 +2.170499999999999898e-09 0.000000000000000000e+00 +2.171000000000000051e-09 0.000000000000000000e+00 +2.171499999999999791e-09 0.000000000000000000e+00 +2.171999999999999944e-09 0.000000000000000000e+00 +2.172500000000000098e-09 0.000000000000000000e+00 +2.172999999999999837e-09 0.000000000000000000e+00 +2.173499999999999991e-09 0.000000000000000000e+00 +2.174000000000000144e-09 0.000000000000000000e+00 +2.174499999999999884e-09 0.000000000000000000e+00 +2.175000000000000037e-09 0.000000000000000000e+00 +2.175499999999999777e-09 0.000000000000000000e+00 +2.175999999999999930e-09 0.000000000000000000e+00 +2.176500000000000084e-09 0.000000000000000000e+00 +2.176999999999999824e-09 0.000000000000000000e+00 +2.177499999999999977e-09 0.000000000000000000e+00 +2.178000000000000130e-09 0.000000000000000000e+00 +2.178499999999999870e-09 0.000000000000000000e+00 +2.179000000000000023e-09 0.000000000000000000e+00 +2.179499999999999763e-09 0.000000000000000000e+00 +2.179999999999999917e-09 0.000000000000000000e+00 +2.180500000000000070e-09 0.000000000000000000e+00 +2.180999999999999810e-09 0.000000000000000000e+00 +2.181499999999999963e-09 0.000000000000000000e+00 +2.182000000000000116e-09 0.000000000000000000e+00 +2.182499999999999856e-09 0.000000000000000000e+00 +2.183000000000000010e-09 0.000000000000000000e+00 +2.183499999999999749e-09 0.000000000000000000e+00 +2.183999999999999903e-09 0.000000000000000000e+00 +2.184500000000000056e-09 0.000000000000000000e+00 +2.184999999999999796e-09 0.000000000000000000e+00 +2.185499999999999949e-09 0.000000000000000000e+00 +2.186000000000000103e-09 0.000000000000000000e+00 +2.186499999999999842e-09 0.000000000000000000e+00 +2.186999999999999996e-09 0.000000000000000000e+00 +2.187500000000000149e-09 0.000000000000000000e+00 +2.187999999999999889e-09 0.000000000000000000e+00 +2.188500000000000042e-09 0.000000000000000000e+00 +2.188999999999999782e-09 0.000000000000000000e+00 +2.189499999999999935e-09 0.000000000000000000e+00 +2.190000000000000089e-09 0.000000000000000000e+00 +2.190499999999999829e-09 0.000000000000000000e+00 +2.190999999999999982e-09 0.000000000000000000e+00 +2.191500000000000135e-09 0.000000000000000000e+00 +2.191999999999999875e-09 0.000000000000000000e+00 +2.192500000000000029e-09 0.000000000000000000e+00 +2.192999999999999768e-09 0.000000000000000000e+00 +2.193499999999999922e-09 0.000000000000000000e+00 +2.194000000000000075e-09 0.000000000000000000e+00 +2.194499999999999815e-09 0.000000000000000000e+00 +2.194999999999999968e-09 0.000000000000000000e+00 +2.195500000000000122e-09 0.000000000000000000e+00 +2.195999999999999861e-09 0.000000000000000000e+00 +2.196500000000000015e-09 0.000000000000000000e+00 +2.196999999999999754e-09 0.000000000000000000e+00 +2.197499999999999908e-09 0.000000000000000000e+00 +2.198000000000000061e-09 0.000000000000000000e+00 +2.198499999999999801e-09 0.000000000000000000e+00 +2.198999999999999954e-09 0.000000000000000000e+00 +2.199500000000000108e-09 0.000000000000000000e+00 +2.199999999999999848e-09 0.000000000000000000e+00 +2.200500000000000001e-09 0.000000000000000000e+00 +2.201000000000000154e-09 0.000000000000000000e+00 +2.201499999999999894e-09 0.000000000000000000e+00 +2.202000000000000047e-09 0.000000000000000000e+00 +2.202499999999999787e-09 0.000000000000000000e+00 +2.202999999999999941e-09 0.000000000000000000e+00 +2.203500000000000094e-09 0.000000000000000000e+00 +2.203999999999999834e-09 0.000000000000000000e+00 +2.204499999999999987e-09 0.000000000000000000e+00 +2.205000000000000140e-09 0.000000000000000000e+00 +2.205499999999999880e-09 0.000000000000000000e+00 +2.206000000000000034e-09 0.000000000000000000e+00 +2.206499999999999773e-09 0.000000000000000000e+00 +2.206999999999999927e-09 0.000000000000000000e+00 +2.207500000000000080e-09 0.000000000000000000e+00 +2.207999999999999820e-09 0.000000000000000000e+00 +2.208499999999999973e-09 0.000000000000000000e+00 +2.209000000000000127e-09 0.000000000000000000e+00 +2.209499999999999866e-09 0.000000000000000000e+00 +2.210000000000000020e-09 0.000000000000000000e+00 +2.210499999999999760e-09 0.000000000000000000e+00 +2.210999999999999913e-09 0.000000000000000000e+00 +2.211500000000000066e-09 0.000000000000000000e+00 +2.211999999999999806e-09 0.000000000000000000e+00 +2.212499999999999959e-09 0.000000000000000000e+00 +2.213000000000000113e-09 0.000000000000000000e+00 +2.213499999999999853e-09 0.000000000000000000e+00 +2.214000000000000006e-09 0.000000000000000000e+00 +2.214500000000000159e-09 0.000000000000000000e+00 +2.214999999999999899e-09 0.000000000000000000e+00 +2.215500000000000052e-09 0.000000000000000000e+00 +2.215999999999999792e-09 0.000000000000000000e+00 +2.216499999999999946e-09 0.000000000000000000e+00 +2.217000000000000099e-09 0.000000000000000000e+00 +2.217499999999999839e-09 0.000000000000000000e+00 +2.217999999999999992e-09 0.000000000000000000e+00 +2.218500000000000146e-09 0.000000000000000000e+00 +2.218999999999999885e-09 0.000000000000000000e+00 +2.219500000000000039e-09 0.000000000000000000e+00 +2.219999999999999778e-09 0.000000000000000000e+00 +2.220499999999999932e-09 0.000000000000000000e+00 +2.221000000000000085e-09 0.000000000000000000e+00 +2.221499999999999825e-09 0.000000000000000000e+00 +2.221999999999999978e-09 0.000000000000000000e+00 +2.222500000000000132e-09 0.000000000000000000e+00 +2.222999999999999871e-09 0.000000000000000000e+00 +2.223500000000000025e-09 0.000000000000000000e+00 +2.223999999999999765e-09 0.000000000000000000e+00 +2.224499999999999918e-09 0.000000000000000000e+00 +2.225000000000000071e-09 0.000000000000000000e+00 +2.225499999999999811e-09 0.000000000000000000e+00 +2.225999999999999965e-09 0.000000000000000000e+00 +2.226500000000000118e-09 0.000000000000000000e+00 +2.226999999999999858e-09 0.000000000000000000e+00 +2.227500000000000011e-09 0.000000000000000000e+00 +2.227999999999999751e-09 0.000000000000000000e+00 +2.228499999999999904e-09 0.000000000000000000e+00 +2.229000000000000058e-09 0.000000000000000000e+00 +2.229499999999999797e-09 0.000000000000000000e+00 +2.229999999999999951e-09 0.000000000000000000e+00 +2.230500000000000104e-09 0.000000000000000000e+00 +2.230999999999999844e-09 0.000000000000000000e+00 +2.231499999999999997e-09 0.000000000000000000e+00 +2.232000000000000151e-09 0.000000000000000000e+00 +2.232499999999999890e-09 0.000000000000000000e+00 +2.233000000000000044e-09 0.000000000000000000e+00 +2.233499999999999784e-09 0.000000000000000000e+00 +2.233999999999999937e-09 0.000000000000000000e+00 +2.234500000000000090e-09 0.000000000000000000e+00 +2.234999999999999830e-09 0.000000000000000000e+00 +2.235499999999999983e-09 0.000000000000000000e+00 +2.236000000000000137e-09 0.000000000000000000e+00 +2.236499999999999877e-09 0.000000000000000000e+00 +2.237000000000000030e-09 0.000000000000000000e+00 +2.237499999999999770e-09 0.000000000000000000e+00 +2.237999999999999923e-09 0.000000000000000000e+00 +2.238500000000000076e-09 0.000000000000000000e+00 +2.238999999999999816e-09 0.000000000000000000e+00 +2.239499999999999970e-09 0.000000000000000000e+00 +2.240000000000000123e-09 0.000000000000000000e+00 +2.240499999999999863e-09 0.000000000000000000e+00 +2.241000000000000016e-09 0.000000000000000000e+00 +2.241499999999999756e-09 0.000000000000000000e+00 +2.241999999999999909e-09 0.000000000000000000e+00 +2.242500000000000063e-09 0.000000000000000000e+00 +2.242999999999999802e-09 0.000000000000000000e+00 +2.243499999999999956e-09 0.000000000000000000e+00 +2.244000000000000109e-09 0.000000000000000000e+00 +2.244499999999999849e-09 0.000000000000000000e+00 +2.245000000000000002e-09 0.000000000000000000e+00 +2.245500000000000156e-09 0.000000000000000000e+00 +2.245999999999999895e-09 0.000000000000000000e+00 +2.246500000000000049e-09 0.000000000000000000e+00 +2.246999999999999789e-09 0.000000000000000000e+00 +2.247499999999999942e-09 0.000000000000000000e+00 +2.248000000000000095e-09 0.000000000000000000e+00 +2.248499999999999835e-09 0.000000000000000000e+00 +2.248999999999999988e-09 0.000000000000000000e+00 +2.249500000000000142e-09 0.000000000000000000e+00 +2.249999999999999882e-09 0.000000000000000000e+00 +2.250500000000000035e-09 0.000000000000000000e+00 +2.250999999999999775e-09 0.000000000000000000e+00 +2.251499999999999928e-09 0.000000000000000000e+00 +2.252000000000000082e-09 0.000000000000000000e+00 +2.252499999999999821e-09 0.000000000000000000e+00 +2.252999999999999975e-09 0.000000000000000000e+00 +2.253500000000000128e-09 0.000000000000000000e+00 +2.253999999999999868e-09 0.000000000000000000e+00 +2.254500000000000021e-09 0.000000000000000000e+00 +2.254999999999999761e-09 0.000000000000000000e+00 +2.255499999999999914e-09 0.000000000000000000e+00 +2.256000000000000068e-09 0.000000000000000000e+00 +2.256499999999999807e-09 0.000000000000000000e+00 +2.256999999999999961e-09 0.000000000000000000e+00 +2.257500000000000114e-09 0.000000000000000000e+00 +2.257999999999999854e-09 0.000000000000000000e+00 +2.258500000000000007e-09 0.000000000000000000e+00 +2.259000000000000161e-09 0.000000000000000000e+00 +2.259499999999999901e-09 0.000000000000000000e+00 +2.260000000000000054e-09 0.000000000000000000e+00 +2.260499999999999794e-09 0.000000000000000000e+00 +2.260999999999999947e-09 0.000000000000000000e+00 +2.261500000000000100e-09 0.000000000000000000e+00 +2.261999999999999840e-09 0.000000000000000000e+00 +2.262499999999999994e-09 0.000000000000000000e+00 +2.263000000000000147e-09 0.000000000000000000e+00 +2.263499999999999887e-09 0.000000000000000000e+00 +2.264000000000000040e-09 0.000000000000000000e+00 +2.264499999999999780e-09 0.000000000000000000e+00 +2.264999999999999933e-09 0.000000000000000000e+00 +2.265500000000000087e-09 0.000000000000000000e+00 +2.265999999999999826e-09 0.000000000000000000e+00 +2.266499999999999980e-09 0.000000000000000000e+00 +2.267000000000000133e-09 0.000000000000000000e+00 +2.267499999999999873e-09 0.000000000000000000e+00 +2.268000000000000026e-09 0.000000000000000000e+00 +2.268499999999999766e-09 0.000000000000000000e+00 +2.268999999999999919e-09 0.000000000000000000e+00 +2.269500000000000073e-09 0.000000000000000000e+00 +2.269999999999999813e-09 0.000000000000000000e+00 +2.270499999999999966e-09 0.000000000000000000e+00 +2.271000000000000119e-09 0.000000000000000000e+00 +2.271499999999999859e-09 0.000000000000000000e+00 +2.272000000000000012e-09 0.000000000000000000e+00 +2.272499999999999752e-09 0.000000000000000000e+00 +2.272999999999999906e-09 0.000000000000000000e+00 +2.273500000000000059e-09 0.000000000000000000e+00 +2.273999999999999799e-09 0.000000000000000000e+00 +2.274499999999999952e-09 0.000000000000000000e+00 +2.275000000000000106e-09 0.000000000000000000e+00 +2.275499999999999845e-09 0.000000000000000000e+00 +2.275999999999999999e-09 0.000000000000000000e+00 +2.276500000000000152e-09 0.000000000000000000e+00 +2.276999999999999892e-09 0.000000000000000000e+00 +2.277500000000000045e-09 0.000000000000000000e+00 +2.277999999999999785e-09 0.000000000000000000e+00 +2.278499999999999938e-09 0.000000000000000000e+00 +2.279000000000000092e-09 0.000000000000000000e+00 +2.279499999999999831e-09 0.000000000000000000e+00 +2.279999999999999985e-09 0.000000000000000000e+00 +2.280500000000000138e-09 0.000000000000000000e+00 +2.280999999999999878e-09 0.000000000000000000e+00 +2.281500000000000031e-09 0.000000000000000000e+00 +2.281999999999999771e-09 0.000000000000000000e+00 +2.282499999999999925e-09 0.000000000000000000e+00 +2.283000000000000078e-09 0.000000000000000000e+00 +2.283499999999999818e-09 0.000000000000000000e+00 +2.283999999999999971e-09 0.000000000000000000e+00 +2.284500000000000124e-09 0.000000000000000000e+00 +2.284999999999999864e-09 0.000000000000000000e+00 +2.285500000000000018e-09 0.000000000000000000e+00 +2.285999999999999757e-09 0.000000000000000000e+00 +2.286499999999999911e-09 0.000000000000000000e+00 +2.287000000000000064e-09 0.000000000000000000e+00 +2.287499999999999804e-09 0.000000000000000000e+00 +2.287999999999999957e-09 0.000000000000000000e+00 +2.288500000000000111e-09 0.000000000000000000e+00 +2.288999999999999850e-09 0.000000000000000000e+00 +2.289500000000000004e-09 0.000000000000000000e+00 +2.290000000000000157e-09 0.000000000000000000e+00 +2.290499999999999897e-09 0.000000000000000000e+00 +2.291000000000000050e-09 0.000000000000000000e+00 +2.291499999999999790e-09 0.000000000000000000e+00 +2.291999999999999943e-09 0.000000000000000000e+00 +2.292500000000000097e-09 0.000000000000000000e+00 +2.292999999999999837e-09 0.000000000000000000e+00 +2.293499999999999990e-09 0.000000000000000000e+00 +2.294000000000000143e-09 0.000000000000000000e+00 +2.294499999999999883e-09 0.000000000000000000e+00 +2.295000000000000036e-09 0.000000000000000000e+00 +2.295499999999999776e-09 0.000000000000000000e+00 +2.295999999999999930e-09 0.000000000000000000e+00 +2.296500000000000083e-09 0.000000000000000000e+00 +2.296999999999999823e-09 0.000000000000000000e+00 +2.297499999999999976e-09 0.000000000000000000e+00 +2.298000000000000129e-09 0.000000000000000000e+00 +2.298499999999999869e-09 0.000000000000000000e+00 +2.299000000000000023e-09 0.000000000000000000e+00 +2.299499999999999762e-09 0.000000000000000000e+00 +2.299999999999999916e-09 0.000000000000000000e+00 +2.300500000000000069e-09 0.000000000000000000e+00 +2.300999999999999809e-09 0.000000000000000000e+00 +2.301499999999999962e-09 0.000000000000000000e+00 +2.302000000000000116e-09 0.000000000000000000e+00 +2.302499999999999855e-09 0.000000000000000000e+00 +2.303000000000000009e-09 0.000000000000000000e+00 +2.303499999999999749e-09 0.000000000000000000e+00 +2.303999999999999902e-09 0.000000000000000000e+00 +2.304500000000000055e-09 0.000000000000000000e+00 +2.304999999999999795e-09 0.000000000000000000e+00 +2.305499999999999948e-09 0.000000000000000000e+00 +2.306000000000000102e-09 0.000000000000000000e+00 +2.306499999999999842e-09 0.000000000000000000e+00 +2.306999999999999995e-09 0.000000000000000000e+00 +2.307500000000000148e-09 0.000000000000000000e+00 +2.307999999999999888e-09 0.000000000000000000e+00 +2.308500000000000042e-09 0.000000000000000000e+00 +2.308999999999999781e-09 0.000000000000000000e+00 +2.309499999999999935e-09 0.000000000000000000e+00 +2.310000000000000088e-09 0.000000000000000000e+00 +2.310499999999999828e-09 0.000000000000000000e+00 +2.310999999999999981e-09 0.000000000000000000e+00 +2.311500000000000135e-09 0.000000000000000000e+00 +2.311999999999999874e-09 0.000000000000000000e+00 +2.312500000000000028e-09 0.000000000000000000e+00 +2.312999999999999767e-09 0.000000000000000000e+00 +2.313499999999999921e-09 0.000000000000000000e+00 +2.314000000000000074e-09 0.000000000000000000e+00 +2.314499999999999814e-09 0.000000000000000000e+00 +2.314999999999999967e-09 0.000000000000000000e+00 +2.315500000000000121e-09 0.000000000000000000e+00 +2.315999999999999861e-09 0.000000000000000000e+00 +2.316500000000000014e-09 0.000000000000000000e+00 +2.316999999999999754e-09 0.000000000000000000e+00 +2.317499999999999907e-09 0.000000000000000000e+00 +2.318000000000000060e-09 0.000000000000000000e+00 +2.318499999999999800e-09 0.000000000000000000e+00 +2.318999999999999954e-09 0.000000000000000000e+00 +2.319500000000000107e-09 0.000000000000000000e+00 +2.319999999999999847e-09 0.000000000000000000e+00 +2.320500000000000000e-09 0.000000000000000000e+00 +2.321000000000000153e-09 0.000000000000000000e+00 +2.321499999999999893e-09 0.000000000000000000e+00 +2.322000000000000047e-09 0.000000000000000000e+00 +2.322499999999999786e-09 0.000000000000000000e+00 +2.322999999999999940e-09 0.000000000000000000e+00 +2.323500000000000093e-09 0.000000000000000000e+00 +2.323999999999999833e-09 0.000000000000000000e+00 +2.324499999999999986e-09 0.000000000000000000e+00 +2.325000000000000140e-09 0.000000000000000000e+00 +2.325499999999999879e-09 0.000000000000000000e+00 +2.326000000000000033e-09 0.000000000000000000e+00 +2.326499999999999773e-09 0.000000000000000000e+00 +2.326999999999999926e-09 0.000000000000000000e+00 +2.327500000000000079e-09 0.000000000000000000e+00 +2.327999999999999819e-09 0.000000000000000000e+00 +2.328499999999999972e-09 0.000000000000000000e+00 +2.329000000000000126e-09 0.000000000000000000e+00 +2.329499999999999866e-09 0.000000000000000000e+00 +2.330000000000000019e-09 0.000000000000000000e+00 +2.330499999999999759e-09 0.000000000000000000e+00 +2.330999999999999912e-09 0.000000000000000000e+00 +2.331500000000000065e-09 0.000000000000000000e+00 +2.331999999999999805e-09 0.000000000000000000e+00 +2.332499999999999959e-09 0.000000000000000000e+00 +2.333000000000000112e-09 0.000000000000000000e+00 +2.333499999999999852e-09 0.000000000000000000e+00 +2.334000000000000005e-09 0.000000000000000000e+00 +2.334500000000000159e-09 0.000000000000000000e+00 +2.334999999999999898e-09 0.000000000000000000e+00 +2.335500000000000052e-09 0.000000000000000000e+00 +2.335999999999999791e-09 0.000000000000000000e+00 +2.336499999999999945e-09 0.000000000000000000e+00 +2.337000000000000098e-09 0.000000000000000000e+00 +2.337499999999999838e-09 0.000000000000000000e+00 +2.337999999999999991e-09 0.000000000000000000e+00 +2.338500000000000145e-09 0.000000000000000000e+00 +2.338999999999999884e-09 0.000000000000000000e+00 +2.339500000000000038e-09 0.000000000000000000e+00 +2.339999999999999778e-09 0.000000000000000000e+00 +2.340499999999999931e-09 0.000000000000000000e+00 +2.341000000000000084e-09 0.000000000000000000e+00 +2.341499999999999824e-09 0.000000000000000000e+00 +2.341999999999999978e-09 0.000000000000000000e+00 +2.342500000000000131e-09 0.000000000000000000e+00 +2.342999999999999871e-09 0.000000000000000000e+00 +2.343500000000000024e-09 0.000000000000000000e+00 +2.343999999999999764e-09 0.000000000000000000e+00 +2.344499999999999917e-09 0.000000000000000000e+00 +2.345000000000000071e-09 0.000000000000000000e+00 +2.345499999999999810e-09 0.000000000000000000e+00 +2.345999999999999964e-09 0.000000000000000000e+00 +2.346500000000000117e-09 0.000000000000000000e+00 +2.346999999999999857e-09 0.000000000000000000e+00 +2.347500000000000010e-09 0.000000000000000000e+00 +2.347999999999999750e-09 0.000000000000000000e+00 +2.348499999999999903e-09 0.000000000000000000e+00 +2.349000000000000057e-09 0.000000000000000000e+00 +2.349499999999999797e-09 0.000000000000000000e+00 +2.349999999999999950e-09 0.000000000000000000e+00 +2.350500000000000103e-09 0.000000000000000000e+00 +2.350999999999999843e-09 0.000000000000000000e+00 +2.351499999999999996e-09 0.000000000000000000e+00 +2.352000000000000150e-09 0.000000000000000000e+00 +2.352499999999999890e-09 0.000000000000000000e+00 +2.353000000000000043e-09 0.000000000000000000e+00 +2.353499999999999783e-09 0.000000000000000000e+00 +2.353999999999999936e-09 0.000000000000000000e+00 +2.354500000000000089e-09 0.000000000000000000e+00 +2.354999999999999829e-09 0.000000000000000000e+00 +2.355499999999999983e-09 0.000000000000000000e+00 +2.356000000000000136e-09 0.000000000000000000e+00 +2.356499999999999876e-09 0.000000000000000000e+00 +2.357000000000000029e-09 0.000000000000000000e+00 +2.357499999999999769e-09 0.000000000000000000e+00 +2.357999999999999922e-09 0.000000000000000000e+00 +2.358500000000000076e-09 0.000000000000000000e+00 +2.358999999999999815e-09 0.000000000000000000e+00 +2.359499999999999969e-09 0.000000000000000000e+00 +2.360000000000000122e-09 0.000000000000000000e+00 +2.360499999999999862e-09 0.000000000000000000e+00 +2.361000000000000015e-09 0.000000000000000000e+00 +2.361499999999999755e-09 0.000000000000000000e+00 +2.361999999999999908e-09 0.000000000000000000e+00 +2.362500000000000062e-09 0.000000000000000000e+00 +2.362999999999999802e-09 0.000000000000000000e+00 +2.363499999999999955e-09 0.000000000000000000e+00 +2.364000000000000108e-09 0.000000000000000000e+00 +2.364499999999999848e-09 0.000000000000000000e+00 +2.365000000000000002e-09 0.000000000000000000e+00 +2.365500000000000155e-09 0.000000000000000000e+00 +2.365999999999999895e-09 0.000000000000000000e+00 +2.366500000000000048e-09 0.000000000000000000e+00 +2.366999999999999788e-09 0.000000000000000000e+00 +2.367499999999999941e-09 0.000000000000000000e+00 +2.368000000000000095e-09 0.000000000000000000e+00 +2.368499999999999834e-09 0.000000000000000000e+00 +2.368999999999999988e-09 0.000000000000000000e+00 +2.369500000000000141e-09 0.000000000000000000e+00 +2.369999999999999881e-09 0.000000000000000000e+00 +2.370500000000000034e-09 0.000000000000000000e+00 +2.370999999999999774e-09 0.000000000000000000e+00 +2.371499999999999927e-09 0.000000000000000000e+00 +2.372000000000000081e-09 0.000000000000000000e+00 +2.372499999999999821e-09 0.000000000000000000e+00 +2.372999999999999974e-09 0.000000000000000000e+00 +2.373500000000000127e-09 0.000000000000000000e+00 +2.373999999999999867e-09 0.000000000000000000e+00 +2.374500000000000020e-09 0.000000000000000000e+00 +2.374999999999999760e-09 0.000000000000000000e+00 +2.375499999999999914e-09 0.000000000000000000e+00 +2.376000000000000067e-09 0.000000000000000000e+00 +2.376499999999999807e-09 0.000000000000000000e+00 +2.376999999999999960e-09 0.000000000000000000e+00 +2.377500000000000113e-09 0.000000000000000000e+00 +2.377999999999999853e-09 0.000000000000000000e+00 +2.378500000000000007e-09 0.000000000000000000e+00 +2.378999999999999746e-09 0.000000000000000000e+00 +2.379499999999999900e-09 0.000000000000000000e+00 +2.380000000000000053e-09 0.000000000000000000e+00 +2.380499999999999793e-09 0.000000000000000000e+00 +2.380999999999999946e-09 0.000000000000000000e+00 +2.381500000000000100e-09 0.000000000000000000e+00 +2.381999999999999839e-09 0.000000000000000000e+00 +2.382499999999999993e-09 0.000000000000000000e+00 +2.383000000000000146e-09 0.000000000000000000e+00 +2.383499999999999886e-09 0.000000000000000000e+00 +2.384000000000000039e-09 0.000000000000000000e+00 +2.384499999999999779e-09 0.000000000000000000e+00 +2.384999999999999932e-09 0.000000000000000000e+00 +2.385500000000000086e-09 0.000000000000000000e+00 +2.385999999999999826e-09 0.000000000000000000e+00 +2.386499999999999979e-09 0.000000000000000000e+00 +2.387000000000000132e-09 0.000000000000000000e+00 +2.387499999999999872e-09 0.000000000000000000e+00 +2.388000000000000025e-09 0.000000000000000000e+00 +2.388499999999999765e-09 0.000000000000000000e+00 +2.388999999999999919e-09 0.000000000000000000e+00 +2.389500000000000072e-09 0.000000000000000000e+00 +2.389999999999999812e-09 0.000000000000000000e+00 +2.390499999999999965e-09 0.000000000000000000e+00 +2.391000000000000119e-09 0.000000000000000000e+00 +2.391499999999999858e-09 0.000000000000000000e+00 +2.392000000000000012e-09 0.000000000000000000e+00 +2.392499999999999751e-09 0.000000000000000000e+00 +2.392999999999999905e-09 0.000000000000000000e+00 +2.393500000000000058e-09 0.000000000000000000e+00 +2.393999999999999798e-09 0.000000000000000000e+00 +2.394499999999999951e-09 0.000000000000000000e+00 +2.395000000000000105e-09 0.000000000000000000e+00 +2.395499999999999844e-09 0.000000000000000000e+00 +2.395999999999999998e-09 0.000000000000000000e+00 +2.396500000000000151e-09 0.000000000000000000e+00 +2.396999999999999891e-09 0.000000000000000000e+00 +2.397500000000000044e-09 0.000000000000000000e+00 +2.397999999999999784e-09 0.000000000000000000e+00 +2.398499999999999938e-09 0.000000000000000000e+00 +2.399000000000000091e-09 0.000000000000000000e+00 +2.399499999999999831e-09 0.000000000000000000e+00 +2.399999999999999984e-09 0.000000000000000000e+00 +2.400500000000000137e-09 0.000000000000000000e+00 +2.400999999999999877e-09 0.000000000000000000e+00 +2.401500000000000031e-09 0.000000000000000000e+00 +2.401999999999999770e-09 0.000000000000000000e+00 +2.402499999999999924e-09 0.000000000000000000e+00 +2.403000000000000077e-09 0.000000000000000000e+00 +2.403499999999999817e-09 0.000000000000000000e+00 +2.403999999999999970e-09 0.000000000000000000e+00 +2.404500000000000124e-09 0.000000000000000000e+00 +2.404999999999999863e-09 0.000000000000000000e+00 +2.405500000000000017e-09 0.000000000000000000e+00 +2.405999999999999757e-09 0.000000000000000000e+00 +2.406499999999999910e-09 0.000000000000000000e+00 +2.407000000000000063e-09 0.000000000000000000e+00 +2.407499999999999803e-09 0.000000000000000000e+00 +2.407999999999999956e-09 0.000000000000000000e+00 +2.408500000000000110e-09 0.000000000000000000e+00 +2.408999999999999850e-09 0.000000000000000000e+00 +2.409500000000000003e-09 0.000000000000000000e+00 +2.410000000000000156e-09 0.000000000000000000e+00 +2.410499999999999896e-09 0.000000000000000000e+00 +2.411000000000000049e-09 0.000000000000000000e+00 +2.411499999999999789e-09 0.000000000000000000e+00 +2.411999999999999943e-09 0.000000000000000000e+00 +2.412500000000000096e-09 0.000000000000000000e+00 +2.412999999999999836e-09 0.000000000000000000e+00 +2.413499999999999989e-09 0.000000000000000000e+00 +2.414000000000000142e-09 0.000000000000000000e+00 +2.414499999999999882e-09 0.000000000000000000e+00 +2.415000000000000036e-09 0.000000000000000000e+00 +2.415499999999999775e-09 0.000000000000000000e+00 +2.415999999999999929e-09 0.000000000000000000e+00 +2.416500000000000082e-09 0.000000000000000000e+00 +2.416999999999999822e-09 0.000000000000000000e+00 +2.417499999999999975e-09 0.000000000000000000e+00 +2.418000000000000129e-09 0.000000000000000000e+00 +2.418499999999999868e-09 0.000000000000000000e+00 +2.419000000000000022e-09 0.000000000000000000e+00 +2.419499999999999762e-09 0.000000000000000000e+00 +2.419999999999999915e-09 0.000000000000000000e+00 +2.420500000000000068e-09 0.000000000000000000e+00 +2.420999999999999808e-09 0.000000000000000000e+00 +2.421499999999999961e-09 0.000000000000000000e+00 +2.422000000000000115e-09 0.000000000000000000e+00 +2.422499999999999855e-09 0.000000000000000000e+00 +2.423000000000000008e-09 0.000000000000000000e+00 +2.423499999999999748e-09 0.000000000000000000e+00 +2.423999999999999901e-09 0.000000000000000000e+00 +2.424500000000000055e-09 0.000000000000000000e+00 +2.424999999999999794e-09 0.000000000000000000e+00 +2.425499999999999948e-09 0.000000000000000000e+00 +2.426000000000000101e-09 0.000000000000000000e+00 +2.426499999999999841e-09 0.000000000000000000e+00 +2.426999999999999994e-09 0.000000000000000000e+00 +2.427500000000000148e-09 0.000000000000000000e+00 +2.427999999999999887e-09 0.000000000000000000e+00 +2.428500000000000041e-09 0.000000000000000000e+00 +2.428999999999999780e-09 0.000000000000000000e+00 +2.429499999999999934e-09 0.000000000000000000e+00 +2.430000000000000087e-09 0.000000000000000000e+00 +2.430499999999999827e-09 0.000000000000000000e+00 +2.430999999999999980e-09 0.000000000000000000e+00 +2.431500000000000134e-09 0.000000000000000000e+00 +2.431999999999999874e-09 0.000000000000000000e+00 +2.432500000000000027e-09 0.000000000000000000e+00 +2.432999999999999767e-09 0.000000000000000000e+00 +2.433499999999999920e-09 0.000000000000000000e+00 +2.434000000000000073e-09 0.000000000000000000e+00 +2.434499999999999813e-09 0.000000000000000000e+00 +2.434999999999999967e-09 0.000000000000000000e+00 +2.435500000000000120e-09 0.000000000000000000e+00 +2.435999999999999860e-09 0.000000000000000000e+00 +2.436500000000000013e-09 0.000000000000000000e+00 +2.436999999999999753e-09 0.000000000000000000e+00 +2.437499999999999906e-09 0.000000000000000000e+00 +2.438000000000000060e-09 0.000000000000000000e+00 +2.438499999999999799e-09 0.000000000000000000e+00 +2.438999999999999953e-09 0.000000000000000000e+00 +2.439500000000000106e-09 0.000000000000000000e+00 +2.439999999999999846e-09 0.000000000000000000e+00 +2.440499999999999999e-09 0.000000000000000000e+00 +2.441000000000000153e-09 0.000000000000000000e+00 +2.441499999999999892e-09 0.000000000000000000e+00 +2.442000000000000046e-09 0.000000000000000000e+00 +2.442499999999999786e-09 0.000000000000000000e+00 +2.442999999999999939e-09 0.000000000000000000e+00 +2.443500000000000092e-09 0.000000000000000000e+00 +2.443999999999999832e-09 0.000000000000000000e+00 +2.444499999999999985e-09 0.000000000000000000e+00 +2.445000000000000139e-09 0.000000000000000000e+00 +2.445499999999999879e-09 0.000000000000000000e+00 +2.446000000000000032e-09 0.000000000000000000e+00 +2.446499999999999772e-09 0.000000000000000000e+00 +2.446999999999999925e-09 0.000000000000000000e+00 +2.447500000000000079e-09 0.000000000000000000e+00 +2.447999999999999818e-09 0.000000000000000000e+00 +2.448499999999999972e-09 0.000000000000000000e+00 +2.449000000000000125e-09 0.000000000000000000e+00 +2.449499999999999865e-09 0.000000000000000000e+00 +2.450000000000000018e-09 0.000000000000000000e+00 +2.450499999999999758e-09 0.000000000000000000e+00 +2.450999999999999911e-09 0.000000000000000000e+00 +2.451500000000000065e-09 0.000000000000000000e+00 +2.451999999999999804e-09 0.000000000000000000e+00 +2.452499999999999958e-09 0.000000000000000000e+00 +2.453000000000000111e-09 0.000000000000000000e+00 +2.453499999999999851e-09 0.000000000000000000e+00 +2.454000000000000004e-09 0.000000000000000000e+00 +2.454499999999999744e-09 0.000000000000000000e+00 +2.454999999999999898e-09 0.000000000000000000e+00 +2.455500000000000051e-09 0.000000000000000000e+00 +2.455999999999999791e-09 0.000000000000000000e+00 +2.456499999999999944e-09 0.000000000000000000e+00 +2.457000000000000097e-09 0.000000000000000000e+00 +2.457499999999999837e-09 0.000000000000000000e+00 +2.457999999999999991e-09 0.000000000000000000e+00 +2.458500000000000144e-09 0.000000000000000000e+00 +2.458999999999999884e-09 0.000000000000000000e+00 +2.459500000000000037e-09 0.000000000000000000e+00 +2.459999999999999777e-09 0.000000000000000000e+00 +2.460499999999999930e-09 0.000000000000000000e+00 +2.461000000000000084e-09 0.000000000000000000e+00 +2.461499999999999823e-09 0.000000000000000000e+00 +2.461999999999999977e-09 0.000000000000000000e+00 +2.462500000000000130e-09 0.000000000000000000e+00 +2.462999999999999870e-09 0.000000000000000000e+00 +2.463500000000000023e-09 0.000000000000000000e+00 +2.463999999999999763e-09 0.000000000000000000e+00 +2.464499999999999916e-09 0.000000000000000000e+00 +2.465000000000000070e-09 0.000000000000000000e+00 +2.465499999999999810e-09 0.000000000000000000e+00 +2.465999999999999963e-09 0.000000000000000000e+00 +2.466500000000000116e-09 0.000000000000000000e+00 +2.466999999999999856e-09 0.000000000000000000e+00 +2.467500000000000009e-09 0.000000000000000000e+00 +2.467999999999999749e-09 0.000000000000000000e+00 +2.468499999999999903e-09 0.000000000000000000e+00 +2.469000000000000056e-09 0.000000000000000000e+00 +2.469499999999999796e-09 0.000000000000000000e+00 +2.469999999999999949e-09 0.000000000000000000e+00 +2.470500000000000102e-09 0.000000000000000000e+00 +2.470999999999999842e-09 0.000000000000000000e+00 +2.471499999999999996e-09 0.000000000000000000e+00 +2.472000000000000149e-09 0.000000000000000000e+00 +2.472499999999999889e-09 0.000000000000000000e+00 +2.473000000000000042e-09 0.000000000000000000e+00 +2.473499999999999782e-09 0.000000000000000000e+00 +2.473999999999999935e-09 0.000000000000000000e+00 +2.474500000000000089e-09 0.000000000000000000e+00 +2.474999999999999828e-09 0.000000000000000000e+00 +2.475499999999999982e-09 0.000000000000000000e+00 +2.476000000000000135e-09 0.000000000000000000e+00 +2.476499999999999875e-09 0.000000000000000000e+00 +2.477000000000000028e-09 0.000000000000000000e+00 +2.477499999999999768e-09 0.000000000000000000e+00 +2.477999999999999921e-09 0.000000000000000000e+00 +2.478500000000000075e-09 0.000000000000000000e+00 +2.478999999999999815e-09 0.000000000000000000e+00 +2.479499999999999968e-09 0.000000000000000000e+00 +2.480000000000000121e-09 0.000000000000000000e+00 +2.480499999999999861e-09 0.000000000000000000e+00 +2.481000000000000015e-09 0.000000000000000000e+00 +2.481499999999999754e-09 0.000000000000000000e+00 +2.481999999999999908e-09 0.000000000000000000e+00 +2.482500000000000061e-09 0.000000000000000000e+00 +2.482999999999999801e-09 0.000000000000000000e+00 +2.483499999999999954e-09 0.000000000000000000e+00 +2.484000000000000108e-09 0.000000000000000000e+00 +2.484499999999999847e-09 0.000000000000000000e+00 +2.485000000000000001e-09 0.000000000000000000e+00 +2.485500000000000154e-09 0.000000000000000000e+00 +2.485999999999999894e-09 0.000000000000000000e+00 +2.486500000000000047e-09 0.000000000000000000e+00 +2.486999999999999787e-09 0.000000000000000000e+00 +2.487499999999999940e-09 0.000000000000000000e+00 +2.488000000000000094e-09 0.000000000000000000e+00 +2.488499999999999834e-09 0.000000000000000000e+00 +2.488999999999999987e-09 0.000000000000000000e+00 +2.489500000000000140e-09 0.000000000000000000e+00 +2.489999999999999880e-09 0.000000000000000000e+00 +2.490500000000000033e-09 0.000000000000000000e+00 +2.490999999999999773e-09 0.000000000000000000e+00 +2.491499999999999927e-09 0.000000000000000000e+00 +2.492000000000000080e-09 0.000000000000000000e+00 +2.492499999999999820e-09 0.000000000000000000e+00 +2.492999999999999973e-09 0.000000000000000000e+00 +2.493500000000000126e-09 0.000000000000000000e+00 +2.493999999999999866e-09 0.000000000000000000e+00 +2.494500000000000020e-09 0.000000000000000000e+00 +2.494999999999999759e-09 0.000000000000000000e+00 +2.495499999999999913e-09 0.000000000000000000e+00 +2.496000000000000066e-09 0.000000000000000000e+00 +2.496499999999999806e-09 0.000000000000000000e+00 +2.496999999999999959e-09 0.000000000000000000e+00 +2.497500000000000113e-09 0.000000000000000000e+00 +2.497999999999999852e-09 0.000000000000000000e+00 +2.498500000000000006e-09 0.000000000000000000e+00 +2.498999999999999746e-09 0.000000000000000000e+00 +2.499499999999999899e-09 0.000000000000000000e+00 +2.500000000000000052e-09 0.000000000000000000e+00 +2.500499999999999792e-09 0.000000000000000000e+00 +2.500999999999999945e-09 0.000000000000000000e+00 +2.501500000000000099e-09 0.000000000000000000e+00 +2.501999999999999839e-09 0.000000000000000000e+00 +2.502499999999999992e-09 0.000000000000000000e+00 +2.503000000000000145e-09 0.000000000000000000e+00 +2.503499999999999885e-09 0.000000000000000000e+00 +2.504000000000000038e-09 0.000000000000000000e+00 +2.504499999999999778e-09 0.000000000000000000e+00 +2.504999999999999932e-09 0.000000000000000000e+00 +2.505500000000000085e-09 0.000000000000000000e+00 +2.505999999999999825e-09 0.000000000000000000e+00 +2.506499999999999978e-09 0.000000000000000000e+00 +2.507000000000000132e-09 0.000000000000000000e+00 +2.507499999999999871e-09 0.000000000000000000e+00 +2.508000000000000025e-09 0.000000000000000000e+00 +2.508499999999999764e-09 0.000000000000000000e+00 +2.508999999999999918e-09 0.000000000000000000e+00 +2.509500000000000071e-09 0.000000000000000000e+00 +2.509999999999999811e-09 0.000000000000000000e+00 +2.510499999999999964e-09 0.000000000000000000e+00 +2.511000000000000118e-09 0.000000000000000000e+00 +2.511499999999999857e-09 0.000000000000000000e+00 +2.512000000000000011e-09 0.000000000000000000e+00 +2.512499999999999751e-09 0.000000000000000000e+00 +2.512999999999999904e-09 0.000000000000000000e+00 +2.513500000000000057e-09 0.000000000000000000e+00 +2.513999999999999797e-09 0.000000000000000000e+00 +2.514499999999999951e-09 0.000000000000000000e+00 +2.515000000000000104e-09 0.000000000000000000e+00 +2.515499999999999844e-09 0.000000000000000000e+00 +2.515999999999999997e-09 0.000000000000000000e+00 +2.516500000000000150e-09 0.000000000000000000e+00 +2.516999999999999890e-09 0.000000000000000000e+00 +2.517500000000000044e-09 0.000000000000000000e+00 +2.517999999999999783e-09 0.000000000000000000e+00 +2.518499999999999937e-09 0.000000000000000000e+00 +2.519000000000000090e-09 0.000000000000000000e+00 +2.519499999999999830e-09 0.000000000000000000e+00 +2.519999999999999983e-09 0.000000000000000000e+00 +2.520500000000000137e-09 0.000000000000000000e+00 +2.520999999999999876e-09 0.000000000000000000e+00 +2.521500000000000030e-09 0.000000000000000000e+00 +2.521999999999999770e-09 0.000000000000000000e+00 +2.522499999999999923e-09 0.000000000000000000e+00 +2.523000000000000076e-09 0.000000000000000000e+00 +2.523499999999999816e-09 0.000000000000000000e+00 +2.523999999999999969e-09 0.000000000000000000e+00 +2.524500000000000123e-09 0.000000000000000000e+00 +2.524999999999999863e-09 0.000000000000000000e+00 +2.525500000000000016e-09 0.000000000000000000e+00 +2.525999999999999756e-09 0.000000000000000000e+00 +2.526499999999999909e-09 0.000000000000000000e+00 +2.527000000000000062e-09 0.000000000000000000e+00 +2.527499999999999802e-09 0.000000000000000000e+00 +2.527999999999999956e-09 0.000000000000000000e+00 +2.528500000000000109e-09 0.000000000000000000e+00 +2.528999999999999849e-09 0.000000000000000000e+00 +2.529500000000000002e-09 0.000000000000000000e+00 +2.530000000000000156e-09 0.000000000000000000e+00 +2.530499999999999895e-09 0.000000000000000000e+00 +2.531000000000000049e-09 0.000000000000000000e+00 +2.531499999999999788e-09 0.000000000000000000e+00 +2.531999999999999942e-09 0.000000000000000000e+00 +2.532500000000000095e-09 0.000000000000000000e+00 +2.532999999999999835e-09 0.000000000000000000e+00 +2.533499999999999988e-09 0.000000000000000000e+00 +2.534000000000000142e-09 0.000000000000000000e+00 +2.534499999999999881e-09 0.000000000000000000e+00 +2.535000000000000035e-09 0.000000000000000000e+00 +2.535499999999999775e-09 0.000000000000000000e+00 +2.535999999999999928e-09 0.000000000000000000e+00 +2.536500000000000081e-09 0.000000000000000000e+00 +2.536999999999999821e-09 0.000000000000000000e+00 +2.537499999999999975e-09 0.000000000000000000e+00 +2.538000000000000128e-09 0.000000000000000000e+00 +2.538499999999999868e-09 0.000000000000000000e+00 +2.539000000000000021e-09 0.000000000000000000e+00 +2.539499999999999761e-09 0.000000000000000000e+00 +2.539999999999999914e-09 0.000000000000000000e+00 +2.540500000000000068e-09 0.000000000000000000e+00 +2.540999999999999807e-09 0.000000000000000000e+00 +2.541499999999999961e-09 0.000000000000000000e+00 +2.542000000000000114e-09 0.000000000000000000e+00 +2.542499999999999854e-09 0.000000000000000000e+00 +2.543000000000000007e-09 0.000000000000000000e+00 +2.543499999999999747e-09 0.000000000000000000e+00 +2.543999999999999900e-09 0.000000000000000000e+00 +2.544500000000000054e-09 0.000000000000000000e+00 +2.544999999999999794e-09 0.000000000000000000e+00 +2.545499999999999947e-09 0.000000000000000000e+00 +2.546000000000000100e-09 0.000000000000000000e+00 +2.546499999999999840e-09 0.000000000000000000e+00 +2.546999999999999993e-09 0.000000000000000000e+00 +2.547500000000000147e-09 0.000000000000000000e+00 +2.547999999999999887e-09 0.000000000000000000e+00 +2.548500000000000040e-09 0.000000000000000000e+00 +2.548999999999999780e-09 0.000000000000000000e+00 +2.549499999999999933e-09 0.000000000000000000e+00 +2.550000000000000086e-09 0.000000000000000000e+00 +2.550499999999999826e-09 0.000000000000000000e+00 +2.550999999999999980e-09 0.000000000000000000e+00 +2.551500000000000133e-09 0.000000000000000000e+00 +2.551999999999999873e-09 0.000000000000000000e+00 +2.552500000000000026e-09 0.000000000000000000e+00 +2.552999999999999766e-09 0.000000000000000000e+00 +2.553499999999999919e-09 0.000000000000000000e+00 +2.554000000000000073e-09 0.000000000000000000e+00 +2.554499999999999812e-09 0.000000000000000000e+00 +2.554999999999999966e-09 0.000000000000000000e+00 +2.555500000000000119e-09 0.000000000000000000e+00 +2.555999999999999859e-09 0.000000000000000000e+00 +2.556500000000000012e-09 0.000000000000000000e+00 +2.556999999999999752e-09 0.000000000000000000e+00 +2.557499999999999905e-09 0.000000000000000000e+00 +2.558000000000000059e-09 0.000000000000000000e+00 +2.558499999999999799e-09 0.000000000000000000e+00 +2.558999999999999952e-09 0.000000000000000000e+00 +2.559500000000000105e-09 0.000000000000000000e+00 +2.559999999999999845e-09 0.000000000000000000e+00 +2.560499999999999998e-09 0.000000000000000000e+00 +2.561000000000000152e-09 0.000000000000000000e+00 +2.561499999999999892e-09 0.000000000000000000e+00 +2.562000000000000045e-09 0.000000000000000000e+00 +2.562499999999999785e-09 0.000000000000000000e+00 +2.562999999999999938e-09 0.000000000000000000e+00 +2.563500000000000092e-09 0.000000000000000000e+00 +2.563999999999999831e-09 0.000000000000000000e+00 +2.564499999999999985e-09 0.000000000000000000e+00 +2.565000000000000138e-09 0.000000000000000000e+00 +2.565499999999999878e-09 0.000000000000000000e+00 +2.566000000000000031e-09 0.000000000000000000e+00 +2.566499999999999771e-09 0.000000000000000000e+00 +2.566999999999999924e-09 0.000000000000000000e+00 +2.567500000000000078e-09 0.000000000000000000e+00 +2.567999999999999817e-09 0.000000000000000000e+00 +2.568499999999999971e-09 0.000000000000000000e+00 +2.569000000000000124e-09 0.000000000000000000e+00 +2.569499999999999864e-09 0.000000000000000000e+00 +2.570000000000000017e-09 0.000000000000000000e+00 +2.570499999999999757e-09 0.000000000000000000e+00 +2.570999999999999911e-09 0.000000000000000000e+00 +2.571500000000000064e-09 0.000000000000000000e+00 +2.571999999999999804e-09 0.000000000000000000e+00 +2.572499999999999957e-09 0.000000000000000000e+00 +2.573000000000000110e-09 0.000000000000000000e+00 +2.573499999999999850e-09 0.000000000000000000e+00 +2.574000000000000004e-09 0.000000000000000000e+00 +2.574499999999999743e-09 0.000000000000000000e+00 +2.574999999999999897e-09 0.000000000000000000e+00 +2.575500000000000050e-09 0.000000000000000000e+00 +2.575999999999999790e-09 0.000000000000000000e+00 +2.576499999999999943e-09 0.000000000000000000e+00 +2.577000000000000097e-09 0.000000000000000000e+00 +2.577499999999999836e-09 0.000000000000000000e+00 +2.577999999999999990e-09 0.000000000000000000e+00 +2.578500000000000143e-09 0.000000000000000000e+00 +2.578999999999999883e-09 0.000000000000000000e+00 +2.579500000000000036e-09 0.000000000000000000e+00 +2.579999999999999776e-09 0.000000000000000000e+00 +2.580499999999999929e-09 0.000000000000000000e+00 +2.581000000000000083e-09 0.000000000000000000e+00 +2.581499999999999823e-09 0.000000000000000000e+00 +2.581999999999999976e-09 0.000000000000000000e+00 +2.582500000000000129e-09 0.000000000000000000e+00 +2.582999999999999869e-09 0.000000000000000000e+00 +2.583500000000000022e-09 0.000000000000000000e+00 +2.583999999999999762e-09 0.000000000000000000e+00 +2.584499999999999916e-09 0.000000000000000000e+00 +2.585000000000000069e-09 0.000000000000000000e+00 +2.585499999999999809e-09 0.000000000000000000e+00 +2.585999999999999962e-09 0.000000000000000000e+00 +2.586500000000000115e-09 0.000000000000000000e+00 +2.586999999999999855e-09 0.000000000000000000e+00 +2.587500000000000009e-09 0.000000000000000000e+00 +2.587999999999999748e-09 0.000000000000000000e+00 +2.588499999999999902e-09 0.000000000000000000e+00 +2.589000000000000055e-09 0.000000000000000000e+00 +2.589499999999999795e-09 0.000000000000000000e+00 +2.589999999999999948e-09 0.000000000000000000e+00 +2.590500000000000102e-09 0.000000000000000000e+00 +2.590999999999999841e-09 0.000000000000000000e+00 +2.591499999999999995e-09 0.000000000000000000e+00 +2.592000000000000148e-09 0.000000000000000000e+00 +2.592499999999999888e-09 0.000000000000000000e+00 +2.593000000000000041e-09 0.000000000000000000e+00 +2.593499999999999781e-09 0.000000000000000000e+00 +2.593999999999999934e-09 0.000000000000000000e+00 +2.594500000000000088e-09 0.000000000000000000e+00 +2.594999999999999828e-09 0.000000000000000000e+00 +2.595499999999999981e-09 0.000000000000000000e+00 +2.596000000000000134e-09 0.000000000000000000e+00 +2.596499999999999874e-09 0.000000000000000000e+00 +2.597000000000000028e-09 0.000000000000000000e+00 +2.597499999999999767e-09 0.000000000000000000e+00 +2.597999999999999921e-09 0.000000000000000000e+00 +2.598500000000000074e-09 0.000000000000000000e+00 +2.598999999999999814e-09 0.000000000000000000e+00 +2.599499999999999967e-09 0.000000000000000000e+00 +2.600000000000000121e-09 0.000000000000000000e+00 +2.600499999999999860e-09 0.000000000000000000e+00 +2.601000000000000014e-09 0.000000000000000000e+00 +2.601499999999999754e-09 0.000000000000000000e+00 +2.601999999999999907e-09 0.000000000000000000e+00 +2.602500000000000060e-09 0.000000000000000000e+00 +2.602999999999999800e-09 0.000000000000000000e+00 +2.603499999999999953e-09 0.000000000000000000e+00 +2.604000000000000107e-09 0.000000000000000000e+00 +2.604499999999999847e-09 0.000000000000000000e+00 +2.605000000000000000e-09 0.000000000000000000e+00 +2.605500000000000153e-09 0.000000000000000000e+00 +2.605999999999999893e-09 0.000000000000000000e+00 +2.606500000000000046e-09 0.000000000000000000e+00 +2.606999999999999786e-09 0.000000000000000000e+00 +2.607499999999999940e-09 0.000000000000000000e+00 +2.608000000000000093e-09 0.000000000000000000e+00 +2.608499999999999833e-09 0.000000000000000000e+00 +2.608999999999999986e-09 0.000000000000000000e+00 +2.609500000000000139e-09 0.000000000000000000e+00 +2.609999999999999879e-09 0.000000000000000000e+00 +2.610500000000000033e-09 0.000000000000000000e+00 +2.610999999999999772e-09 0.000000000000000000e+00 +2.611499999999999926e-09 0.000000000000000000e+00 +2.612000000000000079e-09 0.000000000000000000e+00 +2.612499999999999819e-09 0.000000000000000000e+00 +2.612999999999999972e-09 0.000000000000000000e+00 +2.613500000000000126e-09 0.000000000000000000e+00 +2.613999999999999865e-09 0.000000000000000000e+00 +2.614500000000000019e-09 0.000000000000000000e+00 +2.614999999999999759e-09 0.000000000000000000e+00 +2.615499999999999912e-09 0.000000000000000000e+00 +2.616000000000000065e-09 0.000000000000000000e+00 +2.616499999999999805e-09 0.000000000000000000e+00 +2.616999999999999958e-09 0.000000000000000000e+00 +2.617500000000000112e-09 0.000000000000000000e+00 +2.617999999999999852e-09 0.000000000000000000e+00 +2.618500000000000005e-09 0.000000000000000000e+00 +2.618999999999999745e-09 0.000000000000000000e+00 +2.619499999999999898e-09 0.000000000000000000e+00 +2.620000000000000052e-09 0.000000000000000000e+00 +2.620499999999999791e-09 0.000000000000000000e+00 +2.620999999999999945e-09 0.000000000000000000e+00 +2.621500000000000098e-09 0.000000000000000000e+00 +2.621999999999999838e-09 0.000000000000000000e+00 +2.622499999999999991e-09 0.000000000000000000e+00 +2.623000000000000145e-09 0.000000000000000000e+00 +2.623499999999999884e-09 0.000000000000000000e+00 +2.624000000000000038e-09 0.000000000000000000e+00 +2.624499999999999777e-09 0.000000000000000000e+00 +2.624999999999999931e-09 0.000000000000000000e+00 +2.625500000000000084e-09 0.000000000000000000e+00 +2.625999999999999824e-09 0.000000000000000000e+00 +2.626499999999999977e-09 0.000000000000000000e+00 +2.627000000000000131e-09 0.000000000000000000e+00 +2.627499999999999871e-09 0.000000000000000000e+00 +2.628000000000000024e-09 0.000000000000000000e+00 +2.628499999999999764e-09 0.000000000000000000e+00 +2.628999999999999917e-09 0.000000000000000000e+00 +2.629500000000000070e-09 0.000000000000000000e+00 +2.629999999999999810e-09 0.000000000000000000e+00 +2.630499999999999964e-09 0.000000000000000000e+00 +2.631000000000000117e-09 0.000000000000000000e+00 +2.631499999999999857e-09 0.000000000000000000e+00 +2.632000000000000010e-09 0.000000000000000000e+00 +2.632499999999999750e-09 0.000000000000000000e+00 +2.632999999999999903e-09 0.000000000000000000e+00 +2.633500000000000057e-09 0.000000000000000000e+00 +2.633999999999999796e-09 0.000000000000000000e+00 +2.634499999999999950e-09 0.000000000000000000e+00 +2.635000000000000103e-09 0.000000000000000000e+00 +2.635499999999999843e-09 0.000000000000000000e+00 +2.635999999999999996e-09 0.000000000000000000e+00 +2.636500000000000150e-09 0.000000000000000000e+00 +2.636999999999999889e-09 0.000000000000000000e+00 +2.637500000000000043e-09 0.000000000000000000e+00 +2.637999999999999783e-09 0.000000000000000000e+00 +2.638499999999999936e-09 0.000000000000000000e+00 +2.639000000000000089e-09 0.000000000000000000e+00 +2.639499999999999829e-09 0.000000000000000000e+00 +2.639999999999999982e-09 0.000000000000000000e+00 +2.640500000000000136e-09 0.000000000000000000e+00 +2.640999999999999876e-09 0.000000000000000000e+00 +2.641500000000000029e-09 0.000000000000000000e+00 +2.641999999999999769e-09 0.000000000000000000e+00 +2.642499999999999922e-09 0.000000000000000000e+00 +2.643000000000000075e-09 0.000000000000000000e+00 +2.643499999999999815e-09 0.000000000000000000e+00 +2.643999999999999969e-09 0.000000000000000000e+00 +2.644500000000000122e-09 0.000000000000000000e+00 +2.644999999999999862e-09 0.000000000000000000e+00 +2.645500000000000015e-09 0.000000000000000000e+00 +2.645999999999999755e-09 0.000000000000000000e+00 +2.646499999999999908e-09 0.000000000000000000e+00 +2.647000000000000062e-09 0.000000000000000000e+00 +2.647499999999999801e-09 0.000000000000000000e+00 +2.647999999999999955e-09 0.000000000000000000e+00 +2.648500000000000108e-09 0.000000000000000000e+00 +2.648999999999999848e-09 0.000000000000000000e+00 +2.649500000000000001e-09 0.000000000000000000e+00 +2.649999999999999741e-09 0.000000000000000000e+00 +2.650499999999999894e-09 0.000000000000000000e+00 +2.651000000000000048e-09 0.000000000000000000e+00 +2.651499999999999788e-09 0.000000000000000000e+00 +2.651999999999999941e-09 0.000000000000000000e+00 +2.652500000000000094e-09 0.000000000000000000e+00 +2.652999999999999834e-09 0.000000000000000000e+00 +2.653499999999999988e-09 0.000000000000000000e+00 +2.654000000000000141e-09 0.000000000000000000e+00 +2.654499999999999881e-09 0.000000000000000000e+00 +2.655000000000000034e-09 0.000000000000000000e+00 +2.655499999999999774e-09 0.000000000000000000e+00 +2.655999999999999927e-09 0.000000000000000000e+00 +2.656500000000000081e-09 0.000000000000000000e+00 +2.656999999999999820e-09 0.000000000000000000e+00 +2.657499999999999974e-09 0.000000000000000000e+00 +2.658000000000000127e-09 0.000000000000000000e+00 +2.658499999999999867e-09 0.000000000000000000e+00 +2.659000000000000020e-09 0.000000000000000000e+00 +2.659499999999999760e-09 0.000000000000000000e+00 +2.659999999999999913e-09 0.000000000000000000e+00 +2.660500000000000067e-09 0.000000000000000000e+00 +2.660999999999999807e-09 0.000000000000000000e+00 +2.661499999999999960e-09 0.000000000000000000e+00 +2.662000000000000113e-09 0.000000000000000000e+00 +2.662499999999999853e-09 0.000000000000000000e+00 +2.663000000000000006e-09 0.000000000000000000e+00 +2.663499999999999746e-09 0.000000000000000000e+00 +2.663999999999999900e-09 0.000000000000000000e+00 +2.664500000000000053e-09 0.000000000000000000e+00 +2.664999999999999793e-09 0.000000000000000000e+00 +2.665499999999999946e-09 0.000000000000000000e+00 +2.666000000000000099e-09 0.000000000000000000e+00 +2.666499999999999839e-09 0.000000000000000000e+00 +2.666999999999999993e-09 0.000000000000000000e+00 +2.667500000000000146e-09 0.000000000000000000e+00 +2.667999999999999886e-09 0.000000000000000000e+00 +2.668500000000000039e-09 0.000000000000000000e+00 +2.668999999999999779e-09 0.000000000000000000e+00 +2.669499999999999932e-09 0.000000000000000000e+00 +2.670000000000000086e-09 0.000000000000000000e+00 +2.670499999999999825e-09 0.000000000000000000e+00 +2.670999999999999979e-09 0.000000000000000000e+00 +2.671500000000000132e-09 0.000000000000000000e+00 +2.671999999999999872e-09 0.000000000000000000e+00 +2.672500000000000025e-09 0.000000000000000000e+00 +2.672999999999999765e-09 0.000000000000000000e+00 +2.673499999999999918e-09 0.000000000000000000e+00 +2.674000000000000072e-09 0.000000000000000000e+00 +2.674499999999999812e-09 0.000000000000000000e+00 +2.674999999999999965e-09 0.000000000000000000e+00 +2.675500000000000118e-09 0.000000000000000000e+00 +2.675999999999999858e-09 0.000000000000000000e+00 +2.676500000000000011e-09 0.000000000000000000e+00 +2.676999999999999751e-09 0.000000000000000000e+00 +2.677499999999999905e-09 0.000000000000000000e+00 +2.678000000000000058e-09 0.000000000000000000e+00 +2.678499999999999798e-09 0.000000000000000000e+00 +2.678999999999999951e-09 0.000000000000000000e+00 +2.679500000000000105e-09 0.000000000000000000e+00 +2.679999999999999844e-09 0.000000000000000000e+00 +2.680499999999999998e-09 0.000000000000000000e+00 +2.681000000000000151e-09 0.000000000000000000e+00 +2.681499999999999891e-09 0.000000000000000000e+00 +2.682000000000000044e-09 0.000000000000000000e+00 +2.682499999999999784e-09 0.000000000000000000e+00 +2.682999999999999937e-09 0.000000000000000000e+00 +2.683500000000000091e-09 0.000000000000000000e+00 +2.683999999999999831e-09 0.000000000000000000e+00 +2.684499999999999984e-09 0.000000000000000000e+00 +2.685000000000000137e-09 0.000000000000000000e+00 +2.685499999999999877e-09 0.000000000000000000e+00 +2.686000000000000030e-09 0.000000000000000000e+00 +2.686499999999999770e-09 0.000000000000000000e+00 +2.686999999999999924e-09 0.000000000000000000e+00 +2.687500000000000077e-09 0.000000000000000000e+00 +2.687999999999999817e-09 0.000000000000000000e+00 +2.688499999999999970e-09 0.000000000000000000e+00 +2.689000000000000123e-09 0.000000000000000000e+00 +2.689499999999999863e-09 0.000000000000000000e+00 +2.690000000000000017e-09 0.000000000000000000e+00 +2.690499999999999756e-09 0.000000000000000000e+00 +2.690999999999999910e-09 0.000000000000000000e+00 +2.691500000000000063e-09 0.000000000000000000e+00 +2.691999999999999803e-09 0.000000000000000000e+00 +2.692499999999999956e-09 0.000000000000000000e+00 +2.693000000000000110e-09 0.000000000000000000e+00 +2.693499999999999849e-09 0.000000000000000000e+00 +2.694000000000000003e-09 0.000000000000000000e+00 +2.694499999999999743e-09 0.000000000000000000e+00 +2.694999999999999896e-09 0.000000000000000000e+00 +2.695500000000000049e-09 0.000000000000000000e+00 +2.695999999999999789e-09 0.000000000000000000e+00 +2.696499999999999942e-09 0.000000000000000000e+00 +2.697000000000000096e-09 0.000000000000000000e+00 +2.697499999999999836e-09 0.000000000000000000e+00 +2.697999999999999989e-09 0.000000000000000000e+00 +2.698500000000000142e-09 0.000000000000000000e+00 +2.698999999999999882e-09 0.000000000000000000e+00 +2.699500000000000035e-09 0.000000000000000000e+00 +2.699999999999999775e-09 0.000000000000000000e+00 +2.700499999999999929e-09 0.000000000000000000e+00 +2.701000000000000082e-09 0.000000000000000000e+00 +2.701499999999999822e-09 0.000000000000000000e+00 +2.701999999999999975e-09 0.000000000000000000e+00 +2.702500000000000129e-09 0.000000000000000000e+00 +2.702999999999999868e-09 0.000000000000000000e+00 +2.703500000000000022e-09 0.000000000000000000e+00 +2.703999999999999761e-09 0.000000000000000000e+00 +2.704499999999999915e-09 0.000000000000000000e+00 +2.705000000000000068e-09 0.000000000000000000e+00 +2.705499999999999808e-09 0.000000000000000000e+00 +2.705999999999999961e-09 0.000000000000000000e+00 +2.706500000000000115e-09 0.000000000000000000e+00 +2.706999999999999854e-09 0.000000000000000000e+00 +2.707500000000000008e-09 0.000000000000000000e+00 +2.707999999999999748e-09 0.000000000000000000e+00 +2.708499999999999901e-09 0.000000000000000000e+00 +2.709000000000000054e-09 0.000000000000000000e+00 +2.709499999999999794e-09 0.000000000000000000e+00 +2.709999999999999948e-09 0.000000000000000000e+00 +2.710500000000000101e-09 0.000000000000000000e+00 +2.710999999999999841e-09 0.000000000000000000e+00 +2.711499999999999994e-09 0.000000000000000000e+00 +2.712000000000000147e-09 0.000000000000000000e+00 +2.712499999999999887e-09 0.000000000000000000e+00 +2.713000000000000041e-09 0.000000000000000000e+00 +2.713499999999999780e-09 0.000000000000000000e+00 +2.713999999999999934e-09 0.000000000000000000e+00 +2.714500000000000087e-09 0.000000000000000000e+00 +2.714999999999999827e-09 0.000000000000000000e+00 +2.715499999999999980e-09 0.000000000000000000e+00 +2.716000000000000134e-09 0.000000000000000000e+00 +2.716499999999999873e-09 0.000000000000000000e+00 +2.717000000000000027e-09 0.000000000000000000e+00 +2.717499999999999767e-09 0.000000000000000000e+00 +2.717999999999999920e-09 0.000000000000000000e+00 +2.718500000000000073e-09 0.000000000000000000e+00 +2.718999999999999813e-09 0.000000000000000000e+00 +2.719499999999999966e-09 0.000000000000000000e+00 +2.720000000000000120e-09 0.000000000000000000e+00 +2.720499999999999860e-09 0.000000000000000000e+00 +2.721000000000000013e-09 0.000000000000000000e+00 +2.721499999999999753e-09 0.000000000000000000e+00 +2.721999999999999906e-09 0.000000000000000000e+00 +2.722500000000000059e-09 0.000000000000000000e+00 +2.722999999999999799e-09 0.000000000000000000e+00 +2.723499999999999953e-09 0.000000000000000000e+00 +2.724000000000000106e-09 0.000000000000000000e+00 +2.724499999999999846e-09 0.000000000000000000e+00 +2.724999999999999999e-09 0.000000000000000000e+00 +2.725499999999999739e-09 0.000000000000000000e+00 +2.725999999999999892e-09 0.000000000000000000e+00 +2.726500000000000046e-09 0.000000000000000000e+00 +2.726999999999999785e-09 0.000000000000000000e+00 +2.727499999999999939e-09 0.000000000000000000e+00 +2.728000000000000092e-09 0.000000000000000000e+00 +2.728499999999999832e-09 0.000000000000000000e+00 +2.728999999999999985e-09 0.000000000000000000e+00 +2.729500000000000139e-09 0.000000000000000000e+00 +2.729999999999999878e-09 0.000000000000000000e+00 +2.730500000000000032e-09 0.000000000000000000e+00 +2.730999999999999772e-09 0.000000000000000000e+00 +2.731499999999999925e-09 0.000000000000000000e+00 +2.732000000000000078e-09 0.000000000000000000e+00 +2.732499999999999818e-09 0.000000000000000000e+00 +2.732999999999999971e-09 0.000000000000000000e+00 +2.733500000000000125e-09 0.000000000000000000e+00 +2.733999999999999865e-09 0.000000000000000000e+00 +2.734500000000000018e-09 0.000000000000000000e+00 +2.734999999999999758e-09 0.000000000000000000e+00 +2.735499999999999911e-09 0.000000000000000000e+00 +2.736000000000000065e-09 0.000000000000000000e+00 +2.736499999999999804e-09 0.000000000000000000e+00 +2.736999999999999958e-09 0.000000000000000000e+00 +2.737500000000000111e-09 0.000000000000000000e+00 +2.737999999999999851e-09 0.000000000000000000e+00 +2.738500000000000004e-09 0.000000000000000000e+00 +2.738999999999999744e-09 0.000000000000000000e+00 +2.739499999999999897e-09 0.000000000000000000e+00 +2.740000000000000051e-09 0.000000000000000000e+00 +2.740499999999999790e-09 0.000000000000000000e+00 +2.740999999999999944e-09 0.000000000000000000e+00 +2.741500000000000097e-09 0.000000000000000000e+00 +2.741999999999999837e-09 0.000000000000000000e+00 +2.742499999999999990e-09 0.000000000000000000e+00 +2.743000000000000144e-09 0.000000000000000000e+00 +2.743499999999999884e-09 0.000000000000000000e+00 +2.744000000000000037e-09 0.000000000000000000e+00 +2.744499999999999777e-09 0.000000000000000000e+00 +2.744999999999999930e-09 0.000000000000000000e+00 +2.745500000000000083e-09 0.000000000000000000e+00 +2.745999999999999823e-09 0.000000000000000000e+00 +2.746499999999999977e-09 0.000000000000000000e+00 +2.747000000000000130e-09 0.000000000000000000e+00 +2.747499999999999870e-09 0.000000000000000000e+00 +2.748000000000000023e-09 0.000000000000000000e+00 +2.748499999999999763e-09 0.000000000000000000e+00 +2.748999999999999916e-09 0.000000000000000000e+00 +2.749500000000000070e-09 0.000000000000000000e+00 +2.749999999999999809e-09 0.000000000000000000e+00 +2.750499999999999963e-09 0.000000000000000000e+00 +2.751000000000000116e-09 0.000000000000000000e+00 +2.751499999999999856e-09 0.000000000000000000e+00 +2.752000000000000009e-09 0.000000000000000000e+00 +2.752499999999999749e-09 0.000000000000000000e+00 +2.752999999999999902e-09 0.000000000000000000e+00 +2.753500000000000056e-09 0.000000000000000000e+00 +2.753999999999999796e-09 0.000000000000000000e+00 +2.754499999999999949e-09 0.000000000000000000e+00 +2.755000000000000102e-09 0.000000000000000000e+00 +2.755499999999999842e-09 0.000000000000000000e+00 +2.755999999999999995e-09 0.000000000000000000e+00 +2.756500000000000149e-09 0.000000000000000000e+00 +2.756999999999999889e-09 0.000000000000000000e+00 +2.757500000000000042e-09 0.000000000000000000e+00 +2.757999999999999782e-09 0.000000000000000000e+00 +2.758499999999999935e-09 0.000000000000000000e+00 +2.759000000000000088e-09 0.000000000000000000e+00 +2.759499999999999828e-09 0.000000000000000000e+00 +2.759999999999999982e-09 0.000000000000000000e+00 +2.760500000000000135e-09 0.000000000000000000e+00 +2.760999999999999875e-09 0.000000000000000000e+00 +2.761500000000000028e-09 0.000000000000000000e+00 +2.761999999999999768e-09 0.000000000000000000e+00 +2.762499999999999921e-09 0.000000000000000000e+00 +2.763000000000000075e-09 0.000000000000000000e+00 +2.763499999999999814e-09 0.000000000000000000e+00 +2.763999999999999968e-09 0.000000000000000000e+00 +2.764500000000000121e-09 0.000000000000000000e+00 +2.764999999999999861e-09 0.000000000000000000e+00 +2.765500000000000014e-09 0.000000000000000000e+00 +2.765999999999999754e-09 0.000000000000000000e+00 +2.766499999999999908e-09 0.000000000000000000e+00 +2.767000000000000061e-09 0.000000000000000000e+00 +2.767499999999999801e-09 0.000000000000000000e+00 +2.767999999999999954e-09 0.000000000000000000e+00 +2.768500000000000107e-09 0.000000000000000000e+00 +2.768999999999999847e-09 0.000000000000000000e+00 +2.769500000000000001e-09 0.000000000000000000e+00 +2.769999999999999740e-09 0.000000000000000000e+00 +2.770499999999999894e-09 0.000000000000000000e+00 +2.771000000000000047e-09 0.000000000000000000e+00 +2.771499999999999787e-09 0.000000000000000000e+00 +2.771999999999999940e-09 0.000000000000000000e+00 +2.772500000000000094e-09 0.000000000000000000e+00 +2.772999999999999833e-09 0.000000000000000000e+00 +2.773499999999999987e-09 0.000000000000000000e+00 +2.774000000000000140e-09 0.000000000000000000e+00 +2.774499999999999880e-09 0.000000000000000000e+00 +2.775000000000000033e-09 0.000000000000000000e+00 +2.775499999999999773e-09 0.000000000000000000e+00 +2.775999999999999926e-09 0.000000000000000000e+00 +2.776500000000000080e-09 0.000000000000000000e+00 +2.776999999999999820e-09 0.000000000000000000e+00 +2.777499999999999973e-09 0.000000000000000000e+00 +2.778000000000000126e-09 0.000000000000000000e+00 +2.778499999999999866e-09 0.000000000000000000e+00 +2.779000000000000019e-09 0.000000000000000000e+00 +2.779499999999999759e-09 0.000000000000000000e+00 +2.779999999999999913e-09 0.000000000000000000e+00 +2.780500000000000066e-09 0.000000000000000000e+00 +2.780999999999999806e-09 0.000000000000000000e+00 +2.781499999999999959e-09 0.000000000000000000e+00 +2.782000000000000112e-09 0.000000000000000000e+00 +2.782499999999999852e-09 0.000000000000000000e+00 +2.783000000000000006e-09 0.000000000000000000e+00 +2.783499999999999745e-09 0.000000000000000000e+00 +2.783999999999999899e-09 0.000000000000000000e+00 +2.784500000000000052e-09 0.000000000000000000e+00 +2.784999999999999792e-09 0.000000000000000000e+00 +2.785499999999999945e-09 0.000000000000000000e+00 +2.786000000000000099e-09 0.000000000000000000e+00 +2.786499999999999838e-09 0.000000000000000000e+00 +2.786999999999999992e-09 0.000000000000000000e+00 +2.787500000000000145e-09 0.000000000000000000e+00 +2.787999999999999885e-09 0.000000000000000000e+00 +2.788500000000000038e-09 0.000000000000000000e+00 +2.788999999999999778e-09 0.000000000000000000e+00 +2.789499999999999931e-09 0.000000000000000000e+00 +2.790000000000000085e-09 0.000000000000000000e+00 +2.790499999999999825e-09 0.000000000000000000e+00 +2.790999999999999978e-09 0.000000000000000000e+00 +2.791500000000000131e-09 0.000000000000000000e+00 +2.791999999999999871e-09 0.000000000000000000e+00 +2.792500000000000025e-09 0.000000000000000000e+00 +2.792999999999999764e-09 0.000000000000000000e+00 +2.793499999999999918e-09 0.000000000000000000e+00 +2.794000000000000071e-09 0.000000000000000000e+00 +2.794499999999999811e-09 0.000000000000000000e+00 +2.794999999999999964e-09 0.000000000000000000e+00 +2.795500000000000118e-09 0.000000000000000000e+00 +2.795999999999999857e-09 0.000000000000000000e+00 +2.796500000000000011e-09 0.000000000000000000e+00 +2.796999999999999750e-09 0.000000000000000000e+00 +2.797499999999999904e-09 0.000000000000000000e+00 +2.798000000000000057e-09 0.000000000000000000e+00 +2.798499999999999797e-09 0.000000000000000000e+00 +2.798999999999999950e-09 0.000000000000000000e+00 +2.799500000000000104e-09 0.000000000000000000e+00 +2.799999999999999844e-09 0.000000000000000000e+00 +2.800499999999999997e-09 0.000000000000000000e+00 +2.801000000000000150e-09 0.000000000000000000e+00 +2.801499999999999890e-09 0.000000000000000000e+00 +2.802000000000000043e-09 0.000000000000000000e+00 +2.802499999999999783e-09 0.000000000000000000e+00 +2.802999999999999937e-09 0.000000000000000000e+00 +2.803500000000000090e-09 0.000000000000000000e+00 +2.803999999999999830e-09 0.000000000000000000e+00 +2.804499999999999983e-09 0.000000000000000000e+00 +2.805000000000000136e-09 0.000000000000000000e+00 +2.805499999999999876e-09 0.000000000000000000e+00 +2.806000000000000030e-09 0.000000000000000000e+00 +2.806499999999999769e-09 0.000000000000000000e+00 +2.806999999999999923e-09 0.000000000000000000e+00 +2.807500000000000076e-09 0.000000000000000000e+00 +2.807999999999999816e-09 0.000000000000000000e+00 +2.808499999999999969e-09 0.000000000000000000e+00 +2.809000000000000123e-09 0.000000000000000000e+00 +2.809499999999999862e-09 0.000000000000000000e+00 +2.810000000000000016e-09 0.000000000000000000e+00 +2.810499999999999756e-09 0.000000000000000000e+00 +2.810999999999999909e-09 0.000000000000000000e+00 +2.811500000000000062e-09 0.000000000000000000e+00 +2.811999999999999802e-09 0.000000000000000000e+00 +2.812499999999999955e-09 0.000000000000000000e+00 +2.813000000000000109e-09 0.000000000000000000e+00 +2.813499999999999849e-09 0.000000000000000000e+00 +2.814000000000000002e-09 0.000000000000000000e+00 +2.814499999999999742e-09 0.000000000000000000e+00 +2.814999999999999895e-09 0.000000000000000000e+00 +2.815500000000000048e-09 0.000000000000000000e+00 +2.815999999999999788e-09 0.000000000000000000e+00 +2.816499999999999942e-09 0.000000000000000000e+00 +2.817000000000000095e-09 0.000000000000000000e+00 +2.817499999999999835e-09 0.000000000000000000e+00 +2.817999999999999988e-09 0.000000000000000000e+00 +2.818500000000000142e-09 0.000000000000000000e+00 +2.818999999999999881e-09 0.000000000000000000e+00 +2.819500000000000035e-09 0.000000000000000000e+00 +2.819999999999999774e-09 0.000000000000000000e+00 +2.820499999999999928e-09 0.000000000000000000e+00 +2.821000000000000081e-09 0.000000000000000000e+00 +2.821499999999999821e-09 0.000000000000000000e+00 +2.821999999999999974e-09 0.000000000000000000e+00 +2.822500000000000128e-09 0.000000000000000000e+00 +2.822999999999999867e-09 0.000000000000000000e+00 +2.823500000000000021e-09 0.000000000000000000e+00 +2.823999999999999761e-09 0.000000000000000000e+00 +2.824499999999999914e-09 0.000000000000000000e+00 +2.825000000000000067e-09 0.000000000000000000e+00 +2.825499999999999807e-09 0.000000000000000000e+00 +2.825999999999999961e-09 0.000000000000000000e+00 +2.826500000000000114e-09 0.000000000000000000e+00 +2.826999999999999854e-09 0.000000000000000000e+00 +2.827500000000000007e-09 0.000000000000000000e+00 +2.827999999999999747e-09 0.000000000000000000e+00 +2.828499999999999900e-09 0.000000000000000000e+00 +2.829000000000000054e-09 0.000000000000000000e+00 +2.829499999999999793e-09 0.000000000000000000e+00 +2.829999999999999947e-09 0.000000000000000000e+00 +2.830500000000000100e-09 0.000000000000000000e+00 +2.830999999999999840e-09 0.000000000000000000e+00 +2.831499999999999993e-09 0.000000000000000000e+00 +2.832000000000000147e-09 0.000000000000000000e+00 +2.832499999999999886e-09 0.000000000000000000e+00 +2.833000000000000040e-09 0.000000000000000000e+00 +2.833499999999999780e-09 0.000000000000000000e+00 +2.833999999999999933e-09 0.000000000000000000e+00 +2.834500000000000086e-09 0.000000000000000000e+00 +2.834999999999999826e-09 0.000000000000000000e+00 +2.835499999999999979e-09 0.000000000000000000e+00 +2.836000000000000133e-09 0.000000000000000000e+00 +2.836499999999999873e-09 0.000000000000000000e+00 +2.837000000000000026e-09 0.000000000000000000e+00 +2.837499999999999766e-09 0.000000000000000000e+00 +2.837999999999999919e-09 0.000000000000000000e+00 +2.838500000000000072e-09 0.000000000000000000e+00 +2.838999999999999812e-09 0.000000000000000000e+00 +2.839499999999999966e-09 0.000000000000000000e+00 +2.840000000000000119e-09 0.000000000000000000e+00 +2.840499999999999859e-09 0.000000000000000000e+00 +2.841000000000000012e-09 0.000000000000000000e+00 +2.841499999999999752e-09 0.000000000000000000e+00 +2.841999999999999905e-09 0.000000000000000000e+00 +2.842500000000000059e-09 0.000000000000000000e+00 +2.842999999999999798e-09 0.000000000000000000e+00 +2.843499999999999952e-09 0.000000000000000000e+00 +2.844000000000000105e-09 0.000000000000000000e+00 +2.844499999999999845e-09 0.000000000000000000e+00 +2.844999999999999998e-09 0.000000000000000000e+00 +2.845499999999999738e-09 0.000000000000000000e+00 +2.845999999999999891e-09 0.000000000000000000e+00 +2.846500000000000045e-09 0.000000000000000000e+00 +2.846999999999999785e-09 0.000000000000000000e+00 +2.847499999999999938e-09 0.000000000000000000e+00 +2.848000000000000091e-09 0.000000000000000000e+00 +2.848499999999999831e-09 0.000000000000000000e+00 +2.848999999999999985e-09 0.000000000000000000e+00 +2.849500000000000138e-09 0.000000000000000000e+00 +2.849999999999999878e-09 0.000000000000000000e+00 +2.850500000000000031e-09 0.000000000000000000e+00 +2.850999999999999771e-09 0.000000000000000000e+00 +2.851499999999999924e-09 0.000000000000000000e+00 +2.852000000000000078e-09 0.000000000000000000e+00 +2.852499999999999817e-09 0.000000000000000000e+00 +2.852999999999999971e-09 0.000000000000000000e+00 +2.853500000000000124e-09 0.000000000000000000e+00 +2.853999999999999864e-09 0.000000000000000000e+00 +2.854500000000000017e-09 0.000000000000000000e+00 +2.854999999999999757e-09 0.000000000000000000e+00 +2.855499999999999910e-09 0.000000000000000000e+00 +2.856000000000000064e-09 0.000000000000000000e+00 +2.856499999999999804e-09 0.000000000000000000e+00 +2.856999999999999957e-09 0.000000000000000000e+00 +2.857500000000000110e-09 0.000000000000000000e+00 +2.857999999999999850e-09 0.000000000000000000e+00 +2.858500000000000003e-09 0.000000000000000000e+00 +2.858999999999999743e-09 0.000000000000000000e+00 +2.859499999999999897e-09 0.000000000000000000e+00 +2.860000000000000050e-09 0.000000000000000000e+00 +2.860499999999999790e-09 0.000000000000000000e+00 +2.860999999999999943e-09 0.000000000000000000e+00 +2.861500000000000096e-09 0.000000000000000000e+00 +2.861999999999999836e-09 0.000000000000000000e+00 +2.862499999999999990e-09 0.000000000000000000e+00 +2.863000000000000143e-09 0.000000000000000000e+00 +2.863499999999999883e-09 0.000000000000000000e+00 +2.864000000000000036e-09 0.000000000000000000e+00 +2.864499999999999776e-09 0.000000000000000000e+00 +2.864999999999999929e-09 0.000000000000000000e+00 +2.865500000000000083e-09 0.000000000000000000e+00 +2.865999999999999822e-09 0.000000000000000000e+00 +2.866499999999999976e-09 0.000000000000000000e+00 +2.867000000000000129e-09 0.000000000000000000e+00 +2.867499999999999869e-09 0.000000000000000000e+00 +2.868000000000000022e-09 0.000000000000000000e+00 +2.868499999999999762e-09 0.000000000000000000e+00 +2.868999999999999915e-09 0.000000000000000000e+00 +2.869500000000000069e-09 0.000000000000000000e+00 +2.869999999999999809e-09 0.000000000000000000e+00 +2.870499999999999962e-09 0.000000000000000000e+00 +2.871000000000000115e-09 0.000000000000000000e+00 +2.871499999999999855e-09 0.000000000000000000e+00 +2.872000000000000008e-09 0.000000000000000000e+00 +2.872499999999999748e-09 0.000000000000000000e+00 +2.872999999999999902e-09 0.000000000000000000e+00 +2.873500000000000055e-09 0.000000000000000000e+00 +2.873999999999999795e-09 0.000000000000000000e+00 +2.874499999999999948e-09 0.000000000000000000e+00 +2.875000000000000102e-09 0.000000000000000000e+00 +2.875499999999999841e-09 0.000000000000000000e+00 +2.875999999999999995e-09 0.000000000000000000e+00 +2.876500000000000148e-09 0.000000000000000000e+00 +2.876999999999999888e-09 0.000000000000000000e+00 +2.877500000000000041e-09 0.000000000000000000e+00 +2.877999999999999781e-09 0.000000000000000000e+00 +2.878499999999999934e-09 0.000000000000000000e+00 +2.879000000000000088e-09 0.000000000000000000e+00 +2.879499999999999827e-09 0.000000000000000000e+00 +2.879999999999999981e-09 0.000000000000000000e+00 +2.880500000000000134e-09 0.000000000000000000e+00 +2.880999999999999874e-09 0.000000000000000000e+00 +2.881500000000000027e-09 0.000000000000000000e+00 +2.881999999999999767e-09 0.000000000000000000e+00 +2.882499999999999921e-09 0.000000000000000000e+00 +2.883000000000000074e-09 0.000000000000000000e+00 +2.883499999999999814e-09 0.000000000000000000e+00 +2.883999999999999967e-09 0.000000000000000000e+00 +2.884500000000000120e-09 0.000000000000000000e+00 +2.884999999999999860e-09 0.000000000000000000e+00 +2.885500000000000014e-09 0.000000000000000000e+00 +2.885999999999999753e-09 0.000000000000000000e+00 +2.886499999999999907e-09 0.000000000000000000e+00 +2.887000000000000060e-09 0.000000000000000000e+00 +2.887499999999999800e-09 0.000000000000000000e+00 +2.887999999999999953e-09 0.000000000000000000e+00 +2.888500000000000107e-09 0.000000000000000000e+00 +2.888999999999999846e-09 0.000000000000000000e+00 +2.889500000000000000e-09 0.000000000000000000e+00 +2.889999999999999740e-09 0.000000000000000000e+00 +2.890499999999999893e-09 0.000000000000000000e+00 +2.891000000000000046e-09 0.000000000000000000e+00 +2.891499999999999786e-09 0.000000000000000000e+00 +2.891999999999999939e-09 0.000000000000000000e+00 +2.892500000000000093e-09 0.000000000000000000e+00 +2.892999999999999833e-09 0.000000000000000000e+00 +2.893499999999999986e-09 0.000000000000000000e+00 +2.894000000000000139e-09 0.000000000000000000e+00 +2.894499999999999879e-09 0.000000000000000000e+00 +2.895000000000000032e-09 0.000000000000000000e+00 +2.895499999999999772e-09 0.000000000000000000e+00 +2.895999999999999926e-09 0.000000000000000000e+00 +2.896500000000000079e-09 0.000000000000000000e+00 +2.896999999999999819e-09 0.000000000000000000e+00 +2.897499999999999972e-09 0.000000000000000000e+00 +2.898000000000000125e-09 0.000000000000000000e+00 +2.898499999999999865e-09 0.000000000000000000e+00 +2.899000000000000019e-09 0.000000000000000000e+00 +2.899499999999999758e-09 0.000000000000000000e+00 +2.899999999999999912e-09 0.000000000000000000e+00 +2.900500000000000065e-09 0.000000000000000000e+00 +2.900999999999999805e-09 0.000000000000000000e+00 +2.901499999999999958e-09 0.000000000000000000e+00 +2.902000000000000112e-09 0.000000000000000000e+00 +2.902499999999999851e-09 0.000000000000000000e+00 +2.903000000000000005e-09 0.000000000000000000e+00 +2.903499999999999745e-09 0.000000000000000000e+00 +2.903999999999999898e-09 0.000000000000000000e+00 +2.904500000000000051e-09 0.000000000000000000e+00 +2.904999999999999791e-09 0.000000000000000000e+00 +2.905499999999999944e-09 0.000000000000000000e+00 +2.906000000000000098e-09 0.000000000000000000e+00 +2.906499999999999838e-09 0.000000000000000000e+00 +2.906999999999999991e-09 0.000000000000000000e+00 +2.907500000000000144e-09 0.000000000000000000e+00 +2.907999999999999884e-09 0.000000000000000000e+00 +2.908500000000000038e-09 0.000000000000000000e+00 +2.908999999999999777e-09 0.000000000000000000e+00 +2.909499999999999931e-09 0.000000000000000000e+00 +2.910000000000000084e-09 0.000000000000000000e+00 +2.910499999999999824e-09 0.000000000000000000e+00 +2.910999999999999977e-09 0.000000000000000000e+00 +2.911500000000000131e-09 0.000000000000000000e+00 +2.911999999999999870e-09 0.000000000000000000e+00 +2.912500000000000024e-09 0.000000000000000000e+00 +2.912999999999999763e-09 0.000000000000000000e+00 +2.913499999999999917e-09 0.000000000000000000e+00 +2.914000000000000070e-09 0.000000000000000000e+00 +2.914499999999999810e-09 0.000000000000000000e+00 +2.914999999999999963e-09 0.000000000000000000e+00 +2.915500000000000117e-09 0.000000000000000000e+00 +2.915999999999999857e-09 0.000000000000000000e+00 +2.916500000000000010e-09 0.000000000000000000e+00 +2.916999999999999750e-09 0.000000000000000000e+00 +2.917499999999999903e-09 0.000000000000000000e+00 +2.918000000000000056e-09 0.000000000000000000e+00 +2.918499999999999796e-09 0.000000000000000000e+00 +2.918999999999999950e-09 0.000000000000000000e+00 +2.919500000000000103e-09 0.000000000000000000e+00 +2.919999999999999843e-09 0.000000000000000000e+00 +2.920499999999999996e-09 0.000000000000000000e+00 +2.920999999999999736e-09 0.000000000000000000e+00 +2.921499999999999889e-09 0.000000000000000000e+00 +2.922000000000000043e-09 0.000000000000000000e+00 +2.922499999999999782e-09 0.000000000000000000e+00 +2.922999999999999936e-09 0.000000000000000000e+00 +2.923500000000000089e-09 0.000000000000000000e+00 +2.923999999999999829e-09 0.000000000000000000e+00 +2.924499999999999982e-09 0.000000000000000000e+00 +2.925000000000000136e-09 0.000000000000000000e+00 +2.925499999999999875e-09 0.000000000000000000e+00 +2.926000000000000029e-09 0.000000000000000000e+00 +2.926499999999999769e-09 0.000000000000000000e+00 +2.926999999999999922e-09 0.000000000000000000e+00 +2.927500000000000075e-09 0.000000000000000000e+00 +2.927999999999999815e-09 0.000000000000000000e+00 +2.928499999999999968e-09 0.000000000000000000e+00 +2.929000000000000122e-09 0.000000000000000000e+00 +2.929499999999999862e-09 0.000000000000000000e+00 +2.930000000000000015e-09 0.000000000000000000e+00 +2.930499999999999755e-09 0.000000000000000000e+00 +2.930999999999999908e-09 0.000000000000000000e+00 +2.931500000000000061e-09 0.000000000000000000e+00 +2.931999999999999801e-09 0.000000000000000000e+00 +2.932499999999999955e-09 0.000000000000000000e+00 +2.933000000000000108e-09 0.000000000000000000e+00 +2.933499999999999848e-09 0.000000000000000000e+00 +2.934000000000000001e-09 0.000000000000000000e+00 +2.934499999999999741e-09 0.000000000000000000e+00 +2.934999999999999894e-09 0.000000000000000000e+00 +2.935500000000000048e-09 0.000000000000000000e+00 +2.935999999999999787e-09 0.000000000000000000e+00 +2.936499999999999941e-09 0.000000000000000000e+00 +2.937000000000000094e-09 0.000000000000000000e+00 +2.937499999999999834e-09 0.000000000000000000e+00 +2.937999999999999987e-09 0.000000000000000000e+00 +2.938500000000000141e-09 0.000000000000000000e+00 +2.938999999999999881e-09 0.000000000000000000e+00 +2.939500000000000034e-09 0.000000000000000000e+00 +2.939999999999999774e-09 0.000000000000000000e+00 +2.940499999999999927e-09 0.000000000000000000e+00 +2.941000000000000080e-09 0.000000000000000000e+00 +2.941499999999999820e-09 0.000000000000000000e+00 +2.941999999999999974e-09 0.000000000000000000e+00 +2.942500000000000127e-09 0.000000000000000000e+00 +2.942999999999999867e-09 0.000000000000000000e+00 +2.943500000000000020e-09 0.000000000000000000e+00 +2.943999999999999760e-09 0.000000000000000000e+00 +2.944499999999999913e-09 0.000000000000000000e+00 +2.945000000000000067e-09 0.000000000000000000e+00 +2.945499999999999806e-09 0.000000000000000000e+00 +2.945999999999999960e-09 0.000000000000000000e+00 +2.946500000000000113e-09 0.000000000000000000e+00 +2.946999999999999853e-09 0.000000000000000000e+00 +2.947500000000000006e-09 0.000000000000000000e+00 +2.947999999999999746e-09 0.000000000000000000e+00 +2.948499999999999899e-09 0.000000000000000000e+00 +2.949000000000000053e-09 0.000000000000000000e+00 +2.949499999999999793e-09 0.000000000000000000e+00 +2.949999999999999946e-09 0.000000000000000000e+00 +2.950500000000000099e-09 0.000000000000000000e+00 +2.950999999999999839e-09 0.000000000000000000e+00 +2.951499999999999992e-09 0.000000000000000000e+00 +2.952000000000000146e-09 0.000000000000000000e+00 +2.952499999999999886e-09 0.000000000000000000e+00 +2.953000000000000039e-09 0.000000000000000000e+00 +2.953499999999999779e-09 0.000000000000000000e+00 +2.953999999999999932e-09 0.000000000000000000e+00 +2.954500000000000085e-09 0.000000000000000000e+00 +2.954999999999999825e-09 0.000000000000000000e+00 +2.955499999999999979e-09 0.000000000000000000e+00 +2.956000000000000132e-09 0.000000000000000000e+00 +2.956499999999999872e-09 0.000000000000000000e+00 +2.957000000000000025e-09 0.000000000000000000e+00 +2.957499999999999765e-09 0.000000000000000000e+00 +2.957999999999999918e-09 0.000000000000000000e+00 +2.958500000000000072e-09 0.000000000000000000e+00 +2.958999999999999811e-09 0.000000000000000000e+00 +2.959499999999999965e-09 0.000000000000000000e+00 +2.960000000000000118e-09 0.000000000000000000e+00 +2.960499999999999858e-09 0.000000000000000000e+00 +2.961000000000000011e-09 0.000000000000000000e+00 +2.961499999999999751e-09 0.000000000000000000e+00 +2.961999999999999904e-09 0.000000000000000000e+00 +2.962500000000000058e-09 0.000000000000000000e+00 +2.962999999999999798e-09 0.000000000000000000e+00 +2.963499999999999951e-09 0.000000000000000000e+00 +2.964000000000000104e-09 0.000000000000000000e+00 +2.964499999999999844e-09 0.000000000000000000e+00 +2.964999999999999998e-09 0.000000000000000000e+00 +2.965499999999999737e-09 0.000000000000000000e+00 +2.965999999999999891e-09 0.000000000000000000e+00 +2.966500000000000044e-09 0.000000000000000000e+00 +2.966999999999999784e-09 0.000000000000000000e+00 +2.967499999999999937e-09 0.000000000000000000e+00 +2.968000000000000091e-09 0.000000000000000000e+00 +2.968499999999999830e-09 0.000000000000000000e+00 +2.968999999999999984e-09 0.000000000000000000e+00 +2.969500000000000137e-09 0.000000000000000000e+00 +2.969999999999999877e-09 0.000000000000000000e+00 +2.970500000000000030e-09 0.000000000000000000e+00 +2.970999999999999770e-09 0.000000000000000000e+00 +2.971499999999999923e-09 0.000000000000000000e+00 +2.972000000000000077e-09 0.000000000000000000e+00 +2.972499999999999817e-09 0.000000000000000000e+00 +2.972999999999999970e-09 0.000000000000000000e+00 +2.973500000000000123e-09 0.000000000000000000e+00 +2.973999999999999863e-09 0.000000000000000000e+00 +2.974500000000000016e-09 0.000000000000000000e+00 +2.974999999999999756e-09 0.000000000000000000e+00 +2.975499999999999910e-09 0.000000000000000000e+00 +2.976000000000000063e-09 0.000000000000000000e+00 +2.976499999999999803e-09 0.000000000000000000e+00 +2.976999999999999956e-09 0.000000000000000000e+00 +2.977500000000000109e-09 0.000000000000000000e+00 +2.977999999999999849e-09 0.000000000000000000e+00 +2.978500000000000003e-09 0.000000000000000000e+00 +2.978999999999999742e-09 0.000000000000000000e+00 +2.979499999999999896e-09 0.000000000000000000e+00 +2.980000000000000049e-09 0.000000000000000000e+00 +2.980499999999999789e-09 0.000000000000000000e+00 +2.980999999999999942e-09 0.000000000000000000e+00 +2.981500000000000096e-09 0.000000000000000000e+00 +2.981999999999999835e-09 0.000000000000000000e+00 +2.982499999999999989e-09 0.000000000000000000e+00 +2.983000000000000142e-09 0.000000000000000000e+00 +2.983499999999999882e-09 0.000000000000000000e+00 +2.984000000000000035e-09 0.000000000000000000e+00 +2.984499999999999775e-09 0.000000000000000000e+00 +2.984999999999999928e-09 0.000000000000000000e+00 +2.985500000000000082e-09 0.000000000000000000e+00 +2.985999999999999822e-09 0.000000000000000000e+00 +2.986499999999999975e-09 0.000000000000000000e+00 +2.987000000000000128e-09 0.000000000000000000e+00 +2.987499999999999868e-09 0.000000000000000000e+00 +2.988000000000000021e-09 0.000000000000000000e+00 +2.988499999999999761e-09 0.000000000000000000e+00 +2.988999999999999915e-09 0.000000000000000000e+00 +2.989500000000000068e-09 0.000000000000000000e+00 +2.989999999999999808e-09 0.000000000000000000e+00 +2.990499999999999961e-09 0.000000000000000000e+00 +2.991000000000000115e-09 0.000000000000000000e+00 +2.991499999999999854e-09 0.000000000000000000e+00 +2.992000000000000008e-09 0.000000000000000000e+00 +2.992499999999999747e-09 0.000000000000000000e+00 +2.992999999999999901e-09 0.000000000000000000e+00 +2.993500000000000054e-09 0.000000000000000000e+00 +2.993999999999999794e-09 0.000000000000000000e+00 +2.994499999999999947e-09 0.000000000000000000e+00 +2.995000000000000101e-09 0.000000000000000000e+00 +2.995499999999999840e-09 0.000000000000000000e+00 +2.995999999999999994e-09 0.000000000000000000e+00 +2.996499999999999734e-09 0.000000000000000000e+00 +2.996999999999999887e-09 0.000000000000000000e+00 +2.997500000000000040e-09 0.000000000000000000e+00 +2.997999999999999780e-09 0.000000000000000000e+00 +2.998499999999999934e-09 0.000000000000000000e+00 +2.999000000000000087e-09 0.000000000000000000e+00 +2.999499999999999827e-09 0.000000000000000000e+00 +2.999999999999999980e-09 0.000000000000000000e+00 +3.000500000000000133e-09 0.000000000000000000e+00 +3.000999999999999873e-09 0.000000000000000000e+00 +3.001500000000000027e-09 0.000000000000000000e+00 +3.001999999999999766e-09 0.000000000000000000e+00 +3.002499999999999920e-09 0.000000000000000000e+00 +3.003000000000000073e-09 0.000000000000000000e+00 +3.003499999999999813e-09 0.000000000000000000e+00 +3.003999999999999966e-09 0.000000000000000000e+00 +3.004500000000000120e-09 0.000000000000000000e+00 +3.004999999999999859e-09 0.000000000000000000e+00 +3.005500000000000013e-09 0.000000000000000000e+00 +3.005999999999999753e-09 0.000000000000000000e+00 +3.006499999999999906e-09 0.000000000000000000e+00 +3.007000000000000059e-09 0.000000000000000000e+00 +3.007499999999999799e-09 0.000000000000000000e+00 +3.007999999999999952e-09 0.000000000000000000e+00 +3.008500000000000106e-09 0.000000000000000000e+00 +3.008999999999999846e-09 0.000000000000000000e+00 +3.009499999999999999e-09 0.000000000000000000e+00 +3.009999999999999739e-09 0.000000000000000000e+00 +3.010499999999999892e-09 0.000000000000000000e+00 +3.011000000000000045e-09 0.000000000000000000e+00 +3.011499999999999785e-09 0.000000000000000000e+00 +3.011999999999999939e-09 0.000000000000000000e+00 +3.012500000000000092e-09 0.000000000000000000e+00 +3.012999999999999832e-09 0.000000000000000000e+00 +3.013499999999999985e-09 0.000000000000000000e+00 +3.014000000000000138e-09 0.000000000000000000e+00 +3.014499999999999878e-09 0.000000000000000000e+00 +3.015000000000000032e-09 0.000000000000000000e+00 +3.015499999999999771e-09 0.000000000000000000e+00 +3.015999999999999925e-09 0.000000000000000000e+00 +3.016500000000000078e-09 0.000000000000000000e+00 +3.016999999999999818e-09 0.000000000000000000e+00 +3.017499999999999971e-09 0.000000000000000000e+00 +3.018000000000000125e-09 0.000000000000000000e+00 +3.018499999999999864e-09 0.000000000000000000e+00 +3.019000000000000018e-09 0.000000000000000000e+00 +3.019499999999999758e-09 0.000000000000000000e+00 +3.019999999999999911e-09 0.000000000000000000e+00 +3.020500000000000064e-09 0.000000000000000000e+00 +3.020999999999999804e-09 0.000000000000000000e+00 +3.021499999999999958e-09 0.000000000000000000e+00 +3.022000000000000111e-09 0.000000000000000000e+00 +3.022499999999999851e-09 0.000000000000000000e+00 +3.023000000000000004e-09 0.000000000000000000e+00 +3.023499999999999744e-09 0.000000000000000000e+00 +3.023999999999999897e-09 0.000000000000000000e+00 +3.024500000000000051e-09 0.000000000000000000e+00 +3.024999999999999790e-09 0.000000000000000000e+00 +3.025499999999999944e-09 0.000000000000000000e+00 +3.026000000000000097e-09 0.000000000000000000e+00 +3.026499999999999837e-09 0.000000000000000000e+00 +3.026999999999999990e-09 0.000000000000000000e+00 +3.027500000000000144e-09 0.000000000000000000e+00 +3.027999999999999883e-09 0.000000000000000000e+00 +3.028500000000000037e-09 0.000000000000000000e+00 +3.028999999999999777e-09 0.000000000000000000e+00 +3.029499999999999930e-09 0.000000000000000000e+00 +3.030000000000000083e-09 0.000000000000000000e+00 +3.030499999999999823e-09 0.000000000000000000e+00 +3.030999999999999976e-09 0.000000000000000000e+00 +3.031500000000000130e-09 0.000000000000000000e+00 +3.031999999999999870e-09 0.000000000000000000e+00 +3.032500000000000023e-09 0.000000000000000000e+00 +3.032999999999999763e-09 0.000000000000000000e+00 +3.033499999999999916e-09 0.000000000000000000e+00 +3.034000000000000069e-09 0.000000000000000000e+00 +3.034499999999999809e-09 0.000000000000000000e+00 +3.034999999999999963e-09 0.000000000000000000e+00 +3.035500000000000116e-09 0.000000000000000000e+00 +3.035999999999999856e-09 0.000000000000000000e+00 +3.036500000000000009e-09 0.000000000000000000e+00 +3.036999999999999749e-09 0.000000000000000000e+00 +3.037499999999999902e-09 0.000000000000000000e+00 +3.038000000000000056e-09 0.000000000000000000e+00 +3.038499999999999795e-09 0.000000000000000000e+00 +3.038999999999999949e-09 0.000000000000000000e+00 +3.039500000000000102e-09 0.000000000000000000e+00 +3.039999999999999842e-09 0.000000000000000000e+00 +3.040499999999999995e-09 0.000000000000000000e+00 +3.040999999999999735e-09 0.000000000000000000e+00 +3.041499999999999888e-09 0.000000000000000000e+00 +3.042000000000000042e-09 0.000000000000000000e+00 +3.042499999999999782e-09 0.000000000000000000e+00 +3.042999999999999935e-09 0.000000000000000000e+00 +3.043500000000000088e-09 0.000000000000000000e+00 +3.043999999999999828e-09 0.000000000000000000e+00 +3.044499999999999981e-09 0.000000000000000000e+00 +3.045000000000000135e-09 0.000000000000000000e+00 +3.045499999999999875e-09 0.000000000000000000e+00 +3.046000000000000028e-09 0.000000000000000000e+00 +3.046499999999999768e-09 0.000000000000000000e+00 +3.046999999999999921e-09 0.000000000000000000e+00 +3.047500000000000075e-09 0.000000000000000000e+00 +3.047999999999999814e-09 0.000000000000000000e+00 +3.048499999999999968e-09 0.000000000000000000e+00 +3.049000000000000121e-09 0.000000000000000000e+00 +3.049499999999999861e-09 0.000000000000000000e+00 +3.050000000000000014e-09 0.000000000000000000e+00 +3.050499999999999754e-09 0.000000000000000000e+00 +3.050999999999999907e-09 0.000000000000000000e+00 +3.051500000000000061e-09 0.000000000000000000e+00 +3.051999999999999800e-09 0.000000000000000000e+00 +3.052499999999999954e-09 0.000000000000000000e+00 +3.053000000000000107e-09 0.000000000000000000e+00 +3.053499999999999847e-09 0.000000000000000000e+00 +3.054000000000000000e-09 0.000000000000000000e+00 +3.054499999999999740e-09 0.000000000000000000e+00 +3.054999999999999894e-09 0.000000000000000000e+00 +3.055500000000000047e-09 0.000000000000000000e+00 +3.055999999999999787e-09 0.000000000000000000e+00 +3.056499999999999940e-09 0.000000000000000000e+00 +3.057000000000000093e-09 0.000000000000000000e+00 +3.057499999999999833e-09 0.000000000000000000e+00 +3.057999999999999987e-09 0.000000000000000000e+00 +3.058500000000000140e-09 0.000000000000000000e+00 +3.058999999999999880e-09 0.000000000000000000e+00 +3.059500000000000033e-09 0.000000000000000000e+00 +3.059999999999999773e-09 0.000000000000000000e+00 +3.060499999999999926e-09 0.000000000000000000e+00 +3.061000000000000080e-09 0.000000000000000000e+00 +3.061499999999999819e-09 0.000000000000000000e+00 +3.061999999999999973e-09 0.000000000000000000e+00 +3.062500000000000126e-09 0.000000000000000000e+00 +3.062999999999999866e-09 0.000000000000000000e+00 +3.063500000000000019e-09 0.000000000000000000e+00 +3.063999999999999759e-09 0.000000000000000000e+00 +3.064499999999999912e-09 0.000000000000000000e+00 +3.065000000000000066e-09 0.000000000000000000e+00 +3.065499999999999806e-09 0.000000000000000000e+00 +3.065999999999999959e-09 0.000000000000000000e+00 +3.066500000000000112e-09 0.000000000000000000e+00 +3.066999999999999852e-09 0.000000000000000000e+00 +3.067500000000000005e-09 0.000000000000000000e+00 +3.067999999999999745e-09 0.000000000000000000e+00 +3.068499999999999899e-09 0.000000000000000000e+00 +3.069000000000000052e-09 0.000000000000000000e+00 +3.069499999999999792e-09 0.000000000000000000e+00 +3.069999999999999945e-09 0.000000000000000000e+00 +3.070500000000000098e-09 0.000000000000000000e+00 +3.070999999999999838e-09 0.000000000000000000e+00 +3.071499999999999992e-09 0.000000000000000000e+00 +3.072000000000000145e-09 0.000000000000000000e+00 +3.072499999999999885e-09 0.000000000000000000e+00 +3.073000000000000038e-09 0.000000000000000000e+00 +3.073499999999999778e-09 0.000000000000000000e+00 +3.073999999999999931e-09 0.000000000000000000e+00 +3.074500000000000085e-09 0.000000000000000000e+00 +3.074999999999999824e-09 0.000000000000000000e+00 +3.075499999999999978e-09 0.000000000000000000e+00 +3.076000000000000131e-09 0.000000000000000000e+00 +3.076499999999999871e-09 0.000000000000000000e+00 +3.077000000000000024e-09 0.000000000000000000e+00 +3.077499999999999764e-09 0.000000000000000000e+00 +3.077999999999999917e-09 0.000000000000000000e+00 +3.078500000000000071e-09 0.000000000000000000e+00 +3.078999999999999811e-09 0.000000000000000000e+00 +3.079499999999999964e-09 0.000000000000000000e+00 +3.080000000000000117e-09 0.000000000000000000e+00 +3.080499999999999857e-09 0.000000000000000000e+00 +3.081000000000000011e-09 0.000000000000000000e+00 +3.081499999999999750e-09 0.000000000000000000e+00 +3.081999999999999904e-09 0.000000000000000000e+00 +3.082500000000000057e-09 0.000000000000000000e+00 +3.082999999999999797e-09 0.000000000000000000e+00 +3.083499999999999950e-09 0.000000000000000000e+00 +3.084000000000000104e-09 0.000000000000000000e+00 +3.084499999999999843e-09 0.000000000000000000e+00 +3.084999999999999997e-09 0.000000000000000000e+00 +3.085499999999999736e-09 0.000000000000000000e+00 +3.085999999999999890e-09 0.000000000000000000e+00 +3.086500000000000043e-09 0.000000000000000000e+00 +3.086999999999999783e-09 0.000000000000000000e+00 +3.087499999999999936e-09 0.000000000000000000e+00 +3.088000000000000090e-09 0.000000000000000000e+00 +3.088499999999999830e-09 0.000000000000000000e+00 +3.088999999999999983e-09 0.000000000000000000e+00 +3.089500000000000136e-09 0.000000000000000000e+00 +3.089999999999999876e-09 0.000000000000000000e+00 +3.090500000000000029e-09 0.000000000000000000e+00 +3.090999999999999769e-09 0.000000000000000000e+00 +3.091499999999999923e-09 0.000000000000000000e+00 +3.092000000000000076e-09 0.000000000000000000e+00 +3.092499999999999816e-09 0.000000000000000000e+00 +3.092999999999999969e-09 0.000000000000000000e+00 +3.093500000000000122e-09 0.000000000000000000e+00 +3.093999999999999862e-09 0.000000000000000000e+00 +3.094500000000000016e-09 0.000000000000000000e+00 +3.094999999999999755e-09 0.000000000000000000e+00 +3.095499999999999909e-09 0.000000000000000000e+00 +3.096000000000000062e-09 0.000000000000000000e+00 +3.096499999999999802e-09 0.000000000000000000e+00 +3.096999999999999955e-09 0.000000000000000000e+00 +3.097500000000000109e-09 0.000000000000000000e+00 +3.097999999999999848e-09 0.000000000000000000e+00 +3.098500000000000002e-09 0.000000000000000000e+00 +3.098999999999999742e-09 0.000000000000000000e+00 +3.099499999999999895e-09 0.000000000000000000e+00 +3.100000000000000048e-09 0.000000000000000000e+00 +3.100499999999999788e-09 0.000000000000000000e+00 +3.100999999999999941e-09 0.000000000000000000e+00 +3.101500000000000095e-09 0.000000000000000000e+00 +3.101999999999999835e-09 0.000000000000000000e+00 +3.102499999999999988e-09 0.000000000000000000e+00 +3.103000000000000141e-09 0.000000000000000000e+00 +3.103499999999999881e-09 0.000000000000000000e+00 +3.104000000000000035e-09 0.000000000000000000e+00 +3.104499999999999774e-09 0.000000000000000000e+00 +3.104999999999999928e-09 0.000000000000000000e+00 +3.105500000000000081e-09 0.000000000000000000e+00 +3.105999999999999821e-09 0.000000000000000000e+00 +3.106499999999999974e-09 0.000000000000000000e+00 +3.107000000000000128e-09 0.000000000000000000e+00 +3.107499999999999867e-09 0.000000000000000000e+00 +3.108000000000000021e-09 0.000000000000000000e+00 +3.108499999999999760e-09 0.000000000000000000e+00 +3.108999999999999914e-09 0.000000000000000000e+00 +3.109500000000000067e-09 0.000000000000000000e+00 +3.109999999999999807e-09 0.000000000000000000e+00 +3.110499999999999960e-09 0.000000000000000000e+00 +3.111000000000000114e-09 0.000000000000000000e+00 +3.111499999999999854e-09 0.000000000000000000e+00 +3.112000000000000007e-09 0.000000000000000000e+00 +3.112499999999999747e-09 0.000000000000000000e+00 +3.112999999999999900e-09 0.000000000000000000e+00 +3.113500000000000053e-09 0.000000000000000000e+00 +3.113999999999999793e-09 0.000000000000000000e+00 +3.114499999999999947e-09 0.000000000000000000e+00 +3.115000000000000100e-09 0.000000000000000000e+00 +3.115499999999999840e-09 0.000000000000000000e+00 +3.115999999999999993e-09 0.000000000000000000e+00 +3.116499999999999733e-09 0.000000000000000000e+00 +3.116999999999999886e-09 0.000000000000000000e+00 +3.117500000000000040e-09 0.000000000000000000e+00 +3.117999999999999779e-09 0.000000000000000000e+00 +3.118499999999999933e-09 0.000000000000000000e+00 +3.119000000000000086e-09 0.000000000000000000e+00 +3.119499999999999826e-09 0.000000000000000000e+00 +3.119999999999999979e-09 0.000000000000000000e+00 +3.120500000000000133e-09 0.000000000000000000e+00 +3.120999999999999872e-09 0.000000000000000000e+00 +3.121500000000000026e-09 0.000000000000000000e+00 +3.121999999999999766e-09 0.000000000000000000e+00 +3.122499999999999919e-09 0.000000000000000000e+00 +3.123000000000000072e-09 0.000000000000000000e+00 +3.123499999999999812e-09 0.000000000000000000e+00 +3.123999999999999965e-09 0.000000000000000000e+00 +3.124500000000000119e-09 0.000000000000000000e+00 +3.124999999999999859e-09 0.000000000000000000e+00 +3.125500000000000012e-09 0.000000000000000000e+00 +3.125999999999999752e-09 0.000000000000000000e+00 +3.126499999999999905e-09 0.000000000000000000e+00 +3.127000000000000058e-09 0.000000000000000000e+00 +3.127499999999999798e-09 0.000000000000000000e+00 +3.127999999999999952e-09 0.000000000000000000e+00 +3.128500000000000105e-09 0.000000000000000000e+00 +3.128999999999999845e-09 0.000000000000000000e+00 +3.129499999999999998e-09 0.000000000000000000e+00 +3.129999999999999738e-09 0.000000000000000000e+00 +3.130499999999999891e-09 0.000000000000000000e+00 +3.131000000000000045e-09 0.000000000000000000e+00 +3.131499999999999784e-09 0.000000000000000000e+00 +3.131999999999999938e-09 0.000000000000000000e+00 +3.132500000000000091e-09 0.000000000000000000e+00 +3.132999999999999831e-09 0.000000000000000000e+00 +3.133499999999999984e-09 0.000000000000000000e+00 +3.134000000000000138e-09 0.000000000000000000e+00 +3.134499999999999877e-09 0.000000000000000000e+00 +3.135000000000000031e-09 0.000000000000000000e+00 +3.135499999999999771e-09 0.000000000000000000e+00 +3.135999999999999924e-09 0.000000000000000000e+00 +3.136500000000000077e-09 0.000000000000000000e+00 +3.136999999999999817e-09 0.000000000000000000e+00 +3.137499999999999971e-09 0.000000000000000000e+00 +3.138000000000000124e-09 0.000000000000000000e+00 +3.138499999999999864e-09 0.000000000000000000e+00 +3.139000000000000017e-09 0.000000000000000000e+00 +3.139499999999999757e-09 0.000000000000000000e+00 +3.139999999999999910e-09 0.000000000000000000e+00 +3.140500000000000064e-09 0.000000000000000000e+00 +3.140999999999999803e-09 0.000000000000000000e+00 +3.141499999999999957e-09 0.000000000000000000e+00 +3.142000000000000110e-09 0.000000000000000000e+00 +3.142499999999999850e-09 0.000000000000000000e+00 +3.143000000000000003e-09 0.000000000000000000e+00 +3.143499999999999743e-09 0.000000000000000000e+00 +3.143999999999999896e-09 0.000000000000000000e+00 +3.144500000000000050e-09 0.000000000000000000e+00 +3.144999999999999790e-09 0.000000000000000000e+00 +3.145499999999999943e-09 0.000000000000000000e+00 +3.146000000000000096e-09 0.000000000000000000e+00 +3.146499999999999836e-09 0.000000000000000000e+00 +3.146999999999999989e-09 0.000000000000000000e+00 +3.147500000000000143e-09 0.000000000000000000e+00 +3.147999999999999883e-09 0.000000000000000000e+00 +3.148500000000000036e-09 0.000000000000000000e+00 +3.148999999999999776e-09 0.000000000000000000e+00 +3.149499999999999929e-09 0.000000000000000000e+00 +3.150000000000000082e-09 0.000000000000000000e+00 +3.150499999999999822e-09 0.000000000000000000e+00 +3.150999999999999976e-09 0.000000000000000000e+00 +3.151500000000000129e-09 0.000000000000000000e+00 +3.151999999999999869e-09 0.000000000000000000e+00 +3.152500000000000022e-09 0.000000000000000000e+00 +3.152999999999999762e-09 0.000000000000000000e+00 +3.153499999999999915e-09 0.000000000000000000e+00 +3.154000000000000069e-09 0.000000000000000000e+00 +3.154499999999999808e-09 0.000000000000000000e+00 +3.154999999999999962e-09 0.000000000000000000e+00 +3.155500000000000115e-09 0.000000000000000000e+00 +3.155999999999999855e-09 0.000000000000000000e+00 +3.156500000000000008e-09 0.000000000000000000e+00 +3.156999999999999748e-09 0.000000000000000000e+00 +3.157499999999999901e-09 0.000000000000000000e+00 +3.158000000000000055e-09 0.000000000000000000e+00 +3.158499999999999795e-09 0.000000000000000000e+00 +3.158999999999999948e-09 0.000000000000000000e+00 +3.159500000000000101e-09 0.000000000000000000e+00 +3.159999999999999841e-09 0.000000000000000000e+00 +3.160499999999999994e-09 0.000000000000000000e+00 +3.160999999999999734e-09 0.000000000000000000e+00 +3.161499999999999888e-09 0.000000000000000000e+00 +3.162000000000000041e-09 0.000000000000000000e+00 +3.162499999999999781e-09 0.000000000000000000e+00 +3.162999999999999934e-09 0.000000000000000000e+00 +3.163500000000000088e-09 0.000000000000000000e+00 +3.163999999999999827e-09 0.000000000000000000e+00 +3.164499999999999981e-09 0.000000000000000000e+00 +3.165000000000000134e-09 0.000000000000000000e+00 +3.165499999999999874e-09 0.000000000000000000e+00 +3.166000000000000027e-09 0.000000000000000000e+00 +3.166499999999999767e-09 0.000000000000000000e+00 +3.166999999999999920e-09 0.000000000000000000e+00 +3.167500000000000074e-09 0.000000000000000000e+00 +3.167999999999999813e-09 0.000000000000000000e+00 +3.168499999999999967e-09 0.000000000000000000e+00 +3.169000000000000120e-09 0.000000000000000000e+00 +3.169499999999999860e-09 0.000000000000000000e+00 +3.170000000000000013e-09 0.000000000000000000e+00 +3.170499999999999753e-09 0.000000000000000000e+00 +3.170999999999999907e-09 0.000000000000000000e+00 +3.171500000000000060e-09 0.000000000000000000e+00 +3.171999999999999800e-09 0.000000000000000000e+00 +3.172499999999999953e-09 0.000000000000000000e+00 +3.173000000000000106e-09 0.000000000000000000e+00 +3.173499999999999846e-09 0.000000000000000000e+00 +3.174000000000000000e-09 0.000000000000000000e+00 +3.174499999999999739e-09 0.000000000000000000e+00 +3.174999999999999893e-09 0.000000000000000000e+00 +3.175500000000000046e-09 0.000000000000000000e+00 +3.175999999999999786e-09 0.000000000000000000e+00 +3.176499999999999939e-09 0.000000000000000000e+00 +3.177000000000000093e-09 0.000000000000000000e+00 +3.177499999999999832e-09 0.000000000000000000e+00 +3.177999999999999986e-09 0.000000000000000000e+00 +3.178500000000000139e-09 0.000000000000000000e+00 +3.178999999999999879e-09 0.000000000000000000e+00 +3.179500000000000032e-09 0.000000000000000000e+00 +3.179999999999999772e-09 0.000000000000000000e+00 +3.180499999999999925e-09 0.000000000000000000e+00 +3.181000000000000079e-09 0.000000000000000000e+00 +3.181499999999999819e-09 0.000000000000000000e+00 +3.181999999999999972e-09 0.000000000000000000e+00 +3.182500000000000125e-09 0.000000000000000000e+00 +3.182999999999999865e-09 0.000000000000000000e+00 +3.183500000000000018e-09 0.000000000000000000e+00 +3.183999999999999758e-09 0.000000000000000000e+00 +3.184499999999999912e-09 0.000000000000000000e+00 +3.185000000000000065e-09 0.000000000000000000e+00 +3.185499999999999805e-09 0.000000000000000000e+00 +3.185999999999999958e-09 0.000000000000000000e+00 +3.186500000000000112e-09 0.000000000000000000e+00 +3.186999999999999851e-09 0.000000000000000000e+00 +3.187500000000000005e-09 0.000000000000000000e+00 +3.187999999999999744e-09 0.000000000000000000e+00 +3.188499999999999898e-09 0.000000000000000000e+00 +3.189000000000000051e-09 0.000000000000000000e+00 +3.189499999999999791e-09 0.000000000000000000e+00 +3.189999999999999944e-09 0.000000000000000000e+00 +3.190500000000000098e-09 0.000000000000000000e+00 +3.190999999999999837e-09 0.000000000000000000e+00 +3.191499999999999991e-09 0.000000000000000000e+00 +3.191999999999999731e-09 0.000000000000000000e+00 +3.192499999999999884e-09 0.000000000000000000e+00 +3.193000000000000037e-09 0.000000000000000000e+00 +3.193499999999999777e-09 0.000000000000000000e+00 +3.193999999999999931e-09 0.000000000000000000e+00 +3.194500000000000084e-09 0.000000000000000000e+00 +3.194999999999999824e-09 0.000000000000000000e+00 +3.195499999999999977e-09 0.000000000000000000e+00 +3.196000000000000130e-09 0.000000000000000000e+00 +3.196499999999999870e-09 0.000000000000000000e+00 +3.197000000000000024e-09 0.000000000000000000e+00 +3.197499999999999763e-09 0.000000000000000000e+00 +3.197999999999999917e-09 0.000000000000000000e+00 +3.198500000000000070e-09 0.000000000000000000e+00 +3.198999999999999810e-09 0.000000000000000000e+00 +3.199499999999999963e-09 0.000000000000000000e+00 +3.200000000000000117e-09 0.000000000000000000e+00 +3.200499999999999856e-09 0.000000000000000000e+00 +3.201000000000000010e-09 0.000000000000000000e+00 +3.201499999999999750e-09 0.000000000000000000e+00 +3.201999999999999903e-09 0.000000000000000000e+00 +3.202500000000000056e-09 0.000000000000000000e+00 +3.202999999999999796e-09 0.000000000000000000e+00 +3.203499999999999949e-09 0.000000000000000000e+00 +3.204000000000000103e-09 0.000000000000000000e+00 +3.204499999999999843e-09 0.000000000000000000e+00 +3.204999999999999996e-09 0.000000000000000000e+00 +3.205499999999999736e-09 0.000000000000000000e+00 +3.205999999999999889e-09 0.000000000000000000e+00 +3.206500000000000042e-09 0.000000000000000000e+00 +3.206999999999999782e-09 0.000000000000000000e+00 +3.207499999999999936e-09 0.000000000000000000e+00 +3.208000000000000089e-09 0.000000000000000000e+00 +3.208499999999999829e-09 0.000000000000000000e+00 +3.208999999999999982e-09 0.000000000000000000e+00 +3.209500000000000135e-09 0.000000000000000000e+00 +3.209999999999999875e-09 0.000000000000000000e+00 +3.210500000000000029e-09 0.000000000000000000e+00 +3.210999999999999768e-09 0.000000000000000000e+00 +3.211499999999999922e-09 0.000000000000000000e+00 +3.212000000000000075e-09 0.000000000000000000e+00 +3.212499999999999815e-09 0.000000000000000000e+00 +3.212999999999999968e-09 0.000000000000000000e+00 +3.213500000000000122e-09 0.000000000000000000e+00 +3.213999999999999861e-09 0.000000000000000000e+00 +3.214500000000000015e-09 0.000000000000000000e+00 +3.214999999999999755e-09 0.000000000000000000e+00 +3.215499999999999908e-09 0.000000000000000000e+00 +3.216000000000000061e-09 0.000000000000000000e+00 +3.216499999999999801e-09 0.000000000000000000e+00 +3.216999999999999954e-09 0.000000000000000000e+00 +3.217500000000000108e-09 0.000000000000000000e+00 +3.217999999999999848e-09 0.000000000000000000e+00 +3.218500000000000001e-09 0.000000000000000000e+00 +3.218999999999999741e-09 0.000000000000000000e+00 +3.219499999999999894e-09 0.000000000000000000e+00 +3.220000000000000048e-09 0.000000000000000000e+00 +3.220499999999999787e-09 0.000000000000000000e+00 +3.220999999999999941e-09 0.000000000000000000e+00 +3.221500000000000094e-09 0.000000000000000000e+00 +3.221999999999999834e-09 0.000000000000000000e+00 +3.222499999999999987e-09 0.000000000000000000e+00 +3.223000000000000141e-09 0.000000000000000000e+00 +3.223499999999999880e-09 0.000000000000000000e+00 +3.224000000000000034e-09 0.000000000000000000e+00 +3.224499999999999773e-09 0.000000000000000000e+00 +3.224999999999999927e-09 0.000000000000000000e+00 +3.225500000000000080e-09 0.000000000000000000e+00 +3.225999999999999820e-09 0.000000000000000000e+00 +3.226499999999999973e-09 0.000000000000000000e+00 +3.227000000000000127e-09 0.000000000000000000e+00 +3.227499999999999867e-09 0.000000000000000000e+00 +3.228000000000000020e-09 0.000000000000000000e+00 +3.228499999999999760e-09 0.000000000000000000e+00 +3.228999999999999913e-09 0.000000000000000000e+00 +3.229500000000000066e-09 0.000000000000000000e+00 +3.229999999999999806e-09 0.000000000000000000e+00 +3.230499999999999960e-09 0.000000000000000000e+00 +3.231000000000000113e-09 0.000000000000000000e+00 +3.231499999999999853e-09 0.000000000000000000e+00 +3.232000000000000006e-09 0.000000000000000000e+00 +3.232499999999999746e-09 0.000000000000000000e+00 +3.232999999999999899e-09 0.000000000000000000e+00 +3.233500000000000053e-09 0.000000000000000000e+00 +3.233999999999999792e-09 0.000000000000000000e+00 +3.234499999999999946e-09 0.000000000000000000e+00 +3.235000000000000099e-09 0.000000000000000000e+00 +3.235499999999999839e-09 0.000000000000000000e+00 +3.235999999999999992e-09 0.000000000000000000e+00 +3.236499999999999732e-09 0.000000000000000000e+00 +3.236999999999999885e-09 0.000000000000000000e+00 +3.237500000000000039e-09 0.000000000000000000e+00 +3.237999999999999779e-09 0.000000000000000000e+00 +3.238499999999999932e-09 0.000000000000000000e+00 +3.239000000000000085e-09 0.000000000000000000e+00 +3.239499999999999825e-09 0.000000000000000000e+00 +3.239999999999999978e-09 0.000000000000000000e+00 +3.240500000000000132e-09 0.000000000000000000e+00 +3.240999999999999872e-09 0.000000000000000000e+00 +3.241500000000000025e-09 0.000000000000000000e+00 +3.241999999999999765e-09 0.000000000000000000e+00 +3.242499999999999918e-09 0.000000000000000000e+00 +3.243000000000000071e-09 0.000000000000000000e+00 +3.243499999999999811e-09 0.000000000000000000e+00 +3.243999999999999965e-09 0.000000000000000000e+00 +3.244500000000000118e-09 0.000000000000000000e+00 +3.244999999999999858e-09 0.000000000000000000e+00 +3.245500000000000011e-09 0.000000000000000000e+00 +3.245999999999999751e-09 0.000000000000000000e+00 +3.246499999999999904e-09 0.000000000000000000e+00 +3.247000000000000058e-09 0.000000000000000000e+00 +3.247499999999999797e-09 0.000000000000000000e+00 +3.247999999999999951e-09 0.000000000000000000e+00 +3.248500000000000104e-09 0.000000000000000000e+00 +3.248999999999999844e-09 0.000000000000000000e+00 +3.249499999999999997e-09 0.000000000000000000e+00 +3.249999999999999737e-09 0.000000000000000000e+00 +3.250499999999999890e-09 0.000000000000000000e+00 +3.251000000000000044e-09 0.000000000000000000e+00 +3.251499999999999784e-09 0.000000000000000000e+00 +3.251999999999999937e-09 0.000000000000000000e+00 +3.252500000000000090e-09 0.000000000000000000e+00 +3.252999999999999830e-09 0.000000000000000000e+00 +3.253499999999999984e-09 0.000000000000000000e+00 +3.254000000000000137e-09 0.000000000000000000e+00 +3.254499999999999877e-09 0.000000000000000000e+00 +3.255000000000000030e-09 0.000000000000000000e+00 +3.255499999999999770e-09 0.000000000000000000e+00 +3.255999999999999923e-09 0.000000000000000000e+00 +3.256500000000000077e-09 0.000000000000000000e+00 +3.256999999999999816e-09 0.000000000000000000e+00 +3.257499999999999970e-09 0.000000000000000000e+00 +3.258000000000000123e-09 0.000000000000000000e+00 +3.258499999999999863e-09 0.000000000000000000e+00 +3.259000000000000016e-09 0.000000000000000000e+00 +3.259499999999999756e-09 0.000000000000000000e+00 +3.259999999999999909e-09 0.000000000000000000e+00 +3.260500000000000063e-09 0.000000000000000000e+00 +3.260999999999999803e-09 0.000000000000000000e+00 +3.261499999999999956e-09 0.000000000000000000e+00 +3.262000000000000109e-09 0.000000000000000000e+00 +3.262499999999999849e-09 0.000000000000000000e+00 +3.263000000000000002e-09 0.000000000000000000e+00 +3.263499999999999742e-09 0.000000000000000000e+00 +3.263999999999999896e-09 0.000000000000000000e+00 +3.264500000000000049e-09 0.000000000000000000e+00 +3.264999999999999789e-09 0.000000000000000000e+00 +3.265499999999999942e-09 0.000000000000000000e+00 +3.266000000000000095e-09 0.000000000000000000e+00 +3.266499999999999835e-09 0.000000000000000000e+00 +3.266999999999999989e-09 0.000000000000000000e+00 +3.267499999999999728e-09 0.000000000000000000e+00 +3.267999999999999882e-09 0.000000000000000000e+00 +3.268500000000000035e-09 0.000000000000000000e+00 +3.268999999999999775e-09 0.000000000000000000e+00 +3.269499999999999928e-09 0.000000000000000000e+00 +3.270000000000000082e-09 0.000000000000000000e+00 +3.270499999999999821e-09 0.000000000000000000e+00 +3.270999999999999975e-09 0.000000000000000000e+00 +3.271500000000000128e-09 0.000000000000000000e+00 +3.271999999999999868e-09 0.000000000000000000e+00 +3.272500000000000021e-09 0.000000000000000000e+00 +3.272999999999999761e-09 0.000000000000000000e+00 +3.273499999999999914e-09 0.000000000000000000e+00 +3.274000000000000068e-09 0.000000000000000000e+00 +3.274499999999999808e-09 0.000000000000000000e+00 +3.274999999999999961e-09 0.000000000000000000e+00 +3.275500000000000114e-09 0.000000000000000000e+00 +3.275999999999999854e-09 0.000000000000000000e+00 +3.276500000000000008e-09 0.000000000000000000e+00 +3.276999999999999747e-09 0.000000000000000000e+00 +3.277499999999999901e-09 0.000000000000000000e+00 +3.278000000000000054e-09 0.000000000000000000e+00 +3.278499999999999794e-09 0.000000000000000000e+00 +3.278999999999999947e-09 0.000000000000000000e+00 +3.279500000000000101e-09 0.000000000000000000e+00 +3.279999999999999840e-09 0.000000000000000000e+00 +3.280499999999999994e-09 0.000000000000000000e+00 +3.280999999999999733e-09 0.000000000000000000e+00 +3.281499999999999887e-09 0.000000000000000000e+00 +3.282000000000000040e-09 0.000000000000000000e+00 +3.282499999999999780e-09 0.000000000000000000e+00 +3.282999999999999933e-09 0.000000000000000000e+00 +3.283500000000000087e-09 0.000000000000000000e+00 +3.283999999999999827e-09 0.000000000000000000e+00 +3.284499999999999980e-09 0.000000000000000000e+00 +3.285000000000000133e-09 0.000000000000000000e+00 +3.285499999999999873e-09 0.000000000000000000e+00 +3.286000000000000026e-09 0.000000000000000000e+00 +3.286499999999999766e-09 0.000000000000000000e+00 +3.286999999999999920e-09 0.000000000000000000e+00 +3.287500000000000073e-09 0.000000000000000000e+00 +3.287999999999999813e-09 0.000000000000000000e+00 +3.288499999999999966e-09 0.000000000000000000e+00 +3.289000000000000119e-09 0.000000000000000000e+00 +3.289499999999999859e-09 0.000000000000000000e+00 +3.290000000000000013e-09 0.000000000000000000e+00 +3.290499999999999752e-09 0.000000000000000000e+00 +3.290999999999999906e-09 0.000000000000000000e+00 +3.291500000000000059e-09 0.000000000000000000e+00 +3.291999999999999799e-09 0.000000000000000000e+00 +3.292499999999999952e-09 0.000000000000000000e+00 +3.293000000000000106e-09 0.000000000000000000e+00 +3.293499999999999845e-09 0.000000000000000000e+00 +3.293999999999999999e-09 0.000000000000000000e+00 +3.294499999999999739e-09 0.000000000000000000e+00 +3.294999999999999892e-09 0.000000000000000000e+00 +3.295500000000000045e-09 0.000000000000000000e+00 +3.295999999999999785e-09 0.000000000000000000e+00 +3.296499999999999938e-09 0.000000000000000000e+00 +3.297000000000000092e-09 0.000000000000000000e+00 +3.297499999999999832e-09 0.000000000000000000e+00 +3.297999999999999985e-09 0.000000000000000000e+00 +3.298500000000000138e-09 0.000000000000000000e+00 +3.298999999999999878e-09 0.000000000000000000e+00 +3.299500000000000031e-09 0.000000000000000000e+00 +3.299999999999999771e-09 0.000000000000000000e+00 +3.300499999999999925e-09 0.000000000000000000e+00 +3.301000000000000078e-09 0.000000000000000000e+00 +3.301499999999999818e-09 0.000000000000000000e+00 +3.301999999999999971e-09 0.000000000000000000e+00 +3.302500000000000125e-09 0.000000000000000000e+00 +3.302999999999999864e-09 0.000000000000000000e+00 +3.303500000000000018e-09 0.000000000000000000e+00 +3.303999999999999757e-09 0.000000000000000000e+00 +3.304499999999999911e-09 0.000000000000000000e+00 +3.305000000000000064e-09 0.000000000000000000e+00 +3.305499999999999804e-09 0.000000000000000000e+00 +3.305999999999999957e-09 0.000000000000000000e+00 +3.306500000000000111e-09 0.000000000000000000e+00 +3.306999999999999850e-09 0.000000000000000000e+00 +3.307500000000000004e-09 0.000000000000000000e+00 +3.307999999999999744e-09 0.000000000000000000e+00 +3.308499999999999897e-09 0.000000000000000000e+00 +3.309000000000000050e-09 0.000000000000000000e+00 +3.309499999999999790e-09 0.000000000000000000e+00 +3.309999999999999944e-09 0.000000000000000000e+00 +3.310500000000000097e-09 0.000000000000000000e+00 +3.310999999999999837e-09 0.000000000000000000e+00 +3.311499999999999990e-09 0.000000000000000000e+00 +3.311999999999999730e-09 0.000000000000000000e+00 +3.312499999999999883e-09 0.000000000000000000e+00 +3.313000000000000037e-09 0.000000000000000000e+00 +3.313499999999999776e-09 0.000000000000000000e+00 +3.313999999999999930e-09 0.000000000000000000e+00 +3.314500000000000083e-09 0.000000000000000000e+00 +3.314999999999999823e-09 0.000000000000000000e+00 +3.315499999999999976e-09 0.000000000000000000e+00 +3.316000000000000130e-09 0.000000000000000000e+00 +3.316499999999999869e-09 0.000000000000000000e+00 +3.317000000000000023e-09 0.000000000000000000e+00 +3.317499999999999763e-09 0.000000000000000000e+00 +3.317999999999999916e-09 0.000000000000000000e+00 +3.318500000000000069e-09 0.000000000000000000e+00 +3.318999999999999809e-09 0.000000000000000000e+00 +3.319499999999999962e-09 0.000000000000000000e+00 +3.320000000000000116e-09 0.000000000000000000e+00 +3.320499999999999856e-09 0.000000000000000000e+00 +3.321000000000000009e-09 0.000000000000000000e+00 +3.321499999999999749e-09 0.000000000000000000e+00 +3.321999999999999902e-09 0.000000000000000000e+00 +3.322500000000000055e-09 0.000000000000000000e+00 +3.322999999999999795e-09 0.000000000000000000e+00 +3.323499999999999949e-09 0.000000000000000000e+00 +3.324000000000000102e-09 0.000000000000000000e+00 +3.324499999999999842e-09 0.000000000000000000e+00 +3.324999999999999995e-09 0.000000000000000000e+00 +3.325499999999999735e-09 0.000000000000000000e+00 +3.325999999999999888e-09 0.000000000000000000e+00 +3.326500000000000042e-09 0.000000000000000000e+00 +3.326999999999999781e-09 0.000000000000000000e+00 +3.327499999999999935e-09 0.000000000000000000e+00 +3.328000000000000088e-09 0.000000000000000000e+00 +3.328499999999999828e-09 0.000000000000000000e+00 +3.328999999999999981e-09 0.000000000000000000e+00 +3.329500000000000135e-09 0.000000000000000000e+00 +3.329999999999999874e-09 0.000000000000000000e+00 +3.330500000000000028e-09 0.000000000000000000e+00 +3.330999999999999768e-09 0.000000000000000000e+00 +3.331499999999999921e-09 0.000000000000000000e+00 +3.332000000000000074e-09 0.000000000000000000e+00 +3.332499999999999814e-09 0.000000000000000000e+00 +3.332999999999999967e-09 0.000000000000000000e+00 +3.333500000000000121e-09 0.000000000000000000e+00 +3.333999999999999861e-09 0.000000000000000000e+00 +3.334500000000000014e-09 0.000000000000000000e+00 +3.334999999999999754e-09 0.000000000000000000e+00 +3.335499999999999907e-09 0.000000000000000000e+00 +3.336000000000000061e-09 0.000000000000000000e+00 +3.336499999999999800e-09 0.000000000000000000e+00 +3.336999999999999954e-09 0.000000000000000000e+00 +3.337500000000000107e-09 0.000000000000000000e+00 +3.337999999999999847e-09 0.000000000000000000e+00 +3.338500000000000000e-09 0.000000000000000000e+00 +3.338999999999999740e-09 0.000000000000000000e+00 +3.339499999999999893e-09 0.000000000000000000e+00 +3.340000000000000047e-09 0.000000000000000000e+00 +3.340499999999999786e-09 0.000000000000000000e+00 +3.340999999999999940e-09 0.000000000000000000e+00 +3.341500000000000093e-09 0.000000000000000000e+00 +3.341999999999999833e-09 0.000000000000000000e+00 +3.342499999999999986e-09 0.000000000000000000e+00 +3.342999999999999726e-09 0.000000000000000000e+00 +3.343499999999999880e-09 0.000000000000000000e+00 +3.344000000000000033e-09 0.000000000000000000e+00 +3.344499999999999773e-09 0.000000000000000000e+00 +3.344999999999999926e-09 0.000000000000000000e+00 +3.345500000000000079e-09 0.000000000000000000e+00 +3.345999999999999819e-09 0.000000000000000000e+00 +3.346499999999999973e-09 0.000000000000000000e+00 +3.347000000000000126e-09 0.000000000000000000e+00 +3.347499999999999866e-09 0.000000000000000000e+00 +3.348000000000000019e-09 0.000000000000000000e+00 +3.348499999999999759e-09 0.000000000000000000e+00 +3.348999999999999912e-09 0.000000000000000000e+00 +3.349500000000000066e-09 0.000000000000000000e+00 +3.349999999999999805e-09 0.000000000000000000e+00 +3.350499999999999959e-09 0.000000000000000000e+00 +3.351000000000000112e-09 0.000000000000000000e+00 +3.351499999999999852e-09 0.000000000000000000e+00 +3.352000000000000005e-09 0.000000000000000000e+00 +3.352499999999999745e-09 0.000000000000000000e+00 +3.352999999999999898e-09 0.000000000000000000e+00 +3.353500000000000052e-09 0.000000000000000000e+00 +3.353999999999999792e-09 0.000000000000000000e+00 +3.354499999999999945e-09 0.000000000000000000e+00 +3.355000000000000098e-09 0.000000000000000000e+00 +3.355499999999999838e-09 0.000000000000000000e+00 +3.355999999999999991e-09 0.000000000000000000e+00 +3.356499999999999731e-09 0.000000000000000000e+00 +3.356999999999999885e-09 0.000000000000000000e+00 +3.357500000000000038e-09 0.000000000000000000e+00 +3.357999999999999778e-09 0.000000000000000000e+00 +3.358499999999999931e-09 0.000000000000000000e+00 +3.359000000000000085e-09 0.000000000000000000e+00 +3.359499999999999824e-09 0.000000000000000000e+00 +3.359999999999999978e-09 0.000000000000000000e+00 +3.360500000000000131e-09 0.000000000000000000e+00 +3.360999999999999871e-09 0.000000000000000000e+00 +3.361500000000000024e-09 0.000000000000000000e+00 +3.361999999999999764e-09 0.000000000000000000e+00 +3.362499999999999917e-09 0.000000000000000000e+00 +3.363000000000000071e-09 0.000000000000000000e+00 +3.363499999999999810e-09 0.000000000000000000e+00 +3.363999999999999964e-09 0.000000000000000000e+00 +3.364500000000000117e-09 0.000000000000000000e+00 +3.364999999999999857e-09 0.000000000000000000e+00 +3.365500000000000010e-09 0.000000000000000000e+00 +3.365999999999999750e-09 0.000000000000000000e+00 +3.366499999999999904e-09 0.000000000000000000e+00 +3.367000000000000057e-09 0.000000000000000000e+00 +3.367499999999999797e-09 0.000000000000000000e+00 +3.367999999999999950e-09 0.000000000000000000e+00 +3.368500000000000103e-09 0.000000000000000000e+00 +3.368999999999999843e-09 0.000000000000000000e+00 +3.369499999999999997e-09 0.000000000000000000e+00 +3.369999999999999736e-09 0.000000000000000000e+00 +3.370499999999999890e-09 0.000000000000000000e+00 +3.371000000000000043e-09 0.000000000000000000e+00 +3.371499999999999783e-09 0.000000000000000000e+00 +3.371999999999999936e-09 0.000000000000000000e+00 +3.372500000000000090e-09 0.000000000000000000e+00 +3.372999999999999829e-09 0.000000000000000000e+00 +3.373499999999999983e-09 0.000000000000000000e+00 +3.374000000000000136e-09 0.000000000000000000e+00 +3.374499999999999876e-09 0.000000000000000000e+00 +3.375000000000000029e-09 0.000000000000000000e+00 +3.375499999999999769e-09 0.000000000000000000e+00 +3.375999999999999922e-09 0.000000000000000000e+00 +3.376500000000000076e-09 0.000000000000000000e+00 +3.376999999999999816e-09 0.000000000000000000e+00 +3.377499999999999969e-09 0.000000000000000000e+00 +3.378000000000000122e-09 0.000000000000000000e+00 +3.378499999999999862e-09 0.000000000000000000e+00 +3.379000000000000015e-09 0.000000000000000000e+00 +3.379499999999999755e-09 0.000000000000000000e+00 +3.379999999999999909e-09 0.000000000000000000e+00 +3.380500000000000062e-09 0.000000000000000000e+00 +3.380999999999999802e-09 0.000000000000000000e+00 +3.381499999999999955e-09 0.000000000000000000e+00 +3.382000000000000108e-09 0.000000000000000000e+00 +3.382499999999999848e-09 0.000000000000000000e+00 +3.383000000000000002e-09 0.000000000000000000e+00 +3.383499999999999741e-09 0.000000000000000000e+00 +3.383999999999999895e-09 0.000000000000000000e+00 +3.384500000000000048e-09 0.000000000000000000e+00 +3.384999999999999788e-09 0.000000000000000000e+00 +3.385499999999999941e-09 0.000000000000000000e+00 +3.386000000000000095e-09 0.000000000000000000e+00 +3.386499999999999834e-09 0.000000000000000000e+00 +3.386999999999999988e-09 0.000000000000000000e+00 +3.387499999999999728e-09 0.000000000000000000e+00 +3.387999999999999881e-09 0.000000000000000000e+00 +3.388500000000000034e-09 0.000000000000000000e+00 +3.388999999999999774e-09 0.000000000000000000e+00 +3.389499999999999927e-09 0.000000000000000000e+00 +3.390000000000000081e-09 0.000000000000000000e+00 +3.390499999999999821e-09 0.000000000000000000e+00 +3.390999999999999974e-09 0.000000000000000000e+00 +3.391500000000000127e-09 0.000000000000000000e+00 +3.391999999999999867e-09 0.000000000000000000e+00 +3.392500000000000021e-09 0.000000000000000000e+00 +3.392999999999999760e-09 0.000000000000000000e+00 +3.393499999999999914e-09 0.000000000000000000e+00 +3.394000000000000067e-09 0.000000000000000000e+00 +3.394499999999999807e-09 0.000000000000000000e+00 +3.394999999999999960e-09 0.000000000000000000e+00 +3.395500000000000114e-09 0.000000000000000000e+00 +3.395999999999999853e-09 0.000000000000000000e+00 +3.396500000000000007e-09 0.000000000000000000e+00 +3.396999999999999746e-09 0.000000000000000000e+00 +3.397499999999999900e-09 0.000000000000000000e+00 +3.398000000000000053e-09 0.000000000000000000e+00 +3.398499999999999793e-09 0.000000000000000000e+00 +3.398999999999999946e-09 0.000000000000000000e+00 +3.399500000000000100e-09 0.000000000000000000e+00 +3.399999999999999840e-09 0.000000000000000000e+00 +3.400499999999999993e-09 0.000000000000000000e+00 +3.400999999999999733e-09 0.000000000000000000e+00 +3.401499999999999886e-09 0.000000000000000000e+00 +3.402000000000000039e-09 0.000000000000000000e+00 +3.402499999999999779e-09 0.000000000000000000e+00 +3.402999999999999933e-09 0.000000000000000000e+00 +3.403500000000000086e-09 0.000000000000000000e+00 +3.403999999999999826e-09 0.000000000000000000e+00 +3.404499999999999979e-09 0.000000000000000000e+00 +3.405000000000000132e-09 0.000000000000000000e+00 +3.405499999999999872e-09 0.000000000000000000e+00 +3.406000000000000026e-09 0.000000000000000000e+00 +3.406499999999999765e-09 0.000000000000000000e+00 +3.406999999999999919e-09 0.000000000000000000e+00 +3.407500000000000072e-09 0.000000000000000000e+00 +3.407999999999999812e-09 0.000000000000000000e+00 +3.408499999999999965e-09 0.000000000000000000e+00 +3.409000000000000119e-09 0.000000000000000000e+00 +3.409499999999999858e-09 0.000000000000000000e+00 +3.410000000000000012e-09 0.000000000000000000e+00 +3.410499999999999752e-09 0.000000000000000000e+00 +3.410999999999999905e-09 0.000000000000000000e+00 +3.411500000000000058e-09 0.000000000000000000e+00 +3.411999999999999798e-09 0.000000000000000000e+00 +3.412499999999999951e-09 0.000000000000000000e+00 +3.413000000000000105e-09 0.000000000000000000e+00 +3.413499999999999845e-09 0.000000000000000000e+00 +3.413999999999999998e-09 0.000000000000000000e+00 +3.414499999999999738e-09 0.000000000000000000e+00 +3.414999999999999891e-09 0.000000000000000000e+00 +3.415500000000000044e-09 0.000000000000000000e+00 +3.415999999999999784e-09 0.000000000000000000e+00 +3.416499999999999938e-09 0.000000000000000000e+00 +3.417000000000000091e-09 0.000000000000000000e+00 +3.417499999999999831e-09 0.000000000000000000e+00 +3.417999999999999984e-09 0.000000000000000000e+00 +3.418500000000000138e-09 0.000000000000000000e+00 +3.418999999999999877e-09 0.000000000000000000e+00 +3.419500000000000031e-09 0.000000000000000000e+00 +3.419999999999999770e-09 0.000000000000000000e+00 +3.420499999999999924e-09 0.000000000000000000e+00 +3.421000000000000077e-09 0.000000000000000000e+00 +3.421499999999999817e-09 0.000000000000000000e+00 +3.421999999999999970e-09 0.000000000000000000e+00 +3.422500000000000124e-09 0.000000000000000000e+00 +3.422999999999999863e-09 0.000000000000000000e+00 +3.423500000000000017e-09 0.000000000000000000e+00 +3.423999999999999757e-09 0.000000000000000000e+00 +3.424499999999999910e-09 0.000000000000000000e+00 +3.425000000000000063e-09 0.000000000000000000e+00 +3.425499999999999803e-09 0.000000000000000000e+00 +3.425999999999999957e-09 0.000000000000000000e+00 +3.426500000000000110e-09 0.000000000000000000e+00 +3.426999999999999850e-09 0.000000000000000000e+00 +3.427500000000000003e-09 0.000000000000000000e+00 +3.427999999999999743e-09 0.000000000000000000e+00 +3.428499999999999896e-09 0.000000000000000000e+00 +3.429000000000000050e-09 0.000000000000000000e+00 +3.429499999999999789e-09 0.000000000000000000e+00 +3.429999999999999943e-09 0.000000000000000000e+00 +3.430500000000000096e-09 0.000000000000000000e+00 +3.430999999999999836e-09 0.000000000000000000e+00 +3.431499999999999989e-09 0.000000000000000000e+00 +3.431999999999999729e-09 0.000000000000000000e+00 +3.432499999999999882e-09 0.000000000000000000e+00 +3.433000000000000036e-09 0.000000000000000000e+00 +3.433499999999999776e-09 0.000000000000000000e+00 +3.433999999999999929e-09 0.000000000000000000e+00 +3.434500000000000082e-09 0.000000000000000000e+00 +3.434999999999999822e-09 0.000000000000000000e+00 +3.435499999999999975e-09 0.000000000000000000e+00 +3.436000000000000129e-09 0.000000000000000000e+00 +3.436499999999999869e-09 0.000000000000000000e+00 +3.437000000000000022e-09 0.000000000000000000e+00 +3.437499999999999762e-09 0.000000000000000000e+00 +3.437999999999999915e-09 0.000000000000000000e+00 +3.438500000000000068e-09 0.000000000000000000e+00 +3.438999999999999808e-09 0.000000000000000000e+00 +3.439499999999999962e-09 0.000000000000000000e+00 +3.440000000000000115e-09 0.000000000000000000e+00 +3.440499999999999855e-09 0.000000000000000000e+00 +3.441000000000000008e-09 0.000000000000000000e+00 +3.441499999999999748e-09 0.000000000000000000e+00 +3.441999999999999901e-09 0.000000000000000000e+00 +3.442500000000000055e-09 0.000000000000000000e+00 +3.442999999999999794e-09 0.000000000000000000e+00 +3.443499999999999948e-09 0.000000000000000000e+00 +3.444000000000000101e-09 0.000000000000000000e+00 +3.444499999999999841e-09 0.000000000000000000e+00 +3.444999999999999994e-09 0.000000000000000000e+00 +3.445499999999999734e-09 0.000000000000000000e+00 +3.445999999999999887e-09 0.000000000000000000e+00 +3.446500000000000041e-09 0.000000000000000000e+00 +3.446999999999999781e-09 0.000000000000000000e+00 +3.447499999999999934e-09 0.000000000000000000e+00 +3.448000000000000087e-09 0.000000000000000000e+00 +3.448499999999999827e-09 0.000000000000000000e+00 +3.448999999999999981e-09 0.000000000000000000e+00 +3.449500000000000134e-09 0.000000000000000000e+00 +3.449999999999999874e-09 0.000000000000000000e+00 +3.450500000000000027e-09 0.000000000000000000e+00 +3.450999999999999767e-09 0.000000000000000000e+00 +3.451499999999999920e-09 0.000000000000000000e+00 +3.452000000000000074e-09 0.000000000000000000e+00 +3.452499999999999813e-09 0.000000000000000000e+00 +3.452999999999999967e-09 0.000000000000000000e+00 +3.453500000000000120e-09 0.000000000000000000e+00 +3.453999999999999860e-09 0.000000000000000000e+00 +3.454500000000000013e-09 0.000000000000000000e+00 +3.454999999999999753e-09 0.000000000000000000e+00 +3.455499999999999906e-09 0.000000000000000000e+00 +3.456000000000000060e-09 0.000000000000000000e+00 +3.456499999999999800e-09 0.000000000000000000e+00 +3.456999999999999953e-09 0.000000000000000000e+00 +3.457500000000000106e-09 0.000000000000000000e+00 +3.457999999999999846e-09 0.000000000000000000e+00 +3.458499999999999999e-09 0.000000000000000000e+00 +3.458999999999999739e-09 0.000000000000000000e+00 +3.459499999999999893e-09 0.000000000000000000e+00 +3.460000000000000046e-09 0.000000000000000000e+00 +3.460499999999999786e-09 0.000000000000000000e+00 +3.460999999999999939e-09 0.000000000000000000e+00 +3.461500000000000092e-09 0.000000000000000000e+00 +3.461999999999999832e-09 0.000000000000000000e+00 +3.462499999999999986e-09 0.000000000000000000e+00 +3.462999999999999725e-09 0.000000000000000000e+00 +3.463499999999999879e-09 0.000000000000000000e+00 +3.464000000000000032e-09 0.000000000000000000e+00 +3.464499999999999772e-09 0.000000000000000000e+00 +3.464999999999999925e-09 0.000000000000000000e+00 +3.465500000000000079e-09 0.000000000000000000e+00 +3.465999999999999818e-09 0.000000000000000000e+00 +3.466499999999999972e-09 0.000000000000000000e+00 +3.467000000000000125e-09 0.000000000000000000e+00 +3.467499999999999865e-09 0.000000000000000000e+00 +3.468000000000000018e-09 0.000000000000000000e+00 +3.468499999999999758e-09 0.000000000000000000e+00 +3.468999999999999911e-09 0.000000000000000000e+00 +3.469500000000000065e-09 0.000000000000000000e+00 +3.469999999999999805e-09 0.000000000000000000e+00 +3.470499999999999958e-09 0.000000000000000000e+00 +3.471000000000000111e-09 0.000000000000000000e+00 +3.471499999999999851e-09 0.000000000000000000e+00 +3.472000000000000004e-09 0.000000000000000000e+00 +3.472499999999999744e-09 0.000000000000000000e+00 +3.472999999999999898e-09 0.000000000000000000e+00 +3.473500000000000051e-09 0.000000000000000000e+00 +3.473999999999999791e-09 0.000000000000000000e+00 +3.474499999999999944e-09 0.000000000000000000e+00 +3.475000000000000098e-09 0.000000000000000000e+00 +3.475499999999999837e-09 0.000000000000000000e+00 +3.475999999999999991e-09 0.000000000000000000e+00 +3.476499999999999730e-09 0.000000000000000000e+00 +3.476999999999999884e-09 0.000000000000000000e+00 +3.477500000000000037e-09 0.000000000000000000e+00 +3.477999999999999777e-09 0.000000000000000000e+00 +3.478499999999999930e-09 0.000000000000000000e+00 +3.479000000000000084e-09 0.000000000000000000e+00 +3.479499999999999823e-09 0.000000000000000000e+00 +3.479999999999999977e-09 0.000000000000000000e+00 +3.480500000000000130e-09 0.000000000000000000e+00 +3.480999999999999870e-09 0.000000000000000000e+00 +3.481500000000000023e-09 0.000000000000000000e+00 +3.481999999999999763e-09 0.000000000000000000e+00 +3.482499999999999917e-09 0.000000000000000000e+00 +3.483000000000000070e-09 0.000000000000000000e+00 +3.483499999999999810e-09 0.000000000000000000e+00 +3.483999999999999963e-09 0.000000000000000000e+00 +3.484500000000000116e-09 0.000000000000000000e+00 +3.484999999999999856e-09 0.000000000000000000e+00 +3.485500000000000010e-09 0.000000000000000000e+00 +3.485999999999999749e-09 0.000000000000000000e+00 +3.486499999999999903e-09 0.000000000000000000e+00 +3.487000000000000056e-09 0.000000000000000000e+00 +3.487499999999999796e-09 0.000000000000000000e+00 +3.487999999999999949e-09 0.000000000000000000e+00 +3.488500000000000103e-09 0.000000000000000000e+00 +3.488999999999999842e-09 0.000000000000000000e+00 +3.489499999999999996e-09 0.000000000000000000e+00 +3.489999999999999736e-09 0.000000000000000000e+00 +3.490499999999999889e-09 0.000000000000000000e+00 +3.491000000000000042e-09 0.000000000000000000e+00 +3.491499999999999782e-09 0.000000000000000000e+00 +3.491999999999999935e-09 0.000000000000000000e+00 +3.492500000000000089e-09 0.000000000000000000e+00 +3.492999999999999829e-09 0.000000000000000000e+00 +3.493499999999999982e-09 0.000000000000000000e+00 +3.494000000000000135e-09 0.000000000000000000e+00 +3.494499999999999875e-09 0.000000000000000000e+00 +3.495000000000000028e-09 0.000000000000000000e+00 +3.495499999999999768e-09 0.000000000000000000e+00 +3.495999999999999922e-09 0.000000000000000000e+00 +3.496500000000000075e-09 0.000000000000000000e+00 +3.496999999999999815e-09 0.000000000000000000e+00 +3.497499999999999968e-09 0.000000000000000000e+00 +3.498000000000000121e-09 0.000000000000000000e+00 +3.498499999999999861e-09 0.000000000000000000e+00 +3.499000000000000015e-09 0.000000000000000000e+00 +3.499499999999999754e-09 0.000000000000000000e+00 +3.499999999999999908e-09 0.000000000000000000e+00 +3.500500000000000061e-09 0.000000000000000000e+00 +3.500999999999999801e-09 0.000000000000000000e+00 +3.501499999999999954e-09 0.000000000000000000e+00 +3.502000000000000108e-09 0.000000000000000000e+00 +3.502499999999999847e-09 0.000000000000000000e+00 +3.503000000000000001e-09 0.000000000000000000e+00 +3.503499999999999741e-09 0.000000000000000000e+00 +3.503999999999999894e-09 0.000000000000000000e+00 +3.504500000000000047e-09 0.000000000000000000e+00 +3.504999999999999787e-09 0.000000000000000000e+00 +3.505499999999999940e-09 0.000000000000000000e+00 +3.506000000000000094e-09 0.000000000000000000e+00 +3.506499999999999834e-09 0.000000000000000000e+00 +3.506999999999999987e-09 0.000000000000000000e+00 +3.507499999999999727e-09 0.000000000000000000e+00 +3.507999999999999880e-09 0.000000000000000000e+00 +3.508500000000000034e-09 0.000000000000000000e+00 +3.508999999999999773e-09 0.000000000000000000e+00 +3.509499999999999927e-09 0.000000000000000000e+00 +3.510000000000000080e-09 0.000000000000000000e+00 +3.510499999999999820e-09 0.000000000000000000e+00 +3.510999999999999973e-09 0.000000000000000000e+00 +3.511500000000000127e-09 0.000000000000000000e+00 +3.511999999999999866e-09 0.000000000000000000e+00 +3.512500000000000020e-09 0.000000000000000000e+00 +3.512999999999999760e-09 0.000000000000000000e+00 +3.513499999999999913e-09 0.000000000000000000e+00 +3.514000000000000066e-09 0.000000000000000000e+00 +3.514499999999999806e-09 0.000000000000000000e+00 +3.514999999999999959e-09 0.000000000000000000e+00 +3.515500000000000113e-09 0.000000000000000000e+00 +3.515999999999999853e-09 0.000000000000000000e+00 +3.516500000000000006e-09 0.000000000000000000e+00 +3.516999999999999746e-09 0.000000000000000000e+00 +3.517499999999999899e-09 0.000000000000000000e+00 +3.518000000000000052e-09 0.000000000000000000e+00 +3.518499999999999792e-09 0.000000000000000000e+00 +3.518999999999999946e-09 0.000000000000000000e+00 +3.519500000000000099e-09 0.000000000000000000e+00 +3.519999999999999839e-09 0.000000000000000000e+00 +3.520499999999999992e-09 0.000000000000000000e+00 +3.520999999999999732e-09 0.000000000000000000e+00 +3.521499999999999885e-09 0.000000000000000000e+00 +3.522000000000000039e-09 0.000000000000000000e+00 +3.522499999999999778e-09 0.000000000000000000e+00 +3.522999999999999932e-09 0.000000000000000000e+00 +3.523500000000000085e-09 0.000000000000000000e+00 +3.523999999999999825e-09 0.000000000000000000e+00 +3.524499999999999978e-09 0.000000000000000000e+00 +3.525000000000000132e-09 0.000000000000000000e+00 +3.525499999999999871e-09 0.000000000000000000e+00 +3.526000000000000025e-09 0.000000000000000000e+00 +3.526499999999999765e-09 0.000000000000000000e+00 +3.526999999999999918e-09 0.000000000000000000e+00 +3.527500000000000071e-09 0.000000000000000000e+00 +3.527999999999999811e-09 0.000000000000000000e+00 +3.528499999999999964e-09 0.000000000000000000e+00 +3.529000000000000118e-09 0.000000000000000000e+00 +3.529499999999999858e-09 0.000000000000000000e+00 +3.530000000000000011e-09 0.000000000000000000e+00 +3.530499999999999751e-09 0.000000000000000000e+00 +3.530999999999999904e-09 0.000000000000000000e+00 +3.531500000000000058e-09 0.000000000000000000e+00 +3.531999999999999797e-09 0.000000000000000000e+00 +3.532499999999999951e-09 0.000000000000000000e+00 +3.533000000000000104e-09 0.000000000000000000e+00 +3.533499999999999844e-09 0.000000000000000000e+00 +3.533999999999999997e-09 0.000000000000000000e+00 +3.534499999999999737e-09 0.000000000000000000e+00 +3.534999999999999890e-09 0.000000000000000000e+00 +3.535500000000000044e-09 0.000000000000000000e+00 +3.535999999999999783e-09 0.000000000000000000e+00 +3.536499999999999937e-09 0.000000000000000000e+00 +3.537000000000000090e-09 0.000000000000000000e+00 +3.537499999999999830e-09 0.000000000000000000e+00 +3.537999999999999983e-09 0.000000000000000000e+00 +3.538499999999999723e-09 0.000000000000000000e+00 +3.538999999999999877e-09 0.000000000000000000e+00 +3.539500000000000030e-09 0.000000000000000000e+00 +3.539999999999999770e-09 0.000000000000000000e+00 +3.540499999999999923e-09 0.000000000000000000e+00 +3.541000000000000076e-09 0.000000000000000000e+00 +3.541499999999999816e-09 0.000000000000000000e+00 +3.541999999999999970e-09 0.000000000000000000e+00 +3.542500000000000123e-09 0.000000000000000000e+00 +3.542999999999999863e-09 0.000000000000000000e+00 +3.543500000000000016e-09 0.000000000000000000e+00 +3.543999999999999756e-09 0.000000000000000000e+00 +3.544499999999999909e-09 0.000000000000000000e+00 +3.545000000000000063e-09 0.000000000000000000e+00 +3.545499999999999802e-09 0.000000000000000000e+00 +3.545999999999999956e-09 0.000000000000000000e+00 +3.546500000000000109e-09 0.000000000000000000e+00 +3.546999999999999849e-09 0.000000000000000000e+00 +3.547500000000000002e-09 0.000000000000000000e+00 +3.547999999999999742e-09 0.000000000000000000e+00 +3.548499999999999895e-09 0.000000000000000000e+00 +3.549000000000000049e-09 0.000000000000000000e+00 +3.549499999999999789e-09 0.000000000000000000e+00 +3.549999999999999942e-09 0.000000000000000000e+00 +3.550500000000000095e-09 0.000000000000000000e+00 +3.550999999999999835e-09 0.000000000000000000e+00 +3.551499999999999988e-09 0.000000000000000000e+00 +3.551999999999999728e-09 0.000000000000000000e+00 +3.552499999999999882e-09 0.000000000000000000e+00 +3.553000000000000035e-09 0.000000000000000000e+00 +3.553499999999999775e-09 0.000000000000000000e+00 +3.553999999999999928e-09 0.000000000000000000e+00 +3.554500000000000081e-09 0.000000000000000000e+00 +3.554999999999999821e-09 0.000000000000000000e+00 +3.555499999999999975e-09 0.000000000000000000e+00 +3.556000000000000128e-09 0.000000000000000000e+00 +3.556499999999999868e-09 0.000000000000000000e+00 +3.557000000000000021e-09 0.000000000000000000e+00 +3.557499999999999761e-09 0.000000000000000000e+00 +3.557999999999999914e-09 0.000000000000000000e+00 +3.558500000000000068e-09 0.000000000000000000e+00 +3.558999999999999807e-09 0.000000000000000000e+00 +3.559499999999999961e-09 0.000000000000000000e+00 +3.560000000000000114e-09 0.000000000000000000e+00 +3.560499999999999854e-09 0.000000000000000000e+00 +3.561000000000000007e-09 0.000000000000000000e+00 +3.561499999999999747e-09 0.000000000000000000e+00 +3.561999999999999900e-09 0.000000000000000000e+00 +3.562500000000000054e-09 0.000000000000000000e+00 +3.562999999999999794e-09 0.000000000000000000e+00 +3.563499999999999947e-09 0.000000000000000000e+00 +3.564000000000000100e-09 0.000000000000000000e+00 +3.564499999999999840e-09 0.000000000000000000e+00 +3.564999999999999994e-09 0.000000000000000000e+00 +3.565499999999999733e-09 0.000000000000000000e+00 +3.565999999999999887e-09 0.000000000000000000e+00 +3.566500000000000040e-09 0.000000000000000000e+00 +3.566999999999999780e-09 0.000000000000000000e+00 +3.567499999999999933e-09 0.000000000000000000e+00 +3.568000000000000087e-09 0.000000000000000000e+00 +3.568499999999999826e-09 0.000000000000000000e+00 +3.568999999999999980e-09 0.000000000000000000e+00 +3.569500000000000133e-09 0.000000000000000000e+00 +3.569999999999999873e-09 0.000000000000000000e+00 +3.570500000000000026e-09 0.000000000000000000e+00 +3.570999999999999766e-09 0.000000000000000000e+00 +3.571499999999999919e-09 0.000000000000000000e+00 +3.572000000000000073e-09 0.000000000000000000e+00 +3.572499999999999813e-09 0.000000000000000000e+00 +3.572999999999999966e-09 0.000000000000000000e+00 +3.573500000000000119e-09 0.000000000000000000e+00 +3.573999999999999859e-09 0.000000000000000000e+00 +3.574500000000000012e-09 0.000000000000000000e+00 +3.574999999999999752e-09 0.000000000000000000e+00 +3.575499999999999906e-09 0.000000000000000000e+00 +3.576000000000000059e-09 0.000000000000000000e+00 +3.576499999999999799e-09 0.000000000000000000e+00 +3.576999999999999952e-09 0.000000000000000000e+00 +3.577500000000000105e-09 0.000000000000000000e+00 +3.577999999999999845e-09 0.000000000000000000e+00 +3.578499999999999999e-09 0.000000000000000000e+00 +3.578999999999999738e-09 0.000000000000000000e+00 +3.579499999999999892e-09 0.000000000000000000e+00 +3.580000000000000045e-09 0.000000000000000000e+00 +3.580499999999999785e-09 0.000000000000000000e+00 +3.580999999999999938e-09 0.000000000000000000e+00 +3.581500000000000092e-09 0.000000000000000000e+00 +3.581999999999999831e-09 0.000000000000000000e+00 +3.582499999999999985e-09 0.000000000000000000e+00 +3.582999999999999725e-09 0.000000000000000000e+00 +3.583499999999999878e-09 0.000000000000000000e+00 +3.584000000000000031e-09 0.000000000000000000e+00 +3.584499999999999771e-09 0.000000000000000000e+00 +3.584999999999999924e-09 0.000000000000000000e+00 +3.585500000000000078e-09 0.000000000000000000e+00 +3.585999999999999818e-09 0.000000000000000000e+00 +3.586499999999999971e-09 0.000000000000000000e+00 +3.587000000000000124e-09 0.000000000000000000e+00 +3.587499999999999864e-09 0.000000000000000000e+00 +3.588000000000000017e-09 0.000000000000000000e+00 +3.588499999999999757e-09 0.000000000000000000e+00 +3.588999999999999911e-09 0.000000000000000000e+00 +3.589500000000000064e-09 0.000000000000000000e+00 +3.589999999999999804e-09 0.000000000000000000e+00 +3.590499999999999957e-09 0.000000000000000000e+00 +3.591000000000000111e-09 0.000000000000000000e+00 +3.591499999999999850e-09 0.000000000000000000e+00 +3.592000000000000004e-09 0.000000000000000000e+00 +3.592499999999999743e-09 0.000000000000000000e+00 +3.592999999999999897e-09 0.000000000000000000e+00 +3.593500000000000050e-09 0.000000000000000000e+00 +3.593999999999999790e-09 0.000000000000000000e+00 +3.594499999999999943e-09 0.000000000000000000e+00 +3.595000000000000097e-09 0.000000000000000000e+00 +3.595499999999999837e-09 0.000000000000000000e+00 +3.595999999999999990e-09 0.000000000000000000e+00 +3.596499999999999730e-09 0.000000000000000000e+00 +3.596999999999999883e-09 0.000000000000000000e+00 +3.597500000000000036e-09 0.000000000000000000e+00 +3.597999999999999776e-09 0.000000000000000000e+00 +3.598499999999999930e-09 0.000000000000000000e+00 +3.599000000000000083e-09 0.000000000000000000e+00 +3.599499999999999823e-09 0.000000000000000000e+00 +3.599999999999999976e-09 0.000000000000000000e+00 +3.600500000000000129e-09 0.000000000000000000e+00 +3.600999999999999869e-09 0.000000000000000000e+00 +3.601500000000000023e-09 0.000000000000000000e+00 +3.601999999999999762e-09 0.000000000000000000e+00 +3.602499999999999916e-09 0.000000000000000000e+00 +3.603000000000000069e-09 0.000000000000000000e+00 +3.603499999999999809e-09 0.000000000000000000e+00 +3.603999999999999962e-09 0.000000000000000000e+00 +3.604500000000000116e-09 0.000000000000000000e+00 +3.604999999999999855e-09 0.000000000000000000e+00 +3.605500000000000009e-09 0.000000000000000000e+00 +3.605999999999999749e-09 0.000000000000000000e+00 +3.606499999999999902e-09 0.000000000000000000e+00 +3.607000000000000055e-09 0.000000000000000000e+00 +3.607499999999999795e-09 0.000000000000000000e+00 +3.607999999999999948e-09 0.000000000000000000e+00 +3.608500000000000102e-09 0.000000000000000000e+00 +3.608999999999999842e-09 0.000000000000000000e+00 +3.609499999999999995e-09 0.000000000000000000e+00 +3.609999999999999735e-09 0.000000000000000000e+00 +3.610499999999999888e-09 0.000000000000000000e+00 +3.611000000000000041e-09 0.000000000000000000e+00 +3.611499999999999781e-09 0.000000000000000000e+00 +3.611999999999999935e-09 0.000000000000000000e+00 +3.612500000000000088e-09 0.000000000000000000e+00 +3.612999999999999828e-09 0.000000000000000000e+00 +3.613499999999999981e-09 0.000000000000000000e+00 +3.613999999999999721e-09 0.000000000000000000e+00 +3.614499999999999874e-09 0.000000000000000000e+00 +3.615000000000000028e-09 0.000000000000000000e+00 +3.615499999999999767e-09 0.000000000000000000e+00 +3.615999999999999921e-09 0.000000000000000000e+00 +3.616500000000000074e-09 0.000000000000000000e+00 +3.616999999999999814e-09 0.000000000000000000e+00 +3.617499999999999967e-09 0.000000000000000000e+00 +3.618000000000000121e-09 0.000000000000000000e+00 +3.618499999999999860e-09 0.000000000000000000e+00 +3.619000000000000014e-09 0.000000000000000000e+00 +3.619499999999999754e-09 0.000000000000000000e+00 +3.619999999999999907e-09 0.000000000000000000e+00 +3.620500000000000060e-09 0.000000000000000000e+00 +3.620999999999999800e-09 0.000000000000000000e+00 +3.621499999999999954e-09 0.000000000000000000e+00 +3.622000000000000107e-09 0.000000000000000000e+00 +3.622499999999999847e-09 0.000000000000000000e+00 +3.623000000000000000e-09 0.000000000000000000e+00 +3.623499999999999740e-09 0.000000000000000000e+00 +3.623999999999999893e-09 0.000000000000000000e+00 +3.624500000000000047e-09 0.000000000000000000e+00 +3.624999999999999786e-09 0.000000000000000000e+00 +3.625499999999999940e-09 0.000000000000000000e+00 +3.626000000000000093e-09 0.000000000000000000e+00 +3.626499999999999833e-09 0.000000000000000000e+00 +3.626999999999999986e-09 0.000000000000000000e+00 +3.627499999999999726e-09 0.000000000000000000e+00 +3.627999999999999879e-09 0.000000000000000000e+00 +3.628500000000000033e-09 0.000000000000000000e+00 +3.628999999999999773e-09 0.000000000000000000e+00 +3.629499999999999926e-09 0.000000000000000000e+00 +3.630000000000000079e-09 0.000000000000000000e+00 +3.630499999999999819e-09 0.000000000000000000e+00 +3.630999999999999972e-09 0.000000000000000000e+00 +3.631500000000000126e-09 0.000000000000000000e+00 +3.631999999999999866e-09 0.000000000000000000e+00 +3.632500000000000019e-09 0.000000000000000000e+00 +3.632999999999999759e-09 0.000000000000000000e+00 +3.633499999999999912e-09 0.000000000000000000e+00 +3.634000000000000065e-09 0.000000000000000000e+00 +3.634499999999999805e-09 0.000000000000000000e+00 +3.634999999999999959e-09 0.000000000000000000e+00 +3.635500000000000112e-09 0.000000000000000000e+00 +3.635999999999999852e-09 0.000000000000000000e+00 +3.636500000000000005e-09 0.000000000000000000e+00 +3.636999999999999745e-09 0.000000000000000000e+00 +3.637499999999999898e-09 0.000000000000000000e+00 +3.638000000000000052e-09 0.000000000000000000e+00 +3.638499999999999791e-09 0.000000000000000000e+00 +3.638999999999999945e-09 0.000000000000000000e+00 +3.639500000000000098e-09 0.000000000000000000e+00 +3.639999999999999838e-09 0.000000000000000000e+00 +3.640499999999999991e-09 0.000000000000000000e+00 +3.640999999999999731e-09 0.000000000000000000e+00 +3.641499999999999884e-09 0.000000000000000000e+00 +3.642000000000000038e-09 0.000000000000000000e+00 +3.642499999999999778e-09 0.000000000000000000e+00 +3.642999999999999931e-09 0.000000000000000000e+00 +3.643500000000000084e-09 0.000000000000000000e+00 +3.643999999999999824e-09 0.000000000000000000e+00 +3.644499999999999977e-09 0.000000000000000000e+00 +3.645000000000000131e-09 0.000000000000000000e+00 +3.645499999999999871e-09 0.000000000000000000e+00 +3.646000000000000024e-09 0.000000000000000000e+00 +3.646499999999999764e-09 0.000000000000000000e+00 +3.646999999999999917e-09 0.000000000000000000e+00 +3.647500000000000071e-09 0.000000000000000000e+00 +3.647999999999999810e-09 0.000000000000000000e+00 +3.648499999999999964e-09 0.000000000000000000e+00 +3.649000000000000117e-09 0.000000000000000000e+00 +3.649499999999999857e-09 0.000000000000000000e+00 +3.650000000000000010e-09 0.000000000000000000e+00 +3.650499999999999750e-09 0.000000000000000000e+00 +3.650999999999999903e-09 0.000000000000000000e+00 +3.651500000000000057e-09 0.000000000000000000e+00 +3.651999999999999796e-09 0.000000000000000000e+00 +3.652499999999999950e-09 0.000000000000000000e+00 +3.653000000000000103e-09 0.000000000000000000e+00 +3.653499999999999843e-09 0.000000000000000000e+00 +3.653999999999999996e-09 0.000000000000000000e+00 +3.654499999999999736e-09 0.000000000000000000e+00 +3.654999999999999890e-09 0.000000000000000000e+00 +3.655500000000000043e-09 0.000000000000000000e+00 +3.655999999999999783e-09 0.000000000000000000e+00 +3.656499999999999936e-09 0.000000000000000000e+00 +3.657000000000000089e-09 0.000000000000000000e+00 +3.657499999999999829e-09 0.000000000000000000e+00 +3.657999999999999983e-09 0.000000000000000000e+00 +3.658499999999999722e-09 0.000000000000000000e+00 +3.658999999999999876e-09 0.000000000000000000e+00 +3.659500000000000029e-09 0.000000000000000000e+00 +3.659999999999999769e-09 0.000000000000000000e+00 +3.660499999999999922e-09 0.000000000000000000e+00 +3.661000000000000076e-09 0.000000000000000000e+00 +3.661499999999999815e-09 0.000000000000000000e+00 +3.661999999999999969e-09 0.000000000000000000e+00 +3.662500000000000122e-09 0.000000000000000000e+00 +3.662999999999999862e-09 0.000000000000000000e+00 +3.663500000000000015e-09 0.000000000000000000e+00 +3.663999999999999755e-09 0.000000000000000000e+00 +3.664499999999999908e-09 0.000000000000000000e+00 +3.665000000000000062e-09 0.000000000000000000e+00 +3.665499999999999802e-09 0.000000000000000000e+00 +3.665999999999999955e-09 0.000000000000000000e+00 +3.666500000000000108e-09 0.000000000000000000e+00 +3.666999999999999848e-09 0.000000000000000000e+00 +3.667500000000000001e-09 0.000000000000000000e+00 +3.667999999999999741e-09 0.000000000000000000e+00 +3.668499999999999895e-09 0.000000000000000000e+00 +3.669000000000000048e-09 0.000000000000000000e+00 +3.669499999999999788e-09 0.000000000000000000e+00 +3.669999999999999941e-09 0.000000000000000000e+00 +3.670500000000000094e-09 0.000000000000000000e+00 +3.670999999999999834e-09 0.000000000000000000e+00 +3.671499999999999988e-09 0.000000000000000000e+00 +3.671999999999999727e-09 0.000000000000000000e+00 +3.672499999999999881e-09 0.000000000000000000e+00 +3.673000000000000034e-09 0.000000000000000000e+00 +3.673499999999999774e-09 0.000000000000000000e+00 +3.673999999999999927e-09 0.000000000000000000e+00 +3.674500000000000081e-09 0.000000000000000000e+00 +3.674999999999999820e-09 0.000000000000000000e+00 +3.675499999999999974e-09 0.000000000000000000e+00 +3.676000000000000127e-09 0.000000000000000000e+00 +3.676499999999999867e-09 0.000000000000000000e+00 +3.677000000000000020e-09 0.000000000000000000e+00 +3.677499999999999760e-09 0.000000000000000000e+00 +3.677999999999999914e-09 0.000000000000000000e+00 +3.678500000000000067e-09 0.000000000000000000e+00 +3.678999999999999807e-09 0.000000000000000000e+00 +3.679499999999999960e-09 0.000000000000000000e+00 +3.680000000000000113e-09 0.000000000000000000e+00 +3.680499999999999853e-09 0.000000000000000000e+00 +3.681000000000000007e-09 0.000000000000000000e+00 +3.681499999999999746e-09 0.000000000000000000e+00 +3.681999999999999900e-09 0.000000000000000000e+00 +3.682500000000000053e-09 0.000000000000000000e+00 +3.682999999999999793e-09 0.000000000000000000e+00 +3.683499999999999946e-09 0.000000000000000000e+00 +3.684000000000000100e-09 0.000000000000000000e+00 +3.684499999999999839e-09 0.000000000000000000e+00 +3.684999999999999993e-09 0.000000000000000000e+00 +3.685499999999999733e-09 0.000000000000000000e+00 +3.685999999999999886e-09 0.000000000000000000e+00 +3.686500000000000039e-09 0.000000000000000000e+00 +3.686999999999999779e-09 0.000000000000000000e+00 +3.687499999999999932e-09 0.000000000000000000e+00 +3.688000000000000086e-09 0.000000000000000000e+00 +3.688499999999999826e-09 0.000000000000000000e+00 +3.688999999999999979e-09 0.000000000000000000e+00 +3.689500000000000132e-09 0.000000000000000000e+00 +3.689999999999999872e-09 0.000000000000000000e+00 +3.690500000000000025e-09 0.000000000000000000e+00 +3.690999999999999765e-09 0.000000000000000000e+00 +3.691499999999999919e-09 0.000000000000000000e+00 +3.692000000000000072e-09 0.000000000000000000e+00 +3.692499999999999812e-09 0.000000000000000000e+00 +3.692999999999999965e-09 0.000000000000000000e+00 +3.693500000000000118e-09 0.000000000000000000e+00 +3.693999999999999858e-09 0.000000000000000000e+00 +3.694500000000000012e-09 0.000000000000000000e+00 +3.694999999999999751e-09 0.000000000000000000e+00 +3.695499999999999905e-09 0.000000000000000000e+00 +3.696000000000000058e-09 0.000000000000000000e+00 +3.696499999999999798e-09 0.000000000000000000e+00 +3.696999999999999951e-09 0.000000000000000000e+00 +3.697500000000000105e-09 0.000000000000000000e+00 +3.697999999999999844e-09 0.000000000000000000e+00 +3.698499999999999998e-09 0.000000000000000000e+00 +3.698999999999999738e-09 0.000000000000000000e+00 +3.699499999999999891e-09 0.000000000000000000e+00 +3.700000000000000044e-09 0.000000000000000000e+00 +3.700499999999999784e-09 0.000000000000000000e+00 +3.700999999999999937e-09 0.000000000000000000e+00 +3.701500000000000091e-09 0.000000000000000000e+00 +3.701999999999999831e-09 0.000000000000000000e+00 +3.702499999999999984e-09 0.000000000000000000e+00 +3.702999999999999724e-09 0.000000000000000000e+00 +3.703499999999999877e-09 0.000000000000000000e+00 +3.704000000000000031e-09 0.000000000000000000e+00 +3.704499999999999770e-09 0.000000000000000000e+00 +3.704999999999999924e-09 0.000000000000000000e+00 +3.705500000000000077e-09 0.000000000000000000e+00 +3.705999999999999817e-09 0.000000000000000000e+00 +3.706499999999999970e-09 0.000000000000000000e+00 +3.707000000000000124e-09 0.000000000000000000e+00 +3.707499999999999863e-09 0.000000000000000000e+00 +3.708000000000000017e-09 0.000000000000000000e+00 +3.708499999999999756e-09 0.000000000000000000e+00 +3.708999999999999910e-09 0.000000000000000000e+00 +3.709500000000000063e-09 0.000000000000000000e+00 +3.709999999999999803e-09 0.000000000000000000e+00 +3.710499999999999956e-09 0.000000000000000000e+00 +3.711000000000000110e-09 0.000000000000000000e+00 +3.711499999999999850e-09 0.000000000000000000e+00 +3.712000000000000003e-09 0.000000000000000000e+00 +3.712499999999999743e-09 0.000000000000000000e+00 +3.712999999999999896e-09 0.000000000000000000e+00 +3.713500000000000049e-09 0.000000000000000000e+00 +3.713999999999999789e-09 0.000000000000000000e+00 +3.714499999999999943e-09 0.000000000000000000e+00 +3.715000000000000096e-09 0.000000000000000000e+00 +3.715499999999999836e-09 0.000000000000000000e+00 +3.715999999999999989e-09 0.000000000000000000e+00 +3.716499999999999729e-09 0.000000000000000000e+00 +3.716999999999999882e-09 0.000000000000000000e+00 +3.717500000000000036e-09 0.000000000000000000e+00 +3.717999999999999775e-09 0.000000000000000000e+00 +3.718499999999999929e-09 0.000000000000000000e+00 +3.719000000000000082e-09 0.000000000000000000e+00 +3.719499999999999822e-09 0.000000000000000000e+00 +3.719999999999999975e-09 0.000000000000000000e+00 +3.720500000000000129e-09 0.000000000000000000e+00 +3.720999999999999868e-09 0.000000000000000000e+00 +3.721500000000000022e-09 0.000000000000000000e+00 +3.721999999999999762e-09 0.000000000000000000e+00 +3.722499999999999915e-09 0.000000000000000000e+00 +3.723000000000000068e-09 0.000000000000000000e+00 +3.723499999999999808e-09 0.000000000000000000e+00 +3.723999999999999961e-09 0.000000000000000000e+00 +3.724500000000000115e-09 0.000000000000000000e+00 +3.724999999999999855e-09 0.000000000000000000e+00 +3.725500000000000008e-09 0.000000000000000000e+00 +3.725999999999999748e-09 0.000000000000000000e+00 +3.726500000000000315e-09 0.000000000000000000e+00 +3.727000000000000054e-09 0.000000000000000000e+00 +3.727499999999999794e-09 0.000000000000000000e+00 +3.727999999999999534e-09 0.000000000000000000e+00 +3.728500000000000101e-09 0.000000000000000000e+00 +3.728999999999999841e-09 0.000000000000000000e+00 +3.729499999999999581e-09 0.000000000000000000e+00 +3.730000000000000148e-09 0.000000000000000000e+00 +3.730499999999999887e-09 0.000000000000000000e+00 +3.730999999999999627e-09 0.000000000000000000e+00 +3.731500000000000194e-09 0.000000000000000000e+00 +3.731999999999999934e-09 0.000000000000000000e+00 +3.732499999999999674e-09 0.000000000000000000e+00 +3.733000000000000241e-09 0.000000000000000000e+00 +3.733499999999999980e-09 0.000000000000000000e+00 +3.733999999999999720e-09 0.000000000000000000e+00 +3.734500000000000287e-09 0.000000000000000000e+00 +3.735000000000000027e-09 0.000000000000000000e+00 +3.735499999999999767e-09 0.000000000000000000e+00 +3.736000000000000334e-09 0.000000000000000000e+00 +3.736500000000000073e-09 0.000000000000000000e+00 +3.736999999999999813e-09 0.000000000000000000e+00 +3.737499999999999553e-09 0.000000000000000000e+00 +3.738000000000000120e-09 0.000000000000000000e+00 +3.738499999999999860e-09 0.000000000000000000e+00 +3.738999999999999599e-09 0.000000000000000000e+00 +3.739500000000000166e-09 0.000000000000000000e+00 +3.739999999999999906e-09 0.000000000000000000e+00 +3.740499999999999646e-09 0.000000000000000000e+00 +3.741000000000000213e-09 0.000000000000000000e+00 +3.741499999999999953e-09 0.000000000000000000e+00 +3.741999999999999692e-09 0.000000000000000000e+00 +3.742500000000000259e-09 0.000000000000000000e+00 +3.742999999999999999e-09 0.000000000000000000e+00 +3.743499999999999739e-09 0.000000000000000000e+00 +3.744000000000000306e-09 0.000000000000000000e+00 +3.744500000000000046e-09 0.000000000000000000e+00 +3.744999999999999786e-09 0.000000000000000000e+00 +3.745499999999999525e-09 0.000000000000000000e+00 +3.746000000000000092e-09 0.000000000000000000e+00 +3.746499999999999832e-09 0.000000000000000000e+00 +3.746999999999999572e-09 0.000000000000000000e+00 +3.747500000000000139e-09 0.000000000000000000e+00 +3.747999999999999879e-09 0.000000000000000000e+00 +3.748499999999999618e-09 0.000000000000000000e+00 +3.749000000000000185e-09 0.000000000000000000e+00 +3.749499999999999925e-09 0.000000000000000000e+00 +3.749999999999999665e-09 0.000000000000000000e+00 +3.750500000000000232e-09 0.000000000000000000e+00 +3.750999999999999972e-09 0.000000000000000000e+00 +3.751499999999999711e-09 0.000000000000000000e+00 +3.752000000000000278e-09 0.000000000000000000e+00 +3.752500000000000018e-09 0.000000000000000000e+00 +3.752999999999999758e-09 0.000000000000000000e+00 +3.753500000000000325e-09 0.000000000000000000e+00 +3.754000000000000065e-09 0.000000000000000000e+00 +3.754499999999999804e-09 0.000000000000000000e+00 +3.754999999999999544e-09 0.000000000000000000e+00 +3.755500000000000111e-09 0.000000000000000000e+00 +3.755999999999999851e-09 0.000000000000000000e+00 +3.756499999999999591e-09 0.000000000000000000e+00 +3.757000000000000158e-09 0.000000000000000000e+00 +3.757499999999999897e-09 0.000000000000000000e+00 +3.757999999999999637e-09 0.000000000000000000e+00 +3.758500000000000204e-09 0.000000000000000000e+00 +3.758999999999999944e-09 0.000000000000000000e+00 +3.759499999999999684e-09 0.000000000000000000e+00 +3.760000000000000251e-09 0.000000000000000000e+00 +3.760499999999999991e-09 0.000000000000000000e+00 +3.760999999999999730e-09 0.000000000000000000e+00 +3.761500000000000297e-09 0.000000000000000000e+00 +3.762000000000000037e-09 0.000000000000000000e+00 +3.762499999999999777e-09 0.000000000000000000e+00 +3.762999999999999517e-09 0.000000000000000000e+00 +3.763500000000000084e-09 0.000000000000000000e+00 +3.763999999999999823e-09 0.000000000000000000e+00 +3.764499999999999563e-09 0.000000000000000000e+00 +3.765000000000000130e-09 0.000000000000000000e+00 +3.765499999999999870e-09 0.000000000000000000e+00 +3.765999999999999610e-09 0.000000000000000000e+00 +3.766500000000000177e-09 0.000000000000000000e+00 +3.766999999999999916e-09 0.000000000000000000e+00 +3.767499999999999656e-09 0.000000000000000000e+00 +3.768000000000000223e-09 0.000000000000000000e+00 +3.768499999999999963e-09 0.000000000000000000e+00 +3.768999999999999703e-09 0.000000000000000000e+00 +3.769500000000000270e-09 0.000000000000000000e+00 +3.770000000000000009e-09 0.000000000000000000e+00 +3.770499999999999749e-09 0.000000000000000000e+00 +3.771000000000000316e-09 0.000000000000000000e+00 +3.771500000000000056e-09 0.000000000000000000e+00 +3.771999999999999796e-09 0.000000000000000000e+00 +3.772499999999999535e-09 0.000000000000000000e+00 +3.773000000000000102e-09 0.000000000000000000e+00 +3.773499999999999842e-09 0.000000000000000000e+00 +3.773999999999999582e-09 0.000000000000000000e+00 +3.774500000000000149e-09 0.000000000000000000e+00 +3.774999999999999889e-09 0.000000000000000000e+00 +3.775499999999999629e-09 0.000000000000000000e+00 +3.776000000000000195e-09 0.000000000000000000e+00 +3.776499999999999935e-09 0.000000000000000000e+00 +3.776999999999999675e-09 0.000000000000000000e+00 +3.777500000000000242e-09 0.000000000000000000e+00 +3.777999999999999982e-09 0.000000000000000000e+00 +3.778499999999999722e-09 0.000000000000000000e+00 +3.779000000000000289e-09 0.000000000000000000e+00 +3.779500000000000028e-09 0.000000000000000000e+00 +3.779999999999999768e-09 0.000000000000000000e+00 +3.780500000000000335e-09 0.000000000000000000e+00 +3.781000000000000075e-09 0.000000000000000000e+00 +3.781499999999999815e-09 0.000000000000000000e+00 +3.781999999999999554e-09 0.000000000000000000e+00 +3.782500000000000121e-09 0.000000000000000000e+00 +3.782999999999999861e-09 0.000000000000000000e+00 +3.783499999999999601e-09 0.000000000000000000e+00 +3.784000000000000168e-09 0.000000000000000000e+00 +3.784499999999999908e-09 0.000000000000000000e+00 +3.784999999999999647e-09 0.000000000000000000e+00 +3.785500000000000214e-09 0.000000000000000000e+00 +3.785999999999999954e-09 0.000000000000000000e+00 +3.786499999999999694e-09 0.000000000000000000e+00 +3.787000000000000261e-09 0.000000000000000000e+00 +3.787500000000000001e-09 0.000000000000000000e+00 +3.787999999999999740e-09 0.000000000000000000e+00 +3.788500000000000307e-09 0.000000000000000000e+00 +3.789000000000000047e-09 0.000000000000000000e+00 +3.789499999999999787e-09 0.000000000000000000e+00 +3.789999999999999527e-09 0.000000000000000000e+00 +3.790500000000000094e-09 0.000000000000000000e+00 +3.790999999999999833e-09 0.000000000000000000e+00 +3.791499999999999573e-09 0.000000000000000000e+00 +3.792000000000000140e-09 0.000000000000000000e+00 +3.792499999999999880e-09 0.000000000000000000e+00 +3.792999999999999620e-09 0.000000000000000000e+00 +3.793500000000000187e-09 0.000000000000000000e+00 +3.793999999999999927e-09 0.000000000000000000e+00 +3.794499999999999666e-09 0.000000000000000000e+00 +3.795000000000000233e-09 0.000000000000000000e+00 +3.795499999999999973e-09 0.000000000000000000e+00 +3.795999999999999713e-09 0.000000000000000000e+00 +3.796500000000000280e-09 0.000000000000000000e+00 +3.797000000000000020e-09 0.000000000000000000e+00 +3.797499999999999759e-09 0.000000000000000000e+00 +3.798000000000000326e-09 0.000000000000000000e+00 +3.798500000000000066e-09 0.000000000000000000e+00 +3.798999999999999806e-09 0.000000000000000000e+00 +3.799499999999999546e-09 0.000000000000000000e+00 +3.800000000000000113e-09 0.000000000000000000e+00 +3.800499999999999852e-09 0.000000000000000000e+00 +3.800999999999999592e-09 0.000000000000000000e+00 +3.801500000000000159e-09 0.000000000000000000e+00 +3.801999999999999899e-09 0.000000000000000000e+00 +3.802499999999999639e-09 0.000000000000000000e+00 +3.803000000000000206e-09 0.000000000000000000e+00 +3.803499999999999945e-09 0.000000000000000000e+00 +3.803999999999999685e-09 0.000000000000000000e+00 +3.804500000000000252e-09 0.000000000000000000e+00 +3.804999999999999992e-09 0.000000000000000000e+00 +3.805499999999999732e-09 0.000000000000000000e+00 +3.806000000000000299e-09 0.000000000000000000e+00 +3.806500000000000038e-09 0.000000000000000000e+00 +3.806999999999999778e-09 0.000000000000000000e+00 +3.807499999999999518e-09 0.000000000000000000e+00 +3.808000000000000085e-09 0.000000000000000000e+00 +3.808499999999999825e-09 0.000000000000000000e+00 +3.808999999999999565e-09 0.000000000000000000e+00 +3.809500000000000131e-09 0.000000000000000000e+00 +3.809999999999999871e-09 0.000000000000000000e+00 +3.810499999999999611e-09 0.000000000000000000e+00 +3.811000000000000178e-09 0.000000000000000000e+00 +3.811499999999999918e-09 0.000000000000000000e+00 +3.811999999999999658e-09 0.000000000000000000e+00 +3.812500000000000225e-09 0.000000000000000000e+00 +3.812999999999999964e-09 0.000000000000000000e+00 +3.813499999999999704e-09 0.000000000000000000e+00 +3.814000000000000271e-09 0.000000000000000000e+00 +3.814500000000000011e-09 0.000000000000000000e+00 +3.814999999999999751e-09 0.000000000000000000e+00 +3.815500000000000318e-09 0.000000000000000000e+00 +3.816000000000000057e-09 0.000000000000000000e+00 +3.816499999999999797e-09 0.000000000000000000e+00 +3.816999999999999537e-09 0.000000000000000000e+00 +3.817500000000000104e-09 0.000000000000000000e+00 +3.817999999999999844e-09 0.000000000000000000e+00 +3.818499999999999583e-09 0.000000000000000000e+00 +3.819000000000000150e-09 0.000000000000000000e+00 +3.819499999999999890e-09 0.000000000000000000e+00 +3.819999999999999630e-09 0.000000000000000000e+00 +3.820500000000000197e-09 0.000000000000000000e+00 +3.820999999999999937e-09 0.000000000000000000e+00 +3.821499999999999676e-09 0.000000000000000000e+00 +3.822000000000000243e-09 0.000000000000000000e+00 +3.822499999999999983e-09 0.000000000000000000e+00 +3.822999999999999723e-09 0.000000000000000000e+00 +3.823500000000000290e-09 0.000000000000000000e+00 +3.824000000000000030e-09 0.000000000000000000e+00 +3.824499999999999769e-09 0.000000000000000000e+00 +3.825000000000000336e-09 0.000000000000000000e+00 +3.825500000000000076e-09 0.000000000000000000e+00 +3.825999999999999816e-09 0.000000000000000000e+00 +3.826499999999999556e-09 0.000000000000000000e+00 +3.827000000000000123e-09 0.000000000000000000e+00 +3.827499999999999863e-09 0.000000000000000000e+00 +3.827999999999999602e-09 0.000000000000000000e+00 +3.828500000000000169e-09 0.000000000000000000e+00 +3.828999999999999909e-09 0.000000000000000000e+00 +3.829499999999999649e-09 0.000000000000000000e+00 +3.830000000000000216e-09 0.000000000000000000e+00 +3.830499999999999956e-09 0.000000000000000000e+00 +3.830999999999999695e-09 0.000000000000000000e+00 +3.831500000000000262e-09 0.000000000000000000e+00 +3.832000000000000002e-09 0.000000000000000000e+00 +3.832499999999999742e-09 0.000000000000000000e+00 +3.833000000000000309e-09 0.000000000000000000e+00 +3.833500000000000049e-09 0.000000000000000000e+00 +3.833999999999999788e-09 0.000000000000000000e+00 +3.834499999999999528e-09 0.000000000000000000e+00 +3.835000000000000095e-09 0.000000000000000000e+00 +3.835499999999999835e-09 0.000000000000000000e+00 +3.835999999999999575e-09 0.000000000000000000e+00 +3.836500000000000142e-09 0.000000000000000000e+00 +3.836999999999999881e-09 0.000000000000000000e+00 +3.837499999999999621e-09 0.000000000000000000e+00 +3.838000000000000188e-09 0.000000000000000000e+00 +3.838499999999999928e-09 0.000000000000000000e+00 +3.838999999999999668e-09 0.000000000000000000e+00 +3.839500000000000235e-09 0.000000000000000000e+00 +3.839999999999999974e-09 0.000000000000000000e+00 +3.840499999999999714e-09 0.000000000000000000e+00 +3.841000000000000281e-09 0.000000000000000000e+00 +3.841500000000000021e-09 0.000000000000000000e+00 +3.841999999999999761e-09 0.000000000000000000e+00 +3.842500000000000328e-09 0.000000000000000000e+00 +3.843000000000000068e-09 0.000000000000000000e+00 +3.843499999999999807e-09 0.000000000000000000e+00 +3.843999999999999547e-09 0.000000000000000000e+00 +3.844500000000000114e-09 0.000000000000000000e+00 +3.844999999999999854e-09 0.000000000000000000e+00 +3.845499999999999594e-09 0.000000000000000000e+00 +3.846000000000000161e-09 0.000000000000000000e+00 +3.846499999999999900e-09 0.000000000000000000e+00 +3.846999999999999640e-09 0.000000000000000000e+00 +3.847500000000000207e-09 0.000000000000000000e+00 +3.847999999999999947e-09 0.000000000000000000e+00 +3.848499999999999687e-09 0.000000000000000000e+00 +3.849000000000000254e-09 0.000000000000000000e+00 +3.849499999999999993e-09 0.000000000000000000e+00 +3.849999999999999733e-09 0.000000000000000000e+00 +3.850500000000000300e-09 0.000000000000000000e+00 +3.851000000000000040e-09 0.000000000000000000e+00 +3.851499999999999780e-09 0.000000000000000000e+00 +3.851999999999999519e-09 0.000000000000000000e+00 +3.852500000000000086e-09 0.000000000000000000e+00 +3.852999999999999826e-09 0.000000000000000000e+00 +3.853499999999999566e-09 0.000000000000000000e+00 +3.854000000000000133e-09 0.000000000000000000e+00 +3.854499999999999873e-09 0.000000000000000000e+00 +3.854999999999999612e-09 0.000000000000000000e+00 +3.855500000000000179e-09 0.000000000000000000e+00 +3.855999999999999919e-09 0.000000000000000000e+00 +3.856499999999999659e-09 0.000000000000000000e+00 +3.857000000000000226e-09 0.000000000000000000e+00 +3.857499999999999966e-09 0.000000000000000000e+00 +3.857999999999999706e-09 0.000000000000000000e+00 +3.858500000000000272e-09 0.000000000000000000e+00 +3.859000000000000012e-09 0.000000000000000000e+00 +3.859499999999999752e-09 0.000000000000000000e+00 +3.860000000000000319e-09 0.000000000000000000e+00 +3.860500000000000059e-09 0.000000000000000000e+00 +3.860999999999999799e-09 0.000000000000000000e+00 +3.861499999999999538e-09 0.000000000000000000e+00 +3.862000000000000105e-09 0.000000000000000000e+00 +3.862499999999999845e-09 0.000000000000000000e+00 +3.862999999999999585e-09 0.000000000000000000e+00 +3.863500000000000152e-09 0.000000000000000000e+00 +3.863999999999999892e-09 0.000000000000000000e+00 +3.864499999999999631e-09 0.000000000000000000e+00 +3.865000000000000198e-09 0.000000000000000000e+00 +3.865499999999999938e-09 0.000000000000000000e+00 +3.865999999999999678e-09 0.000000000000000000e+00 +3.866500000000000245e-09 0.000000000000000000e+00 +3.866999999999999985e-09 0.000000000000000000e+00 +3.867499999999999724e-09 0.000000000000000000e+00 +3.868000000000000291e-09 0.000000000000000000e+00 +3.868500000000000031e-09 0.000000000000000000e+00 +3.868999999999999771e-09 0.000000000000000000e+00 +3.869499999999999511e-09 0.000000000000000000e+00 +3.870000000000000078e-09 0.000000000000000000e+00 +3.870499999999999817e-09 0.000000000000000000e+00 +3.870999999999999557e-09 0.000000000000000000e+00 +3.871500000000000124e-09 0.000000000000000000e+00 +3.871999999999999864e-09 0.000000000000000000e+00 +3.872499999999999604e-09 0.000000000000000000e+00 +3.873000000000000171e-09 0.000000000000000000e+00 +3.873499999999999910e-09 0.000000000000000000e+00 +3.873999999999999650e-09 0.000000000000000000e+00 +3.874500000000000217e-09 0.000000000000000000e+00 +3.874999999999999957e-09 0.000000000000000000e+00 +3.875499999999999697e-09 0.000000000000000000e+00 +3.876000000000000264e-09 0.000000000000000000e+00 +3.876500000000000004e-09 0.000000000000000000e+00 +3.876999999999999743e-09 0.000000000000000000e+00 +3.877500000000000310e-09 0.000000000000000000e+00 +3.878000000000000050e-09 0.000000000000000000e+00 +3.878499999999999790e-09 0.000000000000000000e+00 +3.878999999999999530e-09 0.000000000000000000e+00 +3.879500000000000097e-09 0.000000000000000000e+00 +3.879999999999999836e-09 0.000000000000000000e+00 +3.880499999999999576e-09 0.000000000000000000e+00 +3.881000000000000143e-09 0.000000000000000000e+00 +3.881499999999999883e-09 0.000000000000000000e+00 +3.881999999999999623e-09 0.000000000000000000e+00 +3.882500000000000190e-09 0.000000000000000000e+00 +3.882999999999999929e-09 0.000000000000000000e+00 +3.883499999999999669e-09 0.000000000000000000e+00 +3.884000000000000236e-09 0.000000000000000000e+00 +3.884499999999999976e-09 0.000000000000000000e+00 +3.884999999999999716e-09 0.000000000000000000e+00 +3.885500000000000283e-09 0.000000000000000000e+00 +3.886000000000000022e-09 0.000000000000000000e+00 +3.886499999999999762e-09 0.000000000000000000e+00 +3.887000000000000329e-09 0.000000000000000000e+00 +3.887500000000000069e-09 0.000000000000000000e+00 +3.887999999999999809e-09 0.000000000000000000e+00 +3.888499999999999548e-09 0.000000000000000000e+00 +3.889000000000000115e-09 0.000000000000000000e+00 +3.889499999999999855e-09 0.000000000000000000e+00 +3.889999999999999595e-09 0.000000000000000000e+00 +3.890500000000000162e-09 0.000000000000000000e+00 +3.890999999999999902e-09 0.000000000000000000e+00 +3.891499999999999642e-09 0.000000000000000000e+00 +3.892000000000000208e-09 0.000000000000000000e+00 +3.892499999999999948e-09 0.000000000000000000e+00 +3.892999999999999688e-09 0.000000000000000000e+00 +3.893500000000000255e-09 0.000000000000000000e+00 +3.893999999999999995e-09 0.000000000000000000e+00 +3.894499999999999735e-09 0.000000000000000000e+00 +3.895000000000000302e-09 0.000000000000000000e+00 +3.895500000000000041e-09 0.000000000000000000e+00 +3.895999999999999781e-09 0.000000000000000000e+00 +3.896499999999999521e-09 0.000000000000000000e+00 +3.897000000000000088e-09 0.000000000000000000e+00 +3.897499999999999828e-09 0.000000000000000000e+00 +3.897999999999999567e-09 0.000000000000000000e+00 +3.898500000000000134e-09 0.000000000000000000e+00 +3.898999999999999874e-09 0.000000000000000000e+00 +3.899499999999999614e-09 0.000000000000000000e+00 +3.900000000000000181e-09 0.000000000000000000e+00 +3.900499999999999921e-09 0.000000000000000000e+00 +3.900999999999999660e-09 0.000000000000000000e+00 +3.901500000000000227e-09 0.000000000000000000e+00 +3.901999999999999967e-09 0.000000000000000000e+00 +3.902499999999999707e-09 0.000000000000000000e+00 +3.903000000000000274e-09 0.000000000000000000e+00 +3.903500000000000014e-09 0.000000000000000000e+00 +3.903999999999999753e-09 0.000000000000000000e+00 +3.904500000000000320e-09 0.000000000000000000e+00 +3.905000000000000060e-09 0.000000000000000000e+00 +3.905499999999999800e-09 0.000000000000000000e+00 +3.905999999999999540e-09 0.000000000000000000e+00 +3.906500000000000107e-09 0.000000000000000000e+00 +3.906999999999999846e-09 0.000000000000000000e+00 +3.907499999999999586e-09 0.000000000000000000e+00 +3.908000000000000153e-09 0.000000000000000000e+00 +3.908499999999999893e-09 0.000000000000000000e+00 +3.908999999999999633e-09 0.000000000000000000e+00 +3.909500000000000200e-09 0.000000000000000000e+00 +3.909999999999999940e-09 0.000000000000000000e+00 +3.910499999999999679e-09 0.000000000000000000e+00 +3.911000000000000246e-09 0.000000000000000000e+00 +3.911499999999999986e-09 0.000000000000000000e+00 +3.911999999999999726e-09 0.000000000000000000e+00 +3.912500000000000293e-09 0.000000000000000000e+00 +3.913000000000000033e-09 0.000000000000000000e+00 +3.913499999999999772e-09 0.000000000000000000e+00 +3.913999999999999512e-09 0.000000000000000000e+00 +3.914500000000000079e-09 0.000000000000000000e+00 +3.914999999999999819e-09 0.000000000000000000e+00 +3.915499999999999559e-09 0.000000000000000000e+00 +3.916000000000000126e-09 0.000000000000000000e+00 +3.916499999999999865e-09 0.000000000000000000e+00 +3.916999999999999605e-09 0.000000000000000000e+00 +3.917500000000000172e-09 0.000000000000000000e+00 +3.917999999999999912e-09 0.000000000000000000e+00 +3.918499999999999652e-09 0.000000000000000000e+00 +3.919000000000000219e-09 0.000000000000000000e+00 +3.919499999999999958e-09 0.000000000000000000e+00 +3.919999999999999698e-09 0.000000000000000000e+00 +3.920500000000000265e-09 0.000000000000000000e+00 +3.921000000000000005e-09 0.000000000000000000e+00 +3.921499999999999745e-09 0.000000000000000000e+00 +3.922000000000000312e-09 0.000000000000000000e+00 +3.922500000000000051e-09 0.000000000000000000e+00 +3.922999999999999791e-09 0.000000000000000000e+00 +3.923499999999999531e-09 0.000000000000000000e+00 +3.924000000000000098e-09 0.000000000000000000e+00 +3.924499999999999838e-09 0.000000000000000000e+00 +3.924999999999999578e-09 0.000000000000000000e+00 +3.925500000000000145e-09 0.000000000000000000e+00 +3.925999999999999884e-09 0.000000000000000000e+00 +3.926499999999999624e-09 0.000000000000000000e+00 +3.927000000000000191e-09 0.000000000000000000e+00 +3.927499999999999931e-09 0.000000000000000000e+00 +3.927999999999999671e-09 0.000000000000000000e+00 +3.928500000000000238e-09 0.000000000000000000e+00 +3.928999999999999977e-09 0.000000000000000000e+00 +3.929499999999999717e-09 0.000000000000000000e+00 +3.930000000000000284e-09 0.000000000000000000e+00 +3.930500000000000024e-09 0.000000000000000000e+00 +3.930999999999999764e-09 0.000000000000000000e+00 +3.931500000000000331e-09 0.000000000000000000e+00 +3.932000000000000070e-09 0.000000000000000000e+00 +3.932499999999999810e-09 0.000000000000000000e+00 +3.932999999999999550e-09 0.000000000000000000e+00 +3.933500000000000117e-09 0.000000000000000000e+00 +3.933999999999999857e-09 0.000000000000000000e+00 +3.934499999999999596e-09 0.000000000000000000e+00 +3.935000000000000163e-09 0.000000000000000000e+00 +3.935499999999999903e-09 0.000000000000000000e+00 +3.935999999999999643e-09 0.000000000000000000e+00 +3.936500000000000210e-09 0.000000000000000000e+00 +3.936999999999999950e-09 0.000000000000000000e+00 +3.937499999999999689e-09 0.000000000000000000e+00 +3.938000000000000256e-09 0.000000000000000000e+00 +3.938499999999999996e-09 0.000000000000000000e+00 +3.938999999999999736e-09 0.000000000000000000e+00 +3.939500000000000303e-09 0.000000000000000000e+00 +3.940000000000000043e-09 0.000000000000000000e+00 +3.940499999999999783e-09 0.000000000000000000e+00 +3.940999999999999522e-09 0.000000000000000000e+00 +3.941500000000000089e-09 0.000000000000000000e+00 +3.941999999999999829e-09 0.000000000000000000e+00 +3.942499999999999569e-09 0.000000000000000000e+00 +3.943000000000000136e-09 0.000000000000000000e+00 +3.943499999999999876e-09 0.000000000000000000e+00 +3.943999999999999615e-09 0.000000000000000000e+00 +3.944500000000000182e-09 0.000000000000000000e+00 +3.944999999999999922e-09 0.000000000000000000e+00 +3.945499999999999662e-09 0.000000000000000000e+00 +3.946000000000000229e-09 0.000000000000000000e+00 +3.946499999999999969e-09 0.000000000000000000e+00 +3.946999999999999708e-09 0.000000000000000000e+00 +3.947500000000000275e-09 0.000000000000000000e+00 +3.948000000000000015e-09 0.000000000000000000e+00 +3.948499999999999755e-09 0.000000000000000000e+00 +3.949000000000000322e-09 0.000000000000000000e+00 +3.949500000000000062e-09 0.000000000000000000e+00 +3.949999999999999801e-09 0.000000000000000000e+00 +3.950499999999999541e-09 0.000000000000000000e+00 +3.951000000000000108e-09 0.000000000000000000e+00 +3.951499999999999848e-09 0.000000000000000000e+00 +3.951999999999999588e-09 0.000000000000000000e+00 +3.952500000000000155e-09 0.000000000000000000e+00 +3.952999999999999894e-09 0.000000000000000000e+00 +3.953499999999999634e-09 0.000000000000000000e+00 +3.954000000000000201e-09 0.000000000000000000e+00 +3.954499999999999941e-09 0.000000000000000000e+00 +3.954999999999999681e-09 0.000000000000000000e+00 +3.955500000000000248e-09 0.000000000000000000e+00 +3.955999999999999987e-09 0.000000000000000000e+00 +3.956499999999999727e-09 0.000000000000000000e+00 +3.957000000000000294e-09 0.000000000000000000e+00 +3.957500000000000034e-09 0.000000000000000000e+00 +3.957999999999999774e-09 0.000000000000000000e+00 +3.958499999999999514e-09 0.000000000000000000e+00 +3.959000000000000081e-09 0.000000000000000000e+00 +3.959499999999999820e-09 0.000000000000000000e+00 +3.959999999999999560e-09 0.000000000000000000e+00 +3.960500000000000127e-09 0.000000000000000000e+00 +3.960999999999999867e-09 0.000000000000000000e+00 +3.961499999999999607e-09 0.000000000000000000e+00 +3.962000000000000174e-09 0.000000000000000000e+00 +3.962499999999999913e-09 0.000000000000000000e+00 +3.962999999999999653e-09 0.000000000000000000e+00 +3.963500000000000220e-09 0.000000000000000000e+00 +3.963999999999999960e-09 0.000000000000000000e+00 +3.964499999999999700e-09 0.000000000000000000e+00 +3.965000000000000267e-09 0.000000000000000000e+00 +3.965500000000000006e-09 0.000000000000000000e+00 +3.965999999999999746e-09 0.000000000000000000e+00 +3.966500000000000313e-09 0.000000000000000000e+00 +3.967000000000000053e-09 0.000000000000000000e+00 +3.967499999999999793e-09 0.000000000000000000e+00 +3.967999999999999532e-09 0.000000000000000000e+00 +3.968500000000000099e-09 0.000000000000000000e+00 +3.968999999999999839e-09 0.000000000000000000e+00 +3.969499999999999579e-09 0.000000000000000000e+00 +3.970000000000000146e-09 0.000000000000000000e+00 +3.970499999999999886e-09 0.000000000000000000e+00 +3.970999999999999625e-09 0.000000000000000000e+00 +3.971500000000000192e-09 0.000000000000000000e+00 +3.971999999999999932e-09 0.000000000000000000e+00 +3.972499999999999672e-09 0.000000000000000000e+00 +3.973000000000000239e-09 0.000000000000000000e+00 +3.973499999999999979e-09 0.000000000000000000e+00 +3.973999999999999719e-09 0.000000000000000000e+00 +3.974500000000000285e-09 0.000000000000000000e+00 +3.975000000000000025e-09 0.000000000000000000e+00 +3.975499999999999765e-09 0.000000000000000000e+00 +3.976000000000000332e-09 0.000000000000000000e+00 +3.976500000000000072e-09 0.000000000000000000e+00 +3.976999999999999812e-09 0.000000000000000000e+00 +3.977499999999999551e-09 0.000000000000000000e+00 +3.978000000000000118e-09 0.000000000000000000e+00 +3.978499999999999858e-09 0.000000000000000000e+00 +3.978999999999999598e-09 0.000000000000000000e+00 +3.979500000000000165e-09 0.000000000000000000e+00 +3.979999999999999905e-09 0.000000000000000000e+00 +3.980499999999999644e-09 0.000000000000000000e+00 +3.981000000000000211e-09 0.000000000000000000e+00 +3.981499999999999951e-09 0.000000000000000000e+00 +3.981999999999999691e-09 0.000000000000000000e+00 +3.982500000000000258e-09 0.000000000000000000e+00 +3.982999999999999998e-09 0.000000000000000000e+00 +3.983499999999999737e-09 0.000000000000000000e+00 +3.984000000000000304e-09 0.000000000000000000e+00 +3.984500000000000044e-09 0.000000000000000000e+00 +3.984999999999999784e-09 0.000000000000000000e+00 +3.985499999999999524e-09 0.000000000000000000e+00 +3.986000000000000091e-09 0.000000000000000000e+00 +3.986499999999999830e-09 0.000000000000000000e+00 +3.986999999999999570e-09 0.000000000000000000e+00 +3.987500000000000137e-09 0.000000000000000000e+00 +3.987999999999999877e-09 0.000000000000000000e+00 +3.988499999999999617e-09 0.000000000000000000e+00 +3.989000000000000184e-09 0.000000000000000000e+00 +3.989499999999999923e-09 0.000000000000000000e+00 +3.989999999999999663e-09 0.000000000000000000e+00 +3.990500000000000230e-09 0.000000000000000000e+00 +3.990999999999999970e-09 0.000000000000000000e+00 +3.991499999999999710e-09 0.000000000000000000e+00 +3.992000000000000277e-09 0.000000000000000000e+00 +3.992500000000000017e-09 0.000000000000000000e+00 +3.992999999999999756e-09 0.000000000000000000e+00 +3.993500000000000323e-09 0.000000000000000000e+00 +3.994000000000000063e-09 0.000000000000000000e+00 +3.994499999999999803e-09 0.000000000000000000e+00 +3.994999999999999543e-09 0.000000000000000000e+00 +3.995500000000000110e-09 0.000000000000000000e+00 +3.995999999999999849e-09 0.000000000000000000e+00 +3.996499999999999589e-09 0.000000000000000000e+00 +3.997000000000000156e-09 0.000000000000000000e+00 +3.997499999999999896e-09 0.000000000000000000e+00 +3.997999999999999636e-09 0.000000000000000000e+00 +3.998500000000000203e-09 0.000000000000000000e+00 +3.998999999999999942e-09 0.000000000000000000e+00 +3.999499999999999682e-09 0.000000000000000000e+00 +4.000000000000000249e-09 0.000000000000000000e+00 +4.000499999999999989e-09 0.000000000000000000e+00 +4.000999999999999729e-09 0.000000000000000000e+00 +4.001500000000000296e-09 0.000000000000000000e+00 +4.002000000000000035e-09 0.000000000000000000e+00 +4.002499999999999775e-09 0.000000000000000000e+00 +4.002999999999999515e-09 0.000000000000000000e+00 +4.003500000000000082e-09 0.000000000000000000e+00 +4.003999999999999822e-09 0.000000000000000000e+00 +4.004499999999999562e-09 0.000000000000000000e+00 +4.005000000000000128e-09 0.000000000000000000e+00 +4.005499999999999868e-09 0.000000000000000000e+00 +4.005999999999999608e-09 0.000000000000000000e+00 +4.006500000000000175e-09 0.000000000000000000e+00 +4.006999999999999915e-09 0.000000000000000000e+00 +4.007499999999999655e-09 0.000000000000000000e+00 +4.008000000000000222e-09 0.000000000000000000e+00 +4.008499999999999961e-09 0.000000000000000000e+00 +4.008999999999999701e-09 0.000000000000000000e+00 +4.009500000000000268e-09 0.000000000000000000e+00 +4.010000000000000008e-09 0.000000000000000000e+00 +4.010499999999999748e-09 0.000000000000000000e+00 +4.011000000000000315e-09 0.000000000000000000e+00 +4.011500000000000054e-09 0.000000000000000000e+00 +4.011999999999999794e-09 0.000000000000000000e+00 +4.012499999999999534e-09 0.000000000000000000e+00 +4.013000000000000101e-09 0.000000000000000000e+00 +4.013499999999999841e-09 0.000000000000000000e+00 +4.013999999999999580e-09 0.000000000000000000e+00 +4.014500000000000147e-09 0.000000000000000000e+00 +4.014999999999999887e-09 0.000000000000000000e+00 +4.015499999999999627e-09 0.000000000000000000e+00 +4.016000000000000194e-09 0.000000000000000000e+00 +4.016499999999999934e-09 0.000000000000000000e+00 +4.016999999999999673e-09 0.000000000000000000e+00 +4.017500000000000240e-09 0.000000000000000000e+00 +4.017999999999999980e-09 0.000000000000000000e+00 +4.018499999999999720e-09 0.000000000000000000e+00 +4.019000000000000287e-09 0.000000000000000000e+00 +4.019500000000000027e-09 0.000000000000000000e+00 +4.019999999999999766e-09 0.000000000000000000e+00 +4.020499999999999506e-09 0.000000000000000000e+00 +4.021000000000000073e-09 0.000000000000000000e+00 +4.021499999999999813e-09 0.000000000000000000e+00 +4.021999999999999553e-09 0.000000000000000000e+00 +4.022500000000000120e-09 0.000000000000000000e+00 +4.022999999999999860e-09 0.000000000000000000e+00 +4.023499999999999599e-09 0.000000000000000000e+00 +4.024000000000000166e-09 0.000000000000000000e+00 +4.024499999999999906e-09 0.000000000000000000e+00 +4.024999999999999646e-09 0.000000000000000000e+00 +4.025500000000000213e-09 0.000000000000000000e+00 +4.025999999999999953e-09 0.000000000000000000e+00 +4.026499999999999692e-09 0.000000000000000000e+00 +4.027000000000000259e-09 0.000000000000000000e+00 +4.027499999999999999e-09 0.000000000000000000e+00 +4.027999999999999739e-09 0.000000000000000000e+00 +4.028500000000000306e-09 0.000000000000000000e+00 +4.029000000000000046e-09 0.000000000000000000e+00 +4.029499999999999785e-09 0.000000000000000000e+00 +4.029999999999999525e-09 0.000000000000000000e+00 +4.030500000000000092e-09 0.000000000000000000e+00 +4.030999999999999832e-09 0.000000000000000000e+00 +4.031499999999999572e-09 0.000000000000000000e+00 +4.032000000000000139e-09 0.000000000000000000e+00 +4.032499999999999878e-09 0.000000000000000000e+00 +4.032999999999999618e-09 0.000000000000000000e+00 +4.033500000000000185e-09 0.000000000000000000e+00 +4.033999999999999925e-09 0.000000000000000000e+00 +4.034499999999999665e-09 0.000000000000000000e+00 +4.035000000000000232e-09 0.000000000000000000e+00 +4.035499999999999971e-09 0.000000000000000000e+00 +4.035999999999999711e-09 0.000000000000000000e+00 +4.036500000000000278e-09 0.000000000000000000e+00 +4.037000000000000018e-09 0.000000000000000000e+00 +4.037499999999999758e-09 0.000000000000000000e+00 +4.038000000000000325e-09 0.000000000000000000e+00 +4.038500000000000064e-09 0.000000000000000000e+00 +4.038999999999999804e-09 0.000000000000000000e+00 +4.039499999999999544e-09 0.000000000000000000e+00 +4.040000000000000111e-09 0.000000000000000000e+00 +4.040499999999999851e-09 0.000000000000000000e+00 +4.040999999999999591e-09 0.000000000000000000e+00 +4.041500000000000158e-09 0.000000000000000000e+00 +4.041999999999999897e-09 0.000000000000000000e+00 +4.042499999999999637e-09 0.000000000000000000e+00 +4.043000000000000204e-09 0.000000000000000000e+00 +4.043499999999999944e-09 0.000000000000000000e+00 +4.043999999999999684e-09 0.000000000000000000e+00 +4.044500000000000251e-09 0.000000000000000000e+00 +4.044999999999999990e-09 0.000000000000000000e+00 +4.045499999999999730e-09 0.000000000000000000e+00 +4.046000000000000297e-09 0.000000000000000000e+00 +4.046500000000000037e-09 0.000000000000000000e+00 +4.046999999999999777e-09 0.000000000000000000e+00 +4.047499999999999516e-09 0.000000000000000000e+00 +4.048000000000000083e-09 0.000000000000000000e+00 +4.048499999999999823e-09 0.000000000000000000e+00 +4.048999999999999563e-09 0.000000000000000000e+00 +4.049500000000000130e-09 0.000000000000000000e+00 +4.049999999999999870e-09 0.000000000000000000e+00 +4.050499999999999609e-09 0.000000000000000000e+00 +4.051000000000000176e-09 0.000000000000000000e+00 +4.051499999999999916e-09 0.000000000000000000e+00 +4.051999999999999656e-09 0.000000000000000000e+00 +4.052500000000000223e-09 0.000000000000000000e+00 +4.052999999999999963e-09 0.000000000000000000e+00 +4.053499999999999702e-09 0.000000000000000000e+00 +4.054000000000000269e-09 0.000000000000000000e+00 +4.054500000000000009e-09 0.000000000000000000e+00 +4.054999999999999749e-09 0.000000000000000000e+00 +4.055500000000000316e-09 0.000000000000000000e+00 +4.056000000000000056e-09 0.000000000000000000e+00 +4.056499999999999796e-09 0.000000000000000000e+00 +4.056999999999999535e-09 0.000000000000000000e+00 +4.057500000000000102e-09 0.000000000000000000e+00 +4.057999999999999842e-09 0.000000000000000000e+00 +4.058499999999999582e-09 0.000000000000000000e+00 +4.059000000000000149e-09 0.000000000000000000e+00 +4.059499999999999889e-09 0.000000000000000000e+00 +4.059999999999999628e-09 0.000000000000000000e+00 +4.060500000000000195e-09 0.000000000000000000e+00 +4.060999999999999935e-09 0.000000000000000000e+00 +4.061499999999999675e-09 0.000000000000000000e+00 +4.062000000000000242e-09 0.000000000000000000e+00 +4.062499999999999982e-09 0.000000000000000000e+00 +4.062999999999999721e-09 0.000000000000000000e+00 +4.063500000000000288e-09 0.000000000000000000e+00 +4.064000000000000028e-09 0.000000000000000000e+00 +4.064499999999999768e-09 0.000000000000000000e+00 +4.064999999999999508e-09 0.000000000000000000e+00 +4.065500000000000075e-09 0.000000000000000000e+00 +4.065999999999999814e-09 0.000000000000000000e+00 +4.066499999999999554e-09 0.000000000000000000e+00 +4.067000000000000121e-09 0.000000000000000000e+00 +4.067499999999999861e-09 0.000000000000000000e+00 +4.067999999999999601e-09 0.000000000000000000e+00 +4.068500000000000168e-09 0.000000000000000000e+00 +4.068999999999999907e-09 0.000000000000000000e+00 +4.069499999999999647e-09 0.000000000000000000e+00 +4.070000000000000214e-09 0.000000000000000000e+00 +4.070499999999999954e-09 0.000000000000000000e+00 +4.070999999999999694e-09 0.000000000000000000e+00 +4.071500000000000261e-09 0.000000000000000000e+00 +4.072000000000000000e-09 0.000000000000000000e+00 +4.072499999999999740e-09 0.000000000000000000e+00 +4.073000000000000307e-09 0.000000000000000000e+00 +4.073500000000000047e-09 0.000000000000000000e+00 +4.073999999999999787e-09 0.000000000000000000e+00 +4.074499999999999527e-09 0.000000000000000000e+00 +4.075000000000000094e-09 0.000000000000000000e+00 +4.075499999999999833e-09 0.000000000000000000e+00 +4.075999999999999573e-09 0.000000000000000000e+00 +4.076500000000000140e-09 0.000000000000000000e+00 +4.076999999999999880e-09 0.000000000000000000e+00 +4.077499999999999620e-09 0.000000000000000000e+00 +4.078000000000000187e-09 0.000000000000000000e+00 +4.078499999999999926e-09 0.000000000000000000e+00 +4.078999999999999666e-09 0.000000000000000000e+00 +4.079500000000000233e-09 0.000000000000000000e+00 +4.079999999999999973e-09 0.000000000000000000e+00 +4.080499999999999713e-09 0.000000000000000000e+00 +4.081000000000000280e-09 0.000000000000000000e+00 +4.081500000000000019e-09 0.000000000000000000e+00 +4.081999999999999759e-09 0.000000000000000000e+00 +4.082500000000000326e-09 0.000000000000000000e+00 +4.083000000000000066e-09 0.000000000000000000e+00 +4.083499999999999806e-09 0.000000000000000000e+00 +4.083999999999999545e-09 0.000000000000000000e+00 +4.084500000000000112e-09 0.000000000000000000e+00 +4.084999999999999852e-09 0.000000000000000000e+00 +4.085499999999999592e-09 0.000000000000000000e+00 +4.086000000000000159e-09 0.000000000000000000e+00 +4.086499999999999899e-09 0.000000000000000000e+00 +4.086999999999999639e-09 0.000000000000000000e+00 +4.087500000000000205e-09 0.000000000000000000e+00 +4.087999999999999945e-09 0.000000000000000000e+00 +4.088499999999999685e-09 0.000000000000000000e+00 +4.089000000000000252e-09 0.000000000000000000e+00 +4.089499999999999992e-09 0.000000000000000000e+00 +4.089999999999999732e-09 0.000000000000000000e+00 +4.090500000000000299e-09 0.000000000000000000e+00 +4.091000000000000038e-09 0.000000000000000000e+00 +4.091499999999999778e-09 0.000000000000000000e+00 +4.091999999999999518e-09 0.000000000000000000e+00 +4.092500000000000085e-09 0.000000000000000000e+00 +4.092999999999999825e-09 0.000000000000000000e+00 +4.093499999999999564e-09 0.000000000000000000e+00 +4.094000000000000131e-09 0.000000000000000000e+00 +4.094499999999999871e-09 0.000000000000000000e+00 +4.094999999999999611e-09 0.000000000000000000e+00 +4.095500000000000178e-09 0.000000000000000000e+00 +4.095999999999999918e-09 0.000000000000000000e+00 +4.096499999999999657e-09 0.000000000000000000e+00 +4.097000000000000224e-09 0.000000000000000000e+00 +4.097499999999999964e-09 0.000000000000000000e+00 +4.097999999999999704e-09 0.000000000000000000e+00 +4.098500000000000271e-09 0.000000000000000000e+00 +4.099000000000000011e-09 0.000000000000000000e+00 +4.099499999999999750e-09 0.000000000000000000e+00 +4.100000000000000317e-09 0.000000000000000000e+00 +4.100500000000000057e-09 0.000000000000000000e+00 +4.100999999999999797e-09 0.000000000000000000e+00 +4.101499999999999537e-09 0.000000000000000000e+00 +4.102000000000000104e-09 0.000000000000000000e+00 +4.102499999999999843e-09 0.000000000000000000e+00 +4.102999999999999583e-09 0.000000000000000000e+00 +4.103500000000000150e-09 0.000000000000000000e+00 +4.103999999999999890e-09 0.000000000000000000e+00 +4.104499999999999630e-09 0.000000000000000000e+00 +4.105000000000000197e-09 0.000000000000000000e+00 +4.105499999999999937e-09 0.000000000000000000e+00 +4.105999999999999676e-09 0.000000000000000000e+00 +4.106500000000000243e-09 0.000000000000000000e+00 +4.106999999999999983e-09 0.000000000000000000e+00 +4.107499999999999723e-09 0.000000000000000000e+00 +4.108000000000000290e-09 0.000000000000000000e+00 +4.108500000000000030e-09 0.000000000000000000e+00 +4.108999999999999769e-09 0.000000000000000000e+00 +4.109499999999999509e-09 0.000000000000000000e+00 +4.110000000000000076e-09 0.000000000000000000e+00 +4.110499999999999816e-09 0.000000000000000000e+00 +4.110999999999999556e-09 0.000000000000000000e+00 +4.111500000000000123e-09 0.000000000000000000e+00 +4.111999999999999862e-09 0.000000000000000000e+00 +4.112499999999999602e-09 0.000000000000000000e+00 +4.113000000000000169e-09 0.000000000000000000e+00 +4.113499999999999909e-09 0.000000000000000000e+00 +4.113999999999999649e-09 0.000000000000000000e+00 +4.114500000000000216e-09 0.000000000000000000e+00 +4.114999999999999955e-09 0.000000000000000000e+00 +4.115499999999999695e-09 0.000000000000000000e+00 +4.116000000000000262e-09 0.000000000000000000e+00 +4.116500000000000002e-09 0.000000000000000000e+00 +4.116999999999999742e-09 0.000000000000000000e+00 +4.117500000000000309e-09 0.000000000000000000e+00 +4.118000000000000048e-09 0.000000000000000000e+00 +4.118499999999999788e-09 0.000000000000000000e+00 +4.118999999999999528e-09 0.000000000000000000e+00 +4.119500000000000095e-09 0.000000000000000000e+00 +4.119999999999999835e-09 0.000000000000000000e+00 +4.120499999999999575e-09 0.000000000000000000e+00 +4.121000000000000141e-09 0.000000000000000000e+00 +4.121499999999999881e-09 0.000000000000000000e+00 +4.121999999999999621e-09 0.000000000000000000e+00 +4.122500000000000188e-09 0.000000000000000000e+00 +4.122999999999999928e-09 0.000000000000000000e+00 +4.123499999999999668e-09 0.000000000000000000e+00 +4.124000000000000235e-09 0.000000000000000000e+00 +4.124499999999999974e-09 0.000000000000000000e+00 +4.124999999999999714e-09 0.000000000000000000e+00 +4.125500000000000281e-09 0.000000000000000000e+00 +4.126000000000000021e-09 0.000000000000000000e+00 +4.126499999999999761e-09 0.000000000000000000e+00 +4.127000000000000328e-09 0.000000000000000000e+00 +4.127500000000000067e-09 0.000000000000000000e+00 +4.127999999999999807e-09 0.000000000000000000e+00 +4.128499999999999547e-09 0.000000000000000000e+00 +4.129000000000000114e-09 0.000000000000000000e+00 +4.129499999999999854e-09 0.000000000000000000e+00 +4.129999999999999593e-09 0.000000000000000000e+00 +4.130500000000000160e-09 0.000000000000000000e+00 +4.130999999999999900e-09 0.000000000000000000e+00 +4.131499999999999640e-09 0.000000000000000000e+00 +4.132000000000000207e-09 0.000000000000000000e+00 +4.132499999999999947e-09 0.000000000000000000e+00 +4.132999999999999686e-09 0.000000000000000000e+00 +4.133500000000000253e-09 0.000000000000000000e+00 +4.133999999999999993e-09 0.000000000000000000e+00 +4.134499999999999733e-09 0.000000000000000000e+00 +4.135000000000000300e-09 0.000000000000000000e+00 +4.135500000000000040e-09 0.000000000000000000e+00 +4.135999999999999779e-09 0.000000000000000000e+00 +4.136499999999999519e-09 0.000000000000000000e+00 +4.137000000000000086e-09 0.000000000000000000e+00 +4.137499999999999826e-09 0.000000000000000000e+00 +4.137999999999999566e-09 0.000000000000000000e+00 +4.138500000000000133e-09 0.000000000000000000e+00 +4.138999999999999873e-09 0.000000000000000000e+00 +4.139499999999999612e-09 0.000000000000000000e+00 +4.140000000000000179e-09 0.000000000000000000e+00 +4.140499999999999919e-09 0.000000000000000000e+00 +4.140999999999999659e-09 0.000000000000000000e+00 +4.141500000000000226e-09 0.000000000000000000e+00 +4.141999999999999966e-09 0.000000000000000000e+00 +4.142499999999999705e-09 0.000000000000000000e+00 +4.143000000000000272e-09 0.000000000000000000e+00 +4.143500000000000012e-09 0.000000000000000000e+00 +4.143999999999999752e-09 0.000000000000000000e+00 +4.144500000000000319e-09 0.000000000000000000e+00 +4.145000000000000059e-09 0.000000000000000000e+00 +4.145499999999999798e-09 0.000000000000000000e+00 +4.145999999999999538e-09 0.000000000000000000e+00 +4.146500000000000105e-09 0.000000000000000000e+00 +4.146999999999999845e-09 0.000000000000000000e+00 +4.147499999999999585e-09 0.000000000000000000e+00 +4.148000000000000152e-09 0.000000000000000000e+00 +4.148499999999999891e-09 0.000000000000000000e+00 +4.148999999999999631e-09 0.000000000000000000e+00 +4.149500000000000198e-09 0.000000000000000000e+00 +4.149999999999999938e-09 0.000000000000000000e+00 +4.150499999999999678e-09 0.000000000000000000e+00 +4.151000000000000245e-09 0.000000000000000000e+00 +4.151499999999999984e-09 0.000000000000000000e+00 +4.151999999999999724e-09 0.000000000000000000e+00 +4.152500000000000291e-09 0.000000000000000000e+00 +4.153000000000000031e-09 0.000000000000000000e+00 +4.153499999999999771e-09 0.000000000000000000e+00 +4.153999999999999511e-09 0.000000000000000000e+00 +4.154500000000000077e-09 0.000000000000000000e+00 +4.154999999999999817e-09 0.000000000000000000e+00 +4.155499999999999557e-09 0.000000000000000000e+00 +4.156000000000000124e-09 0.000000000000000000e+00 +4.156499999999999864e-09 0.000000000000000000e+00 +4.156999999999999604e-09 0.000000000000000000e+00 +4.157500000000000171e-09 0.000000000000000000e+00 +4.157999999999999910e-09 0.000000000000000000e+00 +4.158499999999999650e-09 0.000000000000000000e+00 +4.159000000000000217e-09 0.000000000000000000e+00 +4.159499999999999957e-09 0.000000000000000000e+00 +4.159999999999999697e-09 0.000000000000000000e+00 +4.160500000000000264e-09 0.000000000000000000e+00 +4.161000000000000003e-09 0.000000000000000000e+00 +4.161499999999999743e-09 0.000000000000000000e+00 +4.162000000000000310e-09 0.000000000000000000e+00 +4.162500000000000050e-09 0.000000000000000000e+00 +4.162999999999999790e-09 0.000000000000000000e+00 +4.163499999999999529e-09 0.000000000000000000e+00 +4.164000000000000096e-09 0.000000000000000000e+00 +4.164499999999999836e-09 0.000000000000000000e+00 +4.164999999999999576e-09 0.000000000000000000e+00 +4.165500000000000143e-09 0.000000000000000000e+00 +4.165999999999999883e-09 0.000000000000000000e+00 +4.166499999999999622e-09 0.000000000000000000e+00 +4.167000000000000189e-09 0.000000000000000000e+00 +4.167499999999999929e-09 0.000000000000000000e+00 +4.167999999999999669e-09 0.000000000000000000e+00 +4.168500000000000236e-09 0.000000000000000000e+00 +4.168999999999999976e-09 0.000000000000000000e+00 +4.169499999999999716e-09 0.000000000000000000e+00 +4.170000000000000282e-09 0.000000000000000000e+00 +4.170500000000000022e-09 0.000000000000000000e+00 +4.170999999999999762e-09 0.000000000000000000e+00 +4.171500000000000329e-09 0.000000000000000000e+00 +4.172000000000000069e-09 0.000000000000000000e+00 +4.172499999999999809e-09 0.000000000000000000e+00 +4.172999999999999548e-09 0.000000000000000000e+00 +4.173500000000000115e-09 0.000000000000000000e+00 +4.173999999999999855e-09 0.000000000000000000e+00 +4.174499999999999595e-09 0.000000000000000000e+00 +4.175000000000000162e-09 0.000000000000000000e+00 +4.175499999999999902e-09 0.000000000000000000e+00 +4.175999999999999641e-09 0.000000000000000000e+00 +4.176500000000000208e-09 0.000000000000000000e+00 +4.176999999999999948e-09 0.000000000000000000e+00 +4.177499999999999688e-09 0.000000000000000000e+00 +4.178000000000000255e-09 0.000000000000000000e+00 +4.178499999999999995e-09 0.000000000000000000e+00 +4.178999999999999734e-09 0.000000000000000000e+00 +4.179500000000000301e-09 0.000000000000000000e+00 +4.180000000000000041e-09 0.000000000000000000e+00 +4.180499999999999781e-09 0.000000000000000000e+00 +4.180999999999999521e-09 0.000000000000000000e+00 +4.181500000000000088e-09 0.000000000000000000e+00 +4.181999999999999827e-09 0.000000000000000000e+00 +4.182499999999999567e-09 0.000000000000000000e+00 +4.183000000000000134e-09 0.000000000000000000e+00 +4.183499999999999874e-09 0.000000000000000000e+00 +4.183999999999999614e-09 0.000000000000000000e+00 +4.184500000000000181e-09 0.000000000000000000e+00 +4.184999999999999920e-09 0.000000000000000000e+00 +4.185499999999999660e-09 0.000000000000000000e+00 +4.186000000000000227e-09 0.000000000000000000e+00 +4.186499999999999967e-09 0.000000000000000000e+00 +4.186999999999999707e-09 0.000000000000000000e+00 +4.187500000000000274e-09 0.000000000000000000e+00 +4.188000000000000014e-09 0.000000000000000000e+00 +4.188499999999999753e-09 0.000000000000000000e+00 +4.189000000000000320e-09 0.000000000000000000e+00 +4.189500000000000060e-09 0.000000000000000000e+00 +4.189999999999999800e-09 0.000000000000000000e+00 +4.190499999999999540e-09 0.000000000000000000e+00 +4.191000000000000107e-09 0.000000000000000000e+00 +4.191499999999999846e-09 0.000000000000000000e+00 +4.191999999999999586e-09 0.000000000000000000e+00 +4.192500000000000153e-09 0.000000000000000000e+00 +4.192999999999999893e-09 0.000000000000000000e+00 +4.193499999999999633e-09 0.000000000000000000e+00 +4.194000000000000200e-09 0.000000000000000000e+00 +4.194499999999999939e-09 0.000000000000000000e+00 +4.194999999999999679e-09 0.000000000000000000e+00 +4.195500000000000246e-09 0.000000000000000000e+00 +4.195999999999999986e-09 0.000000000000000000e+00 +4.196499999999999726e-09 0.000000000000000000e+00 +4.197000000000000293e-09 0.000000000000000000e+00 +4.197500000000000032e-09 0.000000000000000000e+00 +4.197999999999999772e-09 0.000000000000000000e+00 +4.198499999999999512e-09 0.000000000000000000e+00 +4.199000000000000079e-09 0.000000000000000000e+00 +4.199499999999999819e-09 0.000000000000000000e+00 +4.199999999999999558e-09 0.000000000000000000e+00 +4.200500000000000125e-09 0.000000000000000000e+00 +4.200999999999999865e-09 0.000000000000000000e+00 +4.201499999999999605e-09 0.000000000000000000e+00 +4.202000000000000172e-09 0.000000000000000000e+00 +4.202499999999999912e-09 0.000000000000000000e+00 +4.202999999999999652e-09 0.000000000000000000e+00 +4.203500000000000218e-09 0.000000000000000000e+00 +4.203999999999999958e-09 0.000000000000000000e+00 +4.204499999999999698e-09 0.000000000000000000e+00 +4.205000000000000265e-09 0.000000000000000000e+00 +4.205500000000000005e-09 0.000000000000000000e+00 +4.205999999999999745e-09 0.000000000000000000e+00 +4.206500000000000312e-09 0.000000000000000000e+00 +4.207000000000000051e-09 0.000000000000000000e+00 +4.207499999999999791e-09 0.000000000000000000e+00 +4.207999999999999531e-09 0.000000000000000000e+00 +4.208500000000000098e-09 0.000000000000000000e+00 +4.208999999999999838e-09 0.000000000000000000e+00 +4.209499999999999577e-09 0.000000000000000000e+00 +4.210000000000000144e-09 0.000000000000000000e+00 +4.210499999999999884e-09 0.000000000000000000e+00 +4.210999999999999624e-09 0.000000000000000000e+00 +4.211500000000000191e-09 0.000000000000000000e+00 +4.211999999999999931e-09 0.000000000000000000e+00 +4.212499999999999670e-09 0.000000000000000000e+00 +4.213000000000000237e-09 0.000000000000000000e+00 +4.213499999999999977e-09 0.000000000000000000e+00 +4.213999999999999717e-09 0.000000000000000000e+00 +4.214500000000000284e-09 0.000000000000000000e+00 +4.215000000000000024e-09 0.000000000000000000e+00 +4.215499999999999763e-09 0.000000000000000000e+00 +4.215999999999999503e-09 0.000000000000000000e+00 +4.216500000000000070e-09 0.000000000000000000e+00 +4.216999999999999810e-09 0.000000000000000000e+00 +4.217499999999999550e-09 0.000000000000000000e+00 +4.218000000000000117e-09 0.000000000000000000e+00 +4.218499999999999856e-09 0.000000000000000000e+00 +4.218999999999999596e-09 0.000000000000000000e+00 +4.219500000000000163e-09 0.000000000000000000e+00 +4.219999999999999903e-09 0.000000000000000000e+00 +4.220499999999999643e-09 0.000000000000000000e+00 +4.221000000000000210e-09 0.000000000000000000e+00 +4.221499999999999950e-09 0.000000000000000000e+00 +4.221999999999999689e-09 0.000000000000000000e+00 +4.222500000000000256e-09 0.000000000000000000e+00 +4.222999999999999996e-09 0.000000000000000000e+00 +4.223499999999999736e-09 0.000000000000000000e+00 +4.224000000000000303e-09 0.000000000000000000e+00 +4.224500000000000043e-09 0.000000000000000000e+00 +4.224999999999999782e-09 0.000000000000000000e+00 +4.225499999999999522e-09 0.000000000000000000e+00 +4.226000000000000089e-09 0.000000000000000000e+00 +4.226499999999999829e-09 0.000000000000000000e+00 +4.226999999999999569e-09 0.000000000000000000e+00 +4.227500000000000136e-09 0.000000000000000000e+00 +4.227999999999999875e-09 0.000000000000000000e+00 +4.228499999999999615e-09 0.000000000000000000e+00 +4.229000000000000182e-09 0.000000000000000000e+00 +4.229499999999999922e-09 0.000000000000000000e+00 +4.229999999999999662e-09 0.000000000000000000e+00 +4.230500000000000229e-09 0.000000000000000000e+00 +4.230999999999999968e-09 0.000000000000000000e+00 +4.231499999999999708e-09 0.000000000000000000e+00 +4.232000000000000275e-09 0.000000000000000000e+00 +4.232500000000000015e-09 0.000000000000000000e+00 +4.232999999999999755e-09 0.000000000000000000e+00 +4.233500000000000322e-09 0.000000000000000000e+00 +4.234000000000000061e-09 0.000000000000000000e+00 +4.234499999999999801e-09 0.000000000000000000e+00 +4.234999999999999541e-09 0.000000000000000000e+00 +4.235500000000000108e-09 0.000000000000000000e+00 +4.235999999999999848e-09 0.000000000000000000e+00 +4.236499999999999588e-09 0.000000000000000000e+00 +4.237000000000000154e-09 0.000000000000000000e+00 +4.237499999999999894e-09 0.000000000000000000e+00 +4.237999999999999634e-09 0.000000000000000000e+00 +4.238500000000000201e-09 0.000000000000000000e+00 +4.238999999999999941e-09 0.000000000000000000e+00 +4.239499999999999681e-09 0.000000000000000000e+00 +4.240000000000000248e-09 0.000000000000000000e+00 +4.240499999999999987e-09 0.000000000000000000e+00 +4.240999999999999727e-09 0.000000000000000000e+00 +4.241500000000000294e-09 0.000000000000000000e+00 +4.242000000000000034e-09 0.000000000000000000e+00 +4.242499999999999774e-09 0.000000000000000000e+00 +4.242999999999999513e-09 0.000000000000000000e+00 +4.243500000000000080e-09 0.000000000000000000e+00 +4.243999999999999820e-09 0.000000000000000000e+00 +4.244499999999999560e-09 0.000000000000000000e+00 +4.245000000000000127e-09 0.000000000000000000e+00 +4.245499999999999867e-09 0.000000000000000000e+00 +4.245999999999999606e-09 0.000000000000000000e+00 +4.246500000000000173e-09 0.000000000000000000e+00 +4.246999999999999913e-09 0.000000000000000000e+00 +4.247499999999999653e-09 0.000000000000000000e+00 +4.248000000000000220e-09 0.000000000000000000e+00 +4.248499999999999960e-09 0.000000000000000000e+00 +4.248999999999999699e-09 0.000000000000000000e+00 +4.249500000000000266e-09 0.000000000000000000e+00 +4.250000000000000006e-09 0.000000000000000000e+00 +4.250499999999999746e-09 0.000000000000000000e+00 +4.251000000000000313e-09 0.000000000000000000e+00 +4.251500000000000053e-09 0.000000000000000000e+00 +4.251999999999999793e-09 0.000000000000000000e+00 +4.252499999999999532e-09 0.000000000000000000e+00 +4.253000000000000099e-09 0.000000000000000000e+00 +4.253499999999999839e-09 0.000000000000000000e+00 +4.253999999999999579e-09 0.000000000000000000e+00 +4.254500000000000146e-09 0.000000000000000000e+00 +4.254999999999999886e-09 0.000000000000000000e+00 +4.255499999999999625e-09 0.000000000000000000e+00 +4.256000000000000192e-09 0.000000000000000000e+00 +4.256499999999999932e-09 0.000000000000000000e+00 +4.256999999999999672e-09 0.000000000000000000e+00 +4.257500000000000239e-09 0.000000000000000000e+00 +4.257999999999999979e-09 0.000000000000000000e+00 +4.258499999999999718e-09 0.000000000000000000e+00 +4.259000000000000285e-09 0.000000000000000000e+00 +4.259500000000000025e-09 0.000000000000000000e+00 +4.259999999999999765e-09 0.000000000000000000e+00 +4.260499999999999505e-09 0.000000000000000000e+00 +4.261000000000000072e-09 0.000000000000000000e+00 +4.261499999999999811e-09 0.000000000000000000e+00 +4.261999999999999551e-09 0.000000000000000000e+00 +4.262500000000000118e-09 0.000000000000000000e+00 +4.262999999999999858e-09 0.000000000000000000e+00 +4.263499999999999598e-09 0.000000000000000000e+00 +4.264000000000000165e-09 0.000000000000000000e+00 +4.264499999999999904e-09 0.000000000000000000e+00 +4.264999999999999644e-09 0.000000000000000000e+00 +4.265500000000000211e-09 0.000000000000000000e+00 +4.265999999999999951e-09 0.000000000000000000e+00 +4.266499999999999691e-09 0.000000000000000000e+00 +4.267000000000000258e-09 0.000000000000000000e+00 +4.267499999999999997e-09 0.000000000000000000e+00 +4.267999999999999737e-09 0.000000000000000000e+00 +4.268500000000000304e-09 0.000000000000000000e+00 +4.269000000000000044e-09 0.000000000000000000e+00 +4.269499999999999784e-09 0.000000000000000000e+00 +4.269999999999999524e-09 0.000000000000000000e+00 +4.270500000000000091e-09 0.000000000000000000e+00 +4.270999999999999830e-09 0.000000000000000000e+00 +4.271499999999999570e-09 0.000000000000000000e+00 +4.272000000000000137e-09 0.000000000000000000e+00 +4.272499999999999877e-09 0.000000000000000000e+00 +4.272999999999999617e-09 0.000000000000000000e+00 +4.273500000000000184e-09 0.000000000000000000e+00 +4.273999999999999923e-09 0.000000000000000000e+00 +4.274499999999999663e-09 0.000000000000000000e+00 +4.275000000000000230e-09 0.000000000000000000e+00 +4.275499999999999970e-09 0.000000000000000000e+00 +4.275999999999999710e-09 0.000000000000000000e+00 +4.276500000000000277e-09 0.000000000000000000e+00 +4.277000000000000016e-09 0.000000000000000000e+00 +4.277499999999999756e-09 0.000000000000000000e+00 +4.278000000000000323e-09 0.000000000000000000e+00 +4.278500000000000063e-09 0.000000000000000000e+00 +4.278999999999999803e-09 0.000000000000000000e+00 +4.279499999999999542e-09 0.000000000000000000e+00 +4.280000000000000109e-09 0.000000000000000000e+00 +4.280499999999999849e-09 0.000000000000000000e+00 +4.280999999999999589e-09 0.000000000000000000e+00 +4.281500000000000156e-09 0.000000000000000000e+00 +4.281999999999999896e-09 0.000000000000000000e+00 +4.282499999999999635e-09 0.000000000000000000e+00 +4.283000000000000202e-09 0.000000000000000000e+00 +4.283499999999999942e-09 0.000000000000000000e+00 +4.283999999999999682e-09 0.000000000000000000e+00 +4.284500000000000249e-09 0.000000000000000000e+00 +4.284999999999999989e-09 0.000000000000000000e+00 +4.285499999999999729e-09 0.000000000000000000e+00 +4.286000000000000295e-09 0.000000000000000000e+00 +4.286500000000000035e-09 0.000000000000000000e+00 +4.286999999999999775e-09 0.000000000000000000e+00 +4.287499999999999515e-09 0.000000000000000000e+00 +4.288000000000000082e-09 0.000000000000000000e+00 +4.288499999999999822e-09 0.000000000000000000e+00 +4.288999999999999561e-09 0.000000000000000000e+00 +4.289500000000000128e-09 0.000000000000000000e+00 +4.289999999999999868e-09 0.000000000000000000e+00 +4.290499999999999608e-09 0.000000000000000000e+00 +4.291000000000000175e-09 0.000000000000000000e+00 +4.291499999999999915e-09 0.000000000000000000e+00 +4.291999999999999654e-09 0.000000000000000000e+00 +4.292500000000000221e-09 0.000000000000000000e+00 +4.292999999999999961e-09 0.000000000000000000e+00 +4.293499999999999701e-09 0.000000000000000000e+00 +4.294000000000000268e-09 0.000000000000000000e+00 +4.294500000000000008e-09 0.000000000000000000e+00 +4.294999999999999747e-09 0.000000000000000000e+00 +4.295500000000000314e-09 0.000000000000000000e+00 +4.296000000000000054e-09 0.000000000000000000e+00 +4.296499999999999794e-09 0.000000000000000000e+00 +4.296999999999999534e-09 0.000000000000000000e+00 +4.297500000000000101e-09 0.000000000000000000e+00 +4.297999999999999840e-09 0.000000000000000000e+00 +4.298499999999999580e-09 0.000000000000000000e+00 +4.299000000000000147e-09 0.000000000000000000e+00 +4.299499999999999887e-09 0.000000000000000000e+00 +4.299999999999999627e-09 0.000000000000000000e+00 +4.300500000000000194e-09 0.000000000000000000e+00 +4.300999999999999933e-09 0.000000000000000000e+00 +4.301499999999999673e-09 0.000000000000000000e+00 +4.302000000000000240e-09 0.000000000000000000e+00 +4.302499999999999980e-09 0.000000000000000000e+00 +4.302999999999999720e-09 0.000000000000000000e+00 +4.303500000000000287e-09 0.000000000000000000e+00 +4.304000000000000027e-09 0.000000000000000000e+00 +4.304499999999999766e-09 0.000000000000000000e+00 +4.304999999999999506e-09 0.000000000000000000e+00 +4.305500000000000073e-09 0.000000000000000000e+00 +4.305999999999999813e-09 0.000000000000000000e+00 +4.306499999999999553e-09 0.000000000000000000e+00 +4.307000000000000120e-09 0.000000000000000000e+00 +4.307499999999999859e-09 0.000000000000000000e+00 +4.307999999999999599e-09 0.000000000000000000e+00 +4.308500000000000166e-09 0.000000000000000000e+00 +4.308999999999999906e-09 0.000000000000000000e+00 +4.309499999999999646e-09 0.000000000000000000e+00 +4.310000000000000213e-09 0.000000000000000000e+00 +4.310499999999999952e-09 0.000000000000000000e+00 +4.310999999999999692e-09 0.000000000000000000e+00 +4.311500000000000259e-09 0.000000000000000000e+00 +4.311999999999999999e-09 0.000000000000000000e+00 +4.312499999999999739e-09 0.000000000000000000e+00 +4.313000000000000306e-09 0.000000000000000000e+00 +4.313500000000000045e-09 0.000000000000000000e+00 +4.313999999999999785e-09 0.000000000000000000e+00 +4.314499999999999525e-09 0.000000000000000000e+00 +4.315000000000000092e-09 0.000000000000000000e+00 +4.315499999999999832e-09 0.000000000000000000e+00 +4.315999999999999571e-09 0.000000000000000000e+00 +4.316500000000000138e-09 0.000000000000000000e+00 +4.316999999999999878e-09 0.000000000000000000e+00 +4.317499999999999618e-09 0.000000000000000000e+00 +4.318000000000000185e-09 0.000000000000000000e+00 +4.318499999999999925e-09 0.000000000000000000e+00 +4.318999999999999665e-09 0.000000000000000000e+00 +4.319500000000000231e-09 0.000000000000000000e+00 +4.319999999999999971e-09 0.000000000000000000e+00 +4.320499999999999711e-09 0.000000000000000000e+00 +4.321000000000000278e-09 0.000000000000000000e+00 +4.321500000000000018e-09 0.000000000000000000e+00 +4.321999999999999758e-09 0.000000000000000000e+00 +4.322500000000000325e-09 0.000000000000000000e+00 +4.323000000000000064e-09 0.000000000000000000e+00 +4.323499999999999804e-09 0.000000000000000000e+00 +4.323999999999999544e-09 0.000000000000000000e+00 +4.324500000000000111e-09 0.000000000000000000e+00 +4.324999999999999851e-09 0.000000000000000000e+00 +4.325499999999999590e-09 0.000000000000000000e+00 +4.326000000000000157e-09 0.000000000000000000e+00 +4.326499999999999897e-09 0.000000000000000000e+00 +4.326999999999999637e-09 0.000000000000000000e+00 +4.327500000000000204e-09 0.000000000000000000e+00 +4.327999999999999944e-09 0.000000000000000000e+00 +4.328499999999999683e-09 0.000000000000000000e+00 +4.329000000000000250e-09 0.000000000000000000e+00 +4.329499999999999990e-09 0.000000000000000000e+00 +4.329999999999999730e-09 0.000000000000000000e+00 +4.330500000000000297e-09 0.000000000000000000e+00 +4.331000000000000037e-09 0.000000000000000000e+00 +4.331499999999999776e-09 0.000000000000000000e+00 +4.331999999999999516e-09 0.000000000000000000e+00 +4.332500000000000083e-09 0.000000000000000000e+00 +4.332999999999999823e-09 0.000000000000000000e+00 +4.333499999999999563e-09 0.000000000000000000e+00 +4.334000000000000130e-09 0.000000000000000000e+00 +4.334499999999999870e-09 0.000000000000000000e+00 +4.334999999999999609e-09 0.000000000000000000e+00 +4.335500000000000176e-09 0.000000000000000000e+00 +4.335999999999999916e-09 0.000000000000000000e+00 +4.336499999999999656e-09 0.000000000000000000e+00 +4.337000000000000223e-09 0.000000000000000000e+00 +4.337499999999999963e-09 0.000000000000000000e+00 +4.337999999999999702e-09 0.000000000000000000e+00 +4.338500000000000269e-09 0.000000000000000000e+00 +4.339000000000000009e-09 0.000000000000000000e+00 +4.339499999999999749e-09 0.000000000000000000e+00 +4.340000000000000316e-09 0.000000000000000000e+00 +4.340500000000000056e-09 0.000000000000000000e+00 +4.340999999999999795e-09 0.000000000000000000e+00 +4.341499999999999535e-09 0.000000000000000000e+00 +4.342000000000000102e-09 0.000000000000000000e+00 +4.342499999999999842e-09 0.000000000000000000e+00 +4.342999999999999582e-09 0.000000000000000000e+00 +4.343500000000000149e-09 0.000000000000000000e+00 +4.343999999999999888e-09 0.000000000000000000e+00 +4.344499999999999628e-09 0.000000000000000000e+00 +4.345000000000000195e-09 0.000000000000000000e+00 +4.345499999999999935e-09 0.000000000000000000e+00 +4.345999999999999675e-09 0.000000000000000000e+00 +4.346500000000000242e-09 0.000000000000000000e+00 +4.346999999999999981e-09 0.000000000000000000e+00 +4.347499999999999721e-09 0.000000000000000000e+00 +4.348000000000000288e-09 0.000000000000000000e+00 +4.348500000000000028e-09 0.000000000000000000e+00 +4.348999999999999768e-09 0.000000000000000000e+00 +4.349499999999999508e-09 0.000000000000000000e+00 +4.350000000000000074e-09 0.000000000000000000e+00 +4.350499999999999814e-09 0.000000000000000000e+00 +4.350999999999999554e-09 0.000000000000000000e+00 +4.351500000000000121e-09 0.000000000000000000e+00 +4.351999999999999861e-09 0.000000000000000000e+00 +4.352499999999999601e-09 0.000000000000000000e+00 +4.353000000000000168e-09 0.000000000000000000e+00 +4.353499999999999907e-09 0.000000000000000000e+00 +4.353999999999999647e-09 0.000000000000000000e+00 +4.354500000000000214e-09 0.000000000000000000e+00 +4.354999999999999954e-09 0.000000000000000000e+00 +4.355499999999999694e-09 0.000000000000000000e+00 +4.356000000000000261e-09 0.000000000000000000e+00 +4.356500000000000000e-09 0.000000000000000000e+00 +4.356999999999999740e-09 0.000000000000000000e+00 +4.357500000000000307e-09 0.000000000000000000e+00 +4.358000000000000047e-09 0.000000000000000000e+00 +4.358499999999999787e-09 0.000000000000000000e+00 +4.358999999999999526e-09 0.000000000000000000e+00 +4.359500000000000093e-09 0.000000000000000000e+00 +4.359999999999999833e-09 0.000000000000000000e+00 +4.360499999999999573e-09 0.000000000000000000e+00 +4.361000000000000140e-09 0.000000000000000000e+00 +4.361499999999999880e-09 0.000000000000000000e+00 +4.361999999999999619e-09 0.000000000000000000e+00 +4.362500000000000186e-09 0.000000000000000000e+00 +4.362999999999999926e-09 0.000000000000000000e+00 +4.363499999999999666e-09 0.000000000000000000e+00 +4.364000000000000233e-09 0.000000000000000000e+00 +4.364499999999999973e-09 0.000000000000000000e+00 +4.364999999999999712e-09 0.000000000000000000e+00 +4.365500000000000279e-09 0.000000000000000000e+00 +4.366000000000000019e-09 0.000000000000000000e+00 +4.366499999999999759e-09 0.000000000000000000e+00 +4.366999999999999499e-09 0.000000000000000000e+00 +4.367500000000000066e-09 0.000000000000000000e+00 +4.367999999999999806e-09 0.000000000000000000e+00 +4.368499999999999545e-09 0.000000000000000000e+00 +4.369000000000000112e-09 0.000000000000000000e+00 +4.369499999999999852e-09 0.000000000000000000e+00 +4.369999999999999592e-09 0.000000000000000000e+00 +4.370500000000000159e-09 0.000000000000000000e+00 +4.370999999999999899e-09 0.000000000000000000e+00 +4.371499999999999638e-09 0.000000000000000000e+00 +4.372000000000000205e-09 0.000000000000000000e+00 +4.372499999999999945e-09 0.000000000000000000e+00 +4.372999999999999685e-09 0.000000000000000000e+00 +4.373500000000000252e-09 0.000000000000000000e+00 +4.373999999999999992e-09 0.000000000000000000e+00 +4.374499999999999731e-09 0.000000000000000000e+00 +4.375000000000000298e-09 0.000000000000000000e+00 +4.375500000000000038e-09 0.000000000000000000e+00 +4.375999999999999778e-09 0.000000000000000000e+00 +4.376499999999999518e-09 0.000000000000000000e+00 +4.377000000000000085e-09 0.000000000000000000e+00 +4.377499999999999824e-09 0.000000000000000000e+00 +4.377999999999999564e-09 0.000000000000000000e+00 +4.378500000000000131e-09 0.000000000000000000e+00 +4.378999999999999871e-09 0.000000000000000000e+00 +4.379499999999999611e-09 0.000000000000000000e+00 +4.380000000000000178e-09 0.000000000000000000e+00 +4.380499999999999917e-09 0.000000000000000000e+00 +4.380999999999999657e-09 0.000000000000000000e+00 +4.381500000000000224e-09 0.000000000000000000e+00 +4.381999999999999964e-09 0.000000000000000000e+00 +4.382499999999999704e-09 0.000000000000000000e+00 +4.383000000000000271e-09 0.000000000000000000e+00 +4.383500000000000010e-09 0.000000000000000000e+00 +4.383999999999999750e-09 0.000000000000000000e+00 +4.384500000000000317e-09 0.000000000000000000e+00 +4.385000000000000057e-09 0.000000000000000000e+00 +4.385499999999999797e-09 0.000000000000000000e+00 +4.385999999999999537e-09 0.000000000000000000e+00 +4.386500000000000104e-09 0.000000000000000000e+00 +4.386999999999999843e-09 0.000000000000000000e+00 +4.387499999999999583e-09 0.000000000000000000e+00 +4.388000000000000150e-09 0.000000000000000000e+00 +4.388499999999999890e-09 0.000000000000000000e+00 +4.388999999999999630e-09 0.000000000000000000e+00 +4.389500000000000197e-09 0.000000000000000000e+00 +4.389999999999999936e-09 0.000000000000000000e+00 +4.390499999999999676e-09 0.000000000000000000e+00 +4.391000000000000243e-09 0.000000000000000000e+00 +4.391499999999999983e-09 0.000000000000000000e+00 +4.391999999999999723e-09 0.000000000000000000e+00 +4.392500000000000290e-09 0.000000000000000000e+00 +4.393000000000000029e-09 0.000000000000000000e+00 +4.393499999999999769e-09 0.000000000000000000e+00 +4.393999999999999509e-09 0.000000000000000000e+00 +4.394500000000000076e-09 0.000000000000000000e+00 +4.394999999999999816e-09 0.000000000000000000e+00 +4.395499999999999555e-09 0.000000000000000000e+00 +4.396000000000000122e-09 0.000000000000000000e+00 +4.396499999999999862e-09 0.000000000000000000e+00 +4.396999999999999602e-09 0.000000000000000000e+00 +4.397500000000000169e-09 0.000000000000000000e+00 +4.397999999999999909e-09 0.000000000000000000e+00 +4.398499999999999648e-09 0.000000000000000000e+00 +4.399000000000000215e-09 0.000000000000000000e+00 +4.399499999999999955e-09 0.000000000000000000e+00 +4.399999999999999695e-09 0.000000000000000000e+00 +4.400500000000000262e-09 0.000000000000000000e+00 +4.401000000000000002e-09 0.000000000000000000e+00 +4.401499999999999742e-09 0.000000000000000000e+00 +4.402000000000000308e-09 0.000000000000000000e+00 +4.402500000000000048e-09 0.000000000000000000e+00 +4.402999999999999788e-09 0.000000000000000000e+00 +4.403499999999999528e-09 0.000000000000000000e+00 +4.404000000000000095e-09 0.000000000000000000e+00 +4.404499999999999835e-09 0.000000000000000000e+00 +4.404999999999999574e-09 0.000000000000000000e+00 +4.405500000000000141e-09 0.000000000000000000e+00 +4.405999999999999881e-09 0.000000000000000000e+00 +4.406499999999999621e-09 0.000000000000000000e+00 +4.407000000000000188e-09 0.000000000000000000e+00 +4.407499999999999928e-09 0.000000000000000000e+00 +4.407999999999999667e-09 0.000000000000000000e+00 +4.408500000000000234e-09 0.000000000000000000e+00 +4.408999999999999974e-09 0.000000000000000000e+00 +4.409499999999999714e-09 0.000000000000000000e+00 +4.410000000000000281e-09 0.000000000000000000e+00 +4.410500000000000021e-09 0.000000000000000000e+00 +4.410999999999999760e-09 0.000000000000000000e+00 +4.411499999999999500e-09 0.000000000000000000e+00 +4.412000000000000067e-09 0.000000000000000000e+00 +4.412499999999999807e-09 0.000000000000000000e+00 +4.412999999999999547e-09 0.000000000000000000e+00 +4.413500000000000114e-09 0.000000000000000000e+00 +4.413999999999999853e-09 0.000000000000000000e+00 +4.414499999999999593e-09 0.000000000000000000e+00 +4.415000000000000160e-09 0.000000000000000000e+00 +4.415499999999999900e-09 0.000000000000000000e+00 +4.415999999999999640e-09 0.000000000000000000e+00 +4.416500000000000207e-09 0.000000000000000000e+00 +4.416999999999999947e-09 0.000000000000000000e+00 +4.417499999999999686e-09 0.000000000000000000e+00 +4.418000000000000253e-09 0.000000000000000000e+00 +4.418499999999999993e-09 0.000000000000000000e+00 +4.418999999999999733e-09 0.000000000000000000e+00 +4.419500000000000300e-09 0.000000000000000000e+00 +4.420000000000000040e-09 0.000000000000000000e+00 +4.420499999999999779e-09 0.000000000000000000e+00 +4.420999999999999519e-09 0.000000000000000000e+00 +4.421500000000000086e-09 0.000000000000000000e+00 +4.421999999999999826e-09 0.000000000000000000e+00 +4.422499999999999566e-09 0.000000000000000000e+00 +4.423000000000000133e-09 0.000000000000000000e+00 +4.423499999999999872e-09 0.000000000000000000e+00 +4.423999999999999612e-09 0.000000000000000000e+00 +4.424500000000000179e-09 0.000000000000000000e+00 +4.424999999999999919e-09 0.000000000000000000e+00 +4.425499999999999659e-09 0.000000000000000000e+00 +4.426000000000000226e-09 0.000000000000000000e+00 +4.426499999999999965e-09 0.000000000000000000e+00 +4.426999999999999705e-09 0.000000000000000000e+00 +4.427500000000000272e-09 0.000000000000000000e+00 +4.428000000000000012e-09 0.000000000000000000e+00 +4.428499999999999752e-09 0.000000000000000000e+00 +4.429000000000000319e-09 0.000000000000000000e+00 +4.429500000000000058e-09 0.000000000000000000e+00 +4.429999999999999798e-09 0.000000000000000000e+00 +4.430499999999999538e-09 0.000000000000000000e+00 +4.431000000000000105e-09 0.000000000000000000e+00 +4.431499999999999845e-09 0.000000000000000000e+00 +4.431999999999999585e-09 0.000000000000000000e+00 +4.432500000000000151e-09 0.000000000000000000e+00 +4.432999999999999891e-09 0.000000000000000000e+00 +4.433499999999999631e-09 0.000000000000000000e+00 +4.434000000000000198e-09 0.000000000000000000e+00 +4.434499999999999938e-09 0.000000000000000000e+00 +4.434999999999999678e-09 0.000000000000000000e+00 +4.435500000000000245e-09 0.000000000000000000e+00 +4.435999999999999984e-09 0.000000000000000000e+00 +4.436499999999999724e-09 0.000000000000000000e+00 +4.437000000000000291e-09 0.000000000000000000e+00 +4.437500000000000031e-09 0.000000000000000000e+00 +4.437999999999999771e-09 0.000000000000000000e+00 +4.438499999999999510e-09 0.000000000000000000e+00 +4.439000000000000077e-09 0.000000000000000000e+00 +4.439499999999999817e-09 0.000000000000000000e+00 +4.439999999999999557e-09 0.000000000000000000e+00 +4.440500000000000124e-09 0.000000000000000000e+00 +4.440999999999999864e-09 0.000000000000000000e+00 +4.441499999999999603e-09 0.000000000000000000e+00 +4.442000000000000170e-09 0.000000000000000000e+00 +4.442499999999999910e-09 0.000000000000000000e+00 +4.442999999999999650e-09 0.000000000000000000e+00 +4.443500000000000217e-09 0.000000000000000000e+00 +4.443999999999999957e-09 0.000000000000000000e+00 +4.444499999999999696e-09 0.000000000000000000e+00 +4.445000000000000263e-09 0.000000000000000000e+00 +4.445500000000000003e-09 0.000000000000000000e+00 +4.445999999999999743e-09 0.000000000000000000e+00 +4.446500000000000310e-09 0.000000000000000000e+00 +4.447000000000000050e-09 0.000000000000000000e+00 +4.447499999999999789e-09 0.000000000000000000e+00 +4.447999999999999529e-09 0.000000000000000000e+00 +4.448500000000000096e-09 0.000000000000000000e+00 +4.448999999999999836e-09 0.000000000000000000e+00 +4.449499999999999576e-09 0.000000000000000000e+00 +4.450000000000000143e-09 0.000000000000000000e+00 +4.450499999999999883e-09 0.000000000000000000e+00 +4.450999999999999622e-09 0.000000000000000000e+00 +4.451500000000000189e-09 0.000000000000000000e+00 +4.451999999999999929e-09 0.000000000000000000e+00 +4.452499999999999669e-09 0.000000000000000000e+00 +4.453000000000000236e-09 0.000000000000000000e+00 +4.453499999999999976e-09 0.000000000000000000e+00 +4.453999999999999715e-09 0.000000000000000000e+00 +4.454500000000000282e-09 0.000000000000000000e+00 +4.455000000000000022e-09 0.000000000000000000e+00 +4.455499999999999762e-09 0.000000000000000000e+00 +4.455999999999999502e-09 0.000000000000000000e+00 +4.456500000000000069e-09 0.000000000000000000e+00 +4.456999999999999808e-09 0.000000000000000000e+00 +4.457499999999999548e-09 0.000000000000000000e+00 +4.458000000000000115e-09 0.000000000000000000e+00 +4.458499999999999855e-09 0.000000000000000000e+00 +4.458999999999999595e-09 0.000000000000000000e+00 +4.459500000000000162e-09 0.000000000000000000e+00 +4.459999999999999901e-09 0.000000000000000000e+00 +4.460499999999999641e-09 0.000000000000000000e+00 +4.461000000000000208e-09 0.000000000000000000e+00 +4.461499999999999948e-09 0.000000000000000000e+00 +4.461999999999999688e-09 0.000000000000000000e+00 +4.462500000000000255e-09 0.000000000000000000e+00 +4.462999999999999994e-09 0.000000000000000000e+00 +4.463499999999999734e-09 0.000000000000000000e+00 +4.464000000000000301e-09 0.000000000000000000e+00 +4.464500000000000041e-09 0.000000000000000000e+00 +4.464999999999999781e-09 0.000000000000000000e+00 +4.465499999999999521e-09 0.000000000000000000e+00 +4.466000000000000087e-09 0.000000000000000000e+00 +4.466499999999999827e-09 0.000000000000000000e+00 +4.466999999999999567e-09 0.000000000000000000e+00 +4.467500000000000134e-09 0.000000000000000000e+00 +4.467999999999999874e-09 0.000000000000000000e+00 +4.468499999999999614e-09 0.000000000000000000e+00 +4.469000000000000181e-09 0.000000000000000000e+00 +4.469499999999999920e-09 0.000000000000000000e+00 +4.469999999999999660e-09 0.000000000000000000e+00 +4.470500000000000227e-09 0.000000000000000000e+00 +4.470999999999999967e-09 0.000000000000000000e+00 +4.471499999999999707e-09 0.000000000000000000e+00 +4.472000000000000274e-09 0.000000000000000000e+00 +4.472500000000000013e-09 0.000000000000000000e+00 +4.472999999999999753e-09 0.000000000000000000e+00 +4.473500000000000320e-09 0.000000000000000000e+00 +4.474000000000000060e-09 0.000000000000000000e+00 +4.474499999999999800e-09 0.000000000000000000e+00 +4.474999999999999539e-09 0.000000000000000000e+00 +4.475500000000000106e-09 0.000000000000000000e+00 +4.475999999999999846e-09 0.000000000000000000e+00 +4.476499999999999586e-09 0.000000000000000000e+00 +4.477000000000000153e-09 0.000000000000000000e+00 +4.477499999999999893e-09 0.000000000000000000e+00 +4.477999999999999632e-09 0.000000000000000000e+00 +4.478500000000000199e-09 0.000000000000000000e+00 +4.478999999999999939e-09 0.000000000000000000e+00 +4.479499999999999679e-09 0.000000000000000000e+00 +4.480000000000000246e-09 0.000000000000000000e+00 +4.480499999999999986e-09 0.000000000000000000e+00 +4.480999999999999725e-09 0.000000000000000000e+00 +4.481500000000000292e-09 0.000000000000000000e+00 +4.482000000000000032e-09 0.000000000000000000e+00 +4.482499999999999772e-09 0.000000000000000000e+00 +4.482999999999999512e-09 0.000000000000000000e+00 +4.483500000000000079e-09 0.000000000000000000e+00 +4.483999999999999819e-09 0.000000000000000000e+00 +4.484499999999999558e-09 0.000000000000000000e+00 +4.485000000000000125e-09 0.000000000000000000e+00 +4.485499999999999865e-09 0.000000000000000000e+00 +4.485999999999999605e-09 0.000000000000000000e+00 +4.486500000000000172e-09 0.000000000000000000e+00 +4.486999999999999912e-09 0.000000000000000000e+00 +4.487499999999999651e-09 0.000000000000000000e+00 +4.488000000000000218e-09 0.000000000000000000e+00 +4.488499999999999958e-09 0.000000000000000000e+00 +4.488999999999999698e-09 0.000000000000000000e+00 +4.489500000000000265e-09 0.000000000000000000e+00 +4.490000000000000005e-09 0.000000000000000000e+00 +4.490499999999999744e-09 0.000000000000000000e+00 +4.491000000000000311e-09 0.000000000000000000e+00 +4.491500000000000051e-09 0.000000000000000000e+00 +4.491999999999999791e-09 0.000000000000000000e+00 +4.492499999999999531e-09 0.000000000000000000e+00 +4.493000000000000098e-09 0.000000000000000000e+00 +4.493499999999999837e-09 0.000000000000000000e+00 +4.493999999999999577e-09 0.000000000000000000e+00 +4.494500000000000144e-09 0.000000000000000000e+00 +4.494999999999999884e-09 0.000000000000000000e+00 +4.495499999999999624e-09 0.000000000000000000e+00 +4.496000000000000191e-09 0.000000000000000000e+00 +4.496499999999999930e-09 0.000000000000000000e+00 +4.496999999999999670e-09 0.000000000000000000e+00 +4.497500000000000237e-09 0.000000000000000000e+00 +4.497999999999999977e-09 0.000000000000000000e+00 +4.498499999999999717e-09 0.000000000000000000e+00 +4.499000000000000284e-09 0.000000000000000000e+00 +4.499500000000000023e-09 0.000000000000000000e+00 +4.499999999999999763e-09 0.000000000000000000e+00 +4.500499999999999503e-09 0.000000000000000000e+00 +4.501000000000000070e-09 0.000000000000000000e+00 +4.501499999999999810e-09 0.000000000000000000e+00 +4.501999999999999550e-09 0.000000000000000000e+00 +4.502500000000000117e-09 0.000000000000000000e+00 +4.502999999999999856e-09 0.000000000000000000e+00 +4.503499999999999596e-09 0.000000000000000000e+00 +4.504000000000000163e-09 0.000000000000000000e+00 +4.504499999999999903e-09 0.000000000000000000e+00 +4.504999999999999643e-09 0.000000000000000000e+00 +4.505500000000000210e-09 0.000000000000000000e+00 +4.505999999999999949e-09 0.000000000000000000e+00 +4.506499999999999689e-09 0.000000000000000000e+00 +4.507000000000000256e-09 0.000000000000000000e+00 +4.507499999999999996e-09 0.000000000000000000e+00 +4.507999999999999736e-09 0.000000000000000000e+00 +4.508500000000000303e-09 0.000000000000000000e+00 +4.509000000000000042e-09 0.000000000000000000e+00 +4.509499999999999782e-09 0.000000000000000000e+00 +4.509999999999999522e-09 0.000000000000000000e+00 +4.510500000000000089e-09 0.000000000000000000e+00 +4.510999999999999829e-09 0.000000000000000000e+00 +4.511499999999999568e-09 0.000000000000000000e+00 +4.512000000000000135e-09 0.000000000000000000e+00 +4.512499999999999875e-09 0.000000000000000000e+00 +4.512999999999999615e-09 0.000000000000000000e+00 +4.513500000000000182e-09 0.000000000000000000e+00 +4.513999999999999922e-09 0.000000000000000000e+00 +4.514499999999999662e-09 0.000000000000000000e+00 +4.515000000000000228e-09 0.000000000000000000e+00 +4.515499999999999968e-09 0.000000000000000000e+00 +4.515999999999999708e-09 0.000000000000000000e+00 +4.516500000000000275e-09 0.000000000000000000e+00 +4.517000000000000015e-09 0.000000000000000000e+00 +4.517499999999999755e-09 0.000000000000000000e+00 +4.518000000000000322e-09 0.000000000000000000e+00 +4.518500000000000061e-09 0.000000000000000000e+00 +4.518999999999999801e-09 0.000000000000000000e+00 +4.519499999999999541e-09 0.000000000000000000e+00 +4.520000000000000108e-09 0.000000000000000000e+00 +4.520499999999999848e-09 0.000000000000000000e+00 +4.520999999999999587e-09 0.000000000000000000e+00 +4.521500000000000154e-09 0.000000000000000000e+00 +4.521999999999999894e-09 0.000000000000000000e+00 +4.522499999999999634e-09 0.000000000000000000e+00 +4.523000000000000201e-09 0.000000000000000000e+00 +4.523499999999999941e-09 0.000000000000000000e+00 +4.523999999999999680e-09 0.000000000000000000e+00 +4.524500000000000247e-09 0.000000000000000000e+00 +4.524999999999999987e-09 0.000000000000000000e+00 +4.525499999999999727e-09 0.000000000000000000e+00 +4.526000000000000294e-09 0.000000000000000000e+00 +4.526500000000000034e-09 0.000000000000000000e+00 +4.526999999999999773e-09 0.000000000000000000e+00 +4.527499999999999513e-09 0.000000000000000000e+00 +4.528000000000000080e-09 0.000000000000000000e+00 +4.528499999999999820e-09 0.000000000000000000e+00 +4.528999999999999560e-09 0.000000000000000000e+00 +4.529500000000000127e-09 0.000000000000000000e+00 +4.529999999999999866e-09 0.000000000000000000e+00 +4.530499999999999606e-09 0.000000000000000000e+00 +4.531000000000000173e-09 0.000000000000000000e+00 +4.531499999999999913e-09 0.000000000000000000e+00 +4.531999999999999653e-09 0.000000000000000000e+00 +4.532500000000000220e-09 0.000000000000000000e+00 +4.532999999999999960e-09 0.000000000000000000e+00 +4.533499999999999699e-09 0.000000000000000000e+00 +4.534000000000000266e-09 0.000000000000000000e+00 +4.534500000000000006e-09 0.000000000000000000e+00 +4.534999999999999746e-09 0.000000000000000000e+00 +4.535500000000000313e-09 0.000000000000000000e+00 +4.536000000000000053e-09 0.000000000000000000e+00 +4.536499999999999792e-09 0.000000000000000000e+00 +4.536999999999999532e-09 0.000000000000000000e+00 +4.537500000000000099e-09 0.000000000000000000e+00 +4.537999999999999839e-09 0.000000000000000000e+00 +4.538499999999999579e-09 0.000000000000000000e+00 +4.539000000000000146e-09 0.000000000000000000e+00 +4.539499999999999885e-09 0.000000000000000000e+00 +4.539999999999999625e-09 0.000000000000000000e+00 +4.540500000000000192e-09 0.000000000000000000e+00 +4.540999999999999932e-09 0.000000000000000000e+00 +4.541499999999999672e-09 0.000000000000000000e+00 +4.542000000000000239e-09 0.000000000000000000e+00 +4.542499999999999978e-09 0.000000000000000000e+00 +4.542999999999999718e-09 0.000000000000000000e+00 +4.543500000000000285e-09 0.000000000000000000e+00 +4.544000000000000025e-09 0.000000000000000000e+00 +4.544499999999999765e-09 0.000000000000000000e+00 +4.544999999999999504e-09 0.000000000000000000e+00 +4.545500000000000071e-09 0.000000000000000000e+00 +4.545999999999999811e-09 0.000000000000000000e+00 +4.546499999999999551e-09 0.000000000000000000e+00 +4.547000000000000118e-09 0.000000000000000000e+00 +4.547499999999999858e-09 0.000000000000000000e+00 +4.547999999999999598e-09 0.000000000000000000e+00 +4.548500000000000164e-09 0.000000000000000000e+00 +4.548999999999999904e-09 0.000000000000000000e+00 +4.549499999999999644e-09 0.000000000000000000e+00 +4.550000000000000211e-09 0.000000000000000000e+00 +4.550499999999999951e-09 0.000000000000000000e+00 +4.550999999999999691e-09 0.000000000000000000e+00 +4.551500000000000258e-09 0.000000000000000000e+00 +4.551999999999999997e-09 0.000000000000000000e+00 +4.552499999999999737e-09 0.000000000000000000e+00 +4.553000000000000304e-09 0.000000000000000000e+00 +4.553500000000000044e-09 0.000000000000000000e+00 +4.553999999999999784e-09 0.000000000000000000e+00 +4.554499999999999523e-09 0.000000000000000000e+00 +4.555000000000000090e-09 0.000000000000000000e+00 +4.555499999999999830e-09 0.000000000000000000e+00 +4.555999999999999570e-09 0.000000000000000000e+00 +4.556500000000000137e-09 0.000000000000000000e+00 +4.556999999999999877e-09 0.000000000000000000e+00 +4.557499999999999616e-09 0.000000000000000000e+00 +4.558000000000000183e-09 0.000000000000000000e+00 +4.558499999999999923e-09 0.000000000000000000e+00 +4.558999999999999663e-09 0.000000000000000000e+00 +4.559500000000000230e-09 0.000000000000000000e+00 +4.559999999999999970e-09 0.000000000000000000e+00 +4.560499999999999709e-09 0.000000000000000000e+00 +4.561000000000000276e-09 0.000000000000000000e+00 +4.561500000000000016e-09 0.000000000000000000e+00 +4.561999999999999756e-09 0.000000000000000000e+00 +4.562499999999999496e-09 0.000000000000000000e+00 +4.563000000000000063e-09 0.000000000000000000e+00 +4.563499999999999802e-09 0.000000000000000000e+00 +4.563999999999999542e-09 0.000000000000000000e+00 +4.564500000000000109e-09 0.000000000000000000e+00 +4.564999999999999849e-09 0.000000000000000000e+00 +4.565499999999999589e-09 0.000000000000000000e+00 +4.566000000000000156e-09 0.000000000000000000e+00 +4.566499999999999896e-09 0.000000000000000000e+00 +4.566999999999999635e-09 0.000000000000000000e+00 +4.567500000000000202e-09 0.000000000000000000e+00 +4.567999999999999942e-09 0.000000000000000000e+00 +4.568499999999999682e-09 0.000000000000000000e+00 +4.569000000000000249e-09 0.000000000000000000e+00 +4.569499999999999989e-09 0.000000000000000000e+00 +4.569999999999999728e-09 0.000000000000000000e+00 +4.570500000000000295e-09 0.000000000000000000e+00 +4.571000000000000035e-09 0.000000000000000000e+00 +4.571499999999999775e-09 0.000000000000000000e+00 +4.571999999999999515e-09 0.000000000000000000e+00 +4.572500000000000082e-09 0.000000000000000000e+00 +4.572999999999999821e-09 0.000000000000000000e+00 +4.573499999999999561e-09 0.000000000000000000e+00 +4.574000000000000128e-09 0.000000000000000000e+00 +4.574499999999999868e-09 0.000000000000000000e+00 +4.574999999999999608e-09 0.000000000000000000e+00 +4.575500000000000175e-09 0.000000000000000000e+00 +4.575999999999999914e-09 0.000000000000000000e+00 +4.576499999999999654e-09 0.000000000000000000e+00 +4.577000000000000221e-09 0.000000000000000000e+00 +4.577499999999999961e-09 0.000000000000000000e+00 +4.577999999999999701e-09 0.000000000000000000e+00 +4.578500000000000268e-09 0.000000000000000000e+00 +4.579000000000000007e-09 0.000000000000000000e+00 +4.579499999999999747e-09 0.000000000000000000e+00 +4.580000000000000314e-09 0.000000000000000000e+00 +4.580500000000000054e-09 0.000000000000000000e+00 +4.580999999999999794e-09 0.000000000000000000e+00 +4.581499999999999534e-09 0.000000000000000000e+00 +4.582000000000000100e-09 0.000000000000000000e+00 +4.582499999999999840e-09 0.000000000000000000e+00 +4.582999999999999580e-09 0.000000000000000000e+00 +4.583500000000000147e-09 0.000000000000000000e+00 +4.583999999999999887e-09 0.000000000000000000e+00 +4.584499999999999627e-09 0.000000000000000000e+00 +4.585000000000000194e-09 0.000000000000000000e+00 +4.585499999999999933e-09 0.000000000000000000e+00 +4.585999999999999673e-09 0.000000000000000000e+00 +4.586500000000000240e-09 0.000000000000000000e+00 +4.586999999999999980e-09 0.000000000000000000e+00 +4.587499999999999720e-09 0.000000000000000000e+00 +4.588000000000000287e-09 0.000000000000000000e+00 +4.588500000000000026e-09 0.000000000000000000e+00 +4.588999999999999766e-09 0.000000000000000000e+00 +4.589499999999999506e-09 0.000000000000000000e+00 +4.590000000000000073e-09 0.000000000000000000e+00 +4.590499999999999813e-09 0.000000000000000000e+00 +4.590999999999999552e-09 0.000000000000000000e+00 +4.591500000000000119e-09 0.000000000000000000e+00 +4.591999999999999859e-09 0.000000000000000000e+00 +4.592499999999999599e-09 0.000000000000000000e+00 +4.593000000000000166e-09 0.000000000000000000e+00 +4.593499999999999906e-09 0.000000000000000000e+00 +4.593999999999999645e-09 0.000000000000000000e+00 +4.594500000000000212e-09 0.000000000000000000e+00 +4.594999999999999952e-09 0.000000000000000000e+00 +4.595499999999999692e-09 0.000000000000000000e+00 +4.596000000000000259e-09 0.000000000000000000e+00 +4.596499999999999999e-09 0.000000000000000000e+00 +4.596999999999999739e-09 0.000000000000000000e+00 +4.597500000000000305e-09 0.000000000000000000e+00 +4.598000000000000045e-09 0.000000000000000000e+00 +4.598499999999999785e-09 0.000000000000000000e+00 +4.598999999999999525e-09 0.000000000000000000e+00 +4.599500000000000092e-09 0.000000000000000000e+00 +4.599999999999999832e-09 0.000000000000000000e+00 +4.600499999999999571e-09 0.000000000000000000e+00 +4.601000000000000138e-09 0.000000000000000000e+00 +4.601499999999999878e-09 0.000000000000000000e+00 +4.601999999999999618e-09 0.000000000000000000e+00 +4.602500000000000185e-09 0.000000000000000000e+00 +4.602999999999999925e-09 0.000000000000000000e+00 +4.603499999999999664e-09 0.000000000000000000e+00 +4.604000000000000231e-09 0.000000000000000000e+00 +4.604499999999999971e-09 0.000000000000000000e+00 +4.604999999999999711e-09 0.000000000000000000e+00 +4.605500000000000278e-09 0.000000000000000000e+00 +4.606000000000000018e-09 0.000000000000000000e+00 +4.606499999999999757e-09 0.000000000000000000e+00 +4.606999999999999497e-09 0.000000000000000000e+00 +4.607500000000000064e-09 0.000000000000000000e+00 +4.607999999999999804e-09 0.000000000000000000e+00 +4.608499999999999544e-09 0.000000000000000000e+00 +4.609000000000000111e-09 0.000000000000000000e+00 +4.609499999999999850e-09 0.000000000000000000e+00 +4.609999999999999590e-09 0.000000000000000000e+00 +4.610500000000000157e-09 0.000000000000000000e+00 +4.610999999999999897e-09 0.000000000000000000e+00 +4.611499999999999637e-09 0.000000000000000000e+00 +4.612000000000000204e-09 0.000000000000000000e+00 +4.612499999999999943e-09 0.000000000000000000e+00 +4.612999999999999683e-09 0.000000000000000000e+00 +4.613500000000000250e-09 0.000000000000000000e+00 +4.613999999999999990e-09 0.000000000000000000e+00 +4.614499999999999730e-09 0.000000000000000000e+00 +4.615000000000000297e-09 0.000000000000000000e+00 +4.615500000000000037e-09 0.000000000000000000e+00 +4.615999999999999776e-09 0.000000000000000000e+00 +4.616499999999999516e-09 0.000000000000000000e+00 +4.617000000000000083e-09 0.000000000000000000e+00 +4.617499999999999823e-09 0.000000000000000000e+00 +4.617999999999999563e-09 0.000000000000000000e+00 +4.618500000000000130e-09 0.000000000000000000e+00 +4.618999999999999869e-09 0.000000000000000000e+00 +4.619499999999999609e-09 0.000000000000000000e+00 +4.620000000000000176e-09 0.000000000000000000e+00 +4.620499999999999916e-09 0.000000000000000000e+00 +4.620999999999999656e-09 0.000000000000000000e+00 +4.621500000000000223e-09 0.000000000000000000e+00 +4.621999999999999962e-09 0.000000000000000000e+00 +4.622499999999999702e-09 0.000000000000000000e+00 +4.623000000000000269e-09 0.000000000000000000e+00 +4.623500000000000009e-09 0.000000000000000000e+00 +4.623999999999999749e-09 0.000000000000000000e+00 +4.624500000000000316e-09 0.000000000000000000e+00 +4.625000000000000055e-09 0.000000000000000000e+00 +4.625499999999999795e-09 0.000000000000000000e+00 +4.625999999999999535e-09 0.000000000000000000e+00 +4.626500000000000102e-09 0.000000000000000000e+00 +4.626999999999999842e-09 0.000000000000000000e+00 +4.627499999999999581e-09 0.000000000000000000e+00 +4.628000000000000148e-09 0.000000000000000000e+00 +4.628499999999999888e-09 0.000000000000000000e+00 +4.628999999999999628e-09 0.000000000000000000e+00 +4.629500000000000195e-09 0.000000000000000000e+00 +4.629999999999999935e-09 0.000000000000000000e+00 +4.630499999999999675e-09 0.000000000000000000e+00 +4.631000000000000241e-09 0.000000000000000000e+00 +4.631499999999999981e-09 0.000000000000000000e+00 +4.631999999999999721e-09 0.000000000000000000e+00 +4.632500000000000288e-09 0.000000000000000000e+00 +4.633000000000000028e-09 0.000000000000000000e+00 +4.633499999999999768e-09 0.000000000000000000e+00 +4.633999999999999507e-09 0.000000000000000000e+00 +4.634500000000000074e-09 0.000000000000000000e+00 +4.634999999999999814e-09 0.000000000000000000e+00 +4.635499999999999554e-09 0.000000000000000000e+00 +4.636000000000000121e-09 0.000000000000000000e+00 +4.636499999999999861e-09 0.000000000000000000e+00 +4.636999999999999600e-09 0.000000000000000000e+00 +4.637500000000000167e-09 0.000000000000000000e+00 +4.637999999999999907e-09 0.000000000000000000e+00 +4.638499999999999647e-09 0.000000000000000000e+00 +4.639000000000000214e-09 0.000000000000000000e+00 +4.639499999999999954e-09 0.000000000000000000e+00 +4.639999999999999693e-09 0.000000000000000000e+00 +4.640500000000000260e-09 0.000000000000000000e+00 +4.641000000000000000e-09 0.000000000000000000e+00 +4.641499999999999740e-09 0.000000000000000000e+00 +4.642000000000000307e-09 0.000000000000000000e+00 +4.642500000000000047e-09 0.000000000000000000e+00 +4.642999999999999786e-09 0.000000000000000000e+00 +4.643499999999999526e-09 0.000000000000000000e+00 +4.644000000000000093e-09 0.000000000000000000e+00 +4.644499999999999833e-09 0.000000000000000000e+00 +4.644999999999999573e-09 0.000000000000000000e+00 +4.645500000000000140e-09 0.000000000000000000e+00 +4.645999999999999879e-09 0.000000000000000000e+00 +4.646499999999999619e-09 0.000000000000000000e+00 +4.647000000000000186e-09 0.000000000000000000e+00 +4.647499999999999926e-09 0.000000000000000000e+00 +4.647999999999999666e-09 0.000000000000000000e+00 +4.648500000000000233e-09 0.000000000000000000e+00 +4.648999999999999973e-09 0.000000000000000000e+00 +4.649499999999999712e-09 0.000000000000000000e+00 +4.650000000000000279e-09 0.000000000000000000e+00 +4.650500000000000019e-09 0.000000000000000000e+00 +4.650999999999999759e-09 0.000000000000000000e+00 +4.651499999999999499e-09 0.000000000000000000e+00 +4.652000000000000066e-09 0.000000000000000000e+00 +4.652499999999999805e-09 0.000000000000000000e+00 +4.652999999999999545e-09 0.000000000000000000e+00 +4.653500000000000112e-09 0.000000000000000000e+00 +4.653999999999999852e-09 0.000000000000000000e+00 +4.654499999999999592e-09 0.000000000000000000e+00 +4.655000000000000159e-09 0.000000000000000000e+00 +4.655499999999999898e-09 0.000000000000000000e+00 +4.655999999999999638e-09 0.000000000000000000e+00 +4.656500000000000205e-09 0.000000000000000000e+00 +4.656999999999999945e-09 0.000000000000000000e+00 +4.657499999999999685e-09 0.000000000000000000e+00 +4.658000000000000252e-09 0.000000000000000000e+00 +4.658499999999999991e-09 0.000000000000000000e+00 +4.658999999999999731e-09 0.000000000000000000e+00 +4.659500000000000298e-09 0.000000000000000000e+00 +4.660000000000000038e-09 0.000000000000000000e+00 +4.660499999999999778e-09 0.000000000000000000e+00 +4.660999999999999518e-09 0.000000000000000000e+00 +4.661500000000000084e-09 0.000000000000000000e+00 +4.661999999999999824e-09 0.000000000000000000e+00 +4.662499999999999564e-09 0.000000000000000000e+00 +4.663000000000000131e-09 0.000000000000000000e+00 +4.663499999999999871e-09 0.000000000000000000e+00 +4.663999999999999611e-09 0.000000000000000000e+00 +4.664500000000000177e-09 0.000000000000000000e+00 +4.664999999999999917e-09 0.000000000000000000e+00 +4.665499999999999657e-09 0.000000000000000000e+00 +4.666000000000000224e-09 0.000000000000000000e+00 +4.666499999999999964e-09 0.000000000000000000e+00 +4.666999999999999704e-09 0.000000000000000000e+00 +4.667500000000000271e-09 0.000000000000000000e+00 +4.668000000000000010e-09 0.000000000000000000e+00 +4.668499999999999750e-09 0.000000000000000000e+00 +4.669000000000000317e-09 0.000000000000000000e+00 +4.669500000000000057e-09 0.000000000000000000e+00 +4.669999999999999797e-09 0.000000000000000000e+00 +4.670499999999999536e-09 0.000000000000000000e+00 +4.671000000000000103e-09 0.000000000000000000e+00 +4.671499999999999843e-09 0.000000000000000000e+00 +4.671999999999999583e-09 0.000000000000000000e+00 +4.672500000000000150e-09 0.000000000000000000e+00 +4.672999999999999890e-09 0.000000000000000000e+00 +4.673499999999999629e-09 0.000000000000000000e+00 +4.674000000000000196e-09 0.000000000000000000e+00 +4.674499999999999936e-09 0.000000000000000000e+00 +4.674999999999999676e-09 0.000000000000000000e+00 +4.675500000000000243e-09 0.000000000000000000e+00 +4.675999999999999983e-09 0.000000000000000000e+00 +4.676499999999999722e-09 0.000000000000000000e+00 +4.677000000000000289e-09 0.000000000000000000e+00 +4.677500000000000029e-09 0.000000000000000000e+00 +4.677999999999999769e-09 0.000000000000000000e+00 +4.678499999999999509e-09 0.000000000000000000e+00 +4.679000000000000076e-09 0.000000000000000000e+00 +4.679499999999999816e-09 0.000000000000000000e+00 +4.679999999999999555e-09 0.000000000000000000e+00 +4.680500000000000122e-09 0.000000000000000000e+00 +4.680999999999999862e-09 0.000000000000000000e+00 +4.681499999999999602e-09 0.000000000000000000e+00 +4.682000000000000169e-09 0.000000000000000000e+00 +4.682499999999999909e-09 0.000000000000000000e+00 +4.682999999999999648e-09 0.000000000000000000e+00 +4.683500000000000215e-09 0.000000000000000000e+00 +4.683999999999999955e-09 0.000000000000000000e+00 +4.684499999999999695e-09 0.000000000000000000e+00 +4.685000000000000262e-09 0.000000000000000000e+00 +4.685500000000000002e-09 0.000000000000000000e+00 +4.685999999999999741e-09 0.000000000000000000e+00 +4.686500000000000308e-09 0.000000000000000000e+00 +4.687000000000000048e-09 0.000000000000000000e+00 +4.687499999999999788e-09 0.000000000000000000e+00 +4.687999999999999528e-09 0.000000000000000000e+00 +4.688500000000000095e-09 0.000000000000000000e+00 +4.688999999999999834e-09 0.000000000000000000e+00 +4.689499999999999574e-09 0.000000000000000000e+00 +4.690000000000000141e-09 0.000000000000000000e+00 +4.690499999999999881e-09 0.000000000000000000e+00 +4.690999999999999621e-09 0.000000000000000000e+00 +4.691500000000000188e-09 0.000000000000000000e+00 +4.691999999999999927e-09 0.000000000000000000e+00 +4.692499999999999667e-09 0.000000000000000000e+00 +4.693000000000000234e-09 0.000000000000000000e+00 +4.693499999999999974e-09 0.000000000000000000e+00 +4.693999999999999714e-09 0.000000000000000000e+00 +4.694500000000000281e-09 0.000000000000000000e+00 +4.695000000000000020e-09 0.000000000000000000e+00 +4.695499999999999760e-09 0.000000000000000000e+00 +4.695999999999999500e-09 0.000000000000000000e+00 +4.696500000000000067e-09 0.000000000000000000e+00 +4.696999999999999807e-09 0.000000000000000000e+00 +4.697499999999999547e-09 0.000000000000000000e+00 +4.698000000000000114e-09 0.000000000000000000e+00 +4.698499999999999853e-09 0.000000000000000000e+00 +4.698999999999999593e-09 0.000000000000000000e+00 +4.699500000000000160e-09 0.000000000000000000e+00 +4.699999999999999900e-09 0.000000000000000000e+00 +4.700499999999999640e-09 0.000000000000000000e+00 +4.701000000000000207e-09 0.000000000000000000e+00 +4.701499999999999946e-09 0.000000000000000000e+00 +4.701999999999999686e-09 0.000000000000000000e+00 +4.702500000000000253e-09 0.000000000000000000e+00 +4.702999999999999993e-09 0.000000000000000000e+00 +4.703499999999999733e-09 0.000000000000000000e+00 +4.704000000000000300e-09 0.000000000000000000e+00 +4.704500000000000039e-09 0.000000000000000000e+00 +4.704999999999999779e-09 0.000000000000000000e+00 +4.705499999999999519e-09 0.000000000000000000e+00 +4.706000000000000086e-09 0.000000000000000000e+00 +4.706499999999999826e-09 0.000000000000000000e+00 +4.706999999999999565e-09 0.000000000000000000e+00 +4.707500000000000132e-09 0.000000000000000000e+00 +4.707999999999999872e-09 0.000000000000000000e+00 +4.708499999999999612e-09 0.000000000000000000e+00 +4.709000000000000179e-09 0.000000000000000000e+00 +4.709499999999999919e-09 0.000000000000000000e+00 +4.709999999999999658e-09 0.000000000000000000e+00 +4.710500000000000225e-09 0.000000000000000000e+00 +4.710999999999999965e-09 0.000000000000000000e+00 +4.711499999999999705e-09 0.000000000000000000e+00 +4.712000000000000272e-09 0.000000000000000000e+00 +4.712500000000000012e-09 0.000000000000000000e+00 +4.712999999999999752e-09 0.000000000000000000e+00 +4.713500000000000318e-09 0.000000000000000000e+00 +4.714000000000000058e-09 0.000000000000000000e+00 +4.714499999999999798e-09 0.000000000000000000e+00 +4.714999999999999538e-09 0.000000000000000000e+00 +4.715500000000000105e-09 0.000000000000000000e+00 +4.715999999999999845e-09 0.000000000000000000e+00 +4.716499999999999584e-09 0.000000000000000000e+00 +4.717000000000000151e-09 0.000000000000000000e+00 +4.717499999999999891e-09 0.000000000000000000e+00 +4.717999999999999631e-09 0.000000000000000000e+00 +4.718500000000000198e-09 0.000000000000000000e+00 +4.718999999999999938e-09 0.000000000000000000e+00 +4.719499999999999677e-09 0.000000000000000000e+00 +4.720000000000000244e-09 0.000000000000000000e+00 +4.720499999999999984e-09 0.000000000000000000e+00 +4.720999999999999724e-09 0.000000000000000000e+00 +4.721500000000000291e-09 0.000000000000000000e+00 +4.722000000000000031e-09 0.000000000000000000e+00 +4.722499999999999770e-09 0.000000000000000000e+00 +4.722999999999999510e-09 0.000000000000000000e+00 +4.723500000000000077e-09 0.000000000000000000e+00 +4.723999999999999817e-09 0.000000000000000000e+00 +4.724499999999999557e-09 0.000000000000000000e+00 +4.725000000000000124e-09 0.000000000000000000e+00 +4.725499999999999863e-09 0.000000000000000000e+00 +4.725999999999999603e-09 0.000000000000000000e+00 +4.726500000000000170e-09 0.000000000000000000e+00 +4.726999999999999910e-09 0.000000000000000000e+00 +4.727499999999999650e-09 0.000000000000000000e+00 +4.728000000000000217e-09 0.000000000000000000e+00 +4.728499999999999956e-09 0.000000000000000000e+00 +4.728999999999999696e-09 0.000000000000000000e+00 +4.729500000000000263e-09 0.000000000000000000e+00 +4.730000000000000003e-09 0.000000000000000000e+00 +4.730499999999999743e-09 0.000000000000000000e+00 +4.731000000000000310e-09 0.000000000000000000e+00 +4.731500000000000050e-09 0.000000000000000000e+00 +4.731999999999999789e-09 0.000000000000000000e+00 +4.732499999999999529e-09 0.000000000000000000e+00 +4.733000000000000096e-09 0.000000000000000000e+00 +4.733499999999999836e-09 0.000000000000000000e+00 +4.733999999999999576e-09 0.000000000000000000e+00 +4.734500000000000143e-09 0.000000000000000000e+00 +4.734999999999999882e-09 0.000000000000000000e+00 +4.735499999999999622e-09 0.000000000000000000e+00 +4.736000000000000189e-09 0.000000000000000000e+00 +4.736499999999999929e-09 0.000000000000000000e+00 +4.736999999999999669e-09 0.000000000000000000e+00 +4.737500000000000236e-09 0.000000000000000000e+00 +4.737999999999999975e-09 0.000000000000000000e+00 +4.738499999999999715e-09 0.000000000000000000e+00 +4.739000000000000282e-09 0.000000000000000000e+00 +4.739500000000000022e-09 0.000000000000000000e+00 +4.739999999999999762e-09 0.000000000000000000e+00 +4.740499999999999501e-09 0.000000000000000000e+00 +4.741000000000000068e-09 0.000000000000000000e+00 +4.741499999999999808e-09 0.000000000000000000e+00 +4.741999999999999548e-09 0.000000000000000000e+00 +4.742500000000000115e-09 0.000000000000000000e+00 +4.742999999999999855e-09 0.000000000000000000e+00 +4.743499999999999595e-09 0.000000000000000000e+00 +4.744000000000000161e-09 0.000000000000000000e+00 +4.744499999999999901e-09 0.000000000000000000e+00 +4.744999999999999641e-09 0.000000000000000000e+00 +4.745500000000000208e-09 0.000000000000000000e+00 +4.745999999999999948e-09 0.000000000000000000e+00 +4.746499999999999688e-09 0.000000000000000000e+00 +4.747000000000000254e-09 0.000000000000000000e+00 +4.747499999999999994e-09 0.000000000000000000e+00 +4.747999999999999734e-09 0.000000000000000000e+00 +4.748500000000000301e-09 0.000000000000000000e+00 +4.749000000000000041e-09 0.000000000000000000e+00 +4.749499999999999781e-09 0.000000000000000000e+00 +4.749999999999999520e-09 0.000000000000000000e+00 +4.750500000000000087e-09 0.000000000000000000e+00 +4.750999999999999827e-09 0.000000000000000000e+00 +4.751499999999999567e-09 0.000000000000000000e+00 +4.752000000000000134e-09 0.000000000000000000e+00 +4.752499999999999874e-09 0.000000000000000000e+00 +4.752999999999999613e-09 0.000000000000000000e+00 +4.753500000000000180e-09 0.000000000000000000e+00 +4.753999999999999920e-09 0.000000000000000000e+00 +4.754499999999999660e-09 0.000000000000000000e+00 +4.755000000000000227e-09 0.000000000000000000e+00 +4.755499999999999967e-09 0.000000000000000000e+00 +4.755999999999999706e-09 0.000000000000000000e+00 +4.756500000000000273e-09 0.000000000000000000e+00 +4.757000000000000013e-09 0.000000000000000000e+00 +4.757499999999999753e-09 0.000000000000000000e+00 +4.757999999999999493e-09 0.000000000000000000e+00 +4.758500000000000060e-09 0.000000000000000000e+00 +4.758999999999999799e-09 0.000000000000000000e+00 +4.759499999999999539e-09 0.000000000000000000e+00 +4.760000000000000106e-09 0.000000000000000000e+00 +4.760499999999999846e-09 0.000000000000000000e+00 +4.760999999999999586e-09 0.000000000000000000e+00 +4.761500000000000153e-09 0.000000000000000000e+00 +4.761999999999999893e-09 0.000000000000000000e+00 +4.762499999999999632e-09 0.000000000000000000e+00 +4.763000000000000199e-09 0.000000000000000000e+00 +4.763499999999999939e-09 0.000000000000000000e+00 +4.763999999999999679e-09 0.000000000000000000e+00 +4.764500000000000246e-09 0.000000000000000000e+00 +4.764999999999999986e-09 0.000000000000000000e+00 +4.765499999999999725e-09 0.000000000000000000e+00 +4.766000000000000292e-09 0.000000000000000000e+00 +4.766500000000000032e-09 0.000000000000000000e+00 +4.766999999999999772e-09 0.000000000000000000e+00 +4.767499999999999512e-09 0.000000000000000000e+00 +4.768000000000000079e-09 0.000000000000000000e+00 +4.768499999999999818e-09 0.000000000000000000e+00 +4.768999999999999558e-09 0.000000000000000000e+00 +4.769500000000000125e-09 0.000000000000000000e+00 +4.769999999999999865e-09 0.000000000000000000e+00 +4.770499999999999605e-09 0.000000000000000000e+00 +4.771000000000000172e-09 0.000000000000000000e+00 +4.771499999999999911e-09 0.000000000000000000e+00 +4.771999999999999651e-09 0.000000000000000000e+00 +4.772500000000000218e-09 0.000000000000000000e+00 +4.772999999999999958e-09 0.000000000000000000e+00 +4.773499999999999698e-09 0.000000000000000000e+00 +4.774000000000000265e-09 0.000000000000000000e+00 +4.774500000000000004e-09 0.000000000000000000e+00 +4.774999999999999744e-09 0.000000000000000000e+00 +4.775500000000000311e-09 0.000000000000000000e+00 +4.776000000000000051e-09 0.000000000000000000e+00 +4.776499999999999791e-09 0.000000000000000000e+00 +4.776999999999999531e-09 0.000000000000000000e+00 +4.777500000000000097e-09 0.000000000000000000e+00 +4.777999999999999837e-09 0.000000000000000000e+00 +4.778499999999999577e-09 0.000000000000000000e+00 +4.779000000000000144e-09 0.000000000000000000e+00 +4.779499999999999884e-09 0.000000000000000000e+00 +4.779999999999999624e-09 0.000000000000000000e+00 +4.780500000000000191e-09 0.000000000000000000e+00 +4.780999999999999930e-09 0.000000000000000000e+00 +4.781499999999999670e-09 0.000000000000000000e+00 +4.782000000000000237e-09 0.000000000000000000e+00 +4.782499999999999977e-09 0.000000000000000000e+00 +4.782999999999999717e-09 0.000000000000000000e+00 +4.783500000000000284e-09 0.000000000000000000e+00 +4.784000000000000023e-09 0.000000000000000000e+00 +4.784499999999999763e-09 0.000000000000000000e+00 +4.784999999999999503e-09 0.000000000000000000e+00 +4.785500000000000070e-09 0.000000000000000000e+00 +4.785999999999999810e-09 0.000000000000000000e+00 +4.786499999999999549e-09 0.000000000000000000e+00 +4.787000000000000116e-09 0.000000000000000000e+00 +4.787499999999999856e-09 0.000000000000000000e+00 +4.787999999999999596e-09 0.000000000000000000e+00 +4.788500000000000163e-09 0.000000000000000000e+00 +4.788999999999999903e-09 0.000000000000000000e+00 +4.789499999999999642e-09 0.000000000000000000e+00 +4.790000000000000209e-09 0.000000000000000000e+00 +4.790499999999999949e-09 0.000000000000000000e+00 +4.790999999999999689e-09 0.000000000000000000e+00 +4.791500000000000256e-09 0.000000000000000000e+00 +4.791999999999999996e-09 0.000000000000000000e+00 +4.792499999999999735e-09 0.000000000000000000e+00 +4.793000000000000302e-09 0.000000000000000000e+00 +4.793500000000000042e-09 0.000000000000000000e+00 +4.793999999999999782e-09 0.000000000000000000e+00 +4.794499999999999522e-09 0.000000000000000000e+00 +4.795000000000000089e-09 0.000000000000000000e+00 +4.795499999999999829e-09 0.000000000000000000e+00 +4.795999999999999568e-09 0.000000000000000000e+00 +4.796500000000000135e-09 0.000000000000000000e+00 +4.796999999999999875e-09 0.000000000000000000e+00 +4.797499999999999615e-09 0.000000000000000000e+00 +4.798000000000000182e-09 0.000000000000000000e+00 +4.798499999999999922e-09 0.000000000000000000e+00 +4.798999999999999661e-09 0.000000000000000000e+00 +4.799500000000000228e-09 0.000000000000000000e+00 +4.799999999999999968e-09 0.000000000000000000e+00 +4.800499999999999708e-09 0.000000000000000000e+00 +4.801000000000000275e-09 0.000000000000000000e+00 +4.801500000000000015e-09 0.000000000000000000e+00 +4.801999999999999754e-09 0.000000000000000000e+00 +4.802499999999999494e-09 0.000000000000000000e+00 +4.803000000000000061e-09 0.000000000000000000e+00 +4.803499999999999801e-09 0.000000000000000000e+00 +4.803999999999999541e-09 0.000000000000000000e+00 +4.804500000000000108e-09 0.000000000000000000e+00 +4.804999999999999847e-09 0.000000000000000000e+00 +4.805499999999999587e-09 0.000000000000000000e+00 +4.806000000000000154e-09 0.000000000000000000e+00 +4.806499999999999894e-09 0.000000000000000000e+00 +4.806999999999999634e-09 0.000000000000000000e+00 +4.807500000000000201e-09 0.000000000000000000e+00 +4.807999999999999940e-09 0.000000000000000000e+00 +4.808499999999999680e-09 0.000000000000000000e+00 +4.809000000000000247e-09 0.000000000000000000e+00 +4.809499999999999987e-09 0.000000000000000000e+00 +4.809999999999999727e-09 0.000000000000000000e+00 +4.810500000000000294e-09 0.000000000000000000e+00 +4.811000000000000033e-09 0.000000000000000000e+00 +4.811499999999999773e-09 0.000000000000000000e+00 +4.811999999999999513e-09 0.000000000000000000e+00 +4.812500000000000080e-09 0.000000000000000000e+00 +4.812999999999999820e-09 0.000000000000000000e+00 +4.813499999999999560e-09 0.000000000000000000e+00 +4.814000000000000127e-09 0.000000000000000000e+00 +4.814499999999999866e-09 0.000000000000000000e+00 +4.814999999999999606e-09 0.000000000000000000e+00 +4.815500000000000173e-09 0.000000000000000000e+00 +4.815999999999999913e-09 0.000000000000000000e+00 +4.816499999999999653e-09 0.000000000000000000e+00 +4.817000000000000220e-09 0.000000000000000000e+00 +4.817499999999999959e-09 0.000000000000000000e+00 +4.817999999999999699e-09 0.000000000000000000e+00 +4.818500000000000266e-09 0.000000000000000000e+00 +4.819000000000000006e-09 0.000000000000000000e+00 +4.819499999999999746e-09 0.000000000000000000e+00 +4.820000000000000313e-09 0.000000000000000000e+00 +4.820500000000000052e-09 0.000000000000000000e+00 +4.820999999999999792e-09 0.000000000000000000e+00 +4.821499999999999532e-09 0.000000000000000000e+00 +4.822000000000000099e-09 0.000000000000000000e+00 +4.822499999999999839e-09 0.000000000000000000e+00 +4.822999999999999578e-09 0.000000000000000000e+00 +4.823500000000000145e-09 0.000000000000000000e+00 +4.823999999999999885e-09 0.000000000000000000e+00 +4.824499999999999625e-09 0.000000000000000000e+00 +4.825000000000000192e-09 0.000000000000000000e+00 +4.825499999999999932e-09 0.000000000000000000e+00 +4.825999999999999672e-09 0.000000000000000000e+00 +4.826500000000000238e-09 0.000000000000000000e+00 +4.826999999999999978e-09 0.000000000000000000e+00 +4.827499999999999718e-09 0.000000000000000000e+00 +4.828000000000000285e-09 0.000000000000000000e+00 +4.828500000000000025e-09 0.000000000000000000e+00 +4.828999999999999765e-09 0.000000000000000000e+00 +4.829499999999999504e-09 0.000000000000000000e+00 +4.830000000000000071e-09 0.000000000000000000e+00 +4.830499999999999811e-09 0.000000000000000000e+00 +4.830999999999999551e-09 0.000000000000000000e+00 +4.831500000000000118e-09 0.000000000000000000e+00 +4.831999999999999858e-09 0.000000000000000000e+00 +4.832499999999999597e-09 0.000000000000000000e+00 +4.833000000000000164e-09 0.000000000000000000e+00 +4.833499999999999904e-09 0.000000000000000000e+00 +4.833999999999999644e-09 0.000000000000000000e+00 +4.834500000000000211e-09 0.000000000000000000e+00 +4.834999999999999951e-09 0.000000000000000000e+00 +4.835499999999999690e-09 0.000000000000000000e+00 +4.836000000000000257e-09 0.000000000000000000e+00 +4.836499999999999997e-09 0.000000000000000000e+00 +4.836999999999999737e-09 0.000000000000000000e+00 +4.837500000000000304e-09 0.000000000000000000e+00 +4.838000000000000044e-09 0.000000000000000000e+00 +4.838499999999999783e-09 0.000000000000000000e+00 +4.838999999999999523e-09 0.000000000000000000e+00 +4.839500000000000090e-09 0.000000000000000000e+00 +4.839999999999999830e-09 0.000000000000000000e+00 +4.840499999999999570e-09 0.000000000000000000e+00 +4.841000000000000137e-09 0.000000000000000000e+00 +4.841499999999999876e-09 0.000000000000000000e+00 +4.841999999999999616e-09 0.000000000000000000e+00 +4.842500000000000183e-09 0.000000000000000000e+00 +4.842999999999999923e-09 0.000000000000000000e+00 +4.843499999999999663e-09 0.000000000000000000e+00 +4.844000000000000230e-09 0.000000000000000000e+00 +4.844499999999999970e-09 0.000000000000000000e+00 +4.844999999999999709e-09 0.000000000000000000e+00 +4.845500000000000276e-09 0.000000000000000000e+00 +4.846000000000000016e-09 0.000000000000000000e+00 +4.846499999999999756e-09 0.000000000000000000e+00 +4.846999999999999496e-09 0.000000000000000000e+00 +4.847500000000000063e-09 0.000000000000000000e+00 +4.847999999999999802e-09 0.000000000000000000e+00 +4.848499999999999542e-09 0.000000000000000000e+00 +4.849000000000000109e-09 0.000000000000000000e+00 +4.849499999999999849e-09 0.000000000000000000e+00 +4.849999999999999589e-09 0.000000000000000000e+00 +4.850500000000000156e-09 0.000000000000000000e+00 +4.850999999999999895e-09 0.000000000000000000e+00 +4.851499999999999635e-09 0.000000000000000000e+00 +4.852000000000000202e-09 0.000000000000000000e+00 +4.852499999999999942e-09 0.000000000000000000e+00 +4.852999999999999682e-09 0.000000000000000000e+00 +4.853500000000000249e-09 0.000000000000000000e+00 +4.853999999999999988e-09 0.000000000000000000e+00 +4.854499999999999728e-09 0.000000000000000000e+00 +4.855000000000000295e-09 0.000000000000000000e+00 +4.855500000000000035e-09 0.000000000000000000e+00 +4.855999999999999775e-09 0.000000000000000000e+00 +4.856499999999999514e-09 0.000000000000000000e+00 +4.857000000000000081e-09 0.000000000000000000e+00 +4.857499999999999821e-09 0.000000000000000000e+00 +4.857999999999999561e-09 0.000000000000000000e+00 +4.858500000000000128e-09 0.000000000000000000e+00 +4.858999999999999868e-09 0.000000000000000000e+00 +4.859499999999999608e-09 0.000000000000000000e+00 +4.860000000000000174e-09 0.000000000000000000e+00 +4.860499999999999914e-09 0.000000000000000000e+00 +4.860999999999999654e-09 0.000000000000000000e+00 +4.861500000000000221e-09 0.000000000000000000e+00 +4.861999999999999961e-09 0.000000000000000000e+00 +4.862499999999999701e-09 0.000000000000000000e+00 +4.863000000000000268e-09 0.000000000000000000e+00 +4.863500000000000007e-09 0.000000000000000000e+00 +4.863999999999999747e-09 0.000000000000000000e+00 +4.864500000000000314e-09 0.000000000000000000e+00 +4.865000000000000054e-09 0.000000000000000000e+00 +4.865499999999999794e-09 0.000000000000000000e+00 +4.865999999999999533e-09 0.000000000000000000e+00 +4.866500000000000100e-09 0.000000000000000000e+00 +4.866999999999999840e-09 0.000000000000000000e+00 +4.867499999999999580e-09 0.000000000000000000e+00 +4.868000000000000147e-09 0.000000000000000000e+00 +4.868499999999999887e-09 0.000000000000000000e+00 +4.868999999999999626e-09 0.000000000000000000e+00 +4.869500000000000193e-09 0.000000000000000000e+00 +4.869999999999999933e-09 0.000000000000000000e+00 +4.870499999999999673e-09 0.000000000000000000e+00 +4.871000000000000240e-09 0.000000000000000000e+00 +4.871499999999999980e-09 0.000000000000000000e+00 +4.871999999999999719e-09 0.000000000000000000e+00 +4.872500000000000286e-09 0.000000000000000000e+00 +4.873000000000000026e-09 0.000000000000000000e+00 +4.873499999999999766e-09 0.000000000000000000e+00 +4.873999999999999506e-09 0.000000000000000000e+00 +4.874500000000000073e-09 0.000000000000000000e+00 +4.874999999999999812e-09 0.000000000000000000e+00 +4.875499999999999552e-09 0.000000000000000000e+00 +4.876000000000000119e-09 0.000000000000000000e+00 +4.876499999999999859e-09 0.000000000000000000e+00 +4.876999999999999599e-09 0.000000000000000000e+00 +4.877500000000000166e-09 0.000000000000000000e+00 +4.877999999999999906e-09 0.000000000000000000e+00 +4.878499999999999645e-09 0.000000000000000000e+00 +4.879000000000000212e-09 0.000000000000000000e+00 +4.879499999999999952e-09 0.000000000000000000e+00 +4.879999999999999692e-09 0.000000000000000000e+00 +4.880500000000000259e-09 0.000000000000000000e+00 +4.880999999999999999e-09 0.000000000000000000e+00 +4.881499999999999738e-09 0.000000000000000000e+00 +4.882000000000000305e-09 0.000000000000000000e+00 +4.882500000000000045e-09 0.000000000000000000e+00 +4.882999999999999785e-09 0.000000000000000000e+00 +4.883499999999999525e-09 0.000000000000000000e+00 +4.884000000000000092e-09 0.000000000000000000e+00 +4.884499999999999831e-09 0.000000000000000000e+00 +4.884999999999999571e-09 0.000000000000000000e+00 +4.885500000000000138e-09 0.000000000000000000e+00 +4.885999999999999878e-09 0.000000000000000000e+00 +4.886499999999999618e-09 0.000000000000000000e+00 +4.887000000000000185e-09 0.000000000000000000e+00 +4.887499999999999924e-09 0.000000000000000000e+00 +4.887999999999999664e-09 0.000000000000000000e+00 +4.888500000000000231e-09 0.000000000000000000e+00 +4.888999999999999971e-09 0.000000000000000000e+00 +4.889499999999999711e-09 0.000000000000000000e+00 +4.890000000000000278e-09 0.000000000000000000e+00 +4.890500000000000017e-09 0.000000000000000000e+00 +4.890999999999999757e-09 0.000000000000000000e+00 +4.891499999999999497e-09 0.000000000000000000e+00 +4.892000000000000064e-09 0.000000000000000000e+00 +4.892499999999999804e-09 0.000000000000000000e+00 +4.892999999999999544e-09 0.000000000000000000e+00 +4.893500000000000110e-09 0.000000000000000000e+00 +4.893999999999999850e-09 0.000000000000000000e+00 +4.894499999999999590e-09 0.000000000000000000e+00 +4.895000000000000157e-09 0.000000000000000000e+00 +4.895499999999999897e-09 0.000000000000000000e+00 +4.895999999999999637e-09 0.000000000000000000e+00 +4.896500000000000204e-09 0.000000000000000000e+00 +4.896999999999999943e-09 0.000000000000000000e+00 +4.897499999999999683e-09 0.000000000000000000e+00 +4.898000000000000250e-09 0.000000000000000000e+00 +4.898499999999999990e-09 0.000000000000000000e+00 +4.898999999999999730e-09 0.000000000000000000e+00 +4.899500000000000297e-09 0.000000000000000000e+00 +4.900000000000000036e-09 0.000000000000000000e+00 +4.900499999999999776e-09 0.000000000000000000e+00 +4.900999999999999516e-09 0.000000000000000000e+00 +4.901500000000000083e-09 0.000000000000000000e+00 +4.901999999999999823e-09 0.000000000000000000e+00 +4.902499999999999562e-09 0.000000000000000000e+00 +4.903000000000000129e-09 0.000000000000000000e+00 +4.903499999999999869e-09 0.000000000000000000e+00 +4.903999999999999609e-09 0.000000000000000000e+00 +4.904500000000000176e-09 0.000000000000000000e+00 +4.904999999999999916e-09 0.000000000000000000e+00 +4.905499999999999655e-09 0.000000000000000000e+00 +4.906000000000000222e-09 0.000000000000000000e+00 +4.906499999999999962e-09 0.000000000000000000e+00 +4.906999999999999702e-09 0.000000000000000000e+00 +4.907500000000000269e-09 0.000000000000000000e+00 +4.908000000000000009e-09 0.000000000000000000e+00 +4.908499999999999748e-09 0.000000000000000000e+00 +4.908999999999999488e-09 0.000000000000000000e+00 +4.909500000000000055e-09 0.000000000000000000e+00 +4.909999999999999795e-09 0.000000000000000000e+00 +4.910499999999999535e-09 0.000000000000000000e+00 +4.911000000000000102e-09 0.000000000000000000e+00 +4.911499999999999842e-09 0.000000000000000000e+00 +4.911999999999999581e-09 0.000000000000000000e+00 +4.912500000000000148e-09 0.000000000000000000e+00 +4.912999999999999888e-09 0.000000000000000000e+00 +4.913499999999999628e-09 0.000000000000000000e+00 +4.914000000000000195e-09 0.000000000000000000e+00 +4.914499999999999935e-09 0.000000000000000000e+00 +4.914999999999999674e-09 0.000000000000000000e+00 +4.915500000000000241e-09 0.000000000000000000e+00 +4.915999999999999981e-09 0.000000000000000000e+00 +4.916499999999999721e-09 0.000000000000000000e+00 +4.917000000000000288e-09 0.000000000000000000e+00 +4.917500000000000028e-09 0.000000000000000000e+00 +4.917999999999999767e-09 0.000000000000000000e+00 +4.918499999999999507e-09 0.000000000000000000e+00 +4.919000000000000074e-09 0.000000000000000000e+00 +4.919499999999999814e-09 0.000000000000000000e+00 +4.919999999999999554e-09 0.000000000000000000e+00 +4.920500000000000121e-09 0.000000000000000000e+00 +4.920999999999999860e-09 0.000000000000000000e+00 +4.921499999999999600e-09 0.000000000000000000e+00 +4.922000000000000167e-09 0.000000000000000000e+00 +4.922499999999999907e-09 0.000000000000000000e+00 +4.922999999999999647e-09 0.000000000000000000e+00 +4.923500000000000214e-09 0.000000000000000000e+00 +4.923999999999999953e-09 0.000000000000000000e+00 +4.924499999999999693e-09 0.000000000000000000e+00 +4.925000000000000260e-09 0.000000000000000000e+00 +4.925500000000000000e-09 0.000000000000000000e+00 +4.925999999999999740e-09 0.000000000000000000e+00 +4.926500000000000307e-09 0.000000000000000000e+00 +4.927000000000000047e-09 0.000000000000000000e+00 +4.927499999999999786e-09 0.000000000000000000e+00 +4.927999999999999526e-09 0.000000000000000000e+00 +4.928500000000000093e-09 0.000000000000000000e+00 +4.928999999999999833e-09 0.000000000000000000e+00 +4.929499999999999573e-09 0.000000000000000000e+00 +4.930000000000000140e-09 0.000000000000000000e+00 +4.930499999999999879e-09 0.000000000000000000e+00 +4.930999999999999619e-09 0.000000000000000000e+00 +4.931500000000000186e-09 0.000000000000000000e+00 +4.931999999999999926e-09 0.000000000000000000e+00 +4.932499999999999666e-09 0.000000000000000000e+00 +4.933000000000000233e-09 0.000000000000000000e+00 +4.933499999999999972e-09 0.000000000000000000e+00 +4.933999999999999712e-09 0.000000000000000000e+00 +4.934500000000000279e-09 0.000000000000000000e+00 +4.935000000000000019e-09 0.000000000000000000e+00 +4.935499999999999759e-09 0.000000000000000000e+00 +4.935999999999999498e-09 0.000000000000000000e+00 +4.936500000000000065e-09 0.000000000000000000e+00 +4.936999999999999805e-09 0.000000000000000000e+00 +4.937499999999999545e-09 0.000000000000000000e+00 +4.938000000000000112e-09 0.000000000000000000e+00 +4.938499999999999852e-09 0.000000000000000000e+00 +4.938999999999999591e-09 0.000000000000000000e+00 +4.939500000000000158e-09 0.000000000000000000e+00 +4.939999999999999898e-09 0.000000000000000000e+00 +4.940499999999999638e-09 0.000000000000000000e+00 +4.941000000000000205e-09 0.000000000000000000e+00 +4.941499999999999945e-09 0.000000000000000000e+00 +4.941999999999999685e-09 0.000000000000000000e+00 +4.942500000000000251e-09 0.000000000000000000e+00 +4.942999999999999991e-09 0.000000000000000000e+00 +4.943499999999999731e-09 0.000000000000000000e+00 +4.944000000000000298e-09 0.000000000000000000e+00 +4.944500000000000038e-09 0.000000000000000000e+00 +4.944999999999999778e-09 0.000000000000000000e+00 +4.945499999999999517e-09 0.000000000000000000e+00 +4.946000000000000084e-09 0.000000000000000000e+00 +4.946499999999999824e-09 0.000000000000000000e+00 +4.946999999999999564e-09 0.000000000000000000e+00 +4.947500000000000131e-09 0.000000000000000000e+00 +4.947999999999999871e-09 0.000000000000000000e+00 +4.948499999999999610e-09 0.000000000000000000e+00 +4.949000000000000177e-09 0.000000000000000000e+00 +4.949499999999999917e-09 0.000000000000000000e+00 +4.949999999999999657e-09 0.000000000000000000e+00 +4.950500000000000224e-09 0.000000000000000000e+00 +4.950999999999999964e-09 0.000000000000000000e+00 +4.951499999999999703e-09 0.000000000000000000e+00 +4.952000000000000270e-09 0.000000000000000000e+00 +4.952500000000000010e-09 0.000000000000000000e+00 +4.952999999999999750e-09 0.000000000000000000e+00 +4.953499999999999490e-09 0.000000000000000000e+00 +4.954000000000000057e-09 0.000000000000000000e+00 +4.954499999999999796e-09 0.000000000000000000e+00 +4.954999999999999536e-09 0.000000000000000000e+00 +4.955500000000000103e-09 0.000000000000000000e+00 +4.955999999999999843e-09 0.000000000000000000e+00 +4.956499999999999583e-09 0.000000000000000000e+00 +4.957000000000000150e-09 0.000000000000000000e+00 +4.957499999999999889e-09 0.000000000000000000e+00 +4.957999999999999629e-09 0.000000000000000000e+00 +4.958500000000000196e-09 0.000000000000000000e+00 +4.958999999999999936e-09 0.000000000000000000e+00 +4.959499999999999676e-09 0.000000000000000000e+00 +4.960000000000000243e-09 0.000000000000000000e+00 +4.960499999999999983e-09 0.000000000000000000e+00 +4.960999999999999722e-09 0.000000000000000000e+00 +4.961500000000000289e-09 0.000000000000000000e+00 +4.962000000000000029e-09 0.000000000000000000e+00 +4.962499999999999769e-09 0.000000000000000000e+00 +4.962999999999999509e-09 0.000000000000000000e+00 +4.963500000000000076e-09 0.000000000000000000e+00 +4.963999999999999815e-09 0.000000000000000000e+00 +4.964499999999999555e-09 0.000000000000000000e+00 +4.965000000000000122e-09 0.000000000000000000e+00 +4.965499999999999862e-09 0.000000000000000000e+00 +4.965999999999999602e-09 0.000000000000000000e+00 +4.966500000000000169e-09 0.000000000000000000e+00 +4.966999999999999908e-09 0.000000000000000000e+00 +4.967499999999999648e-09 0.000000000000000000e+00 +4.968000000000000215e-09 0.000000000000000000e+00 +4.968499999999999955e-09 0.000000000000000000e+00 +4.968999999999999695e-09 0.000000000000000000e+00 +4.969500000000000262e-09 0.000000000000000000e+00 +4.970000000000000001e-09 0.000000000000000000e+00 +4.970499999999999741e-09 0.000000000000000000e+00 +4.971000000000000308e-09 0.000000000000000000e+00 +4.971500000000000048e-09 0.000000000000000000e+00 +4.971999999999999788e-09 0.000000000000000000e+00 +4.972499999999999527e-09 0.000000000000000000e+00 +4.973000000000000094e-09 0.000000000000000000e+00 +4.973499999999999834e-09 0.000000000000000000e+00 +4.973999999999999574e-09 0.000000000000000000e+00 +4.974500000000000141e-09 0.000000000000000000e+00 +4.974999999999999881e-09 0.000000000000000000e+00 +4.975499999999999621e-09 0.000000000000000000e+00 +4.976000000000000187e-09 0.000000000000000000e+00 +4.976499999999999927e-09 0.000000000000000000e+00 +4.976999999999999667e-09 0.000000000000000000e+00 +4.977500000000000234e-09 0.000000000000000000e+00 +4.977999999999999974e-09 0.000000000000000000e+00 +4.978499999999999714e-09 0.000000000000000000e+00 +4.979000000000000281e-09 0.000000000000000000e+00 +4.979500000000000020e-09 0.000000000000000000e+00 +4.979999999999999760e-09 0.000000000000000000e+00 +4.980499999999999500e-09 0.000000000000000000e+00 +4.981000000000000067e-09 0.000000000000000000e+00 +4.981499999999999807e-09 0.000000000000000000e+00 +4.981999999999999546e-09 0.000000000000000000e+00 +4.982500000000000113e-09 0.000000000000000000e+00 +4.982999999999999853e-09 0.000000000000000000e+00 +4.983499999999999593e-09 0.000000000000000000e+00 +4.984000000000000160e-09 0.000000000000000000e+00 +4.984499999999999900e-09 0.000000000000000000e+00 +4.984999999999999639e-09 0.000000000000000000e+00 +4.985500000000000206e-09 0.000000000000000000e+00 +4.985999999999999946e-09 0.000000000000000000e+00 +4.986499999999999686e-09 0.000000000000000000e+00 +4.987000000000000253e-09 0.000000000000000000e+00 +4.987499999999999993e-09 0.000000000000000000e+00 +4.987999999999999732e-09 0.000000000000000000e+00 +4.988500000000000299e-09 0.000000000000000000e+00 +4.989000000000000039e-09 0.000000000000000000e+00 +4.989499999999999779e-09 0.000000000000000000e+00 +4.989999999999999519e-09 0.000000000000000000e+00 +4.990500000000000086e-09 0.000000000000000000e+00 +4.990999999999999825e-09 0.000000000000000000e+00 +4.991499999999999565e-09 0.000000000000000000e+00 +4.992000000000000132e-09 0.000000000000000000e+00 +4.992499999999999872e-09 0.000000000000000000e+00 +4.992999999999999612e-09 0.000000000000000000e+00 +4.993500000000000179e-09 0.000000000000000000e+00 +4.993999999999999919e-09 0.000000000000000000e+00 +4.994499999999999658e-09 0.000000000000000000e+00 +4.995000000000000225e-09 0.000000000000000000e+00 +4.995499999999999965e-09 0.000000000000000000e+00 +4.995999999999999705e-09 0.000000000000000000e+00 +4.996500000000000272e-09 0.000000000000000000e+00 +4.997000000000000012e-09 0.000000000000000000e+00 +4.997499999999999751e-09 0.000000000000000000e+00 +4.997999999999999491e-09 0.000000000000000000e+00 +4.998500000000000058e-09 0.000000000000000000e+00 +4.998999999999999798e-09 0.000000000000000000e+00 +4.999499999999999538e-09 0.000000000000000000e+00 +5.000000000000000105e-09 0.000000000000000000e+00 +5.000499999999999844e-09 0.000000000000000000e+00 +5.000999999999999584e-09 0.000000000000000000e+00 +5.001500000000000151e-09 0.000000000000000000e+00 +5.001999999999999891e-09 0.000000000000000000e+00 +5.002499999999999631e-09 0.000000000000000000e+00 +5.003000000000000198e-09 0.000000000000000000e+00 +5.003499999999999937e-09 0.000000000000000000e+00 +5.003999999999999677e-09 0.000000000000000000e+00 +5.004500000000000244e-09 0.000000000000000000e+00 +5.004999999999999984e-09 0.000000000000000000e+00 +5.005499999999999724e-09 0.000000000000000000e+00 +5.006000000000000291e-09 0.000000000000000000e+00 +5.006500000000000030e-09 0.000000000000000000e+00 +5.006999999999999770e-09 0.000000000000000000e+00 +5.007499999999999510e-09 0.000000000000000000e+00 +5.008000000000000077e-09 0.000000000000000000e+00 +5.008499999999999817e-09 0.000000000000000000e+00 +5.008999999999999557e-09 0.000000000000000000e+00 +5.009500000000000124e-09 0.000000000000000000e+00 +5.009999999999999863e-09 0.000000000000000000e+00 +5.010499999999999603e-09 0.000000000000000000e+00 +5.011000000000000170e-09 0.000000000000000000e+00 +5.011499999999999910e-09 0.000000000000000000e+00 +5.011999999999999650e-09 0.000000000000000000e+00 +5.012500000000000217e-09 0.000000000000000000e+00 +5.012999999999999956e-09 0.000000000000000000e+00 +5.013499999999999696e-09 0.000000000000000000e+00 +5.014000000000000263e-09 0.000000000000000000e+00 +5.014500000000000003e-09 0.000000000000000000e+00 +5.014999999999999743e-09 0.000000000000000000e+00 +5.015500000000000310e-09 0.000000000000000000e+00 +5.016000000000000049e-09 0.000000000000000000e+00 +5.016499999999999789e-09 0.000000000000000000e+00 +5.016999999999999529e-09 0.000000000000000000e+00 +5.017500000000000096e-09 0.000000000000000000e+00 +5.017999999999999836e-09 0.000000000000000000e+00 +5.018499999999999575e-09 0.000000000000000000e+00 +5.019000000000000142e-09 0.000000000000000000e+00 +5.019499999999999882e-09 0.000000000000000000e+00 +5.019999999999999622e-09 0.000000000000000000e+00 +5.020500000000000189e-09 0.000000000000000000e+00 +5.020999999999999929e-09 0.000000000000000000e+00 +5.021499999999999668e-09 0.000000000000000000e+00 +5.022000000000000235e-09 0.000000000000000000e+00 +5.022499999999999975e-09 0.000000000000000000e+00 +5.022999999999999715e-09 0.000000000000000000e+00 +5.023500000000000282e-09 0.000000000000000000e+00 +5.024000000000000022e-09 0.000000000000000000e+00 +5.024499999999999762e-09 0.000000000000000000e+00 +5.024999999999999501e-09 0.000000000000000000e+00 +5.025500000000000068e-09 0.000000000000000000e+00 +5.025999999999999808e-09 0.000000000000000000e+00 +5.026499999999999548e-09 0.000000000000000000e+00 +5.027000000000000115e-09 0.000000000000000000e+00 +5.027499999999999855e-09 0.000000000000000000e+00 +5.027999999999999594e-09 0.000000000000000000e+00 +5.028500000000000161e-09 0.000000000000000000e+00 +5.028999999999999901e-09 0.000000000000000000e+00 +5.029499999999999641e-09 0.000000000000000000e+00 +5.030000000000000208e-09 0.000000000000000000e+00 +5.030499999999999948e-09 0.000000000000000000e+00 +5.030999999999999687e-09 0.000000000000000000e+00 +5.031500000000000254e-09 0.000000000000000000e+00 +5.031999999999999994e-09 0.000000000000000000e+00 +5.032499999999999734e-09 0.000000000000000000e+00 +5.033000000000000301e-09 0.000000000000000000e+00 +5.033500000000000041e-09 0.000000000000000000e+00 +5.033999999999999780e-09 0.000000000000000000e+00 +5.034499999999999520e-09 0.000000000000000000e+00 +5.035000000000000087e-09 0.000000000000000000e+00 +5.035499999999999827e-09 0.000000000000000000e+00 +5.035999999999999567e-09 0.000000000000000000e+00 +5.036500000000000134e-09 0.000000000000000000e+00 +5.036999999999999873e-09 0.000000000000000000e+00 +5.037499999999999613e-09 0.000000000000000000e+00 +5.038000000000000180e-09 0.000000000000000000e+00 +5.038499999999999920e-09 0.000000000000000000e+00 +5.038999999999999660e-09 0.000000000000000000e+00 +5.039500000000000227e-09 0.000000000000000000e+00 +5.039999999999999966e-09 0.000000000000000000e+00 +5.040499999999999706e-09 0.000000000000000000e+00 +5.041000000000000273e-09 0.000000000000000000e+00 +5.041500000000000013e-09 0.000000000000000000e+00 +5.041999999999999753e-09 0.000000000000000000e+00 +5.042499999999999493e-09 0.000000000000000000e+00 +5.043000000000000060e-09 0.000000000000000000e+00 +5.043499999999999799e-09 0.000000000000000000e+00 +5.043999999999999539e-09 0.000000000000000000e+00 +5.044500000000000106e-09 0.000000000000000000e+00 +5.044999999999999846e-09 0.000000000000000000e+00 +5.045499999999999586e-09 0.000000000000000000e+00 +5.046000000000000153e-09 0.000000000000000000e+00 +5.046499999999999892e-09 0.000000000000000000e+00 +5.046999999999999632e-09 0.000000000000000000e+00 +5.047500000000000199e-09 0.000000000000000000e+00 +5.047999999999999939e-09 0.000000000000000000e+00 +5.048499999999999679e-09 0.000000000000000000e+00 +5.049000000000000246e-09 0.000000000000000000e+00 +5.049499999999999985e-09 0.000000000000000000e+00 +5.049999999999999725e-09 0.000000000000000000e+00 +5.050500000000000292e-09 0.000000000000000000e+00 +5.051000000000000032e-09 0.000000000000000000e+00 +5.051499999999999772e-09 0.000000000000000000e+00 +5.051999999999999511e-09 0.000000000000000000e+00 +5.052500000000000078e-09 0.000000000000000000e+00 +5.052999999999999818e-09 0.000000000000000000e+00 +5.053499999999999558e-09 0.000000000000000000e+00 +5.054000000000000125e-09 0.000000000000000000e+00 +5.054499999999999865e-09 0.000000000000000000e+00 +5.054999999999999604e-09 0.000000000000000000e+00 +5.055500000000000171e-09 0.000000000000000000e+00 +5.055999999999999911e-09 0.000000000000000000e+00 +5.056499999999999651e-09 0.000000000000000000e+00 +5.057000000000000218e-09 0.000000000000000000e+00 +5.057499999999999958e-09 0.000000000000000000e+00 +5.057999999999999698e-09 0.000000000000000000e+00 +5.058500000000000264e-09 0.000000000000000000e+00 +5.059000000000000004e-09 0.000000000000000000e+00 +5.059499999999999744e-09 0.000000000000000000e+00 +5.060000000000000311e-09 0.000000000000000000e+00 +5.060500000000000051e-09 0.000000000000000000e+00 +5.060999999999999791e-09 0.000000000000000000e+00 +5.061499999999999530e-09 0.000000000000000000e+00 +5.062000000000000097e-09 0.000000000000000000e+00 +5.062499999999999837e-09 0.000000000000000000e+00 +5.062999999999999577e-09 0.000000000000000000e+00 +5.063500000000000144e-09 0.000000000000000000e+00 +5.063999999999999884e-09 0.000000000000000000e+00 +5.064499999999999623e-09 0.000000000000000000e+00 +5.065000000000000190e-09 0.000000000000000000e+00 +5.065499999999999930e-09 0.000000000000000000e+00 +5.065999999999999670e-09 0.000000000000000000e+00 +5.066500000000000237e-09 0.000000000000000000e+00 +5.066999999999999977e-09 0.000000000000000000e+00 +5.067499999999999716e-09 0.000000000000000000e+00 +5.068000000000000283e-09 0.000000000000000000e+00 +5.068500000000000023e-09 0.000000000000000000e+00 +5.068999999999999763e-09 0.000000000000000000e+00 +5.069499999999999503e-09 0.000000000000000000e+00 +5.070000000000000070e-09 0.000000000000000000e+00 +5.070499999999999809e-09 0.000000000000000000e+00 +5.070999999999999549e-09 0.000000000000000000e+00 +5.071500000000000116e-09 0.000000000000000000e+00 +5.071999999999999856e-09 0.000000000000000000e+00 +5.072499999999999596e-09 0.000000000000000000e+00 +5.073000000000000163e-09 0.000000000000000000e+00 +5.073499999999999902e-09 0.000000000000000000e+00 +5.073999999999999642e-09 0.000000000000000000e+00 +5.074500000000000209e-09 0.000000000000000000e+00 +5.074999999999999949e-09 0.000000000000000000e+00 +5.075499999999999689e-09 0.000000000000000000e+00 +5.076000000000000256e-09 0.000000000000000000e+00 +5.076499999999999996e-09 0.000000000000000000e+00 +5.076999999999999735e-09 0.000000000000000000e+00 +5.077500000000000302e-09 0.000000000000000000e+00 +5.078000000000000042e-09 0.000000000000000000e+00 +5.078499999999999782e-09 0.000000000000000000e+00 +5.078999999999999522e-09 0.000000000000000000e+00 +5.079500000000000089e-09 0.000000000000000000e+00 +5.079999999999999828e-09 0.000000000000000000e+00 +5.080499999999999568e-09 0.000000000000000000e+00 +5.081000000000000135e-09 0.000000000000000000e+00 +5.081499999999999875e-09 0.000000000000000000e+00 +5.081999999999999615e-09 0.000000000000000000e+00 +5.082500000000000182e-09 0.000000000000000000e+00 +5.082999999999999921e-09 0.000000000000000000e+00 +5.083499999999999661e-09 0.000000000000000000e+00 +5.084000000000000228e-09 0.000000000000000000e+00 +5.084499999999999968e-09 0.000000000000000000e+00 +5.084999999999999708e-09 0.000000000000000000e+00 +5.085500000000000275e-09 0.000000000000000000e+00 +5.086000000000000014e-09 0.000000000000000000e+00 +5.086499999999999754e-09 0.000000000000000000e+00 +5.086999999999999494e-09 0.000000000000000000e+00 +5.087500000000000061e-09 0.000000000000000000e+00 +5.087999999999999801e-09 0.000000000000000000e+00 +5.088499999999999541e-09 0.000000000000000000e+00 +5.089000000000000107e-09 0.000000000000000000e+00 +5.089499999999999847e-09 0.000000000000000000e+00 +5.089999999999999587e-09 0.000000000000000000e+00 +5.090500000000000154e-09 0.000000000000000000e+00 +5.090999999999999894e-09 0.000000000000000000e+00 +5.091499999999999634e-09 0.000000000000000000e+00 +5.092000000000000201e-09 0.000000000000000000e+00 +5.092499999999999940e-09 0.000000000000000000e+00 +5.092999999999999680e-09 0.000000000000000000e+00 +5.093500000000000247e-09 0.000000000000000000e+00 +5.093999999999999987e-09 0.000000000000000000e+00 +5.094499999999999727e-09 0.000000000000000000e+00 +5.095000000000000294e-09 0.000000000000000000e+00 +5.095500000000000033e-09 0.000000000000000000e+00 +5.095999999999999773e-09 0.000000000000000000e+00 +5.096499999999999513e-09 0.000000000000000000e+00 +5.097000000000000080e-09 0.000000000000000000e+00 +5.097499999999999820e-09 0.000000000000000000e+00 +5.097999999999999559e-09 0.000000000000000000e+00 +5.098500000000000126e-09 0.000000000000000000e+00 +5.098999999999999866e-09 0.000000000000000000e+00 +5.099499999999999606e-09 0.000000000000000000e+00 +5.100000000000000173e-09 0.000000000000000000e+00 +5.100499999999999913e-09 0.000000000000000000e+00 +5.100999999999999652e-09 0.000000000000000000e+00 +5.101500000000000219e-09 0.000000000000000000e+00 +5.101999999999999959e-09 0.000000000000000000e+00 +5.102499999999999699e-09 0.000000000000000000e+00 +5.103000000000000266e-09 0.000000000000000000e+00 +5.103500000000000006e-09 0.000000000000000000e+00 +5.103999999999999745e-09 0.000000000000000000e+00 +5.104499999999999485e-09 0.000000000000000000e+00 +5.105000000000000052e-09 0.000000000000000000e+00 +5.105499999999999792e-09 0.000000000000000000e+00 +5.105999999999999532e-09 0.000000000000000000e+00 +5.106500000000000099e-09 0.000000000000000000e+00 +5.106999999999999839e-09 0.000000000000000000e+00 +5.107499999999999578e-09 0.000000000000000000e+00 +5.108000000000000145e-09 0.000000000000000000e+00 +5.108499999999999885e-09 0.000000000000000000e+00 +5.108999999999999625e-09 0.000000000000000000e+00 +5.109500000000000192e-09 0.000000000000000000e+00 +5.109999999999999932e-09 0.000000000000000000e+00 +5.110499999999999671e-09 0.000000000000000000e+00 +5.111000000000000238e-09 0.000000000000000000e+00 +5.111499999999999978e-09 0.000000000000000000e+00 +5.111999999999999718e-09 0.000000000000000000e+00 +5.112500000000000285e-09 0.000000000000000000e+00 +5.113000000000000025e-09 0.000000000000000000e+00 +5.113499999999999764e-09 0.000000000000000000e+00 +5.113999999999999504e-09 0.000000000000000000e+00 +5.114500000000000071e-09 0.000000000000000000e+00 +5.114999999999999811e-09 0.000000000000000000e+00 +5.115499999999999551e-09 0.000000000000000000e+00 +5.116000000000000118e-09 0.000000000000000000e+00 +5.116499999999999857e-09 0.000000000000000000e+00 +5.116999999999999597e-09 0.000000000000000000e+00 +5.117500000000000164e-09 0.000000000000000000e+00 +5.117999999999999904e-09 0.000000000000000000e+00 +5.118499999999999644e-09 0.000000000000000000e+00 +5.119000000000000211e-09 0.000000000000000000e+00 +5.119499999999999950e-09 0.000000000000000000e+00 +5.119999999999999690e-09 0.000000000000000000e+00 +5.120500000000000257e-09 0.000000000000000000e+00 +5.120999999999999997e-09 0.000000000000000000e+00 +5.121499999999999737e-09 0.000000000000000000e+00 +5.122000000000000304e-09 0.000000000000000000e+00 +5.122500000000000043e-09 0.000000000000000000e+00 +5.122999999999999783e-09 0.000000000000000000e+00 +5.123499999999999523e-09 0.000000000000000000e+00 +5.124000000000000090e-09 0.000000000000000000e+00 +5.124499999999999830e-09 0.000000000000000000e+00 +5.124999999999999570e-09 0.000000000000000000e+00 +5.125500000000000137e-09 0.000000000000000000e+00 +5.125999999999999876e-09 0.000000000000000000e+00 +5.126499999999999616e-09 0.000000000000000000e+00 +5.127000000000000183e-09 0.000000000000000000e+00 +5.127499999999999923e-09 0.000000000000000000e+00 +5.127999999999999663e-09 0.000000000000000000e+00 +5.128500000000000230e-09 0.000000000000000000e+00 +5.128999999999999969e-09 0.000000000000000000e+00 +5.129499999999999709e-09 0.000000000000000000e+00 +5.130000000000000276e-09 0.000000000000000000e+00 +5.130500000000000016e-09 0.000000000000000000e+00 +5.130999999999999756e-09 0.000000000000000000e+00 +5.131499999999999495e-09 0.000000000000000000e+00 +5.132000000000000062e-09 0.000000000000000000e+00 +5.132499999999999802e-09 0.000000000000000000e+00 +5.132999999999999542e-09 0.000000000000000000e+00 +5.133500000000000109e-09 0.000000000000000000e+00 +5.133999999999999849e-09 0.000000000000000000e+00 +5.134499999999999588e-09 0.000000000000000000e+00 +5.135000000000000155e-09 0.000000000000000000e+00 +5.135499999999999895e-09 0.000000000000000000e+00 +5.135999999999999635e-09 0.000000000000000000e+00 +5.136500000000000202e-09 0.000000000000000000e+00 +5.136999999999999942e-09 0.000000000000000000e+00 +5.137499999999999681e-09 0.000000000000000000e+00 +5.138000000000000248e-09 0.000000000000000000e+00 +5.138499999999999988e-09 0.000000000000000000e+00 +5.138999999999999728e-09 0.000000000000000000e+00 +5.139500000000000295e-09 0.000000000000000000e+00 +5.140000000000000035e-09 0.000000000000000000e+00 +5.140499999999999775e-09 0.000000000000000000e+00 +5.140999999999999514e-09 0.000000000000000000e+00 +5.141500000000000081e-09 0.000000000000000000e+00 +5.141999999999999821e-09 0.000000000000000000e+00 +5.142499999999999561e-09 0.000000000000000000e+00 +5.143000000000000128e-09 0.000000000000000000e+00 +5.143499999999999868e-09 0.000000000000000000e+00 +5.143999999999999607e-09 0.000000000000000000e+00 +5.144500000000000174e-09 0.000000000000000000e+00 +5.144999999999999914e-09 0.000000000000000000e+00 +5.145499999999999654e-09 0.000000000000000000e+00 +5.146000000000000221e-09 0.000000000000000000e+00 +5.146499999999999961e-09 0.000000000000000000e+00 +5.146999999999999700e-09 0.000000000000000000e+00 +5.147500000000000267e-09 0.000000000000000000e+00 +5.148000000000000007e-09 0.000000000000000000e+00 +5.148499999999999747e-09 0.000000000000000000e+00 +5.148999999999999487e-09 0.000000000000000000e+00 +5.149500000000000054e-09 0.000000000000000000e+00 +5.149999999999999793e-09 0.000000000000000000e+00 +5.150499999999999533e-09 0.000000000000000000e+00 +5.151000000000000100e-09 0.000000000000000000e+00 +5.151499999999999840e-09 0.000000000000000000e+00 +5.151999999999999580e-09 0.000000000000000000e+00 +5.152500000000000147e-09 0.000000000000000000e+00 +5.152999999999999886e-09 0.000000000000000000e+00 +5.153499999999999626e-09 0.000000000000000000e+00 +5.154000000000000193e-09 0.000000000000000000e+00 +5.154499999999999933e-09 0.000000000000000000e+00 +5.154999999999999673e-09 0.000000000000000000e+00 +5.155500000000000240e-09 0.000000000000000000e+00 +5.155999999999999979e-09 0.000000000000000000e+00 +5.156499999999999719e-09 0.000000000000000000e+00 +5.157000000000000286e-09 0.000000000000000000e+00 +5.157500000000000026e-09 0.000000000000000000e+00 +5.157999999999999766e-09 0.000000000000000000e+00 +5.158499999999999506e-09 0.000000000000000000e+00 +5.159000000000000073e-09 0.000000000000000000e+00 +5.159499999999999812e-09 0.000000000000000000e+00 +5.159999999999999552e-09 0.000000000000000000e+00 +5.160500000000000119e-09 0.000000000000000000e+00 +5.160999999999999859e-09 0.000000000000000000e+00 +5.161499999999999599e-09 0.000000000000000000e+00 +5.162000000000000166e-09 0.000000000000000000e+00 +5.162499999999999905e-09 0.000000000000000000e+00 +5.162999999999999645e-09 0.000000000000000000e+00 +5.163500000000000212e-09 0.000000000000000000e+00 +5.163999999999999952e-09 0.000000000000000000e+00 +5.164499999999999692e-09 0.000000000000000000e+00 +5.165000000000000259e-09 0.000000000000000000e+00 +5.165499999999999998e-09 0.000000000000000000e+00 +5.165999999999999738e-09 0.000000000000000000e+00 +5.166500000000000305e-09 0.000000000000000000e+00 +5.167000000000000045e-09 0.000000000000000000e+00 +5.167499999999999785e-09 0.000000000000000000e+00 +5.167999999999999524e-09 0.000000000000000000e+00 +5.168500000000000091e-09 0.000000000000000000e+00 +5.168999999999999831e-09 0.000000000000000000e+00 +5.169499999999999571e-09 0.000000000000000000e+00 +5.170000000000000138e-09 0.000000000000000000e+00 +5.170499999999999878e-09 0.000000000000000000e+00 +5.170999999999999618e-09 0.000000000000000000e+00 +5.171500000000000184e-09 0.000000000000000000e+00 +5.171999999999999924e-09 0.000000000000000000e+00 +5.172499999999999664e-09 0.000000000000000000e+00 +5.173000000000000231e-09 0.000000000000000000e+00 +5.173499999999999971e-09 0.000000000000000000e+00 +5.173999999999999711e-09 0.000000000000000000e+00 +5.174500000000000278e-09 0.000000000000000000e+00 +5.175000000000000017e-09 0.000000000000000000e+00 +5.175499999999999757e-09 0.000000000000000000e+00 +5.175999999999999497e-09 0.000000000000000000e+00 +5.176500000000000064e-09 0.000000000000000000e+00 +5.176999999999999804e-09 0.000000000000000000e+00 +5.177499999999999543e-09 0.000000000000000000e+00 +5.178000000000000110e-09 0.000000000000000000e+00 +5.178499999999999850e-09 0.000000000000000000e+00 +5.178999999999999590e-09 0.000000000000000000e+00 +5.179500000000000157e-09 0.000000000000000000e+00 +5.179999999999999897e-09 0.000000000000000000e+00 +5.180499999999999636e-09 0.000000000000000000e+00 +5.181000000000000203e-09 0.000000000000000000e+00 +5.181499999999999943e-09 0.000000000000000000e+00 +5.181999999999999683e-09 0.000000000000000000e+00 +5.182500000000000250e-09 0.000000000000000000e+00 +5.182999999999999990e-09 0.000000000000000000e+00 +5.183499999999999729e-09 0.000000000000000000e+00 +5.184000000000000296e-09 0.000000000000000000e+00 +5.184500000000000036e-09 0.000000000000000000e+00 +5.184999999999999776e-09 0.000000000000000000e+00 +5.185499999999999516e-09 0.000000000000000000e+00 +5.186000000000000083e-09 0.000000000000000000e+00 +5.186499999999999822e-09 0.000000000000000000e+00 +5.186999999999999562e-09 0.000000000000000000e+00 +5.187500000000000129e-09 0.000000000000000000e+00 +5.187999999999999869e-09 0.000000000000000000e+00 +5.188499999999999609e-09 0.000000000000000000e+00 +5.189000000000000176e-09 0.000000000000000000e+00 +5.189499999999999916e-09 0.000000000000000000e+00 +5.189999999999999655e-09 0.000000000000000000e+00 +5.190500000000000222e-09 0.000000000000000000e+00 +5.190999999999999962e-09 0.000000000000000000e+00 +5.191499999999999702e-09 0.000000000000000000e+00 +5.192000000000000269e-09 0.000000000000000000e+00 +5.192500000000000009e-09 0.000000000000000000e+00 +5.192999999999999748e-09 0.000000000000000000e+00 +5.193499999999999488e-09 0.000000000000000000e+00 +5.194000000000000055e-09 0.000000000000000000e+00 +5.194499999999999795e-09 0.000000000000000000e+00 +5.194999999999999535e-09 0.000000000000000000e+00 +5.195500000000000102e-09 0.000000000000000000e+00 +5.195999999999999841e-09 0.000000000000000000e+00 +5.196499999999999581e-09 0.000000000000000000e+00 +5.197000000000000148e-09 0.000000000000000000e+00 +5.197499999999999888e-09 0.000000000000000000e+00 +5.197999999999999628e-09 0.000000000000000000e+00 +5.198500000000000195e-09 0.000000000000000000e+00 +5.198999999999999934e-09 0.000000000000000000e+00 +5.199499999999999674e-09 0.000000000000000000e+00 +5.200000000000000241e-09 0.000000000000000000e+00 +5.200499999999999981e-09 0.000000000000000000e+00 +5.200999999999999721e-09 0.000000000000000000e+00 +5.201500000000000288e-09 0.000000000000000000e+00 +5.202000000000000027e-09 0.000000000000000000e+00 +5.202499999999999767e-09 0.000000000000000000e+00 +5.202999999999999507e-09 0.000000000000000000e+00 +5.203500000000000074e-09 0.000000000000000000e+00 +5.203999999999999814e-09 0.000000000000000000e+00 +5.204499999999999554e-09 0.000000000000000000e+00 +5.205000000000000120e-09 0.000000000000000000e+00 +5.205499999999999860e-09 0.000000000000000000e+00 +5.205999999999999600e-09 0.000000000000000000e+00 +5.206500000000000167e-09 0.000000000000000000e+00 +5.206999999999999907e-09 0.000000000000000000e+00 +5.207499999999999647e-09 0.000000000000000000e+00 +5.208000000000000214e-09 0.000000000000000000e+00 +5.208499999999999953e-09 0.000000000000000000e+00 +5.208999999999999693e-09 0.000000000000000000e+00 +5.209500000000000260e-09 0.000000000000000000e+00 +5.210000000000000000e-09 0.000000000000000000e+00 +5.210499999999999740e-09 0.000000000000000000e+00 +5.211000000000000307e-09 0.000000000000000000e+00 +5.211500000000000046e-09 0.000000000000000000e+00 +5.211999999999999786e-09 0.000000000000000000e+00 +5.212499999999999526e-09 0.000000000000000000e+00 +5.213000000000000093e-09 0.000000000000000000e+00 +5.213499999999999833e-09 0.000000000000000000e+00 +5.213999999999999572e-09 0.000000000000000000e+00 +5.214500000000000139e-09 0.000000000000000000e+00 +5.214999999999999879e-09 0.000000000000000000e+00 +5.215499999999999619e-09 0.000000000000000000e+00 +5.216000000000000186e-09 0.000000000000000000e+00 +5.216499999999999926e-09 0.000000000000000000e+00 +5.216999999999999665e-09 0.000000000000000000e+00 +5.217500000000000232e-09 0.000000000000000000e+00 +5.217999999999999972e-09 0.000000000000000000e+00 +5.218499999999999712e-09 0.000000000000000000e+00 +5.219000000000000279e-09 0.000000000000000000e+00 +5.219500000000000019e-09 0.000000000000000000e+00 +5.219999999999999758e-09 0.000000000000000000e+00 +5.220499999999999498e-09 0.000000000000000000e+00 +5.221000000000000065e-09 0.000000000000000000e+00 +5.221499999999999805e-09 0.000000000000000000e+00 +5.221999999999999545e-09 0.000000000000000000e+00 +5.222500000000000112e-09 0.000000000000000000e+00 +5.222999999999999852e-09 0.000000000000000000e+00 +5.223499999999999591e-09 0.000000000000000000e+00 +5.224000000000000158e-09 0.000000000000000000e+00 +5.224499999999999898e-09 0.000000000000000000e+00 +5.224999999999999638e-09 0.000000000000000000e+00 +5.225500000000000205e-09 0.000000000000000000e+00 +5.225999999999999945e-09 0.000000000000000000e+00 +5.226499999999999684e-09 0.000000000000000000e+00 +5.227000000000000251e-09 0.000000000000000000e+00 +5.227499999999999991e-09 0.000000000000000000e+00 +5.227999999999999731e-09 0.000000000000000000e+00 +5.228500000000000298e-09 0.000000000000000000e+00 +5.229000000000000038e-09 0.000000000000000000e+00 +5.229499999999999777e-09 0.000000000000000000e+00 +5.229999999999999517e-09 0.000000000000000000e+00 +5.230500000000000084e-09 0.000000000000000000e+00 +5.230999999999999824e-09 0.000000000000000000e+00 +5.231499999999999564e-09 0.000000000000000000e+00 +5.232000000000000131e-09 0.000000000000000000e+00 +5.232499999999999870e-09 0.000000000000000000e+00 +5.232999999999999610e-09 0.000000000000000000e+00 +5.233500000000000177e-09 0.000000000000000000e+00 +5.233999999999999917e-09 0.000000000000000000e+00 +5.234499999999999657e-09 0.000000000000000000e+00 +5.235000000000000224e-09 0.000000000000000000e+00 +5.235499999999999963e-09 0.000000000000000000e+00 +5.235999999999999703e-09 0.000000000000000000e+00 +5.236500000000000270e-09 0.000000000000000000e+00 +5.237000000000000010e-09 0.000000000000000000e+00 +5.237499999999999750e-09 0.000000000000000000e+00 +5.237999999999999490e-09 0.000000000000000000e+00 +5.238500000000000056e-09 0.000000000000000000e+00 +5.238999999999999796e-09 0.000000000000000000e+00 +5.239499999999999536e-09 0.000000000000000000e+00 +5.240000000000000103e-09 0.000000000000000000e+00 +5.240499999999999843e-09 0.000000000000000000e+00 +5.240999999999999583e-09 0.000000000000000000e+00 +5.241500000000000150e-09 0.000000000000000000e+00 +5.241999999999999889e-09 0.000000000000000000e+00 +5.242499999999999629e-09 0.000000000000000000e+00 +5.243000000000000196e-09 0.000000000000000000e+00 +5.243499999999999936e-09 0.000000000000000000e+00 +5.243999999999999676e-09 0.000000000000000000e+00 +5.244500000000000243e-09 0.000000000000000000e+00 +5.244999999999999982e-09 0.000000000000000000e+00 +5.245499999999999722e-09 0.000000000000000000e+00 +5.246000000000000289e-09 0.000000000000000000e+00 +5.246500000000000029e-09 0.000000000000000000e+00 +5.246999999999999769e-09 0.000000000000000000e+00 +5.247499999999999508e-09 0.000000000000000000e+00 +5.248000000000000075e-09 0.000000000000000000e+00 +5.248499999999999815e-09 0.000000000000000000e+00 +5.248999999999999555e-09 0.000000000000000000e+00 +5.249500000000000122e-09 0.000000000000000000e+00 +5.249999999999999862e-09 0.000000000000000000e+00 +5.250499999999999601e-09 0.000000000000000000e+00 +5.251000000000000168e-09 0.000000000000000000e+00 +5.251499999999999908e-09 0.000000000000000000e+00 +5.251999999999999648e-09 0.000000000000000000e+00 +5.252500000000000215e-09 0.000000000000000000e+00 +5.252999999999999955e-09 0.000000000000000000e+00 +5.253499999999999695e-09 0.000000000000000000e+00 +5.254000000000000261e-09 0.000000000000000000e+00 +5.254500000000000001e-09 0.000000000000000000e+00 +5.254999999999999741e-09 0.000000000000000000e+00 +5.255499999999999481e-09 0.000000000000000000e+00 +5.256000000000000048e-09 0.000000000000000000e+00 +5.256499999999999788e-09 0.000000000000000000e+00 +5.256999999999999527e-09 0.000000000000000000e+00 +5.257500000000000094e-09 0.000000000000000000e+00 +5.257999999999999834e-09 0.000000000000000000e+00 +5.258499999999999574e-09 0.000000000000000000e+00 +5.259000000000000141e-09 0.000000000000000000e+00 +5.259499999999999881e-09 0.000000000000000000e+00 +5.259999999999999620e-09 0.000000000000000000e+00 +5.260500000000000187e-09 0.000000000000000000e+00 +5.260999999999999927e-09 0.000000000000000000e+00 +5.261499999999999667e-09 0.000000000000000000e+00 +5.262000000000000234e-09 0.000000000000000000e+00 +5.262499999999999974e-09 0.000000000000000000e+00 +5.262999999999999713e-09 0.000000000000000000e+00 +5.263500000000000280e-09 0.000000000000000000e+00 +5.264000000000000020e-09 0.000000000000000000e+00 +5.264499999999999760e-09 0.000000000000000000e+00 +5.264999999999999500e-09 0.000000000000000000e+00 +5.265500000000000067e-09 0.000000000000000000e+00 +5.265999999999999806e-09 0.000000000000000000e+00 +5.266499999999999546e-09 0.000000000000000000e+00 +5.267000000000000113e-09 0.000000000000000000e+00 +5.267499999999999853e-09 0.000000000000000000e+00 +5.267999999999999593e-09 0.000000000000000000e+00 +5.268500000000000160e-09 0.000000000000000000e+00 +5.268999999999999899e-09 0.000000000000000000e+00 +5.269499999999999639e-09 0.000000000000000000e+00 +5.270000000000000206e-09 0.000000000000000000e+00 +5.270499999999999946e-09 0.000000000000000000e+00 +5.270999999999999686e-09 0.000000000000000000e+00 +5.271500000000000253e-09 0.000000000000000000e+00 +5.271999999999999993e-09 0.000000000000000000e+00 +5.272499999999999732e-09 0.000000000000000000e+00 +5.273000000000000299e-09 0.000000000000000000e+00 +5.273500000000000039e-09 0.000000000000000000e+00 +5.273999999999999779e-09 0.000000000000000000e+00 +5.274499999999999519e-09 0.000000000000000000e+00 +5.275000000000000086e-09 0.000000000000000000e+00 +5.275499999999999825e-09 0.000000000000000000e+00 +5.275999999999999565e-09 0.000000000000000000e+00 +5.276500000000000132e-09 0.000000000000000000e+00 +5.276999999999999872e-09 0.000000000000000000e+00 +5.277499999999999612e-09 0.000000000000000000e+00 +5.278000000000000179e-09 0.000000000000000000e+00 +5.278499999999999918e-09 0.000000000000000000e+00 +5.278999999999999658e-09 0.000000000000000000e+00 +5.279500000000000225e-09 0.000000000000000000e+00 +5.279999999999999965e-09 0.000000000000000000e+00 +5.280499999999999705e-09 0.000000000000000000e+00 +5.281000000000000272e-09 0.000000000000000000e+00 +5.281500000000000011e-09 0.000000000000000000e+00 +5.281999999999999751e-09 0.000000000000000000e+00 +5.282499999999999491e-09 0.000000000000000000e+00 +5.283000000000000058e-09 0.000000000000000000e+00 +5.283499999999999798e-09 0.000000000000000000e+00 +5.283999999999999537e-09 0.000000000000000000e+00 +5.284500000000000104e-09 0.000000000000000000e+00 +5.284999999999999844e-09 0.000000000000000000e+00 +5.285499999999999584e-09 0.000000000000000000e+00 +5.286000000000000151e-09 0.000000000000000000e+00 +5.286499999999999891e-09 0.000000000000000000e+00 +5.286999999999999631e-09 0.000000000000000000e+00 +5.287500000000000197e-09 0.000000000000000000e+00 +5.287999999999999937e-09 0.000000000000000000e+00 +5.288499999999999677e-09 0.000000000000000000e+00 +5.289000000000000244e-09 0.000000000000000000e+00 +5.289499999999999984e-09 0.000000000000000000e+00 +5.289999999999999724e-09 0.000000000000000000e+00 +5.290500000000000291e-09 0.000000000000000000e+00 +5.291000000000000030e-09 0.000000000000000000e+00 +5.291499999999999770e-09 0.000000000000000000e+00 +5.291999999999999510e-09 0.000000000000000000e+00 +5.292500000000000077e-09 0.000000000000000000e+00 +5.292999999999999817e-09 0.000000000000000000e+00 +5.293499999999999556e-09 0.000000000000000000e+00 +5.294000000000000123e-09 0.000000000000000000e+00 +5.294499999999999863e-09 0.000000000000000000e+00 +5.294999999999999603e-09 0.000000000000000000e+00 +5.295500000000000170e-09 0.000000000000000000e+00 +5.295999999999999910e-09 0.000000000000000000e+00 +5.296499999999999649e-09 0.000000000000000000e+00 +5.297000000000000216e-09 0.000000000000000000e+00 +5.297499999999999956e-09 0.000000000000000000e+00 +5.297999999999999696e-09 0.000000000000000000e+00 +5.298500000000000263e-09 0.000000000000000000e+00 +5.299000000000000003e-09 0.000000000000000000e+00 +5.299499999999999742e-09 0.000000000000000000e+00 +5.299999999999999482e-09 0.000000000000000000e+00 +5.300500000000000049e-09 0.000000000000000000e+00 +5.300999999999999789e-09 0.000000000000000000e+00 +5.301499999999999529e-09 0.000000000000000000e+00 +5.302000000000000096e-09 0.000000000000000000e+00 +5.302499999999999835e-09 0.000000000000000000e+00 +5.302999999999999575e-09 0.000000000000000000e+00 +5.303500000000000142e-09 0.000000000000000000e+00 +5.303999999999999882e-09 0.000000000000000000e+00 +5.304499999999999622e-09 0.000000000000000000e+00 +5.305000000000000189e-09 0.000000000000000000e+00 +5.305499999999999929e-09 0.000000000000000000e+00 +5.305999999999999668e-09 0.000000000000000000e+00 +5.306500000000000235e-09 0.000000000000000000e+00 +5.306999999999999975e-09 0.000000000000000000e+00 +5.307499999999999715e-09 0.000000000000000000e+00 +5.308000000000000282e-09 0.000000000000000000e+00 +5.308500000000000022e-09 0.000000000000000000e+00 +5.308999999999999761e-09 0.000000000000000000e+00 +5.309499999999999501e-09 0.000000000000000000e+00 +5.310000000000000068e-09 0.000000000000000000e+00 +5.310499999999999808e-09 0.000000000000000000e+00 +5.310999999999999548e-09 0.000000000000000000e+00 +5.311500000000000115e-09 0.000000000000000000e+00 +5.311999999999999854e-09 0.000000000000000000e+00 +5.312499999999999594e-09 0.000000000000000000e+00 +5.313000000000000161e-09 0.000000000000000000e+00 +5.313499999999999901e-09 0.000000000000000000e+00 +5.313999999999999641e-09 0.000000000000000000e+00 +5.314500000000000208e-09 0.000000000000000000e+00 +5.314999999999999947e-09 0.000000000000000000e+00 +5.315499999999999687e-09 0.000000000000000000e+00 +5.316000000000000254e-09 0.000000000000000000e+00 +5.316499999999999994e-09 0.000000000000000000e+00 +5.316999999999999734e-09 0.000000000000000000e+00 +5.317500000000000301e-09 0.000000000000000000e+00 +5.318000000000000040e-09 0.000000000000000000e+00 +5.318499999999999780e-09 0.000000000000000000e+00 +5.318999999999999520e-09 0.000000000000000000e+00 +5.319500000000000087e-09 0.000000000000000000e+00 +5.319999999999999827e-09 0.000000000000000000e+00 +5.320499999999999567e-09 0.000000000000000000e+00 +5.321000000000000133e-09 0.000000000000000000e+00 +5.321499999999999873e-09 0.000000000000000000e+00 +5.321999999999999613e-09 0.000000000000000000e+00 +5.322500000000000180e-09 0.000000000000000000e+00 +5.322999999999999920e-09 0.000000000000000000e+00 +5.323499999999999660e-09 0.000000000000000000e+00 +5.324000000000000227e-09 0.000000000000000000e+00 +5.324499999999999966e-09 0.000000000000000000e+00 +5.324999999999999706e-09 0.000000000000000000e+00 +5.325500000000000273e-09 0.000000000000000000e+00 +5.326000000000000013e-09 0.000000000000000000e+00 +5.326499999999999753e-09 0.000000000000000000e+00 +5.326999999999999492e-09 0.000000000000000000e+00 +5.327500000000000059e-09 0.000000000000000000e+00 +5.327999999999999799e-09 0.000000000000000000e+00 +5.328499999999999539e-09 0.000000000000000000e+00 +5.329000000000000106e-09 0.000000000000000000e+00 +5.329499999999999846e-09 0.000000000000000000e+00 +5.329999999999999585e-09 0.000000000000000000e+00 +5.330500000000000152e-09 0.000000000000000000e+00 +5.330999999999999892e-09 0.000000000000000000e+00 +5.331499999999999632e-09 0.000000000000000000e+00 +5.332000000000000199e-09 0.000000000000000000e+00 +5.332499999999999939e-09 0.000000000000000000e+00 +5.332999999999999678e-09 0.000000000000000000e+00 +5.333500000000000245e-09 0.000000000000000000e+00 +5.333999999999999985e-09 0.000000000000000000e+00 +5.334499999999999725e-09 0.000000000000000000e+00 +5.335000000000000292e-09 0.000000000000000000e+00 +5.335500000000000032e-09 0.000000000000000000e+00 +5.335999999999999772e-09 0.000000000000000000e+00 +5.336499999999999511e-09 0.000000000000000000e+00 +5.337000000000000078e-09 0.000000000000000000e+00 +5.337499999999999818e-09 0.000000000000000000e+00 +5.337999999999999558e-09 0.000000000000000000e+00 +5.338500000000000125e-09 0.000000000000000000e+00 +5.338999999999999865e-09 0.000000000000000000e+00 +5.339499999999999604e-09 0.000000000000000000e+00 +5.340000000000000171e-09 0.000000000000000000e+00 +5.340499999999999911e-09 0.000000000000000000e+00 +5.340999999999999651e-09 0.000000000000000000e+00 +5.341500000000000218e-09 0.000000000000000000e+00 +5.341999999999999958e-09 0.000000000000000000e+00 +5.342499999999999697e-09 0.000000000000000000e+00 +5.343000000000000264e-09 0.000000000000000000e+00 +5.343500000000000004e-09 0.000000000000000000e+00 +5.343999999999999744e-09 0.000000000000000000e+00 +5.344499999999999484e-09 0.000000000000000000e+00 +5.345000000000000051e-09 0.000000000000000000e+00 +5.345499999999999790e-09 0.000000000000000000e+00 +5.345999999999999530e-09 0.000000000000000000e+00 +5.346500000000000097e-09 0.000000000000000000e+00 +5.346999999999999837e-09 0.000000000000000000e+00 +5.347499999999999577e-09 0.000000000000000000e+00 +5.348000000000000144e-09 0.000000000000000000e+00 +5.348499999999999883e-09 0.000000000000000000e+00 +5.348999999999999623e-09 0.000000000000000000e+00 +5.349500000000000190e-09 0.000000000000000000e+00 +5.349999999999999930e-09 0.000000000000000000e+00 +5.350499999999999670e-09 0.000000000000000000e+00 +5.351000000000000237e-09 0.000000000000000000e+00 +5.351499999999999976e-09 0.000000000000000000e+00 +5.351999999999999716e-09 0.000000000000000000e+00 +5.352500000000000283e-09 0.000000000000000000e+00 +5.353000000000000023e-09 0.000000000000000000e+00 +5.353499999999999763e-09 0.000000000000000000e+00 +5.353999999999999503e-09 0.000000000000000000e+00 +5.354500000000000070e-09 0.000000000000000000e+00 +5.354999999999999809e-09 0.000000000000000000e+00 +5.355499999999999549e-09 0.000000000000000000e+00 +5.356000000000000116e-09 0.000000000000000000e+00 +5.356499999999999856e-09 0.000000000000000000e+00 +5.356999999999999596e-09 0.000000000000000000e+00 +5.357500000000000163e-09 0.000000000000000000e+00 +5.357999999999999902e-09 0.000000000000000000e+00 +5.358499999999999642e-09 0.000000000000000000e+00 +5.359000000000000209e-09 0.000000000000000000e+00 +5.359499999999999949e-09 0.000000000000000000e+00 +5.359999999999999689e-09 0.000000000000000000e+00 +5.360500000000000256e-09 0.000000000000000000e+00 +5.360999999999999995e-09 0.000000000000000000e+00 +5.361499999999999735e-09 0.000000000000000000e+00 +5.362000000000000302e-09 0.000000000000000000e+00 +5.362500000000000042e-09 0.000000000000000000e+00 +5.362999999999999782e-09 0.000000000000000000e+00 +5.363499999999999521e-09 0.000000000000000000e+00 +5.364000000000000088e-09 0.000000000000000000e+00 +5.364499999999999828e-09 0.000000000000000000e+00 +5.364999999999999568e-09 0.000000000000000000e+00 +5.365500000000000135e-09 0.000000000000000000e+00 +5.365999999999999875e-09 0.000000000000000000e+00 +5.366499999999999614e-09 0.000000000000000000e+00 +5.367000000000000181e-09 0.000000000000000000e+00 +5.367499999999999921e-09 0.000000000000000000e+00 +5.367999999999999661e-09 0.000000000000000000e+00 +5.368500000000000228e-09 0.000000000000000000e+00 +5.368999999999999968e-09 0.000000000000000000e+00 +5.369499999999999708e-09 0.000000000000000000e+00 +5.370000000000000274e-09 0.000000000000000000e+00 +5.370500000000000014e-09 0.000000000000000000e+00 +5.370999999999999754e-09 0.000000000000000000e+00 +5.371499999999999494e-09 0.000000000000000000e+00 +5.372000000000000061e-09 0.000000000000000000e+00 +5.372499999999999801e-09 0.000000000000000000e+00 +5.372999999999999540e-09 0.000000000000000000e+00 +5.373500000000000107e-09 0.000000000000000000e+00 +5.373999999999999847e-09 0.000000000000000000e+00 +5.374499999999999587e-09 0.000000000000000000e+00 +5.375000000000000154e-09 0.000000000000000000e+00 +5.375499999999999894e-09 0.000000000000000000e+00 +5.375999999999999633e-09 0.000000000000000000e+00 +5.376500000000000200e-09 0.000000000000000000e+00 +5.376999999999999940e-09 0.000000000000000000e+00 +5.377499999999999680e-09 0.000000000000000000e+00 +5.378000000000000247e-09 0.000000000000000000e+00 +5.378499999999999987e-09 0.000000000000000000e+00 +5.378999999999999726e-09 0.000000000000000000e+00 +5.379500000000000293e-09 0.000000000000000000e+00 +5.380000000000000033e-09 0.000000000000000000e+00 +5.380499999999999773e-09 0.000000000000000000e+00 +5.380999999999999513e-09 0.000000000000000000e+00 +5.381500000000000080e-09 0.000000000000000000e+00 +5.381999999999999819e-09 0.000000000000000000e+00 +5.382499999999999559e-09 0.000000000000000000e+00 +5.383000000000000126e-09 0.000000000000000000e+00 +5.383499999999999866e-09 0.000000000000000000e+00 +5.383999999999999606e-09 0.000000000000000000e+00 +5.384500000000000173e-09 0.000000000000000000e+00 +5.384999999999999912e-09 0.000000000000000000e+00 +5.385499999999999652e-09 0.000000000000000000e+00 +5.386000000000000219e-09 0.000000000000000000e+00 +5.386499999999999959e-09 0.000000000000000000e+00 +5.386999999999999699e-09 0.000000000000000000e+00 +5.387500000000000266e-09 0.000000000000000000e+00 +5.388000000000000006e-09 0.000000000000000000e+00 +5.388499999999999745e-09 0.000000000000000000e+00 +5.388999999999999485e-09 0.000000000000000000e+00 +5.389500000000000052e-09 0.000000000000000000e+00 +5.389999999999999792e-09 0.000000000000000000e+00 +5.390499999999999532e-09 0.000000000000000000e+00 +5.391000000000000099e-09 0.000000000000000000e+00 +5.391499999999999838e-09 0.000000000000000000e+00 +5.391999999999999578e-09 0.000000000000000000e+00 +5.392500000000000145e-09 0.000000000000000000e+00 +5.392999999999999885e-09 0.000000000000000000e+00 +5.393499999999999625e-09 0.000000000000000000e+00 +5.394000000000000192e-09 0.000000000000000000e+00 +5.394499999999999931e-09 0.000000000000000000e+00 +5.394999999999999671e-09 0.000000000000000000e+00 +5.395500000000000238e-09 0.000000000000000000e+00 +5.395999999999999978e-09 0.000000000000000000e+00 +5.396499999999999718e-09 0.000000000000000000e+00 +5.397000000000000285e-09 0.000000000000000000e+00 +5.397500000000000024e-09 0.000000000000000000e+00 +5.397999999999999764e-09 0.000000000000000000e+00 +5.398499999999999504e-09 0.000000000000000000e+00 +5.399000000000000071e-09 0.000000000000000000e+00 +5.399499999999999811e-09 0.000000000000000000e+00 +5.399999999999999550e-09 0.000000000000000000e+00 +5.400500000000000117e-09 0.000000000000000000e+00 +5.400999999999999857e-09 0.000000000000000000e+00 +5.401499999999999597e-09 0.000000000000000000e+00 +5.402000000000000164e-09 0.000000000000000000e+00 +5.402499999999999904e-09 0.000000000000000000e+00 +5.402999999999999644e-09 0.000000000000000000e+00 +5.403500000000000210e-09 0.000000000000000000e+00 +5.403999999999999950e-09 0.000000000000000000e+00 +5.404499999999999690e-09 0.000000000000000000e+00 +5.405000000000000257e-09 0.000000000000000000e+00 +5.405499999999999997e-09 0.000000000000000000e+00 +5.405999999999999737e-09 0.000000000000000000e+00 +5.406500000000000304e-09 0.000000000000000000e+00 +5.407000000000000043e-09 0.000000000000000000e+00 +5.407499999999999783e-09 0.000000000000000000e+00 +5.407999999999999523e-09 0.000000000000000000e+00 +5.408500000000000090e-09 0.000000000000000000e+00 +5.408999999999999830e-09 0.000000000000000000e+00 +5.409499999999999569e-09 0.000000000000000000e+00 +5.410000000000000136e-09 0.000000000000000000e+00 +5.410499999999999876e-09 0.000000000000000000e+00 +5.410999999999999616e-09 0.000000000000000000e+00 +5.411500000000000183e-09 0.000000000000000000e+00 +5.411999999999999923e-09 0.000000000000000000e+00 +5.412499999999999662e-09 0.000000000000000000e+00 +5.413000000000000229e-09 0.000000000000000000e+00 +5.413499999999999969e-09 0.000000000000000000e+00 +5.413999999999999709e-09 0.000000000000000000e+00 +5.414500000000000276e-09 0.000000000000000000e+00 +5.415000000000000016e-09 0.000000000000000000e+00 +5.415499999999999755e-09 0.000000000000000000e+00 +5.415999999999999495e-09 0.000000000000000000e+00 +5.416500000000000062e-09 0.000000000000000000e+00 +5.416999999999999802e-09 0.000000000000000000e+00 +5.417499999999999542e-09 0.000000000000000000e+00 +5.418000000000000109e-09 0.000000000000000000e+00 +5.418499999999999849e-09 0.000000000000000000e+00 +5.418999999999999588e-09 0.000000000000000000e+00 +5.419500000000000155e-09 0.000000000000000000e+00 +5.419999999999999895e-09 0.000000000000000000e+00 +5.420499999999999635e-09 0.000000000000000000e+00 +5.421000000000000202e-09 0.000000000000000000e+00 +5.421499999999999942e-09 0.000000000000000000e+00 +5.421999999999999681e-09 0.000000000000000000e+00 +5.422500000000000248e-09 0.000000000000000000e+00 +5.422999999999999988e-09 0.000000000000000000e+00 +5.423499999999999728e-09 0.000000000000000000e+00 +5.424000000000000295e-09 0.000000000000000000e+00 +5.424500000000000035e-09 0.000000000000000000e+00 +5.424999999999999774e-09 0.000000000000000000e+00 +5.425499999999999514e-09 0.000000000000000000e+00 +5.426000000000000081e-09 0.000000000000000000e+00 +5.426499999999999821e-09 0.000000000000000000e+00 +5.426999999999999561e-09 0.000000000000000000e+00 +5.427500000000000128e-09 0.000000000000000000e+00 +5.427999999999999867e-09 0.000000000000000000e+00 +5.428499999999999607e-09 0.000000000000000000e+00 +5.429000000000000174e-09 0.000000000000000000e+00 +5.429499999999999914e-09 0.000000000000000000e+00 +5.429999999999999654e-09 0.000000000000000000e+00 +5.430500000000000221e-09 0.000000000000000000e+00 +5.430999999999999960e-09 0.000000000000000000e+00 +5.431499999999999700e-09 0.000000000000000000e+00 +5.432000000000000267e-09 0.000000000000000000e+00 +5.432500000000000007e-09 0.000000000000000000e+00 +5.432999999999999747e-09 0.000000000000000000e+00 +5.433499999999999487e-09 0.000000000000000000e+00 +5.434000000000000053e-09 0.000000000000000000e+00 +5.434499999999999793e-09 0.000000000000000000e+00 +5.434999999999999533e-09 0.000000000000000000e+00 +5.435500000000000100e-09 0.000000000000000000e+00 +5.435999999999999840e-09 0.000000000000000000e+00 +5.436499999999999580e-09 0.000000000000000000e+00 +5.437000000000000147e-09 0.000000000000000000e+00 +5.437499999999999886e-09 0.000000000000000000e+00 +5.437999999999999626e-09 0.000000000000000000e+00 +5.438500000000000193e-09 0.000000000000000000e+00 +5.438999999999999933e-09 0.000000000000000000e+00 +5.439499999999999673e-09 0.000000000000000000e+00 +5.440000000000000240e-09 0.000000000000000000e+00 +5.440499999999999979e-09 0.000000000000000000e+00 +5.440999999999999719e-09 0.000000000000000000e+00 +5.441500000000000286e-09 0.000000000000000000e+00 +5.442000000000000026e-09 0.000000000000000000e+00 +5.442499999999999766e-09 0.000000000000000000e+00 +5.442999999999999505e-09 0.000000000000000000e+00 +5.443500000000000072e-09 0.000000000000000000e+00 +5.443999999999999812e-09 0.000000000000000000e+00 +5.444499999999999552e-09 0.000000000000000000e+00 +5.445000000000000119e-09 0.000000000000000000e+00 +5.445499999999999859e-09 0.000000000000000000e+00 +5.445999999999999598e-09 0.000000000000000000e+00 +5.446500000000000165e-09 0.000000000000000000e+00 +5.446999999999999905e-09 0.000000000000000000e+00 +5.447499999999999645e-09 0.000000000000000000e+00 +5.448000000000000212e-09 0.000000000000000000e+00 +5.448499999999999952e-09 0.000000000000000000e+00 +5.448999999999999691e-09 0.000000000000000000e+00 +5.449500000000000258e-09 0.000000000000000000e+00 +5.449999999999999998e-09 0.000000000000000000e+00 +5.450499999999999738e-09 0.000000000000000000e+00 +5.450999999999999478e-09 0.000000000000000000e+00 +5.451500000000000045e-09 0.000000000000000000e+00 +5.451999999999999785e-09 0.000000000000000000e+00 +5.452499999999999524e-09 0.000000000000000000e+00 +5.453000000000000091e-09 0.000000000000000000e+00 +5.453499999999999831e-09 0.000000000000000000e+00 +5.453999999999999571e-09 0.000000000000000000e+00 +5.454500000000000138e-09 0.000000000000000000e+00 +5.454999999999999878e-09 0.000000000000000000e+00 +5.455499999999999617e-09 0.000000000000000000e+00 +5.456000000000000184e-09 0.000000000000000000e+00 +5.456499999999999924e-09 0.000000000000000000e+00 +5.456999999999999664e-09 0.000000000000000000e+00 +5.457500000000000231e-09 0.000000000000000000e+00 +5.457999999999999971e-09 0.000000000000000000e+00 +5.458499999999999710e-09 0.000000000000000000e+00 +5.459000000000000277e-09 0.000000000000000000e+00 +5.459500000000000017e-09 0.000000000000000000e+00 +5.459999999999999757e-09 0.000000000000000000e+00 +5.460499999999999497e-09 0.000000000000000000e+00 +5.461000000000000064e-09 0.000000000000000000e+00 +5.461499999999999803e-09 0.000000000000000000e+00 +5.461999999999999543e-09 0.000000000000000000e+00 +5.462500000000000110e-09 0.000000000000000000e+00 +5.462999999999999850e-09 0.000000000000000000e+00 +5.463499999999999590e-09 0.000000000000000000e+00 +5.464000000000000157e-09 0.000000000000000000e+00 +5.464499999999999896e-09 0.000000000000000000e+00 +5.464999999999999636e-09 0.000000000000000000e+00 +5.465500000000000203e-09 0.000000000000000000e+00 +5.465999999999999943e-09 0.000000000000000000e+00 +5.466499999999999683e-09 0.000000000000000000e+00 +5.467000000000000250e-09 0.000000000000000000e+00 +5.467499999999999989e-09 0.000000000000000000e+00 +5.467999999999999729e-09 0.000000000000000000e+00 +5.468500000000000296e-09 0.000000000000000000e+00 +5.469000000000000036e-09 0.000000000000000000e+00 +5.469499999999999776e-09 0.000000000000000000e+00 +5.469999999999999516e-09 0.000000000000000000e+00 +5.470500000000000083e-09 0.000000000000000000e+00 +5.470999999999999822e-09 0.000000000000000000e+00 +5.471499999999999562e-09 0.000000000000000000e+00 +5.472000000000000129e-09 0.000000000000000000e+00 +5.472499999999999869e-09 0.000000000000000000e+00 +5.472999999999999609e-09 0.000000000000000000e+00 +5.473500000000000176e-09 0.000000000000000000e+00 +5.473999999999999915e-09 0.000000000000000000e+00 +5.474499999999999655e-09 0.000000000000000000e+00 +5.475000000000000222e-09 0.000000000000000000e+00 +5.475499999999999962e-09 0.000000000000000000e+00 +5.475999999999999702e-09 0.000000000000000000e+00 +5.476500000000000269e-09 0.000000000000000000e+00 +5.477000000000000008e-09 0.000000000000000000e+00 +5.477499999999999748e-09 0.000000000000000000e+00 +5.477999999999999488e-09 0.000000000000000000e+00 +5.478500000000000055e-09 0.000000000000000000e+00 +5.478999999999999795e-09 0.000000000000000000e+00 +5.479499999999999534e-09 0.000000000000000000e+00 +5.480000000000000101e-09 0.000000000000000000e+00 +5.480499999999999841e-09 0.000000000000000000e+00 +5.480999999999999581e-09 0.000000000000000000e+00 +5.481500000000000148e-09 0.000000000000000000e+00 +5.481999999999999888e-09 0.000000000000000000e+00 +5.482499999999999627e-09 0.000000000000000000e+00 +5.483000000000000194e-09 0.000000000000000000e+00 +5.483499999999999934e-09 0.000000000000000000e+00 +5.483999999999999674e-09 0.000000000000000000e+00 +5.484500000000000241e-09 0.000000000000000000e+00 +5.484999999999999981e-09 0.000000000000000000e+00 +5.485499999999999721e-09 0.000000000000000000e+00 +5.486000000000000287e-09 0.000000000000000000e+00 +5.486500000000000027e-09 0.000000000000000000e+00 +5.486999999999999767e-09 0.000000000000000000e+00 +5.487499999999999507e-09 0.000000000000000000e+00 +5.488000000000000074e-09 0.000000000000000000e+00 +5.488499999999999814e-09 0.000000000000000000e+00 +5.488999999999999553e-09 0.000000000000000000e+00 +5.489500000000000120e-09 0.000000000000000000e+00 +5.489999999999999860e-09 0.000000000000000000e+00 +5.490499999999999600e-09 0.000000000000000000e+00 +5.491000000000000167e-09 0.000000000000000000e+00 +5.491499999999999907e-09 0.000000000000000000e+00 +5.491999999999999646e-09 0.000000000000000000e+00 +5.492500000000000213e-09 0.000000000000000000e+00 +5.492999999999999953e-09 0.000000000000000000e+00 +5.493499999999999693e-09 0.000000000000000000e+00 +5.494000000000000260e-09 0.000000000000000000e+00 +5.494500000000000000e-09 0.000000000000000000e+00 +5.494999999999999739e-09 0.000000000000000000e+00 +5.495499999999999479e-09 0.000000000000000000e+00 +5.496000000000000046e-09 0.000000000000000000e+00 +5.496499999999999786e-09 0.000000000000000000e+00 +5.496999999999999526e-09 0.000000000000000000e+00 +5.497500000000000093e-09 0.000000000000000000e+00 +5.497999999999999832e-09 0.000000000000000000e+00 +5.498499999999999572e-09 0.000000000000000000e+00 +5.499000000000000139e-09 0.000000000000000000e+00 +5.499499999999999879e-09 0.000000000000000000e+00 +5.499999999999999619e-09 0.000000000000000000e+00 +5.500500000000000186e-09 0.000000000000000000e+00 +5.500999999999999926e-09 0.000000000000000000e+00 +5.501499999999999665e-09 0.000000000000000000e+00 +5.502000000000000232e-09 0.000000000000000000e+00 +5.502499999999999972e-09 0.000000000000000000e+00 +5.502999999999999712e-09 0.000000000000000000e+00 +5.503500000000000279e-09 0.000000000000000000e+00 +5.504000000000000019e-09 0.000000000000000000e+00 +5.504499999999999758e-09 0.000000000000000000e+00 +5.504999999999999498e-09 0.000000000000000000e+00 +5.505500000000000065e-09 0.000000000000000000e+00 +5.505999999999999805e-09 0.000000000000000000e+00 +5.506499999999999545e-09 0.000000000000000000e+00 +5.507000000000000112e-09 0.000000000000000000e+00 +5.507499999999999851e-09 0.000000000000000000e+00 +5.507999999999999591e-09 0.000000000000000000e+00 +5.508500000000000158e-09 0.000000000000000000e+00 +5.508999999999999898e-09 0.000000000000000000e+00 +5.509499999999999638e-09 0.000000000000000000e+00 +5.510000000000000205e-09 0.000000000000000000e+00 +5.510499999999999944e-09 0.000000000000000000e+00 +5.510999999999999684e-09 0.000000000000000000e+00 +5.511500000000000251e-09 0.000000000000000000e+00 +5.511999999999999991e-09 0.000000000000000000e+00 +5.512499999999999731e-09 0.000000000000000000e+00 +5.513000000000000298e-09 0.000000000000000000e+00 +5.513500000000000037e-09 0.000000000000000000e+00 +5.513999999999999777e-09 0.000000000000000000e+00 +5.514499999999999517e-09 0.000000000000000000e+00 +5.515000000000000084e-09 0.000000000000000000e+00 +5.515499999999999824e-09 0.000000000000000000e+00 +5.515999999999999564e-09 0.000000000000000000e+00 +5.516500000000000130e-09 0.000000000000000000e+00 +5.516999999999999870e-09 0.000000000000000000e+00 +5.517499999999999610e-09 0.000000000000000000e+00 +5.518000000000000177e-09 0.000000000000000000e+00 +5.518499999999999917e-09 0.000000000000000000e+00 +5.518999999999999657e-09 0.000000000000000000e+00 +5.519500000000000224e-09 0.000000000000000000e+00 +5.519999999999999963e-09 0.000000000000000000e+00 +5.520499999999999703e-09 0.000000000000000000e+00 +5.521000000000000270e-09 0.000000000000000000e+00 +5.521500000000000010e-09 0.000000000000000000e+00 +5.521999999999999750e-09 0.000000000000000000e+00 +5.522499999999999489e-09 0.000000000000000000e+00 +5.523000000000000056e-09 0.000000000000000000e+00 +5.523499999999999796e-09 0.000000000000000000e+00 +5.523999999999999536e-09 0.000000000000000000e+00 +5.524500000000000103e-09 0.000000000000000000e+00 +5.524999999999999843e-09 0.000000000000000000e+00 +5.525499999999999582e-09 0.000000000000000000e+00 +5.526000000000000149e-09 0.000000000000000000e+00 +5.526499999999999889e-09 0.000000000000000000e+00 +5.526999999999999629e-09 0.000000000000000000e+00 +5.527500000000000196e-09 0.000000000000000000e+00 +5.527999999999999936e-09 0.000000000000000000e+00 +5.528499999999999675e-09 0.000000000000000000e+00 +5.529000000000000242e-09 0.000000000000000000e+00 +5.529499999999999982e-09 0.000000000000000000e+00 +5.529999999999999722e-09 0.000000000000000000e+00 +5.530500000000000289e-09 0.000000000000000000e+00 +5.531000000000000029e-09 0.000000000000000000e+00 +5.531499999999999768e-09 0.000000000000000000e+00 +5.531999999999999508e-09 0.000000000000000000e+00 +5.532500000000000075e-09 0.000000000000000000e+00 +5.532999999999999815e-09 0.000000000000000000e+00 +5.533499999999999555e-09 0.000000000000000000e+00 +5.534000000000000122e-09 0.000000000000000000e+00 +5.534499999999999862e-09 0.000000000000000000e+00 +5.534999999999999601e-09 0.000000000000000000e+00 +5.535500000000000168e-09 0.000000000000000000e+00 +5.535999999999999908e-09 0.000000000000000000e+00 +5.536499999999999648e-09 0.000000000000000000e+00 +5.537000000000000215e-09 0.000000000000000000e+00 +5.537499999999999955e-09 0.000000000000000000e+00 +5.537999999999999694e-09 0.000000000000000000e+00 +5.538500000000000261e-09 0.000000000000000000e+00 +5.539000000000000001e-09 0.000000000000000000e+00 +5.539499999999999741e-09 0.000000000000000000e+00 +5.539999999999999481e-09 0.000000000000000000e+00 +5.540500000000000048e-09 0.000000000000000000e+00 +5.540999999999999787e-09 0.000000000000000000e+00 +5.541499999999999527e-09 0.000000000000000000e+00 +5.542000000000000094e-09 0.000000000000000000e+00 +5.542499999999999834e-09 0.000000000000000000e+00 +5.542999999999999574e-09 0.000000000000000000e+00 +5.543500000000000141e-09 0.000000000000000000e+00 +5.543999999999999880e-09 0.000000000000000000e+00 +5.544499999999999620e-09 0.000000000000000000e+00 +5.545000000000000187e-09 0.000000000000000000e+00 +5.545499999999999927e-09 0.000000000000000000e+00 +5.545999999999999667e-09 0.000000000000000000e+00 +5.546500000000000234e-09 0.000000000000000000e+00 +5.546999999999999973e-09 0.000000000000000000e+00 +5.547499999999999713e-09 0.000000000000000000e+00 +5.548000000000000280e-09 0.000000000000000000e+00 +5.548500000000000020e-09 0.000000000000000000e+00 +5.548999999999999760e-09 0.000000000000000000e+00 +5.549499999999999500e-09 0.000000000000000000e+00 +5.550000000000000066e-09 0.000000000000000000e+00 +5.550499999999999806e-09 0.000000000000000000e+00 +5.550999999999999546e-09 0.000000000000000000e+00 +5.551500000000000113e-09 0.000000000000000000e+00 +5.551999999999999853e-09 0.000000000000000000e+00 +5.552499999999999593e-09 0.000000000000000000e+00 +5.553000000000000160e-09 0.000000000000000000e+00 +5.553499999999999899e-09 0.000000000000000000e+00 +5.553999999999999639e-09 0.000000000000000000e+00 +5.554500000000000206e-09 0.000000000000000000e+00 +5.554999999999999946e-09 0.000000000000000000e+00 +5.555499999999999686e-09 0.000000000000000000e+00 +5.556000000000000253e-09 0.000000000000000000e+00 +5.556499999999999992e-09 0.000000000000000000e+00 +5.556999999999999732e-09 0.000000000000000000e+00 +5.557500000000000299e-09 0.000000000000000000e+00 +5.558000000000000039e-09 0.000000000000000000e+00 +5.558499999999999779e-09 0.000000000000000000e+00 +5.558999999999999518e-09 0.000000000000000000e+00 +5.559500000000000085e-09 0.000000000000000000e+00 +5.559999999999999825e-09 0.000000000000000000e+00 +5.560499999999999565e-09 0.000000000000000000e+00 +5.561000000000000132e-09 0.000000000000000000e+00 +5.561499999999999872e-09 0.000000000000000000e+00 +5.561999999999999611e-09 0.000000000000000000e+00 +5.562500000000000178e-09 0.000000000000000000e+00 +5.562999999999999918e-09 0.000000000000000000e+00 +5.563499999999999658e-09 0.000000000000000000e+00 +5.564000000000000225e-09 0.000000000000000000e+00 +5.564499999999999965e-09 0.000000000000000000e+00 +5.564999999999999704e-09 0.000000000000000000e+00 +5.565500000000000271e-09 0.000000000000000000e+00 +5.566000000000000011e-09 0.000000000000000000e+00 +5.566499999999999751e-09 0.000000000000000000e+00 +5.566999999999999491e-09 0.000000000000000000e+00 +5.567500000000000058e-09 0.000000000000000000e+00 +5.567999999999999798e-09 0.000000000000000000e+00 +5.568499999999999537e-09 0.000000000000000000e+00 +5.569000000000000104e-09 0.000000000000000000e+00 +5.569499999999999844e-09 0.000000000000000000e+00 +5.569999999999999584e-09 0.000000000000000000e+00 +5.570500000000000151e-09 0.000000000000000000e+00 +5.570999999999999891e-09 0.000000000000000000e+00 +5.571499999999999630e-09 0.000000000000000000e+00 +5.572000000000000197e-09 0.000000000000000000e+00 +5.572499999999999937e-09 0.000000000000000000e+00 +5.572999999999999677e-09 0.000000000000000000e+00 +5.573500000000000244e-09 0.000000000000000000e+00 +5.573999999999999984e-09 0.000000000000000000e+00 +5.574499999999999723e-09 0.000000000000000000e+00 +5.575000000000000290e-09 0.000000000000000000e+00 +5.575500000000000030e-09 0.000000000000000000e+00 +5.575999999999999770e-09 0.000000000000000000e+00 +5.576499999999999510e-09 0.000000000000000000e+00 +5.577000000000000077e-09 0.000000000000000000e+00 +5.577499999999999816e-09 0.000000000000000000e+00 +5.577999999999999556e-09 0.000000000000000000e+00 +5.578500000000000123e-09 0.000000000000000000e+00 +5.578999999999999863e-09 0.000000000000000000e+00 +5.579499999999999603e-09 0.000000000000000000e+00 +5.580000000000000170e-09 0.000000000000000000e+00 +5.580499999999999909e-09 0.000000000000000000e+00 +5.580999999999999649e-09 0.000000000000000000e+00 +5.581500000000000216e-09 0.000000000000000000e+00 +5.581999999999999956e-09 0.000000000000000000e+00 +5.582499999999999696e-09 0.000000000000000000e+00 +5.583000000000000263e-09 0.000000000000000000e+00 +5.583500000000000003e-09 0.000000000000000000e+00 +5.583999999999999742e-09 0.000000000000000000e+00 +5.584499999999999482e-09 0.000000000000000000e+00 +5.585000000000000049e-09 0.000000000000000000e+00 +5.585499999999999789e-09 0.000000000000000000e+00 +5.585999999999999529e-09 0.000000000000000000e+00 +5.586500000000000096e-09 0.000000000000000000e+00 +5.586999999999999835e-09 0.000000000000000000e+00 +5.587499999999999575e-09 0.000000000000000000e+00 +5.588000000000000142e-09 0.000000000000000000e+00 +5.588499999999999882e-09 0.000000000000000000e+00 +5.588999999999999622e-09 0.000000000000000000e+00 +5.589500000000000189e-09 0.000000000000000000e+00 +5.589999999999999928e-09 0.000000000000000000e+00 +5.590499999999999668e-09 0.000000000000000000e+00 +5.591000000000000235e-09 0.000000000000000000e+00 +5.591499999999999975e-09 0.000000000000000000e+00 +5.591999999999999715e-09 0.000000000000000000e+00 +5.592500000000000282e-09 0.000000000000000000e+00 +5.593000000000000021e-09 0.000000000000000000e+00 +5.593499999999999761e-09 0.000000000000000000e+00 +5.593999999999999501e-09 0.000000000000000000e+00 +5.594500000000000068e-09 0.000000000000000000e+00 +5.594999999999999808e-09 0.000000000000000000e+00 +5.595499999999999547e-09 0.000000000000000000e+00 +5.596000000000000114e-09 0.000000000000000000e+00 +5.596499999999999854e-09 0.000000000000000000e+00 +5.596999999999999594e-09 0.000000000000000000e+00 +5.597500000000000161e-09 0.000000000000000000e+00 +5.597999999999999901e-09 0.000000000000000000e+00 +5.598499999999999641e-09 0.000000000000000000e+00 +5.599000000000000207e-09 0.000000000000000000e+00 +5.599499999999999947e-09 0.000000000000000000e+00 +5.599999999999999687e-09 0.000000000000000000e+00 +5.600500000000000254e-09 0.000000000000000000e+00 +5.600999999999999994e-09 0.000000000000000000e+00 +5.601499999999999734e-09 0.000000000000000000e+00 +5.602000000000000301e-09 0.000000000000000000e+00 +5.602500000000000040e-09 0.000000000000000000e+00 +5.602999999999999780e-09 0.000000000000000000e+00 +5.603499999999999520e-09 0.000000000000000000e+00 +5.604000000000000087e-09 0.000000000000000000e+00 +5.604499999999999827e-09 0.000000000000000000e+00 +5.604999999999999566e-09 0.000000000000000000e+00 +5.605500000000000133e-09 0.000000000000000000e+00 +5.605999999999999873e-09 0.000000000000000000e+00 +5.606499999999999613e-09 0.000000000000000000e+00 +5.607000000000000180e-09 0.000000000000000000e+00 +5.607499999999999920e-09 0.000000000000000000e+00 +5.607999999999999659e-09 0.000000000000000000e+00 +5.608500000000000226e-09 0.000000000000000000e+00 +5.608999999999999966e-09 0.000000000000000000e+00 +5.609499999999999706e-09 0.000000000000000000e+00 +5.610000000000000273e-09 0.000000000000000000e+00 +5.610500000000000013e-09 0.000000000000000000e+00 +5.610999999999999752e-09 0.000000000000000000e+00 +5.611499999999999492e-09 0.000000000000000000e+00 +5.612000000000000059e-09 0.000000000000000000e+00 +5.612499999999999799e-09 0.000000000000000000e+00 +5.612999999999999539e-09 0.000000000000000000e+00 +5.613500000000000106e-09 0.000000000000000000e+00 +5.613999999999999845e-09 0.000000000000000000e+00 +5.614499999999999585e-09 0.000000000000000000e+00 +5.615000000000000152e-09 0.000000000000000000e+00 +5.615499999999999892e-09 0.000000000000000000e+00 +5.615999999999999632e-09 0.000000000000000000e+00 +5.616500000000000199e-09 0.000000000000000000e+00 +5.616999999999999939e-09 0.000000000000000000e+00 +5.617499999999999678e-09 0.000000000000000000e+00 +5.618000000000000245e-09 0.000000000000000000e+00 +5.618499999999999985e-09 0.000000000000000000e+00 +5.618999999999999725e-09 0.000000000000000000e+00 +5.619500000000000292e-09 0.000000000000000000e+00 +5.620000000000000032e-09 0.000000000000000000e+00 +5.620499999999999771e-09 0.000000000000000000e+00 +5.620999999999999511e-09 0.000000000000000000e+00 +5.621500000000000078e-09 0.000000000000000000e+00 +5.621999999999999818e-09 0.000000000000000000e+00 +5.622499999999999558e-09 0.000000000000000000e+00 +5.623000000000000125e-09 0.000000000000000000e+00 +5.623499999999999864e-09 0.000000000000000000e+00 +5.623999999999999604e-09 0.000000000000000000e+00 +5.624500000000000171e-09 0.000000000000000000e+00 +5.624999999999999911e-09 0.000000000000000000e+00 +5.625499999999999651e-09 0.000000000000000000e+00 +5.626000000000000218e-09 0.000000000000000000e+00 +5.626499999999999957e-09 0.000000000000000000e+00 +5.626999999999999697e-09 0.000000000000000000e+00 +5.627500000000000264e-09 0.000000000000000000e+00 +5.628000000000000004e-09 0.000000000000000000e+00 +5.628499999999999744e-09 0.000000000000000000e+00 +5.628999999999999483e-09 0.000000000000000000e+00 +5.629500000000000050e-09 0.000000000000000000e+00 +5.629999999999999790e-09 0.000000000000000000e+00 +5.630499999999999530e-09 0.000000000000000000e+00 +5.631000000000000097e-09 0.000000000000000000e+00 +5.631499999999999837e-09 0.000000000000000000e+00 +5.631999999999999577e-09 0.000000000000000000e+00 +5.632500000000000143e-09 0.000000000000000000e+00 +5.632999999999999883e-09 0.000000000000000000e+00 +5.633499999999999623e-09 0.000000000000000000e+00 +5.634000000000000190e-09 0.000000000000000000e+00 +5.634499999999999930e-09 0.000000000000000000e+00 +5.634999999999999670e-09 0.000000000000000000e+00 +5.635500000000000237e-09 0.000000000000000000e+00 +5.635999999999999976e-09 0.000000000000000000e+00 +5.636499999999999716e-09 0.000000000000000000e+00 +5.637000000000000283e-09 0.000000000000000000e+00 +5.637500000000000023e-09 0.000000000000000000e+00 +5.637999999999999763e-09 0.000000000000000000e+00 +5.638499999999999502e-09 0.000000000000000000e+00 +5.639000000000000069e-09 0.000000000000000000e+00 +5.639499999999999809e-09 0.000000000000000000e+00 +5.639999999999999549e-09 0.000000000000000000e+00 +5.640500000000000116e-09 0.000000000000000000e+00 +5.640999999999999856e-09 0.000000000000000000e+00 +5.641499999999999595e-09 0.000000000000000000e+00 +5.642000000000000162e-09 0.000000000000000000e+00 +5.642499999999999902e-09 0.000000000000000000e+00 +5.642999999999999642e-09 0.000000000000000000e+00 +5.643500000000000209e-09 0.000000000000000000e+00 +5.643999999999999949e-09 0.000000000000000000e+00 +5.644499999999999688e-09 0.000000000000000000e+00 +5.645000000000000255e-09 0.000000000000000000e+00 +5.645499999999999995e-09 0.000000000000000000e+00 +5.645999999999999735e-09 0.000000000000000000e+00 +5.646499999999999475e-09 0.000000000000000000e+00 +5.647000000000000042e-09 0.000000000000000000e+00 +5.647499999999999781e-09 0.000000000000000000e+00 +5.647999999999999521e-09 0.000000000000000000e+00 +5.648500000000000088e-09 0.000000000000000000e+00 +5.648999999999999828e-09 0.000000000000000000e+00 +5.649499999999999568e-09 0.000000000000000000e+00 +5.650000000000000135e-09 0.000000000000000000e+00 +5.650499999999999875e-09 0.000000000000000000e+00 +5.650999999999999614e-09 0.000000000000000000e+00 +5.651500000000000181e-09 0.000000000000000000e+00 +5.651999999999999921e-09 0.000000000000000000e+00 +5.652499999999999661e-09 0.000000000000000000e+00 +5.653000000000000228e-09 0.000000000000000000e+00 +5.653499999999999968e-09 0.000000000000000000e+00 +5.653999999999999707e-09 0.000000000000000000e+00 +5.654500000000000274e-09 0.000000000000000000e+00 +5.655000000000000014e-09 0.000000000000000000e+00 +5.655499999999999754e-09 0.000000000000000000e+00 +5.655999999999999494e-09 0.000000000000000000e+00 +5.656500000000000061e-09 0.000000000000000000e+00 +5.656999999999999800e-09 0.000000000000000000e+00 +5.657499999999999540e-09 0.000000000000000000e+00 +5.658000000000000107e-09 0.000000000000000000e+00 +5.658499999999999847e-09 0.000000000000000000e+00 +5.658999999999999587e-09 0.000000000000000000e+00 +5.659500000000000154e-09 0.000000000000000000e+00 +5.659999999999999893e-09 0.000000000000000000e+00 +5.660499999999999633e-09 0.000000000000000000e+00 +5.661000000000000200e-09 0.000000000000000000e+00 +5.661499999999999940e-09 0.000000000000000000e+00 +5.661999999999999680e-09 0.000000000000000000e+00 +5.662500000000000247e-09 0.000000000000000000e+00 +5.662999999999999986e-09 0.000000000000000000e+00 +5.663499999999999726e-09 0.000000000000000000e+00 +5.664000000000000293e-09 0.000000000000000000e+00 +5.664500000000000033e-09 0.000000000000000000e+00 +5.664999999999999773e-09 0.000000000000000000e+00 +5.665499999999999513e-09 0.000000000000000000e+00 +5.666000000000000080e-09 0.000000000000000000e+00 +5.666499999999999819e-09 0.000000000000000000e+00 +5.666999999999999559e-09 0.000000000000000000e+00 +5.667500000000000126e-09 0.000000000000000000e+00 +5.667999999999999866e-09 0.000000000000000000e+00 +5.668499999999999606e-09 0.000000000000000000e+00 +5.669000000000000173e-09 0.000000000000000000e+00 +5.669499999999999912e-09 0.000000000000000000e+00 +5.669999999999999652e-09 0.000000000000000000e+00 +5.670500000000000219e-09 0.000000000000000000e+00 +5.670999999999999959e-09 0.000000000000000000e+00 +5.671499999999999699e-09 0.000000000000000000e+00 +5.672000000000000266e-09 0.000000000000000000e+00 +5.672500000000000005e-09 0.000000000000000000e+00 +5.672999999999999745e-09 0.000000000000000000e+00 +5.673499999999999485e-09 0.000000000000000000e+00 +5.674000000000000052e-09 0.000000000000000000e+00 +5.674499999999999792e-09 0.000000000000000000e+00 +5.674999999999999531e-09 0.000000000000000000e+00 +5.675500000000000098e-09 0.000000000000000000e+00 +5.675999999999999838e-09 0.000000000000000000e+00 +5.676499999999999578e-09 0.000000000000000000e+00 +5.677000000000000145e-09 0.000000000000000000e+00 +5.677499999999999885e-09 0.000000000000000000e+00 +5.677999999999999624e-09 0.000000000000000000e+00 +5.678500000000000191e-09 0.000000000000000000e+00 +5.678999999999999931e-09 0.000000000000000000e+00 +5.679499999999999671e-09 0.000000000000000000e+00 +5.680000000000000238e-09 0.000000000000000000e+00 +5.680499999999999978e-09 0.000000000000000000e+00 +5.680999999999999718e-09 0.000000000000000000e+00 +5.681500000000000284e-09 0.000000000000000000e+00 +5.682000000000000024e-09 0.000000000000000000e+00 +5.682499999999999764e-09 0.000000000000000000e+00 +5.682999999999999504e-09 0.000000000000000000e+00 +5.683500000000000071e-09 0.000000000000000000e+00 +5.683999999999999811e-09 0.000000000000000000e+00 +5.684499999999999550e-09 0.000000000000000000e+00 +5.685000000000000117e-09 0.000000000000000000e+00 +5.685499999999999857e-09 0.000000000000000000e+00 +5.685999999999999597e-09 0.000000000000000000e+00 +5.686500000000000164e-09 0.000000000000000000e+00 +5.686999999999999904e-09 0.000000000000000000e+00 +5.687499999999999643e-09 0.000000000000000000e+00 +5.688000000000000210e-09 0.000000000000000000e+00 +5.688499999999999950e-09 0.000000000000000000e+00 +5.688999999999999690e-09 0.000000000000000000e+00 +5.689500000000000257e-09 0.000000000000000000e+00 +5.689999999999999997e-09 0.000000000000000000e+00 +5.690499999999999736e-09 0.000000000000000000e+00 +5.690999999999999476e-09 0.000000000000000000e+00 +5.691500000000000043e-09 0.000000000000000000e+00 +5.691999999999999783e-09 0.000000000000000000e+00 +5.692499999999999523e-09 0.000000000000000000e+00 +5.693000000000000090e-09 0.000000000000000000e+00 +5.693499999999999829e-09 0.000000000000000000e+00 +5.693999999999999569e-09 0.000000000000000000e+00 +5.694500000000000136e-09 0.000000000000000000e+00 +5.694999999999999876e-09 0.000000000000000000e+00 +5.695499999999999616e-09 0.000000000000000000e+00 +5.696000000000000183e-09 0.000000000000000000e+00 +5.696499999999999922e-09 0.000000000000000000e+00 +5.696999999999999662e-09 0.000000000000000000e+00 +5.697500000000000229e-09 0.000000000000000000e+00 +5.697999999999999969e-09 0.000000000000000000e+00 +5.698499999999999709e-09 0.000000000000000000e+00 +5.699000000000000276e-09 0.000000000000000000e+00 +5.699500000000000016e-09 0.000000000000000000e+00 +5.699999999999999755e-09 0.000000000000000000e+00 +5.700499999999999495e-09 0.000000000000000000e+00 +5.701000000000000062e-09 0.000000000000000000e+00 +5.701499999999999802e-09 0.000000000000000000e+00 +5.701999999999999542e-09 0.000000000000000000e+00 +5.702500000000000109e-09 0.000000000000000000e+00 +5.702999999999999848e-09 0.000000000000000000e+00 +5.703499999999999588e-09 0.000000000000000000e+00 +5.704000000000000155e-09 0.000000000000000000e+00 +5.704499999999999895e-09 0.000000000000000000e+00 +5.704999999999999635e-09 0.000000000000000000e+00 +5.705500000000000202e-09 0.000000000000000000e+00 +5.705999999999999941e-09 0.000000000000000000e+00 +5.706499999999999681e-09 0.000000000000000000e+00 +5.707000000000000248e-09 0.000000000000000000e+00 +5.707499999999999988e-09 0.000000000000000000e+00 +5.707999999999999728e-09 0.000000000000000000e+00 +5.708500000000000295e-09 0.000000000000000000e+00 +5.709000000000000034e-09 0.000000000000000000e+00 +5.709499999999999774e-09 0.000000000000000000e+00 +5.709999999999999514e-09 0.000000000000000000e+00 +5.710500000000000081e-09 0.000000000000000000e+00 +5.710999999999999821e-09 0.000000000000000000e+00 +5.711499999999999560e-09 0.000000000000000000e+00 +5.712000000000000127e-09 0.000000000000000000e+00 +5.712499999999999867e-09 0.000000000000000000e+00 +5.712999999999999607e-09 0.000000000000000000e+00 +5.713500000000000174e-09 0.000000000000000000e+00 +5.713999999999999914e-09 0.000000000000000000e+00 +5.714499999999999654e-09 0.000000000000000000e+00 +5.715000000000000220e-09 0.000000000000000000e+00 +5.715499999999999960e-09 0.000000000000000000e+00 +5.715999999999999700e-09 0.000000000000000000e+00 +5.716500000000000267e-09 0.000000000000000000e+00 +5.717000000000000007e-09 0.000000000000000000e+00 +5.717499999999999747e-09 0.000000000000000000e+00 +5.717999999999999486e-09 0.000000000000000000e+00 +5.718500000000000053e-09 0.000000000000000000e+00 +5.718999999999999793e-09 0.000000000000000000e+00 +5.719499999999999533e-09 0.000000000000000000e+00 +5.720000000000000100e-09 0.000000000000000000e+00 +5.720499999999999840e-09 0.000000000000000000e+00 +5.720999999999999579e-09 0.000000000000000000e+00 +5.721500000000000146e-09 0.000000000000000000e+00 +5.721999999999999886e-09 0.000000000000000000e+00 +5.722499999999999626e-09 0.000000000000000000e+00 +5.723000000000000193e-09 0.000000000000000000e+00 +5.723499999999999933e-09 0.000000000000000000e+00 +5.723999999999999672e-09 0.000000000000000000e+00 +5.724500000000000239e-09 0.000000000000000000e+00 +5.724999999999999979e-09 0.000000000000000000e+00 +5.725499999999999719e-09 0.000000000000000000e+00 +5.726000000000000286e-09 0.000000000000000000e+00 +5.726500000000000026e-09 0.000000000000000000e+00 +5.726999999999999765e-09 0.000000000000000000e+00 +5.727499999999999505e-09 0.000000000000000000e+00 +5.728000000000000072e-09 0.000000000000000000e+00 +5.728499999999999812e-09 0.000000000000000000e+00 +5.728999999999999552e-09 0.000000000000000000e+00 +5.729500000000000119e-09 0.000000000000000000e+00 +5.729999999999999858e-09 0.000000000000000000e+00 +5.730499999999999598e-09 0.000000000000000000e+00 +5.731000000000000165e-09 0.000000000000000000e+00 +5.731499999999999905e-09 0.000000000000000000e+00 +5.731999999999999645e-09 0.000000000000000000e+00 +5.732500000000000212e-09 0.000000000000000000e+00 +5.732999999999999952e-09 0.000000000000000000e+00 +5.733499999999999691e-09 0.000000000000000000e+00 +5.734000000000000258e-09 0.000000000000000000e+00 +5.734499999999999998e-09 0.000000000000000000e+00 +5.734999999999999738e-09 0.000000000000000000e+00 +5.735499999999999478e-09 0.000000000000000000e+00 +5.736000000000000045e-09 0.000000000000000000e+00 +5.736499999999999784e-09 0.000000000000000000e+00 +5.736999999999999524e-09 0.000000000000000000e+00 +5.737500000000000091e-09 0.000000000000000000e+00 +5.737999999999999831e-09 0.000000000000000000e+00 +5.738499999999999571e-09 0.000000000000000000e+00 +5.739000000000000138e-09 0.000000000000000000e+00 +5.739499999999999877e-09 0.000000000000000000e+00 +5.739999999999999617e-09 0.000000000000000000e+00 +5.740500000000000184e-09 0.000000000000000000e+00 +5.740999999999999924e-09 0.000000000000000000e+00 +5.741499999999999664e-09 0.000000000000000000e+00 +5.742000000000000231e-09 0.000000000000000000e+00 +5.742499999999999970e-09 0.000000000000000000e+00 +5.742999999999999710e-09 0.000000000000000000e+00 +5.743500000000000277e-09 0.000000000000000000e+00 +5.744000000000000017e-09 0.000000000000000000e+00 +5.744499999999999757e-09 0.000000000000000000e+00 +5.744999999999999497e-09 0.000000000000000000e+00 +5.745500000000000063e-09 0.000000000000000000e+00 +5.745999999999999803e-09 0.000000000000000000e+00 +5.746499999999999543e-09 0.000000000000000000e+00 +5.747000000000000110e-09 0.000000000000000000e+00 +5.747499999999999850e-09 0.000000000000000000e+00 +5.747999999999999590e-09 0.000000000000000000e+00 +5.748500000000000157e-09 0.000000000000000000e+00 +5.748999999999999896e-09 0.000000000000000000e+00 +5.749499999999999636e-09 0.000000000000000000e+00 +5.750000000000000203e-09 0.000000000000000000e+00 +5.750499999999999943e-09 0.000000000000000000e+00 +5.750999999999999683e-09 0.000000000000000000e+00 +5.751500000000000250e-09 0.000000000000000000e+00 +5.751999999999999989e-09 0.000000000000000000e+00 +5.752499999999999729e-09 0.000000000000000000e+00 +5.753000000000000296e-09 0.000000000000000000e+00 +5.753500000000000036e-09 0.000000000000000000e+00 +5.753999999999999776e-09 0.000000000000000000e+00 +5.754499999999999515e-09 0.000000000000000000e+00 +5.755000000000000082e-09 0.000000000000000000e+00 +5.755499999999999822e-09 0.000000000000000000e+00 +5.755999999999999562e-09 0.000000000000000000e+00 +5.756500000000000129e-09 0.000000000000000000e+00 +5.756999999999999869e-09 0.000000000000000000e+00 +5.757499999999999608e-09 0.000000000000000000e+00 +5.758000000000000175e-09 0.000000000000000000e+00 +5.758499999999999915e-09 0.000000000000000000e+00 +5.758999999999999655e-09 0.000000000000000000e+00 +5.759500000000000222e-09 0.000000000000000000e+00 +5.759999999999999962e-09 0.000000000000000000e+00 +5.760499999999999701e-09 0.000000000000000000e+00 +5.761000000000000268e-09 0.000000000000000000e+00 +5.761500000000000008e-09 0.000000000000000000e+00 +5.761999999999999748e-09 0.000000000000000000e+00 +5.762499999999999488e-09 0.000000000000000000e+00 +5.763000000000000055e-09 0.000000000000000000e+00 +5.763499999999999795e-09 0.000000000000000000e+00 +5.763999999999999534e-09 0.000000000000000000e+00 +5.764500000000000101e-09 0.000000000000000000e+00 +5.764999999999999841e-09 0.000000000000000000e+00 +5.765499999999999581e-09 0.000000000000000000e+00 +5.766000000000000148e-09 0.000000000000000000e+00 +5.766499999999999888e-09 0.000000000000000000e+00 +5.766999999999999627e-09 0.000000000000000000e+00 +5.767500000000000194e-09 0.000000000000000000e+00 +5.767999999999999934e-09 0.000000000000000000e+00 +5.768499999999999674e-09 0.000000000000000000e+00 +5.769000000000000241e-09 0.000000000000000000e+00 +5.769499999999999981e-09 0.000000000000000000e+00 +5.769999999999999720e-09 0.000000000000000000e+00 +5.770500000000000287e-09 0.000000000000000000e+00 +5.771000000000000027e-09 0.000000000000000000e+00 +5.771499999999999767e-09 0.000000000000000000e+00 +5.771999999999999507e-09 0.000000000000000000e+00 +5.772500000000000074e-09 0.000000000000000000e+00 +5.772999999999999813e-09 0.000000000000000000e+00 +5.773499999999999553e-09 0.000000000000000000e+00 +5.774000000000000120e-09 0.000000000000000000e+00 +5.774499999999999860e-09 0.000000000000000000e+00 +5.774999999999999600e-09 0.000000000000000000e+00 +5.775500000000000167e-09 0.000000000000000000e+00 +5.775999999999999906e-09 0.000000000000000000e+00 +5.776499999999999646e-09 0.000000000000000000e+00 +5.777000000000000213e-09 0.000000000000000000e+00 +5.777499999999999953e-09 0.000000000000000000e+00 +5.777999999999999693e-09 0.000000000000000000e+00 +5.778500000000000260e-09 0.000000000000000000e+00 +5.778999999999999999e-09 0.000000000000000000e+00 +5.779499999999999739e-09 0.000000000000000000e+00 +5.779999999999999479e-09 0.000000000000000000e+00 +5.780500000000000046e-09 0.000000000000000000e+00 +5.780999999999999786e-09 0.000000000000000000e+00 +5.781499999999999526e-09 0.000000000000000000e+00 +5.782000000000000093e-09 0.000000000000000000e+00 +5.782499999999999832e-09 0.000000000000000000e+00 +5.782999999999999572e-09 0.000000000000000000e+00 +5.783500000000000139e-09 0.000000000000000000e+00 +5.783999999999999879e-09 0.000000000000000000e+00 +5.784499999999999619e-09 0.000000000000000000e+00 +5.785000000000000186e-09 0.000000000000000000e+00 +5.785499999999999925e-09 0.000000000000000000e+00 +5.785999999999999665e-09 0.000000000000000000e+00 +5.786500000000000232e-09 0.000000000000000000e+00 +5.786999999999999972e-09 0.000000000000000000e+00 +5.787499999999999712e-09 0.000000000000000000e+00 +5.788000000000000279e-09 0.000000000000000000e+00 +5.788500000000000018e-09 0.000000000000000000e+00 +5.788999999999999758e-09 0.000000000000000000e+00 +5.789499999999999498e-09 0.000000000000000000e+00 +5.790000000000000065e-09 0.000000000000000000e+00 +5.790499999999999805e-09 0.000000000000000000e+00 +5.790999999999999544e-09 0.000000000000000000e+00 +5.791500000000000111e-09 0.000000000000000000e+00 +5.791999999999999851e-09 0.000000000000000000e+00 +5.792499999999999591e-09 0.000000000000000000e+00 +5.793000000000000158e-09 0.000000000000000000e+00 +5.793499999999999898e-09 0.000000000000000000e+00 +5.793999999999999637e-09 0.000000000000000000e+00 +5.794500000000000204e-09 0.000000000000000000e+00 +5.794999999999999944e-09 0.000000000000000000e+00 +5.795499999999999684e-09 0.000000000000000000e+00 +5.796000000000000251e-09 0.000000000000000000e+00 +5.796499999999999991e-09 0.000000000000000000e+00 +5.796999999999999731e-09 0.000000000000000000e+00 +5.797499999999999470e-09 0.000000000000000000e+00 +5.798000000000000037e-09 0.000000000000000000e+00 +5.798499999999999777e-09 0.000000000000000000e+00 +5.798999999999999517e-09 0.000000000000000000e+00 +5.799500000000000084e-09 0.000000000000000000e+00 +5.799999999999999824e-09 0.000000000000000000e+00 +5.800499999999999563e-09 0.000000000000000000e+00 +5.801000000000000130e-09 0.000000000000000000e+00 +5.801499999999999870e-09 0.000000000000000000e+00 +5.801999999999999610e-09 0.000000000000000000e+00 +5.802500000000000177e-09 0.000000000000000000e+00 +5.802999999999999917e-09 0.000000000000000000e+00 +5.803499999999999656e-09 0.000000000000000000e+00 +5.804000000000000223e-09 0.000000000000000000e+00 +5.804499999999999963e-09 0.000000000000000000e+00 +5.804999999999999703e-09 0.000000000000000000e+00 +5.805500000000000270e-09 0.000000000000000000e+00 +5.806000000000000010e-09 0.000000000000000000e+00 +5.806499999999999749e-09 0.000000000000000000e+00 +5.806999999999999489e-09 0.000000000000000000e+00 +5.807500000000000056e-09 0.000000000000000000e+00 +5.807999999999999796e-09 0.000000000000000000e+00 +5.808499999999999536e-09 0.000000000000000000e+00 +5.809000000000000103e-09 0.000000000000000000e+00 +5.809499999999999842e-09 0.000000000000000000e+00 +5.809999999999999582e-09 0.000000000000000000e+00 +5.810500000000000149e-09 0.000000000000000000e+00 +5.810999999999999889e-09 0.000000000000000000e+00 +5.811499999999999629e-09 0.000000000000000000e+00 +5.812000000000000196e-09 0.000000000000000000e+00 +5.812499999999999935e-09 0.000000000000000000e+00 +5.812999999999999675e-09 0.000000000000000000e+00 +5.813500000000000242e-09 0.000000000000000000e+00 +5.813999999999999982e-09 0.000000000000000000e+00 +5.814499999999999722e-09 0.000000000000000000e+00 +5.815000000000000289e-09 0.000000000000000000e+00 +5.815500000000000029e-09 0.000000000000000000e+00 +5.815999999999999768e-09 0.000000000000000000e+00 +5.816499999999999508e-09 0.000000000000000000e+00 +5.817000000000000075e-09 0.000000000000000000e+00 +5.817499999999999815e-09 0.000000000000000000e+00 +5.817999999999999555e-09 0.000000000000000000e+00 +5.818500000000000122e-09 0.000000000000000000e+00 +5.818999999999999861e-09 0.000000000000000000e+00 +5.819499999999999601e-09 0.000000000000000000e+00 +5.820000000000000168e-09 0.000000000000000000e+00 +5.820499999999999908e-09 0.000000000000000000e+00 +5.820999999999999648e-09 0.000000000000000000e+00 +5.821500000000000215e-09 0.000000000000000000e+00 +5.821999999999999954e-09 0.000000000000000000e+00 +5.822499999999999694e-09 0.000000000000000000e+00 +5.823000000000000261e-09 0.000000000000000000e+00 +5.823500000000000001e-09 0.000000000000000000e+00 +5.823999999999999741e-09 0.000000000000000000e+00 +5.824499999999999480e-09 0.000000000000000000e+00 +5.825000000000000047e-09 0.000000000000000000e+00 +5.825499999999999787e-09 0.000000000000000000e+00 +5.825999999999999527e-09 0.000000000000000000e+00 +5.826500000000000094e-09 0.000000000000000000e+00 +5.826999999999999834e-09 0.000000000000000000e+00 +5.827499999999999574e-09 0.000000000000000000e+00 +5.828000000000000140e-09 0.000000000000000000e+00 +5.828499999999999880e-09 0.000000000000000000e+00 +5.828999999999999620e-09 0.000000000000000000e+00 +5.829500000000000187e-09 0.000000000000000000e+00 +5.829999999999999927e-09 0.000000000000000000e+00 +5.830499999999999667e-09 0.000000000000000000e+00 +5.831000000000000234e-09 0.000000000000000000e+00 +5.831499999999999973e-09 0.000000000000000000e+00 +5.831999999999999713e-09 0.000000000000000000e+00 +5.832500000000000280e-09 0.000000000000000000e+00 +5.833000000000000020e-09 0.000000000000000000e+00 +5.833499999999999760e-09 0.000000000000000000e+00 +5.833999999999999499e-09 0.000000000000000000e+00 +5.834500000000000066e-09 0.000000000000000000e+00 +5.834999999999999806e-09 0.000000000000000000e+00 +5.835499999999999546e-09 0.000000000000000000e+00 +5.836000000000000113e-09 0.000000000000000000e+00 +5.836499999999999853e-09 0.000000000000000000e+00 +5.836999999999999592e-09 0.000000000000000000e+00 +5.837500000000000159e-09 0.000000000000000000e+00 +5.837999999999999899e-09 0.000000000000000000e+00 +5.838499999999999639e-09 0.000000000000000000e+00 +5.839000000000000206e-09 0.000000000000000000e+00 +5.839499999999999946e-09 0.000000000000000000e+00 +5.839999999999999685e-09 0.000000000000000000e+00 +5.840500000000000252e-09 0.000000000000000000e+00 +5.840999999999999992e-09 0.000000000000000000e+00 +5.841499999999999732e-09 0.000000000000000000e+00 +5.841999999999999472e-09 0.000000000000000000e+00 +5.842500000000000039e-09 0.000000000000000000e+00 +5.842999999999999778e-09 0.000000000000000000e+00 +5.843499999999999518e-09 0.000000000000000000e+00 +5.844000000000000085e-09 0.000000000000000000e+00 +5.844499999999999825e-09 0.000000000000000000e+00 +5.844999999999999565e-09 0.000000000000000000e+00 +5.845500000000000132e-09 0.000000000000000000e+00 +5.845999999999999872e-09 0.000000000000000000e+00 +5.846499999999999611e-09 0.000000000000000000e+00 +5.847000000000000178e-09 0.000000000000000000e+00 +5.847499999999999918e-09 0.000000000000000000e+00 +5.847999999999999658e-09 0.000000000000000000e+00 +5.848500000000000225e-09 0.000000000000000000e+00 +5.848999999999999965e-09 0.000000000000000000e+00 +5.849499999999999704e-09 0.000000000000000000e+00 +5.850000000000000271e-09 0.000000000000000000e+00 +5.850500000000000011e-09 0.000000000000000000e+00 +5.850999999999999751e-09 0.000000000000000000e+00 +5.851499999999999491e-09 0.000000000000000000e+00 +5.852000000000000058e-09 0.000000000000000000e+00 +5.852499999999999797e-09 0.000000000000000000e+00 +5.852999999999999537e-09 0.000000000000000000e+00 +5.853500000000000104e-09 0.000000000000000000e+00 +5.853999999999999844e-09 0.000000000000000000e+00 +5.854499999999999584e-09 0.000000000000000000e+00 +5.855000000000000151e-09 0.000000000000000000e+00 +5.855499999999999890e-09 0.000000000000000000e+00 +5.855999999999999630e-09 0.000000000000000000e+00 +5.856500000000000197e-09 0.000000000000000000e+00 +5.856999999999999937e-09 0.000000000000000000e+00 +5.857499999999999677e-09 0.000000000000000000e+00 +5.858000000000000244e-09 0.000000000000000000e+00 +5.858499999999999983e-09 0.000000000000000000e+00 +5.858999999999999723e-09 0.000000000000000000e+00 +5.859500000000000290e-09 0.000000000000000000e+00 +5.860000000000000030e-09 0.000000000000000000e+00 +5.860499999999999770e-09 0.000000000000000000e+00 +5.860999999999999510e-09 0.000000000000000000e+00 +5.861500000000000076e-09 0.000000000000000000e+00 +5.861999999999999816e-09 0.000000000000000000e+00 +5.862499999999999556e-09 0.000000000000000000e+00 +5.863000000000000123e-09 0.000000000000000000e+00 +5.863499999999999863e-09 0.000000000000000000e+00 +5.863999999999999603e-09 0.000000000000000000e+00 +5.864500000000000170e-09 0.000000000000000000e+00 +5.864999999999999909e-09 0.000000000000000000e+00 +5.865499999999999649e-09 0.000000000000000000e+00 +5.866000000000000216e-09 0.000000000000000000e+00 +5.866499999999999956e-09 0.000000000000000000e+00 +5.866999999999999696e-09 0.000000000000000000e+00 +5.867500000000000263e-09 0.000000000000000000e+00 +5.868000000000000002e-09 0.000000000000000000e+00 +5.868499999999999742e-09 0.000000000000000000e+00 +5.868999999999999482e-09 0.000000000000000000e+00 +5.869500000000000049e-09 0.000000000000000000e+00 +5.869999999999999789e-09 0.000000000000000000e+00 +5.870499999999999528e-09 0.000000000000000000e+00 +5.871000000000000095e-09 0.000000000000000000e+00 +5.871499999999999835e-09 0.000000000000000000e+00 +5.871999999999999575e-09 0.000000000000000000e+00 +5.872500000000000142e-09 0.000000000000000000e+00 +5.872999999999999882e-09 0.000000000000000000e+00 +5.873499999999999621e-09 0.000000000000000000e+00 +5.874000000000000188e-09 0.000000000000000000e+00 +5.874499999999999928e-09 0.000000000000000000e+00 +5.874999999999999668e-09 0.000000000000000000e+00 +5.875500000000000235e-09 0.000000000000000000e+00 +5.875999999999999975e-09 0.000000000000000000e+00 +5.876499999999999714e-09 0.000000000000000000e+00 +5.877000000000000281e-09 0.000000000000000000e+00 +5.877500000000000021e-09 0.000000000000000000e+00 +5.877999999999999761e-09 0.000000000000000000e+00 +5.878499999999999501e-09 0.000000000000000000e+00 +5.879000000000000068e-09 0.000000000000000000e+00 +5.879499999999999808e-09 0.000000000000000000e+00 +5.879999999999999547e-09 0.000000000000000000e+00 +5.880500000000000114e-09 0.000000000000000000e+00 +5.880999999999999854e-09 0.000000000000000000e+00 +5.881499999999999594e-09 0.000000000000000000e+00 +5.882000000000000161e-09 0.000000000000000000e+00 +5.882499999999999901e-09 0.000000000000000000e+00 +5.882999999999999640e-09 0.000000000000000000e+00 +5.883500000000000207e-09 0.000000000000000000e+00 +5.883999999999999947e-09 0.000000000000000000e+00 +5.884499999999999687e-09 0.000000000000000000e+00 +5.885000000000000254e-09 0.000000000000000000e+00 +5.885499999999999994e-09 0.000000000000000000e+00 +5.885999999999999733e-09 0.000000000000000000e+00 +5.886499999999999473e-09 0.000000000000000000e+00 +5.887000000000000040e-09 0.000000000000000000e+00 +5.887499999999999780e-09 0.000000000000000000e+00 +5.887999999999999520e-09 0.000000000000000000e+00 +5.888500000000000087e-09 0.000000000000000000e+00 +5.888999999999999826e-09 0.000000000000000000e+00 +5.889499999999999566e-09 0.000000000000000000e+00 +5.890000000000000133e-09 0.000000000000000000e+00 +5.890499999999999873e-09 0.000000000000000000e+00 +5.890999999999999613e-09 0.000000000000000000e+00 +5.891500000000000180e-09 0.000000000000000000e+00 +5.891999999999999919e-09 0.000000000000000000e+00 +5.892499999999999659e-09 0.000000000000000000e+00 +5.893000000000000226e-09 0.000000000000000000e+00 +5.893499999999999966e-09 0.000000000000000000e+00 +5.893999999999999706e-09 0.000000000000000000e+00 +5.894500000000000273e-09 0.000000000000000000e+00 +5.895000000000000012e-09 0.000000000000000000e+00 +5.895499999999999752e-09 0.000000000000000000e+00 +5.895999999999999492e-09 0.000000000000000000e+00 +5.896500000000000059e-09 0.000000000000000000e+00 +5.896999999999999799e-09 0.000000000000000000e+00 +5.897499999999999539e-09 0.000000000000000000e+00 +5.898000000000000106e-09 0.000000000000000000e+00 +5.898499999999999845e-09 0.000000000000000000e+00 +5.898999999999999585e-09 0.000000000000000000e+00 +5.899500000000000152e-09 0.000000000000000000e+00 +5.899999999999999892e-09 0.000000000000000000e+00 +5.900499999999999632e-09 0.000000000000000000e+00 +5.901000000000000199e-09 0.000000000000000000e+00 +5.901499999999999938e-09 0.000000000000000000e+00 +5.901999999999999678e-09 0.000000000000000000e+00 +5.902500000000000245e-09 0.000000000000000000e+00 +5.902999999999999985e-09 0.000000000000000000e+00 +5.903499999999999725e-09 0.000000000000000000e+00 +5.904000000000000292e-09 0.000000000000000000e+00 +5.904500000000000031e-09 0.000000000000000000e+00 +5.904999999999999771e-09 0.000000000000000000e+00 +5.905499999999999511e-09 0.000000000000000000e+00 +5.906000000000000078e-09 0.000000000000000000e+00 +5.906499999999999818e-09 0.000000000000000000e+00 +5.906999999999999557e-09 0.000000000000000000e+00 +5.907500000000000124e-09 0.000000000000000000e+00 +5.907999999999999864e-09 0.000000000000000000e+00 +5.908499999999999604e-09 0.000000000000000000e+00 +5.909000000000000171e-09 0.000000000000000000e+00 +5.909499999999999911e-09 0.000000000000000000e+00 +5.909999999999999651e-09 0.000000000000000000e+00 +5.910500000000000217e-09 0.000000000000000000e+00 +5.910999999999999957e-09 0.000000000000000000e+00 +5.911499999999999697e-09 0.000000000000000000e+00 +5.912000000000000264e-09 0.000000000000000000e+00 +5.912500000000000004e-09 0.000000000000000000e+00 +5.912999999999999744e-09 0.000000000000000000e+00 +5.913499999999999483e-09 0.000000000000000000e+00 +5.914000000000000050e-09 0.000000000000000000e+00 +5.914499999999999790e-09 0.000000000000000000e+00 +5.914999999999999530e-09 0.000000000000000000e+00 +5.915500000000000097e-09 0.000000000000000000e+00 +5.915999999999999837e-09 0.000000000000000000e+00 +5.916499999999999576e-09 0.000000000000000000e+00 +5.917000000000000143e-09 0.000000000000000000e+00 +5.917499999999999883e-09 0.000000000000000000e+00 +5.917999999999999623e-09 0.000000000000000000e+00 +5.918500000000000190e-09 0.000000000000000000e+00 +5.918999999999999930e-09 0.000000000000000000e+00 +5.919499999999999669e-09 0.000000000000000000e+00 +5.920000000000000236e-09 0.000000000000000000e+00 +5.920499999999999976e-09 0.000000000000000000e+00 +5.920999999999999716e-09 0.000000000000000000e+00 +5.921500000000000283e-09 0.000000000000000000e+00 +5.922000000000000023e-09 0.000000000000000000e+00 +5.922499999999999762e-09 0.000000000000000000e+00 +5.922999999999999502e-09 0.000000000000000000e+00 +5.923500000000000069e-09 0.000000000000000000e+00 +5.923999999999999809e-09 0.000000000000000000e+00 +5.924499999999999549e-09 0.000000000000000000e+00 +5.925000000000000116e-09 0.000000000000000000e+00 +5.925499999999999855e-09 0.000000000000000000e+00 +5.925999999999999595e-09 0.000000000000000000e+00 +5.926500000000000162e-09 0.000000000000000000e+00 +5.926999999999999902e-09 0.000000000000000000e+00 +5.927499999999999642e-09 0.000000000000000000e+00 +5.928000000000000209e-09 0.000000000000000000e+00 +5.928499999999999949e-09 0.000000000000000000e+00 +5.928999999999999688e-09 0.000000000000000000e+00 +5.929500000000000255e-09 0.000000000000000000e+00 +5.929999999999999995e-09 0.000000000000000000e+00 +5.930499999999999735e-09 0.000000000000000000e+00 +5.930999999999999475e-09 0.000000000000000000e+00 +5.931500000000000042e-09 0.000000000000000000e+00 +5.931999999999999781e-09 0.000000000000000000e+00 +5.932499999999999521e-09 0.000000000000000000e+00 +5.933000000000000088e-09 0.000000000000000000e+00 +5.933499999999999828e-09 0.000000000000000000e+00 +5.933999999999999568e-09 0.000000000000000000e+00 +5.934500000000000135e-09 0.000000000000000000e+00 +5.934999999999999874e-09 0.000000000000000000e+00 +5.935499999999999614e-09 0.000000000000000000e+00 +5.936000000000000181e-09 0.000000000000000000e+00 +5.936499999999999921e-09 0.000000000000000000e+00 +5.936999999999999661e-09 0.000000000000000000e+00 +5.937500000000000228e-09 0.000000000000000000e+00 +5.937999999999999967e-09 0.000000000000000000e+00 +5.938499999999999707e-09 0.000000000000000000e+00 +5.939000000000000274e-09 0.000000000000000000e+00 +5.939500000000000014e-09 0.000000000000000000e+00 +5.939999999999999754e-09 0.000000000000000000e+00 +5.940499999999999493e-09 0.000000000000000000e+00 +5.941000000000000060e-09 0.000000000000000000e+00 +5.941499999999999800e-09 0.000000000000000000e+00 +5.941999999999999540e-09 0.000000000000000000e+00 +5.942500000000000107e-09 0.000000000000000000e+00 +5.942999999999999847e-09 0.000000000000000000e+00 +5.943499999999999587e-09 0.000000000000000000e+00 +5.944000000000000153e-09 0.000000000000000000e+00 +5.944499999999999893e-09 0.000000000000000000e+00 +5.944999999999999633e-09 0.000000000000000000e+00 +5.945500000000000200e-09 0.000000000000000000e+00 +5.945999999999999940e-09 0.000000000000000000e+00 +5.946499999999999680e-09 0.000000000000000000e+00 +5.947000000000000247e-09 0.000000000000000000e+00 +5.947499999999999986e-09 0.000000000000000000e+00 +5.947999999999999726e-09 0.000000000000000000e+00 +5.948500000000000293e-09 0.000000000000000000e+00 +5.949000000000000033e-09 0.000000000000000000e+00 +5.949499999999999773e-09 0.000000000000000000e+00 +5.949999999999999512e-09 0.000000000000000000e+00 +5.950500000000000079e-09 0.000000000000000000e+00 +5.950999999999999819e-09 0.000000000000000000e+00 +5.951499999999999559e-09 0.000000000000000000e+00 +5.952000000000000126e-09 0.000000000000000000e+00 +5.952499999999999866e-09 0.000000000000000000e+00 +5.952999999999999605e-09 0.000000000000000000e+00 +5.953500000000000172e-09 0.000000000000000000e+00 +5.953999999999999912e-09 0.000000000000000000e+00 +5.954499999999999652e-09 0.000000000000000000e+00 +5.955000000000000219e-09 0.000000000000000000e+00 +5.955499999999999959e-09 0.000000000000000000e+00 +5.955999999999999698e-09 0.000000000000000000e+00 +5.956500000000000265e-09 0.000000000000000000e+00 +5.957000000000000005e-09 0.000000000000000000e+00 +5.957499999999999745e-09 0.000000000000000000e+00 +5.957999999999999485e-09 0.000000000000000000e+00 +5.958500000000000052e-09 0.000000000000000000e+00 +5.958999999999999791e-09 0.000000000000000000e+00 +5.959499999999999531e-09 0.000000000000000000e+00 +5.960000000000000098e-09 0.000000000000000000e+00 +5.960499999999999838e-09 0.000000000000000000e+00 +5.960999999999999578e-09 0.000000000000000000e+00 +5.961500000000000145e-09 0.000000000000000000e+00 +5.961999999999999885e-09 0.000000000000000000e+00 +5.962499999999999624e-09 0.000000000000000000e+00 +5.963000000000000191e-09 0.000000000000000000e+00 +5.963499999999999931e-09 0.000000000000000000e+00 +5.963999999999999671e-09 0.000000000000000000e+00 +5.964500000000000238e-09 0.000000000000000000e+00 +5.964999999999999978e-09 0.000000000000000000e+00 +5.965499999999999717e-09 0.000000000000000000e+00 +5.966000000000000284e-09 0.000000000000000000e+00 +5.966500000000000024e-09 0.000000000000000000e+00 +5.966999999999999764e-09 0.000000000000000000e+00 +5.967499999999999504e-09 0.000000000000000000e+00 +5.968000000000000071e-09 0.000000000000000000e+00 +5.968499999999999810e-09 0.000000000000000000e+00 +5.968999999999999550e-09 0.000000000000000000e+00 +5.969500000000000117e-09 0.000000000000000000e+00 +5.969999999999999857e-09 0.000000000000000000e+00 +5.970499999999999597e-09 0.000000000000000000e+00 +5.971000000000000164e-09 0.000000000000000000e+00 +5.971499999999999903e-09 0.000000000000000000e+00 +5.971999999999999643e-09 0.000000000000000000e+00 +5.972500000000000210e-09 0.000000000000000000e+00 +5.972999999999999950e-09 0.000000000000000000e+00 +5.973499999999999690e-09 0.000000000000000000e+00 +5.974000000000000257e-09 0.000000000000000000e+00 +5.974499999999999996e-09 0.000000000000000000e+00 +5.974999999999999736e-09 0.000000000000000000e+00 +5.975499999999999476e-09 0.000000000000000000e+00 +5.976000000000000043e-09 0.000000000000000000e+00 +5.976499999999999783e-09 0.000000000000000000e+00 +5.976999999999999523e-09 0.000000000000000000e+00 +5.977500000000000089e-09 0.000000000000000000e+00 +5.977999999999999829e-09 0.000000000000000000e+00 +5.978499999999999569e-09 0.000000000000000000e+00 +5.979000000000000136e-09 0.000000000000000000e+00 +5.979499999999999876e-09 0.000000000000000000e+00 +5.979999999999999616e-09 0.000000000000000000e+00 +5.980500000000000183e-09 0.000000000000000000e+00 +5.980999999999999922e-09 0.000000000000000000e+00 +5.981499999999999662e-09 0.000000000000000000e+00 +5.982000000000000229e-09 0.000000000000000000e+00 +5.982499999999999969e-09 0.000000000000000000e+00 +5.982999999999999709e-09 0.000000000000000000e+00 +5.983500000000000276e-09 0.000000000000000000e+00 +5.984000000000000015e-09 0.000000000000000000e+00 +5.984499999999999755e-09 0.000000000000000000e+00 +5.984999999999999495e-09 0.000000000000000000e+00 +5.985500000000000062e-09 0.000000000000000000e+00 +5.985999999999999802e-09 0.000000000000000000e+00 +5.986499999999999541e-09 0.000000000000000000e+00 +5.987000000000000108e-09 0.000000000000000000e+00 +5.987499999999999848e-09 0.000000000000000000e+00 +5.987999999999999588e-09 0.000000000000000000e+00 +5.988500000000000155e-09 0.000000000000000000e+00 +5.988999999999999895e-09 0.000000000000000000e+00 +5.989499999999999634e-09 0.000000000000000000e+00 +5.990000000000000201e-09 0.000000000000000000e+00 +5.990499999999999941e-09 0.000000000000000000e+00 +5.990999999999999681e-09 0.000000000000000000e+00 +5.991500000000000248e-09 0.000000000000000000e+00 +5.991999999999999988e-09 0.000000000000000000e+00 +5.992499999999999728e-09 0.000000000000000000e+00 +5.992999999999999467e-09 0.000000000000000000e+00 +5.993500000000000034e-09 0.000000000000000000e+00 +5.993999999999999774e-09 0.000000000000000000e+00 +5.994499999999999514e-09 0.000000000000000000e+00 +5.995000000000000081e-09 0.000000000000000000e+00 +5.995499999999999821e-09 0.000000000000000000e+00 +5.995999999999999560e-09 0.000000000000000000e+00 +5.996500000000000127e-09 0.000000000000000000e+00 +5.996999999999999867e-09 0.000000000000000000e+00 +5.997499999999999607e-09 0.000000000000000000e+00 +5.998000000000000174e-09 0.000000000000000000e+00 +5.998499999999999914e-09 0.000000000000000000e+00 +5.998999999999999653e-09 0.000000000000000000e+00 +5.999500000000000220e-09 0.000000000000000000e+00 +5.999999999999999960e-09 0.000000000000000000e+00 +6.000499999999999700e-09 0.000000000000000000e+00 +6.001000000000000267e-09 0.000000000000000000e+00 +6.001500000000000007e-09 0.000000000000000000e+00 +6.001999999999999746e-09 0.000000000000000000e+00 +6.002499999999999486e-09 0.000000000000000000e+00 +6.003000000000000053e-09 0.000000000000000000e+00 +6.003499999999999793e-09 0.000000000000000000e+00 +6.003999999999999533e-09 0.000000000000000000e+00 +6.004500000000000100e-09 0.000000000000000000e+00 +6.004999999999999839e-09 0.000000000000000000e+00 +6.005499999999999579e-09 0.000000000000000000e+00 +6.006000000000000146e-09 0.000000000000000000e+00 +6.006499999999999886e-09 0.000000000000000000e+00 +6.006999999999999626e-09 0.000000000000000000e+00 +6.007500000000000193e-09 0.000000000000000000e+00 +6.007999999999999932e-09 0.000000000000000000e+00 +6.008499999999999672e-09 0.000000000000000000e+00 +6.009000000000000239e-09 0.000000000000000000e+00 +6.009499999999999979e-09 0.000000000000000000e+00 +6.009999999999999719e-09 0.000000000000000000e+00 +6.010500000000000286e-09 0.000000000000000000e+00 +6.011000000000000026e-09 0.000000000000000000e+00 +6.011499999999999765e-09 0.000000000000000000e+00 +6.011999999999999505e-09 0.000000000000000000e+00 +6.012500000000000072e-09 0.000000000000000000e+00 +6.012999999999999812e-09 0.000000000000000000e+00 +6.013499999999999552e-09 0.000000000000000000e+00 +6.014000000000000119e-09 0.000000000000000000e+00 +6.014499999999999858e-09 0.000000000000000000e+00 +6.014999999999999598e-09 0.000000000000000000e+00 +6.015500000000000165e-09 0.000000000000000000e+00 +6.015999999999999905e-09 0.000000000000000000e+00 +6.016499999999999645e-09 0.000000000000000000e+00 +6.017000000000000212e-09 0.000000000000000000e+00 +6.017499999999999951e-09 0.000000000000000000e+00 +6.017999999999999691e-09 0.000000000000000000e+00 +6.018500000000000258e-09 0.000000000000000000e+00 +6.018999999999999998e-09 0.000000000000000000e+00 +6.019499999999999738e-09 0.000000000000000000e+00 +6.019999999999999477e-09 0.000000000000000000e+00 +6.020500000000000044e-09 0.000000000000000000e+00 +6.020999999999999784e-09 0.000000000000000000e+00 +6.021499999999999524e-09 0.000000000000000000e+00 +6.022000000000000091e-09 0.000000000000000000e+00 +6.022499999999999831e-09 0.000000000000000000e+00 +6.022999999999999570e-09 0.000000000000000000e+00 +6.023500000000000137e-09 0.000000000000000000e+00 +6.023999999999999877e-09 0.000000000000000000e+00 +6.024499999999999617e-09 0.000000000000000000e+00 +6.025000000000000184e-09 0.000000000000000000e+00 +6.025499999999999924e-09 0.000000000000000000e+00 +6.025999999999999664e-09 0.000000000000000000e+00 +6.026500000000000230e-09 0.000000000000000000e+00 +6.026999999999999970e-09 0.000000000000000000e+00 +6.027499999999999710e-09 0.000000000000000000e+00 +6.028000000000000277e-09 0.000000000000000000e+00 +6.028500000000000017e-09 0.000000000000000000e+00 +6.028999999999999757e-09 0.000000000000000000e+00 +6.029499999999999496e-09 0.000000000000000000e+00 +6.030000000000000063e-09 0.000000000000000000e+00 +6.030499999999999803e-09 0.000000000000000000e+00 +6.030999999999999543e-09 0.000000000000000000e+00 +6.031500000000000110e-09 0.000000000000000000e+00 +6.031999999999999850e-09 0.000000000000000000e+00 +6.032499999999999589e-09 0.000000000000000000e+00 +6.033000000000000156e-09 0.000000000000000000e+00 +6.033499999999999896e-09 0.000000000000000000e+00 +6.033999999999999636e-09 0.000000000000000000e+00 +6.034500000000000203e-09 0.000000000000000000e+00 +6.034999999999999943e-09 0.000000000000000000e+00 +6.035499999999999682e-09 0.000000000000000000e+00 +6.036000000000000249e-09 0.000000000000000000e+00 +6.036499999999999989e-09 0.000000000000000000e+00 +6.036999999999999729e-09 0.000000000000000000e+00 +6.037499999999999469e-09 0.000000000000000000e+00 +6.038000000000000036e-09 0.000000000000000000e+00 +6.038499999999999775e-09 0.000000000000000000e+00 +6.038999999999999515e-09 0.000000000000000000e+00 +6.039500000000000082e-09 0.000000000000000000e+00 +6.039999999999999822e-09 0.000000000000000000e+00 +6.040499999999999562e-09 0.000000000000000000e+00 +6.041000000000000129e-09 0.000000000000000000e+00 +6.041499999999999868e-09 0.000000000000000000e+00 +6.041999999999999608e-09 0.000000000000000000e+00 +6.042500000000000175e-09 0.000000000000000000e+00 +6.042999999999999915e-09 0.000000000000000000e+00 +6.043499999999999655e-09 0.000000000000000000e+00 +6.044000000000000222e-09 0.000000000000000000e+00 +6.044499999999999962e-09 0.000000000000000000e+00 +6.044999999999999701e-09 0.000000000000000000e+00 +6.045500000000000268e-09 0.000000000000000000e+00 +6.046000000000000008e-09 0.000000000000000000e+00 +6.046499999999999748e-09 0.000000000000000000e+00 +6.046999999999999488e-09 0.000000000000000000e+00 +6.047500000000000055e-09 0.000000000000000000e+00 +6.047999999999999794e-09 0.000000000000000000e+00 +6.048499999999999534e-09 0.000000000000000000e+00 +6.049000000000000101e-09 0.000000000000000000e+00 +6.049499999999999841e-09 0.000000000000000000e+00 +6.049999999999999581e-09 0.000000000000000000e+00 +6.050500000000000148e-09 0.000000000000000000e+00 +6.050999999999999887e-09 0.000000000000000000e+00 +6.051499999999999627e-09 0.000000000000000000e+00 +6.052000000000000194e-09 0.000000000000000000e+00 +6.052499999999999934e-09 0.000000000000000000e+00 +6.052999999999999674e-09 0.000000000000000000e+00 +6.053500000000000241e-09 0.000000000000000000e+00 +6.053999999999999980e-09 0.000000000000000000e+00 +6.054499999999999720e-09 0.000000000000000000e+00 +6.055000000000000287e-09 0.000000000000000000e+00 +6.055500000000000027e-09 0.000000000000000000e+00 +6.055999999999999767e-09 0.000000000000000000e+00 +6.056499999999999506e-09 0.000000000000000000e+00 +6.057000000000000073e-09 0.000000000000000000e+00 +6.057499999999999813e-09 0.000000000000000000e+00 +6.057999999999999553e-09 0.000000000000000000e+00 +6.058500000000000120e-09 0.000000000000000000e+00 +6.058999999999999860e-09 0.000000000000000000e+00 +6.059499999999999600e-09 0.000000000000000000e+00 +6.060000000000000166e-09 0.000000000000000000e+00 +6.060499999999999906e-09 0.000000000000000000e+00 +6.060999999999999646e-09 0.000000000000000000e+00 +6.061500000000000213e-09 0.000000000000000000e+00 +6.061999999999999953e-09 0.000000000000000000e+00 +6.062499999999999693e-09 0.000000000000000000e+00 +6.063000000000000260e-09 0.000000000000000000e+00 +6.063499999999999999e-09 0.000000000000000000e+00 +6.063999999999999739e-09 0.000000000000000000e+00 +6.064499999999999479e-09 0.000000000000000000e+00 +6.065000000000000046e-09 0.000000000000000000e+00 +6.065499999999999786e-09 0.000000000000000000e+00 +6.065999999999999525e-09 0.000000000000000000e+00 +6.066500000000000092e-09 0.000000000000000000e+00 +6.066999999999999832e-09 0.000000000000000000e+00 +6.067499999999999572e-09 0.000000000000000000e+00 +6.068000000000000139e-09 0.000000000000000000e+00 +6.068499999999999879e-09 0.000000000000000000e+00 +6.068999999999999618e-09 0.000000000000000000e+00 +6.069500000000000185e-09 0.000000000000000000e+00 +6.069999999999999925e-09 0.000000000000000000e+00 +6.070499999999999665e-09 0.000000000000000000e+00 +6.071000000000000232e-09 0.000000000000000000e+00 +6.071499999999999972e-09 0.000000000000000000e+00 +6.071999999999999711e-09 0.000000000000000000e+00 +6.072500000000000278e-09 0.000000000000000000e+00 +6.073000000000000018e-09 0.000000000000000000e+00 +6.073499999999999758e-09 0.000000000000000000e+00 +6.073999999999999498e-09 0.000000000000000000e+00 +6.074500000000000065e-09 0.000000000000000000e+00 +6.074999999999999805e-09 0.000000000000000000e+00 +6.075499999999999544e-09 0.000000000000000000e+00 +6.076000000000000111e-09 0.000000000000000000e+00 +6.076499999999999851e-09 0.000000000000000000e+00 +6.076999999999999591e-09 0.000000000000000000e+00 +6.077500000000000158e-09 0.000000000000000000e+00 +6.077999999999999898e-09 0.000000000000000000e+00 +6.078499999999999637e-09 0.000000000000000000e+00 +6.079000000000000204e-09 0.000000000000000000e+00 +6.079499999999999944e-09 0.000000000000000000e+00 +6.079999999999999684e-09 0.000000000000000000e+00 +6.080500000000000251e-09 0.000000000000000000e+00 +6.080999999999999991e-09 0.000000000000000000e+00 +6.081499999999999730e-09 0.000000000000000000e+00 +6.081999999999999470e-09 0.000000000000000000e+00 +6.082500000000000037e-09 0.000000000000000000e+00 +6.082999999999999777e-09 0.000000000000000000e+00 +6.083499999999999517e-09 0.000000000000000000e+00 +6.084000000000000084e-09 0.000000000000000000e+00 +6.084499999999999823e-09 0.000000000000000000e+00 +6.084999999999999563e-09 0.000000000000000000e+00 +6.085500000000000130e-09 0.000000000000000000e+00 +6.085999999999999870e-09 0.000000000000000000e+00 +6.086499999999999610e-09 0.000000000000000000e+00 +6.087000000000000177e-09 0.000000000000000000e+00 +6.087499999999999916e-09 0.000000000000000000e+00 +6.087999999999999656e-09 0.000000000000000000e+00 +6.088500000000000223e-09 0.000000000000000000e+00 +6.088999999999999963e-09 0.000000000000000000e+00 +6.089499999999999703e-09 0.000000000000000000e+00 +6.090000000000000270e-09 0.000000000000000000e+00 +6.090500000000000009e-09 0.000000000000000000e+00 +6.090999999999999749e-09 0.000000000000000000e+00 +6.091499999999999489e-09 0.000000000000000000e+00 +6.092000000000000056e-09 0.000000000000000000e+00 +6.092499999999999796e-09 0.000000000000000000e+00 +6.092999999999999536e-09 0.000000000000000000e+00 +6.093500000000000103e-09 0.000000000000000000e+00 +6.093999999999999842e-09 0.000000000000000000e+00 +6.094499999999999582e-09 0.000000000000000000e+00 +6.095000000000000149e-09 0.000000000000000000e+00 +6.095499999999999889e-09 0.000000000000000000e+00 +6.095999999999999629e-09 0.000000000000000000e+00 +6.096500000000000196e-09 0.000000000000000000e+00 +6.096999999999999935e-09 0.000000000000000000e+00 +6.097499999999999675e-09 0.000000000000000000e+00 +6.098000000000000242e-09 0.000000000000000000e+00 +6.098499999999999982e-09 0.000000000000000000e+00 +6.098999999999999722e-09 0.000000000000000000e+00 +6.099500000000000289e-09 0.000000000000000000e+00 +6.100000000000000028e-09 0.000000000000000000e+00 +6.100499999999999768e-09 0.000000000000000000e+00 +6.100999999999999508e-09 0.000000000000000000e+00 +6.101500000000000075e-09 0.000000000000000000e+00 +6.101999999999999815e-09 0.000000000000000000e+00 +6.102499999999999554e-09 0.000000000000000000e+00 +6.103000000000000121e-09 0.000000000000000000e+00 +6.103499999999999861e-09 0.000000000000000000e+00 +6.103999999999999601e-09 0.000000000000000000e+00 +6.104500000000000168e-09 0.000000000000000000e+00 +6.104999999999999908e-09 0.000000000000000000e+00 +6.105499999999999647e-09 0.000000000000000000e+00 +6.106000000000000214e-09 0.000000000000000000e+00 +6.106499999999999954e-09 0.000000000000000000e+00 +6.106999999999999694e-09 0.000000000000000000e+00 +6.107500000000000261e-09 0.000000000000000000e+00 +6.108000000000000001e-09 0.000000000000000000e+00 +6.108499999999999741e-09 0.000000000000000000e+00 +6.108999999999999480e-09 0.000000000000000000e+00 +6.109500000000000047e-09 0.000000000000000000e+00 +6.109999999999999787e-09 0.000000000000000000e+00 +6.110499999999999527e-09 0.000000000000000000e+00 +6.111000000000000094e-09 0.000000000000000000e+00 +6.111499999999999834e-09 0.000000000000000000e+00 +6.111999999999999573e-09 0.000000000000000000e+00 +6.112500000000000140e-09 0.000000000000000000e+00 +6.112999999999999880e-09 0.000000000000000000e+00 +6.113499999999999620e-09 0.000000000000000000e+00 +6.114000000000000187e-09 0.000000000000000000e+00 +6.114499999999999927e-09 0.000000000000000000e+00 +6.114999999999999666e-09 0.000000000000000000e+00 +6.115500000000000233e-09 0.000000000000000000e+00 +6.115999999999999973e-09 0.000000000000000000e+00 +6.116499999999999713e-09 0.000000000000000000e+00 +6.117000000000000280e-09 0.000000000000000000e+00 +6.117500000000000020e-09 0.000000000000000000e+00 +6.117999999999999759e-09 0.000000000000000000e+00 +6.118499999999999499e-09 0.000000000000000000e+00 +6.119000000000000066e-09 0.000000000000000000e+00 +6.119499999999999806e-09 0.000000000000000000e+00 +6.119999999999999546e-09 0.000000000000000000e+00 +6.120500000000000113e-09 0.000000000000000000e+00 +6.120999999999999852e-09 0.000000000000000000e+00 +6.121499999999999592e-09 0.000000000000000000e+00 +6.122000000000000159e-09 0.000000000000000000e+00 +6.122499999999999899e-09 0.000000000000000000e+00 +6.122999999999999639e-09 0.000000000000000000e+00 +6.123500000000000206e-09 0.000000000000000000e+00 +6.123999999999999945e-09 0.000000000000000000e+00 +6.124499999999999685e-09 0.000000000000000000e+00 +6.125000000000000252e-09 0.000000000000000000e+00 +6.125499999999999992e-09 0.000000000000000000e+00 +6.125999999999999732e-09 0.000000000000000000e+00 +6.126499999999999472e-09 0.000000000000000000e+00 +6.127000000000000039e-09 0.000000000000000000e+00 +6.127499999999999778e-09 0.000000000000000000e+00 +6.127999999999999518e-09 0.000000000000000000e+00 +6.128500000000000085e-09 0.000000000000000000e+00 +6.128999999999999825e-09 0.000000000000000000e+00 +6.129499999999999565e-09 0.000000000000000000e+00 +6.130000000000000132e-09 0.000000000000000000e+00 +6.130499999999999871e-09 0.000000000000000000e+00 +6.130999999999999611e-09 0.000000000000000000e+00 +6.131500000000000178e-09 0.000000000000000000e+00 +6.131999999999999918e-09 0.000000000000000000e+00 +6.132499999999999658e-09 0.000000000000000000e+00 +6.133000000000000225e-09 0.000000000000000000e+00 +6.133499999999999964e-09 0.000000000000000000e+00 +6.133999999999999704e-09 0.000000000000000000e+00 +6.134500000000000271e-09 0.000000000000000000e+00 +6.135000000000000011e-09 0.000000000000000000e+00 +6.135499999999999751e-09 0.000000000000000000e+00 +6.135999999999999490e-09 0.000000000000000000e+00 +6.136500000000000057e-09 0.000000000000000000e+00 +6.136999999999999797e-09 0.000000000000000000e+00 +6.137499999999999537e-09 0.000000000000000000e+00 +6.138000000000000104e-09 0.000000000000000000e+00 +6.138499999999999844e-09 0.000000000000000000e+00 +6.138999999999999583e-09 0.000000000000000000e+00 +6.139500000000000150e-09 0.000000000000000000e+00 +6.139999999999999890e-09 0.000000000000000000e+00 +6.140499999999999630e-09 0.000000000000000000e+00 +6.141000000000000197e-09 0.000000000000000000e+00 +6.141499999999999937e-09 0.000000000000000000e+00 +6.141999999999999677e-09 0.000000000000000000e+00 +6.142500000000000243e-09 0.000000000000000000e+00 +6.142999999999999983e-09 0.000000000000000000e+00 +6.143499999999999723e-09 0.000000000000000000e+00 +6.144000000000000290e-09 0.000000000000000000e+00 +6.144500000000000030e-09 0.000000000000000000e+00 +6.144999999999999770e-09 0.000000000000000000e+00 +6.145499999999999509e-09 0.000000000000000000e+00 +6.146000000000000076e-09 0.000000000000000000e+00 +6.146499999999999816e-09 0.000000000000000000e+00 +6.146999999999999556e-09 0.000000000000000000e+00 +6.147500000000000123e-09 0.000000000000000000e+00 +6.147999999999999863e-09 0.000000000000000000e+00 +6.148499999999999602e-09 0.000000000000000000e+00 +6.149000000000000169e-09 0.000000000000000000e+00 +6.149499999999999909e-09 0.000000000000000000e+00 +6.149999999999999649e-09 0.000000000000000000e+00 +6.150500000000000216e-09 0.000000000000000000e+00 +6.150999999999999956e-09 0.000000000000000000e+00 +6.151499999999999695e-09 0.000000000000000000e+00 +6.152000000000000262e-09 0.000000000000000000e+00 +6.152500000000000002e-09 0.000000000000000000e+00 +6.152999999999999742e-09 0.000000000000000000e+00 +6.153499999999999482e-09 0.000000000000000000e+00 +6.154000000000000049e-09 0.000000000000000000e+00 +6.154499999999999788e-09 0.000000000000000000e+00 +6.154999999999999528e-09 0.000000000000000000e+00 +6.155500000000000095e-09 0.000000000000000000e+00 +6.155999999999999835e-09 0.000000000000000000e+00 +6.156499999999999575e-09 0.000000000000000000e+00 +6.157000000000000142e-09 0.000000000000000000e+00 +6.157499999999999882e-09 0.000000000000000000e+00 +6.157999999999999621e-09 0.000000000000000000e+00 +6.158500000000000188e-09 0.000000000000000000e+00 +6.158999999999999928e-09 0.000000000000000000e+00 +6.159499999999999668e-09 0.000000000000000000e+00 +6.160000000000000235e-09 0.000000000000000000e+00 +6.160499999999999975e-09 0.000000000000000000e+00 +6.160999999999999714e-09 0.000000000000000000e+00 +6.161500000000000281e-09 0.000000000000000000e+00 +6.162000000000000021e-09 0.000000000000000000e+00 +6.162499999999999761e-09 0.000000000000000000e+00 +6.162999999999999501e-09 0.000000000000000000e+00 +6.163500000000000068e-09 0.000000000000000000e+00 +6.163999999999999807e-09 0.000000000000000000e+00 +6.164499999999999547e-09 0.000000000000000000e+00 +6.165000000000000114e-09 0.000000000000000000e+00 +6.165499999999999854e-09 0.000000000000000000e+00 +6.165999999999999594e-09 0.000000000000000000e+00 +6.166500000000000161e-09 0.000000000000000000e+00 +6.166999999999999900e-09 0.000000000000000000e+00 +6.167499999999999640e-09 0.000000000000000000e+00 +6.168000000000000207e-09 0.000000000000000000e+00 +6.168499999999999947e-09 0.000000000000000000e+00 +6.168999999999999687e-09 0.000000000000000000e+00 +6.169500000000000254e-09 0.000000000000000000e+00 +6.169999999999999993e-09 0.000000000000000000e+00 +6.170499999999999733e-09 0.000000000000000000e+00 +6.170999999999999473e-09 0.000000000000000000e+00 +6.171500000000000040e-09 0.000000000000000000e+00 +6.171999999999999780e-09 0.000000000000000000e+00 +6.172499999999999520e-09 0.000000000000000000e+00 +6.173000000000000086e-09 0.000000000000000000e+00 +6.173499999999999826e-09 0.000000000000000000e+00 +6.173999999999999566e-09 0.000000000000000000e+00 +6.174500000000000133e-09 0.000000000000000000e+00 +6.174999999999999873e-09 0.000000000000000000e+00 +6.175499999999999613e-09 0.000000000000000000e+00 +6.176000000000000180e-09 0.000000000000000000e+00 +6.176499999999999919e-09 0.000000000000000000e+00 +6.176999999999999659e-09 0.000000000000000000e+00 +6.177500000000000226e-09 0.000000000000000000e+00 +6.177999999999999966e-09 0.000000000000000000e+00 +6.178499999999999706e-09 0.000000000000000000e+00 +6.179000000000000273e-09 0.000000000000000000e+00 +6.179500000000000012e-09 0.000000000000000000e+00 +6.179999999999999752e-09 0.000000000000000000e+00 +6.180499999999999492e-09 0.000000000000000000e+00 +6.181000000000000059e-09 0.000000000000000000e+00 +6.181499999999999799e-09 0.000000000000000000e+00 +6.181999999999999538e-09 0.000000000000000000e+00 +6.182500000000000105e-09 0.000000000000000000e+00 +6.182999999999999845e-09 0.000000000000000000e+00 +6.183499999999999585e-09 0.000000000000000000e+00 +6.184000000000000152e-09 0.000000000000000000e+00 +6.184499999999999892e-09 0.000000000000000000e+00 +6.184999999999999631e-09 0.000000000000000000e+00 +6.185500000000000198e-09 0.000000000000000000e+00 +6.185999999999999938e-09 0.000000000000000000e+00 +6.186499999999999678e-09 0.000000000000000000e+00 +6.187000000000000245e-09 0.000000000000000000e+00 +6.187499999999999985e-09 0.000000000000000000e+00 +6.187999999999999724e-09 0.000000000000000000e+00 +6.188499999999999464e-09 0.000000000000000000e+00 +6.189000000000000031e-09 0.000000000000000000e+00 +6.189499999999999771e-09 0.000000000000000000e+00 +6.189999999999999511e-09 0.000000000000000000e+00 +6.190500000000000078e-09 0.000000000000000000e+00 +6.190999999999999818e-09 0.000000000000000000e+00 +6.191499999999999557e-09 0.000000000000000000e+00 +6.192000000000000124e-09 0.000000000000000000e+00 +6.192499999999999864e-09 0.000000000000000000e+00 +6.192999999999999604e-09 0.000000000000000000e+00 +6.193500000000000171e-09 0.000000000000000000e+00 +6.193999999999999911e-09 0.000000000000000000e+00 +6.194499999999999650e-09 0.000000000000000000e+00 +6.195000000000000217e-09 0.000000000000000000e+00 +6.195499999999999957e-09 0.000000000000000000e+00 +6.195999999999999697e-09 0.000000000000000000e+00 +6.196500000000000264e-09 0.000000000000000000e+00 +6.197000000000000004e-09 0.000000000000000000e+00 +6.197499999999999743e-09 0.000000000000000000e+00 +6.197999999999999483e-09 0.000000000000000000e+00 +6.198500000000000050e-09 0.000000000000000000e+00 +6.198999999999999790e-09 0.000000000000000000e+00 +6.199499999999999530e-09 0.000000000000000000e+00 +6.200000000000000097e-09 0.000000000000000000e+00 +6.200499999999999836e-09 0.000000000000000000e+00 +6.200999999999999576e-09 0.000000000000000000e+00 +6.201500000000000143e-09 0.000000000000000000e+00 +6.201999999999999883e-09 0.000000000000000000e+00 +6.202499999999999623e-09 0.000000000000000000e+00 +6.203000000000000190e-09 0.000000000000000000e+00 +6.203499999999999929e-09 0.000000000000000000e+00 +6.203999999999999669e-09 0.000000000000000000e+00 +6.204500000000000236e-09 0.000000000000000000e+00 +6.204999999999999976e-09 0.000000000000000000e+00 +6.205499999999999716e-09 0.000000000000000000e+00 +6.206000000000000283e-09 0.000000000000000000e+00 +6.206500000000000022e-09 0.000000000000000000e+00 +6.206999999999999762e-09 0.000000000000000000e+00 +6.207499999999999502e-09 0.000000000000000000e+00 +6.208000000000000069e-09 0.000000000000000000e+00 +6.208499999999999809e-09 0.000000000000000000e+00 +6.208999999999999549e-09 0.000000000000000000e+00 +6.209500000000000116e-09 0.000000000000000000e+00 +6.209999999999999855e-09 0.000000000000000000e+00 +6.210499999999999595e-09 0.000000000000000000e+00 +6.211000000000000162e-09 0.000000000000000000e+00 +6.211499999999999902e-09 0.000000000000000000e+00 +6.211999999999999642e-09 0.000000000000000000e+00 +6.212500000000000209e-09 0.000000000000000000e+00 +6.212999999999999948e-09 0.000000000000000000e+00 +6.213499999999999688e-09 0.000000000000000000e+00 +6.214000000000000255e-09 0.000000000000000000e+00 +6.214499999999999995e-09 0.000000000000000000e+00 +6.214999999999999735e-09 0.000000000000000000e+00 +6.215499999999999474e-09 0.000000000000000000e+00 +6.216000000000000041e-09 0.000000000000000000e+00 +6.216499999999999781e-09 0.000000000000000000e+00 +6.216999999999999521e-09 0.000000000000000000e+00 +6.217500000000000088e-09 0.000000000000000000e+00 +6.217999999999999828e-09 0.000000000000000000e+00 +6.218499999999999567e-09 0.000000000000000000e+00 +6.219000000000000134e-09 0.000000000000000000e+00 +6.219499999999999874e-09 0.000000000000000000e+00 +6.219999999999999614e-09 0.000000000000000000e+00 +6.220500000000000181e-09 0.000000000000000000e+00 +6.220999999999999921e-09 0.000000000000000000e+00 +6.221499999999999660e-09 0.000000000000000000e+00 +6.222000000000000227e-09 0.000000000000000000e+00 +6.222499999999999967e-09 0.000000000000000000e+00 +6.222999999999999707e-09 0.000000000000000000e+00 +6.223500000000000274e-09 0.000000000000000000e+00 +6.224000000000000014e-09 0.000000000000000000e+00 +6.224499999999999754e-09 0.000000000000000000e+00 +6.224999999999999493e-09 0.000000000000000000e+00 +6.225500000000000060e-09 0.000000000000000000e+00 +6.225999999999999800e-09 0.000000000000000000e+00 +6.226499999999999540e-09 0.000000000000000000e+00 +6.227000000000000107e-09 0.000000000000000000e+00 +6.227499999999999847e-09 0.000000000000000000e+00 +6.227999999999999586e-09 0.000000000000000000e+00 +6.228500000000000153e-09 0.000000000000000000e+00 +6.228999999999999893e-09 0.000000000000000000e+00 +6.229499999999999633e-09 0.000000000000000000e+00 +6.230000000000000200e-09 0.000000000000000000e+00 +6.230499999999999940e-09 0.000000000000000000e+00 +6.230999999999999679e-09 0.000000000000000000e+00 +6.231500000000000246e-09 0.000000000000000000e+00 +6.231999999999999986e-09 0.000000000000000000e+00 +6.232499999999999726e-09 0.000000000000000000e+00 +6.232999999999999466e-09 0.000000000000000000e+00 +6.233500000000000033e-09 0.000000000000000000e+00 +6.233999999999999772e-09 0.000000000000000000e+00 +6.234499999999999512e-09 0.000000000000000000e+00 +6.235000000000000079e-09 0.000000000000000000e+00 +6.235499999999999819e-09 0.000000000000000000e+00 +6.235999999999999559e-09 0.000000000000000000e+00 +6.236500000000000126e-09 0.000000000000000000e+00 +6.236999999999999865e-09 0.000000000000000000e+00 +6.237499999999999605e-09 0.000000000000000000e+00 +6.238000000000000172e-09 0.000000000000000000e+00 +6.238499999999999912e-09 0.000000000000000000e+00 +6.238999999999999652e-09 0.000000000000000000e+00 +6.239500000000000219e-09 0.000000000000000000e+00 +6.239999999999999959e-09 0.000000000000000000e+00 +6.240499999999999698e-09 0.000000000000000000e+00 +6.241000000000000265e-09 0.000000000000000000e+00 +6.241500000000000005e-09 0.000000000000000000e+00 +6.241999999999999745e-09 0.000000000000000000e+00 +6.242499999999999485e-09 0.000000000000000000e+00 +6.243000000000000052e-09 0.000000000000000000e+00 +6.243499999999999791e-09 0.000000000000000000e+00 +6.243999999999999531e-09 0.000000000000000000e+00 +6.244500000000000098e-09 0.000000000000000000e+00 +6.244999999999999838e-09 0.000000000000000000e+00 +6.245499999999999578e-09 0.000000000000000000e+00 +6.246000000000000145e-09 0.000000000000000000e+00 +6.246499999999999884e-09 0.000000000000000000e+00 +6.246999999999999624e-09 0.000000000000000000e+00 +6.247500000000000191e-09 0.000000000000000000e+00 +6.247999999999999931e-09 0.000000000000000000e+00 +6.248499999999999671e-09 0.000000000000000000e+00 +6.249000000000000238e-09 0.000000000000000000e+00 +6.249499999999999977e-09 0.000000000000000000e+00 +6.249999999999999717e-09 0.000000000000000000e+00 +6.250500000000000284e-09 0.000000000000000000e+00 +6.251000000000000024e-09 0.000000000000000000e+00 +6.251499999999999764e-09 0.000000000000000000e+00 +6.251999999999999503e-09 0.000000000000000000e+00 +6.252500000000000070e-09 0.000000000000000000e+00 +6.252999999999999810e-09 0.000000000000000000e+00 +6.253499999999999550e-09 0.000000000000000000e+00 +6.254000000000000117e-09 0.000000000000000000e+00 +6.254499999999999857e-09 0.000000000000000000e+00 +6.254999999999999597e-09 0.000000000000000000e+00 +6.255500000000000163e-09 0.000000000000000000e+00 +6.255999999999999903e-09 0.000000000000000000e+00 +6.256499999999999643e-09 0.000000000000000000e+00 +6.257000000000000210e-09 0.000000000000000000e+00 +6.257499999999999950e-09 0.000000000000000000e+00 +6.257999999999999690e-09 0.000000000000000000e+00 +6.258500000000000257e-09 0.000000000000000000e+00 +6.258999999999999996e-09 0.000000000000000000e+00 +6.259499999999999736e-09 0.000000000000000000e+00 +6.259999999999999476e-09 0.000000000000000000e+00 +6.260500000000000043e-09 0.000000000000000000e+00 +6.260999999999999783e-09 0.000000000000000000e+00 +6.261499999999999522e-09 0.000000000000000000e+00 +6.262000000000000089e-09 0.000000000000000000e+00 +6.262499999999999829e-09 0.000000000000000000e+00 +6.262999999999999569e-09 0.000000000000000000e+00 +6.263500000000000136e-09 0.000000000000000000e+00 +6.263999999999999876e-09 0.000000000000000000e+00 +6.264499999999999615e-09 0.000000000000000000e+00 +6.265000000000000182e-09 0.000000000000000000e+00 +6.265499999999999922e-09 0.000000000000000000e+00 +6.265999999999999662e-09 0.000000000000000000e+00 +6.266500000000000229e-09 0.000000000000000000e+00 +6.266999999999999969e-09 0.000000000000000000e+00 +6.267499999999999708e-09 0.000000000000000000e+00 +6.268000000000000275e-09 0.000000000000000000e+00 +6.268500000000000015e-09 0.000000000000000000e+00 +6.268999999999999755e-09 0.000000000000000000e+00 +6.269499999999999495e-09 0.000000000000000000e+00 +6.270000000000000062e-09 0.000000000000000000e+00 +6.270499999999999801e-09 0.000000000000000000e+00 +6.270999999999999541e-09 0.000000000000000000e+00 +6.271500000000000108e-09 0.000000000000000000e+00 +6.271999999999999848e-09 0.000000000000000000e+00 +6.272499999999999588e-09 0.000000000000000000e+00 +6.273000000000000155e-09 0.000000000000000000e+00 +6.273499999999999895e-09 0.000000000000000000e+00 +6.273999999999999634e-09 0.000000000000000000e+00 +6.274500000000000201e-09 0.000000000000000000e+00 +6.274999999999999941e-09 0.000000000000000000e+00 +6.275499999999999681e-09 0.000000000000000000e+00 +6.276000000000000248e-09 0.000000000000000000e+00 +6.276499999999999988e-09 0.000000000000000000e+00 +6.276999999999999727e-09 0.000000000000000000e+00 +6.277499999999999467e-09 0.000000000000000000e+00 +6.278000000000000034e-09 0.000000000000000000e+00 +6.278499999999999774e-09 0.000000000000000000e+00 +6.278999999999999514e-09 0.000000000000000000e+00 +6.279500000000000081e-09 0.000000000000000000e+00 +6.279999999999999820e-09 0.000000000000000000e+00 +6.280499999999999560e-09 0.000000000000000000e+00 +6.281000000000000127e-09 0.000000000000000000e+00 +6.281499999999999867e-09 0.000000000000000000e+00 +6.281999999999999607e-09 0.000000000000000000e+00 +6.282500000000000174e-09 0.000000000000000000e+00 +6.282999999999999913e-09 0.000000000000000000e+00 +6.283499999999999653e-09 0.000000000000000000e+00 +6.284000000000000220e-09 0.000000000000000000e+00 +6.284499999999999960e-09 0.000000000000000000e+00 +6.284999999999999700e-09 0.000000000000000000e+00 +6.285500000000000267e-09 0.000000000000000000e+00 +6.286000000000000006e-09 0.000000000000000000e+00 +6.286499999999999746e-09 0.000000000000000000e+00 +6.286999999999999486e-09 0.000000000000000000e+00 +6.287500000000000053e-09 0.000000000000000000e+00 +6.287999999999999793e-09 0.000000000000000000e+00 +6.288499999999999533e-09 0.000000000000000000e+00 +6.289000000000000099e-09 0.000000000000000000e+00 +6.289499999999999839e-09 0.000000000000000000e+00 +6.289999999999999579e-09 0.000000000000000000e+00 +6.290500000000000146e-09 0.000000000000000000e+00 +6.290999999999999886e-09 0.000000000000000000e+00 +6.291499999999999626e-09 0.000000000000000000e+00 +6.292000000000000193e-09 0.000000000000000000e+00 +6.292499999999999932e-09 0.000000000000000000e+00 +6.292999999999999672e-09 0.000000000000000000e+00 +6.293500000000000239e-09 0.000000000000000000e+00 +6.293999999999999979e-09 0.000000000000000000e+00 +6.294499999999999719e-09 0.000000000000000000e+00 +6.295000000000000286e-09 0.000000000000000000e+00 +6.295500000000000025e-09 0.000000000000000000e+00 +6.295999999999999765e-09 0.000000000000000000e+00 +6.296499999999999505e-09 0.000000000000000000e+00 +6.297000000000000072e-09 0.000000000000000000e+00 +6.297499999999999812e-09 0.000000000000000000e+00 +6.297999999999999551e-09 0.000000000000000000e+00 +6.298500000000000118e-09 0.000000000000000000e+00 +6.298999999999999858e-09 0.000000000000000000e+00 +6.299499999999999598e-09 0.000000000000000000e+00 +6.300000000000000165e-09 0.000000000000000000e+00 +6.300499999999999905e-09 0.000000000000000000e+00 +6.300999999999999644e-09 0.000000000000000000e+00 +6.301500000000000211e-09 0.000000000000000000e+00 +6.301999999999999951e-09 0.000000000000000000e+00 +6.302499999999999691e-09 0.000000000000000000e+00 +6.303000000000000258e-09 0.000000000000000000e+00 +6.303499999999999998e-09 0.000000000000000000e+00 +6.303999999999999737e-09 0.000000000000000000e+00 +6.304499999999999477e-09 0.000000000000000000e+00 +6.305000000000000044e-09 0.000000000000000000e+00 +6.305499999999999784e-09 0.000000000000000000e+00 +6.305999999999999524e-09 0.000000000000000000e+00 +6.306500000000000091e-09 0.000000000000000000e+00 +6.306999999999999831e-09 0.000000000000000000e+00 +6.307499999999999570e-09 0.000000000000000000e+00 +6.308000000000000137e-09 0.000000000000000000e+00 +6.308499999999999877e-09 0.000000000000000000e+00 +6.308999999999999617e-09 0.000000000000000000e+00 +6.309500000000000184e-09 0.000000000000000000e+00 +6.309999999999999924e-09 0.000000000000000000e+00 +6.310499999999999663e-09 0.000000000000000000e+00 +6.311000000000000230e-09 0.000000000000000000e+00 +6.311499999999999970e-09 0.000000000000000000e+00 +6.311999999999999710e-09 0.000000000000000000e+00 +6.312500000000000277e-09 0.000000000000000000e+00 +6.313000000000000017e-09 0.000000000000000000e+00 +6.313499999999999756e-09 0.000000000000000000e+00 +6.313999999999999496e-09 0.000000000000000000e+00 +6.314500000000000063e-09 0.000000000000000000e+00 +6.314999999999999803e-09 0.000000000000000000e+00 +6.315499999999999543e-09 0.000000000000000000e+00 +6.316000000000000110e-09 0.000000000000000000e+00 +6.316499999999999849e-09 0.000000000000000000e+00 +6.316999999999999589e-09 0.000000000000000000e+00 +6.317500000000000156e-09 0.000000000000000000e+00 +6.317999999999999896e-09 0.000000000000000000e+00 +6.318499999999999636e-09 0.000000000000000000e+00 +6.319000000000000203e-09 0.000000000000000000e+00 +6.319499999999999942e-09 0.000000000000000000e+00 +6.319999999999999682e-09 0.000000000000000000e+00 +6.320500000000000249e-09 0.000000000000000000e+00 +6.320999999999999989e-09 0.000000000000000000e+00 +6.321499999999999729e-09 0.000000000000000000e+00 +6.321999999999999469e-09 0.000000000000000000e+00 +6.322500000000000036e-09 0.000000000000000000e+00 +6.322999999999999775e-09 0.000000000000000000e+00 +6.323499999999999515e-09 0.000000000000000000e+00 +6.324000000000000082e-09 0.000000000000000000e+00 +6.324499999999999822e-09 0.000000000000000000e+00 +6.324999999999999562e-09 0.000000000000000000e+00 +6.325500000000000129e-09 0.000000000000000000e+00 +6.325999999999999868e-09 0.000000000000000000e+00 +6.326499999999999608e-09 0.000000000000000000e+00 +6.327000000000000175e-09 0.000000000000000000e+00 +6.327499999999999915e-09 0.000000000000000000e+00 +6.327999999999999655e-09 0.000000000000000000e+00 +6.328500000000000222e-09 0.000000000000000000e+00 +6.328999999999999961e-09 0.000000000000000000e+00 +6.329499999999999701e-09 0.000000000000000000e+00 +6.330000000000000268e-09 0.000000000000000000e+00 +6.330500000000000008e-09 0.000000000000000000e+00 +6.330999999999999748e-09 0.000000000000000000e+00 +6.331499999999999487e-09 0.000000000000000000e+00 +6.332000000000000054e-09 0.000000000000000000e+00 +6.332499999999999794e-09 0.000000000000000000e+00 +6.332999999999999534e-09 0.000000000000000000e+00 +6.333500000000000101e-09 0.000000000000000000e+00 +6.333999999999999841e-09 0.000000000000000000e+00 +6.334499999999999580e-09 0.000000000000000000e+00 +6.335000000000000147e-09 0.000000000000000000e+00 +6.335499999999999887e-09 0.000000000000000000e+00 +6.335999999999999627e-09 0.000000000000000000e+00 +6.336500000000000194e-09 0.000000000000000000e+00 +6.336999999999999934e-09 0.000000000000000000e+00 +6.337499999999999674e-09 0.000000000000000000e+00 +6.338000000000000240e-09 0.000000000000000000e+00 +6.338499999999999980e-09 0.000000000000000000e+00 +6.338999999999999720e-09 0.000000000000000000e+00 +6.339499999999999460e-09 0.000000000000000000e+00 +6.340000000000000027e-09 0.000000000000000000e+00 +6.340499999999999767e-09 0.000000000000000000e+00 +6.340999999999999506e-09 0.000000000000000000e+00 +6.341500000000000073e-09 0.000000000000000000e+00 +6.341999999999999813e-09 0.000000000000000000e+00 +6.342499999999999553e-09 0.000000000000000000e+00 +6.343000000000000120e-09 0.000000000000000000e+00 +6.343499999999999860e-09 0.000000000000000000e+00 +6.343999999999999599e-09 0.000000000000000000e+00 +6.344500000000000166e-09 0.000000000000000000e+00 +6.344999999999999906e-09 0.000000000000000000e+00 +6.345499999999999646e-09 0.000000000000000000e+00 +6.346000000000000213e-09 0.000000000000000000e+00 +6.346499999999999953e-09 0.000000000000000000e+00 +6.346999999999999692e-09 0.000000000000000000e+00 +6.347500000000000259e-09 0.000000000000000000e+00 +6.347999999999999999e-09 0.000000000000000000e+00 +6.348499999999999739e-09 0.000000000000000000e+00 +6.348999999999999479e-09 0.000000000000000000e+00 +6.349500000000000046e-09 0.000000000000000000e+00 +6.349999999999999785e-09 0.000000000000000000e+00 +6.350499999999999525e-09 0.000000000000000000e+00 +6.351000000000000092e-09 0.000000000000000000e+00 +6.351499999999999832e-09 0.000000000000000000e+00 +6.351999999999999572e-09 0.000000000000000000e+00 +6.352500000000000139e-09 0.000000000000000000e+00 +6.352999999999999878e-09 0.000000000000000000e+00 +6.353499999999999618e-09 0.000000000000000000e+00 +6.354000000000000185e-09 0.000000000000000000e+00 +6.354499999999999925e-09 0.000000000000000000e+00 +6.354999999999999665e-09 0.000000000000000000e+00 +6.355500000000000232e-09 0.000000000000000000e+00 +6.355999999999999972e-09 0.000000000000000000e+00 +6.356499999999999711e-09 0.000000000000000000e+00 +6.357000000000000278e-09 0.000000000000000000e+00 +6.357500000000000018e-09 0.000000000000000000e+00 +6.357999999999999758e-09 0.000000000000000000e+00 +6.358499999999999498e-09 0.000000000000000000e+00 +6.359000000000000065e-09 0.000000000000000000e+00 +6.359499999999999804e-09 0.000000000000000000e+00 +6.359999999999999544e-09 0.000000000000000000e+00 +6.360500000000000111e-09 0.000000000000000000e+00 +6.360999999999999851e-09 0.000000000000000000e+00 +6.361499999999999591e-09 0.000000000000000000e+00 +6.362000000000000158e-09 0.000000000000000000e+00 +6.362499999999999897e-09 0.000000000000000000e+00 +6.362999999999999637e-09 0.000000000000000000e+00 +6.363500000000000204e-09 0.000000000000000000e+00 +6.363999999999999944e-09 0.000000000000000000e+00 +6.364499999999999684e-09 0.000000000000000000e+00 +6.365000000000000251e-09 0.000000000000000000e+00 +6.365499999999999990e-09 0.000000000000000000e+00 +6.365999999999999730e-09 0.000000000000000000e+00 +6.366499999999999470e-09 0.000000000000000000e+00 +6.367000000000000037e-09 0.000000000000000000e+00 +6.367499999999999777e-09 0.000000000000000000e+00 +6.367999999999999516e-09 0.000000000000000000e+00 +6.368500000000000083e-09 0.000000000000000000e+00 +6.368999999999999823e-09 0.000000000000000000e+00 +6.369499999999999563e-09 0.000000000000000000e+00 +6.370000000000000130e-09 0.000000000000000000e+00 +6.370499999999999870e-09 0.000000000000000000e+00 +6.370999999999999610e-09 0.000000000000000000e+00 +6.371500000000000176e-09 0.000000000000000000e+00 +6.371999999999999916e-09 0.000000000000000000e+00 +6.372499999999999656e-09 0.000000000000000000e+00 +6.373000000000000223e-09 0.000000000000000000e+00 +6.373499999999999963e-09 0.000000000000000000e+00 +6.373999999999999703e-09 0.000000000000000000e+00 +6.374500000000000270e-09 0.000000000000000000e+00 +6.375000000000000009e-09 0.000000000000000000e+00 +6.375499999999999749e-09 0.000000000000000000e+00 +6.375999999999999489e-09 0.000000000000000000e+00 +6.376500000000000056e-09 0.000000000000000000e+00 +6.376999999999999796e-09 0.000000000000000000e+00 +6.377499999999999535e-09 0.000000000000000000e+00 +6.378000000000000102e-09 0.000000000000000000e+00 +6.378499999999999842e-09 0.000000000000000000e+00 +6.378999999999999582e-09 0.000000000000000000e+00 +6.379500000000000149e-09 0.000000000000000000e+00 +6.379999999999999889e-09 0.000000000000000000e+00 +6.380499999999999628e-09 0.000000000000000000e+00 +6.381000000000000195e-09 0.000000000000000000e+00 +6.381499999999999935e-09 0.000000000000000000e+00 +6.381999999999999675e-09 0.000000000000000000e+00 +6.382500000000000242e-09 0.000000000000000000e+00 +6.382999999999999982e-09 0.000000000000000000e+00 +6.383499999999999721e-09 0.000000000000000000e+00 +6.383999999999999461e-09 0.000000000000000000e+00 +6.384500000000000028e-09 0.000000000000000000e+00 +6.384999999999999768e-09 0.000000000000000000e+00 +6.385499999999999508e-09 0.000000000000000000e+00 +6.386000000000000075e-09 0.000000000000000000e+00 +6.386499999999999814e-09 0.000000000000000000e+00 +6.386999999999999554e-09 0.000000000000000000e+00 +6.387500000000000121e-09 0.000000000000000000e+00 +6.387999999999999861e-09 0.000000000000000000e+00 +6.388499999999999601e-09 0.000000000000000000e+00 +6.389000000000000168e-09 0.000000000000000000e+00 +6.389499999999999908e-09 0.000000000000000000e+00 +6.389999999999999647e-09 0.000000000000000000e+00 +6.390500000000000214e-09 0.000000000000000000e+00 +6.390999999999999954e-09 0.000000000000000000e+00 +6.391499999999999694e-09 0.000000000000000000e+00 +6.392000000000000261e-09 0.000000000000000000e+00 +6.392500000000000001e-09 0.000000000000000000e+00 +6.392999999999999740e-09 0.000000000000000000e+00 +6.393499999999999480e-09 0.000000000000000000e+00 +6.394000000000000047e-09 0.000000000000000000e+00 +6.394499999999999787e-09 0.000000000000000000e+00 +6.394999999999999527e-09 0.000000000000000000e+00 +6.395500000000000094e-09 0.000000000000000000e+00 +6.395999999999999833e-09 0.000000000000000000e+00 +6.396499999999999573e-09 0.000000000000000000e+00 +6.397000000000000140e-09 0.000000000000000000e+00 +6.397499999999999880e-09 0.000000000000000000e+00 +6.397999999999999620e-09 0.000000000000000000e+00 +6.398500000000000187e-09 0.000000000000000000e+00 +6.398999999999999926e-09 0.000000000000000000e+00 +6.399499999999999666e-09 0.000000000000000000e+00 +6.400000000000000233e-09 0.000000000000000000e+00 +6.400499999999999973e-09 0.000000000000000000e+00 +6.400999999999999713e-09 0.000000000000000000e+00 +6.401500000000000280e-09 0.000000000000000000e+00 +6.402000000000000019e-09 0.000000000000000000e+00 +6.402499999999999759e-09 0.000000000000000000e+00 +6.402999999999999499e-09 0.000000000000000000e+00 +6.403500000000000066e-09 0.000000000000000000e+00 +6.403999999999999806e-09 0.000000000000000000e+00 +6.404499999999999546e-09 0.000000000000000000e+00 +6.405000000000000113e-09 0.000000000000000000e+00 +6.405499999999999852e-09 0.000000000000000000e+00 +6.405999999999999592e-09 0.000000000000000000e+00 +6.406500000000000159e-09 0.000000000000000000e+00 +6.406999999999999899e-09 0.000000000000000000e+00 +6.407499999999999639e-09 0.000000000000000000e+00 +6.408000000000000206e-09 0.000000000000000000e+00 +6.408499999999999945e-09 0.000000000000000000e+00 +6.408999999999999685e-09 0.000000000000000000e+00 +6.409500000000000252e-09 0.000000000000000000e+00 +6.409999999999999992e-09 0.000000000000000000e+00 +6.410499999999999732e-09 0.000000000000000000e+00 +6.410999999999999471e-09 0.000000000000000000e+00 +6.411500000000000038e-09 0.000000000000000000e+00 +6.411999999999999778e-09 0.000000000000000000e+00 +6.412499999999999518e-09 0.000000000000000000e+00 +6.413000000000000085e-09 0.000000000000000000e+00 +6.413499999999999825e-09 0.000000000000000000e+00 +6.413999999999999564e-09 0.000000000000000000e+00 +6.414500000000000131e-09 0.000000000000000000e+00 +6.414999999999999871e-09 0.000000000000000000e+00 +6.415499999999999611e-09 0.000000000000000000e+00 +6.416000000000000178e-09 0.000000000000000000e+00 +6.416499999999999918e-09 0.000000000000000000e+00 +6.416999999999999657e-09 0.000000000000000000e+00 +6.417500000000000224e-09 0.000000000000000000e+00 +6.417999999999999964e-09 0.000000000000000000e+00 +6.418499999999999704e-09 0.000000000000000000e+00 +6.419000000000000271e-09 0.000000000000000000e+00 +6.419500000000000011e-09 0.000000000000000000e+00 +6.419999999999999751e-09 0.000000000000000000e+00 +6.420499999999999490e-09 0.000000000000000000e+00 +6.421000000000000057e-09 0.000000000000000000e+00 +6.421499999999999797e-09 0.000000000000000000e+00 +6.421999999999999537e-09 0.000000000000000000e+00 +6.422500000000000104e-09 0.000000000000000000e+00 +6.422999999999999844e-09 0.000000000000000000e+00 +6.423499999999999583e-09 0.000000000000000000e+00 +6.424000000000000150e-09 0.000000000000000000e+00 +6.424499999999999890e-09 0.000000000000000000e+00 +6.424999999999999630e-09 0.000000000000000000e+00 +6.425500000000000197e-09 0.000000000000000000e+00 +6.425999999999999937e-09 0.000000000000000000e+00 +6.426499999999999676e-09 0.000000000000000000e+00 +6.427000000000000243e-09 0.000000000000000000e+00 +6.427499999999999983e-09 0.000000000000000000e+00 +6.427999999999999723e-09 0.000000000000000000e+00 +6.428499999999999463e-09 0.000000000000000000e+00 +6.429000000000000030e-09 0.000000000000000000e+00 +6.429499999999999769e-09 0.000000000000000000e+00 +6.429999999999999509e-09 0.000000000000000000e+00 +6.430500000000000076e-09 0.000000000000000000e+00 +6.430999999999999816e-09 0.000000000000000000e+00 +6.431499999999999556e-09 0.000000000000000000e+00 +6.432000000000000123e-09 0.000000000000000000e+00 +6.432499999999999862e-09 0.000000000000000000e+00 +6.432999999999999602e-09 0.000000000000000000e+00 +6.433500000000000169e-09 0.000000000000000000e+00 +6.433999999999999909e-09 0.000000000000000000e+00 +6.434499999999999649e-09 0.000000000000000000e+00 +6.435000000000000216e-09 0.000000000000000000e+00 +6.435499999999999955e-09 0.000000000000000000e+00 +6.435999999999999695e-09 0.000000000000000000e+00 +6.436500000000000262e-09 0.000000000000000000e+00 +6.437000000000000002e-09 0.000000000000000000e+00 +6.437499999999999742e-09 0.000000000000000000e+00 +6.437999999999999482e-09 0.000000000000000000e+00 +6.438500000000000049e-09 0.000000000000000000e+00 +6.438999999999999788e-09 0.000000000000000000e+00 +6.439499999999999528e-09 0.000000000000000000e+00 +6.440000000000000095e-09 0.000000000000000000e+00 +6.440499999999999835e-09 0.000000000000000000e+00 +6.440999999999999575e-09 0.000000000000000000e+00 +6.441500000000000142e-09 0.000000000000000000e+00 +6.441999999999999881e-09 0.000000000000000000e+00 +6.442499999999999621e-09 0.000000000000000000e+00 +6.443000000000000188e-09 0.000000000000000000e+00 +6.443499999999999928e-09 0.000000000000000000e+00 +6.443999999999999668e-09 0.000000000000000000e+00 +6.444500000000000235e-09 0.000000000000000000e+00 +6.444999999999999974e-09 0.000000000000000000e+00 +6.445499999999999714e-09 0.000000000000000000e+00 +6.446000000000000281e-09 0.000000000000000000e+00 +6.446500000000000021e-09 0.000000000000000000e+00 +6.446999999999999761e-09 0.000000000000000000e+00 +6.447499999999999500e-09 0.000000000000000000e+00 +6.448000000000000067e-09 0.000000000000000000e+00 +6.448499999999999807e-09 0.000000000000000000e+00 +6.448999999999999547e-09 0.000000000000000000e+00 +6.449500000000000114e-09 0.000000000000000000e+00 +6.449999999999999854e-09 0.000000000000000000e+00 +6.450499999999999593e-09 0.000000000000000000e+00 +6.451000000000000160e-09 0.000000000000000000e+00 +6.451499999999999900e-09 0.000000000000000000e+00 +6.451999999999999640e-09 0.000000000000000000e+00 +6.452500000000000207e-09 0.000000000000000000e+00 +6.452999999999999947e-09 0.000000000000000000e+00 +6.453499999999999687e-09 0.000000000000000000e+00 +6.454000000000000253e-09 0.000000000000000000e+00 +6.454499999999999993e-09 0.000000000000000000e+00 +6.454999999999999733e-09 0.000000000000000000e+00 +6.455499999999999473e-09 0.000000000000000000e+00 +6.456000000000000040e-09 0.000000000000000000e+00 +6.456499999999999780e-09 0.000000000000000000e+00 +6.456999999999999519e-09 0.000000000000000000e+00 +6.457500000000000086e-09 0.000000000000000000e+00 +6.457999999999999826e-09 0.000000000000000000e+00 +6.458499999999999566e-09 0.000000000000000000e+00 +6.459000000000000133e-09 0.000000000000000000e+00 +6.459499999999999873e-09 0.000000000000000000e+00 +6.459999999999999612e-09 0.000000000000000000e+00 +6.460500000000000179e-09 0.000000000000000000e+00 +6.460999999999999919e-09 0.000000000000000000e+00 +6.461499999999999659e-09 0.000000000000000000e+00 +6.462000000000000226e-09 0.000000000000000000e+00 +6.462499999999999966e-09 0.000000000000000000e+00 +6.462999999999999705e-09 0.000000000000000000e+00 +6.463500000000000272e-09 0.000000000000000000e+00 +6.464000000000000012e-09 0.000000000000000000e+00 +6.464499999999999752e-09 0.000000000000000000e+00 +6.464999999999999492e-09 0.000000000000000000e+00 +6.465500000000000059e-09 0.000000000000000000e+00 +6.465999999999999798e-09 0.000000000000000000e+00 +6.466499999999999538e-09 0.000000000000000000e+00 +6.467000000000000105e-09 0.000000000000000000e+00 +6.467499999999999845e-09 0.000000000000000000e+00 +6.467999999999999585e-09 0.000000000000000000e+00 +6.468500000000000152e-09 0.000000000000000000e+00 +6.468999999999999891e-09 0.000000000000000000e+00 +6.469499999999999631e-09 0.000000000000000000e+00 +6.470000000000000198e-09 0.000000000000000000e+00 +6.470499999999999938e-09 0.000000000000000000e+00 +6.470999999999999678e-09 0.000000000000000000e+00 +6.471500000000000245e-09 0.000000000000000000e+00 +6.471999999999999985e-09 0.000000000000000000e+00 +6.472499999999999724e-09 0.000000000000000000e+00 +6.472999999999999464e-09 0.000000000000000000e+00 +6.473500000000000031e-09 0.000000000000000000e+00 +6.473999999999999771e-09 0.000000000000000000e+00 +6.474499999999999511e-09 0.000000000000000000e+00 +6.475000000000000078e-09 0.000000000000000000e+00 +6.475499999999999817e-09 0.000000000000000000e+00 +6.475999999999999557e-09 0.000000000000000000e+00 +6.476500000000000124e-09 0.000000000000000000e+00 +6.476999999999999864e-09 0.000000000000000000e+00 +6.477499999999999604e-09 0.000000000000000000e+00 +6.478000000000000171e-09 0.000000000000000000e+00 +6.478499999999999910e-09 0.000000000000000000e+00 +6.478999999999999650e-09 0.000000000000000000e+00 +6.479500000000000217e-09 0.000000000000000000e+00 +6.479999999999999957e-09 0.000000000000000000e+00 +6.480499999999999697e-09 0.000000000000000000e+00 +6.481000000000000264e-09 0.000000000000000000e+00 +6.481500000000000003e-09 0.000000000000000000e+00 +6.481999999999999743e-09 0.000000000000000000e+00 +6.482499999999999483e-09 0.000000000000000000e+00 +6.483000000000000050e-09 0.000000000000000000e+00 +6.483499999999999790e-09 0.000000000000000000e+00 +6.483999999999999530e-09 0.000000000000000000e+00 +6.484500000000000096e-09 0.000000000000000000e+00 +6.484999999999999836e-09 0.000000000000000000e+00 +6.485499999999999576e-09 0.000000000000000000e+00 +6.486000000000000143e-09 0.000000000000000000e+00 +6.486499999999999883e-09 0.000000000000000000e+00 +6.486999999999999623e-09 0.000000000000000000e+00 +6.487500000000000190e-09 0.000000000000000000e+00 +6.487999999999999929e-09 0.000000000000000000e+00 +6.488499999999999669e-09 0.000000000000000000e+00 +6.489000000000000236e-09 0.000000000000000000e+00 +6.489499999999999976e-09 0.000000000000000000e+00 +6.489999999999999716e-09 0.000000000000000000e+00 +6.490500000000000283e-09 0.000000000000000000e+00 +6.491000000000000022e-09 0.000000000000000000e+00 +6.491499999999999762e-09 0.000000000000000000e+00 +6.491999999999999502e-09 0.000000000000000000e+00 +6.492500000000000069e-09 0.000000000000000000e+00 +6.492999999999999809e-09 0.000000000000000000e+00 +6.493499999999999548e-09 0.000000000000000000e+00 +6.494000000000000115e-09 0.000000000000000000e+00 +6.494499999999999855e-09 0.000000000000000000e+00 +6.494999999999999595e-09 0.000000000000000000e+00 +6.495500000000000162e-09 0.000000000000000000e+00 +6.495999999999999902e-09 0.000000000000000000e+00 +6.496499999999999641e-09 0.000000000000000000e+00 +6.497000000000000208e-09 0.000000000000000000e+00 +6.497499999999999948e-09 0.000000000000000000e+00 +6.497999999999999688e-09 0.000000000000000000e+00 +6.498500000000000255e-09 0.000000000000000000e+00 +6.498999999999999995e-09 0.000000000000000000e+00 +6.499499999999999734e-09 0.000000000000000000e+00 +6.499999999999999474e-09 0.000000000000000000e+00 +6.500500000000000041e-09 0.000000000000000000e+00 +6.500999999999999781e-09 0.000000000000000000e+00 +6.501499999999999521e-09 0.000000000000000000e+00 +6.502000000000000088e-09 0.000000000000000000e+00 +6.502499999999999828e-09 0.000000000000000000e+00 +6.502999999999999567e-09 0.000000000000000000e+00 +6.503500000000000134e-09 0.000000000000000000e+00 +6.503999999999999874e-09 0.000000000000000000e+00 +6.504499999999999614e-09 0.000000000000000000e+00 +6.505000000000000181e-09 0.000000000000000000e+00 +6.505499999999999921e-09 0.000000000000000000e+00 +6.505999999999999660e-09 0.000000000000000000e+00 +6.506500000000000227e-09 0.000000000000000000e+00 +6.506999999999999967e-09 0.000000000000000000e+00 +6.507499999999999707e-09 0.000000000000000000e+00 +6.508000000000000274e-09 0.000000000000000000e+00 +6.508500000000000014e-09 0.000000000000000000e+00 +6.508999999999999753e-09 0.000000000000000000e+00 +6.509499999999999493e-09 0.000000000000000000e+00 +6.510000000000000060e-09 0.000000000000000000e+00 +6.510499999999999800e-09 0.000000000000000000e+00 +6.510999999999999540e-09 0.000000000000000000e+00 +6.511500000000000107e-09 0.000000000000000000e+00 +6.511999999999999846e-09 0.000000000000000000e+00 +6.512499999999999586e-09 0.000000000000000000e+00 +6.513000000000000153e-09 0.000000000000000000e+00 +6.513499999999999893e-09 0.000000000000000000e+00 +6.513999999999999633e-09 0.000000000000000000e+00 +6.514500000000000200e-09 0.000000000000000000e+00 +6.514999999999999939e-09 0.000000000000000000e+00 +6.515499999999999679e-09 0.000000000000000000e+00 +6.516000000000000246e-09 0.000000000000000000e+00 +6.516499999999999986e-09 0.000000000000000000e+00 +6.516999999999999726e-09 0.000000000000000000e+00 +6.517499999999999466e-09 0.000000000000000000e+00 +6.518000000000000032e-09 0.000000000000000000e+00 +6.518499999999999772e-09 0.000000000000000000e+00 +6.518999999999999512e-09 0.000000000000000000e+00 +6.519500000000000079e-09 0.000000000000000000e+00 +6.519999999999999819e-09 0.000000000000000000e+00 +6.520499999999999559e-09 0.000000000000000000e+00 +6.521000000000000126e-09 0.000000000000000000e+00 +6.521499999999999865e-09 0.000000000000000000e+00 +6.521999999999999605e-09 0.000000000000000000e+00 +6.522500000000000172e-09 0.000000000000000000e+00 +6.522999999999999912e-09 0.000000000000000000e+00 +6.523499999999999652e-09 0.000000000000000000e+00 +6.524000000000000219e-09 0.000000000000000000e+00 +6.524499999999999958e-09 0.000000000000000000e+00 +6.524999999999999698e-09 0.000000000000000000e+00 +6.525500000000000265e-09 0.000000000000000000e+00 +6.526000000000000005e-09 0.000000000000000000e+00 +6.526499999999999745e-09 0.000000000000000000e+00 +6.526999999999999484e-09 0.000000000000000000e+00 +6.527500000000000051e-09 0.000000000000000000e+00 +6.527999999999999791e-09 0.000000000000000000e+00 +6.528499999999999531e-09 0.000000000000000000e+00 +6.529000000000000098e-09 0.000000000000000000e+00 +6.529499999999999838e-09 0.000000000000000000e+00 +6.529999999999999577e-09 0.000000000000000000e+00 +6.530500000000000144e-09 0.000000000000000000e+00 +6.530999999999999884e-09 0.000000000000000000e+00 +6.531499999999999624e-09 0.000000000000000000e+00 +6.532000000000000191e-09 0.000000000000000000e+00 +6.532499999999999931e-09 0.000000000000000000e+00 +6.532999999999999670e-09 0.000000000000000000e+00 +6.533500000000000237e-09 0.000000000000000000e+00 +6.533999999999999977e-09 0.000000000000000000e+00 +6.534499999999999717e-09 0.000000000000000000e+00 +6.534999999999999457e-09 0.000000000000000000e+00 +6.535500000000000024e-09 0.000000000000000000e+00 +6.535999999999999764e-09 0.000000000000000000e+00 +6.536499999999999503e-09 0.000000000000000000e+00 +6.537000000000000070e-09 0.000000000000000000e+00 +6.537499999999999810e-09 0.000000000000000000e+00 +6.537999999999999550e-09 0.000000000000000000e+00 +6.538500000000000117e-09 0.000000000000000000e+00 +6.538999999999999857e-09 0.000000000000000000e+00 +6.539499999999999596e-09 0.000000000000000000e+00 +6.540000000000000163e-09 0.000000000000000000e+00 +6.540499999999999903e-09 0.000000000000000000e+00 +6.540999999999999643e-09 0.000000000000000000e+00 +6.541500000000000210e-09 0.000000000000000000e+00 +6.541999999999999950e-09 0.000000000000000000e+00 +6.542499999999999689e-09 0.000000000000000000e+00 +6.543000000000000256e-09 0.000000000000000000e+00 +6.543499999999999996e-09 0.000000000000000000e+00 +6.543999999999999736e-09 0.000000000000000000e+00 +6.544499999999999476e-09 0.000000000000000000e+00 +6.545000000000000043e-09 0.000000000000000000e+00 +6.545499999999999782e-09 0.000000000000000000e+00 +6.545999999999999522e-09 0.000000000000000000e+00 +6.546500000000000089e-09 0.000000000000000000e+00 +6.546999999999999829e-09 0.000000000000000000e+00 +6.547499999999999569e-09 0.000000000000000000e+00 +6.548000000000000136e-09 0.000000000000000000e+00 +6.548499999999999875e-09 0.000000000000000000e+00 +6.548999999999999615e-09 0.000000000000000000e+00 +6.549500000000000182e-09 0.000000000000000000e+00 +6.549999999999999922e-09 0.000000000000000000e+00 +6.550499999999999662e-09 0.000000000000000000e+00 +6.551000000000000229e-09 0.000000000000000000e+00 +6.551499999999999968e-09 0.000000000000000000e+00 +6.551999999999999708e-09 0.000000000000000000e+00 +6.552500000000000275e-09 0.000000000000000000e+00 +6.553000000000000015e-09 0.000000000000000000e+00 +6.553499999999999755e-09 0.000000000000000000e+00 +6.553999999999999495e-09 0.000000000000000000e+00 +6.554500000000000062e-09 0.000000000000000000e+00 +6.554999999999999801e-09 0.000000000000000000e+00 +6.555499999999999541e-09 0.000000000000000000e+00 +6.556000000000000108e-09 0.000000000000000000e+00 +6.556499999999999848e-09 0.000000000000000000e+00 +6.556999999999999588e-09 0.000000000000000000e+00 +6.557500000000000155e-09 0.000000000000000000e+00 +6.557999999999999894e-09 0.000000000000000000e+00 +6.558499999999999634e-09 0.000000000000000000e+00 +6.559000000000000201e-09 0.000000000000000000e+00 +6.559499999999999941e-09 0.000000000000000000e+00 +6.559999999999999681e-09 0.000000000000000000e+00 +6.560500000000000248e-09 0.000000000000000000e+00 +6.560999999999999987e-09 0.000000000000000000e+00 +6.561499999999999727e-09 0.000000000000000000e+00 +6.561999999999999467e-09 0.000000000000000000e+00 +6.562500000000000034e-09 0.000000000000000000e+00 +6.562999999999999774e-09 0.000000000000000000e+00 +6.563499999999999513e-09 0.000000000000000000e+00 +6.564000000000000080e-09 0.000000000000000000e+00 +6.564499999999999820e-09 0.000000000000000000e+00 +6.564999999999999560e-09 0.000000000000000000e+00 +6.565500000000000127e-09 0.000000000000000000e+00 +6.565999999999999867e-09 0.000000000000000000e+00 +6.566499999999999607e-09 0.000000000000000000e+00 +6.567000000000000173e-09 0.000000000000000000e+00 +6.567499999999999913e-09 0.000000000000000000e+00 +6.567999999999999653e-09 0.000000000000000000e+00 +6.568500000000000220e-09 0.000000000000000000e+00 +6.568999999999999960e-09 0.000000000000000000e+00 +6.569499999999999700e-09 0.000000000000000000e+00 +6.570000000000000267e-09 0.000000000000000000e+00 +6.570500000000000006e-09 0.000000000000000000e+00 +6.570999999999999746e-09 0.000000000000000000e+00 +6.571499999999999486e-09 0.000000000000000000e+00 +6.572000000000000053e-09 0.000000000000000000e+00 +6.572499999999999793e-09 0.000000000000000000e+00 +6.572999999999999532e-09 0.000000000000000000e+00 +6.573500000000000099e-09 0.000000000000000000e+00 +6.573999999999999839e-09 0.000000000000000000e+00 +6.574499999999999579e-09 0.000000000000000000e+00 +6.575000000000000146e-09 0.000000000000000000e+00 +6.575499999999999886e-09 0.000000000000000000e+00 +6.575999999999999625e-09 0.000000000000000000e+00 +6.576500000000000192e-09 0.000000000000000000e+00 +6.576999999999999932e-09 0.000000000000000000e+00 +6.577499999999999672e-09 0.000000000000000000e+00 +6.578000000000000239e-09 0.000000000000000000e+00 +6.578499999999999979e-09 0.000000000000000000e+00 +6.578999999999999718e-09 0.000000000000000000e+00 +6.579499999999999458e-09 0.000000000000000000e+00 +6.580000000000000025e-09 0.000000000000000000e+00 +6.580499999999999765e-09 0.000000000000000000e+00 +6.580999999999999505e-09 0.000000000000000000e+00 +6.581500000000000072e-09 0.000000000000000000e+00 +6.581999999999999811e-09 0.000000000000000000e+00 +6.582499999999999551e-09 0.000000000000000000e+00 +6.583000000000000118e-09 0.000000000000000000e+00 +6.583499999999999858e-09 0.000000000000000000e+00 +6.583999999999999598e-09 0.000000000000000000e+00 +6.584500000000000165e-09 0.000000000000000000e+00 +6.584999999999999905e-09 0.000000000000000000e+00 +6.585499999999999644e-09 0.000000000000000000e+00 +6.586000000000000211e-09 0.000000000000000000e+00 +6.586499999999999951e-09 0.000000000000000000e+00 +6.586999999999999691e-09 0.000000000000000000e+00 +6.587500000000000258e-09 0.000000000000000000e+00 +6.587999999999999998e-09 0.000000000000000000e+00 +6.588499999999999737e-09 0.000000000000000000e+00 +6.588999999999999477e-09 0.000000000000000000e+00 +6.589500000000000044e-09 0.000000000000000000e+00 +6.589999999999999784e-09 0.000000000000000000e+00 +6.590499999999999524e-09 0.000000000000000000e+00 +6.591000000000000091e-09 0.000000000000000000e+00 +6.591499999999999830e-09 0.000000000000000000e+00 +6.591999999999999570e-09 0.000000000000000000e+00 +6.592500000000000137e-09 0.000000000000000000e+00 +6.592999999999999877e-09 0.000000000000000000e+00 +6.593499999999999617e-09 0.000000000000000000e+00 +6.594000000000000184e-09 0.000000000000000000e+00 +6.594499999999999923e-09 0.000000000000000000e+00 +6.594999999999999663e-09 0.000000000000000000e+00 +6.595500000000000230e-09 0.000000000000000000e+00 +6.595999999999999970e-09 0.000000000000000000e+00 +6.596499999999999710e-09 0.000000000000000000e+00 +6.597000000000000277e-09 0.000000000000000000e+00 +6.597500000000000016e-09 0.000000000000000000e+00 +6.597999999999999756e-09 0.000000000000000000e+00 +6.598499999999999496e-09 0.000000000000000000e+00 +6.599000000000000063e-09 0.000000000000000000e+00 +6.599499999999999803e-09 0.000000000000000000e+00 +6.599999999999999543e-09 0.000000000000000000e+00 +6.600500000000000109e-09 0.000000000000000000e+00 +6.600999999999999849e-09 0.000000000000000000e+00 +6.601499999999999589e-09 0.000000000000000000e+00 +6.602000000000000156e-09 0.000000000000000000e+00 +6.602499999999999896e-09 0.000000000000000000e+00 +6.602999999999999636e-09 0.000000000000000000e+00 +6.603500000000000203e-09 0.000000000000000000e+00 +6.603999999999999942e-09 0.000000000000000000e+00 +6.604499999999999682e-09 0.000000000000000000e+00 +6.605000000000000249e-09 0.000000000000000000e+00 +6.605499999999999989e-09 0.000000000000000000e+00 +6.605999999999999729e-09 0.000000000000000000e+00 +6.606499999999999468e-09 0.000000000000000000e+00 +6.607000000000000035e-09 0.000000000000000000e+00 +6.607499999999999775e-09 0.000000000000000000e+00 +6.607999999999999515e-09 0.000000000000000000e+00 +6.608500000000000082e-09 0.000000000000000000e+00 +6.608999999999999822e-09 0.000000000000000000e+00 +6.609499999999999561e-09 0.000000000000000000e+00 +6.610000000000000128e-09 0.000000000000000000e+00 +6.610499999999999868e-09 0.000000000000000000e+00 +6.610999999999999608e-09 0.000000000000000000e+00 +6.611500000000000175e-09 0.000000000000000000e+00 +6.611999999999999915e-09 0.000000000000000000e+00 +6.612499999999999654e-09 0.000000000000000000e+00 +6.613000000000000221e-09 0.000000000000000000e+00 +6.613499999999999961e-09 0.000000000000000000e+00 +6.613999999999999701e-09 0.000000000000000000e+00 +6.614500000000000268e-09 0.000000000000000000e+00 +6.615000000000000008e-09 0.000000000000000000e+00 +6.615499999999999747e-09 0.000000000000000000e+00 +6.615999999999999487e-09 0.000000000000000000e+00 +6.616500000000000054e-09 0.000000000000000000e+00 +6.616999999999999794e-09 0.000000000000000000e+00 +6.617499999999999534e-09 0.000000000000000000e+00 +6.618000000000000101e-09 0.000000000000000000e+00 +6.618499999999999841e-09 0.000000000000000000e+00 +6.618999999999999580e-09 0.000000000000000000e+00 +6.619500000000000147e-09 0.000000000000000000e+00 +6.619999999999999887e-09 0.000000000000000000e+00 +6.620499999999999627e-09 0.000000000000000000e+00 +6.621000000000000194e-09 0.000000000000000000e+00 +6.621499999999999934e-09 0.000000000000000000e+00 +6.621999999999999673e-09 0.000000000000000000e+00 +6.622500000000000240e-09 0.000000000000000000e+00 +6.622999999999999980e-09 0.000000000000000000e+00 +6.623499999999999720e-09 0.000000000000000000e+00 +6.623999999999999460e-09 0.000000000000000000e+00 +6.624500000000000027e-09 0.000000000000000000e+00 +6.624999999999999766e-09 0.000000000000000000e+00 +6.625499999999999506e-09 0.000000000000000000e+00 +6.626000000000000073e-09 0.000000000000000000e+00 +6.626499999999999813e-09 0.000000000000000000e+00 +6.626999999999999553e-09 0.000000000000000000e+00 +6.627500000000000120e-09 0.000000000000000000e+00 +6.627999999999999859e-09 0.000000000000000000e+00 +6.628499999999999599e-09 0.000000000000000000e+00 +6.629000000000000166e-09 0.000000000000000000e+00 +6.629499999999999906e-09 0.000000000000000000e+00 +6.629999999999999646e-09 0.000000000000000000e+00 +6.630500000000000213e-09 0.000000000000000000e+00 +6.630999999999999952e-09 0.000000000000000000e+00 +6.631499999999999692e-09 0.000000000000000000e+00 +6.632000000000000259e-09 0.000000000000000000e+00 +6.632499999999999999e-09 0.000000000000000000e+00 +6.632999999999999739e-09 0.000000000000000000e+00 +6.633499999999999479e-09 0.000000000000000000e+00 +6.634000000000000045e-09 0.000000000000000000e+00 +6.634499999999999785e-09 0.000000000000000000e+00 +6.634999999999999525e-09 0.000000000000000000e+00 +6.635500000000000092e-09 0.000000000000000000e+00 +6.635999999999999832e-09 0.000000000000000000e+00 +6.636499999999999572e-09 0.000000000000000000e+00 +6.637000000000000139e-09 0.000000000000000000e+00 +6.637499999999999878e-09 0.000000000000000000e+00 +6.637999999999999618e-09 0.000000000000000000e+00 +6.638500000000000185e-09 0.000000000000000000e+00 +6.638999999999999925e-09 0.000000000000000000e+00 +6.639499999999999665e-09 0.000000000000000000e+00 +6.640000000000000232e-09 0.000000000000000000e+00 +6.640499999999999971e-09 0.000000000000000000e+00 +6.640999999999999711e-09 0.000000000000000000e+00 +6.641500000000000278e-09 0.000000000000000000e+00 +6.642000000000000018e-09 0.000000000000000000e+00 +6.642499999999999758e-09 0.000000000000000000e+00 +6.642999999999999497e-09 0.000000000000000000e+00 +6.643500000000000064e-09 0.000000000000000000e+00 +6.643999999999999804e-09 0.000000000000000000e+00 +6.644499999999999544e-09 0.000000000000000000e+00 +6.645000000000000111e-09 0.000000000000000000e+00 +6.645499999999999851e-09 0.000000000000000000e+00 +6.645999999999999590e-09 0.000000000000000000e+00 +6.646500000000000157e-09 0.000000000000000000e+00 +6.646999999999999897e-09 0.000000000000000000e+00 +6.647499999999999637e-09 0.000000000000000000e+00 +6.648000000000000204e-09 0.000000000000000000e+00 +6.648499999999999944e-09 0.000000000000000000e+00 +6.648999999999999684e-09 0.000000000000000000e+00 +6.649500000000000250e-09 0.000000000000000000e+00 +6.649999999999999990e-09 0.000000000000000000e+00 +6.650499999999999730e-09 0.000000000000000000e+00 +6.650999999999999470e-09 0.000000000000000000e+00 +6.651500000000000037e-09 0.000000000000000000e+00 +6.651999999999999777e-09 0.000000000000000000e+00 +6.652499999999999516e-09 0.000000000000000000e+00 +6.653000000000000083e-09 0.000000000000000000e+00 +6.653499999999999823e-09 0.000000000000000000e+00 +6.653999999999999563e-09 0.000000000000000000e+00 +6.654500000000000130e-09 0.000000000000000000e+00 +6.654999999999999870e-09 0.000000000000000000e+00 +6.655499999999999609e-09 0.000000000000000000e+00 +6.656000000000000176e-09 0.000000000000000000e+00 +6.656499999999999916e-09 0.000000000000000000e+00 +6.656999999999999656e-09 0.000000000000000000e+00 +6.657500000000000223e-09 0.000000000000000000e+00 +6.657999999999999963e-09 0.000000000000000000e+00 +6.658499999999999702e-09 0.000000000000000000e+00 +6.659000000000000269e-09 0.000000000000000000e+00 +6.659500000000000009e-09 0.000000000000000000e+00 +6.659999999999999749e-09 0.000000000000000000e+00 +6.660499999999999489e-09 0.000000000000000000e+00 +6.661000000000000056e-09 0.000000000000000000e+00 +6.661499999999999795e-09 0.000000000000000000e+00 +6.661999999999999535e-09 0.000000000000000000e+00 +6.662500000000000102e-09 0.000000000000000000e+00 +6.662999999999999842e-09 0.000000000000000000e+00 +6.663499999999999582e-09 0.000000000000000000e+00 +6.664000000000000149e-09 0.000000000000000000e+00 +6.664499999999999888e-09 0.000000000000000000e+00 +6.664999999999999628e-09 0.000000000000000000e+00 +6.665500000000000195e-09 0.000000000000000000e+00 +6.665999999999999935e-09 0.000000000000000000e+00 +6.666499999999999675e-09 0.000000000000000000e+00 +6.667000000000000242e-09 0.000000000000000000e+00 +6.667499999999999982e-09 0.000000000000000000e+00 +6.667999999999999721e-09 0.000000000000000000e+00 +6.668499999999999461e-09 0.000000000000000000e+00 +6.669000000000000028e-09 0.000000000000000000e+00 +6.669499999999999768e-09 0.000000000000000000e+00 +6.669999999999999508e-09 0.000000000000000000e+00 +6.670500000000000075e-09 0.000000000000000000e+00 +6.670999999999999814e-09 0.000000000000000000e+00 +6.671499999999999554e-09 0.000000000000000000e+00 +6.672000000000000121e-09 0.000000000000000000e+00 +6.672499999999999861e-09 0.000000000000000000e+00 +6.672999999999999601e-09 0.000000000000000000e+00 +6.673500000000000168e-09 0.000000000000000000e+00 +6.673999999999999907e-09 0.000000000000000000e+00 +6.674499999999999647e-09 0.000000000000000000e+00 +6.675000000000000214e-09 0.000000000000000000e+00 +6.675499999999999954e-09 0.000000000000000000e+00 +6.675999999999999694e-09 0.000000000000000000e+00 +6.676500000000000261e-09 0.000000000000000000e+00 +6.677000000000000000e-09 0.000000000000000000e+00 +6.677499999999999740e-09 0.000000000000000000e+00 +6.677999999999999480e-09 0.000000000000000000e+00 +6.678500000000000047e-09 0.000000000000000000e+00 +6.678999999999999787e-09 0.000000000000000000e+00 +6.679499999999999526e-09 0.000000000000000000e+00 +6.680000000000000093e-09 0.000000000000000000e+00 +6.680499999999999833e-09 0.000000000000000000e+00 +6.680999999999999573e-09 0.000000000000000000e+00 +6.681500000000000140e-09 0.000000000000000000e+00 +6.681999999999999880e-09 0.000000000000000000e+00 +6.682499999999999620e-09 0.000000000000000000e+00 +6.683000000000000186e-09 0.000000000000000000e+00 +6.683499999999999926e-09 0.000000000000000000e+00 +6.683999999999999666e-09 0.000000000000000000e+00 +6.684500000000000233e-09 0.000000000000000000e+00 +6.684999999999999973e-09 0.000000000000000000e+00 +6.685499999999999713e-09 0.000000000000000000e+00 +6.685999999999999452e-09 0.000000000000000000e+00 +6.686500000000000019e-09 0.000000000000000000e+00 +6.686999999999999759e-09 0.000000000000000000e+00 +6.687499999999999499e-09 0.000000000000000000e+00 +6.688000000000000066e-09 0.000000000000000000e+00 +6.688499999999999806e-09 0.000000000000000000e+00 +6.688999999999999545e-09 0.000000000000000000e+00 +6.689500000000000112e-09 0.000000000000000000e+00 +6.689999999999999852e-09 0.000000000000000000e+00 +6.690499999999999592e-09 0.000000000000000000e+00 +6.691000000000000159e-09 0.000000000000000000e+00 +6.691499999999999899e-09 0.000000000000000000e+00 +6.691999999999999638e-09 0.000000000000000000e+00 +6.692500000000000205e-09 0.000000000000000000e+00 +6.692999999999999945e-09 0.000000000000000000e+00 +6.693499999999999685e-09 0.000000000000000000e+00 +6.694000000000000252e-09 0.000000000000000000e+00 +6.694499999999999992e-09 0.000000000000000000e+00 +6.694999999999999731e-09 0.000000000000000000e+00 +6.695499999999999471e-09 0.000000000000000000e+00 +6.696000000000000038e-09 0.000000000000000000e+00 +6.696499999999999778e-09 0.000000000000000000e+00 +6.696999999999999518e-09 0.000000000000000000e+00 +6.697500000000000085e-09 0.000000000000000000e+00 +6.697999999999999824e-09 0.000000000000000000e+00 +6.698499999999999564e-09 0.000000000000000000e+00 +6.699000000000000131e-09 0.000000000000000000e+00 +6.699499999999999871e-09 0.000000000000000000e+00 +6.699999999999999611e-09 0.000000000000000000e+00 +6.700500000000000178e-09 0.000000000000000000e+00 +6.700999999999999918e-09 0.000000000000000000e+00 +6.701499999999999657e-09 0.000000000000000000e+00 +6.702000000000000224e-09 0.000000000000000000e+00 +6.702499999999999964e-09 0.000000000000000000e+00 +6.702999999999999704e-09 0.000000000000000000e+00 +6.703500000000000271e-09 0.000000000000000000e+00 +6.704000000000000011e-09 0.000000000000000000e+00 +6.704499999999999750e-09 0.000000000000000000e+00 +6.704999999999999490e-09 0.000000000000000000e+00 +6.705500000000000057e-09 0.000000000000000000e+00 +6.705999999999999797e-09 0.000000000000000000e+00 +6.706499999999999537e-09 0.000000000000000000e+00 +6.707000000000000104e-09 0.000000000000000000e+00 +6.707499999999999843e-09 0.000000000000000000e+00 +6.707999999999999583e-09 0.000000000000000000e+00 +6.708500000000000150e-09 0.000000000000000000e+00 +6.708999999999999890e-09 0.000000000000000000e+00 +6.709499999999999630e-09 0.000000000000000000e+00 +6.710000000000000197e-09 0.000000000000000000e+00 +6.710499999999999936e-09 0.000000000000000000e+00 +6.710999999999999676e-09 0.000000000000000000e+00 +6.711500000000000243e-09 0.000000000000000000e+00 +6.711999999999999983e-09 0.000000000000000000e+00 +6.712499999999999723e-09 0.000000000000000000e+00 +6.712999999999999462e-09 0.000000000000000000e+00 +6.713500000000000029e-09 0.000000000000000000e+00 +6.713999999999999769e-09 0.000000000000000000e+00 +6.714499999999999509e-09 0.000000000000000000e+00 +6.715000000000000076e-09 0.000000000000000000e+00 +6.715499999999999816e-09 0.000000000000000000e+00 +6.715999999999999556e-09 0.000000000000000000e+00 +6.716500000000000122e-09 0.000000000000000000e+00 +6.716999999999999862e-09 0.000000000000000000e+00 +6.717499999999999602e-09 0.000000000000000000e+00 +6.718000000000000169e-09 0.000000000000000000e+00 +6.718499999999999909e-09 0.000000000000000000e+00 +6.718999999999999649e-09 0.000000000000000000e+00 +6.719500000000000216e-09 0.000000000000000000e+00 +6.719999999999999955e-09 0.000000000000000000e+00 +6.720499999999999695e-09 0.000000000000000000e+00 +6.721000000000000262e-09 0.000000000000000000e+00 +6.721500000000000002e-09 0.000000000000000000e+00 +6.721999999999999742e-09 0.000000000000000000e+00 +6.722499999999999481e-09 0.000000000000000000e+00 +6.723000000000000048e-09 0.000000000000000000e+00 +6.723499999999999788e-09 0.000000000000000000e+00 +6.723999999999999528e-09 0.000000000000000000e+00 +6.724500000000000095e-09 0.000000000000000000e+00 +6.724999999999999835e-09 0.000000000000000000e+00 +6.725499999999999574e-09 0.000000000000000000e+00 +6.726000000000000141e-09 0.000000000000000000e+00 +6.726499999999999881e-09 0.000000000000000000e+00 +6.726999999999999621e-09 0.000000000000000000e+00 +6.727500000000000188e-09 0.000000000000000000e+00 +6.727999999999999928e-09 0.000000000000000000e+00 +6.728499999999999667e-09 0.000000000000000000e+00 +6.729000000000000234e-09 0.000000000000000000e+00 +6.729499999999999974e-09 0.000000000000000000e+00 +6.729999999999999714e-09 0.000000000000000000e+00 +6.730499999999999454e-09 0.000000000000000000e+00 +6.731000000000000021e-09 0.000000000000000000e+00 +6.731499999999999761e-09 0.000000000000000000e+00 +6.731999999999999500e-09 0.000000000000000000e+00 +6.732500000000000067e-09 0.000000000000000000e+00 +6.732999999999999807e-09 0.000000000000000000e+00 +6.733499999999999547e-09 0.000000000000000000e+00 +6.734000000000000114e-09 0.000000000000000000e+00 +6.734499999999999854e-09 0.000000000000000000e+00 +6.734999999999999593e-09 0.000000000000000000e+00 +6.735500000000000160e-09 0.000000000000000000e+00 +6.735999999999999900e-09 0.000000000000000000e+00 +6.736499999999999640e-09 0.000000000000000000e+00 +6.737000000000000207e-09 0.000000000000000000e+00 +6.737499999999999947e-09 0.000000000000000000e+00 +6.737999999999999686e-09 0.000000000000000000e+00 +6.738500000000000253e-09 0.000000000000000000e+00 +6.738999999999999993e-09 0.000000000000000000e+00 +6.739499999999999733e-09 0.000000000000000000e+00 +6.739999999999999473e-09 0.000000000000000000e+00 +6.740500000000000040e-09 0.000000000000000000e+00 +6.740999999999999779e-09 0.000000000000000000e+00 +6.741499999999999519e-09 0.000000000000000000e+00 +6.742000000000000086e-09 0.000000000000000000e+00 +6.742499999999999826e-09 0.000000000000000000e+00 +6.742999999999999566e-09 0.000000000000000000e+00 +6.743500000000000133e-09 0.000000000000000000e+00 +6.743999999999999872e-09 0.000000000000000000e+00 +6.744499999999999612e-09 0.000000000000000000e+00 +6.745000000000000179e-09 0.000000000000000000e+00 +6.745499999999999919e-09 0.000000000000000000e+00 +6.745999999999999659e-09 0.000000000000000000e+00 +6.746500000000000226e-09 0.000000000000000000e+00 +6.746999999999999965e-09 0.000000000000000000e+00 +6.747499999999999705e-09 0.000000000000000000e+00 +6.748000000000000272e-09 0.000000000000000000e+00 +6.748500000000000012e-09 0.000000000000000000e+00 +6.748999999999999752e-09 0.000000000000000000e+00 +6.749499999999999492e-09 0.000000000000000000e+00 +6.750000000000000059e-09 0.000000000000000000e+00 +6.750499999999999798e-09 0.000000000000000000e+00 +6.750999999999999538e-09 0.000000000000000000e+00 +6.751500000000000105e-09 0.000000000000000000e+00 +6.751999999999999845e-09 0.000000000000000000e+00 +6.752499999999999585e-09 0.000000000000000000e+00 +6.753000000000000152e-09 0.000000000000000000e+00 +6.753499999999999891e-09 0.000000000000000000e+00 +6.753999999999999631e-09 0.000000000000000000e+00 +6.754500000000000198e-09 0.000000000000000000e+00 +6.754999999999999938e-09 0.000000000000000000e+00 +6.755499999999999678e-09 0.000000000000000000e+00 +6.756000000000000245e-09 0.000000000000000000e+00 +6.756499999999999984e-09 0.000000000000000000e+00 +6.756999999999999724e-09 0.000000000000000000e+00 +6.757499999999999464e-09 0.000000000000000000e+00 +6.758000000000000031e-09 0.000000000000000000e+00 +6.758499999999999771e-09 0.000000000000000000e+00 +6.758999999999999510e-09 0.000000000000000000e+00 +6.759500000000000077e-09 0.000000000000000000e+00 +6.759999999999999817e-09 0.000000000000000000e+00 +6.760499999999999557e-09 0.000000000000000000e+00 +6.761000000000000124e-09 0.000000000000000000e+00 +6.761499999999999864e-09 0.000000000000000000e+00 +6.761999999999999603e-09 0.000000000000000000e+00 +6.762500000000000170e-09 0.000000000000000000e+00 +6.762999999999999910e-09 0.000000000000000000e+00 +6.763499999999999650e-09 0.000000000000000000e+00 +6.764000000000000217e-09 0.000000000000000000e+00 +6.764499999999999957e-09 0.000000000000000000e+00 +6.764999999999999697e-09 0.000000000000000000e+00 +6.765500000000000263e-09 0.000000000000000000e+00 +6.766000000000000003e-09 0.000000000000000000e+00 +6.766499999999999743e-09 0.000000000000000000e+00 +6.766999999999999483e-09 0.000000000000000000e+00 +6.767500000000000050e-09 0.000000000000000000e+00 +6.767999999999999790e-09 0.000000000000000000e+00 +6.768499999999999529e-09 0.000000000000000000e+00 +6.769000000000000096e-09 0.000000000000000000e+00 +6.769499999999999836e-09 0.000000000000000000e+00 +6.769999999999999576e-09 0.000000000000000000e+00 +6.770500000000000143e-09 0.000000000000000000e+00 +6.770999999999999883e-09 0.000000000000000000e+00 +6.771499999999999622e-09 0.000000000000000000e+00 +6.772000000000000189e-09 0.000000000000000000e+00 +6.772499999999999929e-09 0.000000000000000000e+00 +6.772999999999999669e-09 0.000000000000000000e+00 +6.773500000000000236e-09 0.000000000000000000e+00 +6.773999999999999976e-09 0.000000000000000000e+00 +6.774499999999999715e-09 0.000000000000000000e+00 +6.774999999999999455e-09 0.000000000000000000e+00 +6.775500000000000022e-09 0.000000000000000000e+00 +6.775999999999999762e-09 0.000000000000000000e+00 +6.776499999999999502e-09 0.000000000000000000e+00 +6.777000000000000069e-09 0.000000000000000000e+00 +6.777499999999999808e-09 0.000000000000000000e+00 +6.777999999999999548e-09 0.000000000000000000e+00 +6.778500000000000115e-09 0.000000000000000000e+00 +6.778999999999999855e-09 0.000000000000000000e+00 +6.779499999999999595e-09 0.000000000000000000e+00 +6.780000000000000162e-09 0.000000000000000000e+00 +6.780499999999999901e-09 0.000000000000000000e+00 +6.780999999999999641e-09 0.000000000000000000e+00 +6.781500000000000208e-09 0.000000000000000000e+00 +6.781999999999999948e-09 0.000000000000000000e+00 +6.782499999999999688e-09 0.000000000000000000e+00 +6.783000000000000255e-09 0.000000000000000000e+00 +6.783499999999999995e-09 0.000000000000000000e+00 +6.783999999999999734e-09 0.000000000000000000e+00 +6.784499999999999474e-09 0.000000000000000000e+00 +6.785000000000000041e-09 0.000000000000000000e+00 +6.785499999999999781e-09 0.000000000000000000e+00 +6.785999999999999521e-09 0.000000000000000000e+00 +6.786500000000000088e-09 0.000000000000000000e+00 +6.786999999999999827e-09 0.000000000000000000e+00 +6.787499999999999567e-09 0.000000000000000000e+00 +6.788000000000000134e-09 0.000000000000000000e+00 +6.788499999999999874e-09 0.000000000000000000e+00 +6.788999999999999614e-09 0.000000000000000000e+00 +6.789500000000000181e-09 0.000000000000000000e+00 +6.789999999999999920e-09 0.000000000000000000e+00 +6.790499999999999660e-09 0.000000000000000000e+00 +6.791000000000000227e-09 0.000000000000000000e+00 +6.791499999999999967e-09 0.000000000000000000e+00 +6.791999999999999707e-09 0.000000000000000000e+00 +6.792500000000000274e-09 0.000000000000000000e+00 +6.793000000000000013e-09 0.000000000000000000e+00 +6.793499999999999753e-09 0.000000000000000000e+00 +6.793999999999999493e-09 0.000000000000000000e+00 +6.794500000000000060e-09 0.000000000000000000e+00 +6.794999999999999800e-09 0.000000000000000000e+00 +6.795499999999999539e-09 0.000000000000000000e+00 +6.796000000000000106e-09 0.000000000000000000e+00 +6.796499999999999846e-09 0.000000000000000000e+00 +6.796999999999999586e-09 0.000000000000000000e+00 +6.797500000000000153e-09 0.000000000000000000e+00 +6.797999999999999893e-09 0.000000000000000000e+00 +6.798499999999999633e-09 0.000000000000000000e+00 +6.799000000000000199e-09 0.000000000000000000e+00 +6.799499999999999939e-09 0.000000000000000000e+00 +6.799999999999999679e-09 0.000000000000000000e+00 +6.800500000000000246e-09 0.000000000000000000e+00 +6.800999999999999986e-09 0.000000000000000000e+00 +6.801499999999999726e-09 0.000000000000000000e+00 +6.801999999999999465e-09 0.000000000000000000e+00 +6.802500000000000032e-09 0.000000000000000000e+00 +6.802999999999999772e-09 0.000000000000000000e+00 +6.803499999999999512e-09 0.000000000000000000e+00 +6.804000000000000079e-09 0.000000000000000000e+00 +6.804499999999999819e-09 0.000000000000000000e+00 +6.804999999999999558e-09 0.000000000000000000e+00 +6.805500000000000125e-09 0.000000000000000000e+00 +6.805999999999999865e-09 0.000000000000000000e+00 +6.806499999999999605e-09 0.000000000000000000e+00 +6.807000000000000172e-09 0.000000000000000000e+00 +6.807499999999999912e-09 0.000000000000000000e+00 +6.807999999999999651e-09 0.000000000000000000e+00 +6.808500000000000218e-09 0.000000000000000000e+00 +6.808999999999999958e-09 0.000000000000000000e+00 +6.809499999999999698e-09 0.000000000000000000e+00 +6.810000000000000265e-09 0.000000000000000000e+00 +6.810500000000000005e-09 0.000000000000000000e+00 +6.810999999999999744e-09 0.000000000000000000e+00 +6.811499999999999484e-09 0.000000000000000000e+00 +6.812000000000000051e-09 0.000000000000000000e+00 +6.812499999999999791e-09 0.000000000000000000e+00 +6.812999999999999531e-09 0.000000000000000000e+00 +6.813500000000000098e-09 0.000000000000000000e+00 +6.813999999999999838e-09 0.000000000000000000e+00 +6.814499999999999577e-09 0.000000000000000000e+00 +6.815000000000000144e-09 0.000000000000000000e+00 +6.815499999999999884e-09 0.000000000000000000e+00 +6.815999999999999624e-09 0.000000000000000000e+00 +6.816500000000000191e-09 0.000000000000000000e+00 +6.816999999999999931e-09 0.000000000000000000e+00 +6.817499999999999670e-09 0.000000000000000000e+00 +6.818000000000000237e-09 0.000000000000000000e+00 +6.818499999999999977e-09 0.000000000000000000e+00 +6.818999999999999717e-09 0.000000000000000000e+00 +6.819499999999999457e-09 0.000000000000000000e+00 +6.820000000000000024e-09 0.000000000000000000e+00 +6.820499999999999763e-09 0.000000000000000000e+00 +6.820999999999999503e-09 0.000000000000000000e+00 +6.821500000000000070e-09 0.000000000000000000e+00 +6.821999999999999810e-09 0.000000000000000000e+00 +6.822499999999999550e-09 0.000000000000000000e+00 +6.823000000000000117e-09 0.000000000000000000e+00 +6.823499999999999856e-09 0.000000000000000000e+00 +6.823999999999999596e-09 0.000000000000000000e+00 +6.824500000000000163e-09 0.000000000000000000e+00 +6.824999999999999903e-09 0.000000000000000000e+00 +6.825499999999999643e-09 0.000000000000000000e+00 +6.826000000000000210e-09 0.000000000000000000e+00 +6.826499999999999949e-09 0.000000000000000000e+00 +6.826999999999999689e-09 0.000000000000000000e+00 +6.827500000000000256e-09 0.000000000000000000e+00 +6.827999999999999996e-09 0.000000000000000000e+00 +6.828499999999999736e-09 0.000000000000000000e+00 +6.828999999999999476e-09 0.000000000000000000e+00 +6.829500000000000042e-09 0.000000000000000000e+00 +6.829999999999999782e-09 0.000000000000000000e+00 +6.830499999999999522e-09 0.000000000000000000e+00 +6.831000000000000089e-09 0.000000000000000000e+00 +6.831499999999999829e-09 0.000000000000000000e+00 +6.831999999999999569e-09 0.000000000000000000e+00 +6.832500000000000136e-09 0.000000000000000000e+00 +6.832999999999999875e-09 0.000000000000000000e+00 +6.833499999999999615e-09 0.000000000000000000e+00 +6.834000000000000182e-09 0.000000000000000000e+00 +6.834499999999999922e-09 0.000000000000000000e+00 +6.834999999999999662e-09 0.000000000000000000e+00 +6.835500000000000229e-09 0.000000000000000000e+00 +6.835999999999999968e-09 0.000000000000000000e+00 +6.836499999999999708e-09 0.000000000000000000e+00 +6.837000000000000275e-09 0.000000000000000000e+00 +6.837500000000000015e-09 0.000000000000000000e+00 +6.837999999999999755e-09 0.000000000000000000e+00 +6.838499999999999494e-09 0.000000000000000000e+00 +6.839000000000000061e-09 0.000000000000000000e+00 +6.839499999999999801e-09 0.000000000000000000e+00 +6.839999999999999541e-09 0.000000000000000000e+00 +6.840500000000000108e-09 0.000000000000000000e+00 +6.840999999999999848e-09 0.000000000000000000e+00 +6.841499999999999587e-09 0.000000000000000000e+00 +6.842000000000000154e-09 0.000000000000000000e+00 +6.842499999999999894e-09 0.000000000000000000e+00 +6.842999999999999634e-09 0.000000000000000000e+00 +6.843500000000000201e-09 0.000000000000000000e+00 +6.843999999999999941e-09 0.000000000000000000e+00 +6.844499999999999680e-09 0.000000000000000000e+00 +6.845000000000000247e-09 0.000000000000000000e+00 +6.845499999999999987e-09 0.000000000000000000e+00 +6.845999999999999727e-09 0.000000000000000000e+00 +6.846499999999999467e-09 0.000000000000000000e+00 +6.847000000000000034e-09 0.000000000000000000e+00 +6.847499999999999774e-09 0.000000000000000000e+00 +6.847999999999999513e-09 0.000000000000000000e+00 +6.848500000000000080e-09 0.000000000000000000e+00 +6.848999999999999820e-09 0.000000000000000000e+00 +6.849499999999999560e-09 0.000000000000000000e+00 +6.850000000000000127e-09 0.000000000000000000e+00 +6.850499999999999867e-09 0.000000000000000000e+00 +6.850999999999999606e-09 0.000000000000000000e+00 +6.851500000000000173e-09 0.000000000000000000e+00 +6.851999999999999913e-09 0.000000000000000000e+00 +6.852499999999999653e-09 0.000000000000000000e+00 +6.853000000000000220e-09 0.000000000000000000e+00 +6.853499999999999960e-09 0.000000000000000000e+00 +6.853999999999999699e-09 0.000000000000000000e+00 +6.854500000000000266e-09 0.000000000000000000e+00 +6.855000000000000006e-09 0.000000000000000000e+00 +6.855499999999999746e-09 0.000000000000000000e+00 +6.855999999999999486e-09 0.000000000000000000e+00 +6.856500000000000053e-09 0.000000000000000000e+00 +6.856999999999999792e-09 0.000000000000000000e+00 +6.857499999999999532e-09 0.000000000000000000e+00 +6.858000000000000099e-09 0.000000000000000000e+00 +6.858499999999999839e-09 0.000000000000000000e+00 +6.858999999999999579e-09 0.000000000000000000e+00 +6.859500000000000146e-09 0.000000000000000000e+00 +6.859999999999999885e-09 0.000000000000000000e+00 +6.860499999999999625e-09 0.000000000000000000e+00 +6.861000000000000192e-09 0.000000000000000000e+00 +6.861499999999999932e-09 0.000000000000000000e+00 +6.861999999999999672e-09 0.000000000000000000e+00 +6.862500000000000239e-09 0.000000000000000000e+00 +6.862999999999999978e-09 0.000000000000000000e+00 +6.863499999999999718e-09 0.000000000000000000e+00 +6.863999999999999458e-09 0.000000000000000000e+00 +6.864500000000000025e-09 0.000000000000000000e+00 +6.864999999999999765e-09 0.000000000000000000e+00 +6.865499999999999505e-09 0.000000000000000000e+00 +6.866000000000000072e-09 0.000000000000000000e+00 +6.866499999999999811e-09 0.000000000000000000e+00 +6.866999999999999551e-09 0.000000000000000000e+00 +6.867500000000000118e-09 0.000000000000000000e+00 +6.867999999999999858e-09 0.000000000000000000e+00 +6.868499999999999598e-09 0.000000000000000000e+00 +6.869000000000000165e-09 0.000000000000000000e+00 +6.869499999999999904e-09 0.000000000000000000e+00 +6.869999999999999644e-09 0.000000000000000000e+00 +6.870500000000000211e-09 0.000000000000000000e+00 +6.870999999999999951e-09 0.000000000000000000e+00 +6.871499999999999691e-09 0.000000000000000000e+00 +6.872000000000000258e-09 0.000000000000000000e+00 +6.872499999999999997e-09 0.000000000000000000e+00 +6.872999999999999737e-09 0.000000000000000000e+00 +6.873499999999999477e-09 0.000000000000000000e+00 +6.874000000000000044e-09 0.000000000000000000e+00 +6.874499999999999784e-09 0.000000000000000000e+00 +6.874999999999999523e-09 0.000000000000000000e+00 +6.875500000000000090e-09 0.000000000000000000e+00 +6.875999999999999830e-09 0.000000000000000000e+00 +6.876499999999999570e-09 0.000000000000000000e+00 +6.877000000000000137e-09 0.000000000000000000e+00 +6.877499999999999877e-09 0.000000000000000000e+00 +6.877999999999999616e-09 0.000000000000000000e+00 +6.878500000000000183e-09 0.000000000000000000e+00 +6.878999999999999923e-09 0.000000000000000000e+00 +6.879499999999999663e-09 0.000000000000000000e+00 +6.880000000000000230e-09 0.000000000000000000e+00 +6.880499999999999970e-09 0.000000000000000000e+00 +6.880999999999999710e-09 0.000000000000000000e+00 +6.881499999999999449e-09 0.000000000000000000e+00 +6.882000000000000016e-09 0.000000000000000000e+00 +6.882499999999999756e-09 0.000000000000000000e+00 +6.882999999999999496e-09 0.000000000000000000e+00 +6.883500000000000063e-09 0.000000000000000000e+00 +6.883999999999999803e-09 0.000000000000000000e+00 +6.884499999999999542e-09 0.000000000000000000e+00 +6.885000000000000109e-09 0.000000000000000000e+00 +6.885499999999999849e-09 0.000000000000000000e+00 +6.885999999999999589e-09 0.000000000000000000e+00 +6.886500000000000156e-09 0.000000000000000000e+00 +6.886999999999999896e-09 0.000000000000000000e+00 +6.887499999999999635e-09 0.000000000000000000e+00 +6.888000000000000202e-09 0.000000000000000000e+00 +6.888499999999999942e-09 0.000000000000000000e+00 +6.888999999999999682e-09 0.000000000000000000e+00 +6.889500000000000249e-09 0.000000000000000000e+00 +6.889999999999999989e-09 0.000000000000000000e+00 +6.890499999999999728e-09 0.000000000000000000e+00 +6.890999999999999468e-09 0.000000000000000000e+00 +6.891500000000000035e-09 0.000000000000000000e+00 +6.891999999999999775e-09 0.000000000000000000e+00 +6.892499999999999515e-09 0.000000000000000000e+00 +6.893000000000000082e-09 0.000000000000000000e+00 +6.893499999999999821e-09 0.000000000000000000e+00 +6.893999999999999561e-09 0.000000000000000000e+00 +6.894500000000000128e-09 0.000000000000000000e+00 +6.894999999999999868e-09 0.000000000000000000e+00 +6.895499999999999608e-09 0.000000000000000000e+00 +6.896000000000000175e-09 0.000000000000000000e+00 +6.896499999999999915e-09 0.000000000000000000e+00 +6.896999999999999654e-09 0.000000000000000000e+00 +6.897500000000000221e-09 0.000000000000000000e+00 +6.897999999999999961e-09 0.000000000000000000e+00 +6.898499999999999701e-09 0.000000000000000000e+00 +6.899000000000000268e-09 0.000000000000000000e+00 +6.899500000000000008e-09 0.000000000000000000e+00 +6.899999999999999747e-09 0.000000000000000000e+00 +6.900499999999999487e-09 0.000000000000000000e+00 +6.901000000000000054e-09 0.000000000000000000e+00 +6.901499999999999794e-09 0.000000000000000000e+00 +6.901999999999999534e-09 0.000000000000000000e+00 +6.902500000000000101e-09 0.000000000000000000e+00 +6.902999999999999840e-09 0.000000000000000000e+00 +6.903499999999999580e-09 0.000000000000000000e+00 +6.904000000000000147e-09 0.000000000000000000e+00 +6.904499999999999887e-09 0.000000000000000000e+00 +6.904999999999999627e-09 0.000000000000000000e+00 +6.905500000000000194e-09 0.000000000000000000e+00 +6.905999999999999933e-09 0.000000000000000000e+00 +6.906499999999999673e-09 0.000000000000000000e+00 +6.907000000000000240e-09 0.000000000000000000e+00 +6.907499999999999980e-09 0.000000000000000000e+00 +6.907999999999999720e-09 0.000000000000000000e+00 +6.908499999999999459e-09 0.000000000000000000e+00 +6.909000000000000026e-09 0.000000000000000000e+00 +6.909499999999999766e-09 0.000000000000000000e+00 +6.909999999999999506e-09 0.000000000000000000e+00 +6.910500000000000073e-09 0.000000000000000000e+00 +6.910999999999999813e-09 0.000000000000000000e+00 +6.911499999999999553e-09 0.000000000000000000e+00 +6.912000000000000119e-09 0.000000000000000000e+00 +6.912499999999999859e-09 0.000000000000000000e+00 +6.912999999999999599e-09 0.000000000000000000e+00 +6.913500000000000166e-09 0.000000000000000000e+00 +6.913999999999999906e-09 0.000000000000000000e+00 +6.914499999999999646e-09 0.000000000000000000e+00 +6.915000000000000213e-09 0.000000000000000000e+00 +6.915499999999999952e-09 0.000000000000000000e+00 +6.915999999999999692e-09 0.000000000000000000e+00 +6.916500000000000259e-09 0.000000000000000000e+00 +6.916999999999999999e-09 0.000000000000000000e+00 +6.917499999999999739e-09 0.000000000000000000e+00 +6.917999999999999478e-09 0.000000000000000000e+00 +6.918500000000000045e-09 0.000000000000000000e+00 +6.918999999999999785e-09 0.000000000000000000e+00 +6.919499999999999525e-09 0.000000000000000000e+00 +6.920000000000000092e-09 0.000000000000000000e+00 +6.920499999999999832e-09 0.000000000000000000e+00 +6.920999999999999571e-09 0.000000000000000000e+00 +6.921500000000000138e-09 0.000000000000000000e+00 +6.921999999999999878e-09 0.000000000000000000e+00 +6.922499999999999618e-09 0.000000000000000000e+00 +6.923000000000000185e-09 0.000000000000000000e+00 +6.923499999999999925e-09 0.000000000000000000e+00 +6.923999999999999664e-09 0.000000000000000000e+00 +6.924500000000000231e-09 0.000000000000000000e+00 +6.924999999999999971e-09 0.000000000000000000e+00 +6.925499999999999711e-09 0.000000000000000000e+00 +6.925999999999999451e-09 0.000000000000000000e+00 +6.926500000000000018e-09 0.000000000000000000e+00 +6.926999999999999757e-09 0.000000000000000000e+00 +6.927499999999999497e-09 0.000000000000000000e+00 +6.928000000000000064e-09 0.000000000000000000e+00 +6.928499999999999804e-09 0.000000000000000000e+00 +6.928999999999999544e-09 0.000000000000000000e+00 +6.929500000000000111e-09 0.000000000000000000e+00 +6.929999999999999851e-09 0.000000000000000000e+00 +6.930499999999999590e-09 0.000000000000000000e+00 +6.931000000000000157e-09 0.000000000000000000e+00 +6.931499999999999897e-09 0.000000000000000000e+00 +6.931999999999999637e-09 0.000000000000000000e+00 +6.932500000000000204e-09 0.000000000000000000e+00 +6.932999999999999944e-09 0.000000000000000000e+00 +6.933499999999999683e-09 0.000000000000000000e+00 +6.934000000000000250e-09 0.000000000000000000e+00 +6.934499999999999990e-09 0.000000000000000000e+00 +6.934999999999999730e-09 0.000000000000000000e+00 +6.935499999999999470e-09 0.000000000000000000e+00 +6.936000000000000037e-09 0.000000000000000000e+00 +6.936499999999999776e-09 0.000000000000000000e+00 +6.936999999999999516e-09 0.000000000000000000e+00 +6.937500000000000083e-09 0.000000000000000000e+00 +6.937999999999999823e-09 0.000000000000000000e+00 +6.938499999999999563e-09 0.000000000000000000e+00 +6.939000000000000130e-09 0.000000000000000000e+00 +6.939499999999999869e-09 0.000000000000000000e+00 +6.939999999999999609e-09 0.000000000000000000e+00 +6.940500000000000176e-09 0.000000000000000000e+00 +6.940999999999999916e-09 0.000000000000000000e+00 +6.941499999999999656e-09 0.000000000000000000e+00 +6.942000000000000223e-09 0.000000000000000000e+00 +6.942499999999999962e-09 0.000000000000000000e+00 +6.942999999999999702e-09 0.000000000000000000e+00 +6.943500000000000269e-09 0.000000000000000000e+00 +6.944000000000000009e-09 0.000000000000000000e+00 +6.944499999999999749e-09 0.000000000000000000e+00 +6.944999999999999489e-09 0.000000000000000000e+00 +6.945500000000000055e-09 0.000000000000000000e+00 +6.945999999999999795e-09 0.000000000000000000e+00 +6.946499999999999535e-09 0.000000000000000000e+00 +6.947000000000000102e-09 0.000000000000000000e+00 +6.947499999999999842e-09 0.000000000000000000e+00 +6.947999999999999582e-09 0.000000000000000000e+00 +6.948500000000000149e-09 0.000000000000000000e+00 +6.948999999999999888e-09 0.000000000000000000e+00 +6.949499999999999628e-09 0.000000000000000000e+00 +6.950000000000000195e-09 0.000000000000000000e+00 +6.950499999999999935e-09 0.000000000000000000e+00 +6.950999999999999675e-09 0.000000000000000000e+00 +6.951500000000000242e-09 0.000000000000000000e+00 +6.951999999999999981e-09 0.000000000000000000e+00 +6.952499999999999721e-09 0.000000000000000000e+00 +6.952999999999999461e-09 0.000000000000000000e+00 +6.953500000000000028e-09 0.000000000000000000e+00 +6.953999999999999768e-09 0.000000000000000000e+00 +6.954499999999999507e-09 0.000000000000000000e+00 +6.955000000000000074e-09 0.000000000000000000e+00 +6.955499999999999814e-09 0.000000000000000000e+00 +6.955999999999999554e-09 0.000000000000000000e+00 +6.956500000000000121e-09 0.000000000000000000e+00 +6.956999999999999861e-09 0.000000000000000000e+00 +6.957499999999999600e-09 0.000000000000000000e+00 +6.958000000000000167e-09 0.000000000000000000e+00 +6.958499999999999907e-09 0.000000000000000000e+00 +6.958999999999999647e-09 0.000000000000000000e+00 +6.959500000000000214e-09 0.000000000000000000e+00 +6.959999999999999954e-09 0.000000000000000000e+00 +6.960499999999999693e-09 0.000000000000000000e+00 +6.961000000000000260e-09 0.000000000000000000e+00 +6.961500000000000000e-09 0.000000000000000000e+00 +6.961999999999999740e-09 0.000000000000000000e+00 +6.962499999999999480e-09 0.000000000000000000e+00 +6.963000000000000047e-09 0.000000000000000000e+00 +6.963499999999999787e-09 0.000000000000000000e+00 +6.963999999999999526e-09 0.000000000000000000e+00 +6.964500000000000093e-09 0.000000000000000000e+00 +6.964999999999999833e-09 0.000000000000000000e+00 +6.965499999999999573e-09 0.000000000000000000e+00 +6.966000000000000140e-09 0.000000000000000000e+00 +6.966499999999999880e-09 0.000000000000000000e+00 +6.966999999999999619e-09 0.000000000000000000e+00 +6.967500000000000186e-09 0.000000000000000000e+00 +6.967999999999999926e-09 0.000000000000000000e+00 +6.968499999999999666e-09 0.000000000000000000e+00 +6.969000000000000233e-09 0.000000000000000000e+00 +6.969499999999999973e-09 0.000000000000000000e+00 +6.969999999999999712e-09 0.000000000000000000e+00 +6.970499999999999452e-09 0.000000000000000000e+00 +6.971000000000000019e-09 0.000000000000000000e+00 +6.971499999999999759e-09 0.000000000000000000e+00 +6.971999999999999499e-09 0.000000000000000000e+00 +6.972500000000000066e-09 0.000000000000000000e+00 +6.972999999999999805e-09 0.000000000000000000e+00 +6.973499999999999545e-09 0.000000000000000000e+00 +6.974000000000000112e-09 0.000000000000000000e+00 +6.974499999999999852e-09 0.000000000000000000e+00 +6.974999999999999592e-09 0.000000000000000000e+00 +6.975500000000000159e-09 0.000000000000000000e+00 +6.975999999999999898e-09 0.000000000000000000e+00 +6.976499999999999638e-09 0.000000000000000000e+00 +6.977000000000000205e-09 0.000000000000000000e+00 +6.977499999999999945e-09 0.000000000000000000e+00 +6.977999999999999685e-09 0.000000000000000000e+00 +6.978500000000000252e-09 0.000000000000000000e+00 +6.978999999999999992e-09 0.000000000000000000e+00 +6.979499999999999731e-09 0.000000000000000000e+00 +6.979999999999999471e-09 0.000000000000000000e+00 +6.980500000000000038e-09 0.000000000000000000e+00 +6.980999999999999778e-09 0.000000000000000000e+00 +6.981499999999999518e-09 0.000000000000000000e+00 +6.982000000000000085e-09 0.000000000000000000e+00 +6.982499999999999824e-09 0.000000000000000000e+00 +6.982999999999999564e-09 0.000000000000000000e+00 +6.983500000000000131e-09 0.000000000000000000e+00 +6.983999999999999871e-09 0.000000000000000000e+00 +6.984499999999999611e-09 0.000000000000000000e+00 +6.985000000000000178e-09 0.000000000000000000e+00 +6.985499999999999917e-09 0.000000000000000000e+00 +6.985999999999999657e-09 0.000000000000000000e+00 +6.986500000000000224e-09 0.000000000000000000e+00 +6.986999999999999964e-09 0.000000000000000000e+00 +6.987499999999999704e-09 0.000000000000000000e+00 +6.988000000000000271e-09 0.000000000000000000e+00 +6.988500000000000010e-09 0.000000000000000000e+00 +6.988999999999999750e-09 0.000000000000000000e+00 +6.989499999999999490e-09 0.000000000000000000e+00 +6.990000000000000057e-09 0.000000000000000000e+00 +6.990499999999999797e-09 0.000000000000000000e+00 +6.990999999999999536e-09 0.000000000000000000e+00 +6.991500000000000103e-09 0.000000000000000000e+00 +6.991999999999999843e-09 0.000000000000000000e+00 +6.992499999999999583e-09 0.000000000000000000e+00 +6.993000000000000150e-09 0.000000000000000000e+00 +6.993499999999999890e-09 0.000000000000000000e+00 +6.993999999999999630e-09 0.000000000000000000e+00 +6.994500000000000196e-09 0.000000000000000000e+00 +6.994999999999999936e-09 0.000000000000000000e+00 +6.995499999999999676e-09 0.000000000000000000e+00 +6.996000000000000243e-09 0.000000000000000000e+00 +6.996499999999999983e-09 0.000000000000000000e+00 +6.996999999999999723e-09 0.000000000000000000e+00 +6.997499999999999462e-09 0.000000000000000000e+00 +6.998000000000000029e-09 0.000000000000000000e+00 +6.998499999999999769e-09 0.000000000000000000e+00 +6.998999999999999509e-09 0.000000000000000000e+00 +6.999500000000000076e-09 0.000000000000000000e+00 +6.999999999999999816e-09 0.000000000000000000e+00 +7.000499999999999555e-09 0.000000000000000000e+00 +7.001000000000000122e-09 0.000000000000000000e+00 +7.001499999999999862e-09 0.000000000000000000e+00 +7.001999999999999602e-09 0.000000000000000000e+00 +7.002500000000000169e-09 0.000000000000000000e+00 +7.002999999999999909e-09 0.000000000000000000e+00 +7.003499999999999648e-09 0.000000000000000000e+00 +7.004000000000000215e-09 0.000000000000000000e+00 +7.004499999999999955e-09 0.000000000000000000e+00 +7.004999999999999695e-09 0.000000000000000000e+00 +7.005500000000000262e-09 0.000000000000000000e+00 +7.006000000000000002e-09 0.000000000000000000e+00 +7.006499999999999741e-09 0.000000000000000000e+00 +7.006999999999999481e-09 0.000000000000000000e+00 +7.007500000000000048e-09 0.000000000000000000e+00 +7.007999999999999788e-09 0.000000000000000000e+00 +7.008499999999999528e-09 0.000000000000000000e+00 +7.009000000000000095e-09 0.000000000000000000e+00 +7.009499999999999834e-09 0.000000000000000000e+00 +7.009999999999999574e-09 0.000000000000000000e+00 +7.010500000000000141e-09 0.000000000000000000e+00 +7.010999999999999881e-09 0.000000000000000000e+00 +7.011499999999999621e-09 0.000000000000000000e+00 +7.012000000000000188e-09 0.000000000000000000e+00 +7.012499999999999928e-09 0.000000000000000000e+00 +7.012999999999999667e-09 0.000000000000000000e+00 +7.013500000000000234e-09 0.000000000000000000e+00 +7.013999999999999974e-09 0.000000000000000000e+00 +7.014499999999999714e-09 0.000000000000000000e+00 +7.014999999999999454e-09 0.000000000000000000e+00 +7.015500000000000021e-09 0.000000000000000000e+00 +7.015999999999999760e-09 0.000000000000000000e+00 +7.016499999999999500e-09 0.000000000000000000e+00 +7.017000000000000067e-09 0.000000000000000000e+00 +7.017499999999999807e-09 0.000000000000000000e+00 +7.017999999999999547e-09 0.000000000000000000e+00 +7.018500000000000114e-09 0.000000000000000000e+00 +7.018999999999999853e-09 0.000000000000000000e+00 +7.019499999999999593e-09 0.000000000000000000e+00 +7.020000000000000160e-09 0.000000000000000000e+00 +7.020499999999999900e-09 0.000000000000000000e+00 +7.020999999999999640e-09 0.000000000000000000e+00 +7.021500000000000207e-09 0.000000000000000000e+00 +7.021999999999999946e-09 0.000000000000000000e+00 +7.022499999999999686e-09 0.000000000000000000e+00 +7.023000000000000253e-09 0.000000000000000000e+00 +7.023499999999999993e-09 0.000000000000000000e+00 +7.023999999999999733e-09 0.000000000000000000e+00 +7.024499999999999472e-09 0.000000000000000000e+00 +7.025000000000000039e-09 0.000000000000000000e+00 +7.025499999999999779e-09 0.000000000000000000e+00 +7.025999999999999519e-09 0.000000000000000000e+00 +7.026500000000000086e-09 0.000000000000000000e+00 +7.026999999999999826e-09 0.000000000000000000e+00 +7.027499999999999566e-09 0.000000000000000000e+00 +7.028000000000000132e-09 0.000000000000000000e+00 +7.028499999999999872e-09 0.000000000000000000e+00 +7.028999999999999612e-09 0.000000000000000000e+00 +7.029500000000000179e-09 0.000000000000000000e+00 +7.029999999999999919e-09 0.000000000000000000e+00 +7.030499999999999659e-09 0.000000000000000000e+00 +7.031000000000000226e-09 0.000000000000000000e+00 +7.031499999999999965e-09 0.000000000000000000e+00 +7.031999999999999705e-09 0.000000000000000000e+00 +7.032500000000000272e-09 0.000000000000000000e+00 +7.033000000000000012e-09 0.000000000000000000e+00 +7.033499999999999752e-09 0.000000000000000000e+00 +7.033999999999999491e-09 0.000000000000000000e+00 +7.034500000000000058e-09 0.000000000000000000e+00 +7.034999999999999798e-09 0.000000000000000000e+00 +7.035499999999999538e-09 0.000000000000000000e+00 +7.036000000000000105e-09 0.000000000000000000e+00 +7.036499999999999845e-09 0.000000000000000000e+00 +7.036999999999999584e-09 0.000000000000000000e+00 +7.037500000000000151e-09 0.000000000000000000e+00 +7.037999999999999891e-09 0.000000000000000000e+00 +7.038499999999999631e-09 0.000000000000000000e+00 +7.039000000000000198e-09 0.000000000000000000e+00 +7.039499999999999938e-09 0.000000000000000000e+00 +7.039999999999999677e-09 0.000000000000000000e+00 +7.040500000000000244e-09 0.000000000000000000e+00 +7.040999999999999984e-09 0.000000000000000000e+00 +7.041499999999999724e-09 0.000000000000000000e+00 +7.041999999999999464e-09 0.000000000000000000e+00 +7.042500000000000031e-09 0.000000000000000000e+00 +7.042999999999999770e-09 0.000000000000000000e+00 +7.043499999999999510e-09 0.000000000000000000e+00 +7.044000000000000077e-09 0.000000000000000000e+00 +7.044499999999999817e-09 0.000000000000000000e+00 +7.044999999999999557e-09 0.000000000000000000e+00 +7.045500000000000124e-09 0.000000000000000000e+00 +7.045999999999999864e-09 0.000000000000000000e+00 +7.046499999999999603e-09 0.000000000000000000e+00 +7.047000000000000170e-09 0.000000000000000000e+00 +7.047499999999999910e-09 0.000000000000000000e+00 +7.047999999999999650e-09 0.000000000000000000e+00 +7.048500000000000217e-09 0.000000000000000000e+00 +7.048999999999999957e-09 0.000000000000000000e+00 +7.049499999999999696e-09 0.000000000000000000e+00 +7.050000000000000263e-09 0.000000000000000000e+00 +7.050500000000000003e-09 0.000000000000000000e+00 +7.050999999999999743e-09 0.000000000000000000e+00 +7.051499999999999483e-09 0.000000000000000000e+00 +7.052000000000000050e-09 0.000000000000000000e+00 +7.052499999999999789e-09 0.000000000000000000e+00 +7.052999999999999529e-09 0.000000000000000000e+00 +7.053500000000000096e-09 0.000000000000000000e+00 +7.053999999999999836e-09 0.000000000000000000e+00 +7.054499999999999576e-09 0.000000000000000000e+00 +7.055000000000000143e-09 0.000000000000000000e+00 +7.055499999999999882e-09 0.000000000000000000e+00 +7.055999999999999622e-09 0.000000000000000000e+00 +7.056500000000000189e-09 0.000000000000000000e+00 +7.056999999999999929e-09 0.000000000000000000e+00 +7.057499999999999669e-09 0.000000000000000000e+00 +7.058000000000000236e-09 0.000000000000000000e+00 +7.058499999999999975e-09 0.000000000000000000e+00 +7.058999999999999715e-09 0.000000000000000000e+00 +7.059499999999999455e-09 0.000000000000000000e+00 +7.060000000000000022e-09 0.000000000000000000e+00 +7.060499999999999762e-09 0.000000000000000000e+00 +7.060999999999999502e-09 0.000000000000000000e+00 +7.061500000000000069e-09 0.000000000000000000e+00 +7.061999999999999808e-09 0.000000000000000000e+00 +7.062499999999999548e-09 0.000000000000000000e+00 +7.063000000000000115e-09 0.000000000000000000e+00 +7.063499999999999855e-09 0.000000000000000000e+00 +7.063999999999999595e-09 0.000000000000000000e+00 +7.064500000000000162e-09 0.000000000000000000e+00 +7.064999999999999901e-09 0.000000000000000000e+00 +7.065499999999999641e-09 0.000000000000000000e+00 +7.066000000000000208e-09 0.000000000000000000e+00 +7.066499999999999948e-09 0.000000000000000000e+00 +7.066999999999999688e-09 0.000000000000000000e+00 +7.067500000000000255e-09 0.000000000000000000e+00 +7.067999999999999994e-09 0.000000000000000000e+00 +7.068499999999999734e-09 0.000000000000000000e+00 +7.068999999999999474e-09 0.000000000000000000e+00 +7.069500000000000041e-09 0.000000000000000000e+00 +7.069999999999999781e-09 0.000000000000000000e+00 +7.070499999999999520e-09 0.000000000000000000e+00 +7.071000000000000087e-09 0.000000000000000000e+00 +7.071499999999999827e-09 0.000000000000000000e+00 +7.071999999999999567e-09 0.000000000000000000e+00 +7.072500000000000134e-09 0.000000000000000000e+00 +7.072999999999999874e-09 0.000000000000000000e+00 +7.073499999999999613e-09 0.000000000000000000e+00 +7.074000000000000180e-09 0.000000000000000000e+00 +7.074499999999999920e-09 0.000000000000000000e+00 +7.074999999999999660e-09 0.000000000000000000e+00 +7.075500000000000227e-09 0.000000000000000000e+00 +7.075999999999999967e-09 0.000000000000000000e+00 +7.076499999999999707e-09 0.000000000000000000e+00 +7.076999999999999446e-09 0.000000000000000000e+00 +7.077500000000000013e-09 0.000000000000000000e+00 +7.077999999999999753e-09 0.000000000000000000e+00 +7.078499999999999493e-09 0.000000000000000000e+00 +7.079000000000000060e-09 0.000000000000000000e+00 +7.079499999999999800e-09 0.000000000000000000e+00 +7.079999999999999539e-09 0.000000000000000000e+00 +7.080500000000000106e-09 0.000000000000000000e+00 +7.080999999999999846e-09 0.000000000000000000e+00 +7.081499999999999586e-09 0.000000000000000000e+00 +7.082000000000000153e-09 0.000000000000000000e+00 +7.082499999999999893e-09 0.000000000000000000e+00 +7.082999999999999632e-09 0.000000000000000000e+00 +7.083500000000000199e-09 0.000000000000000000e+00 +7.083999999999999939e-09 0.000000000000000000e+00 +7.084499999999999679e-09 0.000000000000000000e+00 +7.085000000000000246e-09 0.000000000000000000e+00 +7.085499999999999986e-09 0.000000000000000000e+00 +7.085999999999999725e-09 0.000000000000000000e+00 +7.086499999999999465e-09 0.000000000000000000e+00 +7.087000000000000032e-09 0.000000000000000000e+00 +7.087499999999999772e-09 0.000000000000000000e+00 +7.087999999999999512e-09 0.000000000000000000e+00 +7.088500000000000079e-09 0.000000000000000000e+00 +7.088999999999999818e-09 0.000000000000000000e+00 +7.089499999999999558e-09 0.000000000000000000e+00 +7.090000000000000125e-09 0.000000000000000000e+00 +7.090499999999999865e-09 0.000000000000000000e+00 +7.090999999999999605e-09 0.000000000000000000e+00 +7.091500000000000172e-09 0.000000000000000000e+00 +7.091999999999999911e-09 0.000000000000000000e+00 +7.092499999999999651e-09 0.000000000000000000e+00 +7.093000000000000218e-09 0.000000000000000000e+00 +7.093499999999999958e-09 0.000000000000000000e+00 +7.093999999999999698e-09 0.000000000000000000e+00 +7.094500000000000265e-09 0.000000000000000000e+00 +7.095000000000000005e-09 0.000000000000000000e+00 +7.095499999999999744e-09 0.000000000000000000e+00 +7.095999999999999484e-09 0.000000000000000000e+00 +7.096500000000000051e-09 0.000000000000000000e+00 +7.096999999999999791e-09 0.000000000000000000e+00 +7.097499999999999531e-09 0.000000000000000000e+00 +7.098000000000000098e-09 0.000000000000000000e+00 +7.098499999999999837e-09 0.000000000000000000e+00 +7.098999999999999577e-09 0.000000000000000000e+00 +7.099500000000000144e-09 0.000000000000000000e+00 +7.099999999999999884e-09 0.000000000000000000e+00 +7.100499999999999624e-09 0.000000000000000000e+00 +7.101000000000000191e-09 0.000000000000000000e+00 +7.101499999999999930e-09 0.000000000000000000e+00 +7.101999999999999670e-09 0.000000000000000000e+00 +7.102500000000000237e-09 0.000000000000000000e+00 +7.102999999999999977e-09 0.000000000000000000e+00 +7.103499999999999717e-09 0.000000000000000000e+00 +7.103999999999999456e-09 0.000000000000000000e+00 +7.104500000000000023e-09 0.000000000000000000e+00 +7.104999999999999763e-09 0.000000000000000000e+00 +7.105499999999999503e-09 0.000000000000000000e+00 +7.106000000000000070e-09 0.000000000000000000e+00 +7.106499999999999810e-09 0.000000000000000000e+00 +7.106999999999999549e-09 0.000000000000000000e+00 +7.107500000000000116e-09 0.000000000000000000e+00 +7.107999999999999856e-09 0.000000000000000000e+00 +7.108499999999999596e-09 0.000000000000000000e+00 +7.109000000000000163e-09 0.000000000000000000e+00 +7.109499999999999903e-09 0.000000000000000000e+00 +7.109999999999999643e-09 0.000000000000000000e+00 +7.110500000000000209e-09 0.000000000000000000e+00 +7.110999999999999949e-09 0.000000000000000000e+00 +7.111499999999999689e-09 0.000000000000000000e+00 +7.112000000000000256e-09 0.000000000000000000e+00 +7.112499999999999996e-09 0.000000000000000000e+00 +7.112999999999999736e-09 0.000000000000000000e+00 +7.113499999999999475e-09 0.000000000000000000e+00 +7.114000000000000042e-09 0.000000000000000000e+00 +7.114499999999999782e-09 0.000000000000000000e+00 +7.114999999999999522e-09 0.000000000000000000e+00 +7.115500000000000089e-09 0.000000000000000000e+00 +7.115999999999999829e-09 0.000000000000000000e+00 +7.116499999999999568e-09 0.000000000000000000e+00 +7.117000000000000135e-09 0.000000000000000000e+00 +7.117499999999999875e-09 0.000000000000000000e+00 +7.117999999999999615e-09 0.000000000000000000e+00 +7.118500000000000182e-09 0.000000000000000000e+00 +7.118999999999999922e-09 0.000000000000000000e+00 +7.119499999999999661e-09 0.000000000000000000e+00 +7.120000000000000228e-09 0.000000000000000000e+00 +7.120499999999999968e-09 0.000000000000000000e+00 +7.120999999999999708e-09 0.000000000000000000e+00 +7.121499999999999448e-09 0.000000000000000000e+00 +7.122000000000000015e-09 0.000000000000000000e+00 +7.122499999999999754e-09 0.000000000000000000e+00 +7.122999999999999494e-09 0.000000000000000000e+00 +7.123500000000000061e-09 0.000000000000000000e+00 +7.123999999999999801e-09 0.000000000000000000e+00 +7.124499999999999541e-09 0.000000000000000000e+00 +7.125000000000000108e-09 0.000000000000000000e+00 +7.125499999999999847e-09 0.000000000000000000e+00 +7.125999999999999587e-09 0.000000000000000000e+00 +7.126500000000000154e-09 0.000000000000000000e+00 +7.126999999999999894e-09 0.000000000000000000e+00 +7.127499999999999634e-09 0.000000000000000000e+00 +7.128000000000000201e-09 0.000000000000000000e+00 +7.128499999999999941e-09 0.000000000000000000e+00 +7.128999999999999680e-09 0.000000000000000000e+00 +7.129500000000000247e-09 0.000000000000000000e+00 +7.129999999999999987e-09 0.000000000000000000e+00 +7.130499999999999727e-09 0.000000000000000000e+00 +7.130999999999999467e-09 0.000000000000000000e+00 +7.131500000000000034e-09 0.000000000000000000e+00 +7.131999999999999773e-09 0.000000000000000000e+00 +7.132499999999999513e-09 0.000000000000000000e+00 +7.133000000000000080e-09 0.000000000000000000e+00 +7.133499999999999820e-09 0.000000000000000000e+00 +7.133999999999999560e-09 0.000000000000000000e+00 +7.134500000000000127e-09 0.000000000000000000e+00 +7.134999999999999866e-09 0.000000000000000000e+00 +7.135499999999999606e-09 0.000000000000000000e+00 +7.136000000000000173e-09 0.000000000000000000e+00 +7.136499999999999913e-09 0.000000000000000000e+00 +7.136999999999999653e-09 0.000000000000000000e+00 +7.137500000000000220e-09 0.000000000000000000e+00 +7.137999999999999959e-09 0.000000000000000000e+00 +7.138499999999999699e-09 0.000000000000000000e+00 +7.139000000000000266e-09 0.000000000000000000e+00 +7.139500000000000006e-09 0.000000000000000000e+00 +7.139999999999999746e-09 0.000000000000000000e+00 +7.140499999999999486e-09 0.000000000000000000e+00 +7.141000000000000052e-09 0.000000000000000000e+00 +7.141499999999999792e-09 0.000000000000000000e+00 +7.141999999999999532e-09 0.000000000000000000e+00 +7.142500000000000099e-09 0.000000000000000000e+00 +7.142999999999999839e-09 0.000000000000000000e+00 +7.143499999999999579e-09 0.000000000000000000e+00 +7.144000000000000146e-09 0.000000000000000000e+00 +7.144499999999999885e-09 0.000000000000000000e+00 +7.144999999999999625e-09 0.000000000000000000e+00 +7.145500000000000192e-09 0.000000000000000000e+00 +7.145999999999999932e-09 0.000000000000000000e+00 +7.146499999999999672e-09 0.000000000000000000e+00 +7.147000000000000239e-09 0.000000000000000000e+00 +7.147499999999999978e-09 0.000000000000000000e+00 +7.147999999999999718e-09 0.000000000000000000e+00 +7.148499999999999458e-09 0.000000000000000000e+00 +7.149000000000000025e-09 0.000000000000000000e+00 +7.149499999999999765e-09 0.000000000000000000e+00 +7.149999999999999504e-09 0.000000000000000000e+00 +7.150500000000000071e-09 0.000000000000000000e+00 +7.150999999999999811e-09 0.000000000000000000e+00 +7.151499999999999551e-09 0.000000000000000000e+00 +7.152000000000000118e-09 0.000000000000000000e+00 +7.152499999999999858e-09 0.000000000000000000e+00 +7.152999999999999597e-09 0.000000000000000000e+00 +7.153500000000000164e-09 0.000000000000000000e+00 +7.153999999999999904e-09 0.000000000000000000e+00 +7.154499999999999644e-09 0.000000000000000000e+00 +7.155000000000000211e-09 0.000000000000000000e+00 +7.155499999999999951e-09 0.000000000000000000e+00 +7.155999999999999690e-09 0.000000000000000000e+00 +7.156500000000000257e-09 0.000000000000000000e+00 +7.156999999999999997e-09 0.000000000000000000e+00 +7.157499999999999737e-09 0.000000000000000000e+00 +7.157999999999999477e-09 0.000000000000000000e+00 +7.158500000000000044e-09 0.000000000000000000e+00 +7.158999999999999784e-09 0.000000000000000000e+00 +7.159499999999999523e-09 0.000000000000000000e+00 +7.160000000000000090e-09 0.000000000000000000e+00 +7.160499999999999830e-09 0.000000000000000000e+00 +7.160999999999999570e-09 0.000000000000000000e+00 +7.161500000000000137e-09 0.000000000000000000e+00 +7.161999999999999877e-09 0.000000000000000000e+00 +7.162499999999999616e-09 0.000000000000000000e+00 +7.163000000000000183e-09 0.000000000000000000e+00 +7.163499999999999923e-09 0.000000000000000000e+00 +7.163999999999999663e-09 0.000000000000000000e+00 +7.164500000000000230e-09 0.000000000000000000e+00 +7.164999999999999970e-09 0.000000000000000000e+00 +7.165499999999999709e-09 0.000000000000000000e+00 +7.165999999999999449e-09 0.000000000000000000e+00 +7.166500000000000016e-09 0.000000000000000000e+00 +7.166999999999999756e-09 0.000000000000000000e+00 +7.167499999999999496e-09 0.000000000000000000e+00 +7.168000000000000063e-09 0.000000000000000000e+00 +7.168499999999999802e-09 0.000000000000000000e+00 +7.168999999999999542e-09 0.000000000000000000e+00 +7.169500000000000109e-09 0.000000000000000000e+00 +7.169999999999999849e-09 0.000000000000000000e+00 +7.170499999999999589e-09 0.000000000000000000e+00 +7.171000000000000156e-09 0.000000000000000000e+00 +7.171499999999999895e-09 0.000000000000000000e+00 +7.171999999999999635e-09 0.000000000000000000e+00 +7.172500000000000202e-09 0.000000000000000000e+00 +7.172999999999999942e-09 0.000000000000000000e+00 +7.173499999999999682e-09 0.000000000000000000e+00 +7.174000000000000249e-09 0.000000000000000000e+00 +7.174499999999999988e-09 0.000000000000000000e+00 +7.174999999999999728e-09 0.000000000000000000e+00 +7.175499999999999468e-09 0.000000000000000000e+00 +7.176000000000000035e-09 0.000000000000000000e+00 +7.176499999999999775e-09 0.000000000000000000e+00 +7.176999999999999515e-09 0.000000000000000000e+00 +7.177500000000000082e-09 0.000000000000000000e+00 +7.177999999999999821e-09 0.000000000000000000e+00 +7.178499999999999561e-09 0.000000000000000000e+00 +7.179000000000000128e-09 0.000000000000000000e+00 +7.179499999999999868e-09 0.000000000000000000e+00 +7.179999999999999608e-09 0.000000000000000000e+00 +7.180500000000000175e-09 0.000000000000000000e+00 +7.180999999999999914e-09 0.000000000000000000e+00 +7.181499999999999654e-09 0.000000000000000000e+00 +7.182000000000000221e-09 0.000000000000000000e+00 +7.182499999999999961e-09 0.000000000000000000e+00 +7.182999999999999701e-09 0.000000000000000000e+00 +7.183500000000000268e-09 0.000000000000000000e+00 +7.184000000000000007e-09 0.000000000000000000e+00 +7.184499999999999747e-09 0.000000000000000000e+00 +7.184999999999999487e-09 0.000000000000000000e+00 +7.185500000000000054e-09 0.000000000000000000e+00 +7.185999999999999794e-09 0.000000000000000000e+00 +7.186499999999999533e-09 0.000000000000000000e+00 +7.187000000000000100e-09 0.000000000000000000e+00 +7.187499999999999840e-09 0.000000000000000000e+00 +7.187999999999999580e-09 0.000000000000000000e+00 +7.188500000000000147e-09 0.000000000000000000e+00 +7.188999999999999887e-09 0.000000000000000000e+00 +7.189499999999999626e-09 0.000000000000000000e+00 +7.190000000000000193e-09 0.000000000000000000e+00 +7.190499999999999933e-09 0.000000000000000000e+00 +7.190999999999999673e-09 0.000000000000000000e+00 +7.191500000000000240e-09 0.000000000000000000e+00 +7.191999999999999980e-09 0.000000000000000000e+00 +7.192499999999999720e-09 0.000000000000000000e+00 +7.192999999999999459e-09 0.000000000000000000e+00 +7.193500000000000026e-09 0.000000000000000000e+00 +7.193999999999999766e-09 0.000000000000000000e+00 +7.194499999999999506e-09 0.000000000000000000e+00 +7.195000000000000073e-09 0.000000000000000000e+00 +7.195499999999999813e-09 0.000000000000000000e+00 +7.195999999999999552e-09 0.000000000000000000e+00 +7.196500000000000119e-09 0.000000000000000000e+00 +7.196999999999999859e-09 0.000000000000000000e+00 +7.197499999999999599e-09 0.000000000000000000e+00 +7.198000000000000166e-09 0.000000000000000000e+00 +7.198499999999999906e-09 0.000000000000000000e+00 +7.198999999999999645e-09 0.000000000000000000e+00 +7.199500000000000212e-09 0.000000000000000000e+00 +7.199999999999999952e-09 0.000000000000000000e+00 +7.200499999999999692e-09 0.000000000000000000e+00 +7.201000000000000259e-09 0.000000000000000000e+00 +7.201499999999999999e-09 0.000000000000000000e+00 +7.201999999999999738e-09 0.000000000000000000e+00 +7.202499999999999478e-09 0.000000000000000000e+00 +7.203000000000000045e-09 0.000000000000000000e+00 +7.203499999999999785e-09 0.000000000000000000e+00 +7.203999999999999525e-09 0.000000000000000000e+00 +7.204500000000000092e-09 0.000000000000000000e+00 +7.204999999999999831e-09 0.000000000000000000e+00 +7.205499999999999571e-09 0.000000000000000000e+00 +7.206000000000000138e-09 0.000000000000000000e+00 +7.206499999999999878e-09 0.000000000000000000e+00 +7.206999999999999618e-09 0.000000000000000000e+00 +7.207500000000000185e-09 0.000000000000000000e+00 +7.207999999999999924e-09 0.000000000000000000e+00 +7.208499999999999664e-09 0.000000000000000000e+00 +7.209000000000000231e-09 0.000000000000000000e+00 +7.209499999999999971e-09 0.000000000000000000e+00 +7.209999999999999711e-09 0.000000000000000000e+00 +7.210499999999999451e-09 0.000000000000000000e+00 +7.211000000000000018e-09 0.000000000000000000e+00 +7.211499999999999757e-09 0.000000000000000000e+00 +7.211999999999999497e-09 0.000000000000000000e+00 +7.212500000000000064e-09 0.000000000000000000e+00 +7.212999999999999804e-09 0.000000000000000000e+00 +7.213499999999999544e-09 0.000000000000000000e+00 +7.214000000000000111e-09 0.000000000000000000e+00 +7.214499999999999850e-09 0.000000000000000000e+00 +7.214999999999999590e-09 0.000000000000000000e+00 +7.215500000000000157e-09 0.000000000000000000e+00 +7.215999999999999897e-09 0.000000000000000000e+00 +7.216499999999999637e-09 0.000000000000000000e+00 +7.217000000000000204e-09 0.000000000000000000e+00 +7.217499999999999943e-09 0.000000000000000000e+00 +7.217999999999999683e-09 0.000000000000000000e+00 +7.218500000000000250e-09 0.000000000000000000e+00 +7.218999999999999990e-09 0.000000000000000000e+00 +7.219499999999999730e-09 0.000000000000000000e+00 +7.219999999999999469e-09 0.000000000000000000e+00 +7.220500000000000036e-09 0.000000000000000000e+00 +7.220999999999999776e-09 0.000000000000000000e+00 +7.221499999999999516e-09 0.000000000000000000e+00 +7.222000000000000083e-09 0.000000000000000000e+00 +7.222499999999999823e-09 0.000000000000000000e+00 +7.222999999999999563e-09 0.000000000000000000e+00 +7.223500000000000129e-09 0.000000000000000000e+00 +7.223999999999999869e-09 0.000000000000000000e+00 +7.224499999999999609e-09 0.000000000000000000e+00 +7.225000000000000176e-09 0.000000000000000000e+00 +7.225499999999999916e-09 0.000000000000000000e+00 +7.225999999999999656e-09 0.000000000000000000e+00 +7.226500000000000222e-09 0.000000000000000000e+00 +7.226999999999999962e-09 0.000000000000000000e+00 +7.227499999999999702e-09 0.000000000000000000e+00 +7.227999999999999442e-09 0.000000000000000000e+00 +7.228500000000000009e-09 0.000000000000000000e+00 +7.228999999999999749e-09 0.000000000000000000e+00 +7.229499999999999488e-09 0.000000000000000000e+00 +7.230000000000000055e-09 0.000000000000000000e+00 +7.230499999999999795e-09 0.000000000000000000e+00 +7.230999999999999535e-09 0.000000000000000000e+00 +7.231500000000000102e-09 0.000000000000000000e+00 +7.231999999999999842e-09 0.000000000000000000e+00 +7.232499999999999581e-09 0.000000000000000000e+00 +7.233000000000000148e-09 0.000000000000000000e+00 +7.233499999999999888e-09 0.000000000000000000e+00 +7.233999999999999628e-09 0.000000000000000000e+00 +7.234500000000000195e-09 0.000000000000000000e+00 +7.234999999999999935e-09 0.000000000000000000e+00 +7.235499999999999674e-09 0.000000000000000000e+00 +7.236000000000000241e-09 0.000000000000000000e+00 +7.236499999999999981e-09 0.000000000000000000e+00 +7.236999999999999721e-09 0.000000000000000000e+00 +7.237499999999999461e-09 0.000000000000000000e+00 +7.238000000000000028e-09 0.000000000000000000e+00 +7.238499999999999767e-09 0.000000000000000000e+00 +7.238999999999999507e-09 0.000000000000000000e+00 +7.239500000000000074e-09 0.000000000000000000e+00 +7.239999999999999814e-09 0.000000000000000000e+00 +7.240499999999999554e-09 0.000000000000000000e+00 +7.241000000000000121e-09 0.000000000000000000e+00 +7.241499999999999861e-09 0.000000000000000000e+00 +7.241999999999999600e-09 0.000000000000000000e+00 +7.242500000000000167e-09 0.000000000000000000e+00 +7.242999999999999907e-09 0.000000000000000000e+00 +7.243499999999999647e-09 0.000000000000000000e+00 +7.244000000000000214e-09 0.000000000000000000e+00 +7.244499999999999954e-09 0.000000000000000000e+00 +7.244999999999999693e-09 0.000000000000000000e+00 +7.245500000000000260e-09 0.000000000000000000e+00 +7.246000000000000000e-09 0.000000000000000000e+00 +7.246499999999999740e-09 0.000000000000000000e+00 +7.246999999999999480e-09 0.000000000000000000e+00 +7.247500000000000047e-09 0.000000000000000000e+00 +7.247999999999999786e-09 0.000000000000000000e+00 +7.248499999999999526e-09 0.000000000000000000e+00 +7.249000000000000093e-09 0.000000000000000000e+00 +7.249499999999999833e-09 0.000000000000000000e+00 +7.249999999999999573e-09 0.000000000000000000e+00 +7.250500000000000140e-09 0.000000000000000000e+00 +7.250999999999999879e-09 0.000000000000000000e+00 +7.251499999999999619e-09 0.000000000000000000e+00 +7.252000000000000186e-09 0.000000000000000000e+00 +7.252499999999999926e-09 0.000000000000000000e+00 +7.252999999999999666e-09 0.000000000000000000e+00 +7.253500000000000233e-09 0.000000000000000000e+00 +7.253999999999999972e-09 0.000000000000000000e+00 +7.254499999999999712e-09 0.000000000000000000e+00 +7.254999999999999452e-09 0.000000000000000000e+00 +7.255500000000000019e-09 0.000000000000000000e+00 +7.255999999999999759e-09 0.000000000000000000e+00 +7.256499999999999499e-09 0.000000000000000000e+00 +7.257000000000000065e-09 0.000000000000000000e+00 +7.257499999999999805e-09 0.000000000000000000e+00 +7.257999999999999545e-09 0.000000000000000000e+00 +7.258500000000000112e-09 0.000000000000000000e+00 +7.258999999999999852e-09 0.000000000000000000e+00 +7.259499999999999592e-09 0.000000000000000000e+00 +7.260000000000000159e-09 0.000000000000000000e+00 +7.260499999999999898e-09 0.000000000000000000e+00 +7.260999999999999638e-09 0.000000000000000000e+00 +7.261500000000000205e-09 0.000000000000000000e+00 +7.261999999999999945e-09 0.000000000000000000e+00 +7.262499999999999685e-09 0.000000000000000000e+00 +7.263000000000000252e-09 0.000000000000000000e+00 +7.263499999999999991e-09 0.000000000000000000e+00 +7.263999999999999731e-09 0.000000000000000000e+00 +7.264499999999999471e-09 0.000000000000000000e+00 +7.265000000000000038e-09 0.000000000000000000e+00 +7.265499999999999778e-09 0.000000000000000000e+00 +7.265999999999999517e-09 0.000000000000000000e+00 +7.266500000000000084e-09 0.000000000000000000e+00 +7.266999999999999824e-09 0.000000000000000000e+00 +7.267499999999999564e-09 0.000000000000000000e+00 +7.268000000000000131e-09 0.000000000000000000e+00 +7.268499999999999871e-09 0.000000000000000000e+00 +7.268999999999999610e-09 0.000000000000000000e+00 +7.269500000000000177e-09 0.000000000000000000e+00 +7.269999999999999917e-09 0.000000000000000000e+00 +7.270499999999999657e-09 0.000000000000000000e+00 +7.271000000000000224e-09 0.000000000000000000e+00 +7.271499999999999964e-09 0.000000000000000000e+00 +7.271999999999999703e-09 0.000000000000000000e+00 +7.272499999999999443e-09 0.000000000000000000e+00 +7.273000000000000010e-09 0.000000000000000000e+00 +7.273499999999999750e-09 0.000000000000000000e+00 +7.273999999999999490e-09 0.000000000000000000e+00 +7.274500000000000057e-09 0.000000000000000000e+00 +7.274999999999999797e-09 0.000000000000000000e+00 +7.275499999999999536e-09 0.000000000000000000e+00 +7.276000000000000103e-09 0.000000000000000000e+00 +7.276499999999999843e-09 0.000000000000000000e+00 +7.276999999999999583e-09 0.000000000000000000e+00 +7.277500000000000150e-09 0.000000000000000000e+00 +7.277999999999999890e-09 0.000000000000000000e+00 +7.278499999999999629e-09 0.000000000000000000e+00 +7.279000000000000196e-09 0.000000000000000000e+00 +7.279499999999999936e-09 0.000000000000000000e+00 +7.279999999999999676e-09 0.000000000000000000e+00 +7.280500000000000243e-09 0.000000000000000000e+00 +7.280999999999999983e-09 0.000000000000000000e+00 +7.281499999999999722e-09 0.000000000000000000e+00 +7.281999999999999462e-09 0.000000000000000000e+00 +7.282500000000000029e-09 0.000000000000000000e+00 +7.282999999999999769e-09 0.000000000000000000e+00 +7.283499999999999509e-09 0.000000000000000000e+00 +7.284000000000000076e-09 0.000000000000000000e+00 +7.284499999999999815e-09 0.000000000000000000e+00 +7.284999999999999555e-09 0.000000000000000000e+00 +7.285500000000000122e-09 0.000000000000000000e+00 +7.285999999999999862e-09 0.000000000000000000e+00 +7.286499999999999602e-09 0.000000000000000000e+00 +7.287000000000000169e-09 0.000000000000000000e+00 +7.287499999999999908e-09 0.000000000000000000e+00 +7.287999999999999648e-09 0.000000000000000000e+00 +7.288500000000000215e-09 0.000000000000000000e+00 +7.288999999999999955e-09 0.000000000000000000e+00 +7.289499999999999695e-09 0.000000000000000000e+00 +7.290000000000000262e-09 0.000000000000000000e+00 +7.290500000000000001e-09 0.000000000000000000e+00 +7.290999999999999741e-09 0.000000000000000000e+00 +7.291499999999999481e-09 0.000000000000000000e+00 +7.292000000000000048e-09 0.000000000000000000e+00 +7.292499999999999788e-09 0.000000000000000000e+00 +7.292999999999999528e-09 0.000000000000000000e+00 +7.293500000000000095e-09 0.000000000000000000e+00 +7.293999999999999834e-09 0.000000000000000000e+00 +7.294499999999999574e-09 0.000000000000000000e+00 +7.295000000000000141e-09 0.000000000000000000e+00 +7.295499999999999881e-09 0.000000000000000000e+00 +7.295999999999999621e-09 0.000000000000000000e+00 +7.296500000000000188e-09 0.000000000000000000e+00 +7.296999999999999927e-09 0.000000000000000000e+00 +7.297499999999999667e-09 0.000000000000000000e+00 +7.298000000000000234e-09 0.000000000000000000e+00 +7.298499999999999974e-09 0.000000000000000000e+00 +7.298999999999999714e-09 0.000000000000000000e+00 +7.299499999999999453e-09 0.000000000000000000e+00 +7.300000000000000020e-09 0.000000000000000000e+00 +7.300499999999999760e-09 0.000000000000000000e+00 +7.300999999999999500e-09 0.000000000000000000e+00 +7.301500000000000067e-09 0.000000000000000000e+00 +7.301999999999999807e-09 0.000000000000000000e+00 +7.302499999999999546e-09 0.000000000000000000e+00 +7.303000000000000113e-09 0.000000000000000000e+00 +7.303499999999999853e-09 0.000000000000000000e+00 +7.303999999999999593e-09 0.000000000000000000e+00 +7.304500000000000160e-09 0.000000000000000000e+00 +7.304999999999999900e-09 0.000000000000000000e+00 +7.305499999999999640e-09 0.000000000000000000e+00 +7.306000000000000206e-09 0.000000000000000000e+00 +7.306499999999999946e-09 0.000000000000000000e+00 +7.306999999999999686e-09 0.000000000000000000e+00 +7.307500000000000253e-09 0.000000000000000000e+00 +7.307999999999999993e-09 0.000000000000000000e+00 +7.308499999999999733e-09 0.000000000000000000e+00 +7.308999999999999472e-09 0.000000000000000000e+00 +7.309500000000000039e-09 0.000000000000000000e+00 +7.309999999999999779e-09 0.000000000000000000e+00 +7.310499999999999519e-09 0.000000000000000000e+00 +7.311000000000000086e-09 0.000000000000000000e+00 +7.311499999999999826e-09 0.000000000000000000e+00 +7.311999999999999565e-09 0.000000000000000000e+00 +7.312500000000000132e-09 0.000000000000000000e+00 +7.312999999999999872e-09 0.000000000000000000e+00 +7.313499999999999612e-09 0.000000000000000000e+00 +7.314000000000000179e-09 0.000000000000000000e+00 +7.314499999999999919e-09 0.000000000000000000e+00 +7.314999999999999658e-09 0.000000000000000000e+00 +7.315500000000000225e-09 0.000000000000000000e+00 +7.315999999999999965e-09 0.000000000000000000e+00 +7.316499999999999705e-09 0.000000000000000000e+00 +7.316999999999999445e-09 0.000000000000000000e+00 +7.317500000000000012e-09 0.000000000000000000e+00 +7.317999999999999751e-09 0.000000000000000000e+00 +7.318499999999999491e-09 0.000000000000000000e+00 +7.319000000000000058e-09 0.000000000000000000e+00 +7.319499999999999798e-09 0.000000000000000000e+00 +7.319999999999999538e-09 0.000000000000000000e+00 +7.320500000000000105e-09 0.000000000000000000e+00 +7.320999999999999844e-09 0.000000000000000000e+00 +7.321499999999999584e-09 0.000000000000000000e+00 +7.322000000000000151e-09 0.000000000000000000e+00 +7.322499999999999891e-09 0.000000000000000000e+00 +7.322999999999999631e-09 0.000000000000000000e+00 +7.323500000000000198e-09 0.000000000000000000e+00 +7.323999999999999938e-09 0.000000000000000000e+00 +7.324499999999999677e-09 0.000000000000000000e+00 +7.325000000000000244e-09 0.000000000000000000e+00 +7.325499999999999984e-09 0.000000000000000000e+00 +7.325999999999999724e-09 0.000000000000000000e+00 +7.326499999999999464e-09 0.000000000000000000e+00 +7.327000000000000031e-09 0.000000000000000000e+00 +7.327499999999999770e-09 0.000000000000000000e+00 +7.327999999999999510e-09 0.000000000000000000e+00 +7.328500000000000077e-09 0.000000000000000000e+00 +7.328999999999999817e-09 0.000000000000000000e+00 +7.329499999999999557e-09 0.000000000000000000e+00 +7.330000000000000124e-09 0.000000000000000000e+00 +7.330499999999999863e-09 0.000000000000000000e+00 +7.330999999999999603e-09 0.000000000000000000e+00 +7.331500000000000170e-09 0.000000000000000000e+00 +7.331999999999999910e-09 0.000000000000000000e+00 +7.332499999999999650e-09 0.000000000000000000e+00 +7.333000000000000217e-09 0.000000000000000000e+00 +7.333499999999999956e-09 0.000000000000000000e+00 +7.333999999999999696e-09 0.000000000000000000e+00 +7.334500000000000263e-09 0.000000000000000000e+00 +7.335000000000000003e-09 0.000000000000000000e+00 +7.335499999999999743e-09 0.000000000000000000e+00 +7.335999999999999482e-09 0.000000000000000000e+00 +7.336500000000000049e-09 0.000000000000000000e+00 +7.336999999999999789e-09 0.000000000000000000e+00 +7.337499999999999529e-09 0.000000000000000000e+00 +7.338000000000000096e-09 0.000000000000000000e+00 +7.338499999999999836e-09 0.000000000000000000e+00 +7.338999999999999576e-09 0.000000000000000000e+00 +7.339500000000000142e-09 0.000000000000000000e+00 +7.339999999999999882e-09 0.000000000000000000e+00 +7.340499999999999622e-09 0.000000000000000000e+00 +7.341000000000000189e-09 0.000000000000000000e+00 +7.341499999999999929e-09 0.000000000000000000e+00 +7.341999999999999669e-09 0.000000000000000000e+00 +7.342500000000000236e-09 0.000000000000000000e+00 +7.342999999999999975e-09 0.000000000000000000e+00 +7.343499999999999715e-09 0.000000000000000000e+00 +7.343999999999999455e-09 0.000000000000000000e+00 +7.344500000000000022e-09 0.000000000000000000e+00 +7.344999999999999762e-09 0.000000000000000000e+00 +7.345499999999999501e-09 0.000000000000000000e+00 +7.346000000000000068e-09 0.000000000000000000e+00 +7.346499999999999808e-09 0.000000000000000000e+00 +7.346999999999999548e-09 0.000000000000000000e+00 +7.347500000000000115e-09 0.000000000000000000e+00 +7.347999999999999855e-09 0.000000000000000000e+00 +7.348499999999999594e-09 0.000000000000000000e+00 +7.349000000000000161e-09 0.000000000000000000e+00 +7.349499999999999901e-09 0.000000000000000000e+00 +7.349999999999999641e-09 0.000000000000000000e+00 +7.350500000000000208e-09 0.000000000000000000e+00 +7.350999999999999948e-09 0.000000000000000000e+00 +7.351499999999999687e-09 0.000000000000000000e+00 +7.352000000000000254e-09 0.000000000000000000e+00 +7.352499999999999994e-09 0.000000000000000000e+00 +7.352999999999999734e-09 0.000000000000000000e+00 +7.353499999999999474e-09 0.000000000000000000e+00 +7.354000000000000041e-09 0.000000000000000000e+00 +7.354499999999999780e-09 0.000000000000000000e+00 +7.354999999999999520e-09 0.000000000000000000e+00 +7.355500000000000087e-09 0.000000000000000000e+00 +7.355999999999999827e-09 0.000000000000000000e+00 +7.356499999999999567e-09 0.000000000000000000e+00 +7.357000000000000134e-09 0.000000000000000000e+00 +7.357499999999999874e-09 0.000000000000000000e+00 +7.357999999999999613e-09 0.000000000000000000e+00 +7.358500000000000180e-09 0.000000000000000000e+00 +7.358999999999999920e-09 0.000000000000000000e+00 +7.359499999999999660e-09 0.000000000000000000e+00 +7.360000000000000227e-09 0.000000000000000000e+00 +7.360499999999999967e-09 0.000000000000000000e+00 +7.360999999999999706e-09 0.000000000000000000e+00 +7.361499999999999446e-09 0.000000000000000000e+00 +7.362000000000000013e-09 0.000000000000000000e+00 +7.362499999999999753e-09 0.000000000000000000e+00 +7.362999999999999493e-09 0.000000000000000000e+00 +7.363500000000000060e-09 0.000000000000000000e+00 +7.363999999999999799e-09 0.000000000000000000e+00 +7.364499999999999539e-09 0.000000000000000000e+00 +7.365000000000000106e-09 0.000000000000000000e+00 +7.365499999999999846e-09 0.000000000000000000e+00 +7.365999999999999586e-09 0.000000000000000000e+00 +7.366500000000000153e-09 0.000000000000000000e+00 +7.366999999999999892e-09 0.000000000000000000e+00 +7.367499999999999632e-09 0.000000000000000000e+00 +7.368000000000000199e-09 0.000000000000000000e+00 +7.368499999999999939e-09 0.000000000000000000e+00 +7.368999999999999679e-09 0.000000000000000000e+00 +7.369500000000000246e-09 0.000000000000000000e+00 +7.369999999999999985e-09 0.000000000000000000e+00 +7.370499999999999725e-09 0.000000000000000000e+00 +7.370999999999999465e-09 0.000000000000000000e+00 +7.371500000000000032e-09 0.000000000000000000e+00 +7.371999999999999772e-09 0.000000000000000000e+00 +7.372499999999999512e-09 0.000000000000000000e+00 +7.373000000000000078e-09 0.000000000000000000e+00 +7.373499999999999818e-09 0.000000000000000000e+00 +7.373999999999999558e-09 0.000000000000000000e+00 +7.374500000000000125e-09 0.000000000000000000e+00 +7.374999999999999865e-09 0.000000000000000000e+00 +7.375499999999999605e-09 0.000000000000000000e+00 +7.376000000000000172e-09 0.000000000000000000e+00 +7.376499999999999911e-09 0.000000000000000000e+00 +7.376999999999999651e-09 0.000000000000000000e+00 +7.377500000000000218e-09 0.000000000000000000e+00 +7.377999999999999958e-09 0.000000000000000000e+00 +7.378499999999999698e-09 0.000000000000000000e+00 +7.379000000000000265e-09 0.000000000000000000e+00 +7.379500000000000004e-09 0.000000000000000000e+00 +7.379999999999999744e-09 0.000000000000000000e+00 +7.380499999999999484e-09 0.000000000000000000e+00 +7.381000000000000051e-09 0.000000000000000000e+00 +7.381499999999999791e-09 0.000000000000000000e+00 +7.381999999999999530e-09 0.000000000000000000e+00 +7.382500000000000097e-09 0.000000000000000000e+00 +7.382999999999999837e-09 0.000000000000000000e+00 +7.383499999999999577e-09 0.000000000000000000e+00 +7.384000000000000144e-09 0.000000000000000000e+00 +7.384499999999999884e-09 0.000000000000000000e+00 +7.384999999999999623e-09 0.000000000000000000e+00 +7.385500000000000190e-09 0.000000000000000000e+00 +7.385999999999999930e-09 0.000000000000000000e+00 +7.386499999999999670e-09 0.000000000000000000e+00 +7.387000000000000237e-09 0.000000000000000000e+00 +7.387499999999999977e-09 0.000000000000000000e+00 +7.387999999999999717e-09 0.000000000000000000e+00 +7.388499999999999456e-09 0.000000000000000000e+00 +7.389000000000000023e-09 0.000000000000000000e+00 +7.389499999999999763e-09 0.000000000000000000e+00 +7.389999999999999503e-09 0.000000000000000000e+00 +7.390500000000000070e-09 0.000000000000000000e+00 +7.390999999999999810e-09 0.000000000000000000e+00 +7.391499999999999549e-09 0.000000000000000000e+00 +7.392000000000000116e-09 0.000000000000000000e+00 +7.392499999999999856e-09 0.000000000000000000e+00 +7.392999999999999596e-09 0.000000000000000000e+00 +7.393500000000000163e-09 0.000000000000000000e+00 +7.393999999999999903e-09 0.000000000000000000e+00 +7.394499999999999642e-09 0.000000000000000000e+00 +7.395000000000000209e-09 0.000000000000000000e+00 +7.395499999999999949e-09 0.000000000000000000e+00 +7.395999999999999689e-09 0.000000000000000000e+00 +7.396500000000000256e-09 0.000000000000000000e+00 +7.396999999999999996e-09 0.000000000000000000e+00 +7.397499999999999735e-09 0.000000000000000000e+00 +7.397999999999999475e-09 0.000000000000000000e+00 +7.398500000000000042e-09 0.000000000000000000e+00 +7.398999999999999782e-09 0.000000000000000000e+00 +7.399499999999999522e-09 0.000000000000000000e+00 +7.400000000000000089e-09 0.000000000000000000e+00 +7.400499999999999828e-09 0.000000000000000000e+00 +7.400999999999999568e-09 0.000000000000000000e+00 +7.401500000000000135e-09 0.000000000000000000e+00 +7.401999999999999875e-09 0.000000000000000000e+00 +7.402499999999999615e-09 0.000000000000000000e+00 +7.403000000000000182e-09 0.000000000000000000e+00 +7.403499999999999921e-09 0.000000000000000000e+00 +7.403999999999999661e-09 0.000000000000000000e+00 +7.404500000000000228e-09 0.000000000000000000e+00 +7.404999999999999968e-09 0.000000000000000000e+00 +7.405499999999999708e-09 0.000000000000000000e+00 +7.405999999999999448e-09 0.000000000000000000e+00 +7.406500000000000015e-09 0.000000000000000000e+00 +7.406999999999999754e-09 0.000000000000000000e+00 +7.407499999999999494e-09 0.000000000000000000e+00 +7.408000000000000061e-09 0.000000000000000000e+00 +7.408499999999999801e-09 0.000000000000000000e+00 +7.408999999999999541e-09 0.000000000000000000e+00 +7.409500000000000108e-09 0.000000000000000000e+00 +7.409999999999999847e-09 0.000000000000000000e+00 +7.410499999999999587e-09 0.000000000000000000e+00 +7.411000000000000154e-09 0.000000000000000000e+00 +7.411499999999999894e-09 0.000000000000000000e+00 +7.411999999999999634e-09 0.000000000000000000e+00 +7.412500000000000201e-09 0.000000000000000000e+00 +7.412999999999999940e-09 0.000000000000000000e+00 +7.413499999999999680e-09 0.000000000000000000e+00 +7.414000000000000247e-09 0.000000000000000000e+00 +7.414499999999999987e-09 0.000000000000000000e+00 +7.414999999999999727e-09 0.000000000000000000e+00 +7.415499999999999466e-09 0.000000000000000000e+00 +7.416000000000000033e-09 0.000000000000000000e+00 +7.416499999999999773e-09 0.000000000000000000e+00 +7.416999999999999513e-09 0.000000000000000000e+00 +7.417500000000000080e-09 0.000000000000000000e+00 +7.417999999999999820e-09 0.000000000000000000e+00 +7.418499999999999559e-09 0.000000000000000000e+00 +7.419000000000000126e-09 0.000000000000000000e+00 +7.419499999999999866e-09 0.000000000000000000e+00 +7.419999999999999606e-09 0.000000000000000000e+00 +7.420500000000000173e-09 0.000000000000000000e+00 +7.420999999999999913e-09 0.000000000000000000e+00 +7.421499999999999653e-09 0.000000000000000000e+00 +7.422000000000000219e-09 0.000000000000000000e+00 +7.422499999999999959e-09 0.000000000000000000e+00 +7.422999999999999699e-09 0.000000000000000000e+00 +7.423499999999999439e-09 0.000000000000000000e+00 +7.424000000000000006e-09 0.000000000000000000e+00 +7.424499999999999746e-09 0.000000000000000000e+00 +7.424999999999999485e-09 0.000000000000000000e+00 +7.425500000000000052e-09 0.000000000000000000e+00 +7.425999999999999792e-09 0.000000000000000000e+00 +7.426499999999999532e-09 0.000000000000000000e+00 +7.427000000000000099e-09 0.000000000000000000e+00 +7.427499999999999839e-09 0.000000000000000000e+00 +7.427999999999999578e-09 0.000000000000000000e+00 +7.428500000000000145e-09 0.000000000000000000e+00 +7.428999999999999885e-09 0.000000000000000000e+00 +7.429499999999999625e-09 0.000000000000000000e+00 +7.430000000000000192e-09 0.000000000000000000e+00 +7.430499999999999932e-09 0.000000000000000000e+00 +7.430999999999999671e-09 0.000000000000000000e+00 +7.431500000000000238e-09 0.000000000000000000e+00 +7.431999999999999978e-09 0.000000000000000000e+00 +7.432499999999999718e-09 0.000000000000000000e+00 +7.432999999999999458e-09 0.000000000000000000e+00 +7.433500000000000025e-09 0.000000000000000000e+00 +7.433999999999999764e-09 0.000000000000000000e+00 +7.434499999999999504e-09 0.000000000000000000e+00 +7.435000000000000071e-09 0.000000000000000000e+00 +7.435499999999999811e-09 0.000000000000000000e+00 +7.435999999999999551e-09 0.000000000000000000e+00 +7.436500000000000118e-09 0.000000000000000000e+00 +7.436999999999999857e-09 0.000000000000000000e+00 +7.437499999999999597e-09 0.000000000000000000e+00 +7.438000000000000164e-09 0.000000000000000000e+00 +7.438499999999999904e-09 0.000000000000000000e+00 +7.438999999999999644e-09 0.000000000000000000e+00 +7.439500000000000211e-09 0.000000000000000000e+00 +7.439999999999999951e-09 0.000000000000000000e+00 +7.440499999999999690e-09 0.000000000000000000e+00 +7.441000000000000257e-09 0.000000000000000000e+00 +7.441499999999999997e-09 0.000000000000000000e+00 +7.441999999999999737e-09 0.000000000000000000e+00 +7.442499999999999477e-09 0.000000000000000000e+00 +7.443000000000000044e-09 0.000000000000000000e+00 +7.443499999999999783e-09 0.000000000000000000e+00 +7.443999999999999523e-09 0.000000000000000000e+00 +7.444500000000000090e-09 0.000000000000000000e+00 +7.444999999999999830e-09 0.000000000000000000e+00 +7.445499999999999570e-09 0.000000000000000000e+00 +7.446000000000000137e-09 0.000000000000000000e+00 +7.446499999999999876e-09 0.000000000000000000e+00 +7.446999999999999616e-09 0.000000000000000000e+00 +7.447500000000000183e-09 0.000000000000000000e+00 +7.447999999999999923e-09 0.000000000000000000e+00 +7.448499999999999663e-09 0.000000000000000000e+00 +7.449000000000000230e-09 0.000000000000000000e+00 +7.449499999999999969e-09 0.000000000000000000e+00 +7.449999999999999709e-09 0.000000000000000000e+00 +7.450499999999999449e-09 0.000000000000000000e+00 +7.451000000000000016e-09 0.000000000000000000e+00 +7.451500000000000583e-09 0.000000000000000000e+00 +7.451999999999999495e-09 0.000000000000000000e+00 +7.452500000000000062e-09 0.000000000000000000e+00 +7.453000000000000629e-09 0.000000000000000000e+00 +7.453499999999999542e-09 0.000000000000000000e+00 +7.454000000000000109e-09 0.000000000000000000e+00 +7.454500000000000676e-09 0.000000000000000000e+00 +7.454999999999999589e-09 0.000000000000000000e+00 +7.455500000000000155e-09 0.000000000000000000e+00 +7.455999999999999068e-09 0.000000000000000000e+00 +7.456499999999999635e-09 0.000000000000000000e+00 +7.457000000000000202e-09 0.000000000000000000e+00 +7.457499999999999115e-09 0.000000000000000000e+00 +7.457999999999999682e-09 0.000000000000000000e+00 +7.458500000000000249e-09 0.000000000000000000e+00 +7.458999999999999161e-09 0.000000000000000000e+00 +7.459499999999999728e-09 0.000000000000000000e+00 +7.460000000000000295e-09 0.000000000000000000e+00 +7.460499999999999208e-09 0.000000000000000000e+00 +7.460999999999999775e-09 0.000000000000000000e+00 +7.461500000000000342e-09 0.000000000000000000e+00 +7.461999999999999254e-09 0.000000000000000000e+00 +7.462499999999999821e-09 0.000000000000000000e+00 +7.463000000000000388e-09 0.000000000000000000e+00 +7.463499999999999301e-09 0.000000000000000000e+00 +7.463999999999999868e-09 0.000000000000000000e+00 +7.464500000000000435e-09 0.000000000000000000e+00 +7.464999999999999347e-09 0.000000000000000000e+00 +7.465499999999999914e-09 0.000000000000000000e+00 +7.466000000000000481e-09 0.000000000000000000e+00 +7.466499999999999394e-09 0.000000000000000000e+00 +7.466999999999999961e-09 0.000000000000000000e+00 +7.467500000000000528e-09 0.000000000000000000e+00 +7.467999999999999440e-09 0.000000000000000000e+00 +7.468500000000000007e-09 0.000000000000000000e+00 +7.469000000000000574e-09 0.000000000000000000e+00 +7.469499999999999487e-09 0.000000000000000000e+00 +7.470000000000000054e-09 0.000000000000000000e+00 +7.470500000000000621e-09 0.000000000000000000e+00 +7.470999999999999533e-09 0.000000000000000000e+00 +7.471500000000000100e-09 0.000000000000000000e+00 +7.472000000000000667e-09 0.000000000000000000e+00 +7.472499999999999580e-09 0.000000000000000000e+00 +7.473000000000000147e-09 0.000000000000000000e+00 +7.473499999999999059e-09 0.000000000000000000e+00 +7.473999999999999626e-09 0.000000000000000000e+00 +7.474500000000000193e-09 0.000000000000000000e+00 +7.474999999999999106e-09 0.000000000000000000e+00 +7.475499999999999673e-09 0.000000000000000000e+00 +7.476000000000000240e-09 0.000000000000000000e+00 +7.476499999999999152e-09 0.000000000000000000e+00 +7.476999999999999719e-09 0.000000000000000000e+00 +7.477500000000000286e-09 0.000000000000000000e+00 +7.477999999999999199e-09 0.000000000000000000e+00 +7.478499999999999766e-09 0.000000000000000000e+00 +7.479000000000000333e-09 0.000000000000000000e+00 +7.479499999999999245e-09 0.000000000000000000e+00 +7.479999999999999812e-09 0.000000000000000000e+00 +7.480500000000000379e-09 0.000000000000000000e+00 +7.480999999999999292e-09 0.000000000000000000e+00 +7.481499999999999859e-09 0.000000000000000000e+00 +7.482000000000000426e-09 0.000000000000000000e+00 +7.482499999999999338e-09 0.000000000000000000e+00 +7.482999999999999905e-09 0.000000000000000000e+00 +7.483500000000000472e-09 0.000000000000000000e+00 +7.483999999999999385e-09 0.000000000000000000e+00 +7.484499999999999952e-09 0.000000000000000000e+00 +7.485000000000000519e-09 0.000000000000000000e+00 +7.485499999999999432e-09 0.000000000000000000e+00 +7.485999999999999998e-09 0.000000000000000000e+00 +7.486500000000000565e-09 0.000000000000000000e+00 +7.486999999999999478e-09 0.000000000000000000e+00 +7.487500000000000045e-09 0.000000000000000000e+00 +7.488000000000000612e-09 0.000000000000000000e+00 +7.488499999999999525e-09 0.000000000000000000e+00 +7.489000000000000092e-09 0.000000000000000000e+00 +7.489500000000000658e-09 0.000000000000000000e+00 +7.489999999999999571e-09 0.000000000000000000e+00 +7.490500000000000138e-09 0.000000000000000000e+00 +7.490999999999999051e-09 0.000000000000000000e+00 +7.491499999999999618e-09 0.000000000000000000e+00 +7.492000000000000185e-09 0.000000000000000000e+00 +7.492499999999999097e-09 0.000000000000000000e+00 +7.492999999999999664e-09 0.000000000000000000e+00 +7.493500000000000231e-09 0.000000000000000000e+00 +7.493999999999999144e-09 0.000000000000000000e+00 +7.494499999999999711e-09 0.000000000000000000e+00 +7.495000000000000278e-09 0.000000000000000000e+00 +7.495499999999999190e-09 0.000000000000000000e+00 +7.495999999999999757e-09 0.000000000000000000e+00 +7.496500000000000324e-09 0.000000000000000000e+00 +7.496999999999999237e-09 0.000000000000000000e+00 +7.497499999999999804e-09 0.000000000000000000e+00 +7.498000000000000371e-09 0.000000000000000000e+00 +7.498499999999999283e-09 0.000000000000000000e+00 +7.498999999999999850e-09 0.000000000000000000e+00 +7.499500000000000417e-09 0.000000000000000000e+00 +7.499999999999999330e-09 0.000000000000000000e+00 +7.500499999999999897e-09 0.000000000000000000e+00 +7.501000000000000464e-09 0.000000000000000000e+00 +7.501499999999999376e-09 0.000000000000000000e+00 +7.501999999999999943e-09 0.000000000000000000e+00 +7.502500000000000510e-09 0.000000000000000000e+00 +7.502999999999999423e-09 0.000000000000000000e+00 +7.503499999999999990e-09 0.000000000000000000e+00 +7.504000000000000557e-09 0.000000000000000000e+00 +7.504499999999999469e-09 0.000000000000000000e+00 +7.505000000000000036e-09 0.000000000000000000e+00 +7.505500000000000603e-09 0.000000000000000000e+00 +7.505999999999999516e-09 0.000000000000000000e+00 +7.506500000000000083e-09 0.000000000000000000e+00 +7.507000000000000650e-09 0.000000000000000000e+00 +7.507499999999999562e-09 0.000000000000000000e+00 +7.508000000000000129e-09 0.000000000000000000e+00 +7.508499999999999042e-09 0.000000000000000000e+00 +7.508999999999999609e-09 0.000000000000000000e+00 +7.509500000000000176e-09 0.000000000000000000e+00 +7.509999999999999088e-09 0.000000000000000000e+00 +7.510499999999999655e-09 0.000000000000000000e+00 +7.511000000000000222e-09 0.000000000000000000e+00 +7.511499999999999135e-09 0.000000000000000000e+00 +7.511999999999999702e-09 0.000000000000000000e+00 +7.512500000000000269e-09 0.000000000000000000e+00 +7.512999999999999181e-09 0.000000000000000000e+00 +7.513499999999999748e-09 0.000000000000000000e+00 +7.514000000000000315e-09 0.000000000000000000e+00 +7.514499999999999228e-09 0.000000000000000000e+00 +7.514999999999999795e-09 0.000000000000000000e+00 +7.515500000000000362e-09 0.000000000000000000e+00 +7.515999999999999274e-09 0.000000000000000000e+00 +7.516499999999999841e-09 0.000000000000000000e+00 +7.517000000000000408e-09 0.000000000000000000e+00 +7.517499999999999321e-09 0.000000000000000000e+00 +7.517999999999999888e-09 0.000000000000000000e+00 +7.518500000000000455e-09 0.000000000000000000e+00 +7.518999999999999368e-09 0.000000000000000000e+00 +7.519499999999999934e-09 0.000000000000000000e+00 +7.520000000000000501e-09 0.000000000000000000e+00 +7.520499999999999414e-09 0.000000000000000000e+00 +7.520999999999999981e-09 0.000000000000000000e+00 +7.521500000000000548e-09 0.000000000000000000e+00 +7.521999999999999461e-09 0.000000000000000000e+00 +7.522500000000000028e-09 0.000000000000000000e+00 +7.523000000000000594e-09 0.000000000000000000e+00 +7.523499999999999507e-09 0.000000000000000000e+00 +7.524000000000000074e-09 0.000000000000000000e+00 +7.524500000000000641e-09 0.000000000000000000e+00 +7.524999999999999554e-09 0.000000000000000000e+00 +7.525500000000000121e-09 0.000000000000000000e+00 +7.525999999999999033e-09 0.000000000000000000e+00 +7.526499999999999600e-09 0.000000000000000000e+00 +7.527000000000000167e-09 0.000000000000000000e+00 +7.527499999999999080e-09 0.000000000000000000e+00 +7.527999999999999647e-09 0.000000000000000000e+00 +7.528500000000000214e-09 0.000000000000000000e+00 +7.528999999999999126e-09 0.000000000000000000e+00 +7.529499999999999693e-09 0.000000000000000000e+00 +7.530000000000000260e-09 0.000000000000000000e+00 +7.530499999999999173e-09 0.000000000000000000e+00 +7.530999999999999740e-09 0.000000000000000000e+00 +7.531500000000000307e-09 0.000000000000000000e+00 +7.531999999999999219e-09 0.000000000000000000e+00 +7.532499999999999786e-09 0.000000000000000000e+00 +7.533000000000000353e-09 0.000000000000000000e+00 +7.533499999999999266e-09 0.000000000000000000e+00 +7.533999999999999833e-09 0.000000000000000000e+00 +7.534500000000000400e-09 0.000000000000000000e+00 +7.534999999999999312e-09 0.000000000000000000e+00 +7.535499999999999879e-09 0.000000000000000000e+00 +7.536000000000000446e-09 0.000000000000000000e+00 +7.536499999999999359e-09 0.000000000000000000e+00 +7.536999999999999926e-09 0.000000000000000000e+00 +7.537500000000000493e-09 0.000000000000000000e+00 +7.537999999999999405e-09 0.000000000000000000e+00 +7.538499999999999972e-09 0.000000000000000000e+00 +7.539000000000000539e-09 0.000000000000000000e+00 +7.539499999999999452e-09 0.000000000000000000e+00 +7.540000000000000019e-09 0.000000000000000000e+00 +7.540500000000000586e-09 0.000000000000000000e+00 +7.540999999999999498e-09 0.000000000000000000e+00 +7.541500000000000065e-09 0.000000000000000000e+00 +7.542000000000000632e-09 0.000000000000000000e+00 +7.542499999999999545e-09 0.000000000000000000e+00 +7.543000000000000112e-09 0.000000000000000000e+00 +7.543499999999999024e-09 0.000000000000000000e+00 +7.543999999999999591e-09 0.000000000000000000e+00 +7.544500000000000158e-09 0.000000000000000000e+00 +7.544999999999999071e-09 0.000000000000000000e+00 +7.545499999999999638e-09 0.000000000000000000e+00 +7.546000000000000205e-09 0.000000000000000000e+00 +7.546499999999999117e-09 0.000000000000000000e+00 +7.546999999999999684e-09 0.000000000000000000e+00 +7.547500000000000251e-09 0.000000000000000000e+00 +7.547999999999999164e-09 0.000000000000000000e+00 +7.548499999999999731e-09 0.000000000000000000e+00 +7.549000000000000298e-09 0.000000000000000000e+00 +7.549499999999999211e-09 0.000000000000000000e+00 +7.549999999999999777e-09 0.000000000000000000e+00 +7.550500000000000344e-09 0.000000000000000000e+00 +7.550999999999999257e-09 0.000000000000000000e+00 +7.551499999999999824e-09 0.000000000000000000e+00 +7.552000000000000391e-09 0.000000000000000000e+00 +7.552499999999999304e-09 0.000000000000000000e+00 +7.552999999999999871e-09 0.000000000000000000e+00 +7.553500000000000437e-09 0.000000000000000000e+00 +7.553999999999999350e-09 0.000000000000000000e+00 +7.554499999999999917e-09 0.000000000000000000e+00 +7.555000000000000484e-09 0.000000000000000000e+00 +7.555499999999999397e-09 0.000000000000000000e+00 +7.555999999999999964e-09 0.000000000000000000e+00 +7.556500000000000530e-09 0.000000000000000000e+00 +7.556999999999999443e-09 0.000000000000000000e+00 +7.557500000000000010e-09 0.000000000000000000e+00 +7.558000000000000577e-09 0.000000000000000000e+00 +7.558499999999999490e-09 0.000000000000000000e+00 +7.559000000000000057e-09 0.000000000000000000e+00 +7.559500000000000624e-09 0.000000000000000000e+00 +7.559999999999999536e-09 0.000000000000000000e+00 +7.560500000000000103e-09 0.000000000000000000e+00 +7.561000000000000670e-09 0.000000000000000000e+00 +7.561499999999999583e-09 0.000000000000000000e+00 +7.562000000000000150e-09 0.000000000000000000e+00 +7.562499999999999062e-09 0.000000000000000000e+00 +7.562999999999999629e-09 0.000000000000000000e+00 +7.563500000000000196e-09 0.000000000000000000e+00 +7.563999999999999109e-09 0.000000000000000000e+00 +7.564499999999999676e-09 0.000000000000000000e+00 +7.565000000000000243e-09 0.000000000000000000e+00 +7.565499999999999155e-09 0.000000000000000000e+00 +7.565999999999999722e-09 0.000000000000000000e+00 +7.566500000000000289e-09 0.000000000000000000e+00 +7.566999999999999202e-09 0.000000000000000000e+00 +7.567499999999999769e-09 0.000000000000000000e+00 +7.568000000000000336e-09 0.000000000000000000e+00 +7.568499999999999248e-09 0.000000000000000000e+00 +7.568999999999999815e-09 0.000000000000000000e+00 +7.569500000000000382e-09 0.000000000000000000e+00 +7.569999999999999295e-09 0.000000000000000000e+00 +7.570499999999999862e-09 0.000000000000000000e+00 +7.571000000000000429e-09 0.000000000000000000e+00 +7.571499999999999341e-09 0.000000000000000000e+00 +7.571999999999999908e-09 0.000000000000000000e+00 +7.572500000000000475e-09 0.000000000000000000e+00 +7.572999999999999388e-09 0.000000000000000000e+00 +7.573499999999999955e-09 0.000000000000000000e+00 +7.574000000000000522e-09 0.000000000000000000e+00 +7.574499999999999434e-09 0.000000000000000000e+00 +7.575000000000000001e-09 0.000000000000000000e+00 +7.575500000000000568e-09 0.000000000000000000e+00 +7.575999999999999481e-09 0.000000000000000000e+00 +7.576500000000000048e-09 0.000000000000000000e+00 +7.577000000000000615e-09 0.000000000000000000e+00 +7.577499999999999527e-09 0.000000000000000000e+00 +7.578000000000000094e-09 0.000000000000000000e+00 +7.578500000000000661e-09 0.000000000000000000e+00 +7.578999999999999574e-09 0.000000000000000000e+00 +7.579500000000000141e-09 0.000000000000000000e+00 +7.579999999999999053e-09 0.000000000000000000e+00 +7.580499999999999620e-09 0.000000000000000000e+00 +7.581000000000000187e-09 0.000000000000000000e+00 +7.581499999999999100e-09 0.000000000000000000e+00 +7.581999999999999667e-09 0.000000000000000000e+00 +7.582500000000000234e-09 0.000000000000000000e+00 +7.582999999999999147e-09 0.000000000000000000e+00 +7.583499999999999713e-09 0.000000000000000000e+00 +7.584000000000000280e-09 0.000000000000000000e+00 +7.584499999999999193e-09 0.000000000000000000e+00 +7.584999999999999760e-09 0.000000000000000000e+00 +7.585500000000000327e-09 0.000000000000000000e+00 +7.585999999999999240e-09 0.000000000000000000e+00 +7.586499999999999807e-09 0.000000000000000000e+00 +7.587000000000000373e-09 0.000000000000000000e+00 +7.587499999999999286e-09 0.000000000000000000e+00 +7.587999999999999853e-09 0.000000000000000000e+00 +7.588500000000000420e-09 0.000000000000000000e+00 +7.588999999999999333e-09 0.000000000000000000e+00 +7.589499999999999900e-09 0.000000000000000000e+00 +7.590000000000000467e-09 0.000000000000000000e+00 +7.590499999999999379e-09 0.000000000000000000e+00 +7.590999999999999946e-09 0.000000000000000000e+00 +7.591500000000000513e-09 0.000000000000000000e+00 +7.591999999999999426e-09 0.000000000000000000e+00 +7.592499999999999993e-09 0.000000000000000000e+00 +7.593000000000000560e-09 0.000000000000000000e+00 +7.593499999999999472e-09 0.000000000000000000e+00 +7.594000000000000039e-09 0.000000000000000000e+00 +7.594500000000000606e-09 0.000000000000000000e+00 +7.594999999999999519e-09 0.000000000000000000e+00 +7.595500000000000086e-09 0.000000000000000000e+00 +7.596000000000000653e-09 0.000000000000000000e+00 +7.596499999999999565e-09 0.000000000000000000e+00 +7.597000000000000132e-09 0.000000000000000000e+00 +7.597499999999999045e-09 0.000000000000000000e+00 +7.597999999999999612e-09 0.000000000000000000e+00 +7.598500000000000179e-09 0.000000000000000000e+00 +7.598999999999999091e-09 0.000000000000000000e+00 +7.599499999999999658e-09 0.000000000000000000e+00 +7.600000000000000225e-09 0.000000000000000000e+00 +7.600499999999999138e-09 0.000000000000000000e+00 +7.600999999999999705e-09 0.000000000000000000e+00 +7.601500000000000272e-09 0.000000000000000000e+00 +7.601999999999999184e-09 0.000000000000000000e+00 +7.602499999999999751e-09 0.000000000000000000e+00 +7.603000000000000318e-09 0.000000000000000000e+00 +7.603499999999999231e-09 0.000000000000000000e+00 +7.603999999999999798e-09 0.000000000000000000e+00 +7.604500000000000365e-09 0.000000000000000000e+00 +7.604999999999999277e-09 0.000000000000000000e+00 +7.605499999999999844e-09 0.000000000000000000e+00 +7.606000000000000411e-09 0.000000000000000000e+00 +7.606499999999999324e-09 0.000000000000000000e+00 +7.606999999999999891e-09 0.000000000000000000e+00 +7.607500000000000458e-09 0.000000000000000000e+00 +7.607999999999999370e-09 0.000000000000000000e+00 +7.608499999999999937e-09 0.000000000000000000e+00 +7.609000000000000504e-09 0.000000000000000000e+00 +7.609499999999999417e-09 0.000000000000000000e+00 +7.609999999999999984e-09 0.000000000000000000e+00 +7.610500000000000551e-09 0.000000000000000000e+00 +7.610999999999999463e-09 0.000000000000000000e+00 +7.611500000000000030e-09 0.000000000000000000e+00 +7.612000000000000597e-09 0.000000000000000000e+00 +7.612499999999999510e-09 0.000000000000000000e+00 +7.613000000000000077e-09 0.000000000000000000e+00 +7.613500000000000644e-09 0.000000000000000000e+00 +7.613999999999999556e-09 0.000000000000000000e+00 +7.614500000000000123e-09 0.000000000000000000e+00 +7.614999999999999036e-09 0.000000000000000000e+00 +7.615499999999999603e-09 0.000000000000000000e+00 +7.616000000000000170e-09 0.000000000000000000e+00 +7.616499999999999083e-09 0.000000000000000000e+00 +7.616999999999999649e-09 0.000000000000000000e+00 +7.617500000000000216e-09 0.000000000000000000e+00 +7.617999999999999129e-09 0.000000000000000000e+00 +7.618499999999999696e-09 0.000000000000000000e+00 +7.619000000000000263e-09 0.000000000000000000e+00 +7.619499999999999176e-09 0.000000000000000000e+00 +7.619999999999999743e-09 0.000000000000000000e+00 +7.620500000000000309e-09 0.000000000000000000e+00 +7.620999999999999222e-09 0.000000000000000000e+00 +7.621499999999999789e-09 0.000000000000000000e+00 +7.622000000000000356e-09 0.000000000000000000e+00 +7.622499999999999269e-09 0.000000000000000000e+00 +7.622999999999999836e-09 0.000000000000000000e+00 +7.623500000000000403e-09 0.000000000000000000e+00 +7.623999999999999315e-09 0.000000000000000000e+00 +7.624499999999999882e-09 0.000000000000000000e+00 +7.625000000000000449e-09 0.000000000000000000e+00 +7.625499999999999362e-09 0.000000000000000000e+00 +7.625999999999999929e-09 0.000000000000000000e+00 +7.626500000000000496e-09 0.000000000000000000e+00 +7.626999999999999408e-09 0.000000000000000000e+00 +7.627499999999999975e-09 0.000000000000000000e+00 +7.628000000000000542e-09 0.000000000000000000e+00 +7.628499999999999455e-09 0.000000000000000000e+00 +7.629000000000000022e-09 0.000000000000000000e+00 +7.629500000000000589e-09 0.000000000000000000e+00 +7.629999999999999501e-09 0.000000000000000000e+00 +7.630500000000000068e-09 0.000000000000000000e+00 +7.631000000000000635e-09 0.000000000000000000e+00 +7.631499999999999548e-09 0.000000000000000000e+00 +7.632000000000000115e-09 0.000000000000000000e+00 +7.632499999999999027e-09 0.000000000000000000e+00 +7.632999999999999594e-09 0.000000000000000000e+00 +7.633500000000000161e-09 0.000000000000000000e+00 +7.633999999999999074e-09 0.000000000000000000e+00 +7.634499999999999641e-09 0.000000000000000000e+00 +7.635000000000000208e-09 0.000000000000000000e+00 +7.635499999999999120e-09 0.000000000000000000e+00 +7.635999999999999687e-09 0.000000000000000000e+00 +7.636500000000000254e-09 0.000000000000000000e+00 +7.636999999999999167e-09 0.000000000000000000e+00 +7.637499999999999734e-09 0.000000000000000000e+00 +7.638000000000000301e-09 0.000000000000000000e+00 +7.638499999999999213e-09 0.000000000000000000e+00 +7.638999999999999780e-09 0.000000000000000000e+00 +7.639500000000000347e-09 0.000000000000000000e+00 +7.639999999999999260e-09 0.000000000000000000e+00 +7.640499999999999827e-09 0.000000000000000000e+00 +7.641000000000000394e-09 0.000000000000000000e+00 +7.641499999999999306e-09 0.000000000000000000e+00 +7.641999999999999873e-09 0.000000000000000000e+00 +7.642500000000000440e-09 0.000000000000000000e+00 +7.642999999999999353e-09 0.000000000000000000e+00 +7.643499999999999920e-09 0.000000000000000000e+00 +7.644000000000000487e-09 0.000000000000000000e+00 +7.644499999999999399e-09 0.000000000000000000e+00 +7.644999999999999966e-09 0.000000000000000000e+00 +7.645500000000000533e-09 0.000000000000000000e+00 +7.645999999999999446e-09 0.000000000000000000e+00 +7.646500000000000013e-09 0.000000000000000000e+00 +7.647000000000000580e-09 0.000000000000000000e+00 +7.647499999999999492e-09 0.000000000000000000e+00 +7.648000000000000059e-09 0.000000000000000000e+00 +7.648500000000000626e-09 0.000000000000000000e+00 +7.648999999999999539e-09 0.000000000000000000e+00 +7.649500000000000106e-09 0.000000000000000000e+00 +7.650000000000000673e-09 0.000000000000000000e+00 +7.650499999999999586e-09 0.000000000000000000e+00 +7.651000000000000152e-09 0.000000000000000000e+00 +7.651499999999999065e-09 0.000000000000000000e+00 +7.651999999999999632e-09 0.000000000000000000e+00 +7.652500000000000199e-09 0.000000000000000000e+00 +7.652999999999999112e-09 0.000000000000000000e+00 +7.653499999999999679e-09 0.000000000000000000e+00 +7.654000000000000246e-09 0.000000000000000000e+00 +7.654499999999999158e-09 0.000000000000000000e+00 +7.654999999999999725e-09 0.000000000000000000e+00 +7.655500000000000292e-09 0.000000000000000000e+00 +7.655999999999999205e-09 0.000000000000000000e+00 +7.656499999999999772e-09 0.000000000000000000e+00 +7.657000000000000339e-09 0.000000000000000000e+00 +7.657499999999999251e-09 0.000000000000000000e+00 +7.657999999999999818e-09 0.000000000000000000e+00 +7.658500000000000385e-09 0.000000000000000000e+00 +7.658999999999999298e-09 0.000000000000000000e+00 +7.659499999999999865e-09 0.000000000000000000e+00 +7.660000000000000432e-09 0.000000000000000000e+00 +7.660499999999999344e-09 0.000000000000000000e+00 +7.660999999999999911e-09 0.000000000000000000e+00 +7.661500000000000478e-09 0.000000000000000000e+00 +7.661999999999999391e-09 0.000000000000000000e+00 +7.662499999999999958e-09 0.000000000000000000e+00 +7.663000000000000525e-09 0.000000000000000000e+00 +7.663499999999999437e-09 0.000000000000000000e+00 +7.664000000000000004e-09 0.000000000000000000e+00 +7.664500000000000571e-09 0.000000000000000000e+00 +7.664999999999999484e-09 0.000000000000000000e+00 +7.665500000000000051e-09 0.000000000000000000e+00 +7.666000000000000618e-09 0.000000000000000000e+00 +7.666499999999999530e-09 0.000000000000000000e+00 +7.667000000000000097e-09 0.000000000000000000e+00 +7.667500000000000664e-09 0.000000000000000000e+00 +7.667999999999999577e-09 0.000000000000000000e+00 +7.668500000000000144e-09 0.000000000000000000e+00 +7.668999999999999056e-09 0.000000000000000000e+00 +7.669499999999999623e-09 0.000000000000000000e+00 +7.670000000000000190e-09 0.000000000000000000e+00 +7.670499999999999103e-09 0.000000000000000000e+00 +7.670999999999999670e-09 0.000000000000000000e+00 +7.671500000000000237e-09 0.000000000000000000e+00 +7.671999999999999149e-09 0.000000000000000000e+00 +7.672499999999999716e-09 0.000000000000000000e+00 +7.673000000000000283e-09 0.000000000000000000e+00 +7.673499999999999196e-09 0.000000000000000000e+00 +7.673999999999999763e-09 0.000000000000000000e+00 +7.674500000000000330e-09 0.000000000000000000e+00 +7.674999999999999242e-09 0.000000000000000000e+00 +7.675499999999999809e-09 0.000000000000000000e+00 +7.676000000000000376e-09 0.000000000000000000e+00 +7.676499999999999289e-09 0.000000000000000000e+00 +7.676999999999999856e-09 0.000000000000000000e+00 +7.677500000000000423e-09 0.000000000000000000e+00 +7.677999999999999335e-09 0.000000000000000000e+00 +7.678499999999999902e-09 0.000000000000000000e+00 +7.679000000000000469e-09 0.000000000000000000e+00 +7.679499999999999382e-09 0.000000000000000000e+00 +7.679999999999999949e-09 0.000000000000000000e+00 +7.680500000000000516e-09 0.000000000000000000e+00 +7.680999999999999428e-09 0.000000000000000000e+00 +7.681499999999999995e-09 0.000000000000000000e+00 +7.682000000000000562e-09 0.000000000000000000e+00 +7.682499999999999475e-09 0.000000000000000000e+00 +7.683000000000000042e-09 0.000000000000000000e+00 +7.683500000000000609e-09 0.000000000000000000e+00 +7.683999999999999522e-09 0.000000000000000000e+00 +7.684500000000000088e-09 0.000000000000000000e+00 +7.685000000000000655e-09 0.000000000000000000e+00 +7.685499999999999568e-09 0.000000000000000000e+00 +7.686000000000000135e-09 0.000000000000000000e+00 +7.686499999999999048e-09 0.000000000000000000e+00 +7.686999999999999615e-09 0.000000000000000000e+00 +7.687500000000000182e-09 0.000000000000000000e+00 +7.687999999999999094e-09 0.000000000000000000e+00 +7.688499999999999661e-09 0.000000000000000000e+00 +7.689000000000000228e-09 0.000000000000000000e+00 +7.689499999999999141e-09 0.000000000000000000e+00 +7.689999999999999708e-09 0.000000000000000000e+00 +7.690500000000000275e-09 0.000000000000000000e+00 +7.690999999999999187e-09 0.000000000000000000e+00 +7.691499999999999754e-09 0.000000000000000000e+00 +7.692000000000000321e-09 0.000000000000000000e+00 +7.692499999999999234e-09 0.000000000000000000e+00 +7.692999999999999801e-09 0.000000000000000000e+00 +7.693500000000000368e-09 0.000000000000000000e+00 +7.693999999999999280e-09 0.000000000000000000e+00 +7.694499999999999847e-09 0.000000000000000000e+00 +7.695000000000000414e-09 0.000000000000000000e+00 +7.695499999999999327e-09 0.000000000000000000e+00 +7.695999999999999894e-09 0.000000000000000000e+00 +7.696500000000000461e-09 0.000000000000000000e+00 +7.696999999999999373e-09 0.000000000000000000e+00 +7.697499999999999940e-09 0.000000000000000000e+00 +7.698000000000000507e-09 0.000000000000000000e+00 +7.698499999999999420e-09 0.000000000000000000e+00 +7.698999999999999987e-09 0.000000000000000000e+00 +7.699500000000000554e-09 0.000000000000000000e+00 +7.699999999999999466e-09 0.000000000000000000e+00 +7.700500000000000033e-09 0.000000000000000000e+00 +7.701000000000000600e-09 0.000000000000000000e+00 +7.701499999999999513e-09 0.000000000000000000e+00 +7.702000000000000080e-09 0.000000000000000000e+00 +7.702500000000000647e-09 0.000000000000000000e+00 +7.702999999999999559e-09 0.000000000000000000e+00 +7.703500000000000126e-09 0.000000000000000000e+00 +7.703999999999999039e-09 0.000000000000000000e+00 +7.704499999999999606e-09 0.000000000000000000e+00 +7.705000000000000173e-09 0.000000000000000000e+00 +7.705499999999999085e-09 0.000000000000000000e+00 +7.705999999999999652e-09 0.000000000000000000e+00 +7.706500000000000219e-09 0.000000000000000000e+00 +7.706999999999999132e-09 0.000000000000000000e+00 +7.707499999999999699e-09 0.000000000000000000e+00 +7.708000000000000266e-09 0.000000000000000000e+00 +7.708499999999999178e-09 0.000000000000000000e+00 +7.708999999999999745e-09 0.000000000000000000e+00 +7.709500000000000312e-09 0.000000000000000000e+00 +7.709999999999999225e-09 0.000000000000000000e+00 +7.710499999999999792e-09 0.000000000000000000e+00 +7.711000000000000359e-09 0.000000000000000000e+00 +7.711499999999999271e-09 0.000000000000000000e+00 +7.711999999999999838e-09 0.000000000000000000e+00 +7.712500000000000405e-09 0.000000000000000000e+00 +7.712999999999999318e-09 0.000000000000000000e+00 +7.713499999999999885e-09 0.000000000000000000e+00 +7.714000000000000452e-09 0.000000000000000000e+00 +7.714499999999999365e-09 0.000000000000000000e+00 +7.714999999999999931e-09 0.000000000000000000e+00 +7.715500000000000498e-09 0.000000000000000000e+00 +7.715999999999999411e-09 0.000000000000000000e+00 +7.716499999999999978e-09 0.000000000000000000e+00 +7.717000000000000545e-09 0.000000000000000000e+00 +7.717499999999999458e-09 0.000000000000000000e+00 +7.718000000000000024e-09 0.000000000000000000e+00 +7.718500000000000591e-09 0.000000000000000000e+00 +7.718999999999999504e-09 0.000000000000000000e+00 +7.719500000000000071e-09 0.000000000000000000e+00 +7.720000000000000638e-09 0.000000000000000000e+00 +7.720499999999999551e-09 0.000000000000000000e+00 +7.721000000000000118e-09 0.000000000000000000e+00 +7.721499999999999030e-09 0.000000000000000000e+00 +7.721999999999999597e-09 0.000000000000000000e+00 +7.722500000000000164e-09 0.000000000000000000e+00 +7.722999999999999077e-09 0.000000000000000000e+00 +7.723499999999999644e-09 0.000000000000000000e+00 +7.724000000000000211e-09 0.000000000000000000e+00 +7.724499999999999123e-09 0.000000000000000000e+00 +7.724999999999999690e-09 0.000000000000000000e+00 +7.725500000000000257e-09 0.000000000000000000e+00 +7.725999999999999170e-09 0.000000000000000000e+00 +7.726499999999999737e-09 0.000000000000000000e+00 +7.727000000000000304e-09 0.000000000000000000e+00 +7.727499999999999216e-09 0.000000000000000000e+00 +7.727999999999999783e-09 0.000000000000000000e+00 +7.728500000000000350e-09 0.000000000000000000e+00 +7.728999999999999263e-09 0.000000000000000000e+00 +7.729499999999999830e-09 0.000000000000000000e+00 +7.730000000000000397e-09 0.000000000000000000e+00 +7.730499999999999309e-09 0.000000000000000000e+00 +7.730999999999999876e-09 0.000000000000000000e+00 +7.731500000000000443e-09 0.000000000000000000e+00 +7.731999999999999356e-09 0.000000000000000000e+00 +7.732499999999999923e-09 0.000000000000000000e+00 +7.733000000000000490e-09 0.000000000000000000e+00 +7.733499999999999402e-09 0.000000000000000000e+00 +7.733999999999999969e-09 0.000000000000000000e+00 +7.734500000000000536e-09 0.000000000000000000e+00 +7.734999999999999449e-09 0.000000000000000000e+00 +7.735500000000000016e-09 0.000000000000000000e+00 +7.736000000000000583e-09 0.000000000000000000e+00 +7.736499999999999495e-09 0.000000000000000000e+00 +7.737000000000000062e-09 0.000000000000000000e+00 +7.737500000000000629e-09 0.000000000000000000e+00 +7.737999999999999542e-09 0.000000000000000000e+00 +7.738500000000000109e-09 0.000000000000000000e+00 +7.738999999999999021e-09 0.000000000000000000e+00 +7.739499999999999588e-09 0.000000000000000000e+00 +7.740000000000000155e-09 0.000000000000000000e+00 +7.740499999999999068e-09 0.000000000000000000e+00 +7.740999999999999635e-09 0.000000000000000000e+00 +7.741500000000000202e-09 0.000000000000000000e+00 +7.741999999999999114e-09 0.000000000000000000e+00 +7.742499999999999681e-09 0.000000000000000000e+00 +7.743000000000000248e-09 0.000000000000000000e+00 +7.743499999999999161e-09 0.000000000000000000e+00 +7.743999999999999728e-09 0.000000000000000000e+00 +7.744500000000000295e-09 0.000000000000000000e+00 +7.744999999999999207e-09 0.000000000000000000e+00 +7.745499999999999774e-09 0.000000000000000000e+00 +7.746000000000000341e-09 0.000000000000000000e+00 +7.746499999999999254e-09 0.000000000000000000e+00 +7.746999999999999821e-09 0.000000000000000000e+00 +7.747500000000000388e-09 0.000000000000000000e+00 +7.747999999999999301e-09 0.000000000000000000e+00 +7.748499999999999867e-09 0.000000000000000000e+00 +7.749000000000000434e-09 0.000000000000000000e+00 +7.749499999999999347e-09 0.000000000000000000e+00 +7.749999999999999914e-09 0.000000000000000000e+00 +7.750500000000000481e-09 0.000000000000000000e+00 +7.750999999999999394e-09 0.000000000000000000e+00 +7.751499999999999961e-09 0.000000000000000000e+00 +7.752000000000000527e-09 0.000000000000000000e+00 +7.752499999999999440e-09 0.000000000000000000e+00 +7.753000000000000007e-09 0.000000000000000000e+00 +7.753500000000000574e-09 0.000000000000000000e+00 +7.753999999999999487e-09 0.000000000000000000e+00 +7.754500000000000054e-09 0.000000000000000000e+00 +7.755000000000000621e-09 0.000000000000000000e+00 +7.755499999999999533e-09 0.000000000000000000e+00 +7.756000000000000100e-09 0.000000000000000000e+00 +7.756500000000000667e-09 0.000000000000000000e+00 +7.756999999999999580e-09 0.000000000000000000e+00 +7.757500000000000147e-09 0.000000000000000000e+00 +7.757999999999999059e-09 0.000000000000000000e+00 +7.758499999999999626e-09 0.000000000000000000e+00 +7.759000000000000193e-09 0.000000000000000000e+00 +7.759499999999999106e-09 0.000000000000000000e+00 +7.759999999999999673e-09 0.000000000000000000e+00 +7.760500000000000240e-09 0.000000000000000000e+00 +7.760999999999999152e-09 0.000000000000000000e+00 +7.761499999999999719e-09 0.000000000000000000e+00 +7.762000000000000286e-09 0.000000000000000000e+00 +7.762499999999999199e-09 0.000000000000000000e+00 +7.762999999999999766e-09 0.000000000000000000e+00 +7.763500000000000333e-09 0.000000000000000000e+00 +7.763999999999999245e-09 0.000000000000000000e+00 +7.764499999999999812e-09 0.000000000000000000e+00 +7.765000000000000379e-09 0.000000000000000000e+00 +7.765499999999999292e-09 0.000000000000000000e+00 +7.765999999999999859e-09 0.000000000000000000e+00 +7.766500000000000426e-09 0.000000000000000000e+00 +7.766999999999999338e-09 0.000000000000000000e+00 +7.767499999999999905e-09 0.000000000000000000e+00 +7.768000000000000472e-09 0.000000000000000000e+00 +7.768499999999999385e-09 0.000000000000000000e+00 +7.768999999999999952e-09 0.000000000000000000e+00 +7.769500000000000519e-09 0.000000000000000000e+00 +7.769999999999999431e-09 0.000000000000000000e+00 +7.770499999999999998e-09 0.000000000000000000e+00 +7.771000000000000565e-09 0.000000000000000000e+00 +7.771499999999999478e-09 0.000000000000000000e+00 +7.772000000000000045e-09 0.000000000000000000e+00 +7.772500000000000612e-09 0.000000000000000000e+00 +7.772999999999999524e-09 0.000000000000000000e+00 +7.773500000000000091e-09 0.000000000000000000e+00 +7.774000000000000658e-09 0.000000000000000000e+00 +7.774499999999999571e-09 0.000000000000000000e+00 +7.775000000000000138e-09 0.000000000000000000e+00 +7.775499999999999050e-09 0.000000000000000000e+00 +7.775999999999999617e-09 0.000000000000000000e+00 +7.776500000000000184e-09 0.000000000000000000e+00 +7.776999999999999097e-09 0.000000000000000000e+00 +7.777499999999999664e-09 0.000000000000000000e+00 +7.778000000000000231e-09 0.000000000000000000e+00 +7.778499999999999143e-09 0.000000000000000000e+00 +7.778999999999999710e-09 0.000000000000000000e+00 +7.779500000000000277e-09 0.000000000000000000e+00 +7.779999999999999190e-09 0.000000000000000000e+00 +7.780499999999999757e-09 0.000000000000000000e+00 +7.781000000000000324e-09 0.000000000000000000e+00 +7.781499999999999237e-09 0.000000000000000000e+00 +7.781999999999999803e-09 0.000000000000000000e+00 +7.782500000000000370e-09 0.000000000000000000e+00 +7.782999999999999283e-09 0.000000000000000000e+00 +7.783499999999999850e-09 0.000000000000000000e+00 +7.784000000000000417e-09 0.000000000000000000e+00 +7.784499999999999330e-09 0.000000000000000000e+00 +7.784999999999999897e-09 0.000000000000000000e+00 +7.785500000000000463e-09 0.000000000000000000e+00 +7.785999999999999376e-09 0.000000000000000000e+00 +7.786499999999999943e-09 0.000000000000000000e+00 +7.787000000000000510e-09 0.000000000000000000e+00 +7.787499999999999423e-09 0.000000000000000000e+00 +7.787999999999999990e-09 0.000000000000000000e+00 +7.788500000000000557e-09 0.000000000000000000e+00 +7.788999999999999469e-09 0.000000000000000000e+00 +7.789500000000000036e-09 0.000000000000000000e+00 +7.790000000000000603e-09 0.000000000000000000e+00 +7.790499999999999516e-09 0.000000000000000000e+00 +7.791000000000000083e-09 0.000000000000000000e+00 +7.791500000000000650e-09 0.000000000000000000e+00 +7.791999999999999562e-09 0.000000000000000000e+00 +7.792500000000000129e-09 0.000000000000000000e+00 +7.792999999999999042e-09 0.000000000000000000e+00 +7.793499999999999609e-09 0.000000000000000000e+00 +7.794000000000000176e-09 0.000000000000000000e+00 +7.794499999999999088e-09 0.000000000000000000e+00 +7.794999999999999655e-09 0.000000000000000000e+00 +7.795500000000000222e-09 0.000000000000000000e+00 +7.795999999999999135e-09 0.000000000000000000e+00 +7.796499999999999702e-09 0.000000000000000000e+00 +7.797000000000000269e-09 0.000000000000000000e+00 +7.797499999999999181e-09 0.000000000000000000e+00 +7.797999999999999748e-09 0.000000000000000000e+00 +7.798500000000000315e-09 0.000000000000000000e+00 +7.798999999999999228e-09 0.000000000000000000e+00 +7.799499999999999795e-09 0.000000000000000000e+00 +7.800000000000000362e-09 0.000000000000000000e+00 +7.800499999999999274e-09 0.000000000000000000e+00 +7.800999999999999841e-09 0.000000000000000000e+00 +7.801500000000000408e-09 0.000000000000000000e+00 +7.801999999999999321e-09 0.000000000000000000e+00 +7.802499999999999888e-09 0.000000000000000000e+00 +7.803000000000000455e-09 0.000000000000000000e+00 +7.803499999999999367e-09 0.000000000000000000e+00 +7.803999999999999934e-09 0.000000000000000000e+00 +7.804500000000000501e-09 0.000000000000000000e+00 +7.804999999999999414e-09 0.000000000000000000e+00 +7.805499999999999981e-09 0.000000000000000000e+00 +7.806000000000000548e-09 0.000000000000000000e+00 +7.806499999999999460e-09 0.000000000000000000e+00 +7.807000000000000027e-09 0.000000000000000000e+00 +7.807500000000000594e-09 0.000000000000000000e+00 +7.807999999999999507e-09 0.000000000000000000e+00 +7.808500000000000074e-09 0.000000000000000000e+00 +7.809000000000000641e-09 0.000000000000000000e+00 +7.809499999999999553e-09 0.000000000000000000e+00 +7.810000000000000120e-09 0.000000000000000000e+00 +7.810499999999999033e-09 0.000000000000000000e+00 +7.810999999999999600e-09 0.000000000000000000e+00 +7.811500000000000167e-09 0.000000000000000000e+00 +7.811999999999999080e-09 0.000000000000000000e+00 +7.812499999999999646e-09 0.000000000000000000e+00 +7.813000000000000213e-09 0.000000000000000000e+00 +7.813499999999999126e-09 0.000000000000000000e+00 +7.813999999999999693e-09 0.000000000000000000e+00 +7.814500000000000260e-09 0.000000000000000000e+00 +7.814999999999999173e-09 0.000000000000000000e+00 +7.815499999999999740e-09 0.000000000000000000e+00 +7.816000000000000306e-09 0.000000000000000000e+00 +7.816499999999999219e-09 0.000000000000000000e+00 +7.816999999999999786e-09 0.000000000000000000e+00 +7.817500000000000353e-09 0.000000000000000000e+00 +7.817999999999999266e-09 0.000000000000000000e+00 +7.818499999999999833e-09 0.000000000000000000e+00 +7.819000000000000400e-09 0.000000000000000000e+00 +7.819499999999999312e-09 0.000000000000000000e+00 +7.819999999999999879e-09 0.000000000000000000e+00 +7.820500000000000446e-09 0.000000000000000000e+00 +7.820999999999999359e-09 0.000000000000000000e+00 +7.821499999999999926e-09 0.000000000000000000e+00 +7.822000000000000493e-09 0.000000000000000000e+00 +7.822499999999999405e-09 0.000000000000000000e+00 +7.822999999999999972e-09 0.000000000000000000e+00 +7.823500000000000539e-09 0.000000000000000000e+00 +7.823999999999999452e-09 0.000000000000000000e+00 +7.824500000000000019e-09 0.000000000000000000e+00 +7.825000000000000586e-09 0.000000000000000000e+00 +7.825499999999999498e-09 0.000000000000000000e+00 +7.826000000000000065e-09 0.000000000000000000e+00 +7.826500000000000632e-09 0.000000000000000000e+00 +7.826999999999999545e-09 0.000000000000000000e+00 +7.827500000000000112e-09 0.000000000000000000e+00 +7.827999999999999024e-09 0.000000000000000000e+00 +7.828499999999999591e-09 0.000000000000000000e+00 +7.829000000000000158e-09 0.000000000000000000e+00 +7.829499999999999071e-09 0.000000000000000000e+00 +7.829999999999999638e-09 0.000000000000000000e+00 +7.830500000000000205e-09 0.000000000000000000e+00 +7.830999999999999117e-09 0.000000000000000000e+00 +7.831499999999999684e-09 0.000000000000000000e+00 +7.832000000000000251e-09 0.000000000000000000e+00 +7.832499999999999164e-09 0.000000000000000000e+00 +7.832999999999999731e-09 0.000000000000000000e+00 +7.833500000000000298e-09 0.000000000000000000e+00 +7.833999999999999210e-09 0.000000000000000000e+00 +7.834499999999999777e-09 0.000000000000000000e+00 +7.835000000000000344e-09 0.000000000000000000e+00 +7.835499999999999257e-09 0.000000000000000000e+00 +7.835999999999999824e-09 0.000000000000000000e+00 +7.836500000000000391e-09 0.000000000000000000e+00 +7.836999999999999303e-09 0.000000000000000000e+00 +7.837499999999999870e-09 0.000000000000000000e+00 +7.838000000000000437e-09 0.000000000000000000e+00 +7.838499999999999350e-09 0.000000000000000000e+00 +7.838999999999999917e-09 0.000000000000000000e+00 +7.839500000000000484e-09 0.000000000000000000e+00 +7.839999999999999396e-09 0.000000000000000000e+00 +7.840499999999999963e-09 0.000000000000000000e+00 +7.841000000000000530e-09 0.000000000000000000e+00 +7.841499999999999443e-09 0.000000000000000000e+00 +7.842000000000000010e-09 0.000000000000000000e+00 +7.842500000000000577e-09 0.000000000000000000e+00 +7.842999999999999489e-09 0.000000000000000000e+00 +7.843500000000000056e-09 0.000000000000000000e+00 +7.844000000000000623e-09 0.000000000000000000e+00 +7.844499999999999536e-09 0.000000000000000000e+00 +7.845000000000000103e-09 0.000000000000000000e+00 +7.845499999999999016e-09 0.000000000000000000e+00 +7.845999999999999582e-09 0.000000000000000000e+00 +7.846500000000000149e-09 0.000000000000000000e+00 +7.846999999999999062e-09 0.000000000000000000e+00 +7.847499999999999629e-09 0.000000000000000000e+00 +7.848000000000000196e-09 0.000000000000000000e+00 +7.848499999999999109e-09 0.000000000000000000e+00 +7.848999999999999676e-09 0.000000000000000000e+00 +7.849500000000000242e-09 0.000000000000000000e+00 +7.849999999999999155e-09 0.000000000000000000e+00 +7.850499999999999722e-09 0.000000000000000000e+00 +7.851000000000000289e-09 0.000000000000000000e+00 +7.851499999999999202e-09 0.000000000000000000e+00 +7.851999999999999769e-09 0.000000000000000000e+00 +7.852500000000000336e-09 0.000000000000000000e+00 +7.852999999999999248e-09 0.000000000000000000e+00 +7.853499999999999815e-09 0.000000000000000000e+00 +7.854000000000000382e-09 0.000000000000000000e+00 +7.854499999999999295e-09 0.000000000000000000e+00 +7.854999999999999862e-09 0.000000000000000000e+00 +7.855500000000000429e-09 0.000000000000000000e+00 +7.855999999999999341e-09 0.000000000000000000e+00 +7.856499999999999908e-09 0.000000000000000000e+00 +7.857000000000000475e-09 0.000000000000000000e+00 +7.857499999999999388e-09 0.000000000000000000e+00 +7.857999999999999955e-09 0.000000000000000000e+00 +7.858500000000000522e-09 0.000000000000000000e+00 +7.858999999999999434e-09 0.000000000000000000e+00 +7.859500000000000001e-09 0.000000000000000000e+00 +7.860000000000000568e-09 0.000000000000000000e+00 +7.860499999999999481e-09 0.000000000000000000e+00 +7.861000000000000048e-09 0.000000000000000000e+00 +7.861500000000000615e-09 0.000000000000000000e+00 +7.861999999999999527e-09 0.000000000000000000e+00 +7.862500000000000094e-09 0.000000000000000000e+00 +7.863000000000000661e-09 0.000000000000000000e+00 +7.863499999999999574e-09 0.000000000000000000e+00 +7.864000000000000141e-09 0.000000000000000000e+00 +7.864499999999999053e-09 0.000000000000000000e+00 +7.864999999999999620e-09 0.000000000000000000e+00 +7.865500000000000187e-09 0.000000000000000000e+00 +7.865999999999999100e-09 0.000000000000000000e+00 +7.866499999999999667e-09 0.000000000000000000e+00 +7.867000000000000234e-09 0.000000000000000000e+00 +7.867499999999999146e-09 0.000000000000000000e+00 +7.867999999999999713e-09 0.000000000000000000e+00 +7.868500000000000280e-09 0.000000000000000000e+00 +7.868999999999999193e-09 0.000000000000000000e+00 +7.869499999999999760e-09 0.000000000000000000e+00 +7.870000000000000327e-09 0.000000000000000000e+00 +7.870499999999999239e-09 0.000000000000000000e+00 +7.870999999999999806e-09 0.000000000000000000e+00 +7.871500000000000373e-09 0.000000000000000000e+00 +7.871999999999999286e-09 0.000000000000000000e+00 +7.872499999999999853e-09 0.000000000000000000e+00 +7.873000000000000420e-09 0.000000000000000000e+00 +7.873499999999999332e-09 0.000000000000000000e+00 +7.873999999999999899e-09 0.000000000000000000e+00 +7.874500000000000466e-09 0.000000000000000000e+00 +7.874999999999999379e-09 0.000000000000000000e+00 +7.875499999999999946e-09 0.000000000000000000e+00 +7.876000000000000513e-09 0.000000000000000000e+00 +7.876499999999999425e-09 0.000000000000000000e+00 +7.876999999999999992e-09 0.000000000000000000e+00 +7.877500000000000559e-09 0.000000000000000000e+00 +7.877999999999999472e-09 0.000000000000000000e+00 +7.878500000000000039e-09 0.000000000000000000e+00 +7.879000000000000606e-09 0.000000000000000000e+00 +7.879499999999999519e-09 0.000000000000000000e+00 +7.880000000000000085e-09 0.000000000000000000e+00 +7.880500000000000652e-09 0.000000000000000000e+00 +7.880999999999999565e-09 0.000000000000000000e+00 +7.881500000000000132e-09 0.000000000000000000e+00 +7.881999999999999045e-09 0.000000000000000000e+00 +7.882499999999999612e-09 0.000000000000000000e+00 +7.883000000000000178e-09 0.000000000000000000e+00 +7.883499999999999091e-09 0.000000000000000000e+00 +7.883999999999999658e-09 0.000000000000000000e+00 +7.884500000000000225e-09 0.000000000000000000e+00 +7.884999999999999138e-09 0.000000000000000000e+00 +7.885499999999999705e-09 0.000000000000000000e+00 +7.886000000000000272e-09 0.000000000000000000e+00 +7.886499999999999184e-09 0.000000000000000000e+00 +7.886999999999999751e-09 0.000000000000000000e+00 +7.887500000000000318e-09 0.000000000000000000e+00 +7.887999999999999231e-09 0.000000000000000000e+00 +7.888499999999999798e-09 0.000000000000000000e+00 +7.889000000000000365e-09 0.000000000000000000e+00 +7.889499999999999277e-09 0.000000000000000000e+00 +7.889999999999999844e-09 0.000000000000000000e+00 +7.890500000000000411e-09 0.000000000000000000e+00 +7.890999999999999324e-09 0.000000000000000000e+00 +7.891499999999999891e-09 0.000000000000000000e+00 +7.892000000000000458e-09 0.000000000000000000e+00 +7.892499999999999370e-09 0.000000000000000000e+00 +7.892999999999999937e-09 0.000000000000000000e+00 +7.893500000000000504e-09 0.000000000000000000e+00 +7.893999999999999417e-09 0.000000000000000000e+00 +7.894499999999999984e-09 0.000000000000000000e+00 +7.895000000000000551e-09 0.000000000000000000e+00 +7.895499999999999463e-09 0.000000000000000000e+00 +7.896000000000000030e-09 0.000000000000000000e+00 +7.896500000000000597e-09 0.000000000000000000e+00 +7.896999999999999510e-09 0.000000000000000000e+00 +7.897500000000000077e-09 0.000000000000000000e+00 +7.898000000000000644e-09 0.000000000000000000e+00 +7.898499999999999556e-09 0.000000000000000000e+00 +7.899000000000000123e-09 0.000000000000000000e+00 +7.899499999999999036e-09 0.000000000000000000e+00 +7.899999999999999603e-09 0.000000000000000000e+00 +7.900500000000000170e-09 0.000000000000000000e+00 +7.900999999999999082e-09 0.000000000000000000e+00 +7.901499999999999649e-09 0.000000000000000000e+00 +7.902000000000000216e-09 0.000000000000000000e+00 +7.902499999999999129e-09 0.000000000000000000e+00 +7.902999999999999696e-09 0.000000000000000000e+00 +7.903500000000000263e-09 0.000000000000000000e+00 +7.903999999999999175e-09 0.000000000000000000e+00 +7.904499999999999742e-09 0.000000000000000000e+00 +7.905000000000000309e-09 0.000000000000000000e+00 +7.905499999999999222e-09 0.000000000000000000e+00 +7.905999999999999789e-09 0.000000000000000000e+00 +7.906500000000000356e-09 0.000000000000000000e+00 +7.906999999999999268e-09 0.000000000000000000e+00 +7.907499999999999835e-09 0.000000000000000000e+00 +7.908000000000000402e-09 0.000000000000000000e+00 +7.908499999999999315e-09 0.000000000000000000e+00 +7.908999999999999882e-09 0.000000000000000000e+00 +7.909500000000000449e-09 0.000000000000000000e+00 +7.909999999999999361e-09 0.000000000000000000e+00 +7.910499999999999928e-09 0.000000000000000000e+00 +7.911000000000000495e-09 0.000000000000000000e+00 +7.911499999999999408e-09 0.000000000000000000e+00 +7.911999999999999975e-09 0.000000000000000000e+00 +7.912500000000000542e-09 0.000000000000000000e+00 +7.912999999999999455e-09 0.000000000000000000e+00 +7.913500000000000021e-09 0.000000000000000000e+00 +7.914000000000000588e-09 0.000000000000000000e+00 +7.914499999999999501e-09 0.000000000000000000e+00 +7.915000000000000068e-09 0.000000000000000000e+00 +7.915500000000000635e-09 0.000000000000000000e+00 +7.915999999999999548e-09 0.000000000000000000e+00 +7.916500000000000115e-09 0.000000000000000000e+00 +7.916999999999999027e-09 0.000000000000000000e+00 +7.917499999999999594e-09 0.000000000000000000e+00 +7.918000000000000161e-09 0.000000000000000000e+00 +7.918499999999999074e-09 0.000000000000000000e+00 +7.918999999999999641e-09 0.000000000000000000e+00 +7.919500000000000208e-09 0.000000000000000000e+00 +7.919999999999999120e-09 0.000000000000000000e+00 +7.920499999999999687e-09 0.000000000000000000e+00 +7.921000000000000254e-09 0.000000000000000000e+00 +7.921499999999999167e-09 0.000000000000000000e+00 +7.921999999999999734e-09 0.000000000000000000e+00 +7.922500000000000301e-09 0.000000000000000000e+00 +7.922999999999999213e-09 0.000000000000000000e+00 +7.923499999999999780e-09 0.000000000000000000e+00 +7.924000000000000347e-09 0.000000000000000000e+00 +7.924499999999999260e-09 0.000000000000000000e+00 +7.924999999999999827e-09 0.000000000000000000e+00 +7.925500000000000394e-09 0.000000000000000000e+00 +7.925999999999999306e-09 0.000000000000000000e+00 +7.926499999999999873e-09 0.000000000000000000e+00 +7.927000000000000440e-09 0.000000000000000000e+00 +7.927499999999999353e-09 0.000000000000000000e+00 +7.927999999999999920e-09 0.000000000000000000e+00 +7.928500000000000487e-09 0.000000000000000000e+00 +7.928999999999999399e-09 0.000000000000000000e+00 +7.929499999999999966e-09 0.000000000000000000e+00 +7.930000000000000533e-09 0.000000000000000000e+00 +7.930499999999999446e-09 0.000000000000000000e+00 +7.931000000000000013e-09 0.000000000000000000e+00 +7.931500000000000580e-09 0.000000000000000000e+00 +7.931999999999999492e-09 0.000000000000000000e+00 +7.932500000000000059e-09 0.000000000000000000e+00 +7.933000000000000626e-09 0.000000000000000000e+00 +7.933499999999999539e-09 0.000000000000000000e+00 +7.934000000000000106e-09 0.000000000000000000e+00 +7.934499999999999018e-09 0.000000000000000000e+00 +7.934999999999999585e-09 0.000000000000000000e+00 +7.935500000000000152e-09 0.000000000000000000e+00 +7.935999999999999065e-09 0.000000000000000000e+00 +7.936499999999999632e-09 0.000000000000000000e+00 +7.937000000000000199e-09 0.000000000000000000e+00 +7.937499999999999111e-09 0.000000000000000000e+00 +7.937999999999999678e-09 0.000000000000000000e+00 +7.938500000000000245e-09 0.000000000000000000e+00 +7.938999999999999158e-09 0.000000000000000000e+00 +7.939499999999999725e-09 0.000000000000000000e+00 +7.940000000000000292e-09 0.000000000000000000e+00 +7.940499999999999204e-09 0.000000000000000000e+00 +7.940999999999999771e-09 0.000000000000000000e+00 +7.941500000000000338e-09 0.000000000000000000e+00 +7.941999999999999251e-09 0.000000000000000000e+00 +7.942499999999999818e-09 0.000000000000000000e+00 +7.943000000000000385e-09 0.000000000000000000e+00 +7.943499999999999297e-09 0.000000000000000000e+00 +7.943999999999999864e-09 0.000000000000000000e+00 +7.944500000000000431e-09 0.000000000000000000e+00 +7.944999999999999344e-09 0.000000000000000000e+00 +7.945499999999999911e-09 0.000000000000000000e+00 +7.946000000000000478e-09 0.000000000000000000e+00 +7.946499999999999391e-09 0.000000000000000000e+00 +7.946999999999999957e-09 0.000000000000000000e+00 +7.947500000000000524e-09 0.000000000000000000e+00 +7.947999999999999437e-09 0.000000000000000000e+00 +7.948500000000000004e-09 0.000000000000000000e+00 +7.949000000000000571e-09 0.000000000000000000e+00 +7.949499999999999484e-09 0.000000000000000000e+00 +7.950000000000000051e-09 0.000000000000000000e+00 +7.950500000000000617e-09 0.000000000000000000e+00 +7.950999999999999530e-09 0.000000000000000000e+00 +7.951500000000000097e-09 0.000000000000000000e+00 +7.952000000000000664e-09 0.000000000000000000e+00 +7.952499999999999577e-09 0.000000000000000000e+00 +7.953000000000000144e-09 0.000000000000000000e+00 +7.953499999999999056e-09 0.000000000000000000e+00 +7.953999999999999623e-09 0.000000000000000000e+00 +7.954500000000000190e-09 0.000000000000000000e+00 +7.954999999999999103e-09 0.000000000000000000e+00 +7.955499999999999670e-09 0.000000000000000000e+00 +7.956000000000000237e-09 0.000000000000000000e+00 +7.956499999999999149e-09 0.000000000000000000e+00 +7.956999999999999716e-09 0.000000000000000000e+00 +7.957500000000000283e-09 0.000000000000000000e+00 +7.957999999999999196e-09 0.000000000000000000e+00 +7.958499999999999763e-09 0.000000000000000000e+00 +7.959000000000000330e-09 0.000000000000000000e+00 +7.959499999999999242e-09 0.000000000000000000e+00 +7.959999999999999809e-09 0.000000000000000000e+00 +7.960500000000000376e-09 0.000000000000000000e+00 +7.960999999999999289e-09 0.000000000000000000e+00 +7.961499999999999856e-09 0.000000000000000000e+00 +7.962000000000000423e-09 0.000000000000000000e+00 +7.962499999999999335e-09 0.000000000000000000e+00 +7.962999999999999902e-09 0.000000000000000000e+00 +7.963500000000000469e-09 0.000000000000000000e+00 +7.963999999999999382e-09 0.000000000000000000e+00 +7.964499999999999949e-09 0.000000000000000000e+00 +7.965000000000000516e-09 0.000000000000000000e+00 +7.965499999999999428e-09 0.000000000000000000e+00 +7.965999999999999995e-09 0.000000000000000000e+00 +7.966500000000000562e-09 0.000000000000000000e+00 +7.966999999999999475e-09 0.000000000000000000e+00 +7.967500000000000042e-09 0.000000000000000000e+00 +7.968000000000000609e-09 0.000000000000000000e+00 +7.968499999999999521e-09 0.000000000000000000e+00 +7.969000000000000088e-09 0.000000000000000000e+00 +7.969500000000000655e-09 0.000000000000000000e+00 +7.969999999999999568e-09 0.000000000000000000e+00 +7.970500000000000135e-09 0.000000000000000000e+00 +7.970999999999999047e-09 0.000000000000000000e+00 +7.971499999999999614e-09 0.000000000000000000e+00 +7.972000000000000181e-09 0.000000000000000000e+00 +7.972499999999999094e-09 0.000000000000000000e+00 +7.972999999999999661e-09 0.000000000000000000e+00 +7.973500000000000228e-09 0.000000000000000000e+00 +7.973999999999999140e-09 0.000000000000000000e+00 +7.974499999999999707e-09 0.000000000000000000e+00 +7.975000000000000274e-09 0.000000000000000000e+00 +7.975499999999999187e-09 0.000000000000000000e+00 +7.975999999999999754e-09 0.000000000000000000e+00 +7.976500000000000321e-09 0.000000000000000000e+00 +7.976999999999999234e-09 0.000000000000000000e+00 +7.977499999999999800e-09 0.000000000000000000e+00 +7.978000000000000367e-09 0.000000000000000000e+00 +7.978499999999999280e-09 0.000000000000000000e+00 +7.978999999999999847e-09 0.000000000000000000e+00 +7.979500000000000414e-09 0.000000000000000000e+00 +7.979999999999999327e-09 0.000000000000000000e+00 +7.980499999999999894e-09 0.000000000000000000e+00 +7.981000000000000460e-09 0.000000000000000000e+00 +7.981499999999999373e-09 0.000000000000000000e+00 +7.981999999999999940e-09 0.000000000000000000e+00 +7.982500000000000507e-09 0.000000000000000000e+00 +7.982999999999999420e-09 0.000000000000000000e+00 +7.983499999999999987e-09 0.000000000000000000e+00 +7.984000000000000554e-09 0.000000000000000000e+00 +7.984499999999999466e-09 0.000000000000000000e+00 +7.985000000000000033e-09 0.000000000000000000e+00 +7.985500000000000600e-09 0.000000000000000000e+00 +7.985999999999999513e-09 0.000000000000000000e+00 +7.986500000000000080e-09 0.000000000000000000e+00 +7.987000000000000647e-09 0.000000000000000000e+00 +7.987499999999999559e-09 0.000000000000000000e+00 +7.988000000000000126e-09 0.000000000000000000e+00 +7.988499999999999039e-09 0.000000000000000000e+00 +7.988999999999999606e-09 0.000000000000000000e+00 +7.989500000000000173e-09 0.000000000000000000e+00 +7.989999999999999085e-09 0.000000000000000000e+00 +7.990499999999999652e-09 0.000000000000000000e+00 +7.991000000000000219e-09 0.000000000000000000e+00 +7.991499999999999132e-09 0.000000000000000000e+00 +7.991999999999999699e-09 0.000000000000000000e+00 +7.992500000000000266e-09 0.000000000000000000e+00 +7.992999999999999178e-09 0.000000000000000000e+00 +7.993499999999999745e-09 0.000000000000000000e+00 +7.994000000000000312e-09 0.000000000000000000e+00 +7.994499999999999225e-09 0.000000000000000000e+00 +7.994999999999999792e-09 0.000000000000000000e+00 +7.995500000000000359e-09 0.000000000000000000e+00 +7.995999999999999271e-09 0.000000000000000000e+00 +7.996499999999999838e-09 0.000000000000000000e+00 +7.997000000000000405e-09 0.000000000000000000e+00 +7.997499999999999318e-09 0.000000000000000000e+00 +7.997999999999999885e-09 0.000000000000000000e+00 +7.998500000000000452e-09 0.000000000000000000e+00 +7.998999999999999364e-09 0.000000000000000000e+00 +7.999499999999999931e-09 0.000000000000000000e+00 +8.000000000000000498e-09 0.000000000000000000e+00 +8.000499999999999411e-09 0.000000000000000000e+00 +8.000999999999999978e-09 0.000000000000000000e+00 +8.001500000000000545e-09 0.000000000000000000e+00 +8.001999999999999457e-09 0.000000000000000000e+00 +8.002500000000000024e-09 0.000000000000000000e+00 +8.003000000000000591e-09 0.000000000000000000e+00 +8.003499999999999504e-09 0.000000000000000000e+00 +8.004000000000000071e-09 0.000000000000000000e+00 +8.004500000000000638e-09 0.000000000000000000e+00 +8.004999999999999550e-09 0.000000000000000000e+00 +8.005500000000000117e-09 0.000000000000000000e+00 +8.005999999999999030e-09 0.000000000000000000e+00 +8.006499999999999597e-09 0.000000000000000000e+00 +8.007000000000000164e-09 0.000000000000000000e+00 +8.007499999999999076e-09 0.000000000000000000e+00 +8.007999999999999643e-09 0.000000000000000000e+00 +8.008500000000000210e-09 0.000000000000000000e+00 +8.008999999999999123e-09 0.000000000000000000e+00 +8.009499999999999690e-09 0.000000000000000000e+00 +8.010000000000000257e-09 0.000000000000000000e+00 +8.010499999999999170e-09 0.000000000000000000e+00 +8.010999999999999736e-09 0.000000000000000000e+00 +8.011500000000000303e-09 0.000000000000000000e+00 +8.011999999999999216e-09 0.000000000000000000e+00 +8.012499999999999783e-09 0.000000000000000000e+00 +8.013000000000000350e-09 0.000000000000000000e+00 +8.013499999999999263e-09 0.000000000000000000e+00 +8.013999999999999830e-09 0.000000000000000000e+00 +8.014500000000000396e-09 0.000000000000000000e+00 +8.014999999999999309e-09 0.000000000000000000e+00 +8.015499999999999876e-09 0.000000000000000000e+00 +8.016000000000000443e-09 0.000000000000000000e+00 +8.016499999999999356e-09 0.000000000000000000e+00 +8.016999999999999923e-09 0.000000000000000000e+00 +8.017500000000000490e-09 0.000000000000000000e+00 +8.017999999999999402e-09 0.000000000000000000e+00 +8.018499999999999969e-09 0.000000000000000000e+00 +8.019000000000000536e-09 0.000000000000000000e+00 +8.019499999999999449e-09 0.000000000000000000e+00 +8.020000000000000016e-09 0.000000000000000000e+00 +8.020500000000000583e-09 0.000000000000000000e+00 +8.020999999999999495e-09 0.000000000000000000e+00 +8.021500000000000062e-09 0.000000000000000000e+00 +8.022000000000000629e-09 0.000000000000000000e+00 +8.022499999999999542e-09 0.000000000000000000e+00 +8.023000000000000109e-09 0.000000000000000000e+00 +8.023499999999999021e-09 0.000000000000000000e+00 +8.023999999999999588e-09 0.000000000000000000e+00 +8.024500000000000155e-09 0.000000000000000000e+00 +8.024999999999999068e-09 0.000000000000000000e+00 +8.025499999999999635e-09 0.000000000000000000e+00 +8.026000000000000202e-09 0.000000000000000000e+00 +8.026499999999999114e-09 0.000000000000000000e+00 +8.026999999999999681e-09 0.000000000000000000e+00 +8.027500000000000248e-09 0.000000000000000000e+00 +8.027999999999999161e-09 0.000000000000000000e+00 +8.028499999999999728e-09 0.000000000000000000e+00 +8.029000000000000295e-09 0.000000000000000000e+00 +8.029499999999999207e-09 0.000000000000000000e+00 +8.029999999999999774e-09 0.000000000000000000e+00 +8.030500000000000341e-09 0.000000000000000000e+00 +8.030999999999999254e-09 0.000000000000000000e+00 +8.031499999999999821e-09 0.000000000000000000e+00 +8.032000000000000388e-09 0.000000000000000000e+00 +8.032499999999999300e-09 0.000000000000000000e+00 +8.032999999999999867e-09 0.000000000000000000e+00 +8.033500000000000434e-09 0.000000000000000000e+00 +8.033999999999999347e-09 0.000000000000000000e+00 +8.034499999999999914e-09 0.000000000000000000e+00 +8.035000000000000481e-09 0.000000000000000000e+00 +8.035499999999999393e-09 0.000000000000000000e+00 +8.035999999999999960e-09 0.000000000000000000e+00 +8.036500000000000527e-09 0.000000000000000000e+00 +8.036999999999999440e-09 0.000000000000000000e+00 +8.037500000000000007e-09 0.000000000000000000e+00 +8.038000000000000574e-09 0.000000000000000000e+00 +8.038499999999999486e-09 0.000000000000000000e+00 +8.039000000000000053e-09 0.000000000000000000e+00 +8.039500000000000620e-09 0.000000000000000000e+00 +8.039999999999999533e-09 0.000000000000000000e+00 +8.040500000000000100e-09 0.000000000000000000e+00 +8.040999999999999013e-09 0.000000000000000000e+00 +8.041499999999999579e-09 0.000000000000000000e+00 +8.042000000000000146e-09 0.000000000000000000e+00 +8.042499999999999059e-09 0.000000000000000000e+00 +8.042999999999999626e-09 0.000000000000000000e+00 +8.043500000000000193e-09 0.000000000000000000e+00 +8.043999999999999106e-09 0.000000000000000000e+00 +8.044499999999999672e-09 0.000000000000000000e+00 +8.045000000000000239e-09 0.000000000000000000e+00 +8.045499999999999152e-09 0.000000000000000000e+00 +8.045999999999999719e-09 0.000000000000000000e+00 +8.046500000000000286e-09 0.000000000000000000e+00 +8.046999999999999199e-09 0.000000000000000000e+00 +8.047499999999999766e-09 0.000000000000000000e+00 +8.048000000000000332e-09 0.000000000000000000e+00 +8.048499999999999245e-09 0.000000000000000000e+00 +8.048999999999999812e-09 0.000000000000000000e+00 +8.049500000000000379e-09 0.000000000000000000e+00 +8.049999999999999292e-09 0.000000000000000000e+00 +8.050499999999999859e-09 0.000000000000000000e+00 +8.051000000000000426e-09 0.000000000000000000e+00 +8.051499999999999338e-09 0.000000000000000000e+00 +8.051999999999999905e-09 0.000000000000000000e+00 +8.052500000000000472e-09 0.000000000000000000e+00 +8.052999999999999385e-09 0.000000000000000000e+00 +8.053499999999999952e-09 0.000000000000000000e+00 +8.054000000000000519e-09 0.000000000000000000e+00 +8.054499999999999431e-09 0.000000000000000000e+00 +8.054999999999999998e-09 0.000000000000000000e+00 +8.055500000000000565e-09 0.000000000000000000e+00 +8.055999999999999478e-09 0.000000000000000000e+00 +8.056500000000000045e-09 0.000000000000000000e+00 +8.057000000000000612e-09 0.000000000000000000e+00 +8.057499999999999524e-09 0.000000000000000000e+00 +8.058000000000000091e-09 0.000000000000000000e+00 +8.058500000000000658e-09 0.000000000000000000e+00 +8.058999999999999571e-09 0.000000000000000000e+00 +8.059500000000000138e-09 0.000000000000000000e+00 +8.059999999999999050e-09 0.000000000000000000e+00 +8.060499999999999617e-09 0.000000000000000000e+00 +8.061000000000000184e-09 0.000000000000000000e+00 +8.061499999999999097e-09 0.000000000000000000e+00 +8.061999999999999664e-09 0.000000000000000000e+00 +8.062500000000000231e-09 0.000000000000000000e+00 +8.062999999999999143e-09 0.000000000000000000e+00 +8.063499999999999710e-09 0.000000000000000000e+00 +8.064000000000000277e-09 0.000000000000000000e+00 +8.064499999999999190e-09 0.000000000000000000e+00 +8.064999999999999757e-09 0.000000000000000000e+00 +8.065500000000000324e-09 0.000000000000000000e+00 +8.065999999999999236e-09 0.000000000000000000e+00 +8.066499999999999803e-09 0.000000000000000000e+00 +8.067000000000000370e-09 0.000000000000000000e+00 +8.067499999999999283e-09 0.000000000000000000e+00 +8.067999999999999850e-09 0.000000000000000000e+00 +8.068500000000000417e-09 0.000000000000000000e+00 +8.068999999999999329e-09 0.000000000000000000e+00 +8.069499999999999896e-09 0.000000000000000000e+00 +8.070000000000000463e-09 0.000000000000000000e+00 +8.070499999999999376e-09 0.000000000000000000e+00 +8.070999999999999943e-09 0.000000000000000000e+00 +8.071500000000000510e-09 0.000000000000000000e+00 +8.071999999999999422e-09 0.000000000000000000e+00 +8.072499999999999989e-09 0.000000000000000000e+00 +8.073000000000000556e-09 0.000000000000000000e+00 +8.073499999999999469e-09 0.000000000000000000e+00 +8.074000000000000036e-09 0.000000000000000000e+00 +8.074500000000000603e-09 0.000000000000000000e+00 +8.074999999999999515e-09 0.000000000000000000e+00 +8.075500000000000082e-09 0.000000000000000000e+00 +8.076000000000000649e-09 0.000000000000000000e+00 +8.076499999999999562e-09 0.000000000000000000e+00 +8.077000000000000129e-09 0.000000000000000000e+00 +8.077499999999999042e-09 0.000000000000000000e+00 +8.077999999999999609e-09 0.000000000000000000e+00 +8.078500000000000175e-09 0.000000000000000000e+00 +8.078999999999999088e-09 0.000000000000000000e+00 +8.079499999999999655e-09 0.000000000000000000e+00 +8.080000000000000222e-09 0.000000000000000000e+00 +8.080499999999999135e-09 0.000000000000000000e+00 +8.080999999999999702e-09 0.000000000000000000e+00 +8.081500000000000269e-09 0.000000000000000000e+00 +8.081999999999999181e-09 0.000000000000000000e+00 +8.082499999999999748e-09 0.000000000000000000e+00 +8.083000000000000315e-09 0.000000000000000000e+00 +8.083499999999999228e-09 0.000000000000000000e+00 +8.083999999999999795e-09 0.000000000000000000e+00 +8.084500000000000362e-09 0.000000000000000000e+00 +8.084999999999999274e-09 0.000000000000000000e+00 +8.085499999999999841e-09 0.000000000000000000e+00 +8.086000000000000408e-09 0.000000000000000000e+00 +8.086499999999999321e-09 0.000000000000000000e+00 +8.086999999999999888e-09 0.000000000000000000e+00 +8.087500000000000455e-09 0.000000000000000000e+00 +8.087999999999999367e-09 0.000000000000000000e+00 +8.088499999999999934e-09 0.000000000000000000e+00 +8.089000000000000501e-09 0.000000000000000000e+00 +8.089499999999999414e-09 0.000000000000000000e+00 +8.089999999999999981e-09 0.000000000000000000e+00 +8.090500000000000548e-09 0.000000000000000000e+00 +8.090999999999999460e-09 0.000000000000000000e+00 +8.091500000000000027e-09 0.000000000000000000e+00 +8.092000000000000594e-09 0.000000000000000000e+00 +8.092499999999999507e-09 0.000000000000000000e+00 +8.093000000000000074e-09 0.000000000000000000e+00 +8.093500000000000641e-09 0.000000000000000000e+00 +8.093999999999999553e-09 0.000000000000000000e+00 +8.094500000000000120e-09 0.000000000000000000e+00 +8.094999999999999033e-09 0.000000000000000000e+00 +8.095499999999999600e-09 0.000000000000000000e+00 +8.096000000000000167e-09 0.000000000000000000e+00 +8.096499999999999079e-09 0.000000000000000000e+00 +8.096999999999999646e-09 0.000000000000000000e+00 +8.097500000000000213e-09 0.000000000000000000e+00 +8.097999999999999126e-09 0.000000000000000000e+00 +8.098499999999999693e-09 0.000000000000000000e+00 +8.099000000000000260e-09 0.000000000000000000e+00 +8.099499999999999172e-09 0.000000000000000000e+00 +8.099999999999999739e-09 0.000000000000000000e+00 +8.100500000000000306e-09 0.000000000000000000e+00 +8.100999999999999219e-09 0.000000000000000000e+00 +8.101499999999999786e-09 0.000000000000000000e+00 +8.102000000000000353e-09 0.000000000000000000e+00 +8.102499999999999265e-09 0.000000000000000000e+00 +8.102999999999999832e-09 0.000000000000000000e+00 +8.103500000000000399e-09 0.000000000000000000e+00 +8.103999999999999312e-09 0.000000000000000000e+00 +8.104499999999999879e-09 0.000000000000000000e+00 +8.105000000000000446e-09 0.000000000000000000e+00 +8.105499999999999358e-09 0.000000000000000000e+00 +8.105999999999999925e-09 0.000000000000000000e+00 +8.106500000000000492e-09 0.000000000000000000e+00 +8.106999999999999405e-09 0.000000000000000000e+00 +8.107499999999999972e-09 0.000000000000000000e+00 +8.108000000000000539e-09 0.000000000000000000e+00 +8.108499999999999451e-09 0.000000000000000000e+00 +8.109000000000000018e-09 0.000000000000000000e+00 +8.109500000000000585e-09 0.000000000000000000e+00 +8.109999999999999498e-09 0.000000000000000000e+00 +8.110500000000000065e-09 0.000000000000000000e+00 +8.111000000000000632e-09 0.000000000000000000e+00 +8.111499999999999545e-09 0.000000000000000000e+00 +8.112000000000000111e-09 0.000000000000000000e+00 +8.112499999999999024e-09 0.000000000000000000e+00 +8.112999999999999591e-09 0.000000000000000000e+00 +8.113500000000000158e-09 0.000000000000000000e+00 +8.113999999999999071e-09 0.000000000000000000e+00 +8.114499999999999638e-09 0.000000000000000000e+00 +8.115000000000000205e-09 0.000000000000000000e+00 +8.115499999999999117e-09 0.000000000000000000e+00 +8.115999999999999684e-09 0.000000000000000000e+00 +8.116500000000000251e-09 0.000000000000000000e+00 +8.116999999999999164e-09 0.000000000000000000e+00 +8.117499999999999731e-09 0.000000000000000000e+00 +8.118000000000000298e-09 0.000000000000000000e+00 +8.118499999999999210e-09 0.000000000000000000e+00 +8.118999999999999777e-09 0.000000000000000000e+00 +8.119500000000000344e-09 0.000000000000000000e+00 +8.119999999999999257e-09 0.000000000000000000e+00 +8.120499999999999824e-09 0.000000000000000000e+00 +8.121000000000000391e-09 0.000000000000000000e+00 +8.121499999999999303e-09 0.000000000000000000e+00 +8.121999999999999870e-09 0.000000000000000000e+00 +8.122500000000000437e-09 0.000000000000000000e+00 +8.122999999999999350e-09 0.000000000000000000e+00 +8.123499999999999917e-09 0.000000000000000000e+00 +8.124000000000000484e-09 0.000000000000000000e+00 +8.124499999999999396e-09 0.000000000000000000e+00 +8.124999999999999963e-09 0.000000000000000000e+00 +8.125500000000000530e-09 0.000000000000000000e+00 +8.125999999999999443e-09 0.000000000000000000e+00 +8.126500000000000010e-09 0.000000000000000000e+00 +8.127000000000000577e-09 0.000000000000000000e+00 +8.127499999999999489e-09 0.000000000000000000e+00 +8.128000000000000056e-09 0.000000000000000000e+00 +8.128500000000000623e-09 0.000000000000000000e+00 +8.128999999999999536e-09 0.000000000000000000e+00 +8.129500000000000103e-09 0.000000000000000000e+00 +8.129999999999999015e-09 0.000000000000000000e+00 +8.130499999999999582e-09 0.000000000000000000e+00 +8.131000000000000149e-09 0.000000000000000000e+00 +8.131499999999999062e-09 0.000000000000000000e+00 +8.131999999999999629e-09 0.000000000000000000e+00 +8.132500000000000196e-09 0.000000000000000000e+00 +8.132999999999999108e-09 0.000000000000000000e+00 +8.133499999999999675e-09 0.000000000000000000e+00 +8.134000000000000242e-09 0.000000000000000000e+00 +8.134499999999999155e-09 0.000000000000000000e+00 +8.134999999999999722e-09 0.000000000000000000e+00 +8.135500000000000289e-09 0.000000000000000000e+00 +8.135999999999999201e-09 0.000000000000000000e+00 +8.136499999999999768e-09 0.000000000000000000e+00 +8.137000000000000335e-09 0.000000000000000000e+00 +8.137499999999999248e-09 0.000000000000000000e+00 +8.137999999999999815e-09 0.000000000000000000e+00 +8.138500000000000382e-09 0.000000000000000000e+00 +8.138999999999999294e-09 0.000000000000000000e+00 +8.139499999999999861e-09 0.000000000000000000e+00 +8.140000000000000428e-09 0.000000000000000000e+00 +8.140499999999999341e-09 0.000000000000000000e+00 +8.140999999999999908e-09 0.000000000000000000e+00 +8.141500000000000475e-09 0.000000000000000000e+00 +8.141999999999999388e-09 0.000000000000000000e+00 +8.142499999999999954e-09 0.000000000000000000e+00 +8.143000000000000521e-09 0.000000000000000000e+00 +8.143499999999999434e-09 0.000000000000000000e+00 +8.144000000000000001e-09 0.000000000000000000e+00 +8.144500000000000568e-09 0.000000000000000000e+00 +8.144999999999999481e-09 0.000000000000000000e+00 +8.145500000000000048e-09 0.000000000000000000e+00 +8.146000000000000614e-09 0.000000000000000000e+00 +8.146499999999999527e-09 0.000000000000000000e+00 +8.147000000000000094e-09 0.000000000000000000e+00 +8.147500000000000661e-09 0.000000000000000000e+00 +8.147999999999999574e-09 0.000000000000000000e+00 +8.148500000000000141e-09 0.000000000000000000e+00 +8.148999999999999053e-09 0.000000000000000000e+00 +8.149499999999999620e-09 0.000000000000000000e+00 +8.150000000000000187e-09 0.000000000000000000e+00 +8.150499999999999100e-09 0.000000000000000000e+00 +8.150999999999999667e-09 0.000000000000000000e+00 +8.151500000000000234e-09 0.000000000000000000e+00 +8.151999999999999146e-09 0.000000000000000000e+00 +8.152499999999999713e-09 0.000000000000000000e+00 +8.153000000000000280e-09 0.000000000000000000e+00 +8.153499999999999193e-09 0.000000000000000000e+00 +8.153999999999999760e-09 0.000000000000000000e+00 +8.154500000000000327e-09 0.000000000000000000e+00 +8.154999999999999239e-09 0.000000000000000000e+00 +8.155499999999999806e-09 0.000000000000000000e+00 +8.156000000000000373e-09 0.000000000000000000e+00 +8.156499999999999286e-09 0.000000000000000000e+00 +8.156999999999999853e-09 0.000000000000000000e+00 +8.157500000000000420e-09 0.000000000000000000e+00 +8.157999999999999332e-09 0.000000000000000000e+00 +8.158499999999999899e-09 0.000000000000000000e+00 +8.159000000000000466e-09 0.000000000000000000e+00 +8.159499999999999379e-09 0.000000000000000000e+00 +8.159999999999999946e-09 0.000000000000000000e+00 +8.160500000000000513e-09 0.000000000000000000e+00 +8.160999999999999425e-09 0.000000000000000000e+00 +8.161499999999999992e-09 0.000000000000000000e+00 +8.162000000000000559e-09 0.000000000000000000e+00 +8.162499999999999472e-09 0.000000000000000000e+00 +8.163000000000000039e-09 0.000000000000000000e+00 +8.163500000000000606e-09 0.000000000000000000e+00 +8.163999999999999518e-09 0.000000000000000000e+00 +8.164500000000000085e-09 0.000000000000000000e+00 +8.165000000000000652e-09 0.000000000000000000e+00 +8.165499999999999565e-09 0.000000000000000000e+00 +8.166000000000000132e-09 0.000000000000000000e+00 +8.166499999999999044e-09 0.000000000000000000e+00 +8.166999999999999611e-09 0.000000000000000000e+00 +8.167500000000000178e-09 0.000000000000000000e+00 +8.167999999999999091e-09 0.000000000000000000e+00 +8.168499999999999658e-09 0.000000000000000000e+00 +8.169000000000000225e-09 0.000000000000000000e+00 +8.169499999999999137e-09 0.000000000000000000e+00 +8.169999999999999704e-09 0.000000000000000000e+00 +8.170500000000000271e-09 0.000000000000000000e+00 +8.170999999999999184e-09 0.000000000000000000e+00 +8.171499999999999751e-09 0.000000000000000000e+00 +8.172000000000000318e-09 0.000000000000000000e+00 +8.172499999999999230e-09 0.000000000000000000e+00 +8.172999999999999797e-09 0.000000000000000000e+00 +8.173500000000000364e-09 0.000000000000000000e+00 +8.173999999999999277e-09 0.000000000000000000e+00 +8.174499999999999844e-09 0.000000000000000000e+00 +8.175000000000000411e-09 0.000000000000000000e+00 +8.175499999999999324e-09 0.000000000000000000e+00 +8.175999999999999890e-09 0.000000000000000000e+00 +8.176500000000000457e-09 0.000000000000000000e+00 +8.176999999999999370e-09 0.000000000000000000e+00 +8.177499999999999937e-09 0.000000000000000000e+00 +8.178000000000000504e-09 0.000000000000000000e+00 +8.178499999999999417e-09 0.000000000000000000e+00 +8.178999999999999984e-09 0.000000000000000000e+00 +8.179500000000000550e-09 0.000000000000000000e+00 +8.179999999999999463e-09 0.000000000000000000e+00 +8.180500000000000030e-09 0.000000000000000000e+00 +8.181000000000000597e-09 0.000000000000000000e+00 +8.181499999999999510e-09 0.000000000000000000e+00 +8.182000000000000077e-09 0.000000000000000000e+00 +8.182500000000000644e-09 0.000000000000000000e+00 +8.182999999999999556e-09 0.000000000000000000e+00 +8.183500000000000123e-09 0.000000000000000000e+00 +8.183999999999999036e-09 0.000000000000000000e+00 +8.184499999999999603e-09 0.000000000000000000e+00 +8.185000000000000170e-09 0.000000000000000000e+00 +8.185499999999999082e-09 0.000000000000000000e+00 +8.185999999999999649e-09 0.000000000000000000e+00 +8.186500000000000216e-09 0.000000000000000000e+00 +8.186999999999999129e-09 0.000000000000000000e+00 +8.187499999999999696e-09 0.000000000000000000e+00 +8.188000000000000263e-09 0.000000000000000000e+00 +8.188499999999999175e-09 0.000000000000000000e+00 +8.188999999999999742e-09 0.000000000000000000e+00 +8.189500000000000309e-09 0.000000000000000000e+00 +8.189999999999999222e-09 0.000000000000000000e+00 +8.190499999999999789e-09 0.000000000000000000e+00 +8.191000000000000356e-09 0.000000000000000000e+00 +8.191499999999999268e-09 0.000000000000000000e+00 +8.191999999999999835e-09 0.000000000000000000e+00 +8.192500000000000402e-09 0.000000000000000000e+00 +8.192999999999999315e-09 0.000000000000000000e+00 +8.193499999999999882e-09 0.000000000000000000e+00 +8.194000000000000449e-09 0.000000000000000000e+00 +8.194499999999999361e-09 0.000000000000000000e+00 +8.194999999999999928e-09 0.000000000000000000e+00 +8.195500000000000495e-09 0.000000000000000000e+00 +8.195999999999999408e-09 0.000000000000000000e+00 +8.196499999999999975e-09 0.000000000000000000e+00 +8.197000000000000542e-09 0.000000000000000000e+00 +8.197499999999999454e-09 0.000000000000000000e+00 +8.198000000000000021e-09 0.000000000000000000e+00 +8.198500000000000588e-09 0.000000000000000000e+00 +8.198999999999999501e-09 0.000000000000000000e+00 +8.199500000000000068e-09 0.000000000000000000e+00 +8.200000000000000635e-09 0.000000000000000000e+00 +8.200499999999999547e-09 0.000000000000000000e+00 +8.201000000000000114e-09 0.000000000000000000e+00 +8.201499999999999027e-09 0.000000000000000000e+00 +8.201999999999999594e-09 0.000000000000000000e+00 +8.202500000000000161e-09 0.000000000000000000e+00 +8.202999999999999073e-09 0.000000000000000000e+00 +8.203499999999999640e-09 0.000000000000000000e+00 +8.204000000000000207e-09 0.000000000000000000e+00 +8.204499999999999120e-09 0.000000000000000000e+00 +8.204999999999999687e-09 0.000000000000000000e+00 +8.205500000000000254e-09 0.000000000000000000e+00 +8.205999999999999167e-09 0.000000000000000000e+00 +8.206499999999999733e-09 0.000000000000000000e+00 +8.207000000000000300e-09 0.000000000000000000e+00 +8.207499999999999213e-09 0.000000000000000000e+00 +8.207999999999999780e-09 0.000000000000000000e+00 +8.208500000000000347e-09 0.000000000000000000e+00 +8.208999999999999260e-09 0.000000000000000000e+00 +8.209499999999999826e-09 0.000000000000000000e+00 +8.210000000000000393e-09 0.000000000000000000e+00 +8.210499999999999306e-09 0.000000000000000000e+00 +8.210999999999999873e-09 0.000000000000000000e+00 +8.211500000000000440e-09 0.000000000000000000e+00 +8.211999999999999353e-09 0.000000000000000000e+00 +8.212499999999999920e-09 0.000000000000000000e+00 +8.213000000000000486e-09 0.000000000000000000e+00 +8.213499999999999399e-09 0.000000000000000000e+00 +8.213999999999999966e-09 0.000000000000000000e+00 +8.214500000000000533e-09 0.000000000000000000e+00 +8.214999999999999446e-09 0.000000000000000000e+00 +8.215500000000000013e-09 0.000000000000000000e+00 +8.216000000000000580e-09 0.000000000000000000e+00 +8.216499999999999492e-09 0.000000000000000000e+00 +8.217000000000000059e-09 0.000000000000000000e+00 +8.217500000000000626e-09 0.000000000000000000e+00 +8.217999999999999539e-09 0.000000000000000000e+00 +8.218500000000000106e-09 0.000000000000000000e+00 +8.218999999999999018e-09 0.000000000000000000e+00 +8.219499999999999585e-09 0.000000000000000000e+00 +8.220000000000000152e-09 0.000000000000000000e+00 +8.220499999999999065e-09 0.000000000000000000e+00 +8.220999999999999632e-09 0.000000000000000000e+00 +8.221500000000000199e-09 0.000000000000000000e+00 +8.221999999999999111e-09 0.000000000000000000e+00 +8.222499999999999678e-09 0.000000000000000000e+00 +8.223000000000000245e-09 0.000000000000000000e+00 +8.223499999999999158e-09 0.000000000000000000e+00 +8.223999999999999725e-09 0.000000000000000000e+00 +8.224500000000000292e-09 0.000000000000000000e+00 +8.224999999999999204e-09 0.000000000000000000e+00 +8.225499999999999771e-09 0.000000000000000000e+00 +8.226000000000000338e-09 0.000000000000000000e+00 +8.226499999999999251e-09 0.000000000000000000e+00 +8.226999999999999818e-09 0.000000000000000000e+00 +8.227500000000000385e-09 0.000000000000000000e+00 +8.227999999999999297e-09 0.000000000000000000e+00 +8.228499999999999864e-09 0.000000000000000000e+00 +8.229000000000000431e-09 0.000000000000000000e+00 +8.229499999999999344e-09 0.000000000000000000e+00 +8.229999999999999911e-09 0.000000000000000000e+00 +8.230500000000000478e-09 0.000000000000000000e+00 +8.230999999999999390e-09 0.000000000000000000e+00 +8.231499999999999957e-09 0.000000000000000000e+00 +8.232000000000000524e-09 0.000000000000000000e+00 +8.232499999999999437e-09 0.000000000000000000e+00 +8.233000000000000004e-09 0.000000000000000000e+00 +8.233500000000000571e-09 0.000000000000000000e+00 +8.233999999999999483e-09 0.000000000000000000e+00 +8.234500000000000050e-09 0.000000000000000000e+00 +8.235000000000000617e-09 0.000000000000000000e+00 +8.235499999999999530e-09 0.000000000000000000e+00 +8.236000000000000097e-09 0.000000000000000000e+00 +8.236499999999999009e-09 0.000000000000000000e+00 +8.236999999999999576e-09 0.000000000000000000e+00 +8.237500000000000143e-09 0.000000000000000000e+00 +8.237999999999999056e-09 0.000000000000000000e+00 +8.238499999999999623e-09 0.000000000000000000e+00 +8.239000000000000190e-09 0.000000000000000000e+00 +8.239499999999999103e-09 0.000000000000000000e+00 +8.239999999999999669e-09 0.000000000000000000e+00 +8.240500000000000236e-09 0.000000000000000000e+00 +8.240999999999999149e-09 0.000000000000000000e+00 +8.241499999999999716e-09 0.000000000000000000e+00 +8.242000000000000283e-09 0.000000000000000000e+00 +8.242499999999999196e-09 0.000000000000000000e+00 +8.242999999999999763e-09 0.000000000000000000e+00 +8.243500000000000329e-09 0.000000000000000000e+00 +8.243999999999999242e-09 0.000000000000000000e+00 +8.244499999999999809e-09 0.000000000000000000e+00 +8.245000000000000376e-09 0.000000000000000000e+00 +8.245499999999999289e-09 0.000000000000000000e+00 +8.245999999999999856e-09 0.000000000000000000e+00 +8.246500000000000423e-09 0.000000000000000000e+00 +8.246999999999999335e-09 0.000000000000000000e+00 +8.247499999999999902e-09 0.000000000000000000e+00 +8.248000000000000469e-09 0.000000000000000000e+00 +8.248499999999999382e-09 0.000000000000000000e+00 +8.248999999999999949e-09 0.000000000000000000e+00 +8.249500000000000516e-09 0.000000000000000000e+00 +8.249999999999999428e-09 0.000000000000000000e+00 +8.250499999999999995e-09 0.000000000000000000e+00 +8.251000000000000562e-09 0.000000000000000000e+00 +8.251499999999999475e-09 0.000000000000000000e+00 +8.252000000000000042e-09 0.000000000000000000e+00 +8.252500000000000609e-09 0.000000000000000000e+00 +8.252999999999999521e-09 0.000000000000000000e+00 +8.253500000000000088e-09 0.000000000000000000e+00 +8.254000000000000655e-09 0.000000000000000000e+00 +8.254499999999999568e-09 0.000000000000000000e+00 +8.255000000000000135e-09 0.000000000000000000e+00 +8.255499999999999047e-09 0.000000000000000000e+00 +8.255999999999999614e-09 0.000000000000000000e+00 +8.256500000000000181e-09 0.000000000000000000e+00 +8.256999999999999094e-09 0.000000000000000000e+00 +8.257499999999999661e-09 0.000000000000000000e+00 +8.258000000000000228e-09 0.000000000000000000e+00 +8.258499999999999140e-09 0.000000000000000000e+00 +8.258999999999999707e-09 0.000000000000000000e+00 +8.259500000000000274e-09 0.000000000000000000e+00 +8.259999999999999187e-09 0.000000000000000000e+00 +8.260499999999999754e-09 0.000000000000000000e+00 +8.261000000000000321e-09 0.000000000000000000e+00 +8.261499999999999233e-09 0.000000000000000000e+00 +8.261999999999999800e-09 0.000000000000000000e+00 +8.262500000000000367e-09 0.000000000000000000e+00 +8.262999999999999280e-09 0.000000000000000000e+00 +8.263499999999999847e-09 0.000000000000000000e+00 +8.264000000000000414e-09 0.000000000000000000e+00 +8.264499999999999326e-09 0.000000000000000000e+00 +8.264999999999999893e-09 0.000000000000000000e+00 +8.265500000000000460e-09 0.000000000000000000e+00 +8.265999999999999373e-09 0.000000000000000000e+00 +8.266499999999999940e-09 0.000000000000000000e+00 +8.267000000000000507e-09 0.000000000000000000e+00 +8.267499999999999419e-09 0.000000000000000000e+00 +8.267999999999999986e-09 0.000000000000000000e+00 +8.268500000000000553e-09 0.000000000000000000e+00 +8.268999999999999466e-09 0.000000000000000000e+00 +8.269500000000000033e-09 0.000000000000000000e+00 +8.270000000000000600e-09 0.000000000000000000e+00 +8.270499999999999512e-09 0.000000000000000000e+00 +8.271000000000000079e-09 0.000000000000000000e+00 +8.271500000000000646e-09 0.000000000000000000e+00 +8.271999999999999559e-09 0.000000000000000000e+00 +8.272500000000000126e-09 0.000000000000000000e+00 +8.272999999999999039e-09 0.000000000000000000e+00 +8.273499999999999605e-09 0.000000000000000000e+00 +8.274000000000000172e-09 0.000000000000000000e+00 +8.274499999999999085e-09 0.000000000000000000e+00 +8.274999999999999652e-09 0.000000000000000000e+00 +8.275500000000000219e-09 0.000000000000000000e+00 +8.275999999999999132e-09 0.000000000000000000e+00 +8.276499999999999699e-09 0.000000000000000000e+00 +8.277000000000000265e-09 0.000000000000000000e+00 +8.277499999999999178e-09 0.000000000000000000e+00 +8.277999999999999745e-09 0.000000000000000000e+00 +8.278500000000000312e-09 0.000000000000000000e+00 +8.278999999999999225e-09 0.000000000000000000e+00 +8.279499999999999792e-09 0.000000000000000000e+00 +8.280000000000000359e-09 0.000000000000000000e+00 +8.280499999999999271e-09 0.000000000000000000e+00 +8.280999999999999838e-09 0.000000000000000000e+00 +8.281500000000000405e-09 0.000000000000000000e+00 +8.281999999999999318e-09 0.000000000000000000e+00 +8.282499999999999885e-09 0.000000000000000000e+00 +8.283000000000000452e-09 0.000000000000000000e+00 +8.283499999999999364e-09 0.000000000000000000e+00 +8.283999999999999931e-09 0.000000000000000000e+00 +8.284500000000000498e-09 0.000000000000000000e+00 +8.284999999999999411e-09 0.000000000000000000e+00 +8.285499999999999978e-09 0.000000000000000000e+00 +8.286000000000000545e-09 0.000000000000000000e+00 +8.286499999999999457e-09 0.000000000000000000e+00 +8.287000000000000024e-09 0.000000000000000000e+00 +8.287500000000000591e-09 0.000000000000000000e+00 +8.287999999999999504e-09 0.000000000000000000e+00 +8.288500000000000071e-09 0.000000000000000000e+00 +8.289000000000000638e-09 0.000000000000000000e+00 +8.289499999999999550e-09 0.000000000000000000e+00 +8.290000000000000117e-09 0.000000000000000000e+00 +8.290499999999999030e-09 0.000000000000000000e+00 +8.290999999999999597e-09 0.000000000000000000e+00 +8.291500000000000164e-09 0.000000000000000000e+00 +8.291999999999999076e-09 0.000000000000000000e+00 +8.292499999999999643e-09 0.000000000000000000e+00 +8.293000000000000210e-09 0.000000000000000000e+00 +8.293499999999999123e-09 0.000000000000000000e+00 +8.293999999999999690e-09 0.000000000000000000e+00 +8.294500000000000257e-09 0.000000000000000000e+00 +8.294999999999999169e-09 0.000000000000000000e+00 +8.295499999999999736e-09 0.000000000000000000e+00 +8.296000000000000303e-09 0.000000000000000000e+00 +8.296499999999999216e-09 0.000000000000000000e+00 +8.296999999999999783e-09 0.000000000000000000e+00 +8.297500000000000350e-09 0.000000000000000000e+00 +8.297999999999999262e-09 0.000000000000000000e+00 +8.298499999999999829e-09 0.000000000000000000e+00 +8.299000000000000396e-09 0.000000000000000000e+00 +8.299499999999999309e-09 0.000000000000000000e+00 +8.299999999999999876e-09 0.000000000000000000e+00 +8.300500000000000443e-09 0.000000000000000000e+00 +8.300999999999999355e-09 0.000000000000000000e+00 +8.301499999999999922e-09 0.000000000000000000e+00 +8.302000000000000489e-09 0.000000000000000000e+00 +8.302499999999999402e-09 0.000000000000000000e+00 +8.302999999999999969e-09 0.000000000000000000e+00 +8.303500000000000536e-09 0.000000000000000000e+00 +8.303999999999999448e-09 0.000000000000000000e+00 +8.304500000000000015e-09 0.000000000000000000e+00 +8.305000000000000582e-09 0.000000000000000000e+00 +8.305499999999999495e-09 0.000000000000000000e+00 +8.306000000000000062e-09 0.000000000000000000e+00 +8.306500000000000629e-09 0.000000000000000000e+00 +8.306999999999999542e-09 0.000000000000000000e+00 +8.307500000000000108e-09 0.000000000000000000e+00 +8.307999999999999021e-09 0.000000000000000000e+00 +8.308499999999999588e-09 0.000000000000000000e+00 +8.309000000000000155e-09 0.000000000000000000e+00 +8.309499999999999068e-09 0.000000000000000000e+00 +8.309999999999999635e-09 0.000000000000000000e+00 +8.310500000000000202e-09 0.000000000000000000e+00 +8.310999999999999114e-09 0.000000000000000000e+00 +8.311499999999999681e-09 0.000000000000000000e+00 +8.312000000000000248e-09 0.000000000000000000e+00 +8.312499999999999161e-09 0.000000000000000000e+00 +8.312999999999999728e-09 0.000000000000000000e+00 +8.313500000000000295e-09 0.000000000000000000e+00 +8.313999999999999207e-09 0.000000000000000000e+00 +8.314499999999999774e-09 0.000000000000000000e+00 +8.315000000000000341e-09 0.000000000000000000e+00 +8.315499999999999254e-09 0.000000000000000000e+00 +8.315999999999999821e-09 0.000000000000000000e+00 +8.316500000000000388e-09 0.000000000000000000e+00 +8.316999999999999300e-09 0.000000000000000000e+00 +8.317499999999999867e-09 0.000000000000000000e+00 +8.318000000000000434e-09 0.000000000000000000e+00 +8.318499999999999347e-09 0.000000000000000000e+00 +8.318999999999999914e-09 0.000000000000000000e+00 +8.319500000000000481e-09 0.000000000000000000e+00 +8.319999999999999393e-09 0.000000000000000000e+00 +8.320499999999999960e-09 0.000000000000000000e+00 +8.321000000000000527e-09 0.000000000000000000e+00 +8.321499999999999440e-09 0.000000000000000000e+00 +8.322000000000000007e-09 0.000000000000000000e+00 +8.322500000000000574e-09 0.000000000000000000e+00 +8.322999999999999486e-09 0.000000000000000000e+00 +8.323500000000000053e-09 0.000000000000000000e+00 +8.324000000000000620e-09 0.000000000000000000e+00 +8.324499999999999533e-09 0.000000000000000000e+00 +8.325000000000000100e-09 0.000000000000000000e+00 +8.325499999999999012e-09 0.000000000000000000e+00 +8.325999999999999579e-09 0.000000000000000000e+00 +8.326500000000000146e-09 0.000000000000000000e+00 +8.326999999999999059e-09 0.000000000000000000e+00 +8.327499999999999626e-09 0.000000000000000000e+00 +8.328000000000000193e-09 0.000000000000000000e+00 +8.328499999999999105e-09 0.000000000000000000e+00 +8.328999999999999672e-09 0.000000000000000000e+00 +8.329500000000000239e-09 0.000000000000000000e+00 +8.329999999999999152e-09 0.000000000000000000e+00 +8.330499999999999719e-09 0.000000000000000000e+00 +8.331000000000000286e-09 0.000000000000000000e+00 +8.331499999999999198e-09 0.000000000000000000e+00 +8.331999999999999765e-09 0.000000000000000000e+00 +8.332500000000000332e-09 0.000000000000000000e+00 +8.332999999999999245e-09 0.000000000000000000e+00 +8.333499999999999812e-09 0.000000000000000000e+00 +8.334000000000000379e-09 0.000000000000000000e+00 +8.334499999999999291e-09 0.000000000000000000e+00 +8.334999999999999858e-09 0.000000000000000000e+00 +8.335500000000000425e-09 0.000000000000000000e+00 +8.335999999999999338e-09 0.000000000000000000e+00 +8.336499999999999905e-09 0.000000000000000000e+00 +8.337000000000000472e-09 0.000000000000000000e+00 +8.337499999999999384e-09 0.000000000000000000e+00 +8.337999999999999951e-09 0.000000000000000000e+00 +8.338500000000000518e-09 0.000000000000000000e+00 +8.338999999999999431e-09 0.000000000000000000e+00 +8.339499999999999998e-09 0.000000000000000000e+00 +8.340000000000000565e-09 0.000000000000000000e+00 +8.340499999999999478e-09 0.000000000000000000e+00 +8.341000000000000044e-09 0.000000000000000000e+00 +8.341500000000000611e-09 0.000000000000000000e+00 +8.341999999999999524e-09 0.000000000000000000e+00 +8.342500000000000091e-09 0.000000000000000000e+00 +8.343000000000000658e-09 0.000000000000000000e+00 +8.343499999999999571e-09 0.000000000000000000e+00 +8.344000000000000138e-09 0.000000000000000000e+00 +8.344499999999999050e-09 0.000000000000000000e+00 +8.344999999999999617e-09 0.000000000000000000e+00 +8.345500000000000184e-09 0.000000000000000000e+00 +8.345999999999999097e-09 0.000000000000000000e+00 +8.346499999999999664e-09 0.000000000000000000e+00 +8.347000000000000231e-09 0.000000000000000000e+00 +8.347499999999999143e-09 0.000000000000000000e+00 +8.347999999999999710e-09 0.000000000000000000e+00 +8.348500000000000277e-09 0.000000000000000000e+00 +8.348999999999999190e-09 0.000000000000000000e+00 +8.349499999999999757e-09 0.000000000000000000e+00 +8.350000000000000324e-09 0.000000000000000000e+00 +8.350499999999999236e-09 0.000000000000000000e+00 +8.350999999999999803e-09 0.000000000000000000e+00 +8.351500000000000370e-09 0.000000000000000000e+00 +8.351999999999999283e-09 0.000000000000000000e+00 +8.352499999999999850e-09 0.000000000000000000e+00 +8.353000000000000417e-09 0.000000000000000000e+00 +8.353499999999999329e-09 0.000000000000000000e+00 +8.353999999999999896e-09 0.000000000000000000e+00 +8.354500000000000463e-09 0.000000000000000000e+00 +8.354999999999999376e-09 0.000000000000000000e+00 +8.355499999999999943e-09 0.000000000000000000e+00 +8.356000000000000510e-09 0.000000000000000000e+00 +8.356499999999999422e-09 0.000000000000000000e+00 +8.356999999999999989e-09 0.000000000000000000e+00 +8.357500000000000556e-09 0.000000000000000000e+00 +8.357999999999999469e-09 0.000000000000000000e+00 +8.358500000000000036e-09 0.000000000000000000e+00 +8.359000000000000603e-09 0.000000000000000000e+00 +8.359499999999999515e-09 0.000000000000000000e+00 +8.360000000000000082e-09 0.000000000000000000e+00 +8.360500000000000649e-09 0.000000000000000000e+00 +8.360999999999999562e-09 0.000000000000000000e+00 +8.361500000000000129e-09 0.000000000000000000e+00 +8.361999999999999041e-09 0.000000000000000000e+00 +8.362499999999999608e-09 0.000000000000000000e+00 +8.363000000000000175e-09 0.000000000000000000e+00 +8.363499999999999088e-09 0.000000000000000000e+00 +8.363999999999999655e-09 0.000000000000000000e+00 +8.364500000000000222e-09 0.000000000000000000e+00 +8.364999999999999134e-09 0.000000000000000000e+00 +8.365499999999999701e-09 0.000000000000000000e+00 +8.366000000000000268e-09 0.000000000000000000e+00 +8.366499999999999181e-09 0.000000000000000000e+00 +8.366999999999999748e-09 0.000000000000000000e+00 +8.367500000000000315e-09 0.000000000000000000e+00 +8.367999999999999227e-09 0.000000000000000000e+00 +8.368499999999999794e-09 0.000000000000000000e+00 +8.369000000000000361e-09 0.000000000000000000e+00 +8.369499999999999274e-09 0.000000000000000000e+00 +8.369999999999999841e-09 0.000000000000000000e+00 +8.370500000000000408e-09 0.000000000000000000e+00 +8.370999999999999320e-09 0.000000000000000000e+00 +8.371499999999999887e-09 0.000000000000000000e+00 +8.372000000000000454e-09 0.000000000000000000e+00 +8.372499999999999367e-09 0.000000000000000000e+00 +8.372999999999999934e-09 0.000000000000000000e+00 +8.373500000000000501e-09 0.000000000000000000e+00 +8.373999999999999414e-09 0.000000000000000000e+00 +8.374499999999999980e-09 0.000000000000000000e+00 +8.375000000000000547e-09 0.000000000000000000e+00 +8.375499999999999460e-09 0.000000000000000000e+00 +8.376000000000000027e-09 0.000000000000000000e+00 +8.376500000000000594e-09 0.000000000000000000e+00 +8.376999999999999507e-09 0.000000000000000000e+00 +8.377500000000000074e-09 0.000000000000000000e+00 +8.378000000000000640e-09 0.000000000000000000e+00 +8.378499999999999553e-09 0.000000000000000000e+00 +8.379000000000000120e-09 0.000000000000000000e+00 +8.379499999999999033e-09 0.000000000000000000e+00 +8.379999999999999600e-09 0.000000000000000000e+00 +8.380500000000000167e-09 0.000000000000000000e+00 +8.380999999999999079e-09 0.000000000000000000e+00 +8.381499999999999646e-09 0.000000000000000000e+00 +8.382000000000000213e-09 0.000000000000000000e+00 +8.382499999999999126e-09 0.000000000000000000e+00 +8.382999999999999693e-09 0.000000000000000000e+00 +8.383500000000000260e-09 0.000000000000000000e+00 +8.383999999999999172e-09 0.000000000000000000e+00 +8.384499999999999739e-09 0.000000000000000000e+00 +8.385000000000000306e-09 0.000000000000000000e+00 +8.385499999999999219e-09 0.000000000000000000e+00 +8.385999999999999786e-09 0.000000000000000000e+00 +8.386500000000000353e-09 0.000000000000000000e+00 +8.386999999999999265e-09 0.000000000000000000e+00 +8.387499999999999832e-09 0.000000000000000000e+00 +8.388000000000000399e-09 0.000000000000000000e+00 +8.388499999999999312e-09 0.000000000000000000e+00 +8.388999999999999879e-09 0.000000000000000000e+00 +8.389500000000000446e-09 0.000000000000000000e+00 +8.389999999999999358e-09 0.000000000000000000e+00 +8.390499999999999925e-09 0.000000000000000000e+00 +8.391000000000000492e-09 0.000000000000000000e+00 +8.391499999999999405e-09 0.000000000000000000e+00 +8.391999999999999972e-09 0.000000000000000000e+00 +8.392500000000000539e-09 0.000000000000000000e+00 +8.392999999999999451e-09 0.000000000000000000e+00 +8.393500000000000018e-09 0.000000000000000000e+00 +8.394000000000000585e-09 0.000000000000000000e+00 +8.394499999999999498e-09 0.000000000000000000e+00 +8.395000000000000065e-09 0.000000000000000000e+00 +8.395500000000000632e-09 0.000000000000000000e+00 +8.395999999999999544e-09 0.000000000000000000e+00 +8.396500000000000111e-09 0.000000000000000000e+00 +8.396999999999999024e-09 0.000000000000000000e+00 +8.397499999999999591e-09 0.000000000000000000e+00 +8.398000000000000158e-09 0.000000000000000000e+00 +8.398499999999999070e-09 0.000000000000000000e+00 +8.398999999999999637e-09 0.000000000000000000e+00 +8.399500000000000204e-09 0.000000000000000000e+00 +8.399999999999999117e-09 0.000000000000000000e+00 +8.400499999999999684e-09 0.000000000000000000e+00 +8.401000000000000251e-09 0.000000000000000000e+00 +8.401499999999999163e-09 0.000000000000000000e+00 +8.401999999999999730e-09 0.000000000000000000e+00 +8.402500000000000297e-09 0.000000000000000000e+00 +8.402999999999999210e-09 0.000000000000000000e+00 +8.403499999999999777e-09 0.000000000000000000e+00 +8.404000000000000344e-09 0.000000000000000000e+00 +8.404499999999999257e-09 0.000000000000000000e+00 +8.404999999999999823e-09 0.000000000000000000e+00 +8.405500000000000390e-09 0.000000000000000000e+00 +8.405999999999999303e-09 0.000000000000000000e+00 +8.406499999999999870e-09 0.000000000000000000e+00 +8.407000000000000437e-09 0.000000000000000000e+00 +8.407499999999999350e-09 0.000000000000000000e+00 +8.407999999999999917e-09 0.000000000000000000e+00 +8.408500000000000483e-09 0.000000000000000000e+00 +8.408999999999999396e-09 0.000000000000000000e+00 +8.409499999999999963e-09 0.000000000000000000e+00 +8.410000000000000530e-09 0.000000000000000000e+00 +8.410499999999999443e-09 0.000000000000000000e+00 +8.411000000000000010e-09 0.000000000000000000e+00 +8.411500000000000577e-09 0.000000000000000000e+00 +8.411999999999999489e-09 0.000000000000000000e+00 +8.412500000000000056e-09 0.000000000000000000e+00 +8.413000000000000623e-09 0.000000000000000000e+00 +8.413499999999999536e-09 0.000000000000000000e+00 +8.414000000000000103e-09 0.000000000000000000e+00 +8.414499999999999015e-09 0.000000000000000000e+00 +8.414999999999999582e-09 0.000000000000000000e+00 +8.415500000000000149e-09 0.000000000000000000e+00 +8.415999999999999062e-09 0.000000000000000000e+00 +8.416499999999999629e-09 0.000000000000000000e+00 +8.417000000000000196e-09 0.000000000000000000e+00 +8.417499999999999108e-09 0.000000000000000000e+00 +8.417999999999999675e-09 0.000000000000000000e+00 +8.418500000000000242e-09 0.000000000000000000e+00 +8.418999999999999155e-09 0.000000000000000000e+00 +8.419499999999999722e-09 0.000000000000000000e+00 +8.420000000000000289e-09 0.000000000000000000e+00 +8.420499999999999201e-09 0.000000000000000000e+00 +8.420999999999999768e-09 0.000000000000000000e+00 +8.421500000000000335e-09 0.000000000000000000e+00 +8.421999999999999248e-09 0.000000000000000000e+00 +8.422499999999999815e-09 0.000000000000000000e+00 +8.423000000000000382e-09 0.000000000000000000e+00 +8.423499999999999294e-09 0.000000000000000000e+00 +8.423999999999999861e-09 0.000000000000000000e+00 +8.424500000000000428e-09 0.000000000000000000e+00 +8.424999999999999341e-09 0.000000000000000000e+00 +8.425499999999999908e-09 0.000000000000000000e+00 +8.426000000000000475e-09 0.000000000000000000e+00 +8.426499999999999387e-09 0.000000000000000000e+00 +8.426999999999999954e-09 0.000000000000000000e+00 +8.427500000000000521e-09 0.000000000000000000e+00 +8.427999999999999434e-09 0.000000000000000000e+00 +8.428500000000000001e-09 0.000000000000000000e+00 +8.429000000000000568e-09 0.000000000000000000e+00 +8.429499999999999480e-09 0.000000000000000000e+00 +8.430000000000000047e-09 0.000000000000000000e+00 +8.430500000000000614e-09 0.000000000000000000e+00 +8.430999999999999527e-09 0.000000000000000000e+00 +8.431500000000000094e-09 0.000000000000000000e+00 +8.431999999999999006e-09 0.000000000000000000e+00 +8.432499999999999573e-09 0.000000000000000000e+00 +8.433000000000000140e-09 0.000000000000000000e+00 +8.433499999999999053e-09 0.000000000000000000e+00 +8.433999999999999620e-09 0.000000000000000000e+00 +8.434500000000000187e-09 0.000000000000000000e+00 +8.434999999999999099e-09 0.000000000000000000e+00 +8.435499999999999666e-09 0.000000000000000000e+00 +8.436000000000000233e-09 0.000000000000000000e+00 +8.436499999999999146e-09 0.000000000000000000e+00 +8.436999999999999713e-09 0.000000000000000000e+00 +8.437500000000000280e-09 0.000000000000000000e+00 +8.437999999999999193e-09 0.000000000000000000e+00 +8.438499999999999759e-09 0.000000000000000000e+00 +8.439000000000000326e-09 0.000000000000000000e+00 +8.439499999999999239e-09 0.000000000000000000e+00 +8.439999999999999806e-09 0.000000000000000000e+00 +8.440500000000000373e-09 0.000000000000000000e+00 +8.440999999999999286e-09 0.000000000000000000e+00 +8.441499999999999853e-09 0.000000000000000000e+00 +8.442000000000000419e-09 0.000000000000000000e+00 +8.442499999999999332e-09 0.000000000000000000e+00 +8.442999999999999899e-09 0.000000000000000000e+00 +8.443500000000000466e-09 0.000000000000000000e+00 +8.443999999999999379e-09 0.000000000000000000e+00 +8.444499999999999946e-09 0.000000000000000000e+00 +8.445000000000000513e-09 0.000000000000000000e+00 +8.445499999999999425e-09 0.000000000000000000e+00 +8.445999999999999992e-09 0.000000000000000000e+00 +8.446500000000000559e-09 0.000000000000000000e+00 +8.446999999999999472e-09 0.000000000000000000e+00 +8.447500000000000039e-09 0.000000000000000000e+00 +8.448000000000000606e-09 0.000000000000000000e+00 +8.448499999999999518e-09 0.000000000000000000e+00 +8.449000000000000085e-09 0.000000000000000000e+00 +8.449500000000000652e-09 0.000000000000000000e+00 +8.449999999999999565e-09 0.000000000000000000e+00 +8.450500000000000132e-09 0.000000000000000000e+00 +8.450999999999999044e-09 0.000000000000000000e+00 +8.451499999999999611e-09 0.000000000000000000e+00 +8.452000000000000178e-09 0.000000000000000000e+00 +8.452499999999999091e-09 0.000000000000000000e+00 +8.452999999999999658e-09 0.000000000000000000e+00 +8.453500000000000225e-09 0.000000000000000000e+00 +8.453999999999999137e-09 0.000000000000000000e+00 +8.454499999999999704e-09 0.000000000000000000e+00 +8.455000000000000271e-09 0.000000000000000000e+00 +8.455499999999999184e-09 0.000000000000000000e+00 +8.455999999999999751e-09 0.000000000000000000e+00 +8.456500000000000318e-09 0.000000000000000000e+00 +8.456999999999999230e-09 0.000000000000000000e+00 +8.457499999999999797e-09 0.000000000000000000e+00 +8.458000000000000364e-09 0.000000000000000000e+00 +8.458499999999999277e-09 0.000000000000000000e+00 +8.458999999999999844e-09 0.000000000000000000e+00 +8.459500000000000411e-09 0.000000000000000000e+00 +8.459999999999999323e-09 0.000000000000000000e+00 +8.460499999999999890e-09 0.000000000000000000e+00 +8.461000000000000457e-09 0.000000000000000000e+00 +8.461499999999999370e-09 0.000000000000000000e+00 +8.461999999999999937e-09 0.000000000000000000e+00 +8.462500000000000504e-09 0.000000000000000000e+00 +8.462999999999999416e-09 0.000000000000000000e+00 +8.463499999999999983e-09 0.000000000000000000e+00 +8.464000000000000550e-09 0.000000000000000000e+00 +8.464499999999999463e-09 0.000000000000000000e+00 +8.465000000000000030e-09 0.000000000000000000e+00 +8.465500000000000597e-09 0.000000000000000000e+00 +8.465999999999999509e-09 0.000000000000000000e+00 +8.466500000000000076e-09 0.000000000000000000e+00 +8.467000000000000643e-09 0.000000000000000000e+00 +8.467499999999999556e-09 0.000000000000000000e+00 +8.468000000000000123e-09 0.000000000000000000e+00 +8.468499999999999036e-09 0.000000000000000000e+00 +8.468999999999999602e-09 0.000000000000000000e+00 +8.469500000000000169e-09 0.000000000000000000e+00 +8.469999999999999082e-09 0.000000000000000000e+00 +8.470499999999999649e-09 0.000000000000000000e+00 +8.471000000000000216e-09 0.000000000000000000e+00 +8.471499999999999129e-09 0.000000000000000000e+00 +8.471999999999999696e-09 0.000000000000000000e+00 +8.472500000000000262e-09 0.000000000000000000e+00 +8.472999999999999175e-09 0.000000000000000000e+00 +8.473499999999999742e-09 0.000000000000000000e+00 +8.474000000000000309e-09 0.000000000000000000e+00 +8.474499999999999222e-09 0.000000000000000000e+00 +8.474999999999999789e-09 0.000000000000000000e+00 +8.475500000000000356e-09 0.000000000000000000e+00 +8.475999999999999268e-09 0.000000000000000000e+00 +8.476499999999999835e-09 0.000000000000000000e+00 +8.477000000000000402e-09 0.000000000000000000e+00 +8.477499999999999315e-09 0.000000000000000000e+00 +8.477999999999999882e-09 0.000000000000000000e+00 +8.478500000000000449e-09 0.000000000000000000e+00 +8.478999999999999361e-09 0.000000000000000000e+00 +8.479499999999999928e-09 0.000000000000000000e+00 +8.480000000000000495e-09 0.000000000000000000e+00 +8.480499999999999408e-09 0.000000000000000000e+00 +8.480999999999999975e-09 0.000000000000000000e+00 +8.481500000000000542e-09 0.000000000000000000e+00 +8.481999999999999454e-09 0.000000000000000000e+00 +8.482500000000000021e-09 0.000000000000000000e+00 +8.483000000000000588e-09 0.000000000000000000e+00 +8.483499999999999501e-09 0.000000000000000000e+00 +8.484000000000000068e-09 0.000000000000000000e+00 +8.484500000000000635e-09 0.000000000000000000e+00 +8.484999999999999547e-09 0.000000000000000000e+00 +8.485500000000000114e-09 0.000000000000000000e+00 +8.485999999999999027e-09 0.000000000000000000e+00 +8.486499999999999594e-09 0.000000000000000000e+00 +8.487000000000000161e-09 0.000000000000000000e+00 +8.487499999999999073e-09 0.000000000000000000e+00 +8.487999999999999640e-09 0.000000000000000000e+00 +8.488500000000000207e-09 0.000000000000000000e+00 +8.488999999999999120e-09 0.000000000000000000e+00 +8.489499999999999687e-09 0.000000000000000000e+00 +8.490000000000000254e-09 0.000000000000000000e+00 +8.490499999999999166e-09 0.000000000000000000e+00 +8.490999999999999733e-09 0.000000000000000000e+00 +8.491500000000000300e-09 0.000000000000000000e+00 +8.491999999999999213e-09 0.000000000000000000e+00 +8.492499999999999780e-09 0.000000000000000000e+00 +8.493000000000000347e-09 0.000000000000000000e+00 +8.493499999999999259e-09 0.000000000000000000e+00 +8.493999999999999826e-09 0.000000000000000000e+00 +8.494500000000000393e-09 0.000000000000000000e+00 +8.494999999999999306e-09 0.000000000000000000e+00 +8.495499999999999873e-09 0.000000000000000000e+00 +8.496000000000000440e-09 0.000000000000000000e+00 +8.496499999999999352e-09 0.000000000000000000e+00 +8.496999999999999919e-09 0.000000000000000000e+00 +8.497500000000000486e-09 0.000000000000000000e+00 +8.497999999999999399e-09 0.000000000000000000e+00 +8.498499999999999966e-09 0.000000000000000000e+00 +8.499000000000000533e-09 0.000000000000000000e+00 +8.499499999999999445e-09 0.000000000000000000e+00 +8.500000000000000012e-09 0.000000000000000000e+00 +8.500500000000000579e-09 0.000000000000000000e+00 +8.500999999999999492e-09 0.000000000000000000e+00 +8.501500000000000059e-09 0.000000000000000000e+00 +8.502000000000000626e-09 0.000000000000000000e+00 +8.502499999999999538e-09 0.000000000000000000e+00 +8.503000000000000105e-09 0.000000000000000000e+00 +8.503499999999999018e-09 0.000000000000000000e+00 +8.503999999999999585e-09 0.000000000000000000e+00 +8.504500000000000152e-09 0.000000000000000000e+00 +8.504999999999999065e-09 0.000000000000000000e+00 +8.505499999999999632e-09 0.000000000000000000e+00 +8.506000000000000198e-09 0.000000000000000000e+00 +8.506499999999999111e-09 0.000000000000000000e+00 +8.506999999999999678e-09 0.000000000000000000e+00 +8.507500000000000245e-09 0.000000000000000000e+00 +8.507999999999999158e-09 0.000000000000000000e+00 +8.508499999999999725e-09 0.000000000000000000e+00 +8.509000000000000292e-09 0.000000000000000000e+00 +8.509499999999999204e-09 0.000000000000000000e+00 +8.509999999999999771e-09 0.000000000000000000e+00 +8.510500000000000338e-09 0.000000000000000000e+00 +8.510999999999999251e-09 0.000000000000000000e+00 +8.511499999999999818e-09 0.000000000000000000e+00 +8.512000000000000385e-09 0.000000000000000000e+00 +8.512499999999999297e-09 0.000000000000000000e+00 +8.512999999999999864e-09 0.000000000000000000e+00 +8.513500000000000431e-09 0.000000000000000000e+00 +8.513999999999999344e-09 0.000000000000000000e+00 +8.514499999999999911e-09 0.000000000000000000e+00 +8.515000000000000478e-09 0.000000000000000000e+00 +8.515499999999999390e-09 0.000000000000000000e+00 +8.515999999999999957e-09 0.000000000000000000e+00 +8.516500000000000524e-09 0.000000000000000000e+00 +8.516999999999999437e-09 0.000000000000000000e+00 +8.517500000000000004e-09 0.000000000000000000e+00 +8.518000000000000571e-09 0.000000000000000000e+00 +8.518499999999999483e-09 0.000000000000000000e+00 +8.519000000000000050e-09 0.000000000000000000e+00 +8.519500000000000617e-09 0.000000000000000000e+00 +8.519999999999999530e-09 0.000000000000000000e+00 +8.520500000000000097e-09 0.000000000000000000e+00 +8.520999999999999009e-09 0.000000000000000000e+00 +8.521499999999999576e-09 0.000000000000000000e+00 +8.522000000000000143e-09 0.000000000000000000e+00 +8.522499999999999056e-09 0.000000000000000000e+00 +8.522999999999999623e-09 0.000000000000000000e+00 +8.523500000000000190e-09 0.000000000000000000e+00 +8.523999999999999102e-09 0.000000000000000000e+00 +8.524499999999999669e-09 0.000000000000000000e+00 +8.525000000000000236e-09 0.000000000000000000e+00 +8.525499999999999149e-09 0.000000000000000000e+00 +8.525999999999999716e-09 0.000000000000000000e+00 +8.526500000000000283e-09 0.000000000000000000e+00 +8.526999999999999195e-09 0.000000000000000000e+00 +8.527499999999999762e-09 0.000000000000000000e+00 +8.528000000000000329e-09 0.000000000000000000e+00 +8.528499999999999242e-09 0.000000000000000000e+00 +8.528999999999999809e-09 0.000000000000000000e+00 +8.529500000000000376e-09 0.000000000000000000e+00 +8.529999999999999288e-09 0.000000000000000000e+00 +8.530499999999999855e-09 0.000000000000000000e+00 +8.531000000000000422e-09 0.000000000000000000e+00 +8.531499999999999335e-09 0.000000000000000000e+00 +8.531999999999999902e-09 0.000000000000000000e+00 +8.532500000000000469e-09 0.000000000000000000e+00 +8.532999999999999381e-09 0.000000000000000000e+00 +8.533499999999999948e-09 0.000000000000000000e+00 +8.534000000000000515e-09 0.000000000000000000e+00 +8.534499999999999428e-09 0.000000000000000000e+00 +8.534999999999999995e-09 0.000000000000000000e+00 +8.535500000000000562e-09 0.000000000000000000e+00 +8.535999999999999474e-09 0.000000000000000000e+00 +8.536500000000000041e-09 0.000000000000000000e+00 +8.537000000000000608e-09 0.000000000000000000e+00 +8.537499999999999521e-09 0.000000000000000000e+00 +8.538000000000000088e-09 0.000000000000000000e+00 +8.538500000000000655e-09 0.000000000000000000e+00 +8.538999999999999568e-09 0.000000000000000000e+00 +8.539500000000000134e-09 0.000000000000000000e+00 +8.539999999999999047e-09 0.000000000000000000e+00 +8.540499999999999614e-09 0.000000000000000000e+00 +8.541000000000000181e-09 0.000000000000000000e+00 +8.541499999999999094e-09 0.000000000000000000e+00 +8.541999999999999661e-09 0.000000000000000000e+00 +8.542500000000000228e-09 0.000000000000000000e+00 +8.542999999999999140e-09 0.000000000000000000e+00 +8.543499999999999707e-09 0.000000000000000000e+00 +8.544000000000000274e-09 0.000000000000000000e+00 +8.544499999999999187e-09 0.000000000000000000e+00 +8.544999999999999754e-09 0.000000000000000000e+00 +8.545500000000000321e-09 0.000000000000000000e+00 +8.545999999999999233e-09 0.000000000000000000e+00 +8.546499999999999800e-09 0.000000000000000000e+00 +8.547000000000000367e-09 0.000000000000000000e+00 +8.547499999999999280e-09 0.000000000000000000e+00 +8.547999999999999847e-09 0.000000000000000000e+00 +8.548500000000000414e-09 0.000000000000000000e+00 +8.548999999999999326e-09 0.000000000000000000e+00 +8.549499999999999893e-09 0.000000000000000000e+00 +8.550000000000000460e-09 0.000000000000000000e+00 +8.550499999999999373e-09 0.000000000000000000e+00 +8.550999999999999940e-09 0.000000000000000000e+00 +8.551500000000000507e-09 0.000000000000000000e+00 +8.551999999999999419e-09 0.000000000000000000e+00 +8.552499999999999986e-09 0.000000000000000000e+00 +8.553000000000000553e-09 0.000000000000000000e+00 +8.553499999999999466e-09 0.000000000000000000e+00 +8.554000000000000033e-09 0.000000000000000000e+00 +8.554500000000000600e-09 0.000000000000000000e+00 +8.554999999999999512e-09 0.000000000000000000e+00 +8.555500000000000079e-09 0.000000000000000000e+00 +8.556000000000000646e-09 0.000000000000000000e+00 +8.556499999999999559e-09 0.000000000000000000e+00 +8.557000000000000126e-09 0.000000000000000000e+00 +8.557499999999999038e-09 0.000000000000000000e+00 +8.557999999999999605e-09 0.000000000000000000e+00 +8.558500000000000172e-09 0.000000000000000000e+00 +8.558999999999999085e-09 0.000000000000000000e+00 +8.559499999999999652e-09 0.000000000000000000e+00 +8.560000000000000219e-09 0.000000000000000000e+00 +8.560499999999999131e-09 0.000000000000000000e+00 +8.560999999999999698e-09 0.000000000000000000e+00 +8.561500000000000265e-09 0.000000000000000000e+00 +8.561999999999999178e-09 0.000000000000000000e+00 +8.562499999999999745e-09 0.000000000000000000e+00 +8.563000000000000312e-09 0.000000000000000000e+00 +8.563499999999999224e-09 0.000000000000000000e+00 +8.563999999999999791e-09 0.000000000000000000e+00 +8.564500000000000358e-09 0.000000000000000000e+00 +8.564999999999999271e-09 0.000000000000000000e+00 +8.565499999999999838e-09 0.000000000000000000e+00 +8.566000000000000405e-09 0.000000000000000000e+00 +8.566499999999999317e-09 0.000000000000000000e+00 +8.566999999999999884e-09 0.000000000000000000e+00 +8.567500000000000451e-09 0.000000000000000000e+00 +8.567999999999999364e-09 0.000000000000000000e+00 +8.568499999999999931e-09 0.000000000000000000e+00 +8.569000000000000498e-09 0.000000000000000000e+00 +8.569499999999999411e-09 0.000000000000000000e+00 +8.569999999999999977e-09 0.000000000000000000e+00 +8.570500000000000544e-09 0.000000000000000000e+00 +8.570999999999999457e-09 0.000000000000000000e+00 +8.571500000000000024e-09 0.000000000000000000e+00 +8.572000000000000591e-09 0.000000000000000000e+00 +8.572499999999999504e-09 0.000000000000000000e+00 +8.573000000000000071e-09 0.000000000000000000e+00 +8.573500000000000637e-09 0.000000000000000000e+00 +8.573999999999999550e-09 0.000000000000000000e+00 +8.574500000000000117e-09 0.000000000000000000e+00 +8.574999999999999030e-09 0.000000000000000000e+00 +8.575499999999999597e-09 0.000000000000000000e+00 +8.576000000000000164e-09 0.000000000000000000e+00 +8.576499999999999076e-09 0.000000000000000000e+00 +8.576999999999999643e-09 0.000000000000000000e+00 +8.577500000000000210e-09 0.000000000000000000e+00 +8.577999999999999123e-09 0.000000000000000000e+00 +8.578499999999999690e-09 0.000000000000000000e+00 +8.579000000000000257e-09 0.000000000000000000e+00 +8.579499999999999169e-09 0.000000000000000000e+00 +8.579999999999999736e-09 0.000000000000000000e+00 +8.580500000000000303e-09 0.000000000000000000e+00 +8.580999999999999216e-09 0.000000000000000000e+00 +8.581499999999999783e-09 0.000000000000000000e+00 +8.582000000000000350e-09 0.000000000000000000e+00 +8.582499999999999262e-09 0.000000000000000000e+00 +8.582999999999999829e-09 0.000000000000000000e+00 +8.583500000000000396e-09 0.000000000000000000e+00 +8.583999999999999309e-09 0.000000000000000000e+00 +8.584499999999999876e-09 0.000000000000000000e+00 +8.585000000000000443e-09 0.000000000000000000e+00 +8.585499999999999355e-09 0.000000000000000000e+00 +8.585999999999999922e-09 0.000000000000000000e+00 +8.586500000000000489e-09 0.000000000000000000e+00 +8.586999999999999402e-09 0.000000000000000000e+00 +8.587499999999999969e-09 0.000000000000000000e+00 +8.588000000000000536e-09 0.000000000000000000e+00 +8.588499999999999448e-09 0.000000000000000000e+00 +8.589000000000000015e-09 0.000000000000000000e+00 +8.589500000000000582e-09 0.000000000000000000e+00 +8.589999999999999495e-09 0.000000000000000000e+00 +8.590500000000000062e-09 0.000000000000000000e+00 +8.591000000000000629e-09 0.000000000000000000e+00 +8.591499999999999541e-09 0.000000000000000000e+00 +8.592000000000000108e-09 0.000000000000000000e+00 +8.592499999999999021e-09 0.000000000000000000e+00 +8.592999999999999588e-09 0.000000000000000000e+00 +8.593500000000000155e-09 0.000000000000000000e+00 +8.593999999999999067e-09 0.000000000000000000e+00 +8.594499999999999634e-09 0.000000000000000000e+00 +8.595000000000000201e-09 0.000000000000000000e+00 +8.595499999999999114e-09 0.000000000000000000e+00 +8.595999999999999681e-09 0.000000000000000000e+00 +8.596500000000000248e-09 0.000000000000000000e+00 +8.596999999999999160e-09 0.000000000000000000e+00 +8.597499999999999727e-09 0.000000000000000000e+00 +8.598000000000000294e-09 0.000000000000000000e+00 +8.598499999999999207e-09 0.000000000000000000e+00 +8.598999999999999774e-09 0.000000000000000000e+00 +8.599500000000000341e-09 0.000000000000000000e+00 +8.599999999999999253e-09 0.000000000000000000e+00 +8.600499999999999820e-09 0.000000000000000000e+00 +8.601000000000000387e-09 0.000000000000000000e+00 +8.601499999999999300e-09 0.000000000000000000e+00 +8.601999999999999867e-09 0.000000000000000000e+00 +8.602500000000000434e-09 0.000000000000000000e+00 +8.602999999999999347e-09 0.000000000000000000e+00 +8.603499999999999913e-09 0.000000000000000000e+00 +8.604000000000000480e-09 0.000000000000000000e+00 +8.604499999999999393e-09 0.000000000000000000e+00 +8.604999999999999960e-09 0.000000000000000000e+00 +8.605500000000000527e-09 0.000000000000000000e+00 +8.605999999999999440e-09 0.000000000000000000e+00 +8.606500000000000007e-09 0.000000000000000000e+00 +8.607000000000000573e-09 0.000000000000000000e+00 +8.607499999999999486e-09 0.000000000000000000e+00 +8.608000000000000053e-09 0.000000000000000000e+00 +8.608500000000000620e-09 0.000000000000000000e+00 +8.608999999999999533e-09 0.000000000000000000e+00 +8.609500000000000100e-09 0.000000000000000000e+00 +8.609999999999999012e-09 0.000000000000000000e+00 +8.610499999999999579e-09 0.000000000000000000e+00 +8.611000000000000146e-09 0.000000000000000000e+00 +8.611499999999999059e-09 0.000000000000000000e+00 +8.611999999999999626e-09 0.000000000000000000e+00 +8.612500000000000193e-09 0.000000000000000000e+00 +8.612999999999999105e-09 0.000000000000000000e+00 +8.613499999999999672e-09 0.000000000000000000e+00 +8.614000000000000239e-09 0.000000000000000000e+00 +8.614499999999999152e-09 0.000000000000000000e+00 +8.614999999999999719e-09 0.000000000000000000e+00 +8.615500000000000286e-09 0.000000000000000000e+00 +8.615999999999999198e-09 0.000000000000000000e+00 +8.616499999999999765e-09 0.000000000000000000e+00 +8.617000000000000332e-09 0.000000000000000000e+00 +8.617499999999999245e-09 0.000000000000000000e+00 +8.617999999999999812e-09 0.000000000000000000e+00 +8.618500000000000379e-09 0.000000000000000000e+00 +8.618999999999999291e-09 0.000000000000000000e+00 +8.619499999999999858e-09 0.000000000000000000e+00 +8.620000000000000425e-09 0.000000000000000000e+00 +8.620499999999999338e-09 0.000000000000000000e+00 +8.620999999999999905e-09 0.000000000000000000e+00 +8.621500000000000472e-09 0.000000000000000000e+00 +8.621999999999999384e-09 0.000000000000000000e+00 +8.622499999999999951e-09 0.000000000000000000e+00 +8.623000000000000518e-09 0.000000000000000000e+00 +8.623499999999999431e-09 0.000000000000000000e+00 +8.623999999999999998e-09 0.000000000000000000e+00 +8.624500000000000565e-09 0.000000000000000000e+00 +8.624999999999999477e-09 0.000000000000000000e+00 +8.625500000000000044e-09 0.000000000000000000e+00 +8.626000000000000611e-09 0.000000000000000000e+00 +8.626499999999999524e-09 0.000000000000000000e+00 +8.627000000000000091e-09 0.000000000000000000e+00 +8.627499999999999003e-09 0.000000000000000000e+00 +8.627999999999999570e-09 0.000000000000000000e+00 +8.628500000000000137e-09 0.000000000000000000e+00 +8.628999999999999050e-09 0.000000000000000000e+00 +8.629499999999999617e-09 0.000000000000000000e+00 +8.630000000000000184e-09 0.000000000000000000e+00 +8.630499999999999096e-09 0.000000000000000000e+00 +8.630999999999999663e-09 0.000000000000000000e+00 +8.631500000000000230e-09 0.000000000000000000e+00 +8.631999999999999143e-09 0.000000000000000000e+00 +8.632499999999999710e-09 0.000000000000000000e+00 +8.633000000000000277e-09 0.000000000000000000e+00 +8.633499999999999190e-09 0.000000000000000000e+00 +8.633999999999999756e-09 0.000000000000000000e+00 +8.634500000000000323e-09 0.000000000000000000e+00 +8.634999999999999236e-09 0.000000000000000000e+00 +8.635499999999999803e-09 4.940656458412465442e-324 +8.636000000000000370e-09 4.940656458412465442e-324 +8.636499999999999283e-09 9.881312916824930884e-324 +8.636999999999999850e-09 1.976262583364986177e-323 +8.637500000000000416e-09 3.458459520888725809e-323 +8.637999999999999329e-09 5.434722104253711986e-323 +8.638499999999999896e-09 9.387247270983684339e-323 +8.639000000000000463e-09 1.679823195860238250e-322 +8.639499999999999376e-09 2.865580745879229956e-322 +8.639999999999999943e-09 4.891249893828340787e-322 +8.640500000000000510e-09 8.448522543885315905e-322 +8.640999999999999422e-09 1.457493655231677305e-321 +8.641499999999999989e-09 2.509853480873532444e-321 +8.642000000000000556e-09 4.323074401110907262e-321 +8.642499999999999469e-09 7.445569282827585421e-321 +8.643000000000000036e-09 1.281112219666352289e-320 +8.643500000000000603e-09 2.204026846097800834e-320 +8.643999999999999515e-09 3.791953831831567227e-320 +8.644500000000000082e-09 6.521666525104454383e-320 +8.645000000000000649e-09 1.121479609495045531e-319 +8.645499999999999562e-09 1.928140589460048763e-319 +8.646000000000000129e-09 3.314291165432250068e-319 +8.646499999999999041e-09 5.695885204645394909e-319 +8.646999999999999608e-09 9.786896971904668669e-319 +8.647500000000000175e-09 1.681285630171928340e-318 +8.647999999999999088e-09 2.887700064843542564e-318 +8.648499999999999655e-09 4.958778786301922365e-318 +8.649000000000000222e-09 8.513556404847399188e-318 +8.649499999999999134e-09 1.461370094288947726e-317 +8.649999999999999701e-09 2.507972078894168978e-317 +8.650500000000000268e-09 4.303266815303485846e-317 +8.650999999999999181e-09 7.382220679783466630e-317 +8.651499999999999748e-09 1.266160854498469070e-316 +8.652000000000000315e-09 2.171220343741731638e-316 +8.652499999999999227e-09 3.722477283175514871e-316 +8.652999999999999794e-09 6.380773874286470690e-316 +8.653500000000000361e-09 1.093522672714265050e-315 +8.653999999999999274e-09 1.873679777784876282e-315 +8.654499999999999841e-09 3.209786078881239802e-315 +8.655000000000000408e-09 5.497559645793772591e-315 +8.655499999999999320e-09 9.414059778805720449e-315 +8.655999999999999887e-09 1.611747832197761045e-314 +8.656500000000000454e-09 2.758864550051088755e-314 +8.656999999999999367e-09 4.721465318120957742e-314 +8.657499999999999934e-09 8.078604927472615259e-314 +8.658000000000000501e-09 1.382003291659484215e-313 +8.658499999999999413e-09 2.363713991235095549e-313 +8.658999999999999980e-09 4.041977721205787799e-313 +8.659500000000000547e-09 6.910445497641504618e-313 +8.659999999999999460e-09 1.181221431003527968e-312 +8.660500000000000027e-09 2.018690460173064311e-312 +8.661000000000000594e-09 3.449223089181804313e-312 +8.661499999999999506e-09 5.892315322004982498e-312 +8.662000000000000073e-09 1.006384213918940146e-311 +8.662500000000000640e-09 1.718520800576663097e-311 +8.662999999999999553e-09 2.933991906357648761e-311 +8.663500000000000120e-09 5.008136656915308285e-311 +8.663999999999999032e-09 8.546859633456052888e-311 +8.664499999999999599e-09 1.458310870815729430e-310 +8.665000000000000166e-09 2.487750349879790625e-310 +8.665499999999999079e-09 4.243035055525494933e-310 +8.665999999999999646e-09 7.235350674985618416e-310 +8.666500000000000213e-09 1.233546970320591826e-309 +8.666999999999999126e-09 2.102640078039360448e-309 +8.667499999999999692e-09 3.583334298160768601e-309 +8.668000000000000259e-09 6.105522778864694848e-309 +8.668499999999999172e-09 1.040091450192791843e-308 +8.668999999999999739e-09 1.771468107693221876e-308 +8.669500000000000306e-09 3.016534458483364957e-308 +8.669999999999999219e-09 5.135661424353233420e-308 +8.670499999999999786e-09 8.741734646950884090e-308 +8.671000000000000352e-09 1.487688464405827825e-307 +8.671499999999999265e-09 2.531276065170639317e-307 +8.671999999999999832e-09 4.306060931319566648e-307 +8.672500000000000399e-09 7.323757743370980160e-307 +8.672999999999999312e-09 1.245377200323323567e-306 +8.673499999999999879e-09 2.117293148635706645e-306 +8.674000000000000446e-09 3.598936755621489926e-306 +8.674499999999999358e-09 6.116184510945792624e-306 +8.674999999999999925e-09 1.039202262142846253e-305 +8.675500000000000492e-09 1.765357753742709120e-305 +8.675999999999999405e-09 2.998323692054136315e-305 +8.676499999999999972e-09 5.091402654272073976e-305 +8.677000000000000539e-09 8.643895620351386381e-305 +8.677499999999999451e-09 1.467218263333720145e-304 +8.678000000000000018e-09 2.489964043945515834e-304 +8.678500000000000585e-09 4.224784570128157775e-304 +8.678999999999999498e-09 7.166864639421036806e-304 +8.679500000000000065e-09 1.215533624138721865e-303 +8.680000000000000632e-09 2.061189363667463353e-303 +8.680499999999999544e-09 3.494475095696240535e-303 +8.681000000000000111e-09 5.923237516475138662e-303 +8.681499999999999024e-09 1.003805306062550860e-302 +8.681999999999999591e-09 1.700798903997472444e-302 +8.682500000000000158e-09 2.881174674849460725e-302 +8.682999999999999070e-09 4.879769983378607989e-302 +8.683499999999999637e-09 8.263085658685996263e-302 +8.684000000000000204e-09 1.398937459836603047e-301 +8.684499999999999117e-09 2.367922506537801601e-301 +8.684999999999999684e-09 4.007281139192449274e-301 +8.685500000000000251e-09 6.780243333519459111e-301 +8.685999999999999163e-09 1.146974835171073758e-300 +8.686499999999999730e-09 1.939883458268458148e-300 +8.687000000000000297e-09 3.280277092386069516e-300 +8.687499999999999210e-09 5.545727981023717015e-300 +8.687999999999999777e-09 9.373887500609346473e-300 +8.688500000000000344e-09 1.584141793081073329e-299 +8.688999999999999256e-09 2.676587882627378093e-299 +8.689499999999999823e-09 4.521495514768680012e-299 +8.690000000000000390e-09 7.636526133610737778e-299 +8.690499999999999303e-09 1.289504082415702727e-298 +8.690999999999999870e-09 2.177021617658356396e-298 +8.691500000000000437e-09 3.674649346617064245e-298 +8.691999999999999349e-09 6.201292339747606566e-298 +8.692499999999999916e-09 1.046313066094435014e-297 +8.693000000000000483e-09 1.765038704838814171e-297 +8.693499999999999396e-09 2.976870614047757034e-297 +8.693999999999999963e-09 5.019712289593970200e-297 +8.694500000000000530e-09 8.462736792470914927e-297 +8.694999999999999442e-09 1.426448125650745827e-296 +8.695500000000000009e-09 2.403888239590936058e-296 +8.696000000000000576e-09 4.050286122840755890e-296 +8.696499999999999489e-09 6.822919955786924413e-296 +8.697000000000000056e-09 1.149126896105584597e-295 +8.697500000000000623e-09 1.934990531608066747e-295 +8.697999999999999535e-09 3.257638131437124737e-295 +8.698500000000000102e-09 5.483274358756273476e-295 +8.698999999999999015e-09 9.227631744912928007e-295 +8.699499999999999582e-09 1.552578877423349724e-294 +8.700000000000000149e-09 2.611741761284055465e-294 +8.700499999999999062e-09 4.392582576126828089e-294 +8.700999999999999628e-09 7.386229145477475362e-294 +8.701500000000000195e-09 1.241763128160983815e-293 +8.701999999999999108e-09 2.087218351606874921e-293 +8.702499999999999675e-09 3.507600716714419016e-293 +8.703000000000000242e-09 5.893395088212043905e-293 +8.703499999999999155e-09 9.899975152157641795e-293 +8.703999999999999722e-09 1.662707261353761325e-292 +8.704500000000000288e-09 2.791969202626825042e-292 +8.704999999999999201e-09 4.687255145288306655e-292 +8.705499999999999768e-09 7.867553533048323382e-292 +8.706000000000000335e-09 1.320304063578708024e-291 +8.706499999999999248e-09 2.215242905277008953e-291 +8.706999999999999815e-09 3.716052917388675867e-291 +8.707500000000000382e-09 6.232403551886225535e-291 +8.707999999999999294e-09 1.045062788470297136e-290 +8.708499999999999861e-09 1.752033245844705492e-290 +8.709000000000000428e-09 2.936672002575971189e-290 +8.709499999999999341e-09 4.921320891100132504e-290 +8.709999999999999908e-09 8.245577271302701449e-290 +8.710500000000000475e-09 1.381254128556369167e-289 +8.710999999999999387e-09 2.313338860883013961e-289 +8.711499999999999954e-09 3.873629315815286580e-289 +8.712000000000000521e-09 6.485000372959981989e-289 +8.712499999999999434e-09 1.085463171724601465e-288 +8.713000000000000001e-09 1.816491298269817294e-288 +8.713500000000000568e-09 3.039237866827032046e-288 +8.713999999999999480e-09 5.084042852999134310e-288 +8.714500000000000047e-09 8.502895752850535036e-288 +8.715000000000000614e-09 1.421797177414766346e-287 +8.715499999999999527e-09 2.376958405032708898e-287 +8.716000000000000094e-09 3.973000844098294678e-287 +8.716499999999999006e-09 6.639400606377507042e-287 +8.716999999999999573e-09 1.109308220535823358e-286 +8.717500000000000140e-09 1.853056793455892254e-286 +8.717999999999999053e-09 3.094841200117420728e-286 +8.718499999999999620e-09 5.167745894737564919e-286 +8.719000000000000187e-09 8.627343156124475166e-286 +8.719499999999999099e-09 1.440012081238899099e-285 +8.719999999999999666e-09 2.403080613707520328e-285 +8.720500000000000233e-09 4.009439689707525430e-285 +8.720999999999999146e-09 6.688244969337167935e-285 +8.721499999999999713e-09 1.115459480664832878e-284 +8.722000000000000280e-09 1.859981256100735171e-284 +8.722499999999999192e-09 3.100819434615590681e-284 +8.722999999999999759e-09 5.168416784110042984e-284 +8.723500000000000326e-09 8.612945914854204245e-284 +8.723999999999999239e-09 1.435023631921586796e-283 +8.724499999999999806e-09 2.390449245994051584e-283 +8.725000000000000373e-09 3.981192180633819792e-283 +8.725499999999999285e-09 6.629181332509218895e-283 +8.725999999999999852e-09 1.103620594427077674e-282 +8.726500000000000419e-09 1.836930963325308941e-282 +8.726999999999999332e-09 3.056884390760795120e-282 +8.727499999999999899e-09 5.086023178585528049e-282 +8.728000000000000466e-09 8.460398058312036243e-282 +8.728499999999999378e-09 1.407072255798970233e-281 +8.728999999999999945e-09 2.339672895444331337e-281 +8.729500000000000512e-09 3.889618696369913822e-281 +8.729999999999999425e-09 6.465052490209148852e-281 +8.730499999999999992e-09 1.074360970019380494e-280 +8.731000000000000559e-09 1.785013607288265659e-280 +8.731499999999999471e-09 2.965145306001865418e-280 +8.732000000000000038e-09 4.924516210028324165e-280 +8.732500000000000605e-09 8.177005749687869306e-280 +8.732999999999999518e-09 1.357494804195170860e-279 +8.733500000000000085e-09 2.253176380504747875e-279 +8.733999999999998998e-09 3.739085060759678690e-279 +8.734499999999999565e-09 6.203669335760592364e-279 +8.735000000000000131e-09 1.029070381368902485e-278 +8.735499999999999044e-09 1.706690051505653623e-278 +8.735999999999999611e-09 2.829940968765541150e-278 +8.736500000000000178e-09 4.691516380854650328e-278 +8.736999999999999091e-09 7.776107194340943349e-278 +8.737499999999999658e-09 1.288618558071209207e-277 +8.738000000000000225e-09 2.135008780568691785e-277 +8.738499999999999137e-09 3.536617491044312083e-277 +8.738999999999999704e-09 5.857194644478771264e-277 +8.739500000000000271e-09 9.698495392967262878e-277 +8.739999999999999184e-09 1.605580970309772036e-276 +8.740499999999999751e-09 2.657499561837465191e-276 +8.741000000000000318e-09 4.397717544108666513e-276 +8.741499999999999230e-09 7.276032055942373048e-276 +8.741999999999999797e-09 1.203580149897241468e-275 +8.742500000000000364e-09 1.990529280280300220e-275 +8.742999999999999277e-09 3.291359078878994128e-275 +8.743499999999999844e-09 5.441205161443803008e-275 +8.744000000000000411e-09 8.993486322488682940e-275 +8.744499999999999323e-09 1.486189527716537225e-274 +8.744999999999999890e-09 2.455463349164104931e-274 +8.745500000000000457e-09 4.056073876981129755e-274 +8.745999999999999370e-09 6.698713415150178150e-274 +8.746499999999999937e-09 1.106089019189407771e-273 +8.747000000000000504e-09 1.826004757105103791e-273 +8.747499999999999416e-09 3.013886335671981277e-273 +8.747999999999999983e-09 4.973532674828453971e-273 +8.748500000000000550e-09 8.205711099356201454e-273 +8.748999999999999463e-09 1.353569658732671060e-272 +8.749500000000000030e-09 2.232328685889243162e-272 +8.750000000000000597e-09 3.680855854803474351e-272 +8.750499999999999509e-09 6.068098501997139657e-272 +8.751000000000000076e-09 1.000160214219294491e-271 +8.751500000000000643e-09 1.648161132671298813e-271 +8.751999999999999556e-09 2.715456831749056703e-271 +8.752500000000000123e-09 4.473003922535233426e-271 +8.752999999999999035e-09 7.366628960698181594e-271 +8.753499999999999602e-09 1.212973894616440320e-270 +8.754000000000000169e-09 1.996858325781138689e-270 +8.754499999999999082e-09 3.286670704157933172e-270 +8.754999999999999649e-09 5.408517947075240472e-270 +8.755500000000000216e-09 8.898432239822379875e-270 +8.755999999999999128e-09 1.463732990544313245e-269 +8.756499999999999695e-09 2.407262032090525142e-269 +8.757000000000000262e-09 3.958202528988562027e-269 +8.757499999999999175e-09 6.507074797643310908e-269 +8.757999999999999742e-09 1.069514623227510354e-268 +8.758500000000000309e-09 1.757522105449871929e-268 +8.758999999999999221e-09 2.887539982205436970e-268 +8.759499999999999788e-09 4.743166366054127104e-268 +8.760000000000000355e-09 7.789720052075554002e-268 +8.760499999999999268e-09 1.279052832504510984e-267 +8.760999999999999835e-09 2.099753232328749519e-267 +8.761500000000000402e-09 3.446364231483586024e-267 +8.761999999999999314e-09 5.655450833672082886e-267 +8.762499999999999881e-09 9.278684955822583857e-267 +8.763000000000000448e-09 1.522014424027212360e-266 +8.763499999999999361e-09 2.496113036186247887e-266 +8.763999999999999928e-09 4.092822117606420524e-266 +8.764500000000000495e-09 6.709569134088624314e-266 +8.764999999999999407e-09 1.099713447309095917e-265 +8.765499999999999974e-09 1.802094579074762582e-265 +8.766000000000000541e-09 2.952492247728591099e-265 +8.766499999999999454e-09 4.836298442003374990e-265 +8.767000000000000021e-09 7.920462839281308548e-265 +8.767500000000000588e-09 1.296884111864775479e-264 +8.767999999999999501e-09 2.123072963894220135e-264 +8.768500000000000067e-09 3.474895999710297754e-264 +8.769000000000000634e-09 5.686327165930091021e-264 +8.769499999999999547e-09 9.303256967675624251e-264 +8.770000000000000114e-09 1.521778105524258898e-263 +8.770499999999999027e-09 2.488747215181465430e-263 +8.770999999999999594e-09 4.069334438399652341e-263 +8.771500000000000161e-09 6.652411745622165406e-263 +8.771999999999999073e-09 1.087296526535798962e-262 +8.772499999999999640e-09 1.776765123253183700e-262 +8.773000000000000207e-09 2.902853922966317007e-262 +8.773499999999999120e-09 4.741693566666684808e-262 +8.773999999999999687e-09 7.743814258246130315e-262 +8.774500000000000254e-09 1.264414629302289336e-261 +8.774999999999999166e-09 2.064130910927397406e-261 +8.775499999999999733e-09 3.368977451429501068e-261 +8.776000000000000300e-09 5.497587015114584076e-261 +8.776499999999999213e-09 8.969314676688034309e-261 +8.776999999999999780e-09 1.463051288431987459e-260 +8.777500000000000347e-09 2.386013969537317226e-260 +8.777999999999999259e-09 3.890447456725302417e-260 +8.778499999999999826e-09 6.342190277665634231e-260 +8.779000000000000393e-09 1.033694301088816136e-259 +8.779499999999999306e-09 1.684449973775454774e-259 +8.779999999999999873e-09 2.744335819177421640e-259 +8.780500000000000440e-09 4.470226531181838084e-259 +8.780999999999999352e-09 7.280059865494597303e-259 +8.781499999999999919e-09 1.185368850577127836e-258 +8.782000000000000486e-09 1.929679626419857737e-258 +8.782499999999999399e-09 3.140726028507750925e-258 +8.782999999999999966e-09 5.110790007008797839e-258 +8.783500000000000533e-09 8.314940795907885687e-258 +8.783999999999999445e-09 1.352519161991318622e-257 +8.784500000000000012e-09 2.199585425098397769e-257 +8.785000000000000579e-09 3.576443602272416401e-257 +8.785499999999999492e-09 5.814000565890488072e-257 +8.786000000000000059e-09 9.449566802688568584e-257 +8.786500000000000626e-09 1.535542603925083122e-256 +8.786999999999999538e-09 2.494738231525753360e-256 +8.787500000000000105e-09 4.052296698663692692e-256 +8.787999999999999018e-09 6.580980895388776948e-256 +8.788499999999999585e-09 1.068545858550820561e-255 +8.789000000000000152e-09 1.734637943425478677e-255 +8.789499999999999064e-09 2.815384138275062358e-255 +8.789999999999999631e-09 4.568563000162090974e-255 +8.790500000000000198e-09 7.411988178303860385e-255 +8.790999999999999111e-09 1.202272625729574111e-254 +8.791499999999999678e-09 1.949774296490510877e-254 +8.792000000000000245e-09 3.161395741681020105e-254 +8.792499999999999157e-09 5.124913364976317284e-254 +8.792999999999999724e-09 8.306294662890572472e-254 +8.793500000000000291e-09 1.345988284831967582e-253 +8.793999999999999204e-09 2.180662059020020604e-253 +8.794499999999999771e-09 3.532226919751416402e-253 +8.795000000000000338e-09 5.720341620624602008e-253 +8.795499999999999250e-09 9.262078907335116712e-253 +8.795999999999999817e-09 1.499367622924217177e-252 +8.796500000000000384e-09 2.426726996677636817e-252 +8.796999999999999297e-09 3.926872998565157555e-252 +8.797499999999999864e-09 6.353103505284149413e-252 +8.798000000000000431e-09 1.027633248795048613e-251 +8.798499999999999344e-09 1.661894707444034045e-251 +8.798999999999999910e-09 2.687088704363762514e-251 +8.799500000000000477e-09 4.343838227561751688e-251 +8.799999999999999390e-09 7.020667798499946340e-251 +8.800499999999999957e-09 1.134478698003751812e-250 +8.801000000000000524e-09 1.832852045577726469e-250 +8.801499999999999437e-09 2.960544631416294826e-250 +8.802000000000000004e-09 4.781112445027135749e-250 +8.802500000000000570e-09 7.719682594673064724e-250 +8.802999999999999483e-09 1.246186583967411890e-249 +8.803500000000000050e-09 2.011313830430628591e-249 +8.804000000000000617e-09 3.245560801852136144e-249 +8.804499999999999530e-09 5.236158692313449228e-249 +8.805000000000000097e-09 8.445959450898527215e-249 +8.805499999999999009e-09 1.362066541856120812e-248 +8.805999999999999576e-09 2.196143928087117220e-248 +8.806500000000000143e-09 3.540270237551239355e-248 +8.806999999999999056e-09 5.705913324983072296e-248 +8.807499999999999623e-09 9.194477779899362351e-248 +8.808000000000000190e-09 1.481296872865568992e-247 +8.808499999999999102e-09 2.385999155004445696e-247 +8.808999999999999669e-09 3.842479915682128248e-247 +8.809500000000000236e-09 6.186799872227246405e-247 +8.809999999999999149e-09 9.959411360795926822e-247 +8.810499999999999716e-09 1.602929474211937907e-246 +8.811000000000000283e-09 2.579338257092392160e-246 +8.811499999999999195e-09 4.149686862325347879e-246 +8.811999999999999762e-09 6.674757516663778106e-246 +8.812500000000000329e-09 1.073417821572762758e-245 +8.812999999999999242e-09 1.725898498441955440e-245 +8.813499999999999809e-09 2.774436833003548305e-245 +8.814000000000000376e-09 4.459103708164932443e-245 +8.814499999999999288e-09 7.165284615647796593e-245 +8.814999999999999855e-09 1.151151436450326780e-244 +8.815500000000000422e-09 1.849032798116192002e-244 +8.815999999999999335e-09 2.969408250022029893e-244 +8.816499999999999902e-09 4.767693717255679512e-244 +8.817000000000000469e-09 7.653497175842392254e-244 +8.817499999999999381e-09 1.228357114808374836e-243 +8.817999999999999948e-09 1.971072079570420853e-243 +8.818500000000000515e-09 3.162230387811458289e-243 +8.818999999999999428e-09 5.072214958032455494e-243 +8.819499999999999995e-09 8.134201644912200364e-243 +8.820000000000000562e-09 1.304203493411838747e-242 +8.820499999999999474e-09 2.090686549374070837e-242 +8.821000000000000041e-09 3.350777822004256860e-242 +8.821500000000000608e-09 5.369272929952685427e-242 +8.821999999999999521e-09 8.601980819255004347e-242 +8.822500000000000088e-09 1.377826712202089856e-241 +8.822999999999999000e-09 2.206499695142199379e-241 +8.823499999999999567e-09 3.532858835401571168e-241 +8.824000000000000134e-09 5.655380605599847871e-241 +8.824499999999999047e-09 9.051291109450633916e-241 +8.824999999999999614e-09 1.448346148998165325e-240 +8.825500000000000181e-09 2.317113705210753085e-240 +8.825999999999999093e-09 3.706256429630624945e-240 +8.826499999999999660e-09 5.927024512728510665e-240 +8.827000000000000227e-09 9.476568882908480487e-240 +8.827499999999999140e-09 1.514881511354946150e-239 +8.827999999999999707e-09 2.421136905660248195e-239 +8.828500000000000274e-09 3.868772315502618868e-239 +8.828999999999999186e-09 6.180735180103126501e-239 +8.829499999999999753e-09 9.872343141022055343e-239 +8.830000000000000320e-09 1.576570837803919254e-238 +8.830499999999999233e-09 2.517212485119843918e-238 +8.830999999999999800e-09 4.018272695603724997e-238 +8.831500000000000367e-09 6.413160021842254744e-238 +8.831999999999999280e-09 1.023335141213920671e-237 +8.832499999999999846e-09 1.632588904158985874e-237 +8.833000000000000413e-09 2.604047693328937661e-237 +8.833499999999999326e-09 4.152734527708595154e-237 +8.833999999999999893e-09 6.621136550567416369e-237 +8.834500000000000460e-09 1.055465547236131171e-236 +8.834999999999999373e-09 1.682165491783559332e-236 +8.835499999999999940e-09 2.680442644103308843e-236 +8.836000000000000506e-09 4.270290879551318711e-236 +8.836499999999999419e-09 6.801763702686625149e-236 +8.836999999999999986e-09 1.083175336276872583e-235 +8.837500000000000553e-09 1.724602956079014857e-235 +8.837999999999999466e-09 2.745317830761653891e-235 +8.838500000000000033e-09 4.369273960754548748e-235 +8.839000000000000600e-09 6.952469036937692447e-235 +8.839499999999999512e-09 1.106068416517584422e-234 +8.840000000000000079e-09 1.759292536966187544e-234 +8.840500000000000646e-09 2.797739474579632629e-234 +8.840999999999999559e-09 4.448254449147603852e-234 +8.841500000000000126e-09 7.071069635441387923e-234 +8.841999999999999038e-09 1.123812213429910331e-233 +8.842499999999999605e-09 1.785728879272549486e-233 +8.843000000000000172e-09 2.836941875532053533e-233 +8.843499999999999085e-09 4.506075816798576795e-233 +8.843999999999999652e-09 7.155824694213966268e-233 +8.844500000000000219e-09 1.136145706250663745e-232 +8.844999999999999131e-09 1.803522279235201071e-232 +8.845499999999999698e-09 2.862346018066448591e-232 +8.846000000000000265e-09 4.541882504227878011e-232 +8.846499999999999178e-09 7.205478032780380210e-232 +8.846999999999999745e-09 1.142885816359341888e-231 +8.847500000000000312e-09 1.812408242476700732e-231 +8.847999999999999224e-09 2.873573800065487261e-231 +8.848499999999999791e-09 4.555140983587270256e-231 +8.849000000000000358e-09 7.219289072362479621e-231 +8.849499999999999271e-09 1.143931929074152976e-230 +8.849999999999999838e-09 1.812254025793374200e-230 +8.850500000000000405e-09 2.870457396369882075e-230 +8.850999999999999317e-09 4.545652986149176276e-230 +8.851499999999999884e-09 7.197051214787079236e-230 +8.852000000000000451e-09 1.139268392741400636e-229 +8.852499999999999364e-09 1.803061936664346999e-229 +8.852999999999999931e-09 2.853043432704975642e-229 +8.853500000000000498e-09 4.513560435631318211e-229 +8.853999999999999410e-09 7.139096984797763574e-229 +8.854499999999999977e-09 1.128964908374364322e-228 +8.855000000000000544e-09 1.784969275793390025e-228 +8.855499999999999457e-09 2.821591824995962620e-228 +8.856000000000000024e-09 4.459341915838150901e-228 +8.856500000000000591e-09 7.046289756669400518e-228 +8.856999999999999503e-09 1.113174796299824780e-227 +8.857500000000000070e-09 1.758244924717285259e-227 +8.858000000000000637e-09 2.776569324376560132e-227 +8.858499999999999550e-09 4.383800795575235249e-227 +8.859000000000000117e-09 6.920002352929889790e-227 +8.859499999999999029e-09 1.092131200029960050e-226 +8.859999999999999596e-09 1.723282697032039785e-226 +8.860500000000000163e-09 2.718637991980916988e-226 +8.860999999999999076e-09 4.288045422530556681e-226 +8.861499999999999643e-09 6.762083256746271863e-226 +8.862000000000000210e-09 1.066141358750958530e-225 +8.862499999999999122e-09 1.680591682978881145e-225 +8.862999999999999689e-09 2.648639001317223252e-225 +8.863500000000000256e-09 4.173462068698663783e-225 +8.863999999999999169e-09 6.574811599989991730e-225 +8.864499999999999736e-09 1.035579145059552214e-224 +8.865000000000000303e-09 1.630783918276833957e-224 +8.865499999999999216e-09 2.567572321959993040e-224 +8.865999999999999782e-09 4.041681550173982169e-224 +8.866500000000000349e-09 6.360842458871785234e-224 +8.866999999999999262e-09 1.000876121241601270e-223 +8.867499999999999829e-09 1.574559794525263996e-223 +8.868000000000000396e-09 2.476572970221855556e-223 +8.868499999999999309e-09 3.894540644357273870e-223 +8.868999999999999876e-09 6.123144291273288505e-223 +8.869500000000000442e-09 9.625114129100148911e-223 +8.869999999999999355e-09 1.512691696950827298e-222 +8.870499999999999922e-09 2.376884614425482440e-222 +8.871000000000000489e-09 3.734039578962644713e-222 +8.871499999999999402e-09 5.864930573895495731e-222 +8.871999999999999969e-09 9.210007316526018473e-222 +8.872500000000000536e-09 1.446006402826790790e-221 +8.872999999999999448e-09 2.269831391093840968e-221 +8.873500000000000015e-09 3.562296964978874591e-221 +8.874000000000000582e-09 5.589587833848305029e-221 +8.874499999999999495e-09 8.768848971816458040e-221 +8.875000000000000062e-09 1.375366799326250195e-220 +8.875500000000000629e-09 2.156788821236798367e-220 +8.875999999999999541e-09 3.381503586612348072e-220 +8.876500000000000108e-09 5.300602316321677984e-220 +8.876999999999999021e-09 8.307182139884097709e-220 +8.877499999999999588e-09 1.301653482245434759e-219 +8.878000000000000155e-09 2.039154713166669210e-219 +8.878499999999999067e-09 3.193876445381360159e-219 +8.878999999999999634e-09 5.001487487525192436e-219 +8.879500000000000201e-09 7.830570480859608421e-219 +8.879999999999999114e-09 1.225746777693549894e-218 +8.880499999999999681e-09 1.918320901030859733e-218 +8.881000000000000248e-09 3.001614386319846194e-218 +8.881499999999999160e-09 4.695714445745341930e-218 +8.881999999999999727e-09 7.344489269049017838e-218 +8.882500000000000294e-09 1.148509689431152253e-217 +8.882999999999999207e-09 1.795646599623372874e-217 +8.883499999999999774e-09 2.806856516361551789e-217 +8.884000000000000341e-09 4.386647113051429431e-217 +8.884499999999999253e-09 6.854224515046684200e-217 +8.884999999999999820e-09 1.070772217436631474e-216 +8.885500000000000387e-09 1.672434060802891844e-216 +8.885999999999999300e-09 2.611644466479888000e-216 +8.886499999999999867e-09 4.077483817252363577e-216 +8.887000000000000434e-09 6.364782668906217797e-216 +8.887499999999999346e-09 9.933174221182379469e-216 +8.887999999999999913e-09 1.549907100106217562e-215 +8.888500000000000480e-09 2.417889358544854024e-215 +8.888999999999999393e-09 3.771206563852644424e-215 +8.889499999999999960e-09 5.880812859218003771e-215 +8.890000000000000527e-09 9.168695270162008398e-215 +8.890499999999999439e-09 1.429192930562640114e-214 +8.891000000000000006e-09 2.227344125812136867e-214 +8.891500000000000573e-09 3.470538956333462326e-214 +8.891999999999999486e-09 5.406543075496561201e-214 +8.892500000000000053e-09 8.420842652372327841e-214 +8.893000000000000620e-09 1.311307600548787570e-213 +8.893499999999999532e-09 2.041581612540807306e-213 +8.894000000000000099e-09 3.177913367684134659e-213 +8.894499999999999012e-09 4.945731135979535116e-213 +8.894999999999999579e-09 7.695415852425265499e-213 +8.895500000000000146e-09 1.197145190734522729e-212 +8.895999999999999059e-09 1.861978653934305200e-212 +8.896499999999999625e-09 2.895447612347386883e-212 +8.897000000000000192e-09 4.501630726229502347e-212 +8.897499999999999105e-09 6.997407439986578475e-212 +8.897999999999999672e-09 1.087470787709069166e-211 +8.898500000000000239e-09 1.689706122401190478e-211 +8.898999999999999152e-09 2.624931030866288663e-211 +8.899499999999999719e-09 4.076972267957701561e-211 +8.900000000000000285e-09 6.330977336210951164e-211 +8.900499999999999198e-09 9.829171243885814200e-211 +8.900999999999999765e-09 1.525724728154435299e-210 +8.901500000000000332e-09 2.367819593044430363e-210 +8.901999999999999245e-09 3.673957903386997534e-210 +8.902499999999999812e-09 5.699449143899609353e-210 +8.903000000000000379e-09 8.839846645896394875e-210 +8.903499999999999291e-09 1.370786188898308941e-209 +8.903999999999999858e-09 2.125239359409797294e-209 +8.904500000000000425e-09 3.294269473398816281e-209 +8.904999999999999338e-09 5.105326649475420517e-209 +8.905499999999999905e-09 7.910448145642740007e-209 +8.906000000000000472e-09 1.225439239715994144e-208 +8.906499999999999384e-09 1.897997423605474057e-208 +8.906999999999999951e-09 2.939088040017482538e-208 +8.907500000000000518e-09 4.550328111415198222e-208 +8.907999999999999431e-09 7.043458704380744237e-208 +8.908499999999999998e-09 1.090039844071807451e-207 +8.909000000000000565e-09 1.686599294342585016e-207 +8.909499999999999477e-09 2.609123261495919406e-207 +8.910000000000000044e-09 4.035435593873607419e-207 +8.910500000000000611e-09 6.240212584112911571e-207 +8.910999999999999524e-09 9.647648913565863545e-207 +8.911500000000000091e-09 1.491271567125472084e-206 +8.911999999999999003e-09 2.304650773604228344e-206 +8.912499999999999570e-09 3.560956386838595171e-206 +8.913000000000000137e-09 5.500995945104707339e-206 +8.913499999999999050e-09 8.496286254372410282e-206 +8.913999999999999617e-09 1.311988681762028063e-205 +8.914500000000000184e-09 2.025555661745360534e-205 +8.914999999999999096e-09 3.126593470469726357e-205 +8.915499999999999663e-09 4.825160815046837026e-205 +8.916000000000000230e-09 7.445010405462720049e-205 +8.916499999999999143e-09 1.148502558444434889e-204 +8.916999999999999710e-09 1.771380118611621468e-204 +8.917500000000000277e-09 2.731522021255404613e-204 +8.917999999999999189e-09 4.211247705062394274e-204 +8.918499999999999756e-09 6.491275021275869152e-204 +8.919000000000000323e-09 1.000373947692465643e-203 +8.919499999999999236e-09 1.541373462605484595e-203 +8.919999999999999803e-09 2.374469105068340117e-203 +8.920500000000000370e-09 3.657112412876543226e-203 +8.920999999999999282e-09 5.631488969506610129e-203 +8.921499999999999849e-09 8.670044104389414872e-203 +8.922000000000000416e-09 1.334542831378120878e-202 +8.922499999999999329e-09 2.053793939274716856e-202 +8.922999999999999896e-09 3.160052953189846920e-202 +8.923500000000000463e-09 4.861216838170995775e-202 +8.923999999999999375e-09 7.476679563423628515e-202 +8.924499999999999942e-09 1.149703050187366732e-201 +8.925000000000000509e-09 1.767566411551426457e-201 +8.925499999999999422e-09 2.716933057635247688e-201 +8.925999999999999989e-09 4.175372984023281054e-201 +8.926500000000000556e-09 6.415415023740646783e-201 +8.926999999999999468e-09 9.855243926074070252e-201 +8.927500000000000035e-09 1.513641896261317907e-200 +8.928000000000000602e-09 2.324299257087057991e-200 +8.928499999999999515e-09 3.568404577371976370e-200 +8.929000000000000082e-09 5.477334616623075652e-200 +8.929499999999998995e-09 8.405771882960172109e-200 +8.929999999999999561e-09 1.289730788893761586e-199 +8.930500000000000128e-09 1.978489165707742492e-199 +8.930999999999999041e-09 3.034460064787297273e-199 +8.931499999999999608e-09 4.653099263284808732e-199 +8.932000000000000175e-09 7.133724767587554836e-199 +8.932499999999999088e-09 1.093461565993499330e-198 +8.932999999999999655e-09 1.675729198314837694e-198 +8.933500000000000221e-09 2.567540438444899120e-198 +8.933999999999999134e-09 3.933180605030912380e-198 +8.934499999999999701e-09 6.023981460102510014e-198 +8.935000000000000268e-09 9.224365553020376968e-198 +8.935499999999999181e-09 1.412220544448168772e-197 +8.935999999999999748e-09 2.161631627904173893e-197 +8.936500000000000315e-09 3.308064647769605219e-197 +8.936999999999999227e-09 5.061502215771053855e-197 +8.937499999999999794e-09 7.742799539593474062e-197 +8.938000000000000361e-09 1.184212772515688723e-196 +8.938499999999999274e-09 1.810817185030877224e-196 +8.938999999999999841e-09 2.768424059845590782e-196 +8.939500000000000408e-09 4.231591768287674927e-196 +8.939999999999999320e-09 6.466779507305622072e-196 +8.940499999999999887e-09 9.880649286253954848e-196 +8.941000000000000454e-09 1.509371190312715616e-195 +8.941499999999999367e-09 2.305259228858870297e-195 +8.941999999999999934e-09 3.520113149503593254e-195 +8.942500000000000501e-09 5.374110832615960580e-195 +8.942999999999999413e-09 8.202944160873698069e-195 +8.943499999999999980e-09 1.251831953023764988e-194 +8.944000000000000547e-09 1.910009165704439311e-194 +8.944499999999999460e-09 2.913654225086035627e-194 +8.945000000000000027e-09 4.443791888208283282e-194 +8.945500000000000594e-09 6.776142863271291510e-194 +8.945999999999999506e-09 1.033057599323116139e-193 +8.946500000000000073e-09 1.574634131529441068e-193 +8.947000000000000640e-09 2.399650130697841086e-193 +8.947499999999999553e-09 3.656194849000970389e-193 +8.948000000000000120e-09 5.569598383567082937e-193 +8.948499999999999032e-09 8.482650397530931605e-193 +8.948999999999999599e-09 1.291672454275099467e-192 +8.949500000000000166e-09 1.966465669077886402e-192 +8.949999999999999079e-09 2.993184452257470567e-192 +8.950499999999999646e-09 4.555056136823564993e-192 +8.951000000000000213e-09 6.930540849773128591e-192 +8.951499999999999125e-09 1.054274404290577213e-191 +8.951999999999999692e-09 1.603442309851817371e-191 +8.952500000000000259e-09 2.438182200507398570e-191 +8.952999999999999172e-09 3.706739917453204895e-191 +8.953499999999999739e-09 5.634186445712643018e-191 +8.954000000000000306e-09 8.562162286885651873e-191 +8.954499999999999218e-09 1.300914747401489687e-190 +8.954999999999999785e-09 1.976183913974559302e-190 +8.955500000000000352e-09 3.001366451706222798e-190 +8.955999999999999265e-09 4.557470108810273551e-190 +8.956499999999999832e-09 6.918975218620048363e-190 +8.957000000000000399e-09 1.050202051728605249e-189 +8.957499999999999311e-09 1.593738598272525726e-189 +8.957999999999999878e-09 2.418101131777516726e-189 +8.958500000000000445e-09 3.668132129170809023e-189 +8.958999999999999358e-09 5.563250589759443678e-189 +8.959499999999999925e-09 8.435783309426867838e-189 +8.960000000000000492e-09 1.278896354403156216e-188 +8.960499999999999404e-09 1.938467054989953140e-188 +8.960999999999999971e-09 2.937613399706231505e-188 +8.961500000000000538e-09 4.450860654044228329e-188 +8.961999999999999451e-09 6.742275524661272994e-188 +8.962500000000000018e-09 1.021132586176700536e-187 +8.963000000000000585e-09 1.546218681274404012e-187 +8.963499999999999498e-09 2.340845970491479232e-187 +8.964000000000000064e-09 3.543136634897551465e-187 +8.964500000000000631e-09 5.361867828721521790e-187 +8.964999999999999544e-09 8.112551172641684303e-187 +8.965500000000000111e-09 1.227190360702879183e-186 +8.965999999999999024e-09 1.856006797663545893e-186 +8.966499999999999591e-09 2.806469525762564547e-186 +8.967000000000000158e-09 4.242816412214499700e-186 +8.967499999999999070e-09 6.413000748556495513e-186 +8.967999999999999637e-09 9.691287605428549264e-186 +8.968500000000000204e-09 1.464248591261491400e-185 +8.968999999999999117e-09 2.211878609296263626e-185 +8.969499999999999684e-09 3.340572514739694488e-185 +8.970000000000000251e-09 5.044215816171311515e-185 +8.970499999999999163e-09 7.615169188526246184e-185 +8.970999999999999730e-09 1.149419590325021521e-184 +8.971500000000000297e-09 1.734565779517842678e-184 +8.971999999999999210e-09 2.617074552471543021e-184 +8.972499999999999777e-09 3.947794667225769048e-184 +8.973000000000000344e-09 5.953963372956068620e-184 +8.973499999999999256e-09 8.977820177344076964e-184 +8.973999999999999823e-09 1.353470477560583035e-183 +8.974500000000000390e-09 2.040045309014259885e-183 +8.974999999999999303e-09 3.074283967081738454e-183 +8.975499999999999870e-09 4.631922542673485568e-183 +8.976000000000000437e-09 6.977369741633109631e-183 +8.976499999999999349e-09 1.050836932156537380e-182 +8.976999999999999916e-09 1.582311772629971083e-182 +8.977500000000000483e-09 2.382110655958891776e-182 +8.977999999999999396e-09 3.585460525924567239e-182 +8.978499999999999963e-09 5.395616825140498804e-182 +8.979000000000000530e-09 8.118025218605198982e-182 +8.979499999999999442e-09 1.221160739103754163e-181 +8.980000000000000009e-09 1.836573912613527484e-181 +8.980500000000000576e-09 2.761576830316426151e-181 +8.980999999999999489e-09 4.151633336704232762e-181 +8.981500000000000056e-09 6.240135094597551163e-181 +8.982000000000000623e-09 9.377393368573113600e-181 +8.982499999999999535e-09 1.408910539809855172e-180 +8.983000000000000102e-09 2.116400437841699783e-180 +8.983499999999999015e-09 3.178523366933328989e-180 +8.983999999999999582e-09 4.772721746525604260e-180 +8.984500000000000149e-09 7.165062175618228143e-180 +8.984999999999999061e-09 1.075441898980755313e-179 +8.985499999999999628e-09 1.613864552486469574e-179 +8.986000000000000195e-09 2.421365521065708648e-179 +8.986499999999999108e-09 3.632175012842041106e-179 +8.986999999999999675e-09 5.447363041205864288e-179 +8.987500000000000242e-09 8.168061791740761633e-179 +8.987999999999999154e-09 1.224517088664735480e-178 +8.988499999999999721e-09 1.835370838546683059e-178 +8.989000000000000288e-09 2.750400542636842156e-178 +8.989499999999999201e-09 4.120796842108981888e-178 +8.989999999999999768e-09 6.172763020165678435e-178 +8.990500000000000335e-09 9.244664302590150090e-178 +8.990999999999999247e-09 1.384254129534567858e-177 +8.991499999999999814e-09 2.072304887286005811e-177 +8.992000000000000381e-09 3.101734465251070170e-177 +8.992499999999999294e-09 4.641610794333805563e-177 +8.992999999999999861e-09 6.944579727288041478e-177 +8.993500000000000428e-09 1.038810560645939348e-176 +8.993999999999999340e-09 1.553602405590598137e-176 +8.994499999999999907e-09 2.323039289611138595e-176 +8.995000000000000474e-09 3.472852724272819273e-176 +8.995499999999999387e-09 5.190740508948051844e-176 +8.995999999999999954e-09 7.756850333566482540e-176 +8.996500000000000521e-09 1.158923171973707200e-175 +8.996999999999999434e-09 1.731159255453855721e-175 +8.997500000000000000e-09 2.585428540621117411e-175 +8.998000000000000567e-09 3.860479018979340691e-175 +8.998499999999999480e-09 5.763190767118902076e-175 +8.999000000000000047e-09 8.601970233658976434e-175 +8.999500000000000614e-09 1.283648200997260551e-174 +8.999999999999999527e-09 1.915169596713025996e-174 +9.000500000000000094e-09 2.856811609104024844e-174 +9.000999999999999006e-09 4.260583748096159510e-174 +9.001499999999999573e-09 6.352866834124261378e-174 +9.002000000000000140e-09 9.470731810837899704e-174 +9.002499999999999053e-09 1.411596153607086304e-173 +9.002999999999999620e-09 2.103538839216345545e-173 +9.003500000000000187e-09 3.134034298796889493e-173 +9.003999999999999099e-09 4.668421882770101646e-173 +9.004499999999999666e-09 6.952637527674859840e-173 +9.005000000000000233e-09 1.035242806623892079e-172 +9.005499999999999146e-09 1.541160948344214629e-172 +9.005999999999999713e-09 2.293860015830760726e-172 +9.006500000000000280e-09 3.413492616948144159e-172 +9.006999999999999192e-09 5.078601838036600800e-172 +9.007499999999999759e-09 7.554443966802962927e-172 +9.008000000000000326e-09 1.123502347374499420e-171 +9.008499999999999239e-09 1.670546639618519058e-171 +9.008999999999999806e-09 2.483455412675016045e-171 +9.009500000000000373e-09 3.691197392332822526e-171 +9.009999999999999285e-09 5.485185441407435510e-171 +9.010499999999999852e-09 8.149453762346056109e-171 +9.011000000000000419e-09 1.210539113814044157e-170 +9.011499999999999332e-09 1.797803800247492342e-170 +9.011999999999999899e-09 2.669432249028454816e-170 +9.012500000000000466e-09 3.962859295310049969e-170 +9.012999999999999378e-09 5.881817477639090906e-170 +9.013499999999999945e-09 8.728258007480631381e-170 +9.014000000000000512e-09 1.294961177572978184e-169 +9.014499999999999425e-09 1.920874816748003100e-169 +9.014999999999999992e-09 2.848751180567468615e-169 +9.015500000000000559e-09 4.223992268355658486e-169 +9.015999999999999471e-09 6.261881606041953036e-169 +9.016500000000000038e-09 9.281105956031225715e-169 +9.017000000000000605e-09 1.375332641567053536e-168 +9.017499999999999518e-09 2.037646821154718853e-168 +9.018000000000000085e-09 3.018305626163807768e-168 +9.018499999999998997e-09 4.470032248364859446e-168 +9.018999999999999564e-09 6.618677807249188889e-168 +9.019500000000000131e-09 9.798169896669715544e-168 +9.019999999999999044e-09 1.450213127341449021e-167 +9.020499999999999611e-09 2.146010484945376008e-167 +9.021000000000000178e-09 3.175009200086955458e-167 +9.021499999999999090e-09 4.696467028583403333e-167 +9.021999999999999657e-09 6.945615033364635231e-167 +9.022500000000000224e-09 1.026983060868691059e-166 +9.022999999999999137e-09 1.518200021877654447e-166 +9.023499999999999704e-09 2.243922469682508637e-166 +9.024000000000000271e-09 3.315887920227578983e-166 +9.024499999999999183e-09 4.898972244080778190e-166 +9.024999999999999750e-09 7.236411519245952714e-166 +9.025500000000000317e-09 1.068697207991652192e-165 +9.025999999999999230e-09 1.577971788126155782e-165 +9.026499999999999797e-09 2.329468998620566259e-165 +9.027000000000000364e-09 3.438173406975193553e-165 +9.027499999999999276e-09 5.073547839677134109e-165 +9.027999999999999843e-09 7.485294361988923227e-165 +9.028500000000000410e-09 1.104127302037393398e-164 +9.028999999999999323e-09 1.628330490585375122e-164 +9.029499999999999890e-09 2.400927812101038080e-164 +9.030000000000000457e-09 3.539393026570412729e-164 +9.030499999999999370e-09 5.216649048473138039e-164 +9.030999999999999936e-09 7.687189568802492686e-164 +9.031500000000000503e-09 1.132548222485533133e-163 +9.031999999999999416e-09 1.668241634126436647e-163 +9.032499999999999983e-09 2.456825717633948523e-163 +9.033000000000000550e-09 3.617452895053014948e-163 +9.033499999999999463e-09 5.325305911044627065e-163 +9.034000000000000030e-09 7.837893860497334656e-163 +9.034500000000000596e-09 1.153366509021930445e-162 +9.034999999999999509e-09 1.696869469714734699e-162 +9.035500000000000076e-09 2.495989053886254293e-162 +9.036000000000000643e-09 3.670709857539355269e-162 +9.036499999999999556e-09 5.397225714806923210e-162 +9.037000000000000123e-09 7.934220115564977448e-162 +9.037499999999999035e-09 1.166140959394531276e-161 +9.037999999999999602e-09 1.713606085569155555e-161 +9.038500000000000169e-09 2.517584655962727149e-161 +9.038999999999999082e-09 3.698028989015183054e-161 +9.039499999999999649e-09 5.430873421094096660e-161 +9.040000000000000216e-09 7.974109428608806765e-161 +9.040499999999999128e-09 1.170598175236811254e-160 +9.040999999999999695e-09 1.718092869833058749e-160 +9.041500000000000262e-09 2.521149325373919667e-160 +9.041999999999999175e-09 3.698823806756211548e-160 +9.042499999999999742e-09 5.425526139953101574e-160 +9.043000000000000309e-09 7.956704280821757193e-160 +9.043499999999999221e-09 1.166642290850840927e-159 +9.043999999999999788e-09 1.710233286482325227e-159 +9.044500000000000355e-09 2.506606348870180121e-159 +9.044999999999999268e-09 3.673077204388051636e-159 +9.045499999999999835e-09 5.381298952695708306e-159 +9.046000000000000402e-09 7.882379190707113743e-159 +9.046499999999999314e-09 1.154358401461913719e-158 +9.046999999999999881e-09 1.690196328772473884e-158 +9.047500000000000448e-09 2.474268243367564732e-158 +9.047999999999999361e-09 3.621342064053995328e-158 +9.048499999999999928e-09 5.299140793907261177e-158 +9.049000000000000495e-09 7.752727314904260217e-158 +9.049499999999999407e-09 1.134009519696682312e-157 +9.049999999999999974e-09 1.658410477680956672e-157 +9.050500000000000541e-09 2.424825589786617858e-157 +9.050999999999999454e-09 3.544721516024524049e-157 +9.051500000000000021e-09 5.180800598713599412e-157 +9.052000000000000588e-09 7.570503668659203400e-157 +9.052499999999999500e-09 1.106027212326146639e-156 +9.053000000000000067e-09 1.615548467001037399e-156 +9.053500000000000634e-09 2.359322513022093381e-156 +9.053999999999999547e-09 3.444829830177526766e-156 +9.054500000000000114e-09 5.028765402025120881e-156 +9.054999999999999026e-09 7.339527792208046805e-156 +9.055499999999999593e-09 1.070996382822477766e-155 +9.056000000000000160e-09 1.562503611642674940e-155 +9.056499999999999073e-09 2.279120023989609522e-155 +9.056999999999999640e-09 3.323735875759565402e-155 +9.057500000000000207e-09 4.846173449598919645e-155 +9.057999999999999119e-09 7.064550665734401034e-155 +9.058499999999999686e-09 1.029634949111994772e-154 +9.059000000000000253e-09 1.500358862383004055e-154 +9.059499999999999166e-09 2.185849021096901199e-154 +9.059999999999999733e-09 3.183891914906951027e-154 +9.060500000000000300e-09 4.636706559864460066e-154 +9.060999999999999213e-09 6.751092347713308463e-154 +9.061499999999999779e-09 9.827694023976803899e-154 +9.062000000000000346e-09 1.430350083704340364e-153 +9.062499999999999259e-09 2.081355216801901741e-153 +9.062999999999999826e-09 3.028051150962996118e-153 +9.063500000000000393e-09 4.404466889390108648e-153 +9.063999999999999306e-09 6.405258080196901191e-153 +9.064499999999999873e-09 9.313074081011760632e-153 +9.065000000000000439e-09 1.353825291931646572e-152 +9.065499999999999352e-09 1.967638583352191939e-152 +9.065999999999999919e-09 2.859177897530829661e-152 +9.066500000000000486e-09 4.153843852584418605e-152 +9.066999999999999399e-09 6.033541399381794650e-152 +9.067499999999999966e-09 8.762087144683707184e-152 +9.068000000000000533e-09 1.272201726171217033e-151 +9.068499999999999445e-09 1.846790083541067832e-151 +9.069000000000000012e-09 2.680354446946046324e-151 +9.069500000000000579e-09 3.889377200452912097e-151 +9.069999999999999492e-09 5.642623077757695821e-151 +9.070500000000000059e-09 8.184556641016553871e-151 +9.071000000000000626e-09 1.186922649860748679e-150 +9.071499999999999538e-09 1.720928462747161781e-150 +9.072000000000000105e-09 2.494688693081684885e-150 +9.072499999999999018e-09 3.615622171519634537e-150 +9.072999999999999585e-09 5.239174507082677812e-150 +9.073500000000000152e-09 7.590245598911165224e-150 +9.073999999999999064e-09 1.099415699178611157e-149 +9.074499999999999631e-09 1.592139733886809313e-149 +9.075000000000000198e-09 2.305226315235564842e-149 +9.075499999999999111e-09 3.337022212289862688e-149 +9.075999999999999678e-09 4.829673447243239268e-149 +9.076500000000000245e-09 6.988590258248756811e-149 +9.076999999999999157e-09 1.011054416598007937e-148 +9.077499999999999724e-09 1.462421704225438972e-148 +9.078000000000000291e-09 2.114870884503815697e-148 +9.078499999999999204e-09 3.057794067793203463e-148 +9.078999999999999771e-09 4.420238982728066593e-148 +9.079500000000000338e-09 6.388463356114129415e-148 +9.079999999999999250e-09 9.231243499545500387e-148 +9.080499999999999817e-09 1.333635497797146782e-147 +9.081000000000000384e-09 1.926314650797898874e-147 +9.081499999999999297e-09 2.781829125412586864e-147 +9.081999999999999864e-09 4.016491137573365679e-147 +9.082500000000000431e-09 5.797974718603501453e-147 +9.082999999999999343e-09 8.367947807286071554e-147 +9.083499999999999910e-09 1.207465551223887505e-146 +9.084000000000000477e-09 1.741982055228800779e-146 +9.084499999999999390e-09 2.512613828237473727e-146 +9.084999999999999957e-09 3.623439008178990023e-146 +9.085500000000000524e-09 5.224314416720593715e-146 +9.085999999999999436e-09 7.530967933152470060e-146 +9.086500000000000003e-09 1.085389039131904869e-145 +9.087000000000000570e-09 1.563987240961635147e-145 +9.087499999999999483e-09 2.253170834988071735e-145 +9.088000000000000050e-09 3.245399594368012529e-145 +9.088500000000000617e-09 4.673641275013502907e-145 +9.088999999999999529e-09 6.729080344268717210e-145 +9.089500000000000096e-09 9.686551538049033585e-145 +9.089999999999999009e-09 1.394106057886245471e-144 +9.090499999999999576e-09 2.006021467529340349e-144 +9.091000000000000143e-09 2.885947852733627242e-144 +9.091499999999999055e-09 4.151017110751384813e-144 +9.091999999999999622e-09 5.969441614629007570e-144 +9.092500000000000189e-09 8.582741556083933426e-144 +9.092999999999999102e-09 1.233762320760551361e-143 +9.093499999999999669e-09 1.773168923629091627e-143 +9.094000000000000236e-09 2.547896962081114242e-143 +9.094499999999999149e-09 3.660384871922724402e-143 +9.094999999999999715e-09 5.257566610599279772e-143 +9.095500000000000282e-09 7.550156550025084964e-143 +9.095999999999999195e-09 1.084027427862815440e-142 +9.096499999999999762e-09 1.556100800008135727e-142 +9.097000000000000329e-09 2.233306460745996114e-142 +9.097499999999999242e-09 3.204586949492250193e-142 +9.097999999999999809e-09 4.597364502904035999e-142 +9.098500000000000375e-09 6.594152062723786047e-142 +9.098999999999999288e-09 9.456319093282513859e-142 +9.099499999999999855e-09 1.355808712596059563e-141 +9.100000000000000422e-09 1.943514850049624052e-141 +9.100499999999999335e-09 2.785418446436646363e-141 +9.100999999999999902e-09 3.991224644122019947e-141 +9.101500000000000469e-09 5.717880027672337442e-141 +9.101999999999999381e-09 8.189870716095622740e-141 +9.102499999999999948e-09 1.172822244727309213e-140 +9.103000000000000515e-09 1.679192493392223122e-140 +9.103499999999999428e-09 2.403709139589940869e-140 +9.103999999999999995e-09 3.440142927335726063e-140 +9.104500000000000562e-09 4.922482710416272333e-140 +9.104999999999999474e-09 7.042146464088681917e-140 +9.105500000000000041e-09 1.007254110679160199e-139 +9.106000000000000608e-09 1.440410188532697844e-139 +9.106499999999999521e-09 2.059427282970579673e-139 +9.107000000000000088e-09 2.943878489807523829e-139 +9.107499999999999000e-09 4.207328670253959468e-139 +9.107999999999999567e-09 6.011822373762741994e-139 +9.108500000000000134e-09 8.588532868917061426e-139 +9.108999999999999047e-09 1.226718641223220835e-138 +9.109499999999999614e-09 1.751798252459591603e-138 +9.110000000000000181e-09 2.501130508793429900e-138 +9.110499999999999093e-09 3.570275748116934741e-138 +9.110999999999999660e-09 5.095423750954889768e-138 +9.111500000000000227e-09 7.270629184896428570e-138 +9.111999999999999140e-09 1.037234192381378680e-137 +9.112499999999999707e-09 1.479431274864752425e-137 +9.113000000000000274e-09 2.109725280475002177e-137 +9.113499999999999186e-09 3.007946861429987868e-137 +9.113999999999999753e-09 4.287731221213632064e-137 +9.114500000000000320e-09 6.110800260777812027e-137 +9.114999999999999233e-09 8.707265048049484571e-137 +9.115499999999999800e-09 1.240448052719143094e-136 +9.116000000000000367e-09 1.766804675754197994e-136 +9.116499999999999279e-09 2.516005807818784274e-136 +9.116999999999999846e-09 3.582183917322722679e-136 +9.117500000000000413e-09 5.099143819921766893e-136 +9.117999999999999326e-09 7.257044463002958572e-136 +9.118499999999999893e-09 1.032607910502734059e-135 +9.119000000000000460e-09 1.469008310163325139e-135 +9.119499999999999372e-09 2.089422170269507439e-135 +9.119999999999999939e-09 2.971264305128671633e-135 +9.120500000000000506e-09 4.224443576204354653e-135 +9.120999999999999419e-09 6.004970567547722680e-135 +9.121499999999999986e-09 8.534250642398230805e-135 +9.122000000000000553e-09 1.212643225773171907e-134 +9.122499999999999465e-09 1.722716596109068486e-134 +9.123000000000000032e-09 2.446852393438549242e-134 +9.123500000000000599e-09 3.474680252806732619e-134 +9.123999999999999512e-09 4.933272007939711791e-134 +9.124500000000000079e-09 7.002746723778599471e-134 +9.124999999999998992e-09 9.938364413475210149e-134 +9.125499999999999558e-09 1.410180017473419457e-133 +9.126000000000000125e-09 2.000540448304152546e-133 +9.126499999999999038e-09 2.837482933623168357e-133 +9.126999999999999605e-09 4.023762331109935155e-133 +9.127500000000000172e-09 5.704853867692099376e-133 +9.127999999999999085e-09 8.086672758836140753e-133 +9.128499999999999652e-09 1.146062638543390843e-132 +9.129000000000000218e-09 1.623902617282582997e-132 +9.129499999999999131e-09 2.300513307510619167e-132 +9.129999999999999698e-09 3.258386959458438476e-132 +9.130500000000000265e-09 4.614171253922112290e-132 +9.130999999999999178e-09 6.532778008215989669e-132 +9.131499999999999745e-09 9.247306086482615195e-132 +9.132000000000000312e-09 1.308716887758037581e-131 +9.132499999999999224e-09 1.851779710285792686e-131 +9.132999999999999791e-09 2.619666926023628541e-131 +9.133500000000000358e-09 3.705236844033893042e-131 +9.133999999999999271e-09 5.239610598034462931e-131 +9.134499999999999838e-09 7.407901362217207394e-131 +9.135000000000000405e-09 1.047139425015086562e-130 +9.135499999999999317e-09 1.479881606880663534e-130 +9.135999999999999884e-09 2.091041127821867971e-130 +9.136500000000000451e-09 2.954005627720882074e-130 +9.136999999999999364e-09 4.172277664545780816e-130 +9.137499999999999931e-09 5.891803155253013884e-130 +9.138000000000000498e-09 8.318334788814695158e-130 +9.138499999999999410e-09 1.174188177724764910e-129 +9.138999999999999977e-09 1.657113107013763210e-129 +9.139500000000000544e-09 2.338189697075476889e-129 +9.139999999999999457e-09 3.298530268991096051e-129 +9.140500000000000024e-09 4.652371065646716769e-129 +9.141000000000000591e-09 6.560566764373701998e-129 +9.141499999999999503e-09 9.249569373564819605e-129 +9.142000000000000070e-09 1.303811507036893184e-128 +9.142500000000000637e-09 1.837474185388725825e-128 +9.142999999999999550e-09 2.589052304718077177e-128 +9.143500000000000117e-09 3.647317271476639102e-128 +9.143999999999999029e-09 5.137116363367492086e-128 +9.144499999999999596e-09 7.233998334064673570e-128 +9.145000000000000163e-09 1.018475407146811976e-127 +9.145499999999999076e-09 1.433625872419136974e-127 +9.145999999999999643e-09 2.017596215016073934e-127 +9.146500000000000210e-09 2.838872056968833087e-127 +9.146999999999999122e-09 3.993654834462020440e-127 +9.147499999999999689e-09 5.617051096357988823e-127 +9.148000000000000256e-09 7.898768097149543785e-127 +9.148499999999999169e-09 1.110512607463401564e-126 +9.148999999999999736e-09 1.560992313211846968e-126 +9.149500000000000303e-09 2.193770421752905121e-126 +9.149999999999999215e-09 3.082440696947171327e-126 +9.150499999999999782e-09 4.330234585122163392e-126 +9.151000000000000349e-09 6.081927794892318112e-126 +9.151499999999999262e-09 8.540518474429798466e-126 +9.151999999999999829e-09 1.199058450528605503e-125 +9.152500000000000396e-09 1.683098810226941428e-125 +9.152999999999999308e-09 2.362065916025465020e-125 +9.153499999999999875e-09 3.314267467995180784e-125 +9.154000000000000442e-09 4.649392771304944034e-125 +9.154499999999999355e-09 6.521057944846598542e-125 +9.154999999999999922e-09 9.144353859191761264e-125 +9.155500000000000489e-09 1.282038682066236557e-124 +9.155999999999999401e-09 1.797059164431112351e-124 +9.156499999999999968e-09 2.518469891658346293e-124 +9.157000000000000535e-09 3.528777632607369914e-124 +9.157499999999999448e-09 4.943390991619413052e-124 +9.158000000000000015e-09 6.923708463830867316e-124 +9.158500000000000582e-09 9.695399854935846551e-124 +9.158999999999999494e-09 1.357393665001362988e-123 +9.159500000000000061e-09 1.900023849130502604e-123 +9.160000000000000628e-09 2.659043411207159525e-123 +9.160499999999999541e-09 3.720531142248235560e-123 +9.161000000000000108e-09 5.204722769307541173e-123 +9.161499999999999021e-09 7.279531008811399698e-123 +9.161999999999999588e-09 1.017940374579672852e-122 +9.162500000000000154e-09 1.423162268485266980e-122 +9.162999999999999067e-09 1.989297070185077584e-122 +9.163499999999999634e-09 2.780084562132597404e-122 +9.164000000000000201e-09 3.884449773216202636e-122 +9.164499999999999114e-09 5.426429381990538586e-122 +9.164999999999999681e-09 7.579000609680204539e-122 +9.165500000000000248e-09 1.058334294938637708e-121 +9.165999999999999160e-09 1.477566166858068207e-121 +9.166499999999999727e-09 2.062453414946909955e-121 +9.167000000000000294e-09 2.878289667474329806e-121 +9.167499999999999207e-09 4.016039637671638434e-121 +9.167999999999999774e-09 5.602406582376232730e-121 +9.168500000000000341e-09 7.813837905305203474e-121 +9.168999999999999253e-09 1.089600547929188993e-120 +9.169499999999999820e-09 1.519089525923342822e-120 +9.170000000000000387e-09 2.117447088023882999e-120 +9.170499999999999300e-09 2.950902805469974241e-120 +9.170999999999999867e-09 4.111595527110604293e-120 +9.171500000000000434e-09 5.727683420053916684e-120 +9.171999999999999346e-09 7.977388954887768000e-120 +9.172499999999999913e-09 1.110850642349521812e-119 +9.173000000000000480e-09 1.546549107024003894e-119 +9.173499999999999393e-09 2.152706884502002691e-119 +9.173999999999999960e-09 2.995844213956811425e-119 +9.174500000000000527e-09 4.168374144143465698e-119 +9.174999999999999439e-09 5.798655418561400565e-119 +9.175500000000000006e-09 8.064938341005398406e-119 +9.176000000000000573e-09 1.121470727347357906e-118 +9.176499999999999486e-09 1.559150268683586701e-118 +9.177000000000000053e-09 2.167210752608074592e-118 +9.177500000000000620e-09 3.011809236081749707e-118 +9.177999999999999532e-09 4.184724926293292756e-118 +9.178500000000000099e-09 5.813256850626884016e-118 +9.178999999999999012e-09 8.073935011552859059e-118 +9.179499999999999579e-09 1.121151049470392313e-117 +9.180000000000000146e-09 1.556525167880550804e-117 +9.180499999999999058e-09 2.160535008837190425e-117 +9.180999999999999625e-09 2.998331239203837358e-117 +9.181500000000000192e-09 4.160169756549039523e-117 +9.181999999999999105e-09 5.771060622213877656e-117 +9.182499999999999672e-09 8.004115767343738480e-117 +9.183000000000000239e-09 1.109900961322026719e-116 +9.183499999999999151e-09 1.538750598254021700e-116 +9.183999999999999718e-09 2.132874898568413145e-116 +9.184500000000000285e-09 2.955804272644580013e-116 +9.184999999999999198e-09 4.095426188841272743e-116 +9.185499999999999765e-09 5.673299025836649089e-116 +9.186000000000000332e-09 7.857518053568344349e-116 +9.186499999999999244e-09 1.088048466997899490e-115 +9.186999999999999811e-09 1.506344258136751027e-115 +9.187500000000000378e-09 2.085035109745303393e-115 +9.187999999999999291e-09 2.885463929010708670e-115 +9.188499999999999858e-09 3.992372614165253888e-115 +9.189000000000000425e-09 5.522803955737763121e-115 +9.189499999999999337e-09 7.638381187807495489e-115 +9.189999999999999904e-09 1.056224335160389612e-114 +9.190500000000000471e-09 1.460239701452540869e-114 +9.190999999999999384e-09 2.018390882859347684e-114 +9.191499999999999951e-09 2.789327706323761537e-114 +9.192000000000000518e-09 3.853957726974803742e-114 +9.192499999999999430e-09 5.323870632566533660e-114 +9.192999999999999997e-09 7.352942706434148827e-114 +9.193500000000000564e-09 1.015331853508964139e-113 +9.193999999999999477e-09 1.401741662843417503e-113 +9.194500000000000044e-09 1.934822340027075403e-113 +9.195000000000000611e-09 2.670098887724910365e-113 +9.195499999999999524e-09 3.684060381010552915e-113 +9.196000000000000090e-09 5.082053988553690146e-113 +9.196499999999999003e-09 7.009143481363300722e-113 +9.196999999999999570e-09 9.665042484210146977e-113 +9.197500000000000137e-09 1.332464740218268227e-112 +9.197999999999999050e-09 1.836626408909436725e-112 +9.198499999999999617e-09 2.531040328692532302e-112 +9.199000000000000184e-09 3.487309128020827582e-112 +9.199499999999999096e-09 4.803911180215977989e-112 +9.199999999999999663e-09 6.616261056707604519e-112 +9.200500000000000230e-09 9.110525699165494207e-112 +9.200999999999999143e-09 1.254259454517153859e-111 +9.201499999999999710e-09 1.726412096611302550e-111 +9.202000000000000277e-09 2.375826370257267582e-111 +9.202499999999999189e-09 3.268873147596917534e-111 +9.202999999999999756e-09 4.496706870586486544e-111 +9.203500000000000323e-09 6.184494808152880604e-111 +9.203999999999999236e-09 8.504073826085583923e-111 +9.204499999999999803e-09 1.169130405546380550e-110 +9.205000000000000370e-09 1.606985766204829107e-110 +9.205499999999999282e-09 2.208382239934678088e-110 +9.205999999999999849e-09 3.034237718414020936e-110 +9.206500000000000416e-09 4.168099720151524468e-110 +9.206999999999999329e-09 5.724528736849043447e-110 +9.207499999999999896e-09 7.860578697325847034e-110 +9.208000000000000463e-09 1.079151556273893468e-109 +9.208499999999999375e-09 1.481233425570560982e-109 +9.208999999999999942e-09 2.032720688454461278e-109 +9.209500000000000509e-09 2.788977765360282310e-109 +9.209999999999999422e-09 3.825828848990169846e-109 +9.210499999999999989e-09 5.247097866100686784e-109 +9.211000000000000556e-09 7.194919387757279364e-109 +9.211499999999999468e-09 9.863835967862468789e-109 +9.212000000000000035e-09 1.352006848892521052e-108 +9.212500000000000602e-09 1.852785242433865763e-108 +9.212999999999999515e-09 2.538542362717568272e-108 +9.213500000000000082e-09 3.477417926896238769e-108 +9.213999999999998994e-09 4.762582405790214311e-108 +9.214499999999999561e-09 6.521406303206597487e-108 +9.215000000000000128e-09 8.927978909570690352e-108 +9.215499999999999041e-09 1.222019661664994717e-107 +9.215999999999999608e-09 1.672308404930014074e-107 +9.216500000000000175e-09 2.288061495048580832e-107 +9.216999999999999087e-09 3.129912191617437868e-107 +9.217499999999999654e-09 4.280650355897242355e-107 +9.218000000000000221e-09 5.853296169608116605e-107 +9.218499999999999134e-09 8.002107547020144779e-107 +9.218999999999999701e-09 1.093758420462435248e-106 +9.219500000000000268e-09 1.494691539363182067e-106 +9.219999999999999180e-09 2.042184069327459578e-106 +9.220499999999999747e-09 2.789660370356843251e-106 +9.221000000000000314e-09 3.809964446123390470e-106 +9.221499999999999227e-09 5.202398958455863017e-106 +9.221999999999999794e-09 7.102308395760024272e-106 +9.222500000000000361e-09 9.694123307938459089e-106 +9.222999999999999273e-09 1.322911202216536286e-105 +9.223499999999999840e-09 1.804953382126502340e-105 +9.224000000000000407e-09 2.462149538081539627e-105 +9.224499999999999320e-09 3.357963752999799389e-105 +9.224999999999999887e-09 4.578789969290796815e-105 +9.225500000000000454e-09 6.242212983959196869e-105 +9.225999999999999367e-09 8.508237096048527769e-105 +9.226499999999999933e-09 1.159454541148188232e-104 +9.227000000000000500e-09 1.579723246701426654e-104 +9.227499999999999413e-09 2.151896769057821788e-104 +9.227999999999999980e-09 2.930724527235782433e-104 +9.228500000000000547e-09 3.990632227595914396e-104 +9.228999999999999460e-09 5.432772926050147563e-104 +9.229500000000000027e-09 7.394597539688451931e-104 +9.230000000000000593e-09 1.006284241897933433e-103 +9.230499999999999506e-09 1.369115044751161445e-103 +9.231000000000000073e-09 1.862397392328276632e-103 +9.231500000000000640e-09 2.532899207267193660e-103 +9.231999999999999553e-09 3.444106737484923301e-103 +9.232500000000000120e-09 4.682183581625567574e-103 +9.232999999999999032e-09 6.364047525959660146e-103 +9.233499999999999599e-09 8.648315640891712481e-103 +9.234000000000000166e-09 1.175013321986472400e-102 +9.234499999999999079e-09 1.596126067216220359e-102 +9.234999999999999646e-09 2.167727720234078775e-102 +9.235500000000000213e-09 2.943441530621546648e-102 +9.235999999999999125e-09 3.995942556337288042e-102 +9.236499999999999692e-09 5.423706758034245886e-102 +9.237000000000000259e-09 7.360143908925247552e-102 +9.237499999999999172e-09 9.985953798016660418e-102 +9.237999999999999739e-09 1.354583994953300741e-101 +9.238500000000000306e-09 1.837111300157949965e-101 +9.238999999999999218e-09 2.491025299018460727e-101 +9.239499999999999785e-09 3.377022460484571714e-101 +9.240000000000000352e-09 4.577231742705006077e-101 +9.240499999999999265e-09 6.202760236396958665e-101 +9.240999999999999832e-09 8.403887466282653165e-101 +9.241500000000000399e-09 1.138383529305362641e-100 +9.241999999999999311e-09 1.541736377950493611e-100 +9.242499999999999878e-09 2.087587930820298731e-100 +9.243000000000000445e-09 2.826132867915849950e-100 +9.243499999999999358e-09 3.825194437822066483e-100 +9.243999999999999925e-09 5.176397232899338202e-100 +9.244500000000000492e-09 7.003494924619930813e-100 +9.244999999999999404e-09 9.473602999424842295e-100 +9.245499999999999971e-09 1.281234679552150476e-99 +9.246000000000000538e-09 1.732428543348311719e-99 +9.246499999999999451e-09 2.342044360791452736e-99 +9.247000000000000018e-09 3.165541738685474816e-99 +9.247500000000000585e-09 4.277737320685820684e-99 +9.247999999999999497e-09 5.779540645389573639e-99 +9.248500000000000064e-09 7.807026850445279449e-99 +9.249000000000000631e-09 1.054365446455429443e-98 +9.249499999999999544e-09 1.423671521698422728e-98 +9.250000000000000111e-09 1.921947727823739657e-98 +9.250499999999999023e-09 2.594098645266434575e-98 +9.250999999999999590e-09 3.500616561523217307e-98 +9.251500000000000157e-09 4.722976019040060377e-98 +9.251999999999999070e-09 6.370889593319871526e-98 +9.252499999999999637e-09 8.592065090228409793e-98 +9.253000000000000204e-09 1.158532386936715545e-97 +9.253499999999999116e-09 1.561823455562423151e-97 +9.253999999999999683e-09 2.105081156235277257e-97 +9.254500000000000250e-09 2.836735787162116701e-97 +9.254999999999999163e-09 3.821924228086577290e-97 +9.255499999999999730e-09 5.148235426966461486e-97 +9.256000000000000297e-09 6.933425702473204815e-97 +9.256499999999999209e-09 9.335777109746080417e-97 +9.256999999999999776e-09 1.256800150148491775e-96 +9.257500000000000343e-09 1.691590020963464262e-96 +9.257999999999999256e-09 2.276340085214384022e-96 +9.258499999999999823e-09 3.062614391280694713e-96 +9.259000000000000390e-09 4.119652962573062895e-96 +9.259499999999999303e-09 5.540412339088729293e-96 +9.259999999999999869e-09 7.449663975602064996e-96 +9.260500000000000436e-09 1.001484935861533091e-95 +9.260999999999999349e-09 1.346062729384131993e-95 +9.261499999999999916e-09 1.808836524476996770e-95 +9.262000000000000483e-09 2.430224972722910577e-95 +9.262499999999999396e-09 3.264425644642495497e-95 +9.262999999999999963e-09 4.384097697601472594e-95 +9.263500000000000529e-09 5.886630922504429608e-95 +9.263999999999999442e-09 7.902536899436975479e-95 +9.264500000000000009e-09 1.060667833605038473e-94 +9.265000000000000576e-09 1.423329352087823014e-94 +9.265499999999999489e-09 1.909609443754205852e-94 +9.266000000000000056e-09 2.561514644247747923e-94 +9.266500000000000623e-09 3.435281048653974492e-94 +9.266999999999999535e-09 4.606179361323054715e-94 +9.267500000000000102e-09 6.174937379186771448e-94 +9.267999999999999015e-09 8.276322617648102773e-94 +9.268499999999999582e-09 1.109060930219881489e-93 +9.269000000000000149e-09 1.485889597497277891e-93 +9.269499999999999061e-09 1.990356261207449203e-93 +9.269999999999999628e-09 2.665558618095540313e-93 +9.270500000000000195e-09 3.569100661275047861e-93 +9.270999999999999108e-09 4.777959862780392158e-93 +9.271499999999999675e-09 6.394982179814810059e-93 +9.272000000000000242e-09 8.557547554365513886e-93 +9.272499999999999154e-09 1.144912889933746308e-92 +9.272999999999999721e-09 1.531470761128084599e-92 +9.273500000000000288e-09 2.048132813573561671e-92 +9.273999999999999201e-09 2.738549923885140045e-92 +9.274499999999999768e-09 3.660971522340773717e-92 +9.275000000000000335e-09 4.893112262097779219e-92 +9.275499999999999247e-09 6.538635832780260285e-92 +9.275999999999999814e-09 8.735791530509602760e-92 +9.276500000000000381e-09 1.166891601417244912e-91 +9.276999999999999294e-09 1.558374767450909018e-91 +9.277499999999999861e-09 2.080781329701405579e-91 +9.278000000000000428e-09 2.777756152657291453e-91 +9.278499999999999340e-09 3.707446862369120607e-91 +9.278999999999999907e-09 4.947307367709310527e-91 +9.279500000000000474e-09 6.600487186591494050e-91 +9.279999999999999387e-09 8.804328384701880575e-91 +9.280499999999999954e-09 1.174166306598419677e-90 +9.281000000000000521e-09 1.565583142280783645e-90 +9.281499999999999433e-09 2.087064158222441409e-90 +9.282000000000000000e-09 2.781689201090553860e-90 +9.282500000000000567e-09 3.706760703435213902e-90 +9.282999999999999480e-09 4.938483841736717961e-90 +9.283500000000000047e-09 6.578181698033408973e-90 +9.284000000000000614e-09 8.760547206251087178e-90 +9.284499999999999526e-09 1.166459714440381063e-89 +9.285000000000000093e-09 1.552820999583982816e-89 +9.285499999999999006e-09 2.066741632404972169e-89 +9.285999999999999573e-09 2.750199010376532845e-89 +9.286500000000000140e-09 3.658939226098920539e-89 +9.286999999999999052e-09 4.866978320571552914e-89 +9.287499999999999619e-09 6.472570187045611733e-89 +9.288000000000000186e-09 8.606117404314539223e-89 +9.288499999999999099e-09 1.144065542229848532e-88 +9.288999999999999666e-09 1.520574438417249486e-88 +9.289500000000000233e-09 2.020587242910528487e-88 +9.289999999999999146e-09 2.684483067824542127e-88 +9.290499999999999712e-09 3.565799111606834349e-88 +9.291000000000000279e-09 4.735504099960124466e-88 +9.291499999999999192e-09 6.287654976521850663e-88 +9.291999999999999759e-09 8.346883064417451391e-88 +9.292500000000000326e-09 1.107829937442375821e-87 +9.292999999999999239e-09 1.470059815062403515e-87 +9.293499999999999806e-09 1.950338779342086766e-87 +9.294000000000000372e-09 2.587010832511424456e-87 +9.294499999999999285e-09 3.430833005646436046e-87 +9.294999999999999852e-09 4.548980265998184071e-87 +9.295500000000000419e-09 6.030338170332621092e-87 +9.295999999999999332e-09 7.992495912074174466e-87 +9.296499999999999899e-09 1.059098418362740839e-86 +9.297000000000000466e-09 1.403147598267235959e-86 +9.297499999999999378e-09 1.858589743058663119e-86 +9.297999999999999945e-09 2.461369734151322364e-86 +9.298500000000000512e-09 3.258992170694368470e-86 +9.298999999999999425e-09 4.314226273165563258e-86 +9.299499999999999992e-09 5.709994140514751122e-86 +9.300000000000000559e-09 7.555819019713678231e-86 +9.300499999999999471e-09 9.996329718648227319e-86 +9.301000000000000038e-09 1.322247452727315100e-85 +9.301500000000000605e-09 1.748630490131004855e-85 +9.301999999999999518e-09 2.312046133376263741e-85 +9.302500000000000085e-09 3.056385181699625057e-85 +9.302999999999998997e-09 4.039548403823248286e-85 +9.303499999999999564e-09 5.337903134921805240e-85 +9.304000000000000131e-09 7.052152606636807960e-85 +9.304499999999999044e-09 9.315064277817608391e-85 +9.304999999999999611e-09 1.230164390786206050e-84 +9.305500000000000178e-09 1.624252664943781175e-84 +9.305999999999999090e-09 2.144159880376137092e-84 +9.306499999999999657e-09 2.829918213741557913e-84 +9.307000000000000224e-09 3.734253048238120201e-84 +9.307499999999999137e-09 4.926593676903208287e-84 +9.307999999999999704e-09 6.498346835149772678e-84 +9.308500000000000271e-09 8.569829277789295401e-84 +9.308999999999999183e-09 1.129937948636295577e-83 +9.309499999999999750e-09 1.489533105003402352e-83 +9.310000000000000317e-09 1.963174328444631248e-83 +9.310499999999999230e-09 2.586906391878242783e-83 +9.310999999999999797e-09 3.408126471653863278e-83 +9.311500000000000364e-09 4.489147056240291694e-83 +9.311999999999999276e-09 5.911873099450740823e-83 +9.312499999999999843e-09 7.783940636499368996e-83 +9.313000000000000410e-09 1.024677189087859185e-82 +9.313499999999999323e-09 1.348614306284887218e-82 +9.313999999999999890e-09 1.774604578638040809e-82 +9.314500000000000457e-09 2.334686510848987856e-82 +9.314999999999999369e-09 3.070921334433110841e-82 +9.315499999999999936e-09 4.038517323632868483e-82 +9.316000000000000503e-09 5.309924546806536187e-82 +9.316499999999999416e-09 6.980200389861011298e-82 +9.316999999999999983e-09 9.174038800016323682e-82 +9.317500000000000550e-09 1.205497726283061446e-81 +9.317999999999999462e-09 1.583745375241509093e-81 +9.318500000000000029e-09 2.080259264869999442e-81 +9.319000000000000596e-09 2.731886872433503247e-81 +9.319499999999999509e-09 3.586915110944781886e-81 +9.320000000000000076e-09 4.708608986790512289e-81 +9.320499999999998988e-09 6.179840935320364515e-81 +9.320999999999999555e-09 8.109145773194395769e-81 +9.321500000000000122e-09 1.063863868424131627e-80 +9.321999999999999035e-09 1.395436737179415623e-80 +9.322499999999999602e-09 1.829984395052671712e-80 +9.323000000000000169e-09 2.399372967132122149e-80 +9.323499999999999082e-09 3.145294226532834191e-80 +9.323999999999999648e-09 4.122284250781549370e-80 +9.324500000000000215e-09 5.401666081116679458e-80 +9.324999999999999128e-09 7.076698175425526635e-80 +9.325499999999999695e-09 9.269296062424969447e-80 +9.326000000000000262e-09 1.213880613695983854e-79 +9.326499999999999175e-09 1.589345579883782671e-79 +9.326999999999999742e-09 2.080529329199432881e-79 +9.327500000000000308e-09 2.722967685909721228e-79 +9.327999999999999221e-09 3.563069336317567266e-79 +9.328499999999999788e-09 4.661430365983170988e-79 +9.329000000000000355e-09 6.097155473067820101e-79 +9.329499999999999268e-09 7.973490458303481044e-79 +9.329999999999999835e-09 1.042516241071973598e-78 +9.330500000000000402e-09 1.362794339936796206e-78 +9.330999999999999314e-09 1.781110869325081671e-78 +9.331499999999999881e-09 2.327366226979591943e-78 +9.332000000000000448e-09 3.040546452985098822e-78 +9.332499999999999361e-09 3.971473774064298745e-78 +9.332999999999999928e-09 5.186386715866475790e-78 +9.333500000000000495e-09 6.771599036772189380e-78 +9.333999999999999407e-09 8.839561342552595523e-78 +9.334499999999999974e-09 1.153674609177154607e-77 +9.335000000000000541e-09 1.505390240408133554e-77 +9.335499999999999454e-09 1.963939019942477291e-77 +9.336000000000000021e-09 2.561651481712662663e-77 +9.336500000000000588e-09 3.340605775795562369e-77 +9.336999999999999500e-09 4.355555516708186242e-77 +9.337500000000000067e-09 5.677733722186020443e-77 +9.338000000000000634e-09 7.399793989321727494e-77 +9.338499999999999547e-09 9.642227597832107288e-77 +9.339000000000000114e-09 1.256169570819553057e-76 +9.339499999999999026e-09 1.636184599257221963e-76 +9.339999999999999593e-09 2.130735163909811630e-76 +9.340500000000000160e-09 2.774212900615912777e-76 +9.340999999999999073e-09 3.611297288720371158e-76 +9.341499999999999640e-09 4.700021426555319820e-76 +9.342000000000000207e-09 6.115747900499603116e-76 +9.342499999999999119e-09 7.956323867944841524e-76 +9.342999999999999686e-09 1.034876374393900372e-75 +9.343500000000000253e-09 1.345791040745011428e-75 +9.343999999999999166e-09 1.749765842247632288e-75 +9.344499999999999733e-09 2.274549417518601482e-75 +9.345000000000000300e-09 2.956132938647256696e-75 +9.345499999999999212e-09 3.841189078605236032e-75 +9.345999999999999779e-09 4.990229868595497766e-75 +9.346500000000000346e-09 6.481694509464060330e-75 +9.346999999999999259e-09 8.417239924310289334e-75 +9.347499999999999826e-09 1.092858654034892502e-74 +9.348000000000000393e-09 1.418637468236908500e-74 +9.348499999999999305e-09 1.841161977031204743e-74 +9.348999999999999872e-09 2.389052590150767936e-74 +9.349500000000000439e-09 3.099363852492526187e-74 +9.349999999999999352e-09 4.020060215741641370e-74 +9.350499999999999919e-09 5.213215696368261237e-74 +9.351000000000000486e-09 6.759148236237467295e-74 +9.351499999999999398e-09 8.761760732036628569e-74 +9.351999999999999965e-09 1.135543951515565078e-73 +9.352500000000000532e-09 1.471396262721568832e-73 +9.352999999999999445e-09 1.906200108736463016e-73 +9.353500000000000012e-09 2.468996489583747866e-73 +9.354000000000000579e-09 3.197316258047213496e-73 +9.354499999999999491e-09 4.139652257618189419e-73 +9.355000000000000058e-09 5.358648450694846998e-73 +9.355500000000000625e-09 6.935213149105050394e-73 +9.355999999999999538e-09 8.973823043539323613e-73 +9.356500000000000105e-09 1.160936138461649825e-72 +9.356999999999999018e-09 1.501593226718904813e-72 +9.357499999999999584e-09 1.941821976673237107e-72 +9.358000000000000151e-09 2.510612370181764113e-72 +9.358499999999999064e-09 3.245361335986757565e-72 +9.358999999999999631e-09 4.194300985204547597e-72 +9.359500000000000198e-09 5.419625383195806303e-72 +9.359999999999999111e-09 7.001515989743251756e-72 +9.360499999999999678e-09 9.043323001948527563e-72 +9.361000000000000244e-09 1.167823316188880635e-71 +9.361499999999999157e-09 1.507784873496465183e-71 +9.361999999999999724e-09 1.946322320900960903e-71 +9.362500000000000291e-09 2.511905434956037136e-71 +9.362999999999999204e-09 3.241193423522153367e-71 +9.363499999999999771e-09 4.181381116366318892e-71 +9.364000000000000338e-09 5.393214571364916298e-71 +9.364499999999999250e-09 6.954866306720498958e-71 +9.364999999999999817e-09 8.966914191664810817e-71 +9.365500000000000384e-09 1.155873701568939033e-70 +9.365999999999999297e-09 1.489672816469579593e-70 +9.366499999999999864e-09 1.919484210496571712e-70 +9.367000000000000431e-09 2.472813347586222578e-70 +9.367499999999999343e-09 3.185013442507716402e-70 +9.367999999999999910e-09 4.101515377054313275e-70 +9.368500000000000477e-09 5.280688619549239848e-70 +9.368999999999999390e-09 6.797510957975237999e-70 +9.369499999999999957e-09 8.748274750725848380e-70 +9.370000000000000524e-09 1.125662123320833685e-69 +9.370499999999999436e-09 1.448127607183853285e-69 +9.371000000000000003e-09 1.862596378147389334e-69 +9.371500000000000570e-09 2.395211214127819677e-69 +9.371999999999999483e-09 3.079512842908599180e-69 +9.372500000000000050e-09 3.958524744501493715e-69 +9.373000000000000617e-09 5.087423005445284462e-69 +9.373499999999999529e-09 6.536954711547931291e-69 +9.374000000000000096e-09 8.397813854742086065e-69 +9.374499999999999009e-09 1.078624182130931845e-68 +9.374999999999999576e-09 1.385119369922168647e-68 +9.375500000000000143e-09 1.778350632171857809e-68 +9.375999999999999055e-09 2.282762480011534434e-68 +9.376499999999999622e-09 2.929659848404011508e-68 +9.377000000000000189e-09 3.759125398621702805e-68 +9.377499999999999102e-09 4.822470379316140633e-68 +9.377999999999999669e-09 6.185366891167656417e-68 +9.378500000000000236e-09 7.931850189235736229e-68 +9.378999999999999148e-09 1.016943165052388621e-67 +9.379499999999999715e-09 1.303562929557942245e-67 +9.380000000000000282e-09 1.670630718041401200e-67 +9.380499999999999195e-09 2.140632252732607709e-67 +9.380999999999999762e-09 2.742311644530064107e-67 +9.381500000000000329e-09 3.512405852005458669e-67 +9.381999999999999241e-09 4.497857762280427326e-67 +9.382499999999999808e-09 5.758639394667979148e-67 +9.383000000000000375e-09 7.371352698950125220e-67 +9.383499999999999288e-09 9.433821187192053760e-67 +9.383999999999999855e-09 1.207094385648403797e-66 +9.384500000000000422e-09 1.544215690255157529e-66 +9.384999999999999334e-09 1.975094287276269493e-66 +9.385499999999999901e-09 2.525694659608222371e-66 +9.386000000000000468e-09 3.229140935463912314e-66 +9.386499999999999381e-09 4.127682607918534815e-66 +9.386999999999999948e-09 5.275197595941902526e-66 +9.387500000000000515e-09 6.740378884132165069e-66 +9.387999999999999427e-09 8.610790599323464922e-66 +9.388499999999999994e-09 1.099802968937536073e-65 +9.389000000000000561e-09 1.404429323196464271e-65 +9.389499999999999474e-09 1.793073245527428949e-65 +9.390000000000000041e-09 2.288807740412301440e-65 +9.390500000000000608e-09 2.921014666984181530e-65 +9.390999999999999521e-09 3.727102211080054520e-65 +9.391500000000000087e-09 4.754687837914140272e-65 +9.391999999999999000e-09 6.064372318424773376e-65 +9.392499999999999567e-09 7.733264155948696699e-65 +9.393000000000000134e-09 9.859456492324386775e-65 +9.393499999999999047e-09 1.256771274479053762e-64 +9.393999999999999614e-09 1.601668585247461457e-64 +9.394500000000000181e-09 2.040808293365688781e-64 +9.394999999999999093e-09 2.599829722712552900e-64 +9.395499999999999660e-09 3.311316854860557640e-64 +9.396000000000000227e-09 4.216670989230940377e-64 +9.396499999999999140e-09 5.368486104870946531e-64 +9.396999999999999707e-09 6.833561257107753687e-64 +9.397500000000000274e-09 8.696720074264611554e-64 +9.397999999999999186e-09 1.106565261209188574e-63 +9.398499999999999753e-09 1.407705196918298934e-63 +9.399000000000000320e-09 1.790439031233951103e-63 +9.399499999999999233e-09 2.276777027820878380e-63 +9.399999999999999800e-09 2.894640311647806411e-63 +9.400500000000000367e-09 3.679441074164087911e-63 +9.400999999999999279e-09 4.676083303750458620e-63 +9.401499999999999846e-09 5.941495436197528425e-63 +9.402000000000000413e-09 7.547835690272156462e-63 +9.402499999999999326e-09 9.586547931164229127e-63 +9.402999999999999893e-09 1.217349270237449708e-62 +9.403500000000000460e-09 1.545543712057904460e-62 +9.403999999999999372e-09 1.961826183303818572e-62 +9.404499999999999939e-09 2.489733721572480358e-62 +9.405000000000000506e-09 3.159063950846381328e-62 +9.405499999999999419e-09 4.007532701850004504e-62 +9.405999999999999986e-09 5.082868490085962506e-62 +9.406500000000000553e-09 6.445458444255127172e-62 +9.406999999999999465e-09 8.171690194525554961e-62 +9.407500000000000032e-09 1.035817191966855221e-61 +9.408000000000000599e-09 1.312706022431696357e-61 +9.408499999999999512e-09 1.663278529966290075e-61 +9.409000000000000079e-09 2.107053808862598951e-61 +9.409499999999998991e-09 2.668697892207998160e-61 +9.409999999999999558e-09 3.379374633278223948e-61 +9.410500000000000125e-09 4.278449478746832242e-61 +9.410999999999999038e-09 5.415637882240642381e-61 +9.411499999999999605e-09 6.853713845881457977e-61 +9.412000000000000172e-09 8.671923929024814866e-61 +9.412499999999999084e-09 1.097028959371240613e-60 +9.412999999999999651e-09 1.387502793045921022e-60 +9.413500000000000218e-09 1.754538009200752799e-60 +9.413999999999999131e-09 2.218221125025669292e-60 +9.414499999999999698e-09 2.803883946160084507e-60 +9.415000000000000265e-09 3.543466834322638227e-60 +9.415499999999999177e-09 4.477234602663280512e-60 +9.415999999999999744e-09 5.655935810693200222e-60 +9.416500000000000311e-09 7.143519482635076930e-60 +9.416999999999999224e-09 9.020552451938548405e-60 +9.417499999999999791e-09 1.138851714340398913e-59 +9.418000000000000358e-09 1.437521552540728836e-59 +9.418499999999999270e-09 1.814156255538390395e-59 +9.418999999999999837e-09 2.289012465191133298e-59 +9.419500000000000404e-09 2.887584924936425352e-59 +9.419999999999999317e-09 3.641954494743052170e-59 +9.420499999999999884e-09 4.592481393714086061e-59 +9.421000000000000451e-09 5.789931649823513034e-59 +9.421499999999999363e-09 7.298147046212785294e-59 +9.421999999999999930e-09 9.197396792228885770e-59 +9.422500000000000497e-09 1.158858412804504105e-58 +9.422999999999999410e-09 1.459852486036398225e-58 +9.423499999999999977e-09 1.838656962929664102e-58 +9.424000000000000544e-09 2.315291027951611943e-58 +9.424499999999999457e-09 2.914899649505521826e-58 +9.425000000000000023e-09 3.669059615428850717e-58 +9.425500000000000590e-09 4.617416703653629126e-58 +9.425999999999999503e-09 5.809737526341832182e-58 +9.426500000000000070e-09 7.308480554354054304e-58 +9.427000000000000637e-09 9.192017033788060212e-58 +9.427499999999999550e-09 1.155866524860432323e-57 +9.428000000000000117e-09 1.453174248500655706e-57 +9.428499999999999029e-09 1.826589013736629915e-57 +9.428999999999999596e-09 2.295499118420736135e-57 +9.429500000000000163e-09 2.884207889782436640e-57 +9.429999999999999076e-09 3.623173505085340833e-57 +9.430499999999999643e-09 4.550559992481349484e-57 +9.431000000000000210e-09 5.714177118757644818e-57 +9.431499999999999122e-09 7.173906175813572199e-57 +9.431999999999999689e-09 9.004732753867975487e-57 +9.432500000000000256e-09 1.130053760963678892e-56 +9.432999999999999169e-09 1.417883416203510961e-56 +9.433499999999999736e-09 1.778668779227940067e-56 +9.434000000000000303e-09 2.230811024938308105e-56 +9.434499999999999215e-09 2.797329487674650352e-56 +9.434999999999999782e-09 3.507014857466251981e-56 +9.435500000000000349e-09 4.395868874222287161e-56 +9.435999999999999262e-09 5.508901330151836125e-56 +9.436499999999999829e-09 6.902372600657999526e-56 +9.437000000000000396e-09 8.646591591846293608e-56 +9.437499999999999308e-09 1.082940595454781168e-55 +9.437999999999999875e-09 1.356055495644633277e-55 +9.438500000000000442e-09 1.697709712294758345e-55 +9.438999999999999355e-09 2.125017663701900048e-55 +9.439499999999999922e-09 2.659345698882566206e-55 +9.440000000000000489e-09 3.327363054183474807e-55 +9.440499999999999401e-09 4.162351232267843453e-55 +9.440999999999999968e-09 5.205835014583225797e-55 +9.441500000000000535e-09 6.509613697985743120e-55 +9.441999999999999448e-09 8.138290247700055426e-55 +9.442500000000000015e-09 1.017241977773044099e-54 +9.443000000000000582e-09 1.271242821650379798e-54 +9.443499999999999494e-09 1.588348856572225135e-54 +9.444000000000000061e-09 1.984158751777419196e-54 +9.444500000000000628e-09 2.478107147249356798e-54 +9.444999999999999541e-09 3.094403080171428975e-54 +9.445500000000000108e-09 3.863196778483600986e-54 +9.445999999999999020e-09 4.822030098627217446e-54 +9.446499999999999587e-09 6.017639192421115438e-54 +9.447000000000000154e-09 7.508194481898885673e-54 +9.447499999999999067e-09 9.366083460016985328e-54 +9.447999999999999634e-09 1.168136715717605860e-53 +9.448500000000000201e-09 1.456607247888860020e-53 +9.448999999999999113e-09 1.815952146315299834e-53 +9.449499999999999680e-09 2.263494659935178077e-53 +9.450000000000000247e-09 2.820770088460175542e-53 +9.450499999999999160e-09 3.514544497542455756e-53 +9.450999999999999727e-09 4.378078496420482632e-53 +9.451500000000000294e-09 5.452694710020466495e-53 +9.451999999999999206e-09 6.789721528210418649e-53 +9.452499999999999773e-09 8.452902966350540089e-53 +9.453000000000000340e-09 1.052138580013200998e-52 +9.453499999999999253e-09 1.309342150238043569e-52 +9.453999999999999820e-09 1.629095309176578736e-52 +9.454500000000000387e-09 2.026529726144511812e-52 +9.454999999999999300e-09 2.520418188794922393e-52 +9.455499999999999866e-09 3.134046044302844538e-52 +9.456000000000000433e-09 3.896290067647729285e-52 +9.456499999999999346e-09 4.842953857418200894e-52 +9.456999999999999913e-09 6.018420417013607825e-52 +9.457500000000000480e-09 7.477696841561098378e-52 +9.457999999999999393e-09 9.288943627874163978e-52 +9.458499999999999960e-09 1.153660283113406830e-51 +9.459000000000000526e-09 1.432526606198112643e-51 +9.459499999999999439e-09 1.778445632601113161e-51 +9.460000000000000006e-09 2.207453839892211297e-51 +9.460500000000000573e-09 2.739402258301807530e-51 +9.460999999999999486e-09 3.398858849197833563e-51 +9.461500000000000053e-09 4.216223164929750601e-51 +9.462000000000000620e-09 5.229102946901353564e-51 +9.462499999999999532e-09 6.484013868140765543e-51 +9.463000000000000099e-09 8.038477846530821750e-51 +9.463499999999999012e-09 9.963612859249437157e-51 +9.463999999999999579e-09 1.234732873226813231e-50 +9.464500000000000146e-09 1.529826988658548624e-50 +9.464999999999999058e-09 1.895067863377353415e-50 +9.465499999999999625e-09 2.347039272287986091e-50 +9.466000000000000192e-09 2.906224016348442631e-50 +9.466499999999999105e-09 3.597915498988449373e-50 +9.466999999999999672e-09 4.453341216905679363e-50 +9.467500000000000239e-09 5.511047145711156588e-50 +9.467999999999999151e-09 6.818603255959828943e-50 +9.468499999999999718e-09 8.434704220980532798e-50 +9.469000000000000285e-09 1.043175635845737433e-49 +9.469499999999999198e-09 1.289906269856504528e-49 +9.469999999999999765e-09 1.594674366896598912e-49 +9.470500000000000332e-09 1.971056230549943612e-49 +9.470999999999999244e-09 2.435786145299033209e-49 +9.471499999999999811e-09 3.009486772380950577e-49 +9.472000000000000378e-09 3.717567500584263716e-49 +9.472499999999999291e-09 4.591329147202975407e-49 +9.472999999999999858e-09 5.669322129475370227e-49 +9.473500000000000425e-09 6.999015922749680235e-49 +9.473999999999999337e-09 8.638850730869268233e-49 +9.474499999999999904e-09 1.066075835773832044e-48 +9.475000000000000471e-09 1.315325894857614105e-48 +9.475499999999999384e-09 1.622526437421433531e-48 +9.475999999999999951e-09 2.001074855033195855e-48 +9.476500000000000518e-09 2.467448112447499747e-48 +9.476999999999999430e-09 3.041906520401510651e-48 +9.477499999999999997e-09 3.749357394059479807e-48 +9.478000000000000564e-09 4.620414703438964636e-48 +9.478499999999999477e-09 5.692698926511350104e-48 +9.479000000000000044e-09 7.012431227805347682e-48 +9.479500000000000611e-09 8.636388206094812976e-48 +9.479999999999999523e-09 1.063429827333340356e-47 +9.480500000000000090e-09 1.309177883969692436e-47 +9.480999999999999003e-09 1.611393561436460155e-47 +9.481499999999999570e-09 1.982977237635003967e-47 +9.482000000000000137e-09 2.439759260529528746e-47 +9.482499999999999049e-09 3.001161470932472417e-47 +9.482999999999999616e-09 3.691007185173516229e-47 +9.483500000000000183e-09 4.538512752002946827e-47 +9.483999999999999096e-09 5.579501138642599652e-47 +9.484499999999999663e-09 6.857886958317577040e-47 +9.485000000000000230e-09 8.427493279864401274e-47 +9.485499999999999142e-09 1.035427389011552489e-46 +9.485999999999999709e-09 1.271903093583305975e-46 +9.486500000000000276e-09 1.562073769236006259e-46 +9.486999999999999189e-09 1.918060036764806800e-46 +9.487499999999999756e-09 2.354702229683416560e-46 +9.488000000000000323e-09 2.890166976312770250e-46 +9.488499999999999236e-09 3.546688239262499367e-46 +9.488999999999999802e-09 4.351472431065556194e-46 +9.489500000000000369e-09 5.337803707967772463e-46 +9.489999999999999282e-09 6.546393437202626376e-46 +9.490499999999999849e-09 8.027027440960611454e-46 +9.491000000000000416e-09 9.840576312830617090e-46 +9.491499999999999329e-09 1.206144832926670207e-45 +9.491999999999999896e-09 1.478058178485355659e-45 +9.492500000000000462e-09 1.810909462822943197e-45 +9.492999999999999375e-09 2.218273486951845256e-45 +9.493499999999999942e-09 2.716730634453241985e-45 +9.494000000000000509e-09 3.326528223916735858e-45 +9.494499999999999422e-09 4.072386473467866011e-45 +9.494999999999999989e-09 4.984480496942549219e-45 +9.495500000000000556e-09 6.099636533501857557e-45 +9.495999999999999468e-09 7.462788849212399541e-45 +9.496500000000000035e-09 9.128753749907039696e-45 +9.497000000000000602e-09 1.116438928495205615e-44 +9.497499999999999515e-09 1.365122395619721711e-44 +9.498000000000000082e-09 1.668865562555001186e-44 +9.498499999999998994e-09 2.039784350517082468e-44 +9.498999999999999561e-09 2.492644242366635873e-44 +9.499500000000000128e-09 3.045436046522402004e-44 +9.499999999999999041e-09 3.720075976019144456e-44 +9.500499999999999608e-09 4.543256709288230339e-44 +9.501000000000000175e-09 5.547481781559449945e-44 +9.501499999999999087e-09 6.772322540885155320e-44 +9.501999999999999654e-09 8.265945243289858513e-44 +9.502500000000000221e-09 1.008696596314359230e-43 +9.502999999999999134e-09 1.230670322701006806e-43 +9.503499999999999701e-09 1.501191308775271220e-43 +9.504000000000000268e-09 1.830810927980144985e-43 +9.504499999999999180e-09 2.232359278742024739e-43 +9.504999999999999747e-09 2.721434140093235842e-43 +9.505500000000000314e-09 3.316994158035435627e-43 +9.505999999999999227e-09 4.042078333757644771e-43 +9.506499999999999794e-09 4.924678526782144235e-43 +9.507000000000000361e-09 5.998797297653072924e-43 +9.507499999999999273e-09 7.305730197108944048e-43 +9.507999999999999840e-09 8.895619804076394333e-43 +9.508500000000000407e-09 1.082933871581830321e-42 +9.508999999999999320e-09 1.318077065277073282e-42 +9.509499999999999887e-09 1.603957328241597243e-42 +9.510000000000000454e-09 1.951452380295587308e-42 +9.510499999999999366e-09 2.373756937544316518e-42 +9.510999999999999933e-09 2.886872989428167958e-42 +9.511500000000000500e-09 3.510203123512773204e-42 +9.511999999999999413e-09 4.267268409328819870e-42 +9.512499999999999980e-09 5.186576811908204403e-42 +9.513000000000000547e-09 6.302673482923581993e-42 +9.513499999999999459e-09 7.657410760205233245e-42 +9.514000000000000026e-09 9.301483520304866183e-42 +9.514500000000000593e-09 1.129628494518458715e-41 +9.514999999999999506e-09 1.371614910948998041e-41 +9.515500000000000073e-09 1.665106046100459119e-41 +9.515999999999998985e-09 2.020992672542141650e-41 +9.516499999999999552e-09 2.452453158428762974e-41 +9.517000000000000119e-09 2.975430733109503469e-41 +9.517499999999999032e-09 3.609209642413756810e-41 +9.517999999999999599e-09 4.377110540547573960e-41 +9.518500000000000166e-09 5.307329622222083824e-41 +9.518999999999999078e-09 6.433950998447563844e-41 +9.519499999999999645e-09 7.798167831884696657e-41 +9.520000000000000212e-09 9.449754976491350801e-41 +9.520499999999999125e-09 1.144884455585036600e-40 +9.520999999999999692e-09 1.386806635760824073e-40 +9.521500000000000259e-09 1.679512746935507109e-40 +9.521999999999999172e-09 2.033592065535409919e-40 +9.522499999999999738e-09 2.461826907787429195e-40 +9.523000000000000305e-09 2.979643670654308474e-40 +9.523499999999999218e-09 3.605655985909643026e-40 +9.523999999999999785e-09 4.362318664385918456e-40 +9.524500000000000352e-09 5.276714866794092848e-40 +9.524999999999999265e-09 6.381503448058523234e-40 +9.525499999999999832e-09 7.716058832550009005e-40 +9.526000000000000398e-09 9.327842266288019872e-40 +9.526499999999999311e-09 1.127405107248685845e-39 +9.526999999999999878e-09 1.362360186350931236e-39 +9.527500000000000445e-09 1.645951484063407094e-39 +9.527999999999999358e-09 1.988177970809490151e-39 +9.528499999999999925e-09 2.401079977510066750e-39 +9.529000000000000492e-09 2.899153004062995325e-39 +9.529499999999999404e-09 3.499844807393214583e-39 +9.529999999999999971e-09 4.224152406205902887e-39 +9.530500000000000538e-09 5.097338938373664047e-39 +9.530999999999999451e-09 6.149794254878451179e-39 +9.531500000000000018e-09 7.418067857951329301e-39 +9.532000000000000585e-09 8.946108441897890531e-39 +9.532499999999999497e-09 1.078675105373639420e-38 +9.533000000000000064e-09 1.300350097231160189e-38 +9.533500000000000631e-09 1.567267306613480324e-38 +9.533999999999999544e-09 1.888595693858415817e-38 +9.534500000000000111e-09 2.275349196915501419e-38 +9.534999999999999023e-09 2.740755284721405542e-38 +9.535499999999999590e-09 3.300696589003871423e-38 +9.536000000000000157e-09 3.974239995692218111e-38 +9.536499999999999070e-09 4.784270385566586104e-38 +9.536999999999999637e-09 5.758249566246324121e-38 +9.537500000000000204e-09 6.929124938815710170e-38 +9.537999999999999116e-09 8.336417216923257351e-38 +9.538499999999999683e-09 1.002752221205502565e-37 +9.539000000000000250e-09 1.205926849243102096e-37 +9.539499999999999163e-09 1.449978082468562025e-37 +9.539999999999999730e-09 1.743070896644994250e-37 +9.540500000000000297e-09 2.094989289142165566e-37 +9.540999999999999209e-09 2.517454924990859699e-37 +9.541499999999999776e-09 3.024508021634018173e-37 +9.542000000000000343e-09 3.632962535028452206e-37 +9.542499999999999256e-09 4.362950029267237737e-37 +9.542999999999999823e-09 5.238569373750748029e-37 +9.543500000000000390e-09 6.288662699904100781e-37 +9.543999999999999302e-09 7.547741962995757527e-37 +9.544499999999999869e-09 9.057095111559390883e-37 +9.545000000000000436e-09 1.086610640746070771e-36 +9.545499999999999349e-09 1.303383203021947618e-36 +9.545999999999999916e-09 1.563087993665961746e-36 +9.546500000000000483e-09 1.874165226562281469e-36 +9.546999999999999395e-09 2.246701965513014262e-36 +9.547499999999999962e-09 2.692751000455940322e-36 +9.548000000000000529e-09 3.226710985771393185e-36 +9.548499999999999442e-09 3.865779516706540817e-36 +9.549000000000000009e-09 4.630493027201102995e-36 +9.549500000000000576e-09 5.545370013468091994e-36 +9.549999999999999488e-09 6.639677199579036270e-36 +9.550500000000000055e-09 7.948341954923214330e-36 +9.551000000000000622e-09 9.513038656738913698e-36 +9.551499999999999535e-09 1.138348189177401974e-35 +9.552000000000000102e-09 1.361896556029998214e-35 +9.552499999999999015e-09 1.629019426219833035e-35 +9.552999999999999581e-09 1.948146202050507866e-35 +9.553500000000000148e-09 2.329324368184228097e-35 +9.553999999999999061e-09 2.784527652292894626e-35 +9.554499999999999628e-09 3.328022403613780463e-35 +9.555000000000000195e-09 3.976803097901680113e-35 +9.555499999999999108e-09 4.751109904189313905e-35 +9.555999999999999675e-09 5.675043648998774989e-35 +9.556500000000000241e-09 6.777296355456904234e-35 +9.556999999999999154e-09 8.092018898772591972e-35 +9.557499999999999721e-09 9.659851300581825924e-35 +9.558000000000000288e-09 1.152914589512410266e-34 +9.558499999999999201e-09 1.375741917271652864e-34 +9.558999999999999768e-09 1.641307469641646649e-34 +9.559500000000000335e-09 1.957744728077460105e-34 +9.559999999999999247e-09 2.334722783486509562e-34 +9.560499999999999814e-09 2.783733916117945528e-34 +9.561000000000000381e-09 3.318434587015747172e-34 +9.561499999999999294e-09 3.955049677396514281e-34 +9.561999999999999861e-09 4.712851608138754620e-34 +9.562500000000000428e-09 5.614728092388413684e-34 +9.562999999999999340e-09 6.687854778443979319e-34 +9.563499999999999907e-09 7.964491996039186685e-34 +9.564000000000000474e-09 9.482928307805399571e-34 +9.564499999999999387e-09 1.128859768434418803e-33 +9.564999999999999954e-09 1.343540197758626170e-33 +9.565500000000000521e-09 1.598727609491513603e-33 +9.565999999999999433e-09 1.902004003105650866e-33 +9.566500000000000000e-09 2.262358987773051881e-33 +9.567000000000000567e-09 2.690448931717549692e-33 +9.567499999999999480e-09 3.198903416725016316e-33 +9.568000000000000047e-09 3.802687557812770750e-33 +9.568500000000000614e-09 4.519530283225072597e-33 +9.568999999999999526e-09 5.370430477970443000e-33 +9.569500000000000093e-09 6.380255022927191558e-33 +9.569999999999999006e-09 7.578445267615307054e-33 +9.570499999999999573e-09 8.999851424430060286e-33 +9.571000000000000140e-09 1.068571784275809934e-32 +9.571499999999999052e-09 1.268484620484485668e-32 +9.571999999999999619e-09 1.505496848795495328e-32 +9.572500000000000186e-09 1.786436718517507125e-32 +9.572999999999999099e-09 2.119378691766526298e-32 +9.573499999999999666e-09 2.513868937638505726e-32 +9.574000000000000233e-09 2.981191270415456339e-32 +9.574499999999999145e-09 3.534680720707533928e-32 +9.574999999999999712e-09 4.190093194493742147e-32 +9.575500000000000279e-09 4.966041161971559863e-32 +9.575999999999999192e-09 5.884507064190817215e-32 +9.576499999999999759e-09 6.971448175151865844e-32 +9.577000000000000326e-09 8.257509062831760177e-32 +9.577499999999999238e-09 9.778860615811437566e-32 +9.577999999999999805e-09 1.157818791423087529e-31 +9.578500000000000372e-09 1.370585310873174507e-31 +9.578999999999999285e-09 1.622126402716752537e-31 +9.579499999999999852e-09 1.919448457043008802e-31 +9.580000000000000419e-09 2.270812922026584755e-31 +9.580499999999999331e-09 2.685959132052947023e-31 +9.580999999999999898e-09 3.176366339157297125e-31 +9.581500000000000465e-09 3.755561781005314582e-31 +9.581999999999999378e-09 4.439482798413219996e-31 +9.582499999999999945e-09 5.246902396794960911e-31 +9.583000000000000512e-09 6.199929263143250488e-31 +9.583499999999999424e-09 7.324595143144415878e-31 +9.583999999999999991e-09 8.651544698097015058e-31 +9.584500000000000558e-09 1.021684555288570187e-30 +9.584999999999999471e-09 1.206293927780857033e-30 +9.585500000000000038e-09 1.423975759214436510e-30 +9.586000000000000605e-09 1.680603222233477992e-30 +9.586499999999999517e-09 1.983083169326214851e-30 +9.587000000000000084e-09 2.339536399387355367e-30 +9.587499999999998997e-09 2.759509067520943875e-30 +9.587999999999999564e-09 3.254220566928206205e-30 +9.588500000000000131e-09 3.836854114494851063e-30 +9.588999999999999044e-09 4.522897326013647491e-30 +9.589499999999999611e-09 5.330541297743870305e-30 +9.590000000000000177e-09 6.281148147606021423e-30 +9.590499999999999090e-09 7.399798645859987860e-30 +9.590999999999999657e-09 8.715933521045093137e-30 +9.591500000000000224e-09 1.026410430851257326e-29 +9.591999999999999137e-09 1.208485226982153223e-29 +9.592499999999999704e-09 1.422573701362256916e-29 +9.593000000000000271e-09 1.674254006517398131e-29 +9.593499999999999183e-09 1.970067284680895272e-29 +9.593999999999999750e-09 2.317682344294064725e-29 +9.594500000000000317e-09 2.726088224473186033e-29 +9.594999999999999230e-09 3.205819323393998925e-29 +9.595499999999999797e-09 3.769218542537323596e-29 +9.596000000000000364e-09 4.430744802176217025e-29 +9.596499999999999276e-09 5.207332335124256683e-29 +9.596999999999999843e-09 6.118810389487926771e-29 +9.597500000000000410e-09 7.188393394953603788e-29 +9.597999999999999323e-09 8.443253303422002733e-29 +9.598499999999999890e-09 9.915187740869450740e-29 +9.599000000000000457e-09 1.164139984682809853e-28 +9.599499999999999369e-09 1.366540828141275004e-28 +9.599999999999999936e-09 1.603810890548523805e-28 +9.600500000000000503e-09 1.881901315532697187e-28 +9.600999999999999416e-09 2.207769221784556105e-28 +9.601499999999999983e-09 2.589546085615763149e-28 +9.602000000000000550e-09 3.036734024414375924e-28 +9.602499999999999462e-09 3.560434556450230647e-28 +9.603000000000000029e-09 4.173615154816464767e-28 +9.603500000000000596e-09 4.891419774765576848e-28 +9.603999999999999509e-09 5.731530533272825265e-28 +9.604500000000000076e-09 6.714588879042599954e-28 +9.604999999999998988e-09 7.864685935763457246e-28 +9.605499999999999555e-09 9.209933260583438387e-28 +9.606000000000000122e-09 1.078312706690168710e-27 +9.606499999999999035e-09 1.262252105538237531e-27 +9.606999999999999602e-09 1.477272542409297878e-27 +9.607500000000000169e-09 1.728575244037252014e-27 +9.607999999999999081e-09 2.022223221387005130e-27 +9.608499999999999648e-09 2.365282608120995864e-27 +9.609000000000000215e-09 2.765986937863242579e-27 +9.609499999999999128e-09 3.233928043278543850e-27 +9.609999999999999695e-09 3.780277844775507358e-27 +9.610500000000000262e-09 4.418045973246184011e-27 +9.610999999999999174e-09 5.162378953967601413e-27 +9.611499999999999741e-09 6.030907583897038743e-27 +9.612000000000000308e-09 7.044150181127108132e-27 +9.612499999999999221e-09 8.225980595141390411e-27 +9.612999999999999788e-09 9.604171264665948248e-27 +9.613500000000000355e-09 1.121102322549209890e-26 +9.613999999999999267e-09 1.308409683717251480e-26 +9.614499999999999834e-09 1.526705915308800243e-26 +9.615000000000000401e-09 1.781066634757219525e-26 +9.615499999999999314e-09 2.077390248776556595e-26 +9.615999999999999881e-09 2.422529925478270879e-26 +9.616500000000000448e-09 2.824446504651950964e-26 +9.616999999999999360e-09 3.292385631104122711e-26 +9.617499999999999927e-09 3.837082905344233431e-26 +9.618000000000000494e-09 4.471001433373492059e-26 +9.618499999999999407e-09 5.208606834735984838e-26 +9.618999999999999974e-09 6.066685548774325880e-26 +9.619500000000000541e-09 7.064713178894994041e-26 +9.619999999999999454e-09 8.225280651604815226e-26 +9.620500000000000020e-09 9.574587161503737445e-26 +9.621000000000000587e-09 1.114301024911767407e-25 +9.621499999999999500e-09 1.296576494271180533e-25 +9.622000000000000067e-09 1.508366571886938460e-25 +9.622499999999998980e-09 1.754400713565912298e-25 +9.622999999999999547e-09 2.040158140798654145e-25 +9.623500000000000114e-09 2.371985397338457844e-25 +9.623999999999999026e-09 2.757232129346467161e-25 +9.624499999999999593e-09 3.204407881206298311e-25 +9.625000000000000160e-09 3.723363121750457347e-25 +9.625499999999999073e-09 4.325498201511622946e-25 +9.625999999999999640e-09 5.024004499923853541e-25 +9.626500000000000207e-09 5.834142662912682332e-25 +9.626999999999999119e-09 6.773563568323497184e-25 +9.627499999999999686e-09 7.862678502983327538e-25 +9.628000000000000253e-09 9.125086007021622856e-25 +9.628499999999999166e-09 1.058806395685879341e-24 +9.628999999999999733e-09 1.228313673872896392e-24 +9.629500000000000300e-09 1.424672883395988279e-24 +9.629999999999999212e-09 1.652091782313790637e-24 +9.630499999999999779e-09 1.915430174973490039e-24 +9.631000000000000346e-09 2.220299800101399873e-24 +9.631499999999999259e-09 2.573179340637516085e-24 +9.631999999999999826e-09 2.981546816703349185e-24 +9.632500000000000393e-09 3.454031957014062159e-24 +9.632999999999999305e-09 4.000591526681442513e-24 +9.633499999999999872e-09 4.632711027594787191e-24 +9.634000000000000439e-09 5.363636689476310296e-24 +9.634499999999999352e-09 6.208642244461790745e-24 +9.634999999999999919e-09 7.185335635901636878e-24 +9.635500000000000486e-09 8.314011565004371881e-24 +9.635999999999999398e-09 9.618056640582189898e-24 +9.636499999999999965e-09 1.112441488271523142e-23 +9.637000000000000532e-09 1.286412245840928422e-23 +9.637499999999999445e-09 1.487292181650943157e-23 +9.638000000000000012e-09 1.719196686274127838e-23 +9.638500000000000579e-09 1.986863250014082750e-23 +9.638999999999999491e-09 2.295744378521746553e-23 +9.639500000000000058e-09 2.652114214921895218e-23 +9.640000000000000625e-09 3.063190864577821561e-23 +9.640499999999999538e-09 3.537276705520993192e-23 +9.641000000000000105e-09 4.083919295078934062e-23 +9.641499999999999017e-09 4.714095857094749966e-23 +9.641999999999999584e-09 5.440424760874945780e-23 +9.642500000000000151e-09 6.277407889747136716e-23 +9.642999999999999064e-09 7.241708352567323565e-23 +9.643499999999999631e-09 8.352468624845805787e-23 +9.644000000000000198e-09 9.631674928342261764e-23 +9.644499999999999110e-09 1.110457448139175052e-22 +9.644999999999999677e-09 1.280015319051455340e-22 +9.645500000000000244e-09 1.475168242308274375e-22 +9.645999999999999157e-09 1.699734471910090419e-22 +9.646499999999999724e-09 1.958094968750224536e-22 +9.647000000000000291e-09 2.255275291224424126e-22 +9.647499999999999203e-09 2.597039249246126919e-22 +9.647999999999999770e-09 2.989995988816899458e-22 +9.648500000000000337e-09 3.441722407284659866e-22 +9.648999999999999250e-09 3.960903064540064523e-22 +9.649499999999999817e-09 4.557490056904986577e-22 +9.650000000000000384e-09 5.242885663363762003e-22 +9.650499999999999296e-09 6.030150963721536946e-22 +9.650999999999999863e-09 6.934244071430042189e-22 +9.651500000000000430e-09 7.972292127481905477e-22 +9.651999999999999343e-09 9.163901774153624819e-22 +9.652499999999999910e-09 1.053151347743929393e-21 +9.653000000000000477e-09 1.210080580535357138e-21 +9.653499999999999390e-09 1.390115660779432653e-21 +9.653999999999999956e-09 1.596616899534174950e-21 +9.654500000000000523e-09 1.833427109456952838e-21 +9.654999999999999436e-09 2.104939978339301904e-21 +9.655500000000000003e-09 2.416178000047245496e-21 +9.656000000000000570e-09 2.772881279988888565e-21 +9.656499999999999483e-09 3.181608711116333599e-21 +9.657000000000000050e-09 3.649853219225293456e-21 +9.657500000000000616e-09 4.186173006146475542e-21 +9.657999999999999529e-09 4.800340979923088491e-21 +9.658500000000000096e-09 5.503514856132821543e-21 +9.658999999999999009e-09 6.308430748751841908e-21 +9.659499999999999576e-09 7.229623447576929645e-21 +9.660000000000000143e-09 8.283677007682800444e-21 +9.660499999999999055e-09 9.489509761662182839e-21 +9.660999999999999622e-09 1.086869841436494880e-20 +9.661500000000000189e-09 1.244584650104240359e-20 +9.661999999999999102e-09 1.424900319264565837e-20 +9.662499999999999669e-09 1.631013922669953760e-20 +9.663000000000000236e-09 1.866568764075611986e-20 +9.663499999999999148e-09 2.135715800148208561e-20 +9.663999999999999715e-09 2.443183397042962047e-20 +9.664500000000000282e-09 2.794356534481219380e-20 +9.664999999999999195e-09 3.195366717747502409e-20 +9.665499999999999762e-09 3.653194023535604834e-20 +9.666000000000000329e-09 4.175782892483163602e-20 +9.666499999999999241e-09 4.772173492291571904e-20 +9.666999999999999808e-09 5.452650713474924598e-20 +9.667500000000000375e-09 6.228913128535930372e-20 +9.667999999999999288e-09 7.114264548644052318e-20 +9.668499999999999855e-09 8.123831153860300075e-20 +9.669000000000000422e-09 9.274807558615279036e-20 +9.669499999999999334e-09 1.058673560906270679e-19 +9.669999999999999901e-09 1.208182019899884907e-19 +9.670500000000000468e-09 1.378528694334742526e-19 +9.670999999999999381e-09 1.572578717065280169e-19 +9.671499999999999948e-09 1.793585639690637724e-19 +9.672000000000000515e-09 2.045243323241720478e-19 +9.672499999999999427e-09 2.331744656245644697e-19 +9.672999999999999994e-09 2.657847984278733619e-19 +9.673500000000000561e-09 3.028952247712421752e-19 +9.673999999999999474e-09 3.451181951078514884e-19 +9.674500000000000041e-09 3.931483229976377084e-19 +9.675000000000000608e-09 4.477732441718778163e-19 +9.675499999999999520e-09 5.098858886177592736e-19 +9.676000000000000087e-09 5.804983465856736741e-19 +9.676499999999999000e-09 6.607575321900370274e-19 +9.676999999999999567e-09 7.519628738680529193e-19 +9.677500000000000134e-09 8.555862896902680932e-19 +9.677999999999999046e-09 9.732947378115334798e-19 +9.678499999999999613e-09 1.106975668591352106e-18 +9.679000000000000180e-09 1.258765745603582610e-18 +9.679499999999999093e-09 1.431083248439778468e-18 +9.679999999999999660e-09 1.626664621453023405e-18 +9.680500000000000227e-09 1.848605690081435749e-18 +9.680999999999999139e-09 2.100408130897251503e-18 +9.681499999999999706e-09 2.386031853830330100e-18 +9.682000000000000273e-09 2.709954036083132154e-18 +9.682499999999999186e-09 3.077235638151727449e-18 +9.682999999999999753e-09 3.493596334179655673e-18 +9.683500000000000320e-09 3.965498902951005662e-18 +9.683999999999999232e-09 4.500244253652015102e-18 +9.684499999999999799e-09 5.106078403606888725e-18 +9.685000000000000366e-09 5.792312885395118338e-18 +9.685499999999999279e-09 6.569460240145457253e-18 +9.685999999999999846e-09 7.449386454450133889e-18 +9.686500000000000413e-09 8.445482422860412397e-18 +9.686999999999999326e-09 9.572856769159992377e-18 +9.687499999999999892e-09 1.084855264042853043e-17 +9.688000000000000459e-09 1.229179140191621963e-17 +9.688499999999999372e-09 1.392424651189035699e-17 +9.688999999999999939e-09 1.577035124782550490e-17 +9.689500000000000506e-09 1.785764439357704967e-17 +9.689999999999999419e-09 2.021715848694944265e-17 +9.690499999999999986e-09 2.288385577373520381e-17 +9.691000000000000552e-09 2.589711762475394622e-17 +9.691499999999999465e-09 2.930129385414669033e-17 +9.692000000000000032e-09 3.314631913756944918e-17 +9.692500000000000599e-09 3.748840457745824006e-17 +9.692999999999999512e-09 4.239081340951059732e-17 +9.693500000000000079e-09 4.792473090001544011e-17 +9.693999999999998991e-09 5.417023966067471776e-17 +9.694499999999999558e-09 6.121741292044660136e-17 +9.695000000000000125e-09 6.916753975541345151e-17 +9.695499999999999038e-09 7.813449790823444937e-17 +9.695999999999999605e-09 8.824629164341260650e-17 +9.696500000000000172e-09 9.964677410608481510e-17 +9.696999999999999084e-09 1.124975759040259905e-16 +9.697499999999999651e-09 1.269802641377705154e-16 +9.698000000000000218e-09 1.432987588924867270e-16 +9.698499999999999131e-09 1.616820373097271434e-16 +9.698999999999999698e-09 1.823871588084897322e-16 +9.699500000000000265e-09 2.057026488640746719e-16 +9.699999999999999177e-09 2.319522830243009050e-16 +9.700499999999999744e-09 2.614993175872842385e-16 +9.701000000000000311e-09 2.947512186391334239e-16 +9.701499999999999224e-09 3.321649470136766239e-16 +9.701999999999999791e-09 3.742528632453776542e-16 +9.702500000000000358e-09 4.215893238174417272e-16 +9.702999999999999270e-09 4.748180480403972799e-16 +9.703499999999999837e-09 5.346603438079039995e-16 +9.704000000000000404e-09 6.019242903687531718e-16 +9.704499999999999317e-09 6.775149872372765098e-16 +9.704999999999999884e-09 7.624459905389180449e-16 +9.705500000000000451e-09 8.578520715931100692e-16 +9.705999999999999363e-09 9.650034475204211166e-16 +9.706499999999999930e-09 1.085321650258734891e-15 +9.707000000000000497e-09 1.220397218773046156e-15 +9.707499999999999410e-09 1.372009419644879757e-15 +9.707999999999999977e-09 1.542148223808066619e-15 +9.708500000000000544e-09 1.733038792213426037e-15 +9.708999999999999456e-09 1.947168750921912822e-15 +9.709500000000000023e-09 2.187318566783000846e-15 +9.710000000000000590e-09 2.456595368792370082e-15 +9.710499999999999503e-09 2.758470597802212933e-15 +9.711000000000000070e-09 3.096821908789685572e-15 +9.711499999999998982e-09 3.475979795833952362e-15 +9.711999999999999549e-09 3.900779460804076011e-15 +9.712500000000000116e-09 4.376618502870756326e-15 +9.712999999999999029e-09 4.909521068100104986e-15 +9.713499999999999596e-09 5.506209166947781334e-15 +9.714000000000000163e-09 6.174181943241648882e-15 +9.714499999999999075e-09 6.921803761986250683e-15 +9.714999999999999642e-09 7.758402075695063401e-15 +9.715500000000000209e-09 8.694376130955622740e-15 +9.715999999999999122e-09 9.741317689598151805e-15 +9.716499999999999689e-09 1.091214506301312969e-14 +9.717000000000000256e-09 1.222125189518547697e-14 +9.717499999999999169e-09 1.368467228126181571e-14 +9.717999999999999735e-09 1.532026397503768098e-14 +9.718500000000000302e-09 1.714791162243623787e-14 +9.718999999999999215e-09 1.918975216065593023e-14 +9.719499999999999782e-09 2.147042474563866243e-14 +9.720000000000000349e-09 2.401734781621046295e-14 +9.720499999999999262e-09 2.686102617408295320e-14 +9.720999999999999829e-09 3.003539125673397435e-14 +9.721500000000000395e-09 3.357817810814113014e-14 +9.721999999999999308e-09 3.753134291361196537e-14 +9.722499999999999875e-09 4.194152536191910828e-14 +9.723000000000000442e-09 4.686056053475744998e-14 +9.723499999999999355e-09 5.234604550441129233e-14 +9.723999999999999922e-09 5.846196634847012608e-14 +9.724500000000000489e-09 6.527939187099235977e-14 +9.724999999999999401e-09 7.287724095818423698e-14 +9.725499999999999968e-09 8.134313119732927184e-14 +9.726000000000000535e-09 9.077431715764875268e-14 +9.726499999999999448e-09 1.012787275781970589e-13 +9.727000000000000015e-09 1.129761116357816654e-13 +9.727500000000000582e-09 1.259993054847848752e-13 +9.727999999999999494e-09 1.404956313801300501e-13 +9.728500000000000061e-09 1.566284429207297722e-13 +9.729000000000000628e-09 1.745788312961837858e-13 +9.729499999999999541e-09 1.945475088965788479e-13 +9.730000000000000108e-09 2.167568882618915537e-13 +9.730499999999999020e-09 2.414533761201712021e-13 +9.730999999999999587e-09 2.689099042092425953e-13 +9.731500000000000154e-09 2.994287207012547797e-13 +9.731999999999999067e-09 3.333444683847861039e-13 +9.732499999999999634e-09 3.710275783094270471e-13 +9.733000000000000201e-09 4.128880103915735018e-13 +9.733499999999999113e-09 4.593793755416916744e-13 +9.733999999999999680e-09 5.110034772170404670e-13 +9.734500000000000247e-09 5.683153139634405948e-13 +9.734999999999999160e-09 6.319285885173953047e-13 +9.735499999999999727e-09 7.025217734135527409e-13 +9.736000000000000294e-09 7.808447878255682421e-13 +9.736499999999999206e-09 8.677263456036973023e-13 +9.736999999999999773e-09 9.640820401800211927e-13 +9.737500000000000340e-09 1.070923238250838159e-12 +9.737999999999999253e-09 1.189366860968297600e-12 +9.738499999999999820e-09 1.320646138806446579e-12 +9.739000000000000387e-09 1.466122434384738061e-12 +9.739499999999999299e-09 1.627298236404703348e-12 +9.739999999999999866e-09 1.805831437513095356e-12 +9.740500000000000433e-09 2.003551019445590902e-12 +9.740999999999999346e-09 2.222474280317461465e-12 +9.741499999999999913e-09 2.464825751448427261e-12 +9.742000000000000480e-09 2.733057964764336754e-12 +9.742499999999999392e-09 3.029874246723145332e-12 +9.742999999999999959e-09 3.358253730908725885e-12 +9.743500000000000526e-09 3.721478799087183703e-12 +9.743999999999999439e-09 4.123165179774282256e-12 +9.744500000000000006e-09 4.567294954265248634e-12 +9.745000000000000573e-09 5.058252742844181035e-12 +9.745499999999999485e-09 5.600865368704768504e-12 +9.746000000000000052e-09 6.200445324032573931e-12 +9.746500000000000619e-09 6.862838391993448798e-12 +9.746999999999999532e-09 7.594475810283768038e-12 +9.747500000000000099e-09 8.402431396484148953e-12 +9.747999999999999011e-09 9.294484093064739765e-12 +9.748499999999999578e-09 1.027918643086147806e-11 +9.749000000000000145e-09 1.136593945408858779e-11 +9.749499999999999058e-09 1.256507469830222005e-11 +9.749999999999999625e-09 1.388794386496244247e-11 +9.750500000000000192e-09 1.534701689299837252e-11 +9.750999999999999105e-09 1.695598918950117514e-11 +9.751499999999999671e-09 1.872989884839207492e-11 +9.752000000000000238e-09 2.068525475834285728e-11 +9.752499999999999151e-09 2.284017657993231781e-11 +9.752999999999999718e-09 2.521454765703745806e-11 +9.753500000000000285e-09 2.783018201967027500e-11 +9.753999999999999198e-09 3.071100673561744007e-11 +9.754499999999999765e-09 3.388326097630515178e-11 +9.755000000000000331e-09 3.737571327944362632e-11 +9.755499999999999244e-09 4.121989861813532796e-11 +9.755999999999999811e-09 4.545037702317540350e-11 +9.756500000000000378e-09 5.010501565372099323e-11 +9.756999999999999291e-09 5.522529637250558122e-11 +9.757499999999999858e-09 6.085665105517943118e-11 +9.758000000000000425e-09 6.704882705103031513e-11 +9.758499999999999337e-09 7.385628541579321595e-11 +9.758999999999999904e-09 8.133863475611291223e-11 +9.759500000000000471e-09 8.956110376197838092e-11 +9.759999999999999384e-09 9.859505575989975382e-11 +9.760499999999999951e-09 1.085185488952126563e-10 +9.761000000000000518e-09 1.194169458498374518e-10 +9.761499999999999430e-09 1.313835773243125280e-10 +9.761999999999999997e-09 1.445204638592281466e-10 +9.762500000000000564e-09 1.589391009451744049e-10 +9.762999999999999477e-09 1.747613127749932261e-10 +9.763500000000000044e-09 1.921201804261050370e-10 +9.764000000000000611e-09 2.111610507291178820e-10 +9.764499999999999523e-09 2.320426325854359427e-10 +9.765000000000000090e-09 2.549381880391924005e-10 +9.765499999999999003e-09 2.800368259940313358e-10 +9.765999999999999570e-09 3.075449070984538031e-10 +9.766500000000000137e-09 3.376875689977527940e-10 +9.766999999999999049e-09 3.707103818849249914e-10 +9.767499999999999616e-09 4.068811450655350675e-10 +9.768000000000000183e-09 4.464918360953908569e-10 +9.768499999999999096e-09 4.898607249607553728e-10 +9.768999999999999663e-09 5.373346667437661551e-10 +9.769500000000000230e-09 5.892915872631550589e-10 +9.769999999999999142e-09 6.461431773104845916e-10 +9.770499999999999709e-09 7.083378123077800607e-10 +9.771000000000000276e-09 7.763637155095000376e-10 +9.771499999999999189e-09 8.507523842704991390e-10 +9.771999999999999756e-09 9.320823003919184432e-10 +9.772500000000000323e-09 1.020982947159356139e-09 +9.772999999999999235e-09 1.118139157414239618e-09 +9.773499999999999802e-09 1.224295818837288453e-09 +9.774000000000000369e-09 1.340262964597061873e-09 +9.774499999999999282e-09 1.466921279643360098e-09 +9.774999999999999849e-09 1.605228055185508868e-09 +9.775500000000000416e-09 1.756223626322250151e-09 +9.775999999999999328e-09 1.921038330402449860e-09 +9.776499999999999895e-09 2.100900026469052979e-09 +9.777000000000000462e-09 2.297142219113707566e-09 +9.777499999999999375e-09 2.511212833270920760e-09 +9.777999999999999942e-09 2.744683689874297679e-09 +9.778500000000000509e-09 2.999260735935266967e-09 +9.778999999999999421e-09 3.276795086518363655e-09 +9.779499999999999988e-09 3.579294940228659228e-09 +9.780000000000000555e-09 3.908938434265099765e-09 +9.780499999999999468e-09 4.268087509864055518e-09 +9.781000000000000035e-09 4.659302864000113249e-09 +9.781500000000000602e-09 5.085360068610329959e-09 +9.781999999999999514e-09 5.549266944409133045e-09 +9.782500000000000081e-09 6.054282282484761356e-09 +9.782999999999998994e-09 6.603936013416456166e-09 +9.783499999999999561e-09 7.202050930704775841e-09 +9.784000000000000128e-09 7.852766082667819061e-09 +9.784499999999999041e-09 8.560561954989392836e-09 +9.784999999999999608e-09 9.330287574504044113e-09 +9.785500000000000174e-09 1.016718967379719318e-08 +9.785999999999999087e-09 1.107694406584855560e-08 +9.786499999999999654e-09 1.206568938808827714e-08 +9.787000000000000221e-09 1.314006338606682176e-08 +9.787499999999999134e-09 1.430724191856509577e-08 +9.787999999999999701e-09 1.557498087816075533e-08 +9.788500000000000268e-09 1.695166123428515050e-08 +9.788999999999999180e-09 1.844633741976604344e-08 +9.789499999999999747e-09 2.006878929647019525e-08 +9.790000000000000314e-09 2.182957795125524449e-08 +9.790499999999999227e-09 2.374010559016947796e-08 +9.790999999999999794e-09 2.581267981631150017e-08 +9.791500000000000361e-09 2.806058259540371292e-08 +9.791999999999999273e-09 3.049814423311235342e-08 +9.792499999999999840e-09 3.314082270898633813e-08 +9.793000000000000407e-09 3.600528873409608195e-08 +9.793499999999999320e-09 3.910951692325803316e-08 +9.793999999999999887e-09 4.247288349750460799e-08 +9.794500000000000454e-09 4.611627095884718667e-08 +9.794999999999999366e-09 5.006218020766354689e-08 +9.795499999999999933e-09 5.433485060240378539e-08 +9.796000000000000500e-09 5.896038849257469708e-08 +9.796499999999999413e-09 6.396690478947037701e-08 +9.796999999999999980e-09 6.938466217381971089e-08 +9.797500000000000547e-09 7.524623257645257899e-08 +9.797999999999999459e-09 8.158666560767664691e-08 +9.798500000000000026e-09 8.844366865193829145e-08 +9.799000000000000593e-09 9.585779938784825628e-08 +9.799499999999999506e-09 1.038726715402778652e-07 +9.800000000000000073e-09 1.125351747192571180e-07 +9.800499999999998985e-09 1.218957092514677485e-07 +9.800999999999999552e-09 1.320084369651306151e-07 +9.801500000000000119e-09 1.429315489444298782e-07 +9.801999999999999032e-09 1.547275513311955668e-07 +9.802499999999999599e-09 1.674635703137329818e-07 +9.803000000000000166e-09 1.812116775090246494e-07 +9.803499999999999078e-09 1.960492370156419955e-07 +9.803999999999999645e-09 2.120592754873629302e-07 +9.804500000000000212e-09 2.293308766547087473e-07 +9.804999999999999125e-09 2.479596018044608993e-07 +9.805499999999999692e-09 2.680479378115726034e-07 +9.806000000000000259e-09 2.897057744075198207e-07 +9.806499999999999171e-09 3.130509124653610529e-07 +9.806999999999999738e-09 3.382096051793598673e-07 +9.807500000000000305e-09 3.653171341207577000e-07 +9.807999999999999218e-09 3.945184222626258557e-07 +9.808499999999999785e-09 4.259686861793347619e-07 +9.809000000000000352e-09 4.598341297456770955e-07 +9.809499999999999264e-09 4.962926817892865191e-07 +9.809999999999999831e-09 5.355347802792804808e-07 +9.810500000000000398e-09 5.777642057714441113e-07 +9.810999999999999311e-09 6.231989669781411305e-07 +9.811499999999999878e-09 6.720722414791795466e-07 +9.812000000000000445e-09 7.246333747471613648e-07 +9.812499999999999357e-09 7.811489408303505239e-07 +9.812999999999999924e-09 8.419038682049428943e-07 +9.813500000000000491e-09 9.072026344880996619e-07 +9.813999999999999404e-09 9.773705338967206385e-07 +9.814499999999999971e-09 1.052755021528771226e-06 +9.815000000000000538e-09 1.133727138748022653e-06 +9.815499999999999450e-09 1.220683024173394692e-06 +9.816000000000000017e-09 1.314045514991269288e-06 +9.816500000000000584e-09 1.414265843540035417e-06 +9.816999999999999497e-09 1.521825434366217788e-06 +9.817500000000000064e-09 1.637237807196163514e-06 +9.817999999999998977e-09 1.761050591527201125e-06 +9.818499999999999544e-09 1.893847658828352968e-06 +9.819000000000000110e-09 2.036251378603093290e-06 +9.819499999999999023e-09 2.188925004882473212e-06 +9.819999999999999590e-09 2.352575200009566356e-06 +9.820500000000000157e-09 2.527954702891996406e-06 +9.820999999999999070e-09 2.715865149242786971e-06 +9.821499999999999637e-09 2.917160051659044391e-06 +9.822000000000000204e-09 3.132747947739331075e-06 +9.822499999999999116e-09 3.363595724825114722e-06 +9.822999999999999683e-09 3.610732130316313745e-06 +9.823500000000000250e-09 3.875251476900745566e-06 +9.823999999999999163e-09 4.158317552466055946e-06 +9.824499999999999730e-09 4.461167744864193457e-06 +9.825000000000000297e-09 4.785117392129077364e-06 +9.825499999999999209e-09 5.131564369223895319e-06 +9.825999999999999776e-09 5.501993922834358564e-06 +9.826500000000000343e-09 5.897983766197328911e-06 +9.826999999999999256e-09 6.321209446479972382e-06 +9.827499999999999823e-09 6.773449997703400104e-06 +9.828000000000000390e-09 7.256593892722303515e-06 +9.828499999999999302e-09 7.772645308349754675e-06 +9.828999999999999869e-09 8.323730718234701256e-06 +9.829500000000000436e-09 8.912105828662177478e-06 +9.829999999999999349e-09 9.540162873078127827e-06 +9.830499999999999916e-09 1.021043828169873691e-05 +9.831000000000000483e-09 1.092562074316975940e-05 +9.831499999999999395e-09 1.168855967593181389e-05 +9.831999999999999962e-09 1.250227412754098934e-05 +9.832500000000000529e-09 1.336996212084439668e-05 +9.832999999999999442e-09 1.429501046665842326e-05 +9.833500000000000009e-09 1.528100506322462143e-05 +9.834000000000000576e-09 1.633174170341076612e-05 +9.834499999999999488e-09 1.745123741143119161e-05 +9.835000000000000055e-09 1.864374233151648875e-05 +9.835500000000000622e-09 1.991375219169474122e-05 +9.835999999999999535e-09 2.126602136671146954e-05 +9.836500000000000102e-09 2.270557656479319980e-05 +9.836999999999999014e-09 2.423773116372210205e-05 +9.837499999999999581e-09 2.586810022265200604e-05 +9.838000000000000148e-09 2.760261619664254023e-05 +9.838499999999999061e-09 2.944754538196958071e-05 +9.838999999999999628e-09 3.140950512093114975e-05 +9.839500000000000195e-09 3.349548179568049005e-05 +9.839999999999999107e-09 3.571284964163019723e-05 +9.840499999999999674e-09 3.806939041166282123e-05 +9.841000000000000241e-09 4.057331392320209589e-05 +9.841499999999999154e-09 4.323327952126278906e-05 +9.841999999999999721e-09 4.605841849126317359e-05 +9.842500000000000288e-09 4.905835745620824569e-05 +9.842999999999999200e-09 5.224324279395350197e-05 +9.843499999999999767e-09 5.562376611088893334e-05 +9.844000000000000334e-09 5.921119080918849011e-05 +9.844499999999999247e-09 6.301737978591194424e-05 +9.844999999999999814e-09 6.705482430280778640e-05 +9.845500000000000381e-09 7.133667406644497754e-05 +9.845999999999999293e-09 7.587676855946017690e-05 +9.846499999999999860e-09 8.068966966419318385e-05 +9.847000000000000427e-09 8.579069562069122025e-05 +9.847499999999999340e-09 9.119595636225648805e-05 +9.847999999999999907e-09 9.692239027205668770e-05 +9.848500000000000474e-09 1.029878024049675657e-04 +9.848999999999999386e-09 1.094109042199984755e-04 +9.849499999999999953e-09 1.162113548688487052e-04 +9.850000000000000520e-09 1.234098040866841420e-04 +9.850499999999999433e-09 1.310279367323924501e-04 +9.851000000000000000e-09 1.390885190255798057e-04 +9.851500000000000567e-09 1.476154465279699293e-04 +9.851999999999999480e-09 1.566337939180125925e-04 +9.852500000000000046e-09 1.661698666072744133e-04 +9.853000000000000613e-09 1.762512542473930401e-04 +9.853499999999999526e-09 1.869068861775051318e-04 +9.854000000000000093e-09 1.981670888615037827e-04 +9.854499999999999006e-09 2.100636453644528481e-04 +9.854999999999999573e-09 2.226298569188727599e-04 +9.855500000000000140e-09 2.359006066295753906e-04 +9.855999999999999052e-09 2.499124253676891804e-04 +9.856499999999999619e-09 2.647035599030736421e-04 +9.857000000000000186e-09 2.803140433239075988e-04 +9.857499999999999099e-09 2.967857677931738051e-04 +9.857999999999999666e-09 3.141625596901192205e-04 +9.858500000000000233e-09 3.324902571839757860e-04 +9.858999999999999145e-09 3.518167902880936135e-04 +9.859499999999999712e-09 3.721922634404158342e-04 +9.860000000000000279e-09 3.936690406550817601e-04 +9.860499999999999192e-09 4.163018332906698077e-04 +9.860999999999999759e-09 4.401477904777702081e-04 +9.861500000000000326e-09 4.652665922469652153e-04 +9.861999999999999238e-09 4.917205453989294305e-04 +9.862499999999999805e-09 5.195746821548158931e-04 +9.863000000000000372e-09 5.488968616229696930e-04 +9.863499999999999285e-09 5.797578741185638535e-04 +9.863999999999999852e-09 6.122315483683398590e-04 +9.864500000000000419e-09 6.463948616300138703e-04 +9.864999999999999331e-09 6.823280527563123973e-04 +9.865499999999999898e-09 7.201147382282747315e-04 +9.866000000000000465e-09 7.598420311792607185e-04 +9.866499999999999378e-09 8.016006634313571286e-04 +9.866999999999999945e-09 8.454851105595587819e-04 +9.867500000000000512e-09 8.915937199952480869e-04 +9.867999999999999424e-09 9.400288421806101682e-04 +9.868499999999999991e-09 9.908969647782622792e-04 +9.869000000000000558e-09 1.044308849935719112e-03 +9.869499999999999471e-09 1.100379674604438137e-03 +9.870000000000000038e-09 1.159229173904571851e-03 +9.870500000000000605e-09 1.220981787521089679e-03 +9.870999999999999517e-09 1.285766809117149401e-03 +9.871500000000000084e-09 1.353718538740503879e-03 +9.871999999999998997e-09 1.424976438192288985e-03 +9.872499999999999564e-09 1.499685289329749562e-03 +9.873000000000000131e-09 1.577995355256064372e-03 +9.873499999999999043e-09 1.660062544356743618e-03 +9.873999999999999610e-09 1.746048577127652136e-03 +9.874500000000000177e-09 1.836121155732417650e-03 +9.874999999999999090e-09 1.930454136227493112e-03 +9.875499999999999657e-09 2.029227703378809824e-03 +9.876000000000000224e-09 2.132628547985485241e-03 +9.876499999999999136e-09 2.240850046627007337e-03 +9.876999999999999703e-09 2.354092443734111858e-03 +9.877500000000000270e-09 2.472563035874209957e-03 +9.877999999999999183e-09 2.596476358143737229e-03 +9.878499999999999750e-09 2.726054372541577772e-03 +9.879000000000000317e-09 2.861526658187613873e-03 +9.879499999999999229e-09 3.003130603252435974e-03 +9.879999999999999796e-09 3.151111598444318249e-03 +9.880500000000000363e-09 3.305723231888189201e-03 +9.880999999999999276e-09 3.467227485234689044e-03 +9.881499999999999843e-09 3.635894930814855507e-03 +9.882000000000000410e-09 3.812004929644235637e-03 +9.882499999999999323e-09 3.995845830084302115e-03 +9.882999999999999889e-09 4.187715166944778154e-03 +9.883500000000000456e-09 4.387919860797358414e-03 +9.883999999999999369e-09 4.596776417277514959e-03 +9.884499999999999936e-09 4.814611126123849102e-03 +9.885000000000000503e-09 5.041760259691117733e-03 +9.885499999999999416e-09 5.278570270680849920e-03 +9.885999999999999983e-09 5.525397988803815337e-03 +9.886500000000000549e-09 5.782610816074825431e-03 +9.886999999999999462e-09 6.050586920450102581e-03 +9.887500000000000029e-09 6.329715427485645488e-03 +9.888000000000000596e-09 6.620396609680280833e-03 +9.888499999999999509e-09 6.923042073180113790e-03 +9.889000000000000076e-09 7.238074941486046833e-03 +9.889499999999998988e-09 7.565930035790326656e-03 +9.889999999999999555e-09 7.907054051592985258e-03 +9.890500000000000122e-09 8.261905731180241297e-03 +9.890999999999999035e-09 8.630956031592898828e-03 +9.891499999999999602e-09 9.014688287665315047e-03 +9.892000000000000169e-09 9.413598369701606586e-03 +9.892499999999999081e-09 9.828194835378738572e-03 +9.892999999999999648e-09 1.025899907542319155e-02 +9.893500000000000215e-09 1.070654545259368436e-02 +9.893999999999999128e-09 1.117138143352981033e-02 +9.894499999999999695e-09 1.165406771298087285e-02 +9.895000000000000262e-09 1.215517832991500069e-02 +9.895499999999999174e-09 1.267530077504199805e-02 +9.895999999999999741e-09 1.321503608923433118e-02 +9.896500000000000308e-09 1.377499895231716967e-02 +9.896999999999999221e-09 1.435581776173844477e-02 +9.897499999999999788e-09 1.495813470057697631e-02 +9.898000000000000355e-09 1.558260579433469288e-02 +9.898499999999999267e-09 1.622990095600596733e-02 +9.898999999999999834e-09 1.690070401886061002e-02 +9.899500000000000401e-09 1.759571275636652790e-02 +9.899999999999999314e-09 1.831563888873287763e-02 +9.900499999999999881e-09 1.906120807549438120e-02 +9.901000000000000448e-09 1.983315989354888023e-02 +9.901499999999999360e-09 2.063224780012333504e-02 +9.901999999999999927e-09 2.145923908007993028e-02 +9.902500000000000494e-09 2.231491477696691608e-02 +9.902999999999999407e-09 2.320006960729203288e-02 +9.903499999999999974e-09 2.411551185742863077e-02 +9.904000000000000541e-09 2.506206326255940725e-02 +9.904499999999999453e-09 2.604055886714724474e-02 +9.905000000000000020e-09 2.705184686635003083e-02 +9.905500000000000587e-09 2.809678842779389854e-02 +9.905999999999999500e-09 2.917625749321541354e-02 +9.906500000000000067e-09 3.029114055940603303e-02 +9.906999999999998979e-09 3.144233643788842819e-02 +9.907499999999999546e-09 3.263075599289444462e-02 +9.908000000000000113e-09 3.385732185702289287e-02 +9.908499999999999026e-09 3.512296812417216307e-02 +9.908999999999999593e-09 3.642864001922740264e-02 +9.909500000000000160e-09 3.777529354399183914e-02 +9.909999999999999072e-09 3.916389509898388077e-02 +9.910499999999999639e-09 4.059542108062861449e-02 +9.911000000000000206e-09 4.207085745338230015e-02 +9.911499999999999119e-09 4.359119929647525121e-02 +9.911999999999999686e-09 4.515745032485926624e-02 +9.912500000000000253e-09 4.677062238395914701e-02 +9.912999999999999165e-09 4.843173491799068753e-02 +9.913499999999999732e-09 5.014181441150131202e-02 +9.914000000000000299e-09 5.190189380380569317e-02 +9.914499999999999212e-09 5.371301187616987771e-02 +9.914999999999999779e-09 5.557621261148145558e-02 +9.915500000000000346e-09 5.749254452616511107e-02 +9.915999999999999259e-09 5.946305997429938983e-02 +9.916499999999999825e-09 6.148881442376851608e-02 +9.917000000000000392e-09 6.357086570430527106e-02 +9.917499999999999305e-09 6.571027322749897759e-02 +9.917999999999999872e-09 6.790809717870795181e-02 +9.918500000000000439e-09 7.016539768084426032e-02 +9.918999999999999352e-09 7.248323393023246852e-02 +9.919499999999999919e-09 7.486266330460211726e-02 +9.920000000000000485e-09 7.730474044330111483e-02 +9.920499999999999398e-09 7.981051630007555964e-02 +9.920999999999999965e-09 8.238103716860249726e-02 +9.921500000000000532e-09 8.501734368099686523e-02 +9.921999999999999445e-09 8.772046977978822935e-02 +9.922500000000000012e-09 9.049144166369479936e-02 +9.923000000000000579e-09 9.333127670755467231e-02 +9.923499999999999491e-09 9.624098235707365112e-02 +9.924000000000000058e-09 9.922155499886235741e-02 +9.924500000000000625e-09 1.022739788062724808e-01 +9.924999999999999538e-09 1.053992245618601276e-01 +9.925500000000000105e-09 1.085982484571022533e-01 +9.925999999999999017e-09 1.118719908700202825e-01 +9.926499999999999584e-09 1.152213751217892185e-01 +9.927000000000000151e-09 1.186473062128877154e-01 +9.927499999999999064e-09 1.221506695399819237e-01 +9.927999999999999631e-09 1.257323295944237085e-01 +9.928500000000000198e-09 1.293931286432913053e-01 +9.928999999999999110e-09 1.331338853942735378e-01 +9.929499999999999677e-09 1.369553936454490917e-01 +9.930000000000000244e-09 1.408584209210453075e-01 +9.930499999999999157e-09 1.448437070946586580e-01 +9.930999999999999724e-09 1.489119630011437878e-01 +9.931500000000000291e-09 1.530638690384119316e-01 +9.931999999999999203e-09 1.573000737607951616e-01 +9.932499999999999770e-09 1.616211924653354615e-01 +9.933000000000000337e-09 1.660278057723877931e-01 +9.933499999999999250e-09 1.705204582023628623e-01 +9.933999999999999817e-09 1.750996567501098000e-01 +9.934500000000000384e-09 1.797658694584695072e-01 +9.934999999999999296e-09 1.845195239929805497e-01 +9.935499999999999863e-09 1.893610062193707422e-01 +9.936000000000000430e-09 1.942906587854903722e-01 +9.936499999999999343e-09 1.993087797098139491e-01 +9.936999999999999910e-09 2.044156209782609646e-01 +9.937500000000000477e-09 2.096113871511006699e-01 +9.937999999999999389e-09 2.148962339821966772e-01 +9.938499999999999956e-09 2.202702670524390449e-01 +9.939000000000000523e-09 2.257335404192203632e-01 +9.939499999999999436e-09 2.312860552843199746e-01 +9.940000000000000003e-09 2.369277586821194603e-01 +9.940500000000000570e-09 2.426585421900750161e-01 +9.940999999999999482e-09 2.484782406638957053e-01 +9.941500000000000049e-09 2.543866309994019526e-01 +9.942000000000000616e-09 2.603834309230340094e-01 +9.942499999999999529e-09 2.664682978135158309e-01 +9.943000000000000096e-09 2.726408275566755135e-01 +9.943499999999999008e-09 2.789005534353847238e-01 +9.943999999999999575e-09 2.852469450572971410e-01 +9.944500000000000142e-09 2.916794073219456940e-01 +9.944999999999999055e-09 2.981972794298722307e-01 +9.945499999999999622e-09 3.047998339357455011e-01 +9.946000000000000189e-09 3.114862758474069016e-01 +9.946499999999999102e-09 3.182557417733556937e-01 +9.946999999999999668e-09 3.251072991205883889e-01 +9.947500000000000235e-09 3.320399453446610805e-01 +9.947999999999999148e-09 3.390526072544272629e-01 +9.948499999999999715e-09 3.461441403732716249e-01 +9.949000000000000282e-09 3.533133283586024631e-01 +9.949499999999999195e-09 3.605588824819608851e-01 +9.949999999999999762e-09 3.678794411714357837e-01 +9.950500000000000328e-09 3.752735696180091174e-01 +9.950999999999999241e-09 3.827397594480546061e-01 +9.951499999999999808e-09 3.902764284635151237e-01 +9.952000000000000375e-09 3.978819204512072383e-01 +9.952499999999999288e-09 4.055545050633063697e-01 +9.952999999999999855e-09 4.132923777703386703e-01 +9.953500000000000421e-09 4.210936598879151949e-01 +9.953999999999999334e-09 4.289563986790592143e-01 +9.954499999999999901e-09 4.368785675332172991e-01 +9.955000000000000468e-09 4.448580662229453808e-01 +9.955499999999999381e-09 4.528927212398813351e-01 +9.955999999999999948e-09 4.609802862108294264e-01 +9.956500000000000515e-09 4.691184423946691551e-01 +9.956999999999999427e-09 4.773047992614329327e-01 +9.957499999999999994e-09 4.855368951540759426e-01 +9.958000000000000561e-09 4.938121980333519678e-01 +9.958499999999999474e-09 5.021281063068346873e-01 +9.959000000000000041e-09 5.104819497422865560e-01 +9.959500000000000608e-09 5.188709904654591476e-01 +9.959999999999999520e-09 5.272924240430370002e-01 +9.960500000000000087e-09 5.357433806505828011e-01 +9.960999999999999000e-09 5.442209263251868157e-01 +9.961499999999999567e-09 5.527220643033829983e-01 +9.962000000000000134e-09 5.612437364432336651e-01 +9.962499999999999046e-09 5.697828247309031369e-01 +9.962999999999999613e-09 5.783361528709338728e-01 +9.963500000000000180e-09 5.869004879593374691e-01 +9.963999999999999093e-09 5.954725422392507239e-01 +9.964499999999999660e-09 6.040489749380160145e-01 +9.965000000000000227e-09 6.126263941844164451e-01 +9.965499999999999139e-09 6.212013590054324963e-01 +9.965999999999999706e-09 6.297703814009946166e-01 +9.966500000000000273e-09 6.383299284950761932e-01 +9.966999999999999186e-09 6.468764247621123786e-01 +9.967499999999999753e-09 6.554062543268327490e-01 +9.968000000000000320e-09 6.639157633354754173e-01 +9.968499999999999232e-09 6.724012623969861657e-01 +9.968999999999999799e-09 6.808590290919178667e-01 +9.969500000000000366e-09 6.892853105466290042e-01 +9.969999999999999279e-09 6.976763260710154846e-01 +9.970499999999999846e-09 7.060282698571336280e-01 +9.971000000000000413e-09 7.143373137359608771e-01 +9.971499999999999325e-09 7.225996099901790259e-01 +9.971999999999999892e-09 7.308112942199986861e-01 +9.972500000000000459e-09 7.389684882589483417e-01 +9.972999999999999372e-09 7.470673031371821704e-01 +9.973499999999999939e-09 7.551038420890192615e-01 +9.974000000000000506e-09 7.630742036013408169e-01 +9.974499999999999418e-09 7.709744845001029745e-01 +9.974999999999999985e-09 7.788007830714014368e-01 +9.975500000000000552e-09 7.865492022134602523e-01 +9.975999999999999465e-09 7.942158526165353782e-01 +9.976500000000000032e-09 8.017968559669386153e-01 +9.977000000000000599e-09 8.092883481713378790e-01 +9.977499999999999511e-09 8.166864825981006160e-01 +9.978000000000000078e-09 8.239874333317013244e-01 +9.978499999999998991e-09 8.311873984361534129e-01 +9.978999999999999558e-09 8.382826032242243208e-01 +9.979500000000000125e-09 8.452693035278173728e-01 +9.979999999999999038e-09 8.521437889661953591e-01 +9.980499999999999604e-09 8.589023862078395410e-01 +9.981000000000000171e-09 8.655414622217655340e-01 +9.981499999999999084e-09 8.720574275147046084e-01 +9.981999999999999651e-09 8.784467393499242327e-01 +9.982500000000000218e-09 8.847059049434836675e-01 +9.982999999999999131e-09 8.908314846342957338e-01 +9.983499999999999698e-09 8.968200950237807945e-01 +9.984000000000000264e-09 9.026684120809427281e-01 +9.984499999999999177e-09 9.083731742092563399e-01 +9.984999999999999744e-09 9.139311852712230788e-01 +9.985500000000000311e-09 9.193393175665193207e-01 +9.985999999999999224e-09 9.245945147602004921e-01 +9.986499999999999791e-09 9.296937947569501315e-01 +9.987000000000000358e-09 9.346342525174502480e-01 +9.987499999999999270e-09 9.394130628134669259e-01 +9.987999999999999837e-09 9.440274829178322280e-01 +9.988500000000000404e-09 9.484748552256062615e-01 +9.988999999999999317e-09 9.527526098032035318e-01 +9.989499999999999884e-09 9.568582668619071141e-01 +9.990000000000000451e-09 9.607894391523250643e-01 +9.990499999999999363e-09 9.645438342768092310e-01 +9.990999999999999930e-09 9.681192569165608663e-01 +9.991500000000000497e-09 9.715136109702976475e-01 +9.991999999999999410e-09 9.747249016017889289e-01 +9.992499999999999977e-09 9.777512371933350099e-01 +9.993000000000000544e-09 9.805908312024301798e-01 +9.993499999999999456e-09 9.832420039192515393e-01 +9.994000000000000023e-09 9.857031841224420665e-01 +9.994500000000000590e-09 9.879729106308399178e-01 +9.994999999999999503e-09 9.900498337491652201e-01 +9.995500000000000070e-09 9.919327166055706968e-01 +9.995999999999998982e-09 9.936204363791451000e-01 +9.996499999999999549e-09 9.951119854158280154e-01 +9.997000000000000116e-09 9.964064722309931010e-01 +9.997499999999999029e-09 9.975031223974577532e-01 +9.997999999999999596e-09 9.984012793176053613e-01 +9.998500000000000163e-09 9.991004048785272484e-01 +9.998999999999999075e-09 9.996000799893335342e-01 +9.999499999999999642e-09 9.999000049998331141e-01 +1.000000000000000021e-08 1.000000000000000000e+00 +1.000049999999999912e-08 9.999000049998337802e-01 +1.000099999999999969e-08 9.996000799893348665e-01 +1.000150000000000026e-08 9.991004048785272484e-01 +1.000199999999999917e-08 9.984012793176080258e-01 +1.000249999999999974e-08 9.975031223974610839e-01 +1.000300000000000030e-08 9.964064722309931010e-01 +1.000349999999999921e-08 9.951119854158325673e-01 +1.000399999999999978e-08 9.936204363791504290e-01 +1.000450000000000035e-08 9.919327166055706968e-01 +1.000499999999999926e-08 9.900498337491717704e-01 +1.000549999999999983e-08 9.879729106308399178e-01 +1.000600000000000040e-08 9.857031841224420665e-01 +1.000649999999999931e-08 9.832420039192599770e-01 +1.000699999999999987e-08 9.805908312024301798e-01 +1.000750000000000044e-08 9.777512371933350099e-01 +1.000799999999999935e-08 9.747249016017992540e-01 +1.000849999999999992e-08 9.715136109702976475e-01 +1.000900000000000049e-08 9.681192569165608663e-01 +1.000949999999999940e-08 9.645438342768213325e-01 +1.000999999999999997e-08 9.607894391523250643e-01 +1.001050000000000053e-08 9.568582668619071141e-01 +1.001099999999999945e-08 9.527526098032174096e-01 +1.001150000000000001e-08 9.484748552256062615e-01 +1.001200000000000058e-08 9.440274829178322280e-01 +1.001249999999999949e-08 9.394130628134824690e-01 +1.001300000000000006e-08 9.346342525174502480e-01 +1.001349999999999897e-08 9.296937947569667848e-01 +1.001399999999999954e-08 9.245945147602175895e-01 +1.001450000000000011e-08 9.193393175665193207e-01 +1.001499999999999902e-08 9.139311852712412865e-01 +1.001549999999999959e-08 9.083731742092749917e-01 +1.001600000000000015e-08 9.026684120809427281e-01 +1.001649999999999907e-08 8.968200950238003344e-01 +1.001699999999999963e-08 8.908314846343158289e-01 +1.001750000000000020e-08 8.847059049434836675e-01 +1.001799999999999911e-08 8.784467393499452159e-01 +1.001849999999999968e-08 8.720574275147259247e-01 +1.001900000000000025e-08 8.655414622217655340e-01 +1.001949999999999916e-08 8.589023862078617455e-01 +1.001999999999999973e-08 8.521437889662178966e-01 +1.002050000000000029e-08 8.452693035278173728e-01 +1.002099999999999921e-08 8.382826032242476355e-01 +1.002149999999999977e-08 8.311873984361770606e-01 +1.002200000000000034e-08 8.239874333317013244e-01 +1.002249999999999925e-08 8.166864825981249298e-01 +1.002299999999999982e-08 8.092883481713378790e-01 +1.002350000000000039e-08 8.017968559669386153e-01 +1.002399999999999930e-08 7.942158526165605803e-01 +1.002449999999999987e-08 7.865492022134602523e-01 +1.002500000000000043e-08 7.788007830714014368e-01 +1.002549999999999935e-08 7.709744845001289537e-01 +1.002599999999999991e-08 7.630742036013408169e-01 +1.002650000000000048e-08 7.551038420890192615e-01 +1.002699999999999939e-08 7.470673031372089268e-01 +1.002749999999999996e-08 7.389684882589483417e-01 +1.002800000000000053e-08 7.308112942199986861e-01 +1.002849999999999944e-08 7.225996099902063374e-01 +1.002900000000000001e-08 7.143373137359608771e-01 +1.002950000000000057e-08 7.060282698571336280e-01 +1.002999999999999949e-08 6.976763260710432402e-01 +1.003050000000000005e-08 6.892853105466290042e-01 +1.003100000000000062e-08 6.808590290919178667e-01 +1.003149999999999953e-08 6.724012623970142544e-01 +1.003200000000000010e-08 6.639157633354754173e-01 +1.003249999999999901e-08 6.554062543268609486e-01 +1.003299999999999958e-08 6.468764247621406893e-01 +1.003350000000000015e-08 6.383299284950761932e-01 +1.003399999999999906e-08 6.297703814010229273e-01 +1.003449999999999962e-08 6.212013590054609180e-01 +1.003500000000000019e-08 6.126263941844164451e-01 +1.003549999999999910e-08 6.040489749380443252e-01 +1.003599999999999967e-08 5.954725422392790346e-01 +1.003650000000000024e-08 5.869004879593374691e-01 +1.003699999999999915e-08 5.783361528709621835e-01 +1.003749999999999972e-08 5.697828247309314476e-01 +1.003800000000000028e-08 5.612437364432336651e-01 +1.003849999999999920e-08 5.527220643034111980e-01 +1.003899999999999976e-08 5.442209263252149043e-01 +1.003950000000000033e-08 5.357433806505828011e-01 +1.003999999999999924e-08 5.272924240430648668e-01 +1.004049999999999981e-08 5.188709904654591476e-01 +1.004100000000000038e-08 5.104819497422865560e-01 +1.004149999999999929e-08 5.021281063068622208e-01 +1.004199999999999986e-08 4.938121980333519678e-01 +1.004250000000000042e-08 4.855368951540759426e-01 +1.004299999999999934e-08 4.773047992614601887e-01 +1.004349999999999990e-08 4.691184423946691551e-01 +1.004400000000000047e-08 4.609802862108294264e-01 +1.004449999999999938e-08 4.528927212399079805e-01 +1.004499999999999995e-08 4.448580662229453808e-01 +1.004550000000000052e-08 4.368785675332172991e-01 +1.004599999999999943e-08 4.289563986790853600e-01 +1.004650000000000000e-08 4.210936598879151949e-01 +1.004700000000000056e-08 4.132923777703386703e-01 +1.004749999999999948e-08 4.055545050633318493e-01 +1.004800000000000004e-08 3.978819204512072383e-01 +1.004850000000000061e-08 3.902764284635151237e-01 +1.004899999999999952e-08 3.827397594480794196e-01 +1.004950000000000009e-08 3.752735696180091174e-01 +1.004999999999999900e-08 3.678794411714600976e-01 +1.005049999999999957e-08 3.605588824819849769e-01 +1.005100000000000014e-08 3.533133283586024631e-01 +1.005149999999999905e-08 3.461441403732952171e-01 +1.005199999999999962e-08 3.390526072544506331e-01 +1.005250000000000018e-08 3.320399453446610805e-01 +1.005299999999999910e-08 3.251072991206112039e-01 +1.005349999999999966e-08 3.182557417733782312e-01 +1.005400000000000023e-08 3.114862758474069016e-01 +1.005449999999999914e-08 3.047998339357674835e-01 +1.005499999999999971e-08 2.981972794298939355e-01 +1.005550000000000028e-08 2.916794073219456940e-01 +1.005599999999999919e-08 2.852469450573183463e-01 +1.005649999999999976e-08 2.789005534354055960e-01 +1.005700000000000032e-08 2.726408275566755135e-01 +1.005749999999999924e-08 2.664682978135361480e-01 +1.005799999999999980e-08 2.603834309230340094e-01 +1.005850000000000037e-08 2.543866309994019526e-01 +1.005899999999999928e-08 2.484782406639150787e-01 +1.005949999999999985e-08 2.426585421900750161e-01 +1.006000000000000042e-08 2.369277586821194603e-01 +1.006049999999999933e-08 2.312860552843385153e-01 +1.006099999999999990e-08 2.257335404192203632e-01 +1.006150000000000046e-08 2.202702670524390449e-01 +1.006199999999999937e-08 2.148962339822143297e-01 +1.006249999999999994e-08 2.096113871511006699e-01 +1.006300000000000051e-08 2.044156209782609646e-01 +1.006349999999999942e-08 1.993087797098306857e-01 +1.006399999999999999e-08 1.942906587854903722e-01 +1.006450000000000056e-08 1.893610062193707422e-01 +1.006499999999999947e-08 1.845195239929964537e-01 +1.006550000000000003e-08 1.797658694584695072e-01 +1.006600000000000060e-08 1.750996567501098000e-01 +1.006649999999999951e-08 1.705204582023778781e-01 +1.006700000000000008e-08 1.660278057723877931e-01 +1.006749999999999899e-08 1.616211924653498666e-01 +1.006799999999999956e-08 1.573000737608093169e-01 +1.006850000000000013e-08 1.530638690384119316e-01 +1.006899999999999904e-08 1.489119630011573880e-01 +1.006949999999999961e-08 1.448437070946719807e-01 +1.007000000000000017e-08 1.408584209210453075e-01 +1.007049999999999909e-08 1.369553936454618870e-01 +1.007099999999999965e-08 1.331338853942860279e-01 +1.007150000000000022e-08 1.293931286432913053e-01 +1.007199999999999913e-08 1.257323295944357266e-01 +1.007249999999999970e-08 1.221506695399936365e-01 +1.007300000000000027e-08 1.186473062128877154e-01 +1.007349999999999918e-08 1.152213751218004179e-01 +1.007399999999999975e-08 1.118719908700312599e-01 +1.007450000000000031e-08 1.085982484571022533e-01 +1.007499999999999923e-08 1.053992245618705637e-01 +1.007549999999999979e-08 1.022739788062724808e-01 +1.007600000000000036e-08 9.922155499886235741e-02 +1.007649999999999927e-08 9.624098235708339333e-02 +1.007699999999999984e-08 9.333127670755467231e-02 +1.007750000000000041e-08 9.049144166369479936e-02 +1.007799999999999932e-08 8.772046977979730542e-02 +1.007849999999999989e-08 8.501734368099686523e-02 +1.007900000000000045e-08 8.238103716860249726e-02 +1.007949999999999937e-08 7.981051630008395570e-02 +1.007999999999999993e-08 7.730474044330111483e-02 +1.008050000000000050e-08 7.486266330460211726e-02 +1.008099999999999941e-08 7.248323393024026784e-02 +1.008149999999999998e-08 7.016539768084426032e-02 +1.008200000000000055e-08 6.790809717870795181e-02 +1.008249999999999946e-08 6.571027322750612465e-02 +1.008300000000000003e-08 6.357086570430527106e-02 +1.008350000000000059e-08 6.148881442376851608e-02 +1.008399999999999951e-08 5.946305997430599566e-02 +1.008450000000000007e-08 5.749254452616511107e-02 +1.008499999999999899e-08 5.557621261148772834e-02 +1.008549999999999955e-08 5.371301187617595618e-02 +1.008600000000000012e-08 5.190189380380569317e-02 +1.008649999999999903e-08 5.014181441150703661e-02 +1.008699999999999960e-08 4.843173491799625946e-02 +1.008750000000000017e-08 4.677062238395914701e-02 +1.008799999999999908e-08 4.515745032486451899e-02 +1.008849999999999965e-08 4.359119929648037906e-02 +1.008900000000000021e-08 4.207085745338230015e-02 +1.008949999999999912e-08 4.059542108063342314e-02 +1.008999999999999969e-08 3.916389509898856452e-02 +1.009050000000000026e-08 3.777529354399183914e-02 +1.009099999999999917e-08 3.642864001923178802e-02 +1.009149999999999974e-08 3.512296812417642355e-02 +1.009200000000000031e-08 3.385732185702289287e-02 +1.009249999999999922e-08 3.263075599289844142e-02 +1.009299999999999978e-08 3.144233643789230703e-02 +1.009350000000000035e-08 3.029114055940603303e-02 +1.009399999999999926e-08 2.917625749321905645e-02 +1.009449999999999983e-08 2.809678842779389854e-02 +1.009500000000000040e-08 2.705184686635003083e-02 +1.009549999999999931e-08 2.604055886715054072e-02 +1.009599999999999988e-08 2.506206326255940725e-02 +1.009650000000000044e-08 2.411551185742863077e-02 +1.009699999999999936e-08 2.320006960729500967e-02 +1.009749999999999992e-08 2.231491477696691608e-02 +1.009800000000000049e-08 2.145923908007993028e-02 +1.009849999999999940e-08 2.063224780012602039e-02 +1.009899999999999997e-08 1.983315989354888023e-02 +1.009950000000000054e-08 1.906120807549438120e-02 +1.009999999999999945e-08 1.831563888873530277e-02 +1.010050000000000002e-08 1.759571275636652790e-02 +1.010100000000000058e-08 1.690070401886061002e-02 +1.010149999999999950e-08 1.622990095600814267e-02 +1.010200000000000006e-08 1.558260579433469288e-02 +1.010249999999999898e-08 1.495813470057900940e-02 +1.010299999999999954e-08 1.435581776174040848e-02 +1.010350000000000011e-08 1.377499895231716967e-02 +1.010399999999999902e-08 1.321503608923615090e-02 +1.010449999999999959e-08 1.267530077504375359e-02 +1.010500000000000016e-08 1.215517832991500069e-02 +1.010549999999999907e-08 1.165406771298250696e-02 +1.010599999999999964e-08 1.117138143353137852e-02 +1.010650000000000020e-08 1.070654545259368436e-02 +1.010699999999999912e-08 1.025899907542464871e-02 +1.010749999999999968e-08 9.828194835380135025e-03 +1.010800000000000025e-08 9.413598369701606586e-03 +1.010849999999999916e-08 9.014688287666610886e-03 +1.010899999999999973e-08 8.630956031594140890e-03 +1.010950000000000030e-08 8.261905731180241297e-03 +1.010999999999999921e-08 7.907054051594137115e-03 +1.011049999999999978e-08 7.565930035791435145e-03 +1.011100000000000034e-08 7.238074941486046833e-03 +1.011149999999999926e-08 6.923042073181134674e-03 +1.011199999999999982e-08 6.620396609680280833e-03 +1.011250000000000039e-08 6.329715427485645488e-03 +1.011299999999999930e-08 6.050586920451010708e-03 +1.011349999999999987e-08 5.782610816074825431e-03 +1.011400000000000044e-08 5.525397988803815337e-03 +1.011449999999999935e-08 5.278570270681647025e-03 +1.011499999999999992e-08 5.041760259691117733e-03 +1.011550000000000048e-08 4.814611126123849102e-03 +1.011599999999999940e-08 4.596776417278225328e-03 +1.011649999999999996e-08 4.387919860797358414e-03 +1.011700000000000053e-08 4.187715166944778154e-03 +1.011749999999999944e-08 3.995845830084919677e-03 +1.011800000000000001e-08 3.812004929644235637e-03 +1.011850000000000058e-08 3.635894930814855507e-03 +1.011899999999999949e-08 3.467227485235234181e-03 +1.011950000000000006e-08 3.305723231888189201e-03 +1.012000000000000062e-08 3.151111598444318249e-03 +1.012049999999999953e-08 3.003130603252918661e-03 +1.012100000000000010e-08 2.861526658187613873e-03 +1.012149999999999901e-08 2.726054372542018392e-03 +1.012199999999999958e-08 2.596476358144154863e-03 +1.012250000000000015e-08 2.472563035874209957e-03 +1.012299999999999906e-08 2.354092443734494364e-03 +1.012349999999999963e-08 2.240850046627375532e-03 +1.012400000000000019e-08 2.132628547985485241e-03 +1.012449999999999911e-08 2.029227703379145060e-03 +1.012499999999999967e-08 1.930454136227813819e-03 +1.012550000000000024e-08 1.836121155732417650e-03 +1.012599999999999915e-08 1.746048577127942052e-03 +1.012649999999999972e-08 1.660062544357023776e-03 +1.012700000000000029e-08 1.577995355256064372e-03 +1.012749999999999920e-08 1.499685289330001314e-03 +1.012799999999999977e-08 1.424976438192530545e-03 +1.012850000000000033e-08 1.353718538740503879e-03 +1.012899999999999925e-08 1.285766809117369711e-03 +1.012949999999999981e-08 1.220981787521089679e-03 +1.013000000000000038e-08 1.159229173904571851e-03 +1.013049999999999929e-08 1.100379674604628740e-03 +1.013099999999999986e-08 1.044308849935719112e-03 +1.013150000000000043e-08 9.908969647782622792e-04 +1.013199999999999934e-08 9.400288421807737743e-04 +1.013249999999999991e-08 8.915937199952480869e-04 +1.013300000000000047e-08 8.454851105595587819e-04 +1.013349999999999939e-08 8.016006634314988338e-04 +1.013399999999999995e-08 7.598420311792607185e-04 +1.013450000000000052e-08 7.201147382282747315e-04 +1.013499999999999943e-08 6.823280527564348037e-04 +1.013550000000000000e-08 6.463948616300138703e-04 +1.013600000000000057e-08 6.122315483683398590e-04 +1.013649999999999948e-08 5.797578741186694548e-04 +1.013700000000000005e-08 5.488968616229696930e-04 +1.013750000000000061e-08 5.195746821548158931e-04 +1.013799999999999953e-08 4.917205453990194193e-04 +1.013850000000000009e-08 4.652665922469652153e-04 +1.013899999999999901e-08 4.401477904778515232e-04 +1.013949999999999957e-08 4.163018332907470571e-04 +1.014000000000000014e-08 3.936690406550817601e-04 +1.014049999999999905e-08 3.721922634404852231e-04 +1.014099999999999962e-08 3.518167902881592620e-04 +1.014150000000000019e-08 3.324902571839757860e-04 +1.014199999999999910e-08 3.141625596901778217e-04 +1.014249999999999967e-08 2.967857677932296415e-04 +1.014300000000000023e-08 2.803140433239075988e-04 +1.014349999999999914e-08 2.647035599031239490e-04 +1.014399999999999971e-08 2.499124253677371022e-04 +1.014450000000000028e-08 2.359006066295753906e-04 +1.014499999999999919e-08 2.226298569189154775e-04 +1.014549999999999976e-08 2.100636453644931533e-04 +1.014600000000000033e-08 1.981670888615037827e-04 +1.014649999999999924e-08 1.869068861775413171e-04 +1.014699999999999980e-08 1.762512542473930401e-04 +1.014750000000000037e-08 1.661698666072744133e-04 +1.014799999999999928e-08 1.566337939180431941e-04 +1.014849999999999985e-08 1.476154465279699293e-04 +1.014900000000000042e-08 1.390885190255798057e-04 +1.014949999999999933e-08 1.310279367324182812e-04 +1.014999999999999990e-08 1.234098040866841420e-04 +1.015050000000000046e-08 1.162113548688487052e-04 +1.015099999999999938e-08 1.094109042200202409e-04 +1.015149999999999994e-08 1.029878024049675657e-04 +1.015200000000000051e-08 9.692239027205668770e-05 +1.015249999999999942e-08 9.119595636227479751e-05 +1.015299999999999999e-08 8.579069562069122025e-05 +1.015350000000000056e-08 8.068966966419318385e-05 +1.015399999999999947e-08 7.587676855947554546e-05 +1.015450000000000004e-08 7.133667406644497754e-05 +1.015500000000000060e-08 6.705482430280778640e-05 +1.015549999999999952e-08 6.301737978592492756e-05 +1.015600000000000008e-08 5.921119080918849011e-05 +1.015649999999999900e-08 5.562376611090049365e-05 +1.015699999999999956e-08 5.224324279396445241e-05 +1.015750000000000013e-08 4.905835745620824569e-05 +1.015799999999999904e-08 4.605841849127274845e-05 +1.015849999999999961e-08 4.323327952127184893e-05 +1.015900000000000018e-08 4.057331392320209589e-05 +1.015949999999999909e-08 3.806939041167087143e-05 +1.015999999999999966e-08 3.571284964163774599e-05 +1.016050000000000022e-08 3.349548179568049005e-05 +1.016099999999999914e-08 3.140950512093784470e-05 +1.016149999999999970e-08 2.944754538197590974e-05 +1.016200000000000027e-08 2.760261619664254023e-05 +1.016249999999999918e-08 2.586810022265761339e-05 +1.016299999999999975e-08 2.423773116372735705e-05 +1.016350000000000032e-08 2.270557656479319980e-05 +1.016399999999999923e-08 2.126602136671607740e-05 +1.016449999999999980e-08 1.991375219169474122e-05 +1.016500000000000036e-08 1.864374233151648875e-05 +1.016549999999999928e-08 1.745123741143500326e-05 +1.016599999999999984e-08 1.633174170341076612e-05 +1.016650000000000041e-08 1.528100506322462143e-05 +1.016699999999999932e-08 1.429501046666157253e-05 +1.016749999999999989e-08 1.336996212084439668e-05 +1.016800000000000046e-08 1.250227412754098934e-05 +1.016849999999999937e-08 1.168855967593440920e-05 +1.016899999999999994e-08 1.092562074316975940e-05 +1.016950000000000050e-08 1.021043828169873691e-05 +1.016999999999999942e-08 9.540162873080264045e-06 +1.017049999999999998e-08 8.912105828662177478e-06 +1.017100000000000055e-08 8.323730718234701256e-06 +1.017149999999999946e-08 7.772645308351521586e-06 +1.017200000000000003e-08 7.256593892722303515e-06 +1.017250000000000060e-08 6.773449997703400104e-06 +1.017299999999999951e-08 6.321209446481420808e-06 +1.017350000000000008e-08 5.897983766197328911e-06 +1.017399999999999899e-08 5.501993922835618949e-06 +1.017449999999999955e-08 5.131564369225080318e-06 +1.017500000000000012e-08 4.785117392129077364e-06 +1.017549999999999903e-08 4.461167744865224296e-06 +1.017599999999999960e-08 4.158317552467016482e-06 +1.017650000000000017e-08 3.875251476900745566e-06 +1.017699999999999908e-08 3.610732130317166707e-06 +1.017749999999999965e-08 3.363595724825909663e-06 +1.017800000000000021e-08 3.132747947739331075e-06 +1.017849999999999913e-08 2.917160051659733876e-06 +1.017899999999999969e-08 2.715865149243423940e-06 +1.017950000000000026e-08 2.527954702891996406e-06 +1.017999999999999917e-08 2.352575200010130480e-06 +1.018049999999999974e-08 2.188925004882994561e-06 +1.018100000000000031e-08 2.036251378603093290e-06 +1.018149999999999922e-08 1.893847658828807190e-06 +1.018199999999999979e-08 1.761050591527623582e-06 +1.018250000000000035e-08 1.637237807196163514e-06 +1.018299999999999927e-08 1.521825434366585400e-06 +1.018349999999999983e-08 1.414265843540035417e-06 +1.018400000000000040e-08 1.314045514991269288e-06 +1.018449999999999931e-08 1.220683024173693907e-06 +1.018499999999999988e-08 1.133727138748022653e-06 +1.018550000000000045e-08 1.052755021528771226e-06 +1.018599999999999936e-08 9.773705338969603489e-07 +1.018649999999999993e-08 9.072026344880996619e-07 +1.018700000000000049e-08 8.419038682049428943e-07 +1.018749999999999941e-08 7.811489408305448121e-07 +1.018799999999999997e-08 7.246333747471613648e-07 +1.018850000000000054e-08 6.720722414791795466e-07 +1.018899999999999945e-08 6.231989669782971963e-07 +1.018950000000000002e-08 5.777642057714441113e-07 +1.019000000000000059e-08 5.355347802792804808e-07 +1.019049999999999950e-08 4.962926817894126212e-07 +1.019100000000000007e-08 4.598341297456770955e-07 +1.019149999999999898e-08 4.259686861794437645e-07 +1.019199999999999955e-08 3.945184222627267585e-07 +1.019250000000000011e-08 3.653171341207577000e-07 +1.019299999999999903e-08 3.382096051794464235e-07 +1.019349999999999959e-08 3.130509124654416799e-07 +1.019400000000000016e-08 2.897057744075198207e-07 +1.019449999999999907e-08 2.680479378116416366e-07 +1.019499999999999964e-08 2.479596018045256444e-07 +1.019550000000000021e-08 2.293308766547087473e-07 +1.019599999999999912e-08 2.120592754874179344e-07 +1.019649999999999969e-08 1.960492370156931881e-07 +1.019700000000000025e-08 1.812116775090246494e-07 +1.019749999999999917e-08 1.674635703137770011e-07 +1.019799999999999973e-08 1.547275513312362508e-07 +1.019850000000000030e-08 1.429315489444298782e-07 +1.019899999999999921e-08 1.320084369651650788e-07 +1.019949999999999978e-08 1.218957092515000152e-07 +1.020000000000000035e-08 1.125351747192571180e-07 +1.020049999999999926e-08 1.038726715403055393e-07 +1.020099999999999983e-08 9.585779938784825628e-08 +1.020150000000000039e-08 8.844366865193829145e-08 +1.020199999999999930e-08 8.158666560769839183e-08 +1.020249999999999987e-08 7.524623257645257899e-08 +1.020300000000000044e-08 6.938466217381971089e-08 +1.020349999999999935e-08 6.396690478948764854e-08 +1.020399999999999992e-08 5.896038849257469708e-08 +1.020450000000000049e-08 5.433485060240378539e-08 +1.020499999999999940e-08 5.006218020767706633e-08 +1.020549999999999996e-08 4.611627095884718667e-08 +1.020600000000000053e-08 4.247288349750460799e-08 +1.020649999999999944e-08 3.910951692326858799e-08 +1.020700000000000001e-08 3.600528873409608195e-08 +1.020750000000000058e-08 3.314082270898633813e-08 +1.020799999999999949e-08 3.049814423312080390e-08 +1.020850000000000006e-08 2.806058259540371292e-08 +1.020899999999999897e-08 2.581267981631865363e-08 +1.020949999999999954e-08 2.374010559017605570e-08 +1.021000000000000010e-08 2.182957795125524449e-08 +1.021049999999999902e-08 2.006878929647575721e-08 +1.021099999999999958e-08 1.844633741977121828e-08 +1.021150000000000015e-08 1.695166123428515050e-08 +1.021199999999999906e-08 1.557498087816512616e-08 +1.021249999999999963e-08 1.430724191856911090e-08 +1.021300000000000020e-08 1.314006338606682176e-08 +1.021349999999999911e-08 1.206568938809166362e-08 +1.021399999999999968e-08 1.107694406585170385e-08 +1.021450000000000024e-08 1.016718967379719318e-08 +1.021499999999999916e-08 9.330287574506696054e-09 +1.021549999999999972e-08 8.560561954991826401e-09 +1.021600000000000029e-08 7.852766082667819061e-09 +1.021649999999999920e-08 7.202050930706823113e-09 +1.021699999999999977e-08 6.603936013418356200e-09 +1.021750000000000034e-08 6.054282282484761356e-09 +1.021799999999999925e-08 5.549266944410729504e-09 +1.021849999999999982e-08 5.085360068610329959e-09 +1.021900000000000038e-08 4.659302864000113249e-09 +1.021949999999999930e-08 4.268087509865283882e-09 +1.021999999999999986e-08 3.908938434265099765e-09 +1.022050000000000043e-08 3.579294940228659228e-09 +1.022099999999999934e-08 3.276795086519318635e-09 +1.022149999999999991e-08 2.999260735935266967e-09 +1.022200000000000048e-08 2.744683689874297679e-09 +1.022249999999999939e-08 2.511212833271661500e-09 +1.022299999999999996e-08 2.297142219113707566e-09 +1.022350000000000052e-08 2.100900026469052979e-09 +1.022399999999999944e-08 1.921038330403016065e-09 +1.022450000000000000e-08 1.756223626322250151e-09 +1.022500000000000057e-08 1.605228055185508868e-09 +1.022549999999999948e-08 1.466921279643797883e-09 +1.022600000000000005e-08 1.340262964597061873e-09 +1.022650000000000062e-08 1.224295818837288453e-09 +1.022699999999999953e-08 1.118139157414577315e-09 +1.022750000000000010e-08 1.020982947159356139e-09 +1.022799999999999901e-08 9.320823003922032001e-10 +1.022849999999999958e-08 8.507523842707529801e-10 +1.022900000000000014e-08 7.763637155095000376e-10 +1.022949999999999905e-08 7.083378123079964719e-10 +1.022999999999999962e-08 6.461431773106819776e-10 +1.023050000000000019e-08 5.892915872631550589e-10 +1.023099999999999910e-08 5.373346667439303505e-10 +1.023149999999999967e-08 4.898607249609050925e-10 +1.023200000000000024e-08 4.464918360953908569e-10 +1.023249999999999915e-08 4.068811450656607989e-10 +1.023299999999999971e-08 3.707103818850396076e-10 +1.023350000000000028e-08 3.376875689977527940e-10 +1.023399999999999919e-08 3.075449070985488772e-10 +1.023449999999999976e-08 2.800368259941189136e-10 +1.023500000000000033e-08 2.549381880391924005e-10 +1.023549999999999924e-08 2.320426325855084761e-10 +1.023599999999999981e-08 2.111610507291178820e-10 +1.023650000000000037e-08 1.921201804261050370e-10 +1.023699999999999929e-08 1.747613127750490866e-10 +1.023749999999999985e-08 1.589391009451744049e-10 +1.023800000000000042e-08 1.445204638592281466e-10 +1.023849999999999933e-08 1.313835773243540680e-10 +1.023899999999999990e-08 1.194169458498374518e-10 +1.023950000000000047e-08 1.085185488952126563e-10 +1.023999999999999938e-08 9.859505575993092819e-11 +1.024049999999999995e-08 8.956110376197838092e-11 +1.024100000000000051e-08 8.133863475611291223e-11 +1.024149999999999943e-08 7.385628541581710079e-11 +1.024199999999999999e-08 6.704882705103031513e-11 +1.024250000000000056e-08 6.085665105517943118e-11 +1.024299999999999947e-08 5.522529637252343022e-11 +1.024350000000000004e-08 5.010501565372099323e-11 +1.024400000000000061e-08 4.545037702317540350e-11 +1.024449999999999952e-08 4.121989861814850469e-11 +1.024500000000000009e-08 3.737571327944362632e-11 +1.024549999999999900e-08 3.388326097631598914e-11 +1.024599999999999957e-08 3.071100673562736624e-11 +1.024650000000000013e-08 2.783018201967027500e-11 +1.024699999999999905e-08 2.521454765704578803e-11 +1.024749999999999961e-08 2.284017657993978506e-11 +1.024800000000000018e-08 2.068525475834285728e-11 +1.024849999999999909e-08 1.872989884839819477e-11 +1.024899999999999966e-08 1.695598918950671660e-11 +1.024950000000000023e-08 1.534701689299837252e-11 +1.024999999999999914e-08 1.388794386496703074e-11 +1.025049999999999971e-08 1.256507469830641573e-11 +1.025100000000000027e-08 1.136593945408858779e-11 +1.025149999999999919e-08 1.027918643086487402e-11 +1.025199999999999975e-08 9.294484093067810996e-12 +1.025250000000000032e-08 8.402431396484148953e-12 +1.025299999999999923e-08 7.594475810286330359e-12 +1.025349999999999980e-08 6.862838391993448798e-12 +1.025400000000000037e-08 6.200445324032573931e-12 +1.025449999999999928e-08 5.600865368706658741e-12 +1.025499999999999985e-08 5.058252742844181035e-12 +1.025550000000000041e-08 4.567294954265248634e-12 +1.025599999999999933e-08 4.123165179775674085e-12 +1.025649999999999989e-08 3.721478799087183703e-12 +1.025700000000000046e-08 3.358253730908725885e-12 +1.025749999999999937e-08 3.029874246724178904e-12 +1.025799999999999994e-08 2.733057964764336754e-12 +1.025850000000000051e-08 2.464825751448427261e-12 +1.025899999999999942e-08 2.222474280318227658e-12 +1.025949999999999999e-08 2.003551019445590902e-12 +1.026000000000000055e-08 1.805831437513095356e-12 +1.026049999999999946e-08 1.627298236405264158e-12 +1.026100000000000003e-08 1.466122434384738061e-12 +1.026150000000000060e-08 1.320646138806446579e-12 +1.026199999999999951e-08 1.189366860968711796e-12 +1.026250000000000008e-08 1.070923238250838159e-12 +1.026299999999999899e-08 9.640820401803535998e-13 +1.026349999999999956e-08 8.677263456039963879e-13 +1.026400000000000012e-08 7.808447878255682421e-13 +1.026449999999999904e-08 7.025217734137998247e-13 +1.026499999999999960e-08 6.319285885176175489e-13 +1.026550000000000017e-08 5.683153139634405948e-13 +1.026599999999999908e-08 5.110034772172220186e-13 +1.026649999999999965e-08 4.593793755418532331e-13 +1.026700000000000022e-08 4.128880103915735018e-13 +1.026749999999999913e-08 3.710275783095601815e-13 +1.026799999999999970e-08 3.333444683849021233e-13 +1.026850000000000026e-08 2.994287207012547797e-13 +1.026899999999999918e-08 2.689099042093381169e-13 +1.026949999999999974e-08 2.414533761202578380e-13 +1.027000000000000031e-08 2.167568882618915537e-13 +1.027049999999999922e-08 1.945475088966486716e-13 +1.027099999999999979e-08 1.745788312961837858e-13 +1.027150000000000036e-08 1.566284429207297722e-13 +1.027199999999999927e-08 1.404956313801799566e-13 +1.027249999999999984e-08 1.259993054847848752e-13 +1.027300000000000040e-08 1.129761116357816654e-13 +1.027349999999999932e-08 1.012787275782341164e-13 +1.027399999999999988e-08 9.077431715764875268e-14 +1.027450000000000045e-08 8.134313119732927184e-14 +1.027499999999999936e-08 7.287724095821064173e-14 +1.027549999999999993e-08 6.527939187099235977e-14 +1.027600000000000050e-08 5.846196634847012608e-14 +1.027649999999999941e-08 5.234604550443044587e-14 +1.027699999999999998e-08 4.686056053475744998e-14 +1.027750000000000054e-08 4.194152536191910828e-14 +1.027799999999999946e-08 3.753134291362596292e-14 +1.027850000000000002e-08 3.357817810814113014e-14 +1.027900000000000059e-08 3.003539125673397435e-14 +1.027949999999999950e-08 2.686102617409297173e-14 +1.028000000000000007e-08 2.401734781621046295e-14 +1.028049999999999898e-08 2.147042474564659521e-14 +1.028099999999999955e-08 1.918975216066308993e-14 +1.028150000000000012e-08 1.714791162243623787e-14 +1.028199999999999903e-08 1.532026397504334185e-14 +1.028249999999999960e-08 1.368467228126687230e-14 +1.028300000000000016e-08 1.222125189518547697e-14 +1.028349999999999908e-08 1.091214506301723808e-14 +1.028399999999999964e-08 9.741317689601820008e-15 +1.028450000000000021e-08 8.694376130955622740e-15 +1.028499999999999912e-08 7.758402075698038985e-15 +1.028549999999999969e-08 6.921803761988905989e-15 +1.028600000000000026e-08 6.174181943241648882e-15 +1.028649999999999917e-08 5.506209166949854461e-15 +1.028699999999999974e-08 4.909521068101988785e-15 +1.028750000000000030e-08 4.376618502870756326e-15 +1.028799999999999921e-08 3.900779460805572481e-15 +1.028849999999999978e-08 3.475979795835285931e-15 +1.028900000000000035e-08 3.096821908789685572e-15 +1.028949999999999926e-08 2.758470597803271190e-15 +1.028999999999999983e-08 2.456595368792370082e-15 +1.029050000000000040e-08 2.187318566783000846e-15 +1.029099999999999931e-08 1.947168750922660267e-15 +1.029149999999999987e-08 1.733038792213426037e-15 +1.029200000000000044e-08 1.542148223808066619e-15 +1.029249999999999935e-08 1.372009419645406125e-15 +1.029299999999999992e-08 1.220397218773046156e-15 +1.029350000000000049e-08 1.085321650258734891e-15 +1.029399999999999940e-08 9.650034475207981921e-16 +1.029449999999999997e-08 8.578520715931100692e-16 +1.029500000000000053e-08 7.624459905389180449e-16 +1.029549999999999945e-08 6.775149872375412712e-16 +1.029600000000000001e-08 6.019242903687531718e-16 +1.029650000000000058e-08 5.346603438079039995e-16 +1.029699999999999949e-08 4.748180480405862121e-16 +1.029750000000000006e-08 4.215893238174417272e-16 +1.029799999999999897e-08 3.742528632455265516e-16 +1.029849999999999954e-08 3.321649470138064408e-16 +1.029900000000000011e-08 2.947512186391334239e-16 +1.029949999999999902e-08 2.614993175873864453e-16 +1.029999999999999959e-08 2.319522830243915254e-16 +1.030050000000000015e-08 2.057026488640746719e-16 +1.030099999999999907e-08 1.823871588085623074e-16 +1.030149999999999963e-08 1.616820373097914848e-16 +1.030200000000000020e-08 1.432987588924867270e-16 +1.030249999999999911e-08 1.269802641378219393e-16 +1.030299999999999968e-08 1.124975759040707584e-16 +1.030350000000000025e-08 9.964677410608481510e-17 +1.030399999999999916e-08 8.824629164344771081e-17 +1.030449999999999973e-08 7.813449790826610241e-17 +1.030500000000000029e-08 6.916753975541345151e-17 +1.030549999999999921e-08 6.121741292047140118e-17 +1.030599999999999977e-08 5.417023966069665795e-17 +1.030650000000000034e-08 4.792473090001544011e-17 +1.030699999999999925e-08 4.239081340952776737e-17 +1.030749999999999982e-08 3.748840457745824006e-17 +1.030800000000000039e-08 3.314631913756944918e-17 +1.030849999999999930e-08 2.930129385415855406e-17 +1.030899999999999987e-08 2.589711762475394622e-17 +1.030950000000000043e-08 2.288385577373520381e-17 +1.030999999999999935e-08 2.021715848695791982e-17 +1.031049999999999991e-08 1.785764439357704967e-17 +1.031100000000000048e-08 1.577035124782550490e-17 +1.031149999999999939e-08 1.392424651189609472e-17 +1.031199999999999996e-08 1.229179140191621963e-17 +1.031250000000000053e-08 1.084855264042853043e-17 +1.031299999999999944e-08 9.572856769163936681e-18 +1.031350000000000001e-08 8.445482422860412397e-18 +1.031400000000000057e-08 7.449386454450133889e-18 +1.031449999999999949e-08 6.569460240148211333e-18 +1.031500000000000005e-08 5.792312885395118338e-18 +1.031550000000000062e-08 5.106078403606888725e-18 +1.031599999999999953e-08 4.500244253653901743e-18 +1.031650000000000010e-08 3.965498902951005662e-18 +1.031699999999999901e-08 3.493596334181120150e-18 +1.031749999999999958e-08 3.077235638153017822e-18 +1.031800000000000015e-08 2.709954036083132154e-18 +1.031849999999999906e-08 2.386031853831330428e-18 +1.031899999999999962e-08 2.100408130898132038e-18 +1.031950000000000019e-08 1.848605690081435749e-18 +1.031999999999999910e-08 1.626664621453705184e-18 +1.032049999999999967e-08 1.431083248440388602e-18 +1.032100000000000024e-08 1.258765745603582610e-18 +1.032149999999999915e-08 1.106975668591823959e-18 +1.032199999999999972e-08 9.732947378119483251e-19 +1.032250000000000028e-08 8.555862896902680932e-19 +1.032299999999999920e-08 7.519628738683787866e-19 +1.032349999999999976e-08 6.607575321903234131e-19 +1.032400000000000033e-08 5.804983465856736741e-19 +1.032449999999999924e-08 5.098858886179802741e-19 +1.032499999999999981e-08 4.477732441718778163e-19 +1.032550000000000038e-08 3.931483229976377084e-19 +1.032599999999999929e-08 3.451181951080010850e-19 +1.032649999999999986e-08 3.028952247712421752e-19 +1.032700000000000042e-08 2.657847984278733619e-19 +1.032749999999999934e-08 2.331744656246655328e-19 +1.032799999999999990e-08 2.045243323241720478e-19 +1.032850000000000047e-08 1.793585639690637724e-19 +1.032899999999999938e-08 1.572578717065973023e-19 +1.032949999999999995e-08 1.378528694334742526e-19 +1.033000000000000052e-08 1.208182019899884907e-19 +1.033049999999999943e-08 1.058673560906744578e-19 +1.033100000000000000e-08 9.274807558615279036e-20 +1.033150000000000056e-08 8.123831153860300075e-20 +1.033199999999999948e-08 7.114264548647135010e-20 +1.033250000000000004e-08 6.228913128535930372e-20 +1.033300000000000061e-08 5.452650713474924598e-20 +1.033349999999999952e-08 4.772173492293674177e-20 +1.033400000000000009e-08 4.175782892483163602e-20 +1.033449999999999900e-08 3.653194023537214189e-20 +1.033499999999999957e-08 3.195366717748910144e-20 +1.033550000000000014e-08 2.794356534481219380e-20 +1.033599999999999905e-08 2.443183397044038462e-20 +1.033649999999999962e-08 2.135715800149179952e-20 +1.033700000000000018e-08 1.866568764075611986e-20 +1.033749999999999910e-08 1.631013922670695544e-20 +1.033799999999999966e-08 1.424900319265213732e-20 +1.033850000000000023e-08 1.244584650104240359e-20 +1.033899999999999914e-08 1.086869841436989152e-20 +1.033949999999999971e-08 9.489509761666364213e-21 +1.034000000000000028e-08 8.283677007682800444e-21 +1.034049999999999919e-08 7.229623447580114953e-21 +1.034099999999999976e-08 6.308430748754710491e-21 +1.034150000000000032e-08 5.503514856132821543e-21 +1.034199999999999924e-08 4.800340979925237107e-21 +1.034249999999999980e-08 4.186173006146475542e-21 +1.034300000000000037e-08 3.649853219225293456e-21 +1.034349999999999928e-08 3.181608711117780303e-21 +1.034399999999999985e-08 2.772881279988888565e-21 +1.034450000000000042e-08 2.416178000047245496e-21 +1.034499999999999933e-08 2.104939978340244180e-21 +1.034549999999999990e-08 1.833427109456952838e-21 +1.034600000000000046e-08 1.596616899534174950e-21 +1.034649999999999937e-08 1.390115660780054819e-21 +1.034699999999999994e-08 1.210080580535357138e-21 +1.034750000000000051e-08 1.053151347743929393e-21 +1.034799999999999942e-08 9.163901774157858479e-22 +1.034849999999999999e-08 7.972292127481905477e-22 +1.034900000000000056e-08 6.934244071430042189e-22 +1.034949999999999947e-08 6.030150963724322397e-22 +1.035000000000000003e-08 5.242885663363762003e-22 +1.035050000000000060e-08 4.557490056904986577e-22 +1.035099999999999951e-08 3.960903064541893593e-22 +1.035150000000000008e-08 3.441722407284659866e-22 +1.035199999999999899e-08 2.989995988818280429e-22 +1.035249999999999956e-08 2.597039249247344731e-22 +1.035300000000000013e-08 2.255275291224424126e-22 +1.035349999999999904e-08 1.958094968751128726e-22 +1.035399999999999961e-08 1.699734471910887404e-22 +1.035450000000000017e-08 1.475168242308274375e-22 +1.035499999999999909e-08 1.280015319052055547e-22 +1.035549999999999965e-08 1.110457448139695796e-22 +1.035600000000000022e-08 9.631674928342261764e-23 +1.035649999999999913e-08 8.352468624849722535e-23 +1.035699999999999970e-08 7.241708352570771290e-23 +1.035750000000000027e-08 6.277407889747136716e-23 +1.035799999999999918e-08 5.440424760877497778e-23 +1.035849999999999975e-08 4.714095857096960484e-23 +1.035900000000000031e-08 4.083919295078934062e-23 +1.035949999999999923e-08 3.537276705522652402e-23 +1.035999999999999979e-08 3.063190864577821561e-23 +1.036050000000000036e-08 2.652114214921895218e-23 +1.036099999999999927e-08 2.295744378522855632e-23 +1.036149999999999984e-08 1.986863250014082750e-23 +1.036200000000000041e-08 1.719196686274127838e-23 +1.036249999999999932e-08 1.487292181651661678e-23 +1.036299999999999989e-08 1.286412245840928422e-23 +1.036350000000000045e-08 1.112441488271523142e-23 +1.036399999999999937e-08 9.618056640586768448e-24 +1.036449999999999993e-08 8.314011565004371881e-24 +1.036500000000000050e-08 7.185335635901636878e-24 +1.036549999999999941e-08 6.208642244464791194e-24 +1.036599999999999998e-08 5.363636689476310296e-24 +1.036650000000000055e-08 4.632711027594787191e-24 +1.036699999999999946e-08 4.000591526683404119e-24 +1.036750000000000003e-08 3.454031957014062159e-24 +1.036800000000000059e-08 2.981546816703349185e-24 +1.036849999999999951e-08 2.573179340638795905e-24 +1.036900000000000007e-08 2.220299800101399873e-24 +1.036949999999999898e-08 1.915430174974415741e-24 +1.036999999999999955e-08 1.652091782314600626e-24 +1.037050000000000012e-08 1.424672883395988279e-24 +1.037099999999999903e-08 1.228313673873498649e-24 +1.037149999999999960e-08 1.058806395686398395e-24 +1.037200000000000017e-08 9.125086007021622856e-25 +1.037249999999999908e-08 7.862678502987237894e-25 +1.037299999999999964e-08 6.773563568326817956e-25 +1.037350000000000021e-08 5.834142662912682332e-25 +1.037399999999999912e-08 5.024004499926316569e-25 +1.037449999999999969e-08 4.325498201513743428e-25 +1.037500000000000026e-08 3.723363121750457347e-25 +1.037549999999999917e-08 3.204407881207892116e-25 +1.037599999999999974e-08 2.757232129347818980e-25 +1.037650000000000030e-08 2.371985397338457844e-25 +1.037699999999999922e-08 2.040158140799683392e-25 +1.037749999999999978e-08 1.754400713566784965e-25 +1.037800000000000035e-08 1.508366571886938460e-25 +1.037849999999999926e-08 1.296576494271834632e-25 +1.037899999999999983e-08 1.114301024911767407e-25 +1.037950000000000040e-08 9.574587161503737445e-26 +1.037999999999999931e-08 8.225280651608905349e-26 +1.038049999999999988e-08 7.064713178894994041e-26 +1.038100000000000044e-08 6.066685548774325880e-26 +1.038149999999999936e-08 5.208606834738649216e-26 +1.038199999999999992e-08 4.471001433373492059e-26 +1.038250000000000049e-08 3.837082905344233431e-26 +1.038299999999999940e-08 3.292385631105807319e-26 +1.038349999999999997e-08 2.824446504651950964e-26 +1.038400000000000054e-08 2.422529925478270879e-26 +1.038449999999999945e-08 2.077390248777619304e-26 +1.038500000000000002e-08 1.781066634757219525e-26 +1.038550000000000058e-08 1.526705915308800243e-26 +1.038599999999999950e-08 1.308409683717921019e-26 +1.038650000000000006e-08 1.121102322549209890e-26 +1.038699999999999898e-08 9.604171264670861447e-27 +1.038749999999999954e-08 8.225980595145656457e-27 +1.038800000000000011e-08 7.044150181127108132e-27 +1.038849999999999902e-08 6.030907583900081511e-27 +1.038899999999999959e-08 5.162378953970279709e-27 +1.038950000000000016e-08 4.418045973246184011e-27 +1.038999999999999907e-08 3.780277844777468189e-27 +1.039049999999999964e-08 3.233928043280221283e-27 +1.039100000000000020e-08 2.765986937863242579e-27 +1.039149999999999912e-08 2.365282608122239589e-27 +1.039199999999999968e-08 2.022223221388054064e-27 +1.039250000000000025e-08 1.728575244037252014e-27 +1.039299999999999916e-08 1.477272542410064130e-27 +1.039349999999999973e-08 1.262252105538892218e-27 +1.039400000000000030e-08 1.078312706690168710e-27 +1.039449999999999921e-08 9.209933260588214909e-28 +1.039499999999999978e-08 7.864685935767536930e-28 +1.039550000000000034e-08 6.714588879042599954e-28 +1.039599999999999926e-08 5.731530533275797363e-28 +1.039649999999999982e-08 4.891419774765576848e-28 +1.039700000000000039e-08 4.173615154816464767e-28 +1.039749999999999930e-08 3.560434556452102782e-28 +1.039799999999999987e-08 3.036734024414375924e-28 +1.039850000000000044e-08 2.589546085615763149e-28 +1.039899999999999935e-08 2.207769221785732299e-28 +1.039949999999999992e-08 1.881901315532697187e-28 +1.040000000000000048e-08 1.603810890548523805e-28 +1.040049999999999939e-08 1.366540828142012872e-28 +1.040099999999999996e-08 1.164139984682809853e-28 +1.040150000000000053e-08 9.915187740869450740e-29 +1.040199999999999944e-08 8.443253303426442046e-29 +1.040250000000000001e-08 7.188393394953603788e-29 +1.040300000000000058e-08 6.118810389487926771e-29 +1.040349999999999949e-08 5.207332335126994260e-29 +1.040400000000000005e-08 4.430744802176217025e-29 +1.040449999999999897e-08 3.769218542539359402e-29 +1.040499999999999953e-08 3.205819323395730369e-29 +1.040550000000000010e-08 2.726088224473186033e-29 +1.040599999999999901e-08 2.317682344295316365e-29 +1.040649999999999958e-08 1.970067284681959138e-29 +1.040700000000000015e-08 1.674254006517398131e-29 +1.040749999999999906e-08 1.422573701363025108e-29 +1.040799999999999963e-08 1.208485226982805808e-29 +1.040850000000000019e-08 1.026410430851257326e-29 +1.040899999999999911e-08 8.715933521049800099e-30 +1.040949999999999967e-08 7.399798645863984363e-30 +1.041000000000000024e-08 6.281148147606021423e-30 +1.041049999999999915e-08 5.330541297746748572e-30 +1.041099999999999972e-08 4.522897326016154414e-30 +1.041150000000000029e-08 3.836854114494851063e-30 +1.041199999999999920e-08 3.254220566929917891e-30 +1.041249999999999977e-08 2.759509067522473392e-30 +1.041300000000000033e-08 2.339536399387355367e-30 +1.041349999999999925e-08 1.983083169327313820e-30 +1.041399999999999981e-08 1.680603222233477992e-30 +1.041450000000000038e-08 1.423975759214436510e-30 +1.041499999999999929e-08 1.206293927781525628e-30 +1.041549999999999986e-08 1.021684555288570187e-30 +1.041600000000000043e-08 8.651544698097015058e-31 +1.041649999999999934e-08 7.324595143148371042e-31 +1.041699999999999991e-08 6.199929263143250488e-31 +1.041750000000000047e-08 5.246902396794960911e-31 +1.041799999999999939e-08 4.439482798415680151e-31 +1.041849999999999995e-08 3.755561781005314582e-31 +1.041900000000000052e-08 3.176366339157297125e-31 +1.041949999999999943e-08 2.685959132054435465e-31 +1.042000000000000000e-08 2.270812922026584755e-31 +1.042050000000000057e-08 1.919448457043008802e-31 +1.042099999999999948e-08 1.622126402717628567e-31 +1.042150000000000005e-08 1.370585310873174507e-31 +1.042200000000000061e-08 1.157818791423087529e-31 +1.042249999999999953e-08 9.778860615816996779e-32 +1.042300000000000009e-08 8.257509062831760177e-32 +1.042349999999999901e-08 6.971448175155729268e-32 +1.042399999999999957e-08 5.884507064194078518e-32 +1.042450000000000014e-08 4.966041161971559863e-32 +1.042499999999999905e-08 4.190093194496064690e-32 +1.042549999999999962e-08 3.534680720709543369e-32 +1.042600000000000019e-08 2.981191270415456339e-32 +1.042649999999999910e-08 2.513868937639934941e-32 +1.042699999999999967e-08 2.119378691767730812e-32 +1.042750000000000023e-08 1.786436718517507125e-32 +1.042799999999999914e-08 1.505496848796350886e-32 +1.042849999999999971e-08 1.268484620485188781e-32 +1.042900000000000028e-08 1.068571784275809934e-32 +1.042949999999999919e-08 8.999851424435176941e-33 +1.042999999999999976e-08 7.578445267619614952e-33 +1.043050000000000033e-08 6.380255022927191558e-33 +1.043099999999999924e-08 5.370430477973496025e-33 +1.043149999999999980e-08 4.519530283225072597e-33 +1.043200000000000037e-08 3.802687557812770750e-33 +1.043249999999999928e-08 3.198903416726834309e-33 +1.043299999999999985e-08 2.690448931717549692e-33 +1.043350000000000042e-08 2.262358987773051881e-33 +1.043399999999999933e-08 1.902004003106759315e-33 +1.043449999999999990e-08 1.598727609491513603e-33 +1.043500000000000046e-08 1.343540197758626170e-33 +1.043549999999999938e-08 1.128859768435076517e-33 +1.043599999999999994e-08 9.482928307805399571e-34 +1.043650000000000051e-08 7.964491996039186685e-34 +1.043699999999999942e-08 6.687854778447970933e-34 +1.043749999999999999e-08 5.614728092388413684e-34 +1.043800000000000056e-08 4.712851608138754620e-34 +1.043849999999999947e-08 3.955049677398762825e-34 +1.043900000000000004e-08 3.318434587015747172e-34 +1.043950000000000060e-08 2.783733916117945528e-34 +1.043999999999999952e-08 2.334722783487836964e-34 +1.044050000000000008e-08 1.957744728077460105e-34 +1.044099999999999900e-08 1.641307469642626164e-34 +1.044149999999999956e-08 1.375741917272454480e-34 +1.044200000000000013e-08 1.152914589512410266e-34 +1.044249999999999904e-08 9.659851300587453697e-35 +1.044299999999999961e-08 8.092018898777422192e-35 +1.044350000000000018e-08 6.777296355456904234e-35 +1.044399999999999909e-08 5.675043649002081734e-35 +1.044449999999999966e-08 4.751109904192081820e-35 +1.044500000000000022e-08 3.976803097901680113e-35 +1.044549999999999914e-08 3.328022403615719821e-35 +1.044599999999999970e-08 2.784527652294556551e-35 +1.044650000000000027e-08 2.329324368184228097e-35 +1.044699999999999918e-08 1.948146202051670786e-35 +1.044749999999999975e-08 1.629019426220782401e-35 +1.044800000000000032e-08 1.361896556029998214e-35 +1.044849999999999923e-08 1.138348189178081391e-35 +1.044899999999999980e-08 9.513038656738913698e-36 +1.044950000000000036e-08 7.948341954923214330e-36 +1.044999999999999928e-08 6.639677199582998644e-36 +1.045049999999999984e-08 5.545370013468091994e-36 +1.045100000000000041e-08 4.630493027201102995e-36 +1.045149999999999932e-08 3.865779516708848750e-36 +1.045199999999999989e-08 3.226710985771393185e-36 +1.045250000000000046e-08 2.692751000455940322e-36 +1.045299999999999937e-08 2.246701965514355321e-36 +1.045349999999999994e-08 1.874165226562281469e-36 +1.045400000000000050e-08 1.563087993665961746e-36 +1.045449999999999942e-08 1.303383203022725559e-36 +1.045499999999999998e-08 1.086610640746070771e-36 +1.045550000000000055e-08 9.057095111559390883e-37 +1.045599999999999946e-08 7.547741963000369716e-37 +1.045650000000000003e-08 6.288662699904100781e-37 +1.045700000000000060e-08 5.238569373750748029e-37 +1.045749999999999951e-08 4.362950029269903820e-37 +1.045800000000000008e-08 3.632962535028452206e-37 +1.045849999999999899e-08 3.024508021635866557e-37 +1.045899999999999955e-08 2.517454924992398209e-37 +1.045950000000000012e-08 2.094989289142165566e-37 +1.045999999999999903e-08 1.743070896646059388e-37 +1.046049999999999960e-08 1.449978082469448214e-37 +1.046100000000000017e-08 1.205926849243102096e-37 +1.046149999999999908e-08 1.002752221206115213e-37 +1.046199999999999965e-08 8.336417216928470287e-38 +1.046250000000000021e-08 6.929124938815710170e-38 +1.046299999999999913e-08 5.758249566249843609e-38 +1.046349999999999969e-08 4.784270385569509441e-38 +1.046400000000000026e-08 3.974239995692218111e-38 +1.046449999999999917e-08 3.300696589005888525e-38 +1.046499999999999974e-08 2.740755284723080196e-38 +1.046550000000000031e-08 2.275349196915501419e-38 +1.046599999999999922e-08 1.888595693859570013e-38 +1.046649999999999979e-08 1.567267306613480324e-38 +1.046700000000000035e-08 1.300350097231160189e-38 +1.046749999999999927e-08 1.078675105374329145e-38 +1.046799999999999983e-08 8.946108441897890531e-39 +1.046850000000000040e-08 7.418067857951329301e-39 +1.046899999999999931e-08 6.149794254882295888e-39 +1.046949999999999988e-08 5.097338938373664047e-39 +1.047000000000000045e-08 4.224152406205902887e-39 +1.047049999999999936e-08 3.499844807395403170e-39 +1.047099999999999993e-08 2.899153004062995325e-39 +1.047150000000000049e-08 2.401079977510066750e-39 +1.047199999999999941e-08 1.988177970810761607e-39 +1.047249999999999997e-08 1.645951484063407094e-39 +1.047300000000000054e-08 1.362360186350931236e-39 +1.047349999999999945e-08 1.127405107249406728e-39 +1.047400000000000002e-08 9.327842266288019872e-40 +1.047450000000000059e-08 7.716058832550009005e-40 +1.047499999999999950e-08 6.381503448062513457e-40 +1.047550000000000007e-08 5.276714866794092848e-40 +1.047599999999999898e-08 4.362318664388646033e-40 +1.047649999999999955e-08 3.605655985911948905e-40 +1.047700000000000011e-08 2.979643670654308474e-40 +1.047749999999999903e-08 2.461826907789003425e-40 +1.047799999999999959e-08 2.033592065536710494e-40 +1.047850000000000016e-08 1.679512746935507109e-40 +1.047899999999999907e-08 1.386806635761710902e-40 +1.047949999999999964e-08 1.144884455585768658e-40 +1.048000000000000021e-08 9.449754976491350801e-41 +1.048049999999999912e-08 7.798167831889572283e-41 +1.048099999999999969e-08 6.433950998451678864e-41 +1.048150000000000025e-08 5.307329622222083824e-41 +1.048199999999999917e-08 4.377110540550373213e-41 +1.048249999999999973e-08 3.609209642416064626e-41 +1.048300000000000030e-08 2.975430733109503469e-41 +1.048349999999999921e-08 2.452453158430366262e-41 +1.048399999999999978e-08 2.020992672543433966e-41 +1.048450000000000035e-08 1.665106046100459119e-41 +1.048499999999999926e-08 1.371614910949875134e-41 +1.048549999999999983e-08 1.129628494518458715e-41 +1.048600000000000039e-08 9.301483520304866183e-42 +1.048649999999999930e-08 7.657410760210129772e-42 +1.048699999999999987e-08 6.302673482923581993e-42 +1.048750000000000044e-08 5.186576811908204403e-42 +1.048799999999999935e-08 4.267268409331487980e-42 +1.048849999999999992e-08 3.510203123512773204e-42 +1.048900000000000049e-08 2.886872989428167958e-42 +1.048949999999999940e-08 2.373756937545868189e-42 +1.048999999999999996e-08 1.951452380295587308e-42 +1.049050000000000053e-08 1.603957328241597243e-42 +1.049099999999999944e-08 1.318077065277897548e-42 +1.049150000000000001e-08 1.082933871581830321e-42 +1.049200000000000058e-08 8.895619804076394333e-43 +1.049249999999999949e-08 7.305730197113720137e-43 +1.049300000000000006e-08 5.998797297653072924e-43 +1.049349999999999897e-08 4.924678526785363077e-43 +1.049399999999999954e-08 4.042078333760344265e-43 +1.049450000000000010e-08 3.316994158035435627e-43 +1.049499999999999902e-08 2.721434140095014928e-43 +1.049549999999999958e-08 2.232359278743484012e-43 +1.049600000000000015e-08 1.830810927980144985e-43 +1.049649999999999906e-08 1.501191308776252564e-43 +1.049699999999999963e-08 1.230670322701811318e-43 +1.049750000000000020e-08 1.008696596314359230e-43 +1.049799999999999911e-08 8.265945243295261086e-44 +1.049849999999999968e-08 6.772322540889774291e-44 +1.049900000000000024e-08 5.547481781559449945e-44 +1.049949999999999916e-08 4.543256709291199464e-44 +1.049999999999999972e-08 3.720075976021575912e-44 +1.050050000000000029e-08 3.045436046522402004e-44 +1.050099999999999920e-08 2.492644242368336001e-44 +1.050149999999999977e-08 2.039784350518444810e-44 +1.050200000000000034e-08 1.668865562555001186e-44 +1.050249999999999925e-08 1.365122395620633508e-44 +1.050299999999999982e-08 1.116438928495205615e-44 +1.050350000000000038e-08 9.128753749907039696e-45 +1.050399999999999930e-08 7.462788849217384177e-45 +1.050449999999999986e-08 6.099636533501857557e-45 +1.050500000000000043e-08 4.984480496942549219e-45 +1.050549999999999934e-08 4.072386473470586091e-45 +1.050599999999999991e-08 3.326528223916735858e-45 +1.050650000000000048e-08 2.716730634453241985e-45 +1.050699999999999939e-08 2.218273486953326956e-45 +1.050749999999999996e-08 1.810909462822943197e-45 +1.050800000000000052e-08 1.478058178485355659e-45 +1.050849999999999944e-08 1.206144832927492889e-45 +1.050900000000000000e-08 9.840576312830617090e-46 +1.050950000000000057e-08 8.027027440960611454e-46 +1.050999999999999948e-08 6.546393437206998822e-46 +1.051050000000000005e-08 5.337803707967772463e-46 +1.051099999999999896e-08 4.351472431068586025e-46 +1.051149999999999953e-08 3.546688239264918564e-46 +1.051200000000000010e-08 2.890166976312770250e-46 +1.051249999999999901e-08 2.354702229684989427e-46 +1.051299999999999958e-08 1.918060036766115189e-46 +1.051350000000000014e-08 1.562073769236006259e-46 +1.051399999999999905e-08 1.271903093584155417e-46 +1.051449999999999962e-08 1.035427389012258801e-46 +1.051500000000000019e-08 8.427493279864401274e-47 +1.051549999999999910e-08 6.857886958322352232e-47 +1.051599999999999967e-08 5.579501138646405415e-47 +1.051650000000000024e-08 4.538512752002946827e-47 +1.051699999999999915e-08 3.691007185176086626e-47 +1.051749999999999971e-08 3.001161470934519206e-47 +1.051800000000000028e-08 2.439759260529528746e-47 +1.051849999999999919e-08 1.982977237636384941e-47 +1.051899999999999976e-08 1.611393561437582000e-47 +1.051950000000000033e-08 1.309177883969692436e-47 +1.051999999999999924e-08 1.063429827334050533e-47 +1.052049999999999981e-08 8.636388206094812976e-48 +1.052100000000000037e-08 7.012431227805347682e-48 +1.052149999999999929e-08 5.692698926515313630e-48 +1.052199999999999985e-08 4.620414703438964636e-48 +1.052250000000000042e-08 3.749357394059479807e-48 +1.052299999999999933e-08 3.041906520403629150e-48 +1.052349999999999990e-08 2.467448112447499747e-48 +1.052400000000000047e-08 2.001074855033195855e-48 +1.052449999999999938e-08 1.622526437422563276e-48 +1.052499999999999995e-08 1.315325894857614105e-48 +1.052550000000000051e-08 1.066075835773832044e-48 +1.052599999999999943e-08 8.638850730875283105e-49 +1.052649999999999999e-08 6.999015922749680235e-49 +1.052700000000000056e-08 5.669322129475370227e-49 +1.052749999999999947e-08 4.591329147206238084e-49 +1.052800000000000004e-08 3.717567500584263716e-49 +1.052850000000000061e-08 3.009486772380950577e-49 +1.052899999999999952e-08 2.435786145300729117e-49 +1.052950000000000009e-08 1.971056230549943612e-49 +1.052999999999999900e-08 1.594674366897686535e-49 +1.053049999999999957e-08 1.289906269857402809e-49 +1.053100000000000013e-08 1.043175635845737433e-49 +1.053149999999999905e-08 8.434704220986405807e-50 +1.053199999999999961e-08 6.818603255964673582e-50 +1.053250000000000018e-08 5.511047145711156588e-50 +1.053299999999999909e-08 4.453341216908780615e-50 +1.053349999999999966e-08 3.597915498991056856e-50 +1.053400000000000023e-08 2.906224016348442631e-50 +1.053449999999999914e-08 2.347039272289653513e-50 +1.053499999999999971e-08 1.895067863378726949e-50 +1.053550000000000027e-08 1.529826988658548624e-50 +1.053599999999999919e-08 1.234732873227655488e-50 +1.053649999999999975e-08 9.963612859256658536e-51 +1.053700000000000032e-08 8.038477846530821750e-51 +1.053749999999999923e-08 6.484013868145372080e-51 +1.053799999999999980e-08 5.229102946901353564e-51 +1.053850000000000037e-08 4.216223164929750601e-51 +1.053899999999999928e-08 3.398858849200297070e-51 +1.053949999999999985e-08 2.739402258301807530e-51 +1.054000000000000041e-08 2.207453839892211297e-51 +1.054049999999999933e-08 1.778445632602376962e-51 +1.054099999999999989e-08 1.432526606198112643e-51 +1.054150000000000046e-08 1.153660283113406830e-51 +1.054199999999999937e-08 9.288943627880763398e-52 +1.054249999999999994e-08 7.477696841561098378e-52 +1.054300000000000051e-08 6.018420417013607825e-52 +1.054349999999999942e-08 4.842953857421642296e-52 +1.054399999999999999e-08 3.896290067647729285e-52 +1.054450000000000055e-08 3.134046044302844538e-52 +1.054499999999999946e-08 2.520418188796749177e-52 +1.054550000000000003e-08 2.026529726144511812e-52 +1.054600000000000060e-08 1.629095309176578736e-52 +1.054649999999999951e-08 1.309342150239011115e-52 +1.054700000000000008e-08 1.052138580013200998e-52 +1.054749999999999899e-08 8.452902966356786392e-53 +1.054799999999999956e-08 6.789721528215339839e-53 +1.054850000000000012e-08 5.452694710020466495e-53 +1.054899999999999904e-08 4.378078496423655857e-53 +1.054949999999999960e-08 3.514544497544952979e-53 +1.055000000000000017e-08 2.820770088460175542e-53 +1.055049999999999908e-08 2.263494659936850929e-53 +1.055099999999999965e-08 1.815952146316641639e-53 +1.055150000000000022e-08 1.456607247888860020e-53 +1.055199999999999913e-08 1.168136715718452487e-53 +1.055249999999999970e-08 9.366083460023773175e-54 +1.055300000000000026e-08 7.508194481898885673e-54 +1.055349999999999918e-08 6.017639192425477233e-54 +1.055399999999999974e-08 4.822030098630781181e-54 +1.055450000000000031e-08 3.863196778483600986e-54 +1.055499999999999922e-08 3.094403080173759400e-54 +1.055549999999999979e-08 2.478107147249356798e-54 +1.055600000000000036e-08 1.984158751777419196e-54 +1.055649999999999927e-08 1.588348856573399041e-54 +1.055699999999999984e-08 1.271242821650379798e-54 +1.055750000000000040e-08 1.017241977773044099e-54 +1.055799999999999932e-08 8.138290247706069846e-55 +1.055849999999999988e-08 6.509613697985743120e-55 +1.055900000000000045e-08 5.205835014583225797e-55 +1.055949999999999936e-08 4.162351232270919486e-55 +1.055999999999999993e-08 3.327363054183474807e-55 +1.056050000000000050e-08 2.659345698882566206e-55 +1.056099999999999941e-08 2.125017663703500730e-55 +1.056149999999999998e-08 1.697709712294758345e-55 +1.056200000000000054e-08 1.356055495644633277e-55 +1.056249999999999946e-08 1.082940595455566114e-55 +1.056300000000000002e-08 8.646591591846293608e-56 +1.056350000000000059e-08 6.902372600657999526e-56 +1.056399999999999950e-08 5.508901330155907558e-56 +1.056450000000000007e-08 4.395868874222287161e-56 +1.056499999999999898e-08 3.507014857468793457e-56 +1.056549999999999955e-08 2.797329487676757156e-56 +1.056600000000000012e-08 2.230811024938308105e-56 +1.056649999999999903e-08 1.778668779229254499e-56 +1.056699999999999960e-08 1.417883416204558703e-56 +1.056750000000000016e-08 1.130053760963678892e-56 +1.056799999999999907e-08 9.004732753874884970e-57 +1.056849999999999964e-08 7.173906175818873167e-57 +1.056900000000000021e-08 5.714177118757644818e-57 +1.056949999999999912e-08 4.550559992484841581e-57 +1.056999999999999969e-08 3.623173505088121492e-57 +1.057050000000000026e-08 2.884207889782436640e-57 +1.057099999999999917e-08 2.295499118422497748e-57 +1.057149999999999973e-08 1.826589013737979494e-57 +1.057200000000000030e-08 1.453174248500655706e-57 +1.057249999999999921e-08 1.155866524861286387e-57 +1.057299999999999978e-08 9.192017033788060212e-58 +1.057350000000000035e-08 7.308480554354054304e-58 +1.057399999999999926e-08 5.809737526346290689e-58 +1.057449999999999983e-08 4.617416703653629126e-58 +1.057500000000000039e-08 3.669059615428850717e-58 +1.057549999999999931e-08 2.914899649507758508e-58 +1.057599999999999987e-08 2.315291027951611943e-58 +1.057650000000000044e-08 1.838656962929664102e-58 +1.057699999999999935e-08 1.459852486037518512e-58 +1.057749999999999992e-08 1.158858412804504105e-58 +1.057800000000000049e-08 9.197396792228885770e-59 +1.057849999999999940e-08 7.298147046218385843e-59 +1.057899999999999997e-08 5.789931649823513034e-59 +1.057950000000000053e-08 4.592481393714086061e-59 +1.057999999999999945e-08 3.641954494745846696e-59 +1.058050000000000001e-08 2.887584924936425352e-59 +1.058100000000000058e-08 2.289012465191133298e-59 +1.058149999999999949e-08 1.814156255539782352e-59 +1.058200000000000006e-08 1.437521552540728836e-59 +1.058249999999999897e-08 1.138851714341272865e-59 +1.058299999999999954e-08 9.020552451945727065e-60 +1.058350000000000011e-08 7.143519482635076930e-60 +1.058399999999999902e-08 5.655935810697541244e-60 +1.058449999999999959e-08 4.477234602666716187e-60 +1.058500000000000015e-08 3.543466834322638227e-60 +1.058549999999999907e-08 2.803883946162236226e-60 +1.058599999999999963e-08 2.218221125027371654e-60 +1.058650000000000020e-08 1.754538009200752799e-60 +1.058699999999999911e-08 1.387502793046985550e-60 +1.058749999999999968e-08 1.097028959372113626e-60 +1.058800000000000025e-08 8.671923929024814866e-61 +1.058849999999999916e-08 6.853713845886718440e-61 +1.058899999999999973e-08 5.415637882244798105e-61 +1.058950000000000029e-08 4.278449478746832242e-61 +1.058999999999999921e-08 3.379374633280913596e-61 +1.059049999999999977e-08 2.668697892210121967e-61 +1.059100000000000034e-08 2.107053808862598951e-61 +1.059149999999999925e-08 1.663278529967613827e-61 +1.059199999999999982e-08 1.312706022431696357e-61 +1.059250000000000039e-08 1.035817191966855221e-61 +1.059299999999999930e-08 8.171690194532057996e-62 +1.059349999999999987e-08 6.445458444255127172e-62 +1.059400000000000043e-08 5.082868490085962506e-62 +1.059449999999999935e-08 4.007532701853079843e-62 +1.059499999999999991e-08 3.159063950846381328e-62 +1.059550000000000048e-08 2.489733721572480358e-62 +1.059599999999999939e-08 1.961826183305379559e-62 +1.059649999999999996e-08 1.545543712057904460e-62 +1.059700000000000053e-08 1.217349270237449708e-62 +1.059749999999999944e-08 9.586547931171858103e-63 +1.059800000000000001e-08 7.547835690272156462e-63 +1.059850000000000057e-08 5.941495436197528425e-63 +1.059899999999999948e-08 4.676083303754046948e-63 +1.059950000000000005e-08 3.679441074164087911e-63 +1.059999999999999896e-08 2.894640311650028066e-63 +1.060049999999999953e-08 2.276777027822625585e-63 +1.060100000000000010e-08 1.790439031233951103e-63 +1.060149999999999901e-08 1.407705196919419207e-63 +1.060199999999999958e-08 1.106565261210069193e-63 +1.060250000000000014e-08 8.696720074264611554e-64 +1.060299999999999906e-08 6.833561257113191774e-64 +1.060349999999999962e-08 5.368486104875371218e-64 +1.060400000000000019e-08 4.216670989230940377e-64 +1.060449999999999910e-08 3.311316854863099237e-64 +1.060499999999999967e-08 2.599829722714621869e-64 +1.060550000000000024e-08 2.040808293365688781e-64 +1.060599999999999915e-08 1.601668585248736304e-64 +1.060649999999999972e-08 1.256771274480053837e-64 +1.060700000000000028e-08 9.859456492324386775e-65 +1.060749999999999920e-08 7.733264155954849969e-65 +1.060799999999999976e-08 6.064372318429599173e-65 +1.060850000000000033e-08 4.754687837914140272e-65 +1.060899999999999924e-08 3.727102211083126516e-65 +1.060949999999999981e-08 2.921014666984181530e-65 +1.061000000000000038e-08 2.288807740412301440e-65 +1.061049999999999929e-08 1.793073245528855730e-65 +1.061099999999999986e-08 1.404429323196464271e-65 +1.061150000000000042e-08 1.099802968937536073e-65 +1.061199999999999934e-08 8.610790599330317351e-66 +1.061249999999999990e-08 6.740378884132165069e-66 +1.061300000000000047e-08 5.275197595941902526e-66 +1.061349999999999938e-08 4.127682607921936783e-66 +1.061399999999999995e-08 3.229140935463912314e-66 +1.061450000000000052e-08 2.525694659608222371e-66 +1.061499999999999943e-08 1.975094287277897472e-66 +1.061550000000000000e-08 1.544215690255157529e-66 +1.061600000000000056e-08 1.207094385648403797e-66 +1.061649999999999948e-08 9.433821187199828630e-67 +1.061700000000000004e-08 7.371352698950125220e-67 +1.061750000000000061e-08 5.758639394667979148e-67 +1.061799999999999952e-08 4.497857762284262709e-67 +1.061850000000000009e-08 3.512405852005458669e-67 +1.061899999999999900e-08 2.742311644532402169e-67 +1.061949999999999957e-08 2.140632252734372209e-67 +1.062000000000000014e-08 1.670630718041401200e-67 +1.062049999999999905e-08 1.303562929559016726e-67 +1.062099999999999962e-08 1.016943165053197899e-67 +1.062150000000000018e-08 7.931850189235736229e-68 +1.062199999999999910e-08 6.185366891172754558e-68 +1.062249999999999966e-08 4.822470379320115371e-68 +1.062300000000000023e-08 3.759125398621702805e-68 +1.062349999999999914e-08 2.929659848406426330e-68 +1.062399999999999971e-08 2.282762480013415558e-68 +1.062450000000000028e-08 1.778350632171857809e-68 +1.062499999999999919e-08 1.385119369923310375e-68 +1.062549999999999976e-08 1.078624182131851610e-68 +1.062600000000000032e-08 8.397813854742086065e-69 +1.062649999999999923e-08 6.536954711553319754e-69 +1.062699999999999980e-08 5.087423005445284462e-69 +1.062750000000000037e-08 3.958524744501493715e-69 +1.062799999999999928e-08 3.079512842911137441e-69 +1.062849999999999985e-08 2.395211214127819677e-69 +1.062900000000000042e-08 1.862596378147389334e-69 +1.062949999999999933e-08 1.448127607185047003e-69 +1.062999999999999989e-08 1.125662123320833685e-69 +1.063050000000000046e-08 8.748274750725848380e-70 +1.063099999999999937e-08 6.797510957980841115e-70 +1.063149999999999994e-08 5.280688619549239848e-70 +1.063200000000000051e-08 4.101515377054313275e-70 +1.063249999999999942e-08 3.185013442510341657e-70 +1.063299999999999999e-08 2.472813347586222578e-70 +1.063350000000000055e-08 1.919484210496571712e-70 +1.063399999999999947e-08 1.489672816470849753e-70 +1.063450000000000003e-08 1.155873701568939033e-70 +1.063500000000000060e-08 8.966914191664810817e-71 +1.063549999999999951e-08 6.954866306726429106e-71 +1.063600000000000008e-08 5.393214571364916298e-71 +1.063649999999999899e-08 4.181381116369765343e-71 +1.063699999999999956e-08 3.241193423524824869e-71 +1.063750000000000013e-08 2.511905434956037136e-71 +1.063799999999999904e-08 1.946322320902565091e-71 +1.063849999999999961e-08 1.507784873497708037e-71 +1.063900000000000017e-08 1.167823316188880635e-71 +1.063949999999999909e-08 9.043323001956237840e-72 +1.063999999999999965e-08 7.001515989749221717e-72 +1.064050000000000022e-08 5.419625383195806303e-72 +1.064099999999999913e-08 4.194300985208123742e-72 +1.064149999999999970e-08 3.245361335989524378e-72 +1.064200000000000027e-08 2.510612370181764113e-72 +1.064249999999999918e-08 1.941821976674837675e-72 +1.064299999999999975e-08 1.501593226720227644e-72 +1.064350000000000031e-08 1.160936138461649825e-72 +1.064399999999999923e-08 8.973823043546974573e-73 +1.064449999999999979e-08 6.935213149105050394e-73 +1.064500000000000036e-08 5.358648450694846998e-73 +1.064549999999999927e-08 4.139652257621718939e-73 +1.064599999999999984e-08 3.197316258047213496e-73 +1.064650000000000041e-08 2.468996489583747866e-73 +1.064699999999999932e-08 1.906200108738088279e-73 +1.064749999999999989e-08 1.471396262721568832e-73 +1.064800000000000045e-08 1.135543951515565078e-73 +1.064849999999999937e-08 8.761760732044099816e-74 +1.064899999999999993e-08 6.759148236237467295e-74 +1.064950000000000050e-08 5.213215696368261237e-74 +1.064999999999999941e-08 4.020060215745069095e-74 +1.065049999999999998e-08 3.099363852492526187e-74 +1.065100000000000055e-08 2.389052590150767936e-74 +1.065149999999999946e-08 1.841161977032774867e-74 +1.065200000000000003e-08 1.418637468236908500e-74 +1.065250000000000059e-08 1.092858654034892502e-74 +1.065299999999999951e-08 8.417239924317705993e-75 +1.065350000000000007e-08 6.481694509464060330e-75 +1.065399999999999898e-08 4.990229868599752969e-75 +1.065449999999999955e-08 3.841189078608511379e-75 +1.065500000000000012e-08 2.956132938647256696e-75 +1.065549999999999903e-08 2.274549417520541064e-75 +1.065599999999999960e-08 1.749765842249173743e-75 +1.065650000000000017e-08 1.345791040745011428e-75 +1.065699999999999908e-08 1.034876374394812236e-75 +1.065749999999999964e-08 7.956323867951625891e-76 +1.065800000000000021e-08 6.115747900499603116e-76 +1.065849999999999912e-08 4.700021426559460640e-76 +1.065899999999999969e-08 3.611297288723552865e-76 +1.065950000000000026e-08 2.774212900615912777e-76 +1.065999999999999917e-08 2.130735163911628608e-76 +1.066049999999999974e-08 1.636184599258616759e-76 +1.066100000000000030e-08 1.256169570819553057e-76 +1.066149999999999922e-08 9.642227597840328485e-77 +1.066199999999999978e-08 7.399793989321727494e-77 +1.066250000000000035e-08 5.677733722186020443e-77 +1.066299999999999926e-08 4.355555516712023773e-77 +1.066349999999999983e-08 3.340605775795562369e-77 +1.066400000000000040e-08 2.561651481712662663e-77 +1.066449999999999931e-08 1.963939019944207746e-77 +1.066499999999999988e-08 1.505390240408133554e-77 +1.066550000000000044e-08 1.153674609177154607e-77 +1.066599999999999936e-08 8.839561342560382956e-78 +1.066649999999999992e-08 6.771599036772189380e-78 +1.066700000000000049e-08 5.186386715866475790e-78 +1.066749999999999940e-08 3.971473774067797912e-78 +1.066799999999999997e-08 3.040546452985098822e-78 +1.066850000000000054e-08 2.327366226979591943e-78 +1.066899999999999945e-08 1.781110869326650760e-78 +1.066950000000000002e-08 1.362794339936796206e-78 +1.067000000000000058e-08 1.042516241071973598e-78 +1.067049999999999950e-08 7.973490458310733223e-79 +1.067100000000000006e-08 6.097155473067820101e-79 +1.067149999999999898e-08 4.661430365987543149e-79 +1.067199999999999954e-08 3.563069336320706162e-79 +1.067250000000000011e-08 2.722967685909721228e-79 +1.067299999999999902e-08 2.080529329201266001e-79 +1.067349999999999959e-08 1.589345579885273316e-79 +1.067400000000000016e-08 1.213880613695983854e-79 +1.067449999999999907e-08 9.269296062433135789e-80 +1.067499999999999964e-08 7.076698175431761879e-80 +1.067550000000000020e-08 5.401666081116679458e-80 +1.067599999999999912e-08 4.122284250785298456e-80 +1.067649999999999968e-08 3.145294226535605369e-80 +1.067700000000000025e-08 2.399372967132122149e-80 +1.067749999999999916e-08 1.829984395054284082e-80 +1.067799999999999973e-08 1.395436737180684732e-80 +1.067850000000000030e-08 1.063863868424131627e-80 +1.067899999999999921e-08 8.109145773201540944e-81 +1.067949999999999978e-08 6.179840935325985335e-81 +1.068000000000000034e-08 4.708608986790512289e-81 +1.068049999999999926e-08 3.586915110948044546e-81 +1.068099999999999982e-08 2.731886872433503247e-81 +1.068150000000000039e-08 2.080259264869999442e-81 +1.068199999999999930e-08 1.583745375242994589e-81 +1.068249999999999987e-08 1.205497726283061446e-81 +1.068300000000000044e-08 9.174038800016323682e-82 +1.068349999999999935e-08 6.980200389867359651e-82 +1.068399999999999992e-08 5.309924546806536187e-82 +1.068450000000000048e-08 4.038517323632868483e-82 +1.068499999999999939e-08 3.070921334435991242e-82 +1.068549999999999996e-08 2.334686510848987856e-82 +1.068600000000000053e-08 1.774604578638040809e-82 +1.068649999999999944e-08 1.348614306286075486e-82 +1.068700000000000001e-08 1.024677189087859185e-82 +1.068750000000000058e-08 7.783940636499368996e-83 +1.068799999999999949e-08 5.911873099455949188e-83 +1.068850000000000005e-08 4.489147056240291694e-83 +1.068899999999999897e-08 3.408126471656962694e-83 +1.068949999999999953e-08 2.586906391880669209e-83 +1.069000000000000010e-08 1.963174328444631248e-83 +1.069049999999999901e-08 1.489533105004756929e-83 +1.069099999999999958e-08 1.129937948637323351e-83 +1.069150000000000015e-08 8.569829277789295401e-84 +1.069199999999999906e-08 6.498346835155683295e-84 +1.069249999999999963e-08 4.926593676907689712e-84 +1.069300000000000019e-08 3.734253048238120201e-84 +1.069349999999999911e-08 2.829918213744051454e-84 +1.069399999999999967e-08 2.144159880378087485e-84 +1.069450000000000024e-08 1.624252664943781175e-84 +1.069499999999999915e-08 1.230164390787360011e-84 +1.069549999999999972e-08 9.315064277826080214e-85 +1.069600000000000029e-08 7.052152606636807960e-85 +1.069649999999999920e-08 5.337903134926659507e-85 +1.069699999999999977e-08 4.039548403827037289e-85 +1.069750000000000033e-08 3.056385181699625057e-85 +1.069799999999999925e-08 2.312046133378431989e-85 +1.069849999999999981e-08 1.748630490131004855e-85 +1.069900000000000038e-08 1.322247452727315100e-85 +1.069949999999999929e-08 9.996329718657319784e-86 +1.069999999999999986e-08 7.555819019713678231e-86 +1.070050000000000043e-08 5.709994140514751122e-86 +1.070099999999999934e-08 4.314226273169487277e-86 +1.070149999999999991e-08 3.258992170694368470e-86 +1.070200000000000047e-08 2.461369734151322364e-86 +1.070249999999999939e-08 1.858589743060353669e-86 +1.070299999999999995e-08 1.403147598267235959e-86 +1.070350000000000052e-08 1.059098418362740839e-86 +1.070399999999999943e-08 7.992495912081670856e-87 +1.070450000000000000e-08 6.030338170332621092e-87 +1.070500000000000057e-08 4.548980265998184071e-87 +1.070549999999999948e-08 3.430833005649653824e-87 +1.070600000000000005e-08 2.587010832511424456e-87 +1.070649999999999896e-08 1.950338779343916215e-87 +1.070699999999999953e-08 1.470059815063782244e-87 +1.070750000000000009e-08 1.107829937442375821e-87 +1.070799999999999901e-08 8.346883064425042658e-88 +1.070849999999999957e-08 6.287654976527748657e-88 +1.070900000000000014e-08 4.735504099960124466e-88 +1.070949999999999905e-08 3.565799111610179038e-88 +1.070999999999999962e-08 2.684483067826983253e-88 +1.071050000000000019e-08 2.020587242910528487e-88 +1.071099999999999910e-08 1.520574438418632456e-88 +1.071149999999999967e-08 1.144065542230889108e-88 +1.071200000000000023e-08 8.606117404314539223e-89 +1.071249999999999914e-08 6.472570187051866631e-89 +1.071299999999999971e-08 4.866978320576255599e-89 +1.071350000000000028e-08 3.658939226098920539e-89 +1.071399999999999919e-08 2.750199010379112310e-89 +1.071449999999999976e-08 2.066741632406969118e-89 +1.071500000000000033e-08 1.552820999583982816e-89 +1.071549999999999924e-08 1.166459714441508249e-89 +1.071599999999999980e-08 8.760547206251087178e-90 +1.071650000000000037e-08 6.578181698033408973e-90 +1.071699999999999928e-08 4.938483841741489710e-90 +1.071749999999999985e-08 3.706760703435213902e-90 +1.071800000000000042e-08 2.781689201090553860e-90 +1.071849999999999933e-08 2.087064158224458415e-90 +1.071899999999999990e-08 1.565583142280783645e-90 +1.071950000000000046e-08 1.174166306598419677e-90 +1.071999999999999938e-08 8.804328384710388320e-91 +1.072049999999999994e-08 6.600487186591494050e-91 +1.072100000000000051e-08 4.947307367709310527e-91 +1.072149999999999942e-08 3.707446862372703016e-91 +1.072199999999999999e-08 2.777756152657291453e-91 +1.072250000000000056e-08 2.080781329701405579e-91 +1.072299999999999947e-08 1.558374767452414905e-91 +1.072350000000000004e-08 1.166891601417244912e-91 +1.072400000000000060e-08 8.735791530509602760e-92 +1.072449999999999952e-08 6.538635832786579778e-92 +1.072500000000000008e-08 4.893112262097779219e-92 +1.072549999999999900e-08 3.660971522344311571e-92 +1.072599999999999956e-08 2.738549923887786452e-92 +1.072650000000000013e-08 2.048132813573561671e-92 +1.072699999999999904e-08 1.531470761129564496e-92 +1.072749999999999961e-08 1.144912889934852696e-92 +1.072800000000000018e-08 8.557547554365513886e-93 +1.072849999999999909e-08 6.394982179820989210e-93 +1.072899999999999966e-08 4.777959862785009489e-93 +1.072950000000000022e-08 3.569100661275047861e-93 +1.072999999999999914e-08 2.665558618098115953e-93 +1.073049999999999970e-08 1.990356261209372524e-93 +1.073100000000000027e-08 1.485889597497277891e-93 +1.073149999999999918e-08 1.109060930220921709e-93 +1.073199999999999975e-08 8.276322617656100286e-94 +1.073250000000000032e-08 6.174937379186771448e-94 +1.073299999999999923e-08 4.606179361327374948e-94 +1.073349999999999980e-08 3.435281048653974492e-94 +1.073400000000000036e-08 2.561514644247747923e-94 +1.073449999999999928e-08 1.909609443756105434e-94 +1.073499999999999984e-08 1.423329352087823014e-94 +1.073550000000000041e-08 1.060667833605038473e-94 +1.073599999999999932e-08 7.902536899444836737e-95 +1.073649999999999989e-08 5.886630922504429608e-95 +1.073700000000000046e-08 4.384097697601472594e-95 +1.073749999999999937e-08 3.264425644645835334e-95 +1.073799999999999994e-08 2.430224972722910577e-95 +1.073850000000000050e-08 1.808836524476996770e-95 +1.073899999999999942e-08 1.346062729385432833e-95 +1.073949999999999998e-08 1.001484935861533091e-95 +1.074000000000000055e-08 7.449663975602064996e-96 +1.074049999999999946e-08 5.540412339094083345e-96 +1.074100000000000003e-08 4.119652962573062895e-96 +1.074150000000000060e-08 3.062614391280694713e-96 +1.074199999999999951e-08 2.276340085216583691e-96 +1.074250000000000008e-08 1.691590020963464262e-96 +1.074299999999999899e-08 1.256800150149742135e-96 +1.074349999999999955e-08 9.335777109755366636e-97 +1.074400000000000012e-08 6.933425702473204815e-97 +1.074449999999999903e-08 5.148235426971435689e-97 +1.074499999999999960e-08 3.821924228090379412e-97 +1.074550000000000017e-08 2.836735787162116701e-97 +1.074599999999999908e-08 2.105081156237251605e-97 +1.074649999999999965e-08 1.561823455563932565e-97 +1.074700000000000021e-08 1.158532386936715545e-97 +1.074749999999999913e-08 8.592065090236713127e-98 +1.074799999999999969e-08 6.370889593326208828e-98 +1.074850000000000026e-08 4.722976019040060377e-98 +1.074899999999999917e-08 3.500616561526599714e-98 +1.074949999999999974e-08 2.594098645269015236e-98 +1.075000000000000031e-08 1.921947727823739657e-98 +1.075049999999999922e-08 1.423671521699838940e-98 +1.075099999999999979e-08 1.054365446455429443e-98 +1.075150000000000035e-08 7.807026850445279449e-99 +1.075199999999999927e-08 5.779540645395157923e-99 +1.075249999999999983e-08 4.277737320685820684e-99 +1.075300000000000040e-08 3.165541738685474816e-99 +1.075349999999999931e-08 2.342044360793782364e-99 +1.075399999999999988e-08 1.732428543348311719e-99 +1.075450000000000045e-08 1.281234679552150476e-99 +1.075499999999999936e-08 9.473602999434265166e-100 +1.075549999999999993e-08 7.003494924619930813e-100 +1.075600000000000049e-08 5.176397232899338202e-100 +1.075649999999999941e-08 3.825194437825980497e-100 +1.075699999999999997e-08 2.826132867915849950e-100 +1.075750000000000054e-08 2.087587930820298731e-100 +1.075799999999999945e-08 1.541736377952114848e-100 +1.075850000000000002e-08 1.138383529305362641e-100 +1.075900000000000059e-08 8.403887466282653165e-101 +1.075949999999999950e-08 6.202760236403306057e-101 +1.076000000000000007e-08 4.577231742705006077e-101 +1.076049999999999898e-08 3.377022460488027122e-101 +1.076099999999999955e-08 2.491025299020938710e-101 +1.076150000000000011e-08 1.837111300157949965e-101 +1.076199999999999903e-08 1.354583994954648229e-101 +1.076249999999999959e-08 9.985953798027161153e-102 +1.076300000000000016e-08 7.360143908925247552e-102 +1.076349999999999907e-08 5.423706758039795254e-102 +1.076399999999999964e-08 3.995942556341376507e-102 +1.076450000000000021e-08 2.943441530621546648e-102 +1.076499999999999912e-08 2.167727720236234836e-102 +1.076549999999999969e-08 1.596126067217898772e-102 +1.076600000000000025e-08 1.175013321986472400e-102 +1.076649999999999916e-08 8.648315640900315707e-103 +1.076699999999999973e-08 6.364047525965991121e-103 +1.076750000000000030e-08 4.682183581625567574e-103 +1.076799999999999921e-08 3.444106737488545321e-103 +1.076849999999999978e-08 2.532899207267193660e-103 +1.076900000000000035e-08 1.862397392328276632e-103 +1.076949999999999926e-08 1.369115044752562270e-103 +1.076999999999999982e-08 1.006284241897933433e-103 +1.077050000000000039e-08 7.394597539688451931e-104 +1.077099999999999930e-08 5.432772926055860411e-104 +1.077149999999999987e-08 3.990632227595914396e-104 +1.077200000000000044e-08 2.930724527235782433e-104 +1.077249999999999935e-08 2.151896769060023589e-104 +1.077299999999999992e-08 1.579723246701426654e-104 +1.077350000000000048e-08 1.159454541148188232e-104 +1.077399999999999940e-08 8.508237096056991706e-105 +1.077449999999999996e-08 6.242212983959196869e-105 +1.077500000000000053e-08 4.578789969290796815e-105 +1.077549999999999944e-08 3.357963753003139887e-105 +1.077600000000000001e-08 2.462149538081539627e-105 +1.077650000000000058e-08 1.804953382126502340e-105 +1.077699999999999949e-08 1.322911202217889757e-105 +1.077750000000000006e-08 9.694123307938459089e-106 +1.077799999999999897e-08 7.102308395767493534e-106 +1.077849999999999954e-08 5.202398958461334021e-106 +1.077900000000000010e-08 3.809964446123390470e-106 +1.077949999999999902e-08 2.789660370359776739e-106 +1.077999999999999958e-08 2.042184069329549326e-106 +1.078050000000000015e-08 1.494691539363182067e-106 +1.078099999999999906e-08 1.093758420463554427e-106 +1.078149999999999963e-08 8.002107547028559195e-107 +1.078200000000000020e-08 5.853296169608116605e-107 +1.078249999999999911e-08 4.280650355901622015e-107 +1.078299999999999968e-08 3.129912191620728966e-107 +1.078350000000000024e-08 2.288061495048580832e-107 +1.078399999999999916e-08 1.672308404931725276e-107 +1.078449999999999972e-08 1.222019661666245141e-107 +1.078500000000000029e-08 8.927978909570690352e-108 +1.078549999999999920e-08 6.521406303213455454e-108 +1.078599999999999977e-08 4.762582405795087575e-108 +1.078650000000000034e-08 3.477417926896238769e-108 +1.078699999999999925e-08 2.538542362720237864e-108 +1.078749999999999982e-08 1.852785242433865763e-108 +1.078800000000000038e-08 1.352006848892521052e-108 +1.078849999999999930e-08 9.863835967872840452e-109 +1.078899999999999986e-08 7.194919387757279364e-109 +1.078950000000000043e-08 5.247097866100686784e-109 +1.078999999999999934e-08 3.825828848994084510e-109 +1.079049999999999991e-08 2.788977765360282310e-109 +1.079100000000000048e-08 2.032720688454461278e-109 +1.079149999999999939e-08 1.481233425572118622e-109 +1.079199999999999996e-08 1.079151556273893468e-109 +1.079250000000000052e-08 7.860578697325847034e-110 +1.079299999999999944e-08 5.724528736854900554e-110 +1.079350000000000000e-08 4.168099720151524468e-110 +1.079400000000000057e-08 3.034237718414020936e-110 +1.079449999999999948e-08 2.208382239937000367e-110 +1.079500000000000005e-08 1.606985766204829107e-110 +1.079549999999999896e-08 1.169130405547576848e-110 +1.079599999999999953e-08 8.504073826094768152e-111 +1.079650000000000010e-08 6.184494808152880604e-111 +1.079699999999999901e-08 4.496706870591087522e-111 +1.079749999999999957e-08 3.268873147600262088e-111 +1.079800000000000014e-08 2.375826370257267582e-111 +1.079849999999999905e-08 1.726412096613167242e-111 +1.079899999999999962e-08 1.254259454518508337e-111 +1.079950000000000019e-08 9.110525699165494207e-112 +1.079999999999999910e-08 6.616261056714374139e-112 +1.080049999999999967e-08 4.803911180221166923e-112 +1.080100000000000023e-08 3.487309128020827582e-112 +1.080149999999999915e-08 2.531040328695265725e-112 +1.080199999999999971e-08 1.836626408911420431e-112 +1.080250000000000028e-08 1.332464740218268227e-112 +1.080299999999999919e-08 9.665042484220584859e-113 +1.080349999999999976e-08 7.009143481370870610e-113 +1.080400000000000033e-08 5.082053988553690146e-113 +1.080449999999999924e-08 3.684060381014531752e-113 +1.080499999999999981e-08 2.670098887724910365e-113 +1.080550000000000037e-08 1.934822340027075403e-113 +1.080599999999999929e-08 1.401741662844931423e-113 +1.080649999999999985e-08 1.015331853508964139e-113 +1.080700000000000042e-08 7.352942706434148827e-114 +1.080749999999999933e-08 5.323870632571981117e-114 +1.080799999999999990e-08 3.853957726974803742e-114 +1.080850000000000047e-08 2.789327706323761537e-114 +1.080899999999999938e-08 2.018390882861527533e-114 +1.080949999999999995e-08 1.460239701452540869e-114 +1.081000000000000051e-08 1.056224335160389612e-114 +1.081049999999999943e-08 7.638381187815745661e-115 +1.081099999999999999e-08 5.522803955737763121e-115 +1.081150000000000056e-08 3.992372614165253888e-115 +1.081199999999999947e-08 2.885463929013824800e-115 +1.081250000000000004e-08 2.085035109745303393e-115 +1.081300000000000061e-08 1.506344258136751027e-115 +1.081349999999999952e-08 1.088048466999074576e-115 +1.081400000000000009e-08 7.857518053568344349e-116 +1.081449999999999900e-08 5.673299025842776983e-116 +1.081499999999999957e-08 4.095426188845695939e-116 +1.081550000000000013e-08 2.955804272644580013e-116 +1.081599999999999905e-08 2.132874898570716881e-116 +1.081649999999999961e-08 1.538750598255683569e-116 +1.081700000000000018e-08 1.109900961322026719e-116 +1.081749999999999909e-08 8.004115767352383127e-117 +1.081799999999999966e-08 5.771060622220111071e-117 +1.081850000000000023e-08 4.160169756549039523e-117 +1.081899999999999914e-08 2.998331239207075579e-117 +1.081949999999999971e-08 2.160535008839523817e-117 +1.082000000000000027e-08 1.556525167880550804e-117 +1.082049999999999919e-08 1.121151049471603211e-117 +1.082099999999999975e-08 8.073935011561579783e-118 +1.082150000000000032e-08 5.813256850626884016e-118 +1.082199999999999923e-08 4.184724926298050235e-118 +1.082249999999999980e-08 3.011809236081749707e-118 +1.082300000000000037e-08 2.167210752608074592e-118 +1.082349999999999928e-08 1.559150268685270705e-118 +1.082399999999999985e-08 1.121470727347357906e-118 +1.082450000000000041e-08 8.064938341005398406e-119 +1.082499999999999932e-08 5.798655418567663302e-119 +1.082549999999999989e-08 4.168374144143465698e-119 +1.082600000000000046e-08 2.995844213956811425e-119 +1.082649999999999937e-08 2.152706884504327554e-119 +1.082699999999999994e-08 1.546549107024003894e-119 +1.082750000000000051e-08 1.110850642349521812e-119 +1.082799999999999942e-08 7.977388954896384767e-120 +1.082849999999999998e-08 5.727683420053916684e-120 +1.082900000000000055e-08 4.111595527110604293e-120 +1.082949999999999946e-08 2.950902805473329180e-120 +1.083000000000000003e-08 2.117447088023882999e-120 +1.083050000000000060e-08 1.519089525923342822e-120 +1.083099999999999951e-08 1.089600547930427748e-120 +1.083150000000000008e-08 7.813837905305203474e-121 +1.083199999999999899e-08 5.602406582382283763e-121 +1.083249999999999956e-08 4.016039637676203580e-121 +1.083300000000000012e-08 2.878289667474329806e-121 +1.083349999999999904e-08 2.062453414949254440e-121 +1.083399999999999960e-08 1.477566166859663945e-121 +1.083450000000000017e-08 1.058334294938637708e-121 +1.083499999999999908e-08 7.579000609688389599e-122 +1.083549999999999965e-08 5.426429381996398724e-122 +1.083600000000000022e-08 3.884449773216202636e-122 +1.083649999999999913e-08 2.780084562135599488e-122 +1.083699999999999970e-08 1.989297070187339358e-122 +1.083750000000000026e-08 1.423162268485266980e-122 +1.083799999999999918e-08 1.017940374580830073e-122 +1.083849999999999974e-08 7.279531008819260956e-123 +1.083900000000000031e-08 5.204722769307541173e-123 +1.083949999999999922e-08 3.720531142252465135e-123 +1.083999999999999979e-08 2.659043411207159525e-123 +1.084050000000000036e-08 1.900023849130502604e-123 +1.084099999999999927e-08 1.357393665002906252e-123 +1.084149999999999984e-08 9.695399854935846551e-124 +1.084200000000000040e-08 6.923708463830867316e-124 +1.084249999999999932e-08 4.943390991625033395e-124 +1.084299999999999988e-08 3.528777632607369914e-124 +1.084350000000000045e-08 2.518469891658346293e-124 +1.084399999999999936e-08 1.797059164433053187e-124 +1.084449999999999993e-08 1.282038682066236557e-124 +1.084500000000000050e-08 9.144353859191761264e-125 +1.084549999999999941e-08 6.521057944854012348e-125 +1.084599999999999998e-08 4.649392771304944034e-125 +1.084650000000000054e-08 3.314267467995180784e-125 +1.084699999999999946e-08 2.362065916028016238e-125 +1.084750000000000002e-08 1.683098810226941428e-125 +1.084800000000000059e-08 1.199058450528605503e-125 +1.084849999999999950e-08 8.540518474439022425e-126 +1.084900000000000007e-08 6.081927794892318112e-126 +1.084949999999999898e-08 4.330234585127086336e-126 +1.084999999999999955e-08 3.082440696950675251e-126 +1.085050000000000012e-08 2.193770421752905121e-126 +1.085099999999999903e-08 1.560992313213621563e-126 +1.085149999999999960e-08 1.110512607464664118e-126 +1.085200000000000016e-08 7.898768097149543785e-127 +1.085249999999999907e-08 5.617051096364374578e-127 +1.085299999999999964e-08 3.993654834466561074e-127 +1.085350000000000021e-08 2.838872056968833087e-127 +1.085399999999999912e-08 2.017596215018367623e-127 +1.085449999999999969e-08 1.433625872420766830e-127 +1.085500000000000026e-08 1.018475407146811976e-127 +1.085549999999999917e-08 7.233998334072897679e-128 +1.085599999999999973e-08 5.137116363373624034e-128 +1.085650000000000030e-08 3.647317271476639102e-128 +1.085699999999999921e-08 2.589052304720873558e-128 +1.085749999999999978e-08 1.837474185388725825e-128 +1.085800000000000035e-08 1.303811507036893184e-128 +1.085849999999999926e-08 9.249569373575335507e-129 +1.085899999999999983e-08 6.560566764373701998e-129 +1.085950000000000039e-08 4.652371065646716769e-129 +1.085999999999999931e-08 3.298530268994846513e-129 +1.086049999999999987e-08 2.338189697075476889e-129 +1.086100000000000044e-08 1.657113107013763210e-129 +1.086149999999999935e-08 1.174188177726099739e-129 +1.086199999999999992e-08 8.318334788814695158e-130 +1.086250000000000049e-08 5.891803155253013884e-130 +1.086299999999999940e-08 4.172277664550524151e-130 +1.086349999999999997e-08 2.954005627720882074e-130 +1.086400000000000053e-08 2.091041127821867971e-130 +1.086449999999999945e-08 1.479881606882429971e-130 +1.086500000000000001e-08 1.047139425015086562e-130 +1.086550000000000058e-08 7.407901362217207394e-131 +1.086599999999999949e-08 5.239610598040420129e-131 +1.086650000000000006e-08 3.705236844033893042e-131 +1.086699999999999897e-08 2.619666926026606640e-131 +1.086749999999999954e-08 1.851779710287897877e-131 +1.086800000000000011e-08 1.308716887758037581e-131 +1.086849999999999902e-08 9.247306086493128634e-132 +1.086899999999999959e-08 6.532778008223787783e-132 +1.086950000000000015e-08 4.614171253922112290e-132 +1.086999999999999907e-08 3.258386959462328148e-132 +1.087049999999999963e-08 2.300513307513234701e-132 +1.087100000000000020e-08 1.623902617282582997e-132 +1.087149999999999911e-08 1.146062638544758829e-132 +1.087199999999999968e-08 8.086672758845792983e-133 +1.087250000000000025e-08 5.704853867692099376e-133 +1.087299999999999916e-08 4.023762331114509445e-133 +1.087349999999999973e-08 2.837482933626394370e-133 +1.087400000000000029e-08 2.000540448304152546e-133 +1.087449999999999921e-08 1.410180017475022492e-133 +1.087499999999999977e-08 9.938364413487074056e-134 +1.087550000000000034e-08 7.002746723778599471e-134 +1.087599999999999925e-08 4.933272007945600730e-134 +1.087649999999999982e-08 3.474680252806732619e-134 +1.087700000000000039e-08 2.446852393438549242e-134 +1.087749999999999930e-08 1.722716596111027066e-134 +1.087799999999999987e-08 1.212643225773171907e-134 +1.087850000000000043e-08 8.534250642398230805e-135 +1.087899999999999935e-08 6.004970567554549852e-135 +1.087949999999999991e-08 4.224443576204354653e-135 +1.088000000000000048e-08 2.971264305128671633e-135 +1.088049999999999939e-08 2.089422170271882652e-135 +1.088099999999999996e-08 1.469008310163325139e-135 +1.088150000000000053e-08 1.032607910502734059e-135 +1.088199999999999944e-08 7.257044463011620844e-136 +1.088250000000000001e-08 5.099143819921766893e-136 +1.088300000000000057e-08 3.582183917322722679e-136 +1.088349999999999948e-08 2.516005807821787658e-136 +1.088400000000000005e-08 1.766804675754197994e-136 +1.088449999999999896e-08 1.240448052720623783e-136 +1.088499999999999953e-08 8.707265048059878992e-137 +1.088550000000000010e-08 6.110800260777812027e-137 +1.088599999999999901e-08 4.287731221218750037e-137 +1.088649999999999958e-08 3.007946861433578373e-137 +1.088700000000000014e-08 2.109725280475002177e-137 +1.088749999999999906e-08 1.479431274866518322e-137 +1.088799999999999962e-08 1.037234192382616884e-137 +1.088850000000000019e-08 7.270629184896428570e-138 +1.088899999999999910e-08 5.095423750960682214e-138 +1.088949999999999967e-08 3.570275748121196138e-138 +1.089000000000000024e-08 2.501130508793429900e-138 +1.089049999999999915e-08 1.751798252461682624e-138 +1.089099999999999972e-08 1.226718641224615395e-138 +1.089150000000000028e-08 8.588532868917061426e-139 +1.089199999999999920e-08 6.011822373769918409e-139 +1.089249999999999976e-08 4.207328670258981169e-139 +1.089300000000000033e-08 2.943878489807523829e-139 +1.089349999999999924e-08 2.059427282973038315e-139 +1.089399999999999981e-08 1.440410188532697844e-139 +1.089450000000000038e-08 1.007254110679160199e-139 +1.089499999999999929e-08 7.042146464096687514e-140 +1.089549999999999986e-08 4.922482710416272333e-140 +1.089600000000000042e-08 3.440142927335726063e-140 +1.089649999999999934e-08 2.403709139592810465e-140 +1.089699999999999990e-08 1.679192493392223122e-140 +1.089750000000000047e-08 1.172822244727309213e-140 +1.089799999999999938e-08 8.189870716105398993e-141 +1.089849999999999995e-08 5.717880027672337442e-141 +1.089900000000000052e-08 3.991224644122019947e-141 +1.089949999999999943e-08 2.785418446439971151e-141 +1.090000000000000000e-08 1.943514850049624052e-141 +1.090050000000000056e-08 1.355808712596059563e-141 +1.090099999999999948e-08 9.456319093293801883e-142 +1.090150000000000004e-08 6.594152062723786047e-142 +1.090199999999999896e-08 4.597364502909524144e-142 +1.090249999999999952e-08 3.204586949496075506e-142 +1.090300000000000009e-08 2.233306460745996114e-142 +1.090349999999999900e-08 1.556100800009993210e-142 +1.090399999999999957e-08 1.084027427864109361e-142 +1.090450000000000014e-08 7.550156550025084964e-143 +1.090499999999999905e-08 5.257566610605556359e-143 +1.090549999999999962e-08 3.660384871927094068e-143 +1.090600000000000018e-08 2.547896962081114242e-143 +1.090649999999999910e-08 1.773168923631208177e-143 +1.090699999999999966e-08 1.233762320762024001e-143 +1.090750000000000023e-08 8.582741556083933426e-144 +1.090799999999999914e-08 5.969441614636132916e-144 +1.090849999999999971e-08 4.151017110756576040e-144 +1.090900000000000028e-08 2.885947852733627242e-144 +1.090949999999999919e-08 2.006021467531734811e-144 +1.090999999999999976e-08 1.394106057887909588e-144 +1.091050000000000032e-08 9.686551538049033585e-145 +1.091099999999999923e-08 6.729080344276750438e-145 +1.091149999999999980e-08 4.673641275013502907e-145 +1.091200000000000037e-08 3.245399594368012529e-145 +1.091249999999999928e-08 2.253170834990761451e-145 +1.091299999999999985e-08 1.563987240961635147e-145 +1.091350000000000042e-08 1.085389039131904869e-145 +1.091399999999999933e-08 7.530967933161459786e-146 +1.091449999999999989e-08 5.224314416720593715e-146 +1.091500000000000046e-08 3.623439008178990023e-146 +1.091549999999999937e-08 2.512613828240616263e-146 +1.091599999999999994e-08 1.741982055228800779e-146 +1.091650000000000051e-08 1.207465551223887505e-146 +1.091699999999999942e-08 8.367947807296535191e-147 +1.091749999999999999e-08 5.797974718603501453e-147 +1.091800000000000055e-08 4.016491137573365679e-147 +1.091849999999999947e-08 2.781829125416066037e-147 +1.091900000000000003e-08 1.926314650797898874e-147 +1.091950000000000060e-08 1.333635497797146782e-147 +1.091999999999999951e-08 9.231243499557044840e-148 +1.092050000000000008e-08 6.388463356114129415e-148 +1.092099999999999899e-08 4.420238982733594317e-148 +1.092149999999999956e-08 3.057794067797027650e-148 +1.092200000000000013e-08 2.114870884503815697e-148 +1.092249999999999904e-08 1.462421704227184706e-148 +1.092299999999999961e-08 1.011054416599214826e-148 +1.092350000000000017e-08 6.988590258248756811e-149 +1.092399999999999909e-08 4.829673447249278920e-149 +1.092449999999999965e-08 3.337022212293845854e-149 +1.092500000000000022e-08 2.305226315235564842e-149 +1.092549999999999913e-08 1.592139733888800245e-149 +1.092599999999999970e-08 1.099415699179986055e-149 +1.092650000000000027e-08 7.590245598911165224e-150 +1.092699999999999918e-08 5.239174507088931491e-150 +1.092749999999999975e-08 3.615622171524156027e-150 +1.092800000000000031e-08 2.494688693081684885e-150 +1.092849999999999923e-08 1.720928462749216042e-150 +1.092899999999999979e-08 1.186922649860748679e-150 +1.092950000000000036e-08 8.184556641016553871e-151 +1.092999999999999927e-08 5.642623077764431659e-151 +1.093049999999999984e-08 3.889377200452912097e-151 +1.093100000000000041e-08 2.680354446946046324e-151 +1.093149999999999932e-08 1.846790083543272411e-151 +1.093199999999999989e-08 1.272201726171217033e-151 +1.093250000000000045e-08 8.762087144683707184e-152 +1.093299999999999937e-08 6.033541399388996842e-152 +1.093349999999999993e-08 4.153843852584418605e-152 +1.093400000000000050e-08 2.859177897530829661e-152 +1.093449999999999941e-08 1.967638583354652589e-152 +1.093499999999999998e-08 1.353825291931646572e-152 +1.093550000000000055e-08 9.313074081011760632e-153 +1.093599999999999946e-08 6.405258080204910810e-153 +1.093650000000000003e-08 4.404466889390108648e-153 +1.093700000000000059e-08 3.028051150962996118e-153 +1.093749999999999951e-08 2.081355216804504575e-153 +1.093800000000000007e-08 1.430350083704340364e-153 +1.093849999999999898e-08 9.827694023988535600e-154 +1.093899999999999955e-08 6.751092347721750518e-154 +1.093950000000000012e-08 4.636706559864460066e-154 +1.093999999999999903e-08 3.183891914910752071e-154 +1.094049999999999960e-08 2.185849021099634732e-154 +1.094100000000000017e-08 1.500358862383004055e-154 +1.094149999999999908e-08 1.029634949113282377e-154 +1.094199999999999964e-08 7.064550665743235416e-155 +1.094250000000000021e-08 4.846173449598919645e-155 +1.094299999999999912e-08 3.323735875763910553e-155 +1.094349999999999969e-08 2.279120023992459643e-155 +1.094400000000000026e-08 1.562503611642674940e-155 +1.094449999999999917e-08 1.070996382823877985e-155 +1.094499999999999974e-08 7.339527792216807491e-156 +1.094550000000000030e-08 5.028765402025120881e-156 +1.094599999999999922e-08 3.444829830181639031e-156 +1.094649999999999978e-08 2.359322513022093381e-156 +1.094700000000000035e-08 1.615548467001037399e-156 +1.094749999999999926e-08 1.106027212327529728e-156 +1.094799999999999983e-08 7.570503668659203400e-157 +1.094850000000000040e-08 5.180800598713599412e-157 +1.094899999999999931e-08 3.544721516029158497e-157 +1.094949999999999988e-08 2.424825589786617858e-157 +1.095000000000000044e-08 1.658410477680956672e-157 +1.095049999999999936e-08 1.134009519698165025e-157 +1.095099999999999992e-08 7.752727314904260217e-158 +1.095150000000000049e-08 5.299140793907261177e-158 +1.095199999999999940e-08 3.621342064058729885e-158 +1.095249999999999997e-08 2.474268243367564732e-158 +1.095300000000000054e-08 1.690196328772473884e-158 +1.095349999999999945e-08 1.154358401463357132e-158 +1.095400000000000002e-08 7.882379190707113743e-159 +1.095450000000000058e-08 5.381298952695708306e-159 +1.095499999999999950e-08 3.673077204392853916e-159 +1.095550000000000006e-08 2.506606348870180121e-159 +1.095599999999999898e-08 1.710233286484464067e-159 +1.095649999999999954e-08 1.166642290852233548e-159 +1.095700000000000011e-08 7.956704280821757193e-160 +1.095749999999999902e-08 5.425526139959886527e-160 +1.095799999999999959e-08 3.698823806761046932e-160 +1.095850000000000016e-08 2.521149325373919667e-160 +1.095899999999999907e-08 1.718092869835304922e-160 +1.095949999999999964e-08 1.170598175238275167e-160 +1.096000000000000020e-08 7.974109428608806765e-161 +1.096049999999999912e-08 5.430873421101196695e-161 +1.096099999999999968e-08 3.698028989020017490e-161 +1.096150000000000025e-08 2.517584655962727149e-161 +1.096199999999999916e-08 1.713606085571298556e-161 +1.096249999999999973e-08 1.166140959396055955e-161 +1.096300000000000030e-08 7.934220115564977448e-162 +1.096349999999999921e-08 5.397225714813980011e-162 +1.096399999999999978e-08 3.670709857539355269e-162 +1.096450000000000034e-08 2.495989053886254293e-162 +1.096499999999999925e-08 1.696869469716953214e-162 +1.096549999999999982e-08 1.153366509021930445e-162 +1.096600000000000039e-08 7.837893860497334656e-163 +1.096649999999999930e-08 5.325305911051286927e-163 +1.096699999999999987e-08 3.617452895053014948e-163 +1.096750000000000044e-08 2.456825717633948523e-163 +1.096799999999999935e-08 1.668241634128522828e-163 +1.096849999999999991e-08 1.132548222485533133e-163 +1.096900000000000048e-08 7.687189568802492686e-164 +1.096949999999999939e-08 5.216649048479958305e-164 +1.096999999999999996e-08 3.539393026570412729e-164 +1.097050000000000053e-08 2.400927812101038080e-164 +1.097099999999999944e-08 1.628330490587318867e-164 +1.097150000000000001e-08 1.104127302037393398e-164 +1.097200000000000057e-08 7.485294361988923227e-165 +1.097249999999999949e-08 5.073547839683190720e-165 +1.097300000000000005e-08 3.438173406975193553e-165 +1.097349999999999897e-08 2.329468998623611915e-165 +1.097399999999999953e-08 1.577971788128218915e-165 +1.097450000000000010e-08 1.068697207991652192e-165 +1.097499999999999901e-08 7.236411519255414059e-166 +1.097549999999999958e-08 4.898972244087183155e-166 +1.097600000000000015e-08 3.315887920227578983e-166 +1.097649999999999906e-08 2.243922469685442413e-166 +1.097699999999999963e-08 1.518200021879553163e-166 +1.097750000000000019e-08 1.026983060868691059e-166 +1.097799999999999911e-08 6.945615033373716111e-167 +1.097849999999999967e-08 4.696467028589544110e-167 +1.097900000000000024e-08 3.175009200086955458e-167 +1.097949999999999915e-08 2.146010484948181682e-167 +1.097999999999999972e-08 1.450213127343345139e-167 +1.098050000000000029e-08 9.798169896669715544e-168 +1.098099999999999920e-08 6.618677807257842949e-168 +1.098149999999999977e-08 4.470032248370703502e-168 +1.098200000000000033e-08 3.018305626163807768e-168 +1.098249999999999925e-08 2.037646821157382708e-168 +1.098299999999999981e-08 1.375332641567053536e-168 +1.098350000000000038e-08 9.281105956031225715e-169 +1.098399999999999929e-08 6.261881606050494837e-169 +1.098449999999999986e-08 4.223992268355658486e-169 +1.098500000000000043e-08 2.848751180567468615e-169 +1.098549999999999934e-08 1.920874816750514512e-169 +1.098599999999999991e-08 1.294961177572978184e-169 +1.098650000000000047e-08 8.728258007480631381e-170 +1.098699999999999939e-08 5.881817477646780762e-170 +1.098749999999999995e-08 3.962859295310049969e-170 +1.098800000000000052e-08 2.669432249028454816e-170 +1.098849999999999943e-08 1.797803800249842838e-170 +1.098900000000000000e-08 1.210539113814044157e-170 +1.098950000000000057e-08 8.149453762346056109e-171 +1.098999999999999948e-08 5.485185441414607058e-171 +1.099050000000000005e-08 3.691197392332822526e-171 +1.099099999999999896e-08 2.483455412678262594e-171 +1.099149999999999953e-08 1.670546639620703112e-171 +1.099200000000000009e-08 1.123502347374499420e-171 +1.099249999999999900e-08 7.554443966812838631e-172 +1.099299999999999957e-08 5.078601838043240527e-172 +1.099350000000000014e-08 3.413492616948144159e-172 +1.099399999999999905e-08 2.293860015833759980e-172 +1.099449999999999962e-08 1.541160948346229645e-172 +1.099500000000000019e-08 1.035242806623892079e-172 +1.099549999999999910e-08 6.952637527683949532e-173 +1.099599999999999966e-08 4.668421882776205012e-173 +1.099650000000000023e-08 3.134034298796889493e-173 +1.099699999999999914e-08 2.103538839219334744e-173 +1.099749999999999971e-08 1.411596153608931750e-173 +1.099800000000000028e-08 9.470731810837899704e-174 +1.099849999999999919e-08 6.352866834132566603e-174 +1.099899999999999976e-08 4.260583748101729245e-174 +1.099950000000000032e-08 2.856811609104024844e-174 +1.099999999999999924e-08 1.915169596715529863e-174 From 701b42d0e6332344748c6aa932e36bba21cfaaca Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Fri, 28 Nov 2025 12:47:43 +0100 Subject: [PATCH 09/35] [WIP] Adds placeholder for advance conformal H routines --- src_conformal/cell_map.F90 | 2 -- src_conformal/conformal.F90 | 21 +++++++++-- src_main_pub/preprocess_geom.F90 | 14 ++++++++ src_main_pub/timestepping.F90 | 61 ++++++++++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 5 deletions(-) diff --git a/src_conformal/cell_map.F90 b/src_conformal/cell_map.F90 index 254e0938e..916b0f696 100644 --- a/src_conformal/cell_map.F90 +++ b/src_conformal/cell_map.F90 @@ -130,8 +130,6 @@ subroutine addTriangleToSide(this, side, triangle) allocate(this%keys(size(aux_keys))) this%keys = aux_keys end if - - end subroutine subroutine buildSideMap(res, triangles) diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index 8d8667c2a..b7b7e80b6 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -44,6 +44,22 @@ function buildConformalSurfaces(regions) result(res) function buildConformalSurface(surface) result(res) type(ConformalPECElements), intent(in) :: surface type(ConformalMedia_t) :: res + real (kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios + type(edge_t), dimension(:), allocatable :: edges + type(face_t), dimension(:), allocatable :: faces + + ! call buildCellMap(cell_map, volume) + ! call fillElements(cell_map, faces, edges) + + call addNewRatios(edges, faces, edge_ratios, face_ratios) + res%edge_media => addEdgeMedia(edges, edge_ratios) + res%face_media => addFaceMedia(faces, face_ratios) + + res%n_edges_media = size(res%edge_media) + res%n_faces_media = size(res%face_media) + + res%time_step_scale_factor = computeTimeStepScalingFactor(res%edge_media, res%face_media) + res%tag = surface%tag end function function buildConformalVolume(volume) result(res) @@ -52,9 +68,8 @@ function buildConformalVolume(volume) result(res) type(cell_map_t) :: cell_map real (kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios - type(edge_t), dimension(:), allocatable :: edges, filtered_edges - type(face_t), dimension(:), allocatable :: faces, filtered_faces - integer :: i + type(edge_t), dimension(:), allocatable :: edges + type(face_t), dimension(:), allocatable :: faces call buildCellMap(cell_map, volume) call fillElements(cell_map, faces, edges) diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 5063cb278..a9be6453d 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -2566,6 +2566,20 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do + do j = 1, ubound(conformal_surfaces,1) + + ! call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j)) + ! numertag = searchtag(tagtype,conformal_surfaces(j)%tag) + ! CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + ! & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + ! & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + ! & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + ! & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + ! & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + ! & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, conf_bounding_box, 0) + + end do + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 21eb08903..13b2f80c0 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -133,6 +133,7 @@ module Solver_mod procedure :: step procedure :: advanceE, advanceEx, advanceEy, advanceEz procedure :: advanceH, advanceHx, advanceHy, advanceHz + procedure :: advanceConformalH, advanceConformalHx, advanceConformalHy, advanceConformalHz procedure :: advancePlaneWaveE => solver_advancePlaneWaveE procedure :: advancePlaneWaveH => solver_advancePlaneWaveH procedure :: advanceWiresE => solver_advanceWiresE @@ -2077,6 +2078,7 @@ subroutine step(this) call flushPlanewaveOff(planewave_switched_off, this%still_planewave_time, thereareplanewave) call this%AdvanceAnisotropicE() call this%advanceE() + ! call this%advanceConformalE() #ifdef CompileWithConformal if(this%control%input_conformal_flag) call conformal_advance_E() #endif @@ -2100,6 +2102,7 @@ subroutine step(this) call this%advanceAnisotropicH() call this%advanceH() + call this%advanceConformalH() call this%advancePMLbodyH() call this%AdvanceMagneticCPML() call this%MinusCloneMagneticPMC() @@ -2512,6 +2515,64 @@ subroutine advanceHz(this, sggMiHz) return end subroutine advanceHz + subroutine advanceConformalH(this) + class(solver_t) :: this +#ifdef CompileWithProfiling + call nvtxStartRange("Antes del bucle Conformal HX") +#endif + call this%advanceConformalHx() +#ifdef CompileWithProfiling + call nvtxEndRange + call nvtxStartRange("Antes del bucle Conformal HY") +#endif + call this%advanceConformalHy() +#ifdef CompileWithProfiling + call nvtxEndRange + call nvtxStartRange("Antes del bucle Conformal HZ") +#endif + call this%advanceConformalHz() +#ifdef CompileWithProfiling + call nvtxEndRange +#endif + end subroutine advanceConformalH + + subroutine advanceConformalHx(this) + class(solver_t) :: this + ! integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiHx%NX-1,0:this%bounds%sggMiHx%NY-1,0:this%bounds%sggMiHx%NZ-1), intent(in) :: sggMiHx + + real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx + real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ey + real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ez + real (kind=rkind), dimension(:), pointer:: IdyE + real (kind=rkind), dimension(:), pointer:: IdzE + real (kind=rkind) :: Idzek, Idyej + integer(kind=4) :: i + integer(kind=integersizeofmediamatrices) :: medio + + Hx(0:this%bounds%Hx%NX-1,0:this%bounds%Hx%NY-1,0:this%bounds%Hx%NZ-1) => this%Hx + Ey(0:this%bounds%Ey%NX-1,0:this%bounds%Ey%NY-1,0:this%bounds%Ey%NZ-1) => this%Ey + Ez(0:this%bounds%Ez%NX-1,0:this%bounds%Ez%NY-1,0:this%bounds%Ez%NZ-1) => this%Ez + + IdyE(0:this%bounds%dyE%NY-1) => this%IdyE + IdzE(0:this%bounds%dzE%NZ-1) => this%IdzE + + + ! do i=1,size(conformal_size_map) + ! Idzek=Idze(k) + ! Idyej=Idye(j) + ! medio =sggMiHx(i,j,k) + ! Hx(i,j,k)=this%g%gm1(medio)*Hx(i,j,k)+this%g%gm2(medio)*((Ey(i,j,k+1)-Ey(i,j,k))*Idzek-(Ez(i,j+1,k)-Ez(i,j,k))*Idyej) + ! end do + + return + end subroutine advanceConformalHx + subroutine advanceConformalHy(this) + class(solver_t) :: this + end subroutine advanceConformalHy + subroutine advanceConformalHz(this) + class(solver_t) :: this + end subroutine advanceConformalHz + subroutine solver_advanceEDispersiveE(this) class(solver_t) :: this From 9cbdac3268b35b1d0fd115a7d88d04eb3ed17358 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Fri, 28 Nov 2025 13:21:14 +0100 Subject: [PATCH 10/35] Removes distinction between buildConformalVolume and buildConformalSurface. At this point they are equivalent --- src_conformal/cell_map.F90 | 4 +- src_conformal/conformal.F90 | 64 ++++++++++++-------------------- src_json_parser/smbjson.F90 | 4 +- src_main_pub/nfde_types.F90 | 6 +-- src_main_pub/preprocess_geom.F90 | 14 ------- test/conformal/test_filling.F90 | 24 ++++++------ 6 files changed, 43 insertions(+), 73 deletions(-) diff --git a/src_conformal/cell_map.F90 b/src_conformal/cell_map.F90 index 916b0f696..f1fd27910 100644 --- a/src_conformal/cell_map.F90 +++ b/src_conformal/cell_map.F90 @@ -2,7 +2,7 @@ module cell_map_mod use geometry_mod, only: triangle_t, side_t, interval_t, FACE_X, FACE_Y, FACE_Z, isNewSide use fhash, only: fhash_tbl_t, key=>fhash_key - use NFDETypes, only: rkind, ConformalPECElements + use NFDETypes, only: rkind, ConformalPECElement implicit none @@ -150,7 +150,7 @@ subroutine buildSideMap(res, triangles) subroutine buildCellMap(res, volume) type(cell_map_t), intent(inout) :: res - type(ConformalPECElements), intent(in) :: volume + type(ConformalPECElement), intent(in) :: volume type(triangle_map_t) :: tri_map type(interval_map_t) :: interval_map type(side_map_t) :: side_map, side_map_on diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index b7b7e80b6..123f6c75c 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -2,7 +2,7 @@ module conformal_mod use geometry_mod use cell_map_mod - use NFDETypes, only: ConformalPECRegions, ConformalPECElements, ConformalMedia_t, & + use NFDETypes, only: ConformalPECRegions, ConformalPECElement, ConformalMedia_t, & edge_t, face_t, & conformal_face_media_t, conformal_edge_media_t, rkind @@ -21,49 +21,33 @@ function buildSideMaps(regions) result(res) end do end function - function buildConformalVolumes(regions) result(res) - type(ConformalPECRegions), intent(in) :: regions - type(ConformalMedia_t), dimension(:), allocatable :: res - integer :: i - allocate(res(size(regions%volumes))) - do i = 1, size(regions%volumes) - res(i) = buildConformalVolume(regions%volumes(i)) - end do - end function + subroutine buildConformalMedia(conformalRegs, volumes, surfaces) + type(ConformalPECRegions), pointer, intent(in) :: conformalRegs + type(ConformalMedia_t), allocatable, dimension(:), intent(inout) :: volumes, surfaces + if (associated(conformalRegs%volumes)) then + volumes = buildMedia(conformalRegs%volumes) + else + allocate(volumes(0)) + end if + if (associated(conformalRegs%surfaces)) then + surfaces = buildMedia(conformalRegs%surfaces) + else + allocate(surfaces(0)) + end if + end subroutine - function buildConformalSurfaces(regions) result(res) - type(ConformalPECRegions), intent(in) :: regions + function buildMedia(elements) result(res) + type(ConformalPECElement), dimension(:), pointer :: elements type(ConformalMedia_t), dimension(:), allocatable :: res integer :: i - allocate(res(size(regions%surfaces))) - do i = 1, size(regions%surfaces) - res(i) = buildConformalSurface(regions%surfaces(i)) + allocate(res(size(elements))) + do i = 1, size(elements) + res(i) = buildMediaFromElement(elements(i)) end do end function - function buildConformalSurface(surface) result(res) - type(ConformalPECElements), intent(in) :: surface - type(ConformalMedia_t) :: res - real (kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios - type(edge_t), dimension(:), allocatable :: edges - type(face_t), dimension(:), allocatable :: faces - - ! call buildCellMap(cell_map, volume) - ! call fillElements(cell_map, faces, edges) - - call addNewRatios(edges, faces, edge_ratios, face_ratios) - res%edge_media => addEdgeMedia(edges, edge_ratios) - res%face_media => addFaceMedia(faces, face_ratios) - - res%n_edges_media = size(res%edge_media) - res%n_faces_media = size(res%face_media) - - res%time_step_scale_factor = computeTimeStepScalingFactor(res%edge_media, res%face_media) - res%tag = surface%tag - end function - - function buildConformalVolume(volume) result(res) - type(ConformalPECElements), intent(in) :: volume + function buildMediaFromElement(element) result(res) + type(ConformalPECElement), intent(in) :: element type(ConformalMedia_t) :: res type(cell_map_t) :: cell_map @@ -71,7 +55,7 @@ function buildConformalVolume(volume) result(res) type(edge_t), dimension(:), allocatable :: edges type(face_t), dimension(:), allocatable :: faces - call buildCellMap(cell_map, volume) + call buildCellMap(cell_map, element) call fillElements(cell_map, faces, edges) call addNewRatios(edges, faces, edge_ratios, face_ratios) res%edge_media => addEdgeMedia(edges, edge_ratios) @@ -81,7 +65,7 @@ function buildConformalVolume(volume) result(res) res%n_faces_media = size(res%face_media) res%time_step_scale_factor = computeTimeStepScalingFactor(res%edge_media, res%face_media) - res%tag = volume%tag + res%tag = element%tag end function subroutine addNewRatios(edges, faces, edge_ratios, face_ratios) diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index b0665f8bd..98acccf61 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -607,11 +607,11 @@ function readConformalRegions(this) result(res) contains subroutine appendRegion(regions, region, tagName) - type(ConformalPECElements), dimension(:), pointer :: regions + type(ConformalPECElement), dimension(:), pointer :: regions type(conformal_region_t), intent(in) :: region character (len=:), allocatable, intent(in) :: tagName - type(ConformalPECElements), dimension(:), allocatable :: aux + type(ConformalPECElement), dimension(:), allocatable :: aux integer :: i if (.not. associated(regions)) then allocate(regions(1)) diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index bc4316b06..5e95146e1 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -122,15 +122,15 @@ MODULE NFDETypes ! Identifies conformal PEC "media" !------------------------------------------------------------------------------ - type, public :: ConformalPECElements + type, public :: ConformalPECElement type(triangle_t), dimension(:), allocatable :: triangles type(interval_t), dimension(:), allocatable :: intervals character(len=bufsize) :: tag end type type, public :: ConformalPECRegions - type(ConformalPECElements), dimension(:), pointer :: volumes => null() - type(ConformalPECElements), dimension(:), pointer :: surfaces => null() + type(ConformalPECElement), dimension(:), pointer :: volumes => null() + type(ConformalPECElement), dimension(:), pointer :: surfaces => null() end type diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index a9be6453d..4374f75d4 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -4823,20 +4823,6 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - subroutine buildConformalMedia(conformalRegs, volumes, surfaces) - type(ConformalPECRegions), pointer, intent(in) :: conformalRegs - type(ConformalMedia_t), allocatable, dimension(:), intent(inout) :: volumes, surfaces - if (associated(conformalRegs%volumes)) then - volumes = buildConformalVolumes(conformalRegs) - else - allocate(volumes(0)) - end if - if (associated(conformalRegs%surfaces)) then - surfaces = buildConformalSurfaces(conformalRegs) - else - allocate(surfaces(0)) - end if - end subroutine function computeConformalTimeFactor(volumes, surfaces) result(res) type(ConformalMedia_t), allocatable, dimension(:), intent(in) :: volumes, surfaces diff --git a/test/conformal/test_filling.F90 b/test/conformal/test_filling.F90 index 43f1f4761..1234556ed 100644 --- a/test/conformal/test_filling.F90 +++ b/test/conformal/test_filling.F90 @@ -36,7 +36,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -64,7 +64,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -132,7 +132,7 @@ integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -162,7 +162,7 @@ integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -228,7 +228,7 @@ integer function test_conformal_filling_off_face_triangle_z() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -256,7 +256,7 @@ integer function test_conformal_filling_off_face_triangle_z() bind(C) result(err cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -320,7 +320,7 @@ integer function test_conformal_filling_open() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(1) = tris(1) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 1) err = err + 1 @@ -385,7 +385,7 @@ integer function test_conformal_filling_closed() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 1) err = err + 1 @@ -447,7 +447,7 @@ integer function test_conformal_edge_next_cell() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 4) err = err + 1 @@ -520,7 +520,7 @@ integer function test_conformal_filling_closed_corner() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 1) err = err + 1 @@ -615,7 +615,7 @@ integer function test_conformal_filling_block_and_corner() bind(C) result(err) allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) if (size(cM%edge_media) /= 2) err = err + 1 @@ -719,7 +719,7 @@ integer function test_conformal_filling_cylinder_base_on_grid_plane() bind(C) re allocate(cR%volumes(1)%intervals(0)) cR%volumes(1)%triangles(:) = tris(:) - cMs = buildConformalVolumes(cR) + cMs = buildMedia(cR%volumes) cM = cMs(1) ! if (size(cM%edge_media) /= 1) err = err + 1 From 1fd6325c032ad814c0ba73ac151adcddadf130f3 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 8 Jan 2026 15:25:56 +0100 Subject: [PATCH 11/35] Adds modifications from commits lost in corrupted state --- src_conformal/conformal_timestepping.F90 | 249 +++++++++++++++++++++++ src_main_pub/fdetypes.F90 | 3 +- src_main_pub/nfde_types.F90 | 34 +++- src_main_pub/preprocess_geom.F90 | 4 + src_main_pub/timestepping.F90 | 20 +- 5 files changed, 303 insertions(+), 7 deletions(-) create mode 100644 src_conformal/conformal_timestepping.F90 diff --git a/src_conformal/conformal_timestepping.F90 b/src_conformal/conformal_timestepping.F90 new file mode 100644 index 000000000..05b48e934 --- /dev/null +++ b/src_conformal/conformal_timestepping.F90 @@ -0,0 +1,249 @@ +module conformal_mod + + ! use conformal_mod + use fhash, only: fhash_tbl_t, key=>fhash_key + + integer, parameter :: CONFORMAL_FACE = 0 + integer, parameter :: CONFORMAL_EDGE = 1 + + type, public :: media_maps_t + type(fhash_tbl_t) :: Ex, Ey, Ez, Hz, Hy, Hz + contains + procedure :: getMedium => media_maps_getMedium + end type + + ! advanceE avanza con + ! formal+PEC+volumen + ! conformal_timestepping comprueba PEC+surface y SIBC + ! Si es PEC y superficie: + ! crea 6 mapas de cell:medio (analogas a sggMi) + + + ! itera sobre caras: + ! en cada cara, conozco ratio + ! ratio nuevo = 1 - ratio + ! gm1 y gm2 dependen del ratio nuevo + ! los E => a los edges o campos de la region I + + +contains + + function media_maps_getMedium(this, cell, direction, found) result(res) + class(media_maps_t) :: this + integer (kind = 4), intent(in) :: cell + integer, intent(in) :: direction + logical, intent(inout), optional :: found + integer :: stat + integer :: medium + + if (present(found)) found = .false. + select case (direction) + case(EDGE_X) + call this%Ex%get(key(cell), medium, stat) + case(EDGE_Y) + call this%Ey%get(key(cell), medium, stat) + case(EDGE_Z) + call this%Ez%get(key(cell), medium, stat) + case(FACE_X) + call this%Hx%get(key(cell), medium, stat) + case(FACE_Y) + call this%Hy%get(key(cell), medium, stat) + case(FACE_Z) + call this%Hz%get(key(cell), medium, stat) + end select + if (stat /= 0) return + res = medium + if (present(found)) found = .true. + end function + + subroutine calc_conf_constants() + + end subroutine + + function buildMediaMaps(conformal_surface, edge_ratios, face_ratios, num_media) result(res) + type(ConformalMedia_t), intent(in) :: conformal_surface + real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios + type(media_maps_t) :: res + integer (kind=4) :: med_number + integer (kind=4) :: cell(3) + integer :: i, j + + do i = 1, conformal_surface%n_edges_media + med_number = findloc(edge_ratios, conformal_volumes%edge_media(i)%ratio, 1) + do j = 1, conformal_volumes%edge_media(i)%size + cell(:) = conformal_volumes%edge_media(i)%edges(j)%cell(:) + select case(conformal_volumes%edge_media(i)%edges(j)%direction) + case(EDGE_X) + call(res%Ex%set(key(cell)), value = med_number) + case(EDGE_Y) + call(res%Ey%set(key(cell)), value = med_number) + case(EDGE_Z) + call(res%Ez%set(key(cell)), value = med_number) + end select + end do + end do + + do i = 1, conformal_surface%n_faces_media + med_number = size(edge_ratios) + findloc(face_ratios, conformal_volumes%face_media(i)%ratio, 1) + do j = 1, conformal_volumes%face_media(i)%size + cell(:) = conformal_volumes%face_media(i)%faces(j)%cell(:) + select case(conformal_volumes%face_media(i)%faces(j)%direction) + case(FACE_X) + call(res%Hx%set(key(cell)), value = med_number) + case(FACE_Y) + call(res%Hy%set(key(cell)), value = med_number) + case(FACE_Z) + call(res%Hz%set(key(cell)), value = med_number) + end select + end do + end do + end function + + logical function featureIs(feature, featureType) + class(*), intent(in) :: feature + integer, intent(in) :: featureType + integer :: foundType + featureIs = .false. + select type (feature) + type is (conformal_face_media_t) + foundType = CONFORMAL_FACE + type is (conformal_edge_media_t) + foundType = CONFORMAL_EDGE + end select + featureIs = (foundType == featureType) + end function + + subroutine initConformal(sgg, Ex, Ey, Ez, Hx, Hy, Hz, conformal_media) + type (sggfdtdinfo), intent(inout) :: sgg + real (kind=rkind), intent(in) , target :: & + Ex(sgg%alloc(iEx)%XI : sgg%alloc(iEx)%XE,sgg%alloc(iEx)%YI : sgg%alloc(iEx)%YE,sgg%alloc(iEx)%ZI : sgg%alloc(iEx)%ZE),& + Ey(sgg%alloc(iEy)%XI : sgg%alloc(iEy)%XE,sgg%alloc(iEy)%YI : sgg%alloc(iEy)%YE,sgg%alloc(iEy)%ZI : sgg%alloc(iEy)%ZE),& + Ez(sgg%alloc(iEz)%XI : sgg%alloc(iEz)%XE,sgg%alloc(iEz)%YI : sgg%alloc(iEz)%YE,sgg%alloc(iEz)%ZI : sgg%alloc(iEz)%ZE),& + Hx(sgg%alloc(iHx)%XI : sgg%alloc(iHx)%XE,sgg%alloc(iHx)%YI : sgg%alloc(iHx)%YE,sgg%alloc(iHx)%ZI : sgg%alloc(iHx)%ZE),& + Hy(sgg%alloc(iHy)%XI : sgg%alloc(iHy)%XE,sgg%alloc(iHy)%YI : sgg%alloc(iHy)%YE,sgg%alloc(iHy)%ZI : sgg%alloc(iHy)%ZE),& + Hz(sgg%alloc(iHz)%XI : sgg%alloc(iHz)%XE,sgg%alloc(iHz)%YI : sgg%alloc(iHz)%YE,sgg%alloc(iHz)%ZI : sgg%alloc(iHz)%ZE) + type(conformal_media_t), intent(in) :: conformal_media + type (edge_t) :: edge + integer (kind=4) :: cell(3), k(4), ratioII + ! make fields in faces and edges point to the corresponding region I or II fields + integer :: i, j + + do i = 1, sgg%NumMedia + if (sgg%med(i)%Is%conformal .and. sgg%med(i)%Is%surface) then + if (featureIs(sgg%med(i)%conformalSurface(1)), CONFORMAL_FACE) then + do j = 1, sgg%med(i)%conformalSurface(1)%size + cell(:) = sgg%med(i)%conformalSurface(1)%faces(j)%cell(:) + select case(sgg%med(i)%conformalSurface(1)%faces(j)%direction) + case(FACE_Z) + sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%H => Hz(cell(1), cell(2), cell(3)) + k = [cell, FACE_Z] + ! 1: Ey(cell(1) , cell(2) , cell(3)) + ! si existe + call edge_map%get(key(k), edge) + if (edge%ratio == 0) then + sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = 0 + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = edge%region_II_fields%E + else if (edge%ratio == 1) then + sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = Ey(cell(1) , cell(2) , cell(3)) + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = 0 + else + sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 => Ey(cell(1) , cell(2) , cell(3)) + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 => edge%region_II_fields%E + end if + ! Ex(cell(1) , cell(2) + 1, cell(3)) + ! Ey(cell(1) + 1, cell(2) , cell(3)) + ! Ex(cell(1) , cell(2) , cell(3)) + end select + end do + end if + end if + end do + + do i = 1, conformal_media%n_faces_media + do j = 1, conformal_media%face_media(i)%size + cell(:) = conformal_media%face_media(i)%faces(j)%cell(:) + select case(conformal_media%face_media(j)%faces(k)%direction) + case(FACE_X) + conformal_media%face_media(i)%faces(j)%region_I_fields%H => Hx(cell(1), cell(2) , cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E1 => Ez(cell(1), cell(2) , cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E2 => Ey(cell(1), cell(2) , cell(3) + 1) + conformal_media%face_media(i)%faces(j)%region_I_fields%E3 => Ez(cell(1), cell(2) + 1, cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E4 => Ey(cell(1), cell(2) , cell(3)) + case(FACE_Y) + conformal_media%face_media(i)%faces(j)%region_I_fields%H => Hy(cell(1) , cell(2), cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E1 => Ex(cell(1) , cell(2), cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E2 => Ez(cell(1) + 1, cell(2), cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E3 => Ex(cell(1) , cell(2), cell(3) + 1) + conformal_media%face_media(i)%faces(j)%region_I_fields%E4 => Ez(cell(1) , cell(2), cell(3)) + case(FACE_Z) + conformal_media%face_media(i)%faces(j)%region_I_fields%H => Hz(cell(1) , cell(2) , cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E1 => Ey(cell(1) , cell(2) , cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E2 => Ex(cell(1) , cell(2) + 1, cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E3 => Ey(cell(1) + 1, cell(2) , cell(3)) + conformal_media%face_media(i)%faces(j)%region_I_fields%E4 => Ex(cell(1) , cell(2) , cell(3)) + end select + end do + end do + ! and fields from region II? + + end subroutine + + subroutine advanceHz(media_maps) + type(media_maps_t), intent(in) :: media_maps + real (kind = rkind), pointer :: H, E1, E2, E3, E4 + real (kind = rkind), pointer :: rIIH, rIIE1, rIIE2, rIIE3, rIIE4 + integer :: i, j, medium, direction + real (kind = rkind) :: id1, id2 + integer (kind=4) :: cell(3) + logical :: found + + !check if volume/surface + do i = 1, conformal_media%n_faces_media + do j = 1, conformal_media%face_media(i)%size + H => conformal_media%face_media(i)%faces(j)%region_I_fields%H + E1 => conformal_media%face_media(i)%faces(j)%region_I_fields%E1 + E2 => conformal_media%face_media(i)%faces(j)%region_I_fields%E2 + E3 => conformal_media%face_media(i)%faces(j)%region_I_fields%E3 + E4 => conformal_media%face_media(i)%faces(j)%region_I_fields%E4 + cell(:) = conformal_media%face_media(i)%faces(j)%cell(:) + direction = conformal_media%face_media(j)%faces(k)%direction + ! asignacion de medios: esta en otro sitio? en este esquema, los medios this%g%gm1(medium) + ! son = 0, porque se hace todo aquí. El numero de sggMiHx se mantiene, pero ahora hay un confg%g1 ? + ! hay que crear medios para las complementarios de los medios conf? + medium = media_maps%getMedium(cell, direction, found) + if (.not. found) write(*,*) 'error' + ! case(FACE_X) + ! medium = media_maps%Hx%get(key(cell)) + ! ! medium = sggMiHx(cell(1), cell(2), cell(3)) + ! ! id1 = + ! ! id2 = + ! case(FACE_Y) + ! medium =sggMiHy(cell(1), cell(2), cell(3)) + ! ! id1 = + ! ! id2 = + ! case(FACE_Z) + ! medium =sggMiHz(cell(1), cell(2), cell(3)) + ! ! id1 = Idye(cell(2)) + ! ! id2 = Idxe(cell(1)) + ! end select + ! i.e Hz, E2, E4 => Ex + ! if Ex in region II, g1 = 0, g2 = 0, and field = 0 + H = g%gm1(medium)*H + g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) + ! H = this%g%gm1(medium)*H + this%g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) + ! update region II + if (isSurface) then + rIIH => conformal_media%face_media(i)%faces(j)%region_II_fields%H + rIIE1 => conformal_media%face_media(i)%faces(j)%region_II_fields%E1 + rIIE2 => conformal_media%face_media(i)%faces(j)%region_II_fields%E2 + rIIE3 => conformal_media%face_media(i)%faces(j)%region_II_fields%E3 + rIIE4 => conformal_media%face_media(i)%faces(j)%region_II_fields%E4 + + rIIH = this%g%gm1(medium)*rIIH + this%g%gm2(medium)*((rIIE2 - rIIE4)*id1 - (rIIE3-rIIE1)*id2) + + end if + + end do + end do + end subroutine + +end module \ No newline at end of file diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index 2ddff2843..baa3fe13c 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -419,8 +419,8 @@ module FDETYPES REAL (KIND=RKIND_wires) :: Series_R_RightEnd, Series_L_RightEnd, Series_C_RightEnd type (WireDispersiveParams_t), allocatable, dimension(:) :: disp_LeftEnd, disp_RightEnd end type SlantedWires_t - ! TYPE :: Lumped_t + ! integer (kind=4) :: Orient = 0 !orientation +iEx, -iEx,+iEy....... !deprecado 201222 real (kind=RKIND_wires) :: epr,mur,sigma,sigmam real (kind=RKIND_wires) :: R,L,C,DiodB,DiodIsat,Rtime_on,Rtime_off @@ -597,6 +597,7 @@ module FDETYPES type (DispersiveParams_t), dimension( : ), pointer :: MDispersive type (Anisotropic_t) , dimension( : ), pointer :: Anisotropic type (Lumped_t) , dimension( : ), pointer :: Lumped + ! type (conformal_feature_t), , dimension( : ), pointer :: ConformalSurface end type !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index 5e95146e1..e51ee81c3 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -133,28 +133,52 @@ MODULE NFDETypes type(ConformalPECElement), dimension(:), pointer :: surfaces => null() end type + type :: conformal_edge_fields_t + real(kind=rkind), pointer :: E => null() + real(kind=rkind), pointer :: H1 => null() + real(kind=rkind), pointer :: H2 => null() + real(kind=rkind), pointer :: H3 => null() + real(kind=rkind), pointer :: H4 => null() + end type + + type :: conformal_face_fields_t + real(kind=rkind), pointer :: H => null() + real(kind=rkind), pointer :: E1 => null() + real(kind=rkind), pointer :: E2 => null() + real(kind=rkind), pointer :: E3 => null() + real(kind=rkind), pointer :: E4 => null() + end type + + ! region II not pointers? type, public :: edge_t integer (kind=4), dimension(3) :: cell integer(kind=4) :: direction = -1 real (kind=rkind) :: ratio = -1 real (kind=rkind), dimension(2) :: material_coords + type(conformal_edge_fields_t) :: region_I_fields, region_II_fields end type type, public :: face_t integer (kind=4), dimension(3) :: cell integer(kind=4) :: direction = -1 real (kind=rkind) :: ratio = -1 + type(conformal_face_fields_t) :: region_I_fields, region_II_fields end type - type, public :: conformal_edge_media_t - type(edge_t), dimension(:), allocatable :: edges + type :: conformal_feature_t real(kind=rkind) :: ratio integer (kind=4) :: size end type - type, public :: conformal_face_media_t + + type, extends(conformal_feature_t) :: conformal_edge_media_t + type(edge_t), dimension(:), allocatable :: edges + ! real(kind=rkind) :: ratio + ! integer (kind=4) :: size + end type + type, extends(conformal_feature_t) :: conformal_face_media_t type(face_t), dimension(:), allocatable :: faces - real(kind=rkind) :: ratio - integer (kind=4) :: size + ! real(kind=rkind) :: ratio + ! integer (kind=4) :: size end type TYPE, PUBLIC :: ConformalMedia_t diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 4374f75d4..3e66af05a 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -5026,6 +5026,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ case(F_Z) media%sggMiHz(cell(1), cell(2), cell(3)) = face_media end select + end do end do end subroutine @@ -5089,6 +5090,9 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ case(E_Z) media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end select + + + end do end do end subroutine diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 13b2f80c0..bd8f2e5d0 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -86,6 +86,8 @@ module Solver_mod #ifdef CompileWithProfiling use nvtx #endif + use conformal_mod + implicit none @@ -595,6 +597,8 @@ subroutine solver_init(this) call initializeMultiports() call initializeConformalElements() + call initializeConformal() + call initializeEDispersives() call initializeMDispersives() call initializePlanewave() @@ -1357,6 +1361,19 @@ subroutine initializeMultiports() #endif end subroutine initializeMultiports + subroutine initializeConformal() +#ifdef CompileWithMPI + call MPI_Barrier(SUBCOMM_MPI,ierr) +#endif + write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) + call initConformal(this%sgg, & + this%media%sggMiEx, this%media%sggMiEy,this%media%sggMiEz, & + this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & + Ex,Ey,Ez,Hx,Hy,Hz, & + this%control%layoutnumber) + + end subroutine + subroutine initializeConformalElements() character(len=BUFSIZE) :: dubuf logical :: l_auxinput, l_auxoutput @@ -2556,7 +2573,8 @@ subroutine advanceConformalHx(this) IdyE(0:this%bounds%dyE%NY-1) => this%IdyE IdzE(0:this%bounds%dzE%NZ-1) => this%IdzE - + ! medio = mapa de celda, direccion para E y para H? + ! which field updates? how is it defined? what happens with index shifting? ! do i=1,size(conformal_size_map) ! Idzek=Idze(k) ! Idyej=Idye(j) From b4d21356b7067513ca7f8988d7bf1544ec6a7ce3 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Fri, 9 Jan 2026 15:21:42 +0100 Subject: [PATCH 12/35] Minor --- src_json_parser/smbjson_labels.F90 | 5 ----- test/pyWrapper/test_full_system.py | 3 --- 2 files changed, 8 deletions(-) diff --git a/src_json_parser/smbjson_labels.F90 b/src_json_parser/smbjson_labels.F90 index d006769b1..c19da43e8 100644 --- a/src_json_parser/smbjson_labels.F90 +++ b/src_json_parser/smbjson_labels.F90 @@ -154,11 +154,6 @@ module smbjson_labels_mod character (len=*), parameter :: J_ELEM_TYPE_POLYLINE = "polyline" character (len=*), parameter :: J_ELEM_TYPE_CELL = "cell" character (len=*), parameter :: J_CELL_INTERVALS = "intervals" -<<<<<<< HEAD - character (len=*), parameter :: J_ELEM_TYPE_CONF_VOLUME = "conformalVolume" - character (len=*), parameter :: J_ELEM_TYPE_CONF_SURFACE = "conformalSurface" -======= ->>>>>>> origin/dev character (len=*), parameter :: J_CONF_VOLUME_TRIANGLES = "triangles" character (len=*), parameter :: J_CONF_VOLUME_INTERVALS = "intervals" diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index e30da2e1a..f568ae1f5 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1127,7 +1127,6 @@ def test_conformal_delay(tmp_path): tdelta = t4 + 2*(i*1.0/n)*0.02/3e8 assert np.abs(delay - tdelta)/tdelta < 0.01 -<<<<<<< HEAD def test_conformal_thin_strip_resistance(tmp_path): fn = CASES_FOLDER + 'conformal_thin_strip/conformal_thin_strip.fdtd.json' solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, @@ -1155,7 +1154,6 @@ def test_conformal_thin_strip_resistance(tmp_path): Rdc_th = 0 #impedance comparison assert (np.abs(Vfexc/Ifbulk)[0] == Rdc_th) -======= def test_bulk_current_outputs(tmp_path): @@ -1188,4 +1186,3 @@ def test_bulk_current_outputs(tmp_path): assert probeBulkZPlane.direction == 'z' assert probeBulkYPoint.direction == 'y' assert probeBulkZVolume.direction == 'z' ->>>>>>> origin/dev From 4f3ad76bf20251d243b307afe519cac1c8d24342 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Fri, 9 Jan 2026 15:31:02 +0100 Subject: [PATCH 13/35] Minors. Comment for compilation, dt kind changed to rkind_tiempo --- src_main_pub/preprocess_geom.F90 | 6 +++--- src_main_pub/timestepping.F90 | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 3e66af05a..ffebf5076 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -4842,9 +4842,9 @@ function computeConformalTimeFactor(volumes, surfaces) result(res) end function function changeTimeStepIfConformalNeeded(sgg_dt) result(res) - real(kind=rkind), intent(in) :: sgg_dt - real(kind=rkind) :: yee_dt, time_scale_factor - real(kind=rkind) :: res + real(kind=RKIND_tiempo), intent(in) :: sgg_dt + real(kind=RKIND_tiempo) :: yee_dt, time_scale_factor + real(kind=RKIND_tiempo) :: res time_scale_factor = computeConformalTimeFactor(conformal_volumes, conformal_surfaces) yee_dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index bd8f2e5d0..63059cb24 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -1366,11 +1366,11 @@ subroutine initializeConformal() call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) - call initConformal(this%sgg, & - this%media%sggMiEx, this%media%sggMiEy,this%media%sggMiEz, & - this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & - Ex,Ey,Ez,Hx,Hy,Hz, & - this%control%layoutnumber) + ! call initConformal(this%sgg, & + ! this%media%sggMiEx, this%media%sggMiEy,this%media%sggMiEz, & + ! this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & + ! Ex,Ey,Ez,Hx,Hy,Hz, & + ! this%control%layoutnumber) end subroutine From 94f482d7b45be8ff0f10639c6494f2dc2e6893c1 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Mon, 12 Jan 2026 16:42:52 +0100 Subject: [PATCH 14/35] [WIP] thinking --- src_conformal/conformal_timestepping.F90 | 15 +++++++-------- src_main_pub/fdetypes.F90 | 4 +++- src_main_pub/nfde_types.F90 | 6 ------ src_main_pub/timestepping.F90 | 2 +- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src_conformal/conformal_timestepping.F90 b/src_conformal/conformal_timestepping.F90 index 05b48e934..227785053 100644 --- a/src_conformal/conformal_timestepping.F90 +++ b/src_conformal/conformal_timestepping.F90 @@ -12,8 +12,7 @@ module conformal_mod procedure :: getMedium => media_maps_getMedium end type - ! advanceE avanza con - ! formal+PEC+volumen + ! advanceE avanza conformal+PEC+volumen ! conformal_timestepping comprueba PEC+surface y SIBC ! Si es PEC y superficie: ! crea 6 mapas de cell:medio (analogas a sggMi) @@ -74,11 +73,11 @@ function buildMediaMaps(conformal_surface, edge_ratios, face_ratios, num_media) cell(:) = conformal_volumes%edge_media(i)%edges(j)%cell(:) select case(conformal_volumes%edge_media(i)%edges(j)%direction) case(EDGE_X) - call(res%Ex%set(key(cell)), value = med_number) + call res%Ex%set(key(cell), value = med_number) case(EDGE_Y) - call(res%Ey%set(key(cell)), value = med_number) + call res%Ey%set(key(cell), value = med_number) case(EDGE_Z) - call(res%Ez%set(key(cell)), value = med_number) + call res%Ez%set(key(cell), value = med_number) end select end do end do @@ -89,11 +88,11 @@ function buildMediaMaps(conformal_surface, edge_ratios, face_ratios, num_media) cell(:) = conformal_volumes%face_media(i)%faces(j)%cell(:) select case(conformal_volumes%face_media(i)%faces(j)%direction) case(FACE_X) - call(res%Hx%set(key(cell)), value = med_number) + call res%Hx%set(key(cell), value = med_number) case(FACE_Y) - call(res%Hy%set(key(cell)), value = med_number) + call res%Hy%set(key(cell), value = med_number) case(FACE_Z) - call(res%Hz%set(key(cell)), value = med_number) + call res%Hz%set(key(cell), value = med_number) end select end do end do diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index baa3fe13c..8ed579049 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -597,7 +597,9 @@ module FDETYPES type (DispersiveParams_t), dimension( : ), pointer :: MDispersive type (Anisotropic_t) , dimension( : ), pointer :: Anisotropic type (Lumped_t) , dimension( : ), pointer :: Lumped - ! type (conformal_feature_t), , dimension( : ), pointer :: ConformalSurface + ! type (conformal_feature_t), , dimension( : ), pointer :: Conformal + ! type (conformal_face_t), , dimension( : ), pointer :: ConformalFace + ! type (conformal_edge_t), , dimension( : ), pointer :: ConformalEdge end type !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index e51ee81c3..939e69ae5 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -172,13 +172,9 @@ MODULE NFDETypes type, extends(conformal_feature_t) :: conformal_edge_media_t type(edge_t), dimension(:), allocatable :: edges - ! real(kind=rkind) :: ratio - ! integer (kind=4) :: size end type type, extends(conformal_feature_t) :: conformal_face_media_t type(face_t), dimension(:), allocatable :: faces - ! real(kind=rkind) :: ratio - ! integer (kind=4) :: size end type TYPE, PUBLIC :: ConformalMedia_t @@ -188,8 +184,6 @@ MODULE NFDETypes TYPE (conformal_edge_media_t), DIMENSION (:), POINTER :: edge_media => NULL () real (kind=rkind) :: time_step_scale_factor = 1.0 character(len=bufsize) :: tag - !! something to deal with region II edges and faces - ! type(new_conf_t) :: thin_panels END TYPE ConformalMedia_t diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 63059cb24..a8b9f9940 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -597,7 +597,7 @@ subroutine solver_init(this) call initializeMultiports() call initializeConformalElements() - call initializeConformal() + ! call initializeConformal() call initializeEDispersives() call initializeMDispersives() From 412cd88d85e3d79a315650700313090b38d95181 Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Wed, 14 Jan 2026 15:58:50 +0100 Subject: [PATCH 15/35] [WIP] --- src_conformal/conformal_timestepping.F90 | 154 ++++++++++++++++------- src_main_pub/fdetypes.F90 | 8 +- src_main_pub/healer.F90 | 14 ++- src_main_pub/nfde_types.F90 | 12 +- src_main_pub/preprocess_geom.F90 | 41 ++++-- src_main_pub/timestepping.F90 | 81 +++--------- 6 files changed, 181 insertions(+), 129 deletions(-) diff --git a/src_conformal/conformal_timestepping.F90 b/src_conformal/conformal_timestepping.F90 index 227785053..9e5bc07e1 100644 --- a/src_conformal/conformal_timestepping.F90 +++ b/src_conformal/conformal_timestepping.F90 @@ -67,6 +67,8 @@ function buildMediaMaps(conformal_surface, edge_ratios, face_ratios, num_media) integer (kind=4) :: cell(3) integer :: i, j + ! el ratio que se busca deberia ser 1-ratio? + ! y si no existe, crea medio nuevo? do i = 1, conformal_surface%n_edges_media med_number = findloc(edge_ratios, conformal_volumes%edge_media(i)%ratio, 1) do j = 1, conformal_volumes%edge_media(i)%size @@ -143,11 +145,19 @@ subroutine initConformal(sgg, Ex, Ey, Ez, Hx, Hy, Hz, conformal_media) sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = 0 sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = edge%region_II_fields%E else if (edge%ratio == 1) then - sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = Ey(cell(1) , cell(2) , cell(3)) - sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = 0 + sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 => Ey(cell(1) , cell(2) , cell(3)) + + allocate(sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned, 0.0) + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%p => % + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned + ! sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = Ey(cell(1) , cell(2) , cell(3)) + ! sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = 0 else sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 => Ey(cell(1) , cell(2) , cell(3)) - sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 => edge%region_II_fields%E + ! sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 => edge%region_II_fields%E + allocate(sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned, 0.0) + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%p => % + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned end if ! Ex(cell(1) , cell(2) + 1, cell(3)) ! Ey(cell(1) + 1, cell(2) , cell(3)) @@ -187,7 +197,19 @@ subroutine initConformal(sgg, Ex, Ey, Ez, Hx, Hy, Hz, conformal_media) end subroutine - subroutine advanceHz(media_maps) + subroutine advanceConformalE(sgg) + type (sggfdtdinfo), intent(inout) :: sgg + type(media_maps_t), intent(in) :: media_maps + real (kind = rkind), pointer :: E, H1, H2, H3, H4 + real (kind = rkind), pointer :: rIIE, rIIH1, rIIH2, rIIH3, rIIH4 + integer :: i, j, medium, direction + real (kind = rkind) :: id1, id2 + integer (kind=4) :: cell(3) + logical :: found + + end subroutine + + subroutine advanceConformalH(sgg, media_maps) type(media_maps_t), intent(in) :: media_maps real (kind = rkind), pointer :: H, E1, E2, E3, E4 real (kind = rkind), pointer :: rIIH, rIIE1, rIIE2, rIIE3, rIIE4 @@ -195,54 +217,90 @@ subroutine advanceHz(media_maps) real (kind = rkind) :: id1, id2 integer (kind=4) :: cell(3) logical :: found + type (sggfdtdinfo), intent(inout) :: sgg - !check if volume/surface - do i = 1, conformal_media%n_faces_media - do j = 1, conformal_media%face_media(i)%size - H => conformal_media%face_media(i)%faces(j)%region_I_fields%H - E1 => conformal_media%face_media(i)%faces(j)%region_I_fields%E1 - E2 => conformal_media%face_media(i)%faces(j)%region_I_fields%E2 - E3 => conformal_media%face_media(i)%faces(j)%region_I_fields%E3 - E4 => conformal_media%face_media(i)%faces(j)%region_I_fields%E4 - cell(:) = conformal_media%face_media(i)%faces(j)%cell(:) - direction = conformal_media%face_media(j)%faces(k)%direction - ! asignacion de medios: esta en otro sitio? en este esquema, los medios this%g%gm1(medium) - ! son = 0, porque se hace todo aquí. El numero de sggMiHx se mantiene, pero ahora hay un confg%g1 ? - ! hay que crear medios para las complementarios de los medios conf? - medium = media_maps%getMedium(cell, direction, found) - if (.not. found) write(*,*) 'error' - ! case(FACE_X) - ! medium = media_maps%Hx%get(key(cell)) - ! ! medium = sggMiHx(cell(1), cell(2), cell(3)) - ! ! id1 = - ! ! id2 = - ! case(FACE_Y) - ! medium =sggMiHy(cell(1), cell(2), cell(3)) - ! ! id1 = - ! ! id2 = - ! case(FACE_Z) - ! medium =sggMiHz(cell(1), cell(2), cell(3)) - ! ! id1 = Idye(cell(2)) - ! ! id2 = Idxe(cell(1)) - ! end select - ! i.e Hz, E2, E4 => Ex - ! if Ex in region II, g1 = 0, g2 = 0, and field = 0 - H = g%gm1(medium)*H + g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) - ! H = this%g%gm1(medium)*H + this%g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) - ! update region II - if (isSurface) then - rIIH => conformal_media%face_media(i)%faces(j)%region_II_fields%H - rIIE1 => conformal_media%face_media(i)%faces(j)%region_II_fields%E1 - rIIE2 => conformal_media%face_media(i)%faces(j)%region_II_fields%E2 - rIIE3 => conformal_media%face_media(i)%faces(j)%region_II_fields%E3 - rIIE4 => conformal_media%face_media(i)%faces(j)%region_II_fields%E4 - - rIIH = this%g%gm1(medium)*rIIH + this%g%gm2(medium)*((rIIE2 - rIIE4)*id1 - (rIIE3-rIIE1)*id2) + do i=1,sgg%NumMedia + if ((sgg%Med(i)%Is%ConformalPEC)) then + do j = 1, sgg%Med(i)%conformal%NumFaces - end if + H => sgg%Med(i)%conformal%faces(j)%region_I_fields%H%p + E1 => sgg%Med(i)%conformal%faces(j)%region_I_fields%E1%p + E2 => sgg%Med(i)%conformal%faces(j)%region_I_fields%E2%p + E3 => sgg%Med(i)%conformal%faces(j)%region_I_fields%E3%p + E4 => sgg%Med(i)%conformal%faces(j)%region_I_fields%E4%p - end do + cell(:) = sgg%Med(i)%conformal%faces(j)%cell(:) + direction = sgg%Med(i)%conformal%faces(k)%direction + medium = media_maps%getMedium(cell, direction, found) + + ! id1, id2? + + H = g%gm1(medium)*H + g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) + + if (isSurface) then + rIIH => sgg%Med(i)%conformal%faces(j)%region_II_fields%H%p + rIIE1 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E1%p + rIIE2 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E2%p + rIIE3 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E3%p + rIIE4 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E4%p + + ! medium ? + ! gm1, gm2? + + rIIH = gm1(medium)*rIIH + gm2(medium)*((rIIE2 - rIIE4)*id1 - (rIIE3-rIIE1)*id2) + end if + + end do + end if end do + + ! !check if volume/surface + ! do i = 1, conformal_media%n_faces_media + ! do j = 1, conformal_media%face_media(i)%size + ! H => conformal_media%face_media(i)%faces(j)%region_I_fields%H + ! E1 => conformal_media%face_media(i)%faces(j)%region_I_fields%E1 + ! E2 => conformal_media%face_media(i)%faces(j)%region_I_fields%E2 + ! E3 => conformal_media%face_media(i)%faces(j)%region_I_fields%E3 + ! E4 => conformal_media%face_media(i)%faces(j)%region_I_fields%E4 + ! cell(:) = conformal_media%face_media(i)%faces(j)%cell(:) + ! direction = conformal_media%face_media(j)%faces(k)%direction + ! ! asignacion de medios: esta en otro sitio? en este esquema, los medios this%g%gm1(medium) + ! ! son = 0, porque se hace todo aquí. El numero de sggMiHx se mantiene, pero ahora hay un confg%g1 ? + ! ! hay que crear medios para las complementarios de los medios conf? + ! medium = media_maps%getMedium(cell, direction, found) + ! if (.not. found) write(*,*) 'error' + ! ! case(FACE_X) + ! ! medium = media_maps%Hx%get(key(cell)) + ! ! ! medium = sggMiHx(cell(1), cell(2), cell(3)) + ! ! ! id1 = + ! ! ! id2 = + ! ! case(FACE_Y) + ! ! medium =sggMiHy(cell(1), cell(2), cell(3)) + ! ! ! id1 = + ! ! ! id2 = + ! ! case(FACE_Z) + ! ! medium =sggMiHz(cell(1), cell(2), cell(3)) + ! ! ! id1 = Idye(cell(2)) + ! ! ! id2 = Idxe(cell(1)) + ! ! end select + ! ! i.e Hz, E2, E4 => Ex + ! ! if Ex in region II, g1 = 0, g2 = 0, and field = 0 + ! H = g%gm1(medium)*H + g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) + ! ! H = this%g%gm1(medium)*H + this%g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) + ! ! update region II + ! if (isSurface) then + ! rIIH => conformal_media%face_media(i)%faces(j)%region_II_fields%H + ! rIIE1 => conformal_media%face_media(i)%faces(j)%region_II_fields%E1 + ! rIIE2 => conformal_media%face_media(i)%faces(j)%region_II_fields%E2 + ! rIIE3 => conformal_media%face_media(i)%faces(j)%region_II_fields%E3 + ! rIIE4 => conformal_media%face_media(i)%faces(j)%region_II_fields%E4 + + ! rIIH = this%g%gm1(medium)*rIIH + this%g%gm2(medium)*((rIIE2 - rIIE4)*id1 - (rIIE3-rIIE1)*id2) + + ! end if + + ! end do + ! end do end subroutine end module \ No newline at end of file diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index 8ed579049..87b0a44c1 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -263,7 +263,8 @@ module FDETYPES NodalE , & NodalH , & MagneticMedia, PMLMagneticMedia, & - MTLNbundles + MTLNbundles, & + Conformals contains procedure :: reset => logic_reset end type @@ -598,8 +599,8 @@ module FDETYPES type (Anisotropic_t) , dimension( : ), pointer :: Anisotropic type (Lumped_t) , dimension( : ), pointer :: Lumped ! type (conformal_feature_t), , dimension( : ), pointer :: Conformal - ! type (conformal_face_t), , dimension( : ), pointer :: ConformalFace - ! type (conformal_edge_t), , dimension( : ), pointer :: ConformalEdge + type (edge_t), dimension( : ), pointer :: ConformalEdge + type (face_t), dimension( : ), pointer :: ConformalFace end type !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -774,6 +775,7 @@ subroutine logic_reset(this) this%MagneticMedia = .false. this%PMLMagneticMedia= .false. this%MTLNbundles = .false. + this%Conformals = .false. end subroutine subroutine setglobal(iu1,iu2) diff --git a/src_main_pub/healer.F90 b/src_main_pub/healer.F90 index c0b404582..9365c9a35 100755 --- a/src_main_pub/healer.F90 +++ b/src_main_pub/healer.F90 @@ -31,7 +31,7 @@ MODULE CreateMatrices PUBLIC CreatePMLmatrix, Readjust PUBLIC CreateVolumeMM, CreateSurfaceMM, CreateLineMM PUBLIC CreateSurfaceSlotMM,CreateMagneticSurface - public CreateConformalPECVolume + public CreateConformalPECVolume!, CreateConformalPECSurface ! CONTAINS @@ -55,6 +55,18 @@ SUBROUTINE SortInitEndWithIncreasingOrder(p) endif END SUBROUTINE + ! Similar to CreateConformalPECVolume, but fills only the boundary? Inside (if closed surface) is vacuum/subtrate + ! If open surface, only boundary has to be tagged + ! SUBROUTINE CreateConformalPECSurface (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + ! & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & + ! & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & + ! & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & + ! & Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, & + ! & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & + ! & NumMedia, BoundingBox,indicemedio) + + ! end subroutine + SUBROUTINE CreateConformalPECVolume (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index 939e69ae5..6582f87b6 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -64,7 +64,9 @@ MODULE NFDETypes INTEGER (KIND=4), PARAMETER :: diodo = 23 INTEGER (KIND=4), PARAMETER :: Dielectric = 24 INTEGER (KIND=4), PARAMETER :: PMLbody = 25 - + ! conformal + INTEGER (KIND=4), PARAMETER :: isVolume = 1 + INTEGER (KIND=4), PARAMETER :: isSurface = 2 !------------------------------------------------------------------------------ ! TYPES !------------------------------------------------------------------------------ @@ -133,6 +135,11 @@ MODULE NFDETypes type(ConformalPECElement), dimension(:), pointer :: surfaces => null() end type + type :: conformal_field_t + real(kind=rkind), pointer :: p => null() + real(kind=rkind), allocatable :: owned + end type + type :: conformal_edge_fields_t real(kind=rkind), pointer :: E => null() real(kind=rkind), pointer :: H1 => null() @@ -143,7 +150,8 @@ MODULE NFDETypes type :: conformal_face_fields_t real(kind=rkind), pointer :: H => null() - real(kind=rkind), pointer :: E1 => null() + type(conformal_field_t) :: E1 + ! real(kind=rkind), pointer :: E1 => null() real(kind=rkind), pointer :: E2 => null() real(kind=rkind), pointer :: E3 => null() real(kind=rkind), pointer :: E4 => null() diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index ffebf5076..b97a99d10 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -2554,7 +2554,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN do j = 1, ubound(conformal_volumes,1) - call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j)) + call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j), isVolume) numertag = searchtag(tagtype,conformal_volumes(j)%tag) CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & @@ -2566,9 +2566,13 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + ! faces from V and S with same ratio are considered different media, bc they need to perform different operations do j = 1, ubound(conformal_surfaces,1) - - ! call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j)) + + call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j), isSurface) ! numertag = searchtag(tagtype,conformal_surfaces(j)%tag) ! CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & ! & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & @@ -4939,7 +4943,7 @@ subroutine getDifferentFaceRatios(ratios, conf_media) end do end subroutine - subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map) + subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map, type) type(sggfdtdinfo), intent(inout) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes @@ -4949,6 +4953,7 @@ subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ra integer (kind=4) :: num_media type(XYZlimit_t), intent(inout) :: bbox type(side_tris_map_t), intent(in) :: side_map + integer (kind=4) :: type integer :: i, j call initConformalBoundingBox(sgg,bbox) @@ -4978,13 +4983,13 @@ subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ra face_ratios_no_zero = face_ratios end if num_media = contamedia - call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox) + call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, type) num_media = contamedia + ubound(edge_ratios_no_zero,1) - call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox) + call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox, type) call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) end subroutine - subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox) + subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) type (SGGFDTDINFO), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes @@ -4994,13 +4999,15 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ integer (kind=4) :: face_media integer (kind=4) :: cell(3) type(XYZlimit_t), intent(inout) :: bbox + integer (kind=4), intent(in) :: type integer :: j, k do j = 1, conformal_volumes%n_faces_media if (conformal_volumes%face_media(j)%ratio /= 0) then face_media = num_media + findloc(face_ratios, conformal_volumes%face_media(j)%ratio, 1) sgg%Med(face_media)%Is%ConformalPEC = .TRUE. sgg%Med(face_media)%Is%Needed = .TRUE. - sgg%Med(face_media)%Is%Volume = .TRUE. + if (type == isVolume) sgg%Med(face_media)%Is%Volume = .TRUE. + if (type == isSurface) sgg%Med(face_media)%Is%Surface = .TRUE. sgg%Med(face_media)%Priority = prior_PEC sgg%Med(face_media)%Epr = this%mats%mats(1)%eps / Eps0 sgg%Med(face_media)%Sigma = 1.0e29_RKIND @@ -5009,6 +5016,9 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ else face_media = 0 end if + + allocate(sgg%Med(face_media)%ConformalFace,conformal_volumes%face_media(j)%size) + do k = 1, conformal_volumes%face_media(j)%size cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) if (cell(1) < bbox%xi) bbox%xi = cell(1) @@ -5027,6 +5037,8 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ media%sggMiHz(cell(1), cell(2), cell(3)) = face_media end select + sgg%Med(face_media)%ConformalFace(k) => conformal_volumes%face_media(j)%faces(k) + end do end do end subroutine @@ -5044,7 +5056,7 @@ function getEdgeNormalFromTriangles(triangles) result(res) res = res/ubound(triangles,1) end function - subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox) + subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, type) type (SGGFDTDINFO), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes @@ -5054,7 +5066,8 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ integer (kind=4) :: edge_media integer (kind=4) :: cell(3) type(XYZlimit_t), intent(inout) :: bbox - integer(kind=4), dimension(4) :: key + integer (kind=4), intent(in) :: type + ! integer(kind=4), dimension(4) :: key integer :: j, k real, dimension(3) :: normal @@ -5063,7 +5076,8 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ edge_media = num_media + findloc(edge_ratios, conformal_volumes%edge_media(j)%ratio,1) sgg%Med(edge_media)%Is%ConformalPEC = .TRUE. sgg%Med(edge_media)%Is%Needed = .TRUE. - sgg%Med(edge_media)%Is%Volume = .TRUE. + if (type == isVolume) sgg%Med(edge_media)%Is%Volume = .TRUE. + if (type == isSurface) sgg%Med(edge_media)%Is%Surface = .TRUE. sgg%Med(edge_media)%Priority = prior_PEC sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_volumes%edge_media(j)%ratio ) / Eps0 sgg%Med(edge_media)%Sigma = 1.0e29_RKIND @@ -5072,6 +5086,10 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ else edge_media = 0 end if + + allocate(sgg%Med(edge_media)%ConformalEdge,conformal_volumes%edge_media(j)%size) + + do k = 1, conformal_volumes%edge_media(j)%size cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) @@ -5091,6 +5109,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end select + sgg%Med(edge_media)%ConformalEdge(k) => conformal_volumes%edge_media(j)%edge(k) end do diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index a8b9f9940..fb3f9b47d 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -135,7 +135,8 @@ module Solver_mod procedure :: step procedure :: advanceE, advanceEx, advanceEy, advanceEz procedure :: advanceH, advanceHx, advanceHy, advanceHz - procedure :: advanceConformalH, advanceConformalHx, advanceConformalHy, advanceConformalHz + procedure :: advanceConformalE => solver_advanceConformalE + procedure :: advanceConformalH => solver_advanceConformalH procedure :: advancePlaneWaveE => solver_advancePlaneWaveE procedure :: advancePlaneWaveH => solver_advancePlaneWaveH procedure :: advanceWiresE => solver_advanceWiresE @@ -597,8 +598,9 @@ subroutine solver_init(this) call initializeMultiports() call initializeConformalElements() - ! call initializeConformal() - + ! WIP + call initializeConformal() + ! call initializeEDispersives() call initializeMDispersives() call initializePlanewave() @@ -1366,11 +1368,7 @@ subroutine initializeConformal() call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) - ! call initConformal(this%sgg, & - ! this%media%sggMiEx, this%media%sggMiEy,this%media%sggMiEz, & - ! this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & - ! Ex,Ey,Ez,Hx,Hy,Hz, & - ! this%control%layoutnumber) + ! call initConformal(this%sgg, Ex,Ey,Ez,Hx,Hy,Hz) end subroutine @@ -2095,7 +2093,9 @@ subroutine step(this) call flushPlanewaveOff(planewave_switched_off, this%still_planewave_time, thereareplanewave) call this%AdvanceAnisotropicE() call this%advanceE() - ! call this%advanceConformalE() + ! WIP + call this%advanceConformalE() + ! #ifdef CompileWithConformal if(this%control%input_conformal_flag) call conformal_advance_E() #endif @@ -2119,7 +2119,9 @@ subroutine step(this) call this%advanceAnisotropicH() call this%advanceH() + ! WIP call this%advanceConformalH() + ! call this%advancePMLbodyH() call this%AdvanceMagneticCPML() call this%MinusCloneMagneticPMC() @@ -2532,64 +2534,15 @@ subroutine advanceHz(this, sggMiHz) return end subroutine advanceHz - subroutine advanceConformalH(this) + subroutine solver_advanceConformalE(this) class(solver_t) :: this -#ifdef CompileWithProfiling - call nvtxStartRange("Antes del bucle Conformal HX") -#endif - call this%advanceConformalHx() -#ifdef CompileWithProfiling - call nvtxEndRange - call nvtxStartRange("Antes del bucle Conformal HY") -#endif - call this%advanceConformalHy() -#ifdef CompileWithProfiling - call nvtxEndRange - call nvtxStartRange("Antes del bucle Conformal HZ") -#endif - call this%advanceConformalHz() -#ifdef CompileWithProfiling - call nvtxEndRange -#endif - end subroutine advanceConformalH - - subroutine advanceConformalHx(this) - class(solver_t) :: this - ! integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiHx%NX-1,0:this%bounds%sggMiHx%NY-1,0:this%bounds%sggMiHx%NZ-1), intent(in) :: sggMiHx - - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ey - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ez - real (kind=rkind), dimension(:), pointer:: IdyE - real (kind=rkind), dimension(:), pointer:: IdzE - real (kind=rkind) :: Idzek, Idyej - integer(kind=4) :: i - integer(kind=integersizeofmediamatrices) :: medio + if (this%thereAre%conformals) call advanceConformalE(this%sgg) + end subroutine solver_advanceConformalE - Hx(0:this%bounds%Hx%NX-1,0:this%bounds%Hx%NY-1,0:this%bounds%Hx%NZ-1) => this%Hx - Ey(0:this%bounds%Ey%NX-1,0:this%bounds%Ey%NY-1,0:this%bounds%Ey%NZ-1) => this%Ey - Ez(0:this%bounds%Ez%NX-1,0:this%bounds%Ez%NY-1,0:this%bounds%Ez%NZ-1) => this%Ez - - IdyE(0:this%bounds%dyE%NY-1) => this%IdyE - IdzE(0:this%bounds%dzE%NZ-1) => this%IdzE - - ! medio = mapa de celda, direccion para E y para H? - ! which field updates? how is it defined? what happens with index shifting? - ! do i=1,size(conformal_size_map) - ! Idzek=Idze(k) - ! Idyej=Idye(j) - ! medio =sggMiHx(i,j,k) - ! Hx(i,j,k)=this%g%gm1(medio)*Hx(i,j,k)+this%g%gm2(medio)*((Ey(i,j,k+1)-Ey(i,j,k))*Idzek-(Ez(i,j+1,k)-Ez(i,j,k))*Idyej) - ! end do - - return - end subroutine advanceConformalHx - subroutine advanceConformalHy(this) - class(solver_t) :: this - end subroutine advanceConformalHy - subroutine advanceConformalHz(this) + subroutine solver_advanceConformalH(this) class(solver_t) :: this - end subroutine advanceConformalHz + if (this%thereAre%conformals) call advanceConformalH(this%sgg) + end subroutine solver_advanceConformalH subroutine solver_advanceEDispersiveE(this) From 6999c0fd4c5bccdafce63159df30594dedb8249f Mon Sep 17 00:00:00 2001 From: Alberto-o Date: Thu, 15 Jan 2026 16:12:34 +0100 Subject: [PATCH 16/35] [WIP] Considering copying dispersives et al structure --- src_conformal/conformal_timestepping.F90 | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src_conformal/conformal_timestepping.F90 b/src_conformal/conformal_timestepping.F90 index 9e5bc07e1..33751b8e3 100644 --- a/src_conformal/conformal_timestepping.F90 +++ b/src_conformal/conformal_timestepping.F90 @@ -24,6 +24,15 @@ module conformal_mod ! gm1 y gm2 dependen del ratio nuevo ! los E => a los edges o campos de la region I + ! t_t alguno de los tipos conformal + + + ! type Conformal_t + ! integer (kind=simple) :: nConformalMedia + ! type(t_t), pointer, dimension(:) :: medium + ! end type + ! type (Conformal_t), save, target :: conformal + contains From 24704f2c9afee0bc8bdb733edd416acc618eb23e Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Mon, 10 Aug 2026 11:43:39 +0200 Subject: [PATCH 17/35] Updated input format --- doc/fdtdjson.md | 11 +- src_json_parser/smbjson.F90 | 72 +-- src_json_parser/smbjson_labels.F90 | 1 + testData/cases/conformal/conformal.fdtd.json | 504 +++++++++++++++++- .../conformal_surface_sphere.fdtd.json | 2 +- .../conformal_thin_strip.fdtd.json | 2 +- .../predefinedExcitation.1.exc | 3 + testData/input_examples/conformal.fdtd.json | 2 +- 8 files changed, 553 insertions(+), 44 deletions(-) create mode 100644 testData/cases/conformal_thin_strip/predefinedExcitation.1.exc diff --git a/doc/fdtdjson.md b/doc/fdtdjson.md index dec86010c..6ebb5cb7e 100644 --- a/doc/fdtdjson.md +++ b/doc/fdtdjson.md @@ -148,10 +148,10 @@ The `elements` entry contains an array of JSON objects, each of which represents + `node`, representing a point in space. Elements with this type include a `` entry which is an array of a single integer representing the `id` of a coordinate and which must exist in the within the `mesh` `coordinates` list. + `polyline`, representing an oriented collection of segments. It must contain a list `` with at least two coordinates. + `cell`, containing a list of one or more `` defined following the [interval convention](#the-interval-convention). - + + If `cell` represents a conformal element it will contain a list of zero or more and a list of , describing a close outwards-pointing surface. - + + In this case, the `cell` must contain an entry `subtype`, which can be `surface` or `volume`, according to the dimension of the geometrical entity. - - + + `conformal` represents a conformal element which contains a list of `[intervals]` which define surfaces or lines, and a list of ``. The cells occupied by intervals and triangles can not contain both. + It also must contain an entry `subtype`, which can be: + + `surface`, the intervals and triangles will be treated as a surface, which can be open or closed. + + `volume`, the intervals and triangles must define a closed surface with all normals pointing outwards. Below there is an example of a mesh object which includes several types of elements. @@ -170,7 +170,8 @@ Below there is an example of a mesh object which includes several types of eleme {"id": 1, "type": "node", "coordinateIds": [2]}, {"id": 2, "type": "polyline", "coordinateIds": [1, 2, 3] }, {"id": 3, "type": "cell", "intervals": [ [ [1, 1, 1], [19, 19, 21] ] ] } - {"id": 4, "type": "conformalVolume", "intervals": [ [ [1, 1, 1], [19, 19, 21] ] ], "triangles" : [[1,2,3]] } + {"id": 4, "type": "conformal", "subtype": "surface", + "intervals": [ [ [1, 1, 1], [19, 19, 1] ] ], "triangles" : [ [1,2,3] ] } ] } ``` diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 34403aad2..a70ffc662 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -254,39 +254,13 @@ subroutine addElements(mesh) call mesh%addElement(id, polyline) CASE (J_ELEM_TYPE_CELL) block - logical :: isConformal - type(json_value), pointer :: triangles - call this%core%get(je, J_CONF_VOLUME_TRIANGLES, triangles, found=isConformal) - if (.not. isConformal) then - block - type(cell_region_t) :: cR - type(cell_interval_t), dimension(:), allocatable :: intervals - cR%intervals = readCellIntervals(je, J_CELL_INTERVALS) - call mesh%addCellRegion(id, cR) - end block - else - block - type(conformal_region_t) :: cV - type(coordinate_t) :: c - integer :: j, k - character (len=:), allocatable :: subtype - cV%triangles = readTriangles(je, J_CONF_VOLUME_TRIANGLES) - do k = 1, size(cV%triangles) - do j = 1, 3 - c = mesh%getCoordinate(cV%triangles(k)%vertices(j)%id) - cV%triangles(k)%vertices(j)%position(1:3) = c%position(1:3) - end do - end do - cV%intervals = readCellIntervals(je, J_CELL_INTERVALS) - subtype = this%getStrAt(je, J_SUBTYPE) - - if (subtype == J_CONF_SUBTYPE_VOLUME) cV%type = REGION_TYPE_VOLUME - if (subtype == J_CONF_SUBTYPE_SURFACE) cV%type = REGION_TYPE_SURFACE - - call mesh%addConformalRegion(id, cV) - end block - end if + type(json_value), pointer :: subtypeEntry, trianglesEntry + type(cell_region_t) :: cR + cR%intervals = readCellIntervals(je, J_CELL_INTERVALS) + call mesh%addCellRegion(id, cR) end block + case (J_ELEM_TYPE_CONFORMAL) + call mesh%addConformalRegion(id, readConformalRegion(je, mesh)) case default call WarnErrReport('Invalid element type', .true.) end select @@ -349,6 +323,35 @@ function readTriangles(place, path) result(res) end function + function readConformalRegion(place, mesh) result(res) + type(json_value), pointer, intent(in) :: place + type(mesh_t), intent(in) :: mesh + type(conformal_region_t) :: res + + type(coordinate_t) :: c + integer :: j, k + character (len=:), allocatable :: subtype + + res%triangles = readTriangles(place, J_CONF_VOLUME_TRIANGLES) + do k = 1, size(res%triangles) + do j = 1, 3 + c = mesh%getCoordinate(res%triangles(k)%vertices(j)%id) + res%triangles(k)%vertices(j)%position(1:3) = c%position(1:3) + end do + end do + res%intervals = readCellIntervals(place, J_CELL_INTERVALS) + subtype = this%getStrAt(place, J_SUBTYPE) + + if (subtype == J_CONF_SUBTYPE_VOLUME) then + res%type = REGION_TYPE_VOLUME + else if (subtype == J_CONF_SUBTYPE_SURFACE) then + res%type = REGION_TYPE_SURFACE + else + call WarnErrReport('Invalid conformal subtype label: ' // subtype // '. Expected "surface" or "volume".', .true.) + return + end if + end function + end function function readAdditionalArguments(this) result (res) @@ -529,8 +532,7 @@ function buildPECPMCRegions(this, matType) result(res) type(coords), dimension(:), pointer :: cs integer :: i - ! mAs = this%getMaterialAssociations([matType],[J_ELEM_TYPE_CELL]) - mAs = this%getMaterialAssociations([matType],['-'//J_CONF_SUBTYPE_SURFACE, J_ELEM_TYPE_CELL//' ', '-'//J_CONF_SUBTYPE_VOLUME//' ']) + mAs = this%getMaterialAssociations([matType], [J_ELEM_TYPE_CELL]) block type(coords), dimension(:), pointer :: emptyCoords if (size(mAs) == 0) then @@ -597,7 +599,7 @@ function readConformalRegions(this) result(res) integer :: i, j logical :: found - mAs = this%getMaterialAssociations([J_MAT_TYPE_PEC], [J_CONF_SUBTYPE_VOLUME, J_CONF_SUBTYPE_SURFACE]) + mAs = this%getMaterialAssociations([J_MAT_TYPE_PEC], [J_ELEM_TYPE_CONFORMAL]) do i = 1, size(mAs) do j = 1, size(mAs(i)%elementIds) diff --git a/src_json_parser/smbjson_labels.F90 b/src_json_parser/smbjson_labels.F90 index e315adbb1..e3914209a 100644 --- a/src_json_parser/smbjson_labels.F90 +++ b/src_json_parser/smbjson_labels.F90 @@ -146,6 +146,7 @@ module smbjson_labels_m character(len=*), parameter :: J_ELEM_TYPE_NODE = "node" character(len=*), parameter :: J_ELEM_TYPE_POLYLINE = "polyline" character(len=*), parameter :: J_ELEM_TYPE_CELL = "cell" + character(len=*), parameter :: J_ELEM_TYPE_CONFORMAL = "conformal" character(len=*), parameter :: J_CELL_INTERVALS = "intervals" character(len=*), parameter :: J_CONF_VOLUME_TRIANGLES = "triangles" character(len=*), parameter :: J_CONF_VOLUME_INTERVALS = "intervals" diff --git a/testData/cases/conformal/conformal.fdtd.json b/testData/cases/conformal/conformal.fdtd.json index 02d1128f9..02b5e200d 100644 --- a/testData/cases/conformal/conformal.fdtd.json +++ b/testData/cases/conformal/conformal.fdtd.json @@ -1 +1,503 @@ -{"format": "FDTD Input file", "__comments": "Planewave illuminating a PEC panel", "general": {"timeStep": 3e-12, "numberOfSteps": 50000}, "boundary": {"xLower": {"type": "pec"}, "xUpper": {"type": "pec"}, "yLower": {"type": "pmc"}, "yUpper": {"type": "pmc"}, "zLower": {"type": "pml"}, "zUpper": {"type": "pml"}}, "mesh": {"grid": {"numberOfCells": [3, 3, 6], "steps": {"x": [0.02], "y": [0.02], "z": [0.02]}}, "coordinates": [{"id": 1, "relativePosition": [1, 1, 1]}, {"id": 2, "relativePosition": [1, 1, 5]}, {"id": 3, "relativePosition": [0, 0, 5]}, {"id": 4, "relativePosition": [2, 0, 5]}, {"id": 5, "relativePosition": [0, 2, 5]}, {"id": 6, "relativePosition": [2, 2, 5]}, {"id": 7, "relativePosition": [0, 0, 5.0]}, {"id": 8, "relativePosition": [2, 0, 5.0]}, {"id": 9, "relativePosition": [0, 2, 5.0]}, {"id": 10, "relativePosition": [2, 2, 5.0]}, {"id": 11, "relativePosition": [1, 0, 5]}, {"id": 12, "relativePosition": [2, 1, 5]}, {"id": 13, "relativePosition": [0, 1, 5]}, {"id": 14, "relativePosition": [1, 2, 5]}, {"id": 15, "relativePosition": [1, 1, 5]}, {"id": 16, "relativePosition": [1, 0, 5.0]}, {"id": 17, "relativePosition": [2, 1, 5.0]}, {"id": 18, "relativePosition": [0, 1, 5.0]}, {"id": 19, "relativePosition": [1, 2, 5.0]}, {"id": 20, "relativePosition": [1, 1, 5.0]}], "elements": [{"id": 1, "type": "node", "coordinateIds": [1]}, {"id": 2, "type": "node", "coordinateIds": [2]}, {"id": 3, "type": "cell", "name": "pw-box", "intervals": [[[-1, -1, 3], [4, 4, 35]]]}, {"id": 4, "type": "cell", "name": "square", "intervals": [[[0, 0, 5], [2, 2, 5]]]}, {"id": 5, "type": "cell", "subtype": "volume", "name": "conformal-box", "intervals": [[[0, 0, 5], [1, 1, 5], [0, 1, 5], [1, 2, 5], [1, 0, 5], [2, 1, 5], [1, 1, 5], [2, 2, 5]]], "triangles": [[7, 18, 20], [7, 20, 16], [16, 20, 17], [16, 17, 8], [18, 9, 19], [18, 19, 20], [20, 19, 10], [20, 10, 17], [7, 11, 3], [16, 11, 3], [16, 4, 11], [16, 8, 4], [8, 12, 4], [8, 17, 12], [17, 10, 6], [17, 6, 12], [9, 5, 14], [9, 14, 19], [19, 14, 6], [19, 6, 10], [7, 3, 13], [7, 13, 18], [18, 13, 5], [18, 5, 9]]}]}, "materials": [{"name": "aluminum", "id": 1, "type": "multilayeredSurface", "layers": [{"thickness": 0.01, "electricConductivity": 100}]}, {"name": "pec", "id": 2, "type": "pec"}], "materialAssociations": [{"materialId": 2, "elementIds": [5]}], "sources": [{"type": "planewave", "magnitudeFile": "gauss.exc", "elementIds": [3], "direction": {"theta": 0.0, "phi": 0.0}, "polarization": {"theta": 1.5708, "phi": 0.0}}], "probes": [{"name": "front", "type": "point", "field": "electric", "directions": ["x"], "elementIds": [1]}, {"name": "back", "type": "point", "field": "electric", "directions": ["x"], "elementIds": [2]}]} \ No newline at end of file +{ + "format": "FDTD Input file", + "__comments": "Planewave illuminating a PEC panel", + "general": { + "timeStep": 3e-12, + "numberOfSteps": 50000 + }, + "boundary": { + "xLower": { + "type": "pec" + }, + "xUpper": { + "type": "pec" + }, + "yLower": { + "type": "pmc" + }, + "yUpper": { + "type": "pmc" + }, + "zLower": { + "type": "pml" + }, + "zUpper": { + "type": "pml" + } + }, + "mesh": { + "grid": { + "numberOfCells": [ + 3, + 3, + 6 + ], + "steps": { + "x": [ + 0.02 + ], + "y": [ + 0.02 + ], + "z": [ + 0.02 + ] + } + }, + "coordinates": [ + { + "id": 1, + "relativePosition": [ + 1, + 1, + 1 + ] + }, + { + "id": 2, + "relativePosition": [ + 1, + 1, + 5 + ] + }, + { + "id": 3, + "relativePosition": [ + 0, + 0, + 5 + ] + }, + { + "id": 4, + "relativePosition": [ + 2, + 0, + 5 + ] + }, + { + "id": 5, + "relativePosition": [ + 0, + 2, + 5 + ] + }, + { + "id": 6, + "relativePosition": [ + 2, + 2, + 5 + ] + }, + { + "id": 7, + "relativePosition": [ + 0, + 0, + 5.0 + ] + }, + { + "id": 8, + "relativePosition": [ + 2, + 0, + 5.0 + ] + }, + { + "id": 9, + "relativePosition": [ + 0, + 2, + 5.0 + ] + }, + { + "id": 10, + "relativePosition": [ + 2, + 2, + 5.0 + ] + }, + { + "id": 11, + "relativePosition": [ + 1, + 0, + 5 + ] + }, + { + "id": 12, + "relativePosition": [ + 2, + 1, + 5 + ] + }, + { + "id": 13, + "relativePosition": [ + 0, + 1, + 5 + ] + }, + { + "id": 14, + "relativePosition": [ + 1, + 2, + 5 + ] + }, + { + "id": 15, + "relativePosition": [ + 1, + 1, + 5 + ] + }, + { + "id": 16, + "relativePosition": [ + 1, + 0, + 5.0 + ] + }, + { + "id": 17, + "relativePosition": [ + 2, + 1, + 5.0 + ] + }, + { + "id": 18, + "relativePosition": [ + 0, + 1, + 5.0 + ] + }, + { + "id": 19, + "relativePosition": [ + 1, + 2, + 5.0 + ] + }, + { + "id": 20, + "relativePosition": [ + 1, + 1, + 5.0 + ] + } + ], + "elements": [ + { + "id": 1, + "type": "node", + "coordinateIds": [ + 1 + ] + }, + { + "id": 2, + "type": "node", + "coordinateIds": [ + 2 + ] + }, + { + "id": 3, + "type": "cell", + "name": "pw-box", + "intervals": [ + [ + [ + -1, + -1, + 3 + ], + [ + 4, + 4, + 35 + ] + ] + ] + }, + { + "id": 4, + "type": "cell", + "name": "square", + "intervals": [ + [ + [ + 0, + 0, + 5 + ], + [ + 2, + 2, + 5 + ] + ] + ] + }, + { + "id": 5, + "type": "conformal", + "subtype": "volume", + "name": "conformal-box", + "intervals": [ + [ + [ + 0, + 0, + 5 + ], + [ + 1, + 1, + 5 + ], + [ + 0, + 1, + 5 + ], + [ + 1, + 2, + 5 + ], + [ + 1, + 0, + 5 + ], + [ + 2, + 1, + 5 + ], + [ + 1, + 1, + 5 + ], + [ + 2, + 2, + 5 + ] + ] + ], + "triangles": [ + [ + 7, + 18, + 20 + ], + [ + 7, + 20, + 16 + ], + [ + 16, + 20, + 17 + ], + [ + 16, + 17, + 8 + ], + [ + 18, + 9, + 19 + ], + [ + 18, + 19, + 20 + ], + [ + 20, + 19, + 10 + ], + [ + 20, + 10, + 17 + ], + [ + 7, + 11, + 3 + ], + [ + 16, + 11, + 3 + ], + [ + 16, + 4, + 11 + ], + [ + 16, + 8, + 4 + ], + [ + 8, + 12, + 4 + ], + [ + 8, + 17, + 12 + ], + [ + 17, + 10, + 6 + ], + [ + 17, + 6, + 12 + ], + [ + 9, + 5, + 14 + ], + [ + 9, + 14, + 19 + ], + [ + 19, + 14, + 6 + ], + [ + 19, + 6, + 10 + ], + [ + 7, + 3, + 13 + ], + [ + 7, + 13, + 18 + ], + [ + 18, + 13, + 5 + ], + [ + 18, + 5, + 9 + ] + ] + } + ] + }, + "materials": [ + { + "name": "aluminum", + "id": 1, + "type": "multilayeredSurface", + "layers": [ + { + "thickness": 0.01, + "electricConductivity": 100 + } + ] + }, + { + "name": "pec", + "id": 2, + "type": "pec" + } + ], + "materialAssociations": [ + { + "materialId": 2, + "elementIds": [ + 5 + ] + } + ], + "sources": [ + { + "type": "planewave", + "magnitudeFile": "gauss.exc", + "elementIds": [ + 3 + ], + "direction": { + "theta": 0.0, + "phi": 0.0 + }, + "polarization": { + "theta": 1.5708, + "phi": 0.0 + } + } + ], + "probes": [ + { + "name": "front", + "type": "point", + "field": "electric", + "directions": [ + "x" + ], + "elementIds": [ + 1 + ] + }, + { + "name": "back", + "type": "point", + "field": "electric", + "directions": [ + "x" + ], + "elementIds": [ + 2 + ] + } + ] +} \ No newline at end of file diff --git a/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json b/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json index f196fd38f..133311fa7 100644 --- a/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json +++ b/testData/cases/conformal_surface_sphere/conformal_surface_sphere.fdtd.json @@ -35,7 +35,7 @@ "elements": [ { "id": 1, - "type": "conformalSurface", + "type": "conformal", "subtype": "surface", "intervals": [], "triangles": [ [ diff --git a/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json b/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json index 28d187b67..7efc743fe 100644 --- a/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json +++ b/testData/cases/conformal_thin_strip/conformal_thin_strip.fdtd.json @@ -4609,7 +4609,7 @@ "elements": [ { "id": 1, - "type": "conformalSurface", + "type": "conformal", "subtype": "surface", "intervals": [], "triangles": [] }, diff --git a/testData/cases/conformal_thin_strip/predefinedExcitation.1.exc b/testData/cases/conformal_thin_strip/predefinedExcitation.1.exc new file mode 100644 index 000000000..06c89a1cb --- /dev/null +++ b/testData/cases/conformal_thin_strip/predefinedExcitation.1.exc @@ -0,0 +1,3 @@ +0.0 0.0 +1.0e-11 1.0 +6.0e-6 0.0 diff --git a/testData/input_examples/conformal.fdtd.json b/testData/input_examples/conformal.fdtd.json index b12146c17..251db668f 100644 --- a/testData/input_examples/conformal.fdtd.json +++ b/testData/input_examples/conformal.fdtd.json @@ -49,7 +49,7 @@ {"id": 2, "type": "node", "coordinateIds": [2]}, {"id": 3, "type": "cell", "name": "pw-box", "intervals": [ [ [-1, -1, 3], [3, 3, 35] ] ]}, {"id": 4, "type": "cell", "name": "square", "intervals": [ [ [0, 0, 5], [2, 2, 5] ] ]}, - {"id": 5, "type": "cell", "subtype" : "volume", "name": "conformal-box", + {"id": 5, "type": "conformal", "subtype" : "volume", "name": "conformal-box", "intervals" : [[[0,0,5],[2,2,5]]], "triangles": [ [7, 18, 20], [7, 20, 16], [16, 20, 17], [16, 17, 8], [18, 9, 19], [18, 19,20 ], [20, 19, 10], [20, 10, 17], [7,11 ,3 ], [16, 11, 3], [16, 4,11 ], [16, 8, 4], From dd90c6fcaedd14a76cd91677e93f62e61170d1ea Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Mon, 10 Aug 2026 13:10:59 +0200 Subject: [PATCH 18/35] Compiles --- src_conformal/CMakeLists.txt | 6 +- src_conformal/cell_map.F90 | 10 +- src_conformal/conformal.F90 | 18 +- src_json_parser/smbjson.F90 | 226 ++++++++-------- src_main_pub/fdetypes.F90 | 116 +++++++-- src_main_pub/healer.F90 | 58 ++--- src_main_pub/nfde_types.F90 | 430 +++++++++++++------------------ src_main_pub/preprocess_geom.F90 | 55 ++-- src_main_pub/timestepping.F90 | 225 ++++++++-------- 9 files changed, 566 insertions(+), 578 deletions(-) diff --git a/src_conformal/CMakeLists.txt b/src_conformal/CMakeLists.txt index 624fdd236..0d91adb33 100644 --- a/src_conformal/CMakeLists.txt +++ b/src_conformal/CMakeLists.txt @@ -3,9 +3,9 @@ message(STATUS "Creating build system for conformal") set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod) add_library(conformal - "cell_map.F90" - "conformal.F90" "geometry.F90" + "cell_map.F90" + "conformal.F90" ) -target_link_libraries(conformal PRIVATE semba-types fhash) \ No newline at end of file +target_link_libraries(conformal PRIVATE semba-types fhash) diff --git a/src_conformal/cell_map.F90 b/src_conformal/cell_map.F90 index f1fd27910..4fd0111b0 100644 --- a/src_conformal/cell_map.F90 +++ b/src_conformal/cell_map.F90 @@ -1,8 +1,8 @@ -module cell_map_mod +module cell_map_m - use geometry_mod, only: triangle_t, side_t, interval_t, FACE_X, FACE_Y, FACE_Z, isNewSide + use geometry_m, only: triangle_t, side_t, interval_t, FACE_X, FACE_Y, FACE_Z, isNewSide use fhash, only: fhash_tbl_t, key=>fhash_key - use NFDETypes, only: rkind, ConformalPECElement + use NFDETypes_m, only: rkind, ConformalPECElements_t implicit none @@ -150,7 +150,7 @@ subroutine buildSideMap(res, triangles) subroutine buildCellMap(res, volume) type(cell_map_t), intent(inout) :: res - type(ConformalPECElement), intent(in) :: volume + type(ConformalPECElements_t), intent(in) :: volume type(triangle_map_t) :: tri_map type(interval_map_t) :: interval_map type(side_map_t) :: side_map, side_map_on @@ -630,4 +630,4 @@ function getCellRatiosInCell(this, k) result(res) end function -end module \ No newline at end of file +end module diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index 123f6c75c..09851aa84 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -1,8 +1,8 @@ -module conformal_mod +module conformal_m - use geometry_mod - use cell_map_mod - use NFDETypes, only: ConformalPECRegions, ConformalPECElement, ConformalMedia_t, & + use geometry_m + use cell_map_m + use NFDETypes_m, only: ConformalPECRegions_t, ConformalPECElements_t, ConformalMedia_t, & edge_t, face_t, & conformal_face_media_t, conformal_edge_media_t, rkind @@ -12,7 +12,7 @@ module conformal_mod contains function buildSideMaps(regions) result(res) - type(ConformalPECRegions), intent(in) :: regions + type(ConformalPECRegions_t), intent(in) :: regions type(side_tris_map_t), dimension(:), allocatable :: res integer :: i allocate(res(size(regions%volumes))) @@ -22,7 +22,7 @@ function buildSideMaps(regions) result(res) end function subroutine buildConformalMedia(conformalRegs, volumes, surfaces) - type(ConformalPECRegions), pointer, intent(in) :: conformalRegs + type(ConformalPECRegions_t), pointer, intent(in) :: conformalRegs type(ConformalMedia_t), allocatable, dimension(:), intent(inout) :: volumes, surfaces if (associated(conformalRegs%volumes)) then volumes = buildMedia(conformalRegs%volumes) @@ -37,7 +37,7 @@ subroutine buildConformalMedia(conformalRegs, volumes, surfaces) end subroutine function buildMedia(elements) result(res) - type(ConformalPECElement), dimension(:), pointer :: elements + type(ConformalPECElements_t), dimension(:), pointer :: elements type(ConformalMedia_t), dimension(:), allocatable :: res integer :: i allocate(res(size(elements))) @@ -47,7 +47,7 @@ function buildMedia(elements) result(res) end function function buildMediaFromElement(element) result(res) - type(ConformalPECElement), intent(in) :: element + type(ConformalPECElements_t), intent(in) :: element type(ConformalMedia_t) :: res type(cell_map_t) :: cell_map @@ -584,4 +584,4 @@ function filterFacesByMedia(faces, ratio) result(res) end function -end module \ No newline at end of file +end module conformal_m diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index a70ffc662..2a0750a24 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -1,20 +1,20 @@ -module smbjson +module smbjson_m #ifdef CompileWithSMBJSON - use NFDETypes + use NFDETypes_m - use NFDETypes_extension - use smbjson_labels_mod - use mesh_mod - use parser_tools_mod - use idchildtable_mod + use NFDETypes_extension_m + use smbjson_labels_m + use mesh_m + use parser_tools_m + use idchildtable_m - use Report + use Report_m use json_module use json_kinds - use conformal_types_mod + use conformal_types_m use, intrinsic :: iso_fortran_env , only: error_unit @@ -146,7 +146,7 @@ function parser_ctor(filename) result(res) function readProblemDescription(this) result (res) class(parser_t) :: this - type(Parseador) :: res + type(Parseador_t) :: res integer :: stat this%mesh = this%readMesh() @@ -362,7 +362,7 @@ function readAdditionalArguments(this) result (res) function readGeneral(this) result (res) class(parser_t) :: this - type(NFDEGeneral) :: res + type(NFDEGeneral_t) :: res res%dt = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_TIME_STEP) res%nmax = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_NUMBER_OF_STEPS) res%mtlnProblem = this%getLogicalAt(this%root, J_GENERAL//'.'//J_GEN_MTLN_PROBLEM, default = .false.) @@ -370,7 +370,7 @@ function readGeneral(this) result (res) function readMediaMatrix(this) result(res) class(parser_t) :: this - type(MatrizMedios) :: res + type(MatrizMedios_t) :: res character (len=*), parameter :: P = J_MESH//'.'//J_GRID//'.'//J_GRID_NUMBER_OF_CELLS res%totalX = this%getIntAt(this%root, P//'(1)') res%totalY = this%getIntAt(this%root, P//'(2)') @@ -379,7 +379,7 @@ function readMediaMatrix(this) result(res) function readGrid(this) result (res) class(parser_t) :: this - type(Desplazamiento) :: res + type(Desplazamiento_t) :: res real, dimension(:), allocatable :: vec character (len=*), parameter :: P = J_MESH//'.'//J_GRID @@ -427,7 +427,7 @@ subroutine assignDes(path, dest, numberOfCells) function readBoundary(this) result (res) class(parser_t) :: this - type(Frontera) :: res + type(Frontera_t) :: res character (len=:), allocatable :: bdrType type(json_value), pointer :: bdrs logical :: found @@ -468,7 +468,7 @@ function readBoundary(this) result (res) contains function readPMLProperties(p) result(res) - type(FronteraPML) :: res + type(FronteraPML_t) :: res character(len=*), intent(in) :: p res%numCapas = this%getIntAt(this%root, p//'.'//J_BND_PML_LAYERS, default=8) res%orden = this%getRealAt(this%root, p//'.'//J_BND_PML_ORDER, default=2.0) @@ -514,27 +514,27 @@ function labelToBoundaryType(str) result (bdrType) function readPECRegions(this) result (res) class(parser_t), intent(in) :: this - type(PECRegions) :: res + type(PECRegions_t) :: res res = this%buildPECPMCRegions(J_MAT_TYPE_PEC) end function function readPMCRegions(this) result (res) class(parser_t), intent(in) :: this - type(PECRegions) :: res + type(PECRegions_t) :: res res = this%buildPECPMCRegions(J_MAT_TYPE_PMC) end function function buildPECPMCRegions(this, matType) result(res) class(parser_t) :: this character (len=*), intent(in) :: matType - type(PECRegions) :: res + type(PECRegions_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs - type(coords), dimension(:), pointer :: cs + type(coords_t), dimension(:), pointer :: cs integer :: i mAs = this%getMaterialAssociations([matType], [J_ELEM_TYPE_CELL]) block - type(coords), dimension(:), pointer :: emptyCoords + type(coords_t), dimension(:), pointer :: emptyCoords if (size(mAs) == 0) then allocate(emptyCoords(0)) call appendRegion(res%lins, res%nLins, res%nLins_max, emptyCoords) @@ -556,10 +556,10 @@ function buildPECPMCRegions(this, matType) result(res) contains subroutine appendRegion(resCoords, resNCoords, resNCoordsMax, cs) - type(coords), dimension(:), pointer :: resCoords + type(coords_t), dimension(:), pointer :: resCoords integer, intent(out) :: resNCoords, resNCoordsMax - type(coords), dimension(:), pointer, intent(in) :: cs - type(coords) , dimension(:), allocatable :: auxCs + type(coords_t), dimension(:), pointer, intent(in) :: cs + type(coords_t) , dimension(:), allocatable :: auxCs integer :: i if (.not. associated(resCoords)) then @@ -591,7 +591,7 @@ subroutine appendRegion(resCoords, resNCoords, resNCoordsMax, cs) function readConformalRegions(this) result(res) class(parser_t) :: this - type(ConformalPECRegions) :: res + type(ConformalPECRegions_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs type(conformal_region_t) :: cR type(triangle_t), dimension(:), allocatable :: aux_tris @@ -618,11 +618,11 @@ function readConformalRegions(this) result(res) contains subroutine appendRegion(regions, region, tagName) - type(ConformalPECElement), dimension(:), pointer :: regions + type(ConformalPECElements_t), dimension(:), pointer :: regions type(conformal_region_t), intent(in) :: region character (len=:), allocatable, intent(in) :: tagName - type(ConformalPECElement), dimension(:), allocatable :: aux + type(ConformalPECElements_t), dimension(:), allocatable :: aux integer :: i if (.not. associated(regions)) then allocate(regions(1)) @@ -663,7 +663,7 @@ function copyIntervals(intervals) result(res) function readDielectricRegions(this) result (res) class(parser_t), intent(in) :: this - type(DielectricRegions) :: res + type(DielectricRegions_t) :: res call fillDielectricsOfCellType(res%vols, CELL_TYPE_VOXEL) call fillDielectricsOfCellType(res%surfs, CELL_TYPE_SURFEL) @@ -729,8 +729,8 @@ function readDielectric(mA, cellType) result(res) integer, intent(in) :: cellType type(Dielectric_t) :: res type(cell_region_t) :: cR - type (coords), dimension(:), allocatable :: coords - type(json_value_ptr) :: matPtr + type(coords_t), dimension(:), allocatable :: coords + type(json_value_ptr_t) :: matPtr integer :: e, j allocate(res%c1P(0)) @@ -753,8 +753,8 @@ function readLumped(mA, cellType) result(res) integer, intent(in) :: cellType type(Dielectric_t) :: res type(cell_region_t) :: cR - type (coords), dimension(:), allocatable :: coords - type(json_value_ptr) :: matPtr + type(coords_t), dimension(:), allocatable :: coords + type(json_value_ptr_t) :: matPtr integer :: e, j character(len=:), allocatable :: model logical :: found @@ -842,10 +842,10 @@ logical function containsCellRegionsWithType(mA, cellType) subroutine matAssToCoords(this, res, mA, cellType) class(parser_t) :: this type(materialAssociation_t), intent(in) :: mA - type (coords), dimension(:), pointer :: res + type(coords_t), dimension(:), pointer :: res integer, intent(in) :: cellType character (len=:), allocatable :: tagName - type (coords), dimension(:), allocatable :: newCoords + type(coords_t), dimension(:), allocatable :: newCoords type (cell_region_t) :: cR integer :: nCs integer :: e, jIni, jEnd @@ -874,13 +874,13 @@ subroutine matAssToCoords(this, res, mA, cellType) function readLossyThinSurfaces(this) result (res) class(parser_t), intent(in) :: this - type(LossyThinSurfaces) :: res + type(LossyThinSurfaces_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat integer :: nLossySurfaces logical :: found integer :: i, j, k - type(coords), dimension(:), pointer :: cs + type(coords_t), dimension(:), pointer :: cs mAs = this%getMaterialAssociations([J_MAT_TYPE_MULTILAYERED_SURFACE]) @@ -912,11 +912,11 @@ function readLossyThinSurfaces(this) result (res) contains function readLossyThinSurface(mA) result(res) type(materialAssociation_t), intent(in) :: mA - type(LossyThinSurface) :: res + type(LossyThinSurface_t) :: res logical :: found character (len=*), parameter :: errorMsgInit = "ERROR reading lossy thin surface: " integer :: i - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat type(json_value), pointer :: layer type(json_value), pointer :: layers @@ -956,7 +956,7 @@ function readLossyThinSurface(mA) result(res) end function function emptyLossyThinSurfaces() result (res) - type(LossyThinSurfaces) :: res + type(LossyThinSurfaces_t) :: res allocate(res%cs(0)) res%length = 0 res%length_max = 0 @@ -966,9 +966,9 @@ function emptyLossyThinSurfaces() result (res) function readPlanewaves(this) result (res) class(parser_t) :: this - type(PlaneWaves) :: res + type(PlaneWaves_t) :: res type(json_value), pointer :: sources - type(json_value_ptr), allocatable :: pws(:) + type(json_value_ptr_t), allocatable :: pws(:) integer :: i logical :: found @@ -992,7 +992,7 @@ function readPlanewaves(this) result (res) contains function readPlanewave(pw) result (res) - type(PlaneWave) :: res + type(PlaneWave_t) :: res type(json_value), pointer :: pw character (len=:), allocatable :: label @@ -1008,7 +1008,7 @@ function readPlanewave(pw) result (res) res%beta = this%getRealAt(pw, J_SRC_PW_POLARIZATION//'.'//J_SRC_PW_PHI) block - type(coords), dimension(:), allocatable :: nfdeCoords + type(coords_t), dimension(:), allocatable :: nfdeCoords nfdeCoords = & cellIntervalsToCoords(this%getSingleVolumeInElementsIds(pw)) res%coor1 = [nfdeCoords(1)%Xi, nfdeCoords(1)%Yi, nfdeCoords(1)%Zi] @@ -1022,10 +1022,10 @@ function readPlanewave(pw) result (res) end function function readNodalSources(this) result (res) - type(NodSource) :: res + type(NodSource_t) :: res class(parser_t) :: this type(json_value), pointer :: sources - type(json_value_ptr), dimension(:), allocatable :: nodSrcs + type(json_value_ptr_t), dimension(:), allocatable :: nodSrcs logical :: found integer :: i @@ -1053,11 +1053,11 @@ function readNodalSources(this) result (res) contains function readField(jns) result(res) - type(Curr_Field_Src) :: res + type(Curr_Field_Src_t) :: res type(json_value), pointer :: jns, entry integer, dimension(:), allocatable :: elementIds character (len=BUFSIZE) :: nodalSourceName - type(coords_scaled), dimension(:), allocatable :: coordsFromLinels + type(coords_scaled_t), dimension(:), allocatable :: coordsFromLinels select case (this%getStrAt(jns, J_FIELD, default=J_FIELD_CURRENT)) case (J_FIELD_CURRENT) @@ -1093,9 +1093,9 @@ function readField(jns) result(res) function readProbes(this) result (res) class(parser_t) :: this - type(Sondas) :: res + type(Sondas_t) :: res type(json_value), pointer :: allProbes - type(json_value_ptr), dimension(:), allocatable :: ps + type(json_value_ptr_t), dimension(:), allocatable :: ps ! The only oldProbe present in the format is the far field. character (len=*), dimension(1), parameter :: validTypes = [J_PR_TYPE_FARFIELD] integer :: i @@ -1120,9 +1120,9 @@ function readProbes(this) result (res) contains function readFarFieldProbe(p) result (res) - type(abstractSonda) :: res + type(abstractSonda_t) :: res type(json_value), pointer :: p - type(Sonda), pointer :: ff + type(Sonda_t), pointer :: ff character (len=:), allocatable :: outputName logical :: transferFunctionFound type(domain_t) :: domain @@ -1177,7 +1177,7 @@ function readFarFieldProbe(p) result (res) end if block - type(coords), dimension(:), allocatable :: nfdeCoords + type(coords_t), dimension(:), allocatable :: nfdeCoords nfdeCoords = & cellIntervalsToCoords(this%getSingleVolumeInElementsIds(p)) ff%n_cord = 2 @@ -1221,9 +1221,9 @@ subroutine readDirection(p, label, initial, final, step) function readMoreProbes(this) result (res) class(parser_t) :: this - type(MasSondas) :: res + type(MasSondas_t) :: res type(json_value), pointer :: allProbes - type(json_value_ptr), dimension(:), allocatable :: ps + type(json_value_ptr_t), dimension(:), allocatable :: ps integer :: i character (len=*), dimension(3), parameter :: validTypes = & @@ -1344,7 +1344,7 @@ logical function isPointProbe(p) end function function readLineProbe(p) result (res) - type(MasSonda) :: res + type(MasSonda_t) :: res type(json_value), pointer :: p integer :: i character (len=:), allocatable :: outputName @@ -1394,7 +1394,7 @@ function readLineProbe(p) result (res) end function function readPointProbe(p) result (res) - type(MasSonda) :: res + type(MasSonda_t) :: res type(json_value), pointer :: p, dirLabelPtr character(len=1), dimension(:), allocatable :: dirLabels integer :: i, j, k @@ -1471,7 +1471,7 @@ function buildDirLabels(dirLabelsPtr) result (res) end function subroutine setDomain(res, domain) - type(MasSonda), intent(inout) :: res + type(MasSonda_t), intent(inout) :: res type(domain_t), intent(in) :: domain res%tstart = domain%tstart @@ -1540,8 +1540,8 @@ function strToFieldType(fieldLabel, dirLabel) result(res) function readBlockProbes(this) result (res) class(parser_t) :: this - type(BloqueProbes) :: res - type(json_value_ptr), dimension(:), allocatable :: bps + type(BloqueProbes_t) :: res + type(json_value_ptr_t), dimension(:), allocatable :: bps type(json_value), pointer :: probes logical :: found integer :: i @@ -1566,9 +1566,9 @@ function readBlockProbes(this) result (res) end do contains function readBlockProbe(bp) result(res) - type(BloqueProbe) :: res + type(BloqueProbe_t) :: res type(json_value), pointer :: bp - type(coords), dimension(:), allocatable :: cs + type(coords_t), dimension(:), allocatable :: cs type(cell_region_t), dimension(:), allocatable :: cRs character(len=1) :: direction @@ -1610,7 +1610,7 @@ function readBlockProbe(bp) result(res) end function subroutine setDomain(res, domain) - type(BloqueProbe), intent(inout) :: res + type(BloqueProbe_t), intent(inout) :: res type(domain_t), intent(in) :: domain res%tstart = domain%tstart @@ -1634,8 +1634,8 @@ subroutine setDomain(res, domain) function readVolumicProbes(this) result (res) class(parser_t) :: this - type(VolProbes) :: res - type(json_value_ptr), dimension(:), allocatable :: ps + type(VolProbes_t) :: res + type(json_value_ptr_t), dimension(:), allocatable :: ps type(json_value), pointer :: probes logical :: found integer :: i @@ -1662,7 +1662,7 @@ function readVolumicProbes(this) result (res) contains function buildNoVolProbes() result(res) - type(VolProbes) :: res + type(VolProbes_t) :: res allocate(res%collection(0)) res%length = 0 res%length_max = 0 @@ -1670,9 +1670,9 @@ function buildNoVolProbes() result(res) end function function readVolProbe(p) result(res) - type(VolProbe) :: res + type(VolProbe_t) :: res type(json_value), pointer :: p, compsPtr, compPtr - type(coords), dimension(:), allocatable :: cs + type(coords_t), dimension(:), allocatable :: cs type(cell_region_t), dimension(:), allocatable :: cRs character(len=:), allocatable :: fieldType, component integer :: i @@ -1748,7 +1748,7 @@ integer function buildVolProbeType(fieldType, component) result(res) end function subroutine setDomain(res, domain) - type(VolProbe), intent(inout) :: res + type(VolProbe_t), intent(inout) :: res type(domain_t), intent(in) :: domain res%tstart = domain%tstart @@ -1778,7 +1778,7 @@ subroutine appendLogSufix(fn) function readThinSlots(this) result (res) class(parser_t) :: this - type(ThinSlots) :: res + type(ThinSlots_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs integer :: i @@ -1797,9 +1797,9 @@ function readThinSlots(this) result (res) contains function readThinSlot(mA) result(res) type (materialAssociation_t), intent(in) :: mA - type (thinSlot) :: res - type (coords), dimension(:), pointer :: cs - type(json_value_ptr) :: mat + type(ThinSlot_t) :: res + type(coords_t), dimension(:), pointer :: cs + type(json_value_ptr_t) :: mat logical :: found mat = this%matTable%getId(mA%materialId) @@ -1815,8 +1815,8 @@ function readThinSlot(mA) result(res) end function subroutine coordsToThinSlotComp(tc, cs) - type(coords), dimension(:), pointer, intent(in) :: cs - type(thinSlotComp), dimension(:), pointer :: tc + type(coords_t), dimension(:), pointer, intent(in) :: cs + type(ThinSlotComp_t), dimension(:), pointer :: tc integer :: i, j, k integer :: nTgc, nXYZ integer :: dir @@ -1857,8 +1857,8 @@ subroutine coordsToThinSlotComp(tc, cs) end subroutine function buildBaseThinSlotComponent(cs) result(res) - type(coords), intent(in) :: cs - type(thinSlotComp) :: res + type(coords_t), intent(in) :: cs + type(ThinSlotComp_t) :: res res%i = cs%xi res%j = cs%yi res%k = cs%zi @@ -1869,7 +1869,7 @@ function buildBaseThinSlotComponent(cs) result(res) function readThinWires(this) result (res) class(parser_t) :: this - type(ThinWires) :: res + type(ThinWires_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs integer :: i, j logical :: found @@ -1903,7 +1903,7 @@ function readThinWires(this) result (res) contains function readThinWire(cable) result(res) - type(ThinWire) :: res + type(ThinWire_t) :: res type(materialAssociation_t), intent(in) :: cable character (len=:), allocatable :: entry @@ -1912,7 +1912,7 @@ function readThinWire(cable) result(res) logical :: found real :: radius, resistance, inductance block - type(json_value_ptr) :: m + type(json_value_ptr_t) :: m m = this%matTable%getId(cable%materialId) radius = this%getRealAt(m%p, J_MAT_WIRE_RADIUS, default = 0.0) resistance = this%getRealAt(m%p, J_MAT_WIRE_RESISTANCE, default = 0.0) @@ -1924,7 +1924,7 @@ function readThinWire(cable) result(res) end block block - type(json_value_ptr) :: terminal + type(json_value_ptr_t) :: terminal type(thinwiretermination_t) :: term character (len=:), allocatable :: label terminal = this%matTable%getId(cable%initialTerminalId) @@ -1937,7 +1937,7 @@ function readThinWire(cable) result(res) end block block - type(json_value_ptr) :: terminal + type(json_value_ptr_t) :: terminal type(thinwiretermination_t) :: term terminal = this%matTable%getId(cable%endTerminalId) term = readThinWireTermination(terminal%p) @@ -1983,7 +1983,7 @@ function readGeneratorOnThinWire(linels, plineElemIds) result(res) type(linel_t), dimension(:), intent(in) :: linels integer, dimension(:), intent(in) :: plineElemIds type(json_value), pointer :: sources - type(json_value_ptr), dimension(:), allocatable :: genSrcs + type(json_value_ptr_t), dimension(:), allocatable :: genSrcs logical :: found type(generator_description_t), dimension(:), allocatable :: res integer :: i @@ -2112,7 +2112,7 @@ function strToTerminationType(label) result(res) logical function isThinWire(mA) type(materialAssociation_t) :: mA - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat type(polyline_t) :: pl logical :: found isThinWire = .false. @@ -2232,7 +2232,7 @@ function getNPDomainType(typeLabel, hasTransferFunction) result(res) function parseMaterialAssociation(this, matAss) result(res) class(parser_t) :: this type(json_value), pointer, intent(in) :: matAss - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat type(materialAssociation_t) :: res character (len=*), parameter :: errorMsgInit = "ERROR reading material association: " logical :: found @@ -2327,7 +2327,7 @@ function parseMaterialAssociation(this, matAss) result(res) logical function isMaterialIdOfType(matId, matType) integer, intent(in) :: matId character (len=*), intent(in) :: matType - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat logical :: materialFound if (this%matTable%checkId(matId) /= 0) then write(errorMsg, *) "Material with id ", matId, " not found." @@ -2399,7 +2399,7 @@ logical function isAssociatedWithMaterial(mAPtr, materialType) character (len=*), intent(in) :: materialType type(materialAssociation_t) :: matAss - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat matAss = this%parseMaterialAssociation(mAPtr) mat = this%matTable%getId(matAss%materialId) @@ -2412,7 +2412,7 @@ logical function isAssociatedWithElementLabel(mAPtr, elementLabels) character (len=:), allocatable :: trimmedLabel character(len=20) :: elementLabel type(materialAssociation_t) :: matAss - type(json_value_ptr) :: elm + type(json_value_ptr_t) :: elm integer, dimension(:), allocatable :: elementIds integer :: i, j @@ -2453,7 +2453,7 @@ function buildTagName(this, matId, elementId) result(res) character (len=BUFSIZE) :: errorMsg block - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat mat = this%matTable%getId(matId) matName = this%getStrAt(mat%p, J_NAME, found) if (.not. found) then @@ -2465,7 +2465,7 @@ function buildTagName(this, matId, elementId) result(res) end block block - type(json_value_ptr) :: elem + type(json_value_ptr_t) :: elem elem = this%elementTable%getId(elementId) layerName = this%getStrAt(elem%p, J_NAME, found) if (.not. found) then @@ -2564,7 +2564,7 @@ function readMTLN(this) result (mtln_res) function assignParentCable(cable, cables) result(res) type(materialAssociation_t) :: cable type(cable_abstract_t), dimension(:), allocatable :: cables - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat integer :: parentId, index class(cable_t), pointer :: res @@ -2587,7 +2587,7 @@ function assignParentCable(cable, cables) result(res) function assignConductorInParent(cable) result(res) type(materialAssociation_t) :: cable - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat integer :: parentId integer :: res @@ -2630,7 +2630,7 @@ function readConnectors() result(res) type(connector_t), dimension(:), pointer :: res type(json_value), pointer :: mat, z, zs logical :: materialsFound - type(json_value_ptr), dimension(:), allocatable :: connectors + type(json_value_ptr_t), dimension(:), allocatable :: connectors integer :: i, j, id, n call this%core%get(this%root, J_MATERIALS, mat, materialsFound) @@ -2669,7 +2669,7 @@ function readConnectors() result(res) end function function findMaxElemId(cables) result(res) - type(json_value_ptr), dimension(:), intent(in) :: cables + type(json_value_ptr_t), dimension(:), intent(in) :: cables integer :: i, m integer, dimension(:), allocatable :: elemIds integer :: res @@ -2727,7 +2727,7 @@ function buildNetworks() result(res) function readSubcircuits() result(res_ckt) type(subcircuit_t), dimension(:), allocatable :: res_ckt type(json_value), pointer :: subCkt, ckt - type(json_value_ptr) :: m + type(json_value_ptr_t) :: m integer :: i, j, id logical :: found type(coordinate_t) :: ports_coordinate @@ -2896,7 +2896,7 @@ subroutine updateListOfNetworksCoordinates(coordinates, conductor_index) function getTerminationsOnSide(terminationId) result(res) integer, intent(in) :: terminationId - type(json_value_ptr) :: terminal + type(json_value_ptr_t) :: terminal type(json_value), pointer :: res if (terminationId == -1) then @@ -2955,7 +2955,7 @@ function buildNode(termination_list, label, index, id) result(res) function readGeneratorOnTermination(id, label) result(res) integer, intent(in) :: id, label type(json_value), pointer :: sources - type(json_value_ptr), dimension(:), allocatable :: genSrcs + type(json_value_ptr_t), dimension(:), allocatable :: genSrcs logical :: found type(node_source_t) :: res integer :: polylineId @@ -3124,7 +3124,7 @@ function readTerminationRLC(termination, label, default) result(res) function readMultiwireProbes() result(res) type(probe_t), dimension(:), allocatable :: res - type(json_value_ptr), dimension(:), allocatable :: wire_probes + type(json_value_ptr_t), dimension(:), allocatable :: wire_probes type(json_value), pointer :: probes integer :: i, j, index, n integer, dimension(:), allocatable :: ids @@ -3229,7 +3229,7 @@ function findProbeIndexInLinels(probe_coord, linels) result(res) end function function countOutputProbes(probes) result(res) - type(json_value_ptr), dimension(:), allocatable :: probes + type(json_value_ptr_t), dimension(:), allocatable :: probes integer :: res character (len=:), allocatable :: fieldLabel @@ -3453,9 +3453,9 @@ function getCableElemIds(cable) result(res) function readMTLNCable(j_cable, despl) result(res) type(materialAssociation_t), intent(in) :: j_cable - type(Desplazamiento), intent(in) :: despl + type(Desplazamiento_t), intent(in) :: despl class(cable_t), pointer :: res - type(json_value_ptr) :: material + type(json_value_ptr_t) :: material integer :: nConductors logical :: found character(:), allocatable :: materialType @@ -3488,7 +3488,7 @@ function readMTLNCable(j_cable, despl) result(res) end function function buildTransferImpedance(mat) result(res) - type(json_value_ptr):: mat + type(json_value_ptr_t):: mat type(transfer_impedance_per_meter_t) :: res type(json_value), pointer :: z if (this%existsAt(mat%p, J_MAT_MULTIWIRE_TRANSFER_IMPEDANCE)) then @@ -3501,7 +3501,7 @@ function buildTransferImpedance(mat) result(res) subroutine assignPULProperties(res, mat, n) type(shielded_multiwire_t), intent(inout) :: res - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat integer, intent(in) :: n real, dimension(:,:), allocatable :: null_matrix logical :: found @@ -3536,7 +3536,7 @@ subroutine assignPULProperties(res, mat, n) subroutine assignInCellProperties(res, mat, n) type(unshielded_multiwire_t), intent(inout) :: res - type(json_value_ptr) :: mat + type(json_value_ptr_t) :: mat type(json_value), pointer :: multipolarExpansionPtr integer, intent(in) :: n real, dimension(:,:), allocatable :: null_matrix @@ -3652,7 +3652,7 @@ function readFieldReconstruction(ptr) result(res) function buildSegments(j_cable, despl) result(res) type(materialAssociation_t), intent(in) :: j_cable - type(Desplazamiento), intent(in) :: despl + type(Desplazamiento_t), intent(in) :: despl type(segment_t), dimension(:), allocatable :: res integer, dimension(:), allocatable :: elemIds @@ -3690,7 +3690,7 @@ pure integer function clip(i, lo, hi) end function clip function getdualBoxYZ(segment, despl) result (res) - type(Desplazamiento), intent(in) :: despl + type(Desplazamiento_t), intent(in) :: despl type(segment_t), intent(in) :: segment type(box_2d_t) :: res integer :: y0, y1, z0, z1 @@ -3705,7 +3705,7 @@ function getdualBoxYZ(segment, despl) result (res) end function function getdualBoxXY(segment, despl) result (res) - type(Desplazamiento), intent(in) :: despl + type(Desplazamiento_t), intent(in) :: despl type(segment_t), intent(in) :: segment type(box_2d_t) :: res integer :: x0, x1, y0, y1 @@ -3720,7 +3720,7 @@ function getdualBoxXY(segment, despl) result (res) end function function getdualBoxZX(segment, despl) result (res) - type(Desplazamiento), intent(in) :: despl + type(Desplazamiento_t), intent(in) :: despl type(segment_t), intent(in) :: segment type(box_2d_t) :: res integer :: z0, z1, x0, x1 @@ -3736,7 +3736,7 @@ function getdualBoxZX(segment, despl) result (res) function buildStepSize(segments, despl) result(res) type(segment_t), dimension(:), allocatable :: segments - type(Desplazamiento), intent(in) :: despl + type(Desplazamiento_t), intent(in) :: despl real, allocatable, dimension(:) :: res integer :: i, or allocate(res(size(segments))) @@ -3816,7 +3816,7 @@ function noTransferImpedance() result(res) function assignDisplacement(desp, axis) result (res) - type(Desplazamiento), intent(in) :: desp + type(Desplazamiento_t), intent(in) :: desp integer, intent(in) :: axis real, dimension(:), allocatable :: res @@ -4007,13 +4007,13 @@ function existsAt(this, place, path) result(res) function jsonValueFilterByKeyValues(this, srcs, key, values) result (res) class(parser_t) :: this - type(json_value_ptr), dimension(:), allocatable :: res + type(json_value_ptr_t), dimension(:), allocatable :: res type(json_value), pointer :: srcs character (kind=JSON_CK, len=*) :: key character (kind=JSON_CK, len=*), dimension(:) :: values - type(json_value_ptr), dimension (:), allocatable :: foundEntries + type(json_value_ptr_t), dimension (:), allocatable :: foundEntries integer :: i, lastEntry, nEntries allocate(res(0)) @@ -4027,7 +4027,7 @@ function jsonValueFilterByKeyValues(this, srcs, key, values) result (res) function jsonValueFilterByKeyValue(this, place, key, value) result (res) class(parser_t) :: this - type(json_value_ptr), allocatable :: res(:) + type(json_value_ptr_t), allocatable :: res(:) character (kind=JSON_CK, len=*) :: key, value type(json_value), pointer :: place, src character (kind=JSON_CK, len=:), allocatable :: typeStr @@ -4091,4 +4091,4 @@ function getSingleVolumeInElementsIds(this, pw) result (res) end function #endif -end module \ No newline at end of file +end module diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index 87b0a44c1..e76cdec44 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -4,7 +4,7 @@ ! This module contains the types and parameters shared by all the rest of the modules ! No public variables are defined. Only types and parameters !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -module FDETYPES +module FDETYPES_m #ifdef CompileWithOpenMP @@ -228,20 +228,20 @@ module FDETYPES integer (Kind=4) :: numertags end type - type coorsxyz + type coorsxyz_t REAL (KIND=RKIND), pointer, dimension( : ) :: x,y,z - end type coorsxyz + end type coorsxyz_t ! - type coorsxyzP - type (coorsxyz), dimension(1:6) :: PhysCoor - end type coorsxyzP + type coorsxyzP_t + type (coorsxyz_t), dimension(1:6) :: PhysCoor + end type coorsxyzP_t TYPE MedioExtra_t - integer (kind=4) :: size,index + integer (kind=4) :: pml_size,index real (kind=rkind) :: sigma,sigmam logical :: exists end type - type logic_control + type logic_control_t LOGICAL :: Wires , & PMLbodies , & MultiportS , & @@ -331,14 +331,14 @@ module FDETYPES ! !wires - type :: fichevol_t_wires + type :: fichevol_wires_t character (LEN=BUFSIZE) :: Name integer (kind=4) :: NumSamples REAL (KIND=RKIND_wires) :: DeltaSamples REAL (KIND=RKIND_wires), dimension( : ), pointer :: Samples end type - type :: source - type (fichevol_t_wires) :: Fichero + type :: source_t + type (fichevol_wires_t) :: Fichero REAL (KIND=RKIND_wires) :: Resistance REAL (KIND=RKIND_wires) :: Multiplier logical :: soft @@ -360,22 +360,22 @@ module FDETYPES Complex (KIND=CKIND) :: d, e end type - type :: oriented_point + type :: oriented_point_t integer (kind=4) :: ori integer (kind=4) :: i,j,k,origIndex,ilibre,jlibre,klibre,multiraboDE !si es multirabo de que indice lo es logical :: Is_LeftEnd,Is_RightEnd,IsEnd_norLeft_norRight logical :: repetido,multirabo !marca segmentos que aparecen repetidos en un mismo thin wire!los bundles deberan estar thin-wires distintos logical :: orientadoalreves - end type oriented_point + end type oriented_point_t type :: Wires_t REAL (KIND=RKIND_wires) :: Radius,R,L,C,P_R,P_L,P_C REAL (KIND=RKIND_wires) :: Radius_devia,R_devia,L_devia,C_devia type (WireDispersiveParams_t), allocatable, dimension(:) :: disp integer (kind=4) :: numsegmentos,NUMVOLTAGESOURCES,NUMCURRENTSOURCES - type (oriented_point), pointer, dimension( : ) :: segm - type (source), pointer, dimension( : ) :: Vsource - type (source), pointer, dimension( : ) :: Isource + type (oriented_point_t), pointer, dimension( : ) :: segm + type (source_t), pointer, dimension( : ) :: Vsource + type (source_t), pointer, dimension( : ) :: Isource logical :: VsourceExists ,IsourceExists logical :: HasParallel_LeftEnd ,HasParallel_RightEnd ,& HasSeries_LeftEnd ,HasSeries_RightEnd,HasAbsorbing_LeftEnd,HasAbsorbing_RightEnd @@ -401,7 +401,7 @@ module FDETYPES integer (kind=4) :: index real (kind=RKIND_wires) :: x, y, z logical :: VsourceExists, IsourceExists - type (source), pointer :: Vsource, Isource + type (source_t), pointer :: Vsource, Isource end type SlantedNode_t type :: SlantedWires_t @@ -557,8 +557,9 @@ module FDETYPES PEC , & ConformalPEC , & PMC , & - ThinWire , & - SlantedWire, & + ThinWire , & + Multiwire, & + SlantedWire, & EDispersive , & MDispersive , & EDispersiveAnis , & @@ -585,7 +586,68 @@ module FDETYPES - type :: MediaData_t + ! Conformal edge/face data is shared by FDETYPES and NFDETypes. Keep the + ! definitions in this foundational module so MediaData_t does not depend + ! on the module that already USEs FDETYPES. + type :: conformal_field_t + real(kind=rkind), pointer :: p => null() + real(kind=rkind), allocatable :: owned + end type + + type :: conformal_edge_fields_t + real(kind=rkind), pointer :: E => null() + real(kind=rkind), pointer :: H1 => null() + real(kind=rkind), pointer :: H2 => null() + real(kind=rkind), pointer :: H3 => null() + real(kind=rkind), pointer :: H4 => null() + end type + + type :: conformal_face_fields_t + real(kind=rkind), pointer :: H => null() + type(conformal_field_t) :: E1 + real(kind=rkind), pointer :: E2 => null() + real(kind=rkind), pointer :: E3 => null() + real(kind=rkind), pointer :: E4 => null() + end type + + type :: conformal_feature_t + real(kind=rkind) :: ratio + integer (kind=4) :: size + end type + + type, public :: edge_t + integer (kind=4), dimension(3) :: cell + integer(kind=4) :: direction = -1 + real (kind=rkind) :: ratio = -1 + real (kind=rkind), dimension(2) :: material_coords + type(conformal_edge_fields_t) :: region_I_fields, region_II_fields + end type + + type, public :: face_t + integer (kind=4), dimension(3) :: cell + integer(kind=4) :: direction = -1 + real (kind=rkind) :: ratio = -1 + type(conformal_face_fields_t) :: region_I_fields, region_II_fields + end type + + type, public, extends(conformal_feature_t) :: conformal_edge_media_t + type(edge_t), dimension(:), allocatable :: edges + end type + + type, public, extends(conformal_feature_t) :: conformal_face_media_t + type(face_t), dimension(:), allocatable :: faces + end type + + type, public :: ConformalMedia_t + integer (kind=4) :: n_edges_media = 0 + integer (kind=4) :: n_faces_media = 0 + type (conformal_face_media_t), dimension(:), pointer :: face_media => null() + type (conformal_edge_media_t), dimension(:), pointer :: edge_media => null() + real (kind=rkind) :: time_step_scale_factor = 1.0 + character(len=bufsize) :: tag + end type ConformalMedia_t + + type :: MediaData_t REAL (KIND=RKIND) :: Priority,Epr,Sigma,Mur,SigmaM logical :: sigmareasignado !solo afecta a un chequeo de errores en lumped 120123 type (exists_t) :: Is @@ -599,14 +661,14 @@ module FDETYPES type (Anisotropic_t) , dimension( : ), pointer :: Anisotropic type (Lumped_t) , dimension( : ), pointer :: Lumped ! type (conformal_feature_t), , dimension( : ), pointer :: Conformal - type (edge_t), dimension( : ), pointer :: ConformalEdge - type (face_t), dimension( : ), pointer :: ConformalFace + type (edge_t), dimension( : ), allocatable :: ConformalEdge + type (face_t), dimension( : ), allocatable :: ConformalFace end type !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! This is the class which stores all the simulation data !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - type :: SGGFDTDINFO + type :: SGGFDTDINFO_t REAL (KIND=RKIND_tiempo) , pointer, dimension ( : ) :: tiempo !para permit scaling REAL (KIND=RKIND_tiempo) :: dt character (len=BUFSIZE) :: extraswitches @@ -635,7 +697,7 @@ module FDETYPES logical :: thereAreMagneticMedia logical :: thereArePMLMagneticMedia CHARACTER (LEN=BUFSIZE) :: nEntradaRoot - type (coorsxyzP) :: Punto + type (coorsxyzP_t) :: Punto end type type media_matrices_t @@ -693,7 +755,7 @@ module FDETYPES CHARACTER (LEN=BUFSIZE) :: opcionestotales integer (kind=4) :: finaltimestep, flushsecondsFields,flushsecondsData, layoutnumber,& - mpidir, inductance_order, wirethickness, maxCPUtime, SGBCDepth, precision, size + mpidir, inductance_order, wirethickness, maxCPUtime, SGBCDepth, precision, num_procs TYPE (MedioExtra_t) :: MEDIOEXTRA type (nf2ff_T) :: facesNF2FF @@ -751,7 +813,7 @@ subroutine perform_reset(this) end subroutine subroutine logic_reset(this) - class(logic_control) :: this + class(logic_control_t) :: this this%Wires = .false. this%PMLbodies = .false. this%MultiportS = .false. @@ -864,7 +926,7 @@ logical function direction_eq(a,b) direction_eq = direction_eq .and. (a%orientation == b%orientation) end function -end module FDETYPES +end module FDETYPES_m !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! STRUCTURE OF SGG diff --git a/src_main_pub/healer.F90 b/src_main_pub/healer.F90 index 9365c9a35..6b15d0dce 100755 --- a/src_main_pub/healer.F90 +++ b/src_main_pub/healer.F90 @@ -6,9 +6,9 @@ ! Also creates intermediate media for the boundaries ! between different media. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -MODULE CreateMatrices - USE Report - USE fdetypes +MODULE CreateMatrices_m + USE Report_m + USE FDETYPES_m ! IMPLICIT NONE PRIVATE @@ -1511,7 +1511,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM ! TYPE (limit_t), DIMENSION (1:6) :: SINPML_fullsize, fullsize !Inputs and Outputs - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg integer (KIND=INTEGERSIZEOFMEDIAMATRICES) :: & sggMiEx(sgg%Alloc(iEx)%XI : sgg%Alloc(iEx)%XE,sgg%Alloc(iEx)%YI : sgg%Alloc(iEx)%YE,sgg%Alloc(iEx)%ZI : sgg%Alloc(iEx)%ZE), & sggMiEy(sgg%Alloc(iEy)%XI : sgg%Alloc(iEy)%XE,sgg%Alloc(iEy)%YI : sgg%Alloc(iEy)%YE,sgg%Alloc(iEy)%ZI : sgg%Alloc(iEy)%ZE), & @@ -2189,7 +2189,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM field = iEx !izda y dcha IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%size + DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2225,7 +2225,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%size,YEPML (field) + DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2261,7 +2261,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! !Up y Down IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%size + DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2297,7 +2297,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%size,ZEPML (field) + DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2335,7 +2335,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM field = iEy !front y back IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%size + DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2371,7 +2371,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%size,XEPML (field) + DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2407,7 +2407,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! !Up y Down IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%size + DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2443,7 +2443,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%size,ZEPML (field) + DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2481,7 +2481,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM field = iEz !front y back IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%size + DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2517,7 +2517,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%size,XEPML (field) + DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2553,7 +2553,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF !izda y dcha IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%size + DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2589,7 +2589,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%size,YEPML (field) + DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2631,7 +2631,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM field = iHx !izda y dcha IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%size + DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2667,7 +2667,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%size,YEPML (field) + DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2703,7 +2703,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! !Up y Down IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%size + DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2739,7 +2739,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%size,ZEPML (field) + DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2777,7 +2777,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM field = iHy !front y back IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%size + DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2813,7 +2813,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%size,XEPML (field) + DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2849,7 +2849,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! !Up y Down IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%size + DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2885,7 +2885,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%size,ZEPML (field) + DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) DO j = YIPML (field), YEPML (field) DO i = XIPML (field), XEPML (field) ! @@ -2923,7 +2923,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM field = iHz !front y back IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%size + DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2959,7 +2959,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%size,XEPML (field) + DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) DO j = YIPML (field), YEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -2995,7 +2995,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF !izda y dcha IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%size + DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -3031,7 +3031,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM END IF ! IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%size,YEPML (field) + DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) DO i = XIPML (field), XEPML (field) DO k = ZIPML (field), ZEPML (field) ! @@ -3187,4 +3187,4 @@ SUBROUTINE AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) ! END SUBROUTINE ! -END MODULE +END MODULE CreateMatrices_m diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index 6582f87b6..99f483346 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -1,10 +1,10 @@ -MODULE NFDETypes +MODULE NFDETypes_m ! - USE FDETYPES + USE FDETYPES_m #ifdef CompileWithMTLN USE mtln_types_mod #endif - USE conformal_types_mod + USE conformal_types_m ! IMPLICIT NONE INTEGER (KIND=4), PARAMETER :: RK = RKIND @@ -74,7 +74,7 @@ MODULE NFDETypes !------------------------------------------------------------------------------ ! Basic cordinate type for two points and orientation !------------------------------------------------------------------------------ - TYPE, PUBLIC :: coords + TYPE, PUBLIC :: coords_t INTEGER (KIND=4) :: Xi = - 1 INTEGER (KIND=4) :: Xe = - 1 INTEGER (KIND=4) :: Yi = - 1 @@ -86,8 +86,8 @@ MODULE NFDETypes INTEGER (KIND=4) :: Ztrancos = 1 INTEGER (KIND=4) :: Or = 0 !f1eld orientation CHARACTER (LEN=BUFSIZE) :: tag - END TYPE coords - TYPE, PUBLIC :: coords_scaled + END TYPE coords_t + TYPE, PUBLIC :: coords_scaled_t INTEGER (KIND=4) :: Xi = - 1 INTEGER (KIND=4) :: Xe = - 1 INTEGER (KIND=4) :: Yi = - 1 @@ -99,123 +99,63 @@ MODULE NFDETypes REAL (KIND=RK) :: zc = 0.0_RKIND INTEGER (KIND=4) :: Or = 0 !field orientation nuevo 2015 CHARACTER (LEN=BUFSIZE) :: tag - END TYPE coords_scaled - !-----------------> Material Types + END TYPE coords_scaled_t + !-----------------> Material_t Types !------------------------------------------------------------------------------ ! Basic constants for materials !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Material + TYPE, PUBLIC :: Material_t REAL (KIND=RK) :: eps = 0.0_RKIND REAL (KIND=RK) :: mu = 0.0_RKIND REAL (KIND=RK) :: sigma = 0.0_RKIND REAL (KIND=RK) :: sigmam = 0.0_RKIND INTEGER (KIND=4) :: id = 0 - END TYPE Material + END TYPE Material_t !------------------------------------------------------------------------------ ! New Class which is a collection of different materials !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Materials + TYPE, PUBLIC :: Materials_t INTEGER (KIND=4) :: n_Mats = 0 INTEGER (KIND=4) :: n_Mats_max = 0 - TYPE (Material), DIMENSION (:), POINTER :: Mats => NULL () - END TYPE Materials + TYPE (Material_t), DIMENSION (:), POINTER :: Mats => NULL () + END TYPE Materials_t !------------------------------------------------------------------------------ ! Identifies conformal PEC "media" !------------------------------------------------------------------------------ - type, public :: ConformalPECElement + type, public :: ConformalPECElements_t type(triangle_t), dimension(:), allocatable :: triangles type(interval_t), dimension(:), allocatable :: intervals character(len=bufsize) :: tag end type - type, public :: ConformalPECRegions - type(ConformalPECElement), dimension(:), pointer :: volumes => null() - type(ConformalPECElement), dimension(:), pointer :: surfaces => null() + type, public :: ConformalPECRegions_t + type(ConformalPECElements_t), dimension(:), pointer :: volumes => null() + type(ConformalPECElements_t), dimension(:), pointer :: surfaces => null() end type - type :: conformal_field_t - real(kind=rkind), pointer :: p => null() - real(kind=rkind), allocatable :: owned - end type - - type :: conformal_edge_fields_t - real(kind=rkind), pointer :: E => null() - real(kind=rkind), pointer :: H1 => null() - real(kind=rkind), pointer :: H2 => null() - real(kind=rkind), pointer :: H3 => null() - real(kind=rkind), pointer :: H4 => null() - end type - - type :: conformal_face_fields_t - real(kind=rkind), pointer :: H => null() - type(conformal_field_t) :: E1 - ! real(kind=rkind), pointer :: E1 => null() - real(kind=rkind), pointer :: E2 => null() - real(kind=rkind), pointer :: E3 => null() - real(kind=rkind), pointer :: E4 => null() - end type - - ! region II not pointers? - - type, public :: edge_t - integer (kind=4), dimension(3) :: cell - integer(kind=4) :: direction = -1 - real (kind=rkind) :: ratio = -1 - real (kind=rkind), dimension(2) :: material_coords - type(conformal_edge_fields_t) :: region_I_fields, region_II_fields - end type - type, public :: face_t - integer (kind=4), dimension(3) :: cell - integer(kind=4) :: direction = -1 - real (kind=rkind) :: ratio = -1 - type(conformal_face_fields_t) :: region_I_fields, region_II_fields - end type - - type :: conformal_feature_t - real(kind=rkind) :: ratio - integer (kind=4) :: size - end type - - type, extends(conformal_feature_t) :: conformal_edge_media_t - type(edge_t), dimension(:), allocatable :: edges - end type - type, extends(conformal_feature_t) :: conformal_face_media_t - type(face_t), dimension(:), allocatable :: faces - end type - - TYPE, PUBLIC :: ConformalMedia_t - INTEGER (KIND=4) :: n_edges_media = 0 - INTEGER (KIND=4) :: n_faces_media = 0 - TYPE (conformal_face_media_t), DIMENSION (:), POINTER :: face_media => NULL () - TYPE (conformal_edge_media_t), DIMENSION (:), POINTER :: edge_media => NULL () - real (kind=rkind) :: time_step_scale_factor = 1.0 - character(len=bufsize) :: tag - END TYPE ConformalMedia_t - - !------------------------------------------------------------------------------ ! Locates all the different PEC media found !------------------------------------------------------------------------------ - TYPE, PUBLIC :: PECRegions + TYPE, PUBLIC :: PECRegions_t INTEGER (KIND=4) :: nVols = 0 INTEGER (KIND=4) :: nSurfs = 0 INTEGER (KIND=4) :: nLins = 0 INTEGER (KIND=4) :: nVols_max = 0 INTEGER (KIND=4) :: nSurfs_max = 0 INTEGER (KIND=4) :: nLins_max = 0 - TYPE (coords), DIMENSION (:), POINTER :: Vols => NULL () - TYPE (coords), DIMENSION (:), POINTER :: Surfs => NULL () - TYPE (coords), DIMENSION (:), POINTER :: Lins => NULL () - END TYPE PECRegions + TYPE (coords_t), DIMENSION (:), POINTER :: Vols => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: Surfs => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: Lins => NULL () + END TYPE PECRegions_t !------------------------------------------------------------------------------ ! Defines a Non Metal Body !------------------------------------------------------------------------------ TYPE, PUBLIC :: Dielectric_t - TYPE (coords), DIMENSION (:), POINTER :: c1P => NULL () - TYPE (coords), DIMENSION (:), POINTER :: c2P => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: c1P => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: c2P => NULL () REAL (KIND=RK) :: sigma = 0.0_RKIND REAL (KIND=RK) :: eps = 0.0_RKIND REAL (KIND=RK) :: mu = 0.0_RKIND @@ -243,7 +183,7 @@ MODULE NFDETypes !------------------------------------------------------------------------------ ! Locates all the different Non Metal Media found !------------------------------------------------------------------------------ - TYPE, PUBLIC :: DielectricRegions + TYPE, PUBLIC :: DielectricRegions_t TYPE (Dielectric_t), DIMENSION (:), POINTER :: Vols => NULL () TYPE (Dielectric_t), DIMENSION (:), POINTER :: Surfs => NULL () TYPE (Dielectric_t), DIMENSION (:), POINTER :: Lins => NULL () @@ -255,13 +195,13 @@ MODULE NFDETypes INTEGER (KIND=4) :: nLins_max = 0 INTEGER (KIND=4) :: n_C1P_max = 0 INTEGER (KIND=4) :: n_C2P_max = 0 - END TYPE DielectricRegions + END TYPE DielectricRegions_t !------------------------------------------------------------------------------ ! TYPE that defines the information of a frequency depENDent material, ! it inherits from the material class and it adds the possible values needed ! in the frequency depENDent section of the !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FreqDepenMaterial + TYPE, PUBLIC :: FreqDepenMaterial_t COMPLEX, DIMENSION (:), POINTER :: a11 => NULL () COMPLEX, DIMENSION (:), POINTER :: b11 => NULL () COMPLEX, DIMENSION (:), POINTER :: am11 => NULL () @@ -292,7 +232,7 @@ MODULE NFDETypes REAL (KIND=RK), DIMENSION (:), POINTER :: alpham => NULL () REAL (KIND=RK), DIMENSION (:), POINTER :: betam => NULL () REAL (KIND=RK), DIMENSION (:), POINTER :: gammam => NULL () - TYPE (coords), DIMENSION (:), POINTER :: c => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: c => NULL () REAL (KIND=RK) :: eps11 = 0.0_RKIND , eps12 = 0.0_RKIND , eps13 = 0.0_RKIND , eps22 = 0.0_RKIND , eps23 = 0.0_RKIND , eps33 = 0.0_RKIND REAL (KIND=RK) :: mu11 = 0.0_RKIND , mu12 = 0.0_RKIND , mu13 = 0.0_RKIND , mu22 = 0.0_RKIND , mu23 = 0.0_RKIND , mu33 = 0.0_RKIND REAL (KIND=RK) :: sigma11 = 0.0_RKIND , sigma12 = 0.0_RKIND , sigma13 = 0.0_RKIND , sigma22 = 0.0_RKIND , sigma23 = 0.0_RKIND , sigma33 = 0.0_RKIND @@ -313,14 +253,14 @@ MODULE NFDETypes INTEGER (KIND=4) :: Lm = 0 INTEGER (KIND=4) :: n_c = 0 CHARACTER (LEN=BUFSIZE) :: files = ' ' !2015 si esta presente lee los polos/residuos desde fichero - END TYPE FreqDepenMaterial + END TYPE FreqDepenMaterial_t !------------------------------------------------------------------------------ ! TYPE that defines the list of frequency depedent materials !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FreqDepenMaterials - TYPE (FreqDepenMaterial), DIMENSION (:), POINTER :: Vols => NULL () - TYPE (FreqDepenMaterial), DIMENSION (:), POINTER :: Surfs => NULL () - TYPE (FreqDepenMaterial), DIMENSION (:), POINTER :: Lins => NULL () + TYPE, PUBLIC :: FreqDepenMaterials_t + TYPE (FreqDepenMaterial_t), DIMENSION (:), POINTER :: Vols => NULL () + TYPE (FreqDepenMaterial_t), DIMENSION (:), POINTER :: Surfs => NULL () + TYPE (FreqDepenMaterial_t), DIMENSION (:), POINTER :: Lins => NULL () INTEGER (KIND=4) :: nVols = 0 INTEGER (KIND=4) :: nSurfs = 0 INTEGER (KIND=4) :: nLins = 0 @@ -328,14 +268,14 @@ MODULE NFDETypes INTEGER (KIND=4) :: nSurfs_max = 0 INTEGER (KIND=4) :: nLins_max = 0 INTEGER (KIND=4) :: n_c_max = 0 !cota superior - END TYPE FreqDepenMaterials + END TYPE FreqDepenMaterials_t !------------------------------------------------------------------------------ ! Type for the ANISOTROPIC body, surface and lines since they will contain ! the same information !------------------------------------------------------------------------------ TYPE, PUBLIC :: ANISOTROPICbody_t - TYPE (coords), DIMENSION (:), POINTER :: c1P => NULL () - TYPE (coords), DIMENSION (:), POINTER :: c2P => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: c1P => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: c2P => NULL () REAL (KIND=RK), DIMENSION (3, 3) :: sigma, eps, mu, sigmam INTEGER (KIND=4) :: n_C1P = 0 INTEGER (KIND=4) :: n_C2P = 0 @@ -359,8 +299,8 @@ MODULE NFDETypes !------------------------------------------------------------------------------ ! Defines a Comp Surface !------------------------------------------------------------------------------ - TYPE, PUBLIC :: LossyThinSurface - TYPE (coords), DIMENSION (:), POINTER :: c => NULL () + TYPE, PUBLIC :: LossyThinSurface_t + TYPE (coords_t), DIMENSION (:), POINTER :: c => NULL () REAL (KIND=RK), DIMENSION (:), POINTER :: sigma REAL (KIND=RK), DIMENSION (:), POINTER :: eps REAL (KIND=RK), DIMENSION (:), POINTER :: mu @@ -376,21 +316,21 @@ MODULE NFDETypes INTEGER (KIND=4) :: nc = 0 CHARACTER (LEN=BUFSIZE) :: files = ' ' INTEGER (KIND=4) :: numcapas - END TYPE LossyThinSurface + END TYPE LossyThinSurface_t !------------------------------------------------------------------------------ ! Locates all the different Comp media found !------------------------------------------------------------------------------ - TYPE, PUBLIC :: LossyThinSurfaces - TYPE (LossyThinSurface), DIMENSION (:), POINTER :: cs => NULL () + TYPE, PUBLIC :: LossyThinSurfaces_t + TYPE (LossyThinSurface_t), DIMENSION (:), POINTER :: cs => NULL () INTEGER (KIND=4) :: length = 0 INTEGER (KIND=4) :: length_max = 0 - INTEGER (KIND=4) :: nC_max = 0 !cota de todos los nc de LossyThinSurface - END TYPE LossyThinSurfaces + INTEGER (KIND=4) :: nC_max = 0 !cota de todos los nc de LossyThinSurface_t + END TYPE LossyThinSurfaces_t !------------------------------------------------------------------------------ ! Component for Thin Wires there is a list of this inside the component ! that defines the whole Thin Wire Reference !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ThinWireComp + TYPE, PUBLIC :: ThinWireComp_t CHARACTER (LEN=BUFSIZE) :: srctype, srcfile INTEGER (KIND=4) :: i = - 1 INTEGER (KIND=4) :: j = - 1 @@ -399,13 +339,13 @@ MODULE NFDETypes INTEGER (KIND=4) :: d = - 1 REAL (KIND=RK) :: m = 0.0_RKIND CHARACTER (LEN=BUFSIZE) :: tag - END TYPE ThinWireComp + END TYPE ThinWireComp_t !------------------------------------------------------------------------------ - ! ThinWire component that defines the overall properties of the definition - ! of ThinWires + ! ThinWire_t component that defines the overall properties of the definition + ! of ThinWires_t !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ThinWire - TYPE (ThinWireComp), DIMENSION (:), POINTER :: twc => NULL () + TYPE, PUBLIC :: ThinWire_t + TYPE (ThinWireComp_t), DIMENSION (:), POINTER :: twc => NULL () REAL (KIND=RK) :: rad = 0 , rad_devia = 0 LOGICAL :: disp = .false. CHARACTER (LEN=BUFSIZE) :: dispfile @@ -430,20 +370,20 @@ MODULE NFDETypes INTEGER (KIND=4) :: tr = 0 INTEGER (KIND=4) :: n_twc = 0 INTEGER (KIND=4) :: n_twc_max = 0 - END TYPE ThinWire + END TYPE ThinWire_t !------------------------------------------------------------------------------ ! List of the different thin wires that were found in the file !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ThinWires - TYPE (ThinWire), DIMENSION (:), POINTER :: tw => NULL () + TYPE, PUBLIC :: ThinWires_t + TYPE (ThinWire_t), DIMENSION (:), POINTER :: tw => NULL () INTEGER (KIND=4) :: n_tw = 0 INTEGER (KIND=4) :: n_tw_max = 0 - END TYPE ThinWires + END TYPE ThinWires_t !------------------------------------------------------------------------------ ! Component for Slanted Wires there is a list of this inside the component ! that defines the whole Slanted Wire Reference !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SlantedWireComp + TYPE, PUBLIC :: SlantedWireComp_t CHARACTER (LEN=BUFSIZE) :: srctype, srcfile REAL (KIND=RK) :: x = - 1.0_RKIND REAL (KIND=RK) :: y = - 1.0_RKIND @@ -451,13 +391,13 @@ MODULE NFDETypes INTEGER (KIND=4) :: nd = - 1 REAL (KIND=RK) :: m = 0.0_RKIND CHARACTER (LEN=BUFSIZE) :: tag - END TYPE SlantedWireComp + END TYPE SlantedWireComp_t !------------------------------------------------------------------------------ - ! ThinWire component that defines the overall properties of the definition - ! of ThinWires + ! ThinWire_t component that defines the overall properties of the definition + ! of ThinWires_t !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SlantedWire - TYPE (SlantedWireComp), DIMENSION (:), POINTER :: swc => NULL () + TYPE, PUBLIC :: SlantedWire_t + TYPE (SlantedWireComp_t), DIMENSION (:), POINTER :: swc => NULL () REAL (KIND=RK) :: rad = 0 LOGICAL :: disp = .false. CHARACTER (LEN=BUFSIZE) :: dispfile @@ -482,20 +422,20 @@ MODULE NFDETypes INTEGER (KIND=4) :: tr = 0 INTEGER (KIND=4) :: n_swc = 0 INTEGER (KIND=4) :: n_swc_max = 0 - END TYPE SlantedWire + END TYPE SlantedWire_t !------------------------------------------------------------------------------ ! List of the different thin wires that were found in the file !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SlantedWires - TYPE (SlantedWire), DIMENSION (:), POINTER :: sw => NULL () + TYPE, PUBLIC :: SlantedWiresInfo_t + TYPE (SlantedWire_t), DIMENSION (:), POINTER :: sw => NULL () INTEGER (KIND=4) :: n_sw = 0 INTEGER (KIND=4) :: n_sw_max = 0 - END TYPE SlantedWires + END TYPE SlantedWiresInfo_t !-------------------------------------------------------------------------- ! Component for Thin Slots there is a list of this inside the component ! that defines the whole Thin Slot Reference !-------------------------------------------------------------------------- - TYPE, PUBLIC :: ThinSlotComp + TYPE, PUBLIC :: ThinSlotComp_t INTEGER (KIND=4) :: i = 0 INTEGER (KIND=4) :: j = 0 INTEGER (KIND=4) :: K = 0 @@ -503,69 +443,69 @@ MODULE NFDETypes INTEGER (KIND=4) :: dir = - 1 INTEGER (KIND=4) :: Or = - 1 CHARACTER (LEN=BUFSIZE) :: tag - END TYPE ThinSlotComp + END TYPE ThinSlotComp_t !-------------------------------------------------------------------------- - ! ThinSlot component that defines the overall properties of the definition - ! of ThinSlots in ORIGINAL + ! ThinSlot_t component that defines the overall properties of the definition + ! of ThinSlots_t in ORIGINAL !-------------------------------------------------------------------------- - TYPE, PUBLIC :: ThinSlot - TYPE (ThinSlotComp), DIMENSION (:), POINTER :: tgc => NULL () + TYPE, PUBLIC :: ThinSlot_t + TYPE (ThinSlotComp_t), DIMENSION (:), POINTER :: tgc => NULL () REAL (KIND=RK) :: width = 0 INTEGER (KIND=4) :: n_tgc = 0 INTEGER (KIND=4) :: n_tgc_max = 0 - END TYPE ThinSlot + END TYPE ThinSlot_t !-------------------------------------------------------------------------- ! List of the different thin Slots that were found in the file !-------------------------------------------------------------------------- - TYPE, PUBLIC :: ThinSlots - TYPE (ThinSlot), DIMENSION (:), POINTER :: tg => NULL () + TYPE, PUBLIC :: ThinSlots_t + TYPE (ThinSlot_t), DIMENSION (:), POINTER :: tg => NULL () INTEGER (KIND=4) :: n_tg = 0 INTEGER (KIND=4) :: n_tg_max = 0 - END TYPE ThinSlots + END TYPE ThinSlots_t !-----------------> Border Types !------------------------------------------------------------------------------ ! PML Border Type !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FronteraPML + TYPE, PUBLIC :: FronteraPML_t REAL (KIND=RK) :: orden = 2.0_RK REAL (KIND=RK) :: refl = 1e-3_RK INTEGER (KIND=4) :: numCapas = 8 - END TYPE FronteraPML + END TYPE FronteraPML_t !------------------------------------------------------------------------------ ! Tipo de la frontera !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Frontera + TYPE, PUBLIC :: Frontera_t INTEGER (KIND=4), DIMENSION (6) :: tipoFrontera - TYPE (FronteraPML), DIMENSION (6) :: propiedadesPML - END TYPE Frontera + TYPE (FronteraPML_t), DIMENSION (6) :: propiedadesPML + END TYPE Frontera_t !-----------------> Probe Types !------------------------------------------------------------------------------ ! TYPE to define the new probe object which contains the TYPE of calculation ! the TYPE of analysis, time and frequency step and the filename where ! it should be saved !------------------------------------------------------------------------------ - TYPE, PUBLIC :: MasSonda + TYPE, PUBLIC :: MasSonda_t CHARACTER (LEN=BUFSIZE) :: filename - TYPE (coords), DIMENSION (:), POINTER :: cordinates => NULL () + TYPE (coords_t), DIMENSION (:), POINTER :: cordinates => NULL () REAL (KIND=RK) :: tstart, tstop, tstep REAL (KIND=RK) :: fstart, fstop, fstep INTEGER (KIND=4) :: type1, type2 INTEGER (KIND=4) :: len_cor = 0 CHARACTER (LEN=BUFSIZE) :: outputrequest - END TYPE MasSonda + END TYPE MasSonda_t !------------------------------------------------------------------------------ ! TYPE that defines a list of probes to be appended and accesed !------------------------------------------------------------------------------ - TYPE, PUBLIC :: MasSondas - TYPE (MasSonda), DIMENSION (:), POINTER :: collection => NULL () + TYPE, PUBLIC :: MasSondas_t + TYPE (MasSonda_t), DIMENSION (:), POINTER :: collection => NULL () INTEGER (KIND=4) :: length = 0 INTEGER (KIND=4) :: length_max = 0 INTEGER (KIND=4) :: len_cor_max = 0 !cota - END TYPE MasSondas + END TYPE MasSondas_t !------------------------------------------------------------------------------ ! This TYPE contains the basic information in nearly all the different PROBES !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Sonda + TYPE, PUBLIC :: Sonda_t CHARACTER (LEN=BUFSIZE) :: grname INTEGER (KIND=4), DIMENSION (:), POINTER :: i => NULL () INTEGER (KIND=4), DIMENSION (:), POINTER :: j => NULL () @@ -580,65 +520,65 @@ MODULE NFDETypes REAL (KIND=RK) :: phistart, phistop, phistep REAL (KIND=RK) :: thetastart, thetastop, thetastep CHARACTER (LEN=BUFSIZE) :: FileNormalize - END TYPE Sonda + END TYPE Sonda_t !------------------------------------------------------------------------------ ! TYPE for the electric far field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FarField_Sonda - TYPE (Sonda) :: probe - END TYPE FarField_Sonda + TYPE, PUBLIC :: FarField_Sonda_t + TYPE (Sonda_t) :: probe + END TYPE FarField_Sonda_t !------------------------------------------------------------------------------ ! TYPE for the electric field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Electric_Sonda - TYPE (Sonda) :: probe - END TYPE Electric_Sonda + TYPE, PUBLIC :: Electric_Sonda_t + TYPE (Sonda_t) :: probe + END TYPE Electric_Sonda_t !------------------------------------------------------------------------------ ! TYPE for the magnetic field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Magnetic_Sonda - TYPE (Sonda) :: probe - END TYPE Magnetic_Sonda + TYPE, PUBLIC :: Magnetic_Sonda_t + TYPE (Sonda_t) :: probe + END TYPE Magnetic_Sonda_t !------------------------------------------------------------------------------ ! TYPE for the normal electric field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: NormalElectric_Sonda - TYPE (Sonda) :: probe + TYPE, PUBLIC :: NormalElectric_Sonda_t + TYPE (Sonda_t) :: probe INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () INTEGER (KIND=4) :: n_nml = 0 INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE NormalElectric_Sonda + END TYPE NormalElectric_Sonda_t !------------------------------------------------------------------------------ ! TYPE for the normal magnetic field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: NormalMagnetic_Sonda - TYPE (Sonda) :: probe + TYPE, PUBLIC :: NormalMagnetic_Sonda_t + TYPE (Sonda_t) :: probe INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () INTEGER (KIND=4) :: n_nml = 0 INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE NormalMagnetic_Sonda + END TYPE NormalMagnetic_Sonda_t !------------------------------------------------------------------------------ ! TYPE for the electric surface current density !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SurfaceElectricCurrent_Sonda - TYPE (Sonda) :: probe + TYPE, PUBLIC :: SurfaceElectricCurrent_Sonda_t + TYPE (Sonda_t) :: probe INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () INTEGER (KIND=4) :: n_nml = 0 INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE SurfaceElectricCurrent_Sonda + END TYPE SurfaceElectricCurrent_Sonda_t !------------------------------------------------------------------------------ ! TYPE for the magnetic surface current density !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SurfaceMagneticCurrent_Sonda - TYPE (Sonda) :: probe + TYPE, PUBLIC :: SurfaceMagneticCurrent_Sonda_t + TYPE (Sonda_t) :: probe INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () INTEGER (KIND=4) :: n_nml = 0 INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE SurfaceMagneticCurrent_Sonda + END TYPE SurfaceMagneticCurrent_Sonda_t !------------------------------------------------------------------------------ ! Abstract class which performs the dynamic dispatching !------------------------------------------------------------------------------ - TYPE, PUBLIC :: abstractSonda + TYPE, PUBLIC :: abstractSonda_t INTEGER (KIND=4) :: n_FarField = 0 INTEGER (KIND=4) :: n_Electric = 0 INTEGER (KIND=4) :: n_Magnetic = 0 @@ -654,27 +594,27 @@ MODULE NFDETypes INTEGER (KIND=4) :: n_NormalMagnetic_max = 0 INTEGER (KIND=4) :: n_SurfaceElectricCurrent_max = 0 INTEGER (KIND=4) :: n_SurfaceMagneticCurrent_max = 0 - TYPE (FarField_Sonda), DIMENSION (:), POINTER :: FarField => NULL () - TYPE (Electric_Sonda), DIMENSION (:), POINTER :: Electric => NULL () - TYPE (Magnetic_Sonda), DIMENSION (:), POINTER :: Magnetic => NULL () - TYPE (NormalElectric_Sonda), DIMENSION (:), POINTER :: NormalElectric => NULL () - TYPE (NormalMagnetic_Sonda), DIMENSION (:), POINTER :: NormalMagnetic => NULL () - TYPE (SurfaceElectricCurrent_Sonda), DIMENSION (:), POINTER :: SurfaceElectricCurrent => NULL () - TYPE (SurfaceMagneticCurrent_Sonda), DIMENSION (:), POINTER :: SurfaceMagneticCurrent => NULL () - END TYPE abstractSonda + TYPE (FarField_Sonda_t), DIMENSION (:), POINTER :: FarField => NULL () + TYPE (Electric_Sonda_t), DIMENSION (:), POINTER :: Electric => NULL () + TYPE (Magnetic_Sonda_t), DIMENSION (:), POINTER :: Magnetic => NULL () + TYPE (NormalElectric_Sonda_t), DIMENSION (:), POINTER :: NormalElectric => NULL () + TYPE (NormalMagnetic_Sonda_t), DIMENSION (:), POINTER :: NormalMagnetic => NULL () + TYPE (SurfaceElectricCurrent_Sonda_t), DIMENSION (:), POINTER :: SurfaceElectricCurrent => NULL () + TYPE (SurfaceMagneticCurrent_Sonda_t), DIMENSION (:), POINTER :: SurfaceMagneticCurrent => NULL () + END TYPE abstractSonda_t !------------------------------------------------------------------------------ ! Class to account as a list for all the probes ! that might be required during the parsing process !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Sondas - TYPE (abstractSonda), DIMENSION (:), POINTER :: probes => NULL () + TYPE, PUBLIC :: Sondas_t + TYPE (abstractSonda_t), DIMENSION (:), POINTER :: probes => NULL () INTEGER (KIND=4) :: n_probes = 0 INTEGER (KIND=4) :: n_probes_max = 0 - END TYPE Sondas + END TYPE Sondas_t !------------------------------------------------------------------------------ ! Object TYPE defined for the Bloque current probe !------------------------------------------------------------------------------ - TYPE, PUBLIC :: BloqueProbe + TYPE, PUBLIC :: BloqueProbe_t REAL (KIND=RK) :: tstart, tstop, tstep REAL (KIND=RK) :: fstart, fstop, fstep CHARACTER (LEN=BUFSIZE) :: FileNormalize @@ -684,19 +624,19 @@ MODULE NFDETypes LOGICAL :: t CHARACTER (LEN=BUFSIZE) :: outputrequest CHARACTER (LEN=BUFSIZE) :: tag - END TYPE BloqueProbe + END TYPE BloqueProbe_t ! Object made for the collection of defined Bloque probes - TYPE, PUBLIC :: BloqueProbes - TYPE (BloqueProbe), DIMENSION (:), POINTER :: bp => NULL () + TYPE, PUBLIC :: BloqueProbes_t + TYPE (BloqueProbe_t), DIMENSION (:), POINTER :: bp => NULL () INTEGER (KIND=4) :: n_bp = 0 INTEGER (KIND=4) :: n_bp_max = 0 - END TYPE BloqueProbes + END TYPE BloqueProbes_t !------------------------------------------------------------------------------ ! Object TYPE defined for the Volumic probes !------------------------------------------------------------------------------ - TYPE, PUBLIC :: VolProbe - TYPE (coords), DIMENSION (:), POINTER :: cordinates => NULL () + TYPE, PUBLIC :: VolProbe_t + TYPE (coords_t), DIMENSION (:), POINTER :: cordinates => NULL () REAL (KIND=RK) :: tstart, tstop, tstep CHARACTER (LEN=BUFSIZE) :: outputrequest INTEGER (KIND=4) :: len_cor = 0 @@ -704,32 +644,32 @@ MODULE NFDETypes REAL (KIND=RK) :: fstart, fstop, fstep INTEGER (KIND=4) :: type2 CHARACTER (LEN=BUFSIZE) :: filename - END TYPE VolProbe + END TYPE VolProbe_t ! Object made for the collection of defined Volumic probes - TYPE, PUBLIC :: VolProbes - TYPE (VolProbe), DIMENSION (:), POINTER :: collection => NULL () + TYPE, PUBLIC :: VolProbes_t + TYPE (VolProbe_t), DIMENSION (:), POINTER :: collection => NULL () INTEGER (KIND=4) :: length = 0 INTEGER (KIND=4) :: length_max = 0 INTEGER (KIND=4) :: len_cor_max = 0 !cota - END TYPE VolProbes + END TYPE VolProbes_t !-----------------> Source Types !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Box + TYPE, PUBLIC :: Box_t CHARACTER (LEN=BUFSIZE) :: nombre_fichero INTEGER (KIND=4), DIMENSION (3) :: coor1, coor2 - END TYPE Box + END TYPE Box_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Boxes - TYPE (Box), DIMENSION (:), POINTER :: Vols => NULL () + TYPE, PUBLIC :: Boxes_t + TYPE (Box_t), DIMENSION (:), POINTER :: Vols => NULL () INTEGER (KIND=4) :: nVols = 0 INTEGER (KIND=4) :: nVols_max = 0 - END TYPE Boxes + END TYPE Boxes_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: PlaneWave + TYPE, PUBLIC :: PlaneWave_t CHARACTER (LEN=BUFSIZE) :: nombre_fichero CHARACTER (LEN=BUFSIZE) :: atributo INTEGER (KIND=4), DIMENSION (3) :: coor1, coor2 @@ -737,64 +677,64 @@ MODULE NFDETypes logical :: isRC !for reververation chambers REAL (KIND=RK) :: INCERTMAX INTEGER (KIND=4) :: numModes !for reververation chambers - END TYPE PlaneWave + END TYPE PlaneWave_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: PlaneWaves - TYPE (PlaneWave), DIMENSION (:), POINTER :: collection => NULL () + TYPE, PUBLIC :: PlaneWaves_t + TYPE (PlaneWave_t), DIMENSION (:), POINTER :: collection => NULL () INTEGER (KIND=4) :: nc = 0 INTEGER (KIND=4) :: nC_max = 0 - END TYPE PlaneWaves + END TYPE PlaneWaves_t !------------------------------------------------------------------------------ ! Definicin de los tipos current density que existirn en el ficero ! nfde !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Curr_Field_Src - TYPE (coords_scaled), DIMENSION (:), POINTER :: c1P => NULL () - TYPE (coords_scaled), DIMENSION (:), POINTER :: c2P => NULL () + TYPE, PUBLIC :: Curr_Field_Src_t + TYPE (coords_scaled_t), DIMENSION (:), POINTER :: c1P => NULL () + TYPE (coords_scaled_t), DIMENSION (:), POINTER :: c2P => NULL () CHARACTER (LEN=BUFSIZE) :: nombre INTEGER (KIND=4) :: n_C1P = 0 INTEGER (KIND=4) :: n_C2P = 0 LOGICAL :: isElec, isHard, isInitialValue - END TYPE Curr_Field_Src + END TYPE Curr_Field_Src_t !------------------------------------------------------------------------------ ! Definicin de las Nodal Source global !------------------------------------------------------------------------------ - TYPE, PUBLIC :: NodSource - TYPE (Curr_Field_Src), DIMENSION (:), POINTER :: NodalSource => NULL () + TYPE, PUBLIC :: NodSource_t + TYPE (Curr_Field_Src_t), DIMENSION (:), POINTER :: NodalSource => NULL () INTEGER (KIND=4) :: n_nodSrc = 0 INTEGER (KIND=4) :: n_nodSrc_max = 0 INTEGER (KIND=4) :: n_C1P_max = 0 INTEGER (KIND=4) :: n_C2P_max = 0 - END TYPE NodSource + END TYPE NodSource_t !-----------------> General Types !------------------------------------------------------------------------------ ! Matrix attributes. ! Total[XYZ] -> Is the cell number for each axis. !------------------------------------------------------------------------------ - TYPE, PUBLIC :: MatrizMedios + TYPE, PUBLIC :: MatrizMedios_t INTEGER (KIND=4) :: totalX, totalY, totalZ - END TYPE MatrizMedios + END TYPE MatrizMedios_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE NFDEGeneral + TYPE NFDEGeneral_t REAL (KIND=RK) :: dt INTEGER (KIND=4) :: nmax LOGICAL :: mtlnProblem - END TYPE NFDEGeneral + END TYPE NFDEGeneral_t !------------------------------------------------------------------------------ ! Definition of the type. Three vectors are defined, for each axis X,Y,Z. If ! their size is equal to 1 then there is a constant increment. If it is not ! then it will be one for each cell position. !! WARNING - !! Even though, Type MatrizMedios defines the total number of cell for each + !! Even though, Type MatrizMedios_t defines the total number of cell for each !! axis. n[XYZ] defines it too partially. Meaning that if there is a !! constant increment, the pointer will be a scalar. However, when it is !! variable the pointer will have the same size as total[XYZ] in the - !! MatrizMedios type and for each vector position the increment for those + !! MatrizMedios_t type and for each vector position the increment for those !! Cells !------------------------------------------------------------------------------ - TYPE Desplazamiento + TYPE Desplazamiento_t REAL (KIND=RK), DIMENSION (:), POINTER :: desX => NULL () REAL (KIND=RK), DIMENSION (:), POINTER :: desY => NULL () REAL (KIND=RK), DIMENSION (:), POINTER :: desZ => NULL () @@ -804,65 +744,65 @@ MODULE NFDETypes real (KIND=RK) ::originx= 0.0_RKIND !2012 real (KIND=RK) ::originy= 0.0_RKIND !2012 real (KIND=RK) ::originz= 0.0_RKIND !2012 - END TYPE Desplazamiento + END TYPE Desplazamiento_t !-----------------> Program Types !------------------------------------------------------------------------------ ! Parameters needed for the parser !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Parseador + TYPE, PUBLIC :: Parseador_t character (len=BUFSIZE) :: switches=' ' ! Basics - TYPE (NFDEGeneral), POINTER :: general => NULL () - TYPE (MatrizMedios), POINTER :: matriz => NULL () - TYPE (Desplazamiento), POINTER :: despl => NULL () - TYPE (Frontera), POINTER :: front => NULL () - ! Materials - TYPE (Materials), POINTER :: Mats => NULL () - TYPE (PECRegions), POINTER :: pecRegs => NULL () - TYPE (PECRegions), POINTER :: pmcRegs => NULL () - TYPE (DielectricRegions), POINTER :: DielRegs => NULL () - TYPE (LossyThinSurfaces), POINTER :: LossyThinSurfs => NULL () - TYPE (FreqDepenMaterials), POINTER :: frqDepMats => NULL () + TYPE (NFDEGeneral_t), POINTER :: general => NULL () + TYPE (MatrizMedios_t), POINTER :: matriz => NULL () + TYPE (Desplazamiento_t), POINTER :: despl => NULL () + TYPE (Frontera_t), POINTER :: front => NULL () + ! Materials_t + TYPE (Materials_t), POINTER :: Mats => NULL () + TYPE (PECRegions_t), POINTER :: pecRegs => NULL () + TYPE (PECRegions_t), POINTER :: pmcRegs => NULL () + TYPE (DielectricRegions_t), POINTER :: DielRegs => NULL () + TYPE (LossyThinSurfaces_t), POINTER :: LossyThinSurfs => NULL () + TYPE (FreqDepenMaterials_t), POINTER :: frqDepMats => NULL () TYPE (ANISOTROPICelements_t), POINTER :: aniMats => NULL () ! Sources - TYPE (Boxes), POINTER :: boxSrc => NULL () - TYPE (PlaneWaves), POINTER :: plnSrc => NULL () - TYPE (NodSource), POINTER :: nodSrc => NULL () + TYPE (Boxes_t), POINTER :: boxSrc => NULL () + TYPE (PlaneWaves_t), POINTER :: plnSrc => NULL () + TYPE (NodSource_t), POINTER :: nodSrc => NULL () ! Probes - TYPE (Sondas), POINTER :: oldSONDA => NULL () - TYPE (MasSondas), POINTER :: Sonda => NULL () - TYPE (BloqueProbes), POINTER :: BloquePrb => NULL () - TYPE (VolProbes), POINTER :: VolPrb => NULL () + TYPE (Sondas_t), POINTER :: oldSONDA => NULL () + TYPE (MasSondas_t), POINTER :: Sonda => NULL () + TYPE (BloqueProbes_t), POINTER :: BloquePrb => NULL () + TYPE (VolProbes_t), POINTER :: VolPrb => NULL () ! Thin Elements - TYPE (ThinWires), POINTER :: tWires => NULL () - TYPE (SlantedWires), POINTER :: sWires => NULL () - TYPE (ThinSlots), POINTER :: tSlots => NULL () + TYPE (ThinWires_t), POINTER :: tWires => NULL () + TYPE (SlantedWiresInfo_t), POINTER :: sWires => NULL () + TYPE (ThinSlots_t), POINTER :: tSlots => NULL () ! Conformal - TYPE(ConformalPECRegions), pointer :: conformalRegs => NULL() + TYPE(ConformalPECRegions_t), pointer :: conformalRegs => NULL() #ifdef CompileWithMTLN TYPE (mtln_t), POINTER :: mtln => NULL () #endif - END TYPE Parseador + END TYPE Parseador_t !---> definicion de tipos - TYPE, PUBLIC :: t_linea + TYPE, PUBLIC :: t_linea_t INTEGER (KIND=4) :: LEN CHARACTER (LEN=BUFSIZE) :: dato - END TYPE t_linea + END TYPE t_linea_t !---> - TYPE, PUBLIC :: t_NFDE_FILE + TYPE, PUBLIC :: t_NFDE_FILE_t INTEGER (KIND=4) mpidir !x=1,y=2,z=3 INTEGER (KIND=8) :: targ !---> INTEGER (KIND=8) :: numero - TYPE (t_linea), DIMENSION (:), POINTER :: lineas + TYPE (t_linea_t), DIMENSION (:), POINTER :: lineas logical :: thereare_stoch - END TYPE t_NFDE_FILE + END TYPE t_NFDE_FILE_t !---> contains -END MODULE NFDETypes +END MODULE NFDETypes_m diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index aeb90b56a..deef3529b 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -10,21 +10,14 @@ MODULE Preprocess_m #undef DetectAdj ! - USE Report - USE NFDETypes + USE Report_m + USE NFDETypes_m !healer sgg10 - USE CreateMatrices + USE CreateMatrices_m !typos que leo desde mi FDE - USE FDEtypes - USE DMMA -#ifdef CompileWithConformal - USE CONFORMAL_INI_CLASS - USE CONFORMAL_TOOLS - USE CONFORMAL_MAPPED - USE CONFORMAL_TYPES - USE Conformal_TimeSteps_m -#endif - USE conformal_mod, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z + USE FDETYPES_m + USE DMMA_m + USE conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z IMPLICIT NONE !!!variables globales del modulo REAL (KIND=RKIND), save :: cluz,zvac @@ -51,11 +44,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN LOGICAL, INTENT (INout) :: mibc,SGBC,CLIPREGION,boundwireradius,SGBCDispersive,skindepthpre LOGICAL, INTENT (INout) :: createmapvtk TYPE (limit_t), DIMENSION (1:6) :: SINPML_fullsize, fullsize - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg character(len=BUFSIZE) :: extraswitches type(taglist_t) :: tag_numbers - TYPE (Parseador), INTENT (INOUT) :: this + type(Parseador_t), INTENT (INOUT) :: this INTEGER (KIND=4) :: tama, tama2, tama3, tama4, tama5, tama6, i, j, k, tipotemp, tamaSonda, & & tamaoldSONDA, tamaBloquePrb, tamaScrPrb,pozi,tama2bis,numeroasignaciones,ci CHARACTER (LEN=*), INTENT (IN) :: fichin @@ -98,7 +91,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN INTEGER (KIND=4) :: i11, j11 ! type (tagtype_t) :: tagtype - TYPE (FreqDepenMaterial), POINTER :: fdgeom + type(FreqDepenMaterial_t), POINTER :: fdgeom ! INTEGER (KIND=4) :: numertag INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & @@ -4866,7 +4859,7 @@ function changeTimeStepIfConformalNeeded(sgg_dt) result(res) end function subroutine initConformalBoundingBox(sgg, bbox) - type(sggfdtdinfo), intent(in) :: sgg + type(sggfdtdinfo_t), intent(in) :: sgg type(XYZlimit_t), intent(inout) :: bbox bbox%XI = -sgg%Alloc(iHx)%XI bbox%XE = -sgg%Alloc(iHx)%XE @@ -4945,7 +4938,7 @@ subroutine getDifferentFaceRatios(ratios, conf_media) end subroutine subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map, type) - type(sggfdtdinfo), intent(inout) :: sgg + type(sggfdtdinfo_t), intent(inout) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios @@ -4991,7 +4984,7 @@ subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ra end subroutine subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media @@ -5018,7 +5011,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ face_media = 0 end if - allocate(sgg%Med(face_media)%ConformalFace,conformal_volumes%face_media(j)%size) + allocate(sgg%Med(face_media)%ConformalFace(conformal_volumes%face_media(j)%size)) do k = 1, conformal_volumes%face_media(j)%size cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) @@ -5038,7 +5031,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ media%sggMiHz(cell(1), cell(2), cell(3)) = face_media end select - sgg%Med(face_media)%ConformalFace(k) => conformal_volumes%face_media(j)%faces(k) + sgg%Med(face_media)%ConformalFace(k) = conformal_volumes%face_media(j)%faces(k) end do end do @@ -5058,7 +5051,7 @@ function getEdgeNormalFromTriangles(triangles) result(res) end function subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, type) - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media @@ -5088,7 +5081,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ edge_media = 0 end if - allocate(sgg%Med(edge_media)%ConformalEdge,conformal_volumes%edge_media(j)%size) + allocate(sgg%Med(edge_media)%ConformalEdge(conformal_volumes%edge_media(j)%size)) do k = 1, conformal_volumes%edge_media(j)%size @@ -5110,7 +5103,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end select - sgg%Med(edge_media)%ConformalEdge(k) => conformal_volumes%edge_media(j)%edge(k) + sgg%Med(edge_media)%ConformalEdge(k) = conformal_volumes%edge_media(j)%edges(k) end do @@ -5118,7 +5111,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ end subroutine subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media @@ -5613,7 +5606,7 @@ subroutine asignawiredisper(disp, file) end subroutine asignawiredisper subroutine asignadisper(fdgeom) - TYPE (FreqDepenMaterial), POINTER :: fdgeom + type(FreqDepenMaterial_t), POINTER :: fdgeom IF (fdgeom%l+fdgeom%LM /=0 ) THEN BUFF='ERROR: SECOND ORDER DISPERSIVE MEDIA UNSUPPORTED. TRANSLATE THEM TO FIRST ORDER ()' @@ -5825,9 +5818,9 @@ END SUBROUTINE read_geomData SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize, this,MurAfterPML,mur_exist) TYPE (limit_t), DIMENSION (1:6) :: fullsize, SINPML_fullsize - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg - TYPE (Parseador), INTENT (IN) :: this + type(Parseador_t), INTENT (IN) :: this INTEGER (KIND=4) :: tama, i, field,j,k character(len=BUFSIZE) :: buff logical MurAfterPML,mur_exist @@ -6303,7 +6296,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize subroutine prepro_skindepth(this,fichin) integer pozi,tama,j,k character (LEN=BUFSIZE) :: multiportFile - TYPE (Parseador), INTENT (IN) :: this + type(Parseador_t), INTENT (IN) :: this CHARACTER (LEN=*), INTENT (IN) :: fichin character (LEN=BUFSIZE) :: restocadena integer :: my_iostat @@ -6347,7 +6340,7 @@ subroutine AssigLossyOrPECtoNodes(sgg,media,conf_conflicts,input_conformal_flag) #else subroutine AssigLossyOrPECtoNodes(sgg,media) #endif - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type (media_matrices_t), intent(inout) :: media logical :: ispec, isSGBC, IsComposite, islossy, input_conformal_flag,NODALMENTEIGUALES,iguaSGM,iguaSIG,iguaMUR,iguaPEC,iguaLOS,iguaEPR,ISconformal @@ -6674,7 +6667,7 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) CHARACTER (LEN=*), INTENT (IN) :: fichin INTEGER (KIND=4), INTENT (IN) :: layoutnumber - TYPE (Parseador), INTENT (INOUT) :: this + type(Parseador_t), INTENT (INOUT) :: this LOGICAL :: foundDuplicate integer (Kind=4) :: numertag, i,j, k, m, tama,tama2,tama3,tama2p,tama3p,precounting,acum,thefileno CHARACTER(LEN=BUFSIZE) :: tagToCheck diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index fb3f9b47d..41c564f10 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -14,25 +14,25 @@ !---> MinusCloneMagneticPMC !________________________________________________________________________________________ -module Solver_mod - - use fdetypes - use report - use PostProcessing - use Ilumina - use Observa - use BORDERS_other - use Borders_CPML - use Borders_MUR - use Resuming - use nodalsources - use Lumped - use PMLbodies - use xdmf - use vtk +module Solver_m + + use FDETYPES_m + use Report_m + use PostProcessing_m + use ilumina_m + use Observa_m + use BORDERS_other_m + use BORDERS_CPML_m + use BORDERS_MUR_m + use resuming_m + use nodalsources_m + use Lumped_m + use PMLbodies_m + use xdmf_m + use VTK_m use interpreta_switches_m, only: entrada_t #ifdef CompileWithMPI - use MPIcomm + use MPIcomm_m #endif #ifdef CompileWithStochastic use MPI_stochastic @@ -44,15 +44,15 @@ module Solver_mod #ifdef CompileWithStochastic use sgbc_stoch #else - use sgbc_NOstoch + use SGBC_nostoch_m #endif - use EDispersives - use MDispersives - use Anisotropic - use HollandWires + use EDispersives_m + use Mdispersives_m + use Anisotropic_m + use HollandWires_m #ifdef CompileWithMTLN - use Wire_bundles_mtln_mod + use Wire_bundles_mtln_m #endif #ifdef CompileWithBerengerWires @@ -68,32 +68,26 @@ module Solver_mod #endif -#ifdef CompileWithConformal - USE conformal_time_stepping_m - USE CONFORMAL_MAPPED -#endif - USE EpsMuTimeScale_m - USE CALC_CONSTANTS + USE EpsMuTimeScale_m + USE CALC_CONSTANTS_m #ifdef CompileWithPrescale USE P_rescale #endif #ifdef CompileWithMTLN ! use mtln_solver_mod, mtln_solver_t => mtln_t - use mtln_types_mod, only: mtln_t - use Wire_bundles_mtln_mod + use mtln_types_m, only: mtln_t + use Wire_bundles_mtln_m #endif !! #ifdef CompileWithProfiling use nvtx #endif - use conformal_mod - implicit none type, public :: solver_t type(sim_control_t) :: control - type(Logic_control) :: thereAre + type(logic_control_t) :: thereAre type(perform_t) :: perform, d_perform real(kind=rkind), pointer, dimension (:,:,:), contiguous :: Ex,Ey,Ez,Hx,Hy,Hz @@ -110,7 +104,7 @@ module Solver_mod logical :: parar, everflushed = .false., still_planewave_time ! semba variables - type (sggfdtdinfo) :: sgg + type (sggfdtdinfo_t) :: sgg type(media_matrices_t) :: media type(taglist_t) :: tag_numbers type (limit_t), dimension(1:6) :: SINPML_fullsize,fullsize @@ -174,7 +168,7 @@ module Solver_mod function solver_ctor(sgg,media,tag_numbers,SINPML_Fullsize,fullsize,finishedwithsuccess,Eps0,Mu0,tagtype, & input, maxSourceValue, time_desdelanzamiento) result(res) - type (SGGFDTDINFO), intent(in) :: sgg + type (SGGFDTDINFO_t), intent(in) :: sgg type(taglist_t), intent(in) :: tag_numbers type(media_matrices_t), intent(in) :: media type (limit_t), dimension(1:6), intent(in) :: SINPML_fullsize,fullsize @@ -241,7 +235,6 @@ subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamient this%control%stochastic = input%stochastic this%control%verbose = input%verbose this%control%dontwritevtk = input%dontwritevtk - this%control%use_mtln_wires = input%use_mtln_wires this%control%resume_fromold = input%resume_fromold this%control%vtkindex = input%vtkindex this%control%createh5bin = input%createh5bin @@ -274,7 +267,7 @@ subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamient this%control%maxCPUtime = input%maxCPUtime this%control%SGBCDepth = input%SGBCDepth this%control%precision = input%precision - this%control%size = input%size + this%control%num_procs = input%num_procs this%control%MEDIOEXTRA = input%MEDIOEXTRA this%control%facesNF2FF = input%facesNF2FF this%EpsMuTimeScale_input_parameters = input%EpsMuTimeScale_input_parameters @@ -457,12 +450,12 @@ subroutine solver_init(this) J=this%sgg%Alloc(iEx)%YI K=this%sgg%Alloc(iEx)%ZI do field=iEy,6 - if (this%sgg%Alloc(field)%XI /= I) call stoponerror(this%control%layoutnumber,this%control%size,'OFFSETS IN INITIAL COORD NOT ALLOWED') - if (this%sgg%Alloc(field)%YI /= J) call stoponerror(this%control%layoutnumber,this%control%size,'OFFSETS IN INITIAL COORD NOT ALLOWED') - if (this%sgg%Alloc(field)%ZI /= K) call stoponerror(this%control%layoutnumber,this%control%size,'OFFSETS IN INITIAL COORD NOT ALLOWED') + if (this%sgg%Alloc(field)%XI /= I) call stoponerror(this%control%layoutnumber,this%control%num_procs,'OFFSETS IN INITIAL COORD NOT ALLOWED') + if (this%sgg%Alloc(field)%YI /= J) call stoponerror(this%control%layoutnumber,this%control%num_procs,'OFFSETS IN INITIAL COORD NOT ALLOWED') + if (this%sgg%Alloc(field)%ZI /= K) call stoponerror(this%control%layoutnumber,this%control%num_procs,'OFFSETS IN INITIAL COORD NOT ALLOWED') END DO - write(whoami,'(a,i5,a,i5,a)') '(',this%control%layoutnumber+1,'/',this%control%size,') ' + write(whoami,'(a,i5,a,i5,a)') '(',this%control%layoutnumber+1,'/',this%control%num_procs,') ' !file names write(chari,*) this%control%layoutnumber+1 if ((this%control%layoutnumber == 0).and.this%control%verbose) call reportmedia(this%sgg) @@ -519,7 +512,7 @@ subroutine solver_init(this) if (this%control%resume_fromold) then close (14) write(dubuf,*) 'Incoherence between MPI saved steps for resuming.', dummyMin,dummyMax,this%lastexecutedtimesteP - call stoponerror (this%control%layoutnumber,this%control%size,BUFF,.true.) !para que retorne + call stoponerror (this%control%layoutnumber,this%control%num_procs,BUFF,.true.) !para que retorne call this%destroy_and_deallocate() return else @@ -534,7 +527,7 @@ subroutine solver_init(this) call MPI_AllReduce( this%lastexecutedtimestep, dummyMax, 1_4, MPI_INTEGER, MPI_MAX, SUBCOMM_MPI, ierr) if ((dummyMax /= this%lastexecutedtimestep).or.(dummyMin /= this%lastexecutedtimestep)) then write(DUbuf,*) 'NO success. fields.old MPI are also incoherent for resuming.', dummyMin,dummyMax,this%lastexecutedtimestep - call stoponerror (this%control%layoutnumber,this%control%size,DUBUF,.true.) !para que retorne + call stoponerror (this%control%layoutnumber,this%control%num_procs,DUBUF,.true.) !para que retorne call this%destroy_and_deallocate() return else @@ -546,7 +539,7 @@ subroutine solver_init(this) close (14) write(dubuf,*) 'Incoherence between MPI saved steps for resuming.',dummyMin,dummyMax,this%lastexecutedtimestep - call stoponerror (this%control%layoutnumber,this%control%size,dubuf,.true.) !para que retorne + call stoponerror (this%control%layoutnumber,this%control%num_procs,dubuf,.true.) !para que retorne call this%destroy_and_deallocate() return #endif @@ -558,7 +551,7 @@ subroutine solver_init(this) endif if (this%initialtimestep>this%control%finaltimestep) then - call stoponerror (this%control%layoutnumber,this%control%size,'Initial time step greater than final one',.true.) !para que retorne + call stoponerror (this%control%layoutnumber,this%control%num_procs,'Initial time step greater than final one',.true.) !para que retorne call this%destroy_and_deallocate() return endif @@ -629,11 +622,11 @@ subroutine solver_init(this) call InitTiming(this%sgg, this%control, this%control%time_desdelanzamiento, this%initialtimestep, this%control%maxSourceValue) - CALL CLOSEWARNINGFILE(this%control%layoutnumber,this%control%size,this%control%fatalerror,.false.,this%control%simu_devia) !aqui ya esta dividido el stochastic y hay dos this%control%layoutnumber=0 + CALL CLOSEWARNINGFILE(this%control%layoutnumber,this%control%num_procs,this%control%fatalerror,.false.,this%control%simu_devia) !aqui ya esta dividido el stochastic y hay dos this%control%layoutnumber=0 if (this%control%fatalerror) then dubuf='FATAL ERRORS. Revise *Warnings.txt file. ABORTING...' - call stoponerror(this%control%layoutnumber,this%control%size,dubuf,.true.) !para que retorne + call stoponerror(this%control%layoutnumber,this%control%num_procs,dubuf,.true.) !para que retorne call this%destroy_and_deallocate() return endif @@ -645,8 +638,8 @@ subroutine solver_init(this) #ifdef CompileWithMPI #ifdef CompileWithStochastic if (this%control%stochastic) then - call syncstoch_mpi_sgbcs(this%control%simu_devia,this%control%layoutnumber,this%control%size) - call syncstoch_mpi_lumped(this%control%simu_devia,this%control%layoutnumber,this%control%size) + call syncstoch_mpi_sgbcs(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) + call syncstoch_mpi_lumped(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) endif #endif #endif @@ -1025,7 +1018,7 @@ subroutine reportSimulationOptions() call WarnErrReport(buff) if (this%control%medioextra%exists) then write(buff,'(a,i5,e9.2e2)') 'CPML correction size,factor to scale sigmamax = ', & - this%control%medioextra%size,this%control%medioextra%sigma + this%control%medioextra%pml_size,this%control%medioextra%sigma call WarnErrReport(buff) endif write(buff,*) 'saveall=',this%control%saveall,', flushsecondsFields=',this%control%flushsecondsFields,', flushsecondsData=',this%control%flushsecondsData,', maxCPUtime=',this%control%maxCPUtime,', singlefilewrite=',this%control%singlefilewrite @@ -1186,7 +1179,7 @@ subroutine initializeWires() #endif write(dubuf,*) 'Init Multi-Wires...'; call print11(this%control%layoutnumber,dubuf) call InitWires_Berenger(& - this%sgg,this%media%sggMiNo,this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz,this%control%layoutnumber,this%control%size,this%thereAre%Wires,this%control%resume,this%control%makeholes, & + this%sgg,this%media%sggMiNo,this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz,this%control%layoutnumber,this%control%num_procs,this%thereAre%Wires,this%control%resume,this%control%makeholes, & this%control%isolategroupgroups,this%control%mtlnberenger,this%control%mindistwires, & this%control%groundwires,this%control%taparrabos,Ex,Ey,Ez, & Idxe,Idye,Idze,Idxh,Idyh,Idzh,this%control%inductance_model,this%g%g2,this%sinPML_fullsize,this%fullsize,dtcritico,this%eps0,this%mu0,this%control%verbose) @@ -1217,7 +1210,7 @@ subroutine initializeWires() else continue endif - call InitWires_Slanted(this%sgg, this%control%layoutnumber,this%control%size, Ex, Ey, Ez, & + call InitWires_Slanted(this%sgg, this%control%layoutnumber,this%control%num_procs, Ex, Ey, Ez, & Idxe, Idye, Idze, Idxh, Idyh, Idzh, & this%media%sggMiNo, & this%media%sggMiEx, this%media%sggMiEy, this%media%sggMiEz, & @@ -1318,7 +1311,7 @@ subroutine initializeSGBC() #endif write(dubuf,*) 'Init Multi sgbc...'; call print11(this%control%layoutnumber,dubuf) call Initsgbcs(this%sgg,this%media,Ex,Ey,Ez,Hx,Hy,Hz,IDxe,IDye,IDze,IDxh,IDyh,IDzh, & - this%control%layoutnumber,this%control%size, this%g, this%thereAre%sgbcs,this%control%resume, & + this%control%layoutnumber,this%control%num_procs, this%g, this%thereAre%sgbcs,this%control%resume, & this%control%sgbccrank,this%control%sgbcFreq,this%control%sgbcresol,this%control%sgbcdepth,this%control%sgbcDispersive, & this%eps0,this%mu0,this%control%simu_devia,this%control%stochastic) @@ -1346,7 +1339,7 @@ subroutine initializeMultiports() call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init Multiports...'; call print11(this%control%layoutnumber,dubuf) - call InitMultiports (this%sgg,this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx ,this%media%sggMiHy ,this%media%sggMiHz,this%control%layoutnumber,this%control%size,this%thereAre%Multiports,this%control%resume, & + call InitMultiports (this%sgg,this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx ,this%media%sggMiHy ,this%media%sggMiHz,this%control%layoutnumber,this%control%num_procs,this%thereAre%Multiports,this%control%resume, & Idxe,Idye,Idze,this%control%NOcompomur,this%control%ADE,this%control%cfl,this%eps0,this%mu0) l_auxinput= this%thereAre%Multiports l_auxoutput=l_auxinput @@ -1386,7 +1379,7 @@ subroutine initializeConformalElements() !DEBUG call initialize_memory_FDTD_conf_fields (this%sgg,this%media%sggMiEx, & & this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz,Ex,Ey,Ez,Hx,Hy,Hz,& - & this%control%layoutnumber,this%control%size, this%control%verbose); + & this%control%layoutnumber,this%control%num_procs, this%control%verbose); l_auxinput=input_conformal_flag l_auxoutput=l_auxinput #ifdef CompileWithMPI @@ -1468,7 +1461,7 @@ subroutine initializePlanewave() call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init Multi Plane-Waves...'; call print11(this%control%layoutnumber,dubuf) - call InitPlaneWave (this%sgg,this%media,this%control%layoutnumber,this%control%size,this%sinPML_fullsize,this%thereAre%PlaneWaveBoxes,this%control%resume,this%eps0,this%mu0) + call InitPlaneWave (this%sgg,this%media,this%control%layoutnumber,this%control%num_procs,this%sinPML_fullsize,this%thereAre%PlaneWaveBoxes,this%control%resume,this%eps0,this%mu0) l_auxinput=this%thereAre%PlaneWaveBoxes l_auxoutput=l_auxinput #ifdef CompileWithMPI @@ -1541,16 +1534,16 @@ end subroutine initializeObservation subroutine initializeMPI() character(len=bufsize) :: dubuf integer(kind=4) :: ierr - if (this%control%size>1) then + if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) 'Init MPI MediaMatrix flush...'; call print11(this%control%layoutnumber,dubuf) call InitMPI(this%sgg%sweep,this%sgg%alloc) call MPI_Barrier(SUBCOMM_MPI,ierr) call InitExtraFlushMPI(this %control%layoutnumber,this%sgg%sweep,this%sgg%alloc,this%sgg%med,this%sgg%nummedia,this%media%sggMiEz,this%media%sggMiHz) call MPI_Barrier(SUBCOMM_MPI,ierr) - call FlushMPI_H(this%sgg%alloc,this%control%layoutnumber,this%control%size, this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz) + call FlushMPI_H(this%sgg%alloc,this%control%layoutnumber,this%control%num_procs, this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz) call MPI_Barrier(SUBCOMM_MPI,ierr) - call FlushMPI_E(this%sgg%alloc,this%control%layoutnumber,this%control%size, this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz) + call FlushMPI_E(this%sgg%alloc,this%control%layoutnumber,this%control%num_procs, this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) endif @@ -1558,9 +1551,9 @@ subroutine initializeMPI() !!!!!!!!!!!!!!!!!!!!!fin juego con fuego 210815 !MPI initialization - if (this%control%size>1) then + if (this%control%num_procs>1) then write(dubuf,*) 'Init MPI Cray...'; call print11(this%control%layoutnumber,dubuf) - call InitMPI_Cray(this%control%layoutnumber,this%control%size,this%sgg%sweep,this%sgg%alloc, & + call InitMPI_Cray(this%control%layoutnumber,this%control%num_procs,this%sgg%sweep,this%sgg%alloc, & this%sgg%Border%IsDownPeriodic,this%sgg%Border%IsUpPeriodic, & Ex,Ey,Ez,Hx,Hy,Hz) call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -1572,7 +1565,7 @@ subroutine initializeMPI() (trim(adjustl(this%control%wiresflavor))=='transition') .or. & this%control%use_mtln_wires) then write(dubuf,*) 'Init MPI Holland Wires...'; call print11(this%control%layoutnumber,dubuf) - call newInitWiresMPI(this%control%layoutnumber,this%thereAre%wires,this%control%size,this%control%resume,this%sgg%sweep) + call newInitWiresMPI(this%control%layoutnumber,this%thereAre%wires,this%control%num_procs,this%control%resume,this%sgg%sweep) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) endif @@ -1580,7 +1573,7 @@ subroutine initializeMPI() #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then write(dubuf,*) 'Init MPI Multi-Wires...'; call print11(this%control%layoutnumber,dubuf) - call InitWiresMPI_Berenger(this%control%layoutnumber,this%thereAre%wires,this%control%size,this%control%resume,this%sgg%sweep) + call InitWiresMPI_Berenger(this%control%layoutnumber,this%thereAre%wires,this%control%num_procs,this%control%resume,this%sgg%sweep) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) endif @@ -1597,12 +1590,12 @@ subroutine initializeMPI() !must be called now in case the MPI has changed the connectivity info if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then - call ReportWireJunctions(this%control%layoutnumber,this%control%size,this%thereAre%wires,this%sgg%Sweep(iHz)%ZI, this%sgg%Sweep(iHz)%ZE,this%control%groundwires,this%control%strictOLD,this%control%verbose) + call ReportWireJunctions(this%control%layoutnumber,this%control%num_procs,this%thereAre%wires,this%sgg%Sweep(iHz)%ZI, this%sgg%Sweep(iHz)%ZE,this%control%groundwires,this%control%strictOLD,this%control%verbose) endif #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then - call ReportWireJunctionsBerenger(this%control%layoutnumber,this%control%size,this%thereAre%wires,this%sgg%Sweep(iHz)%ZI, this%sgg%Sweep(iHz)%ZE,this%control%groundwires,this%control%strictOLD,this%control%verbose) + call ReportWireJunctionsBerenger(this%control%layoutnumber,this%control%num_procs,this%thereAre%wires,this%sgg%Sweep(iHz)%ZI, this%sgg%Sweep(iHz)%ZE,this%control%groundwires,this%control%strictOLD,this%control%verbose) !dama no tenia el equivalente 050416 endif #endif @@ -1620,25 +1613,25 @@ subroutine flushMPIdata() integer(kind=4) :: ierr call MPI_Barrier(SUBCOMM_MPI,ierr) !!Flush all the MPI data (needed a initial flush for correct resuming) - if (this%control%size>1) then + if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_H_Cray endif if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then - if ((this%control%size>1).and.(this%thereAre%wires)) then - call newFlushWiresMPI(this%control%layoutnumber,this%control%size) + if ((this%control%num_procs>1).and.(this%thereAre%wires)) then + call newFlushWiresMPI(this%control%layoutnumber,this%control%num_procs) endif #ifdef CompileWithStochastic if (this%control%stochastic) then - call syncstoch_mpi_wires(this%control%simu_devia,this%control%layoutnumber,this%control%size) + call syncstoch_mpi_wires(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) endif #endif endif #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then - if ((this%control%size>1).and.(this%thereAre%wires)) call FlushWiresMPI_Berenger(this%control%layoutnumber,this%control%size) + if ((this%control%num_procs>1).and.(this%thereAre%wires)) call FlushWiresMPI_Berenger(this%control%layoutnumber,this%control%num_procs) endif #endif end subroutine flushMPIdata @@ -1678,7 +1671,7 @@ end subroutine printSimulationStart subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sggMtag, b, tag_numbers) !------------------------> - type (SGGFDTDINFO), intent(IN) :: sgg + type (SGGFDTDINFO_t), intent(IN) :: sgg type (bounds_t), intent( IN) :: b INTEGER(KIND = IKINDMTAG), dimension ( 0 : b%sggMiHx%NX-1 , 0 : b%sggMiHy%NY-1 , 0 : b%sggMiHz%NZ-1 ) , intent( INOUT) :: sggMtag integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiHx%NX-1 , 0 : b%sggMiHx%NY-1 , 0 : b%sggMiHx%NZ-1 ) , intent( IN ) :: sggMiHx @@ -1771,7 +1764,7 @@ end subroutine fillMtag subroutine crea_timevector(sgg,lastexecutedtimestep,finaltimestep,lastexecutedtime) integer (kind=4) :: lastexecutedtimestep,finaltimestep,i real (kind=RKIND_tiempo) :: lastexecutedtime - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg allocate (sgg%tiempo(lastexecutedtimestep:finaltimestep+2)) sgg%tiempo(lastexecutedtimestep)=lastexecutedtime do i=lastexecutedtimestep+1,finaltimestep+2 @@ -1831,7 +1824,7 @@ subroutine solver_run(this) #endif if (call_timing) then - call Timing(this%sgg,this%bounds,this%n,this%n_info,this%control%layoutnumber,this%control%size, this%control%maxCPUtime,this%control%flushsecondsFields,this%control%flushsecondsData,this%initialtimestep, & + call Timing(this%sgg,this%bounds,this%n,this%n_info,this%control%layoutnumber,this%control%num_procs, this%control%maxCPUtime,this%control%flushsecondsFields,this%control%flushsecondsData,this%initialtimestep, & this%control%finaltimestep,this%perform,this%parar,.FALSE., & Ex,Ey,Ez,this%everflushed,this%control%nentradaroot,this%control%maxSourceValue,this%control%opcionestotales,this%control%simu_devia,this%control%dontwritevtk,this%control%permitscaling) @@ -1865,7 +1858,7 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) 'INIT FLUSHING OF RESTARTING FIELDS n=',this%n call print11(this%control%layoutnumber,dubuf) - call flush_and_save_resume(this%sgg, this%bounds, this%control%layoutnumber, this%control%size, this%control%nentradaroot, this%control%nresumeable2, this%thereare, this%n,this%eps0,this%mu0, this%everflushed, & + call flush_and_save_resume(this%sgg, this%bounds, this%control%layoutnumber, this%control%num_procs, this%control%nentradaroot, this%control%nresumeable2, this%thereare, this%n,this%eps0,this%mu0, this%everflushed, & Ex, Ey, Ez, Hx, Hy, Hz,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic) #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -1889,7 +1882,7 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) !! - if (this%thereAre%Observation) call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%size, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,flushFF) + if (this%thereAre%Observation) call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,flushFF) !! #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -1910,7 +1903,7 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) somethingdone=.false. at=this%n*this%sgg%dt - if (this%thereAre%Observation) call PostProcessOnthefly(this%control%layoutnumber,this%control%size,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) + if (this%thereAre%Observation) call PostProcessOnthefly(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) call MPI_AllReduce( somethingdone, newsomethingdone, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) @@ -1935,7 +1928,7 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) somethingdone=.false. - if (this%thereAre%Observation) call createvtkOnTheFly(this%control%layoutnumber,this%control%size,this%sgg,this%control%vtkindex,somethingdone,this%control%mpidir,this%media%sggMtag,this%control%dontwritevtk) + if (this%thereAre%Observation) call createvtkOnTheFly(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%vtkindex,somethingdone,this%control%mpidir,this%media%sggMtag,this%control%dontwritevtk) #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) call MPI_AllReduce( somethingdone, newsomethingdone, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) @@ -1960,8 +1953,8 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) somethingdone=.false. - if (this%thereAre%Observation) call createxdmfOnTheFly(this%sgg,this%control%layoutnumber,this%control%size,this%control%vtkindex,this%control%createh5bin,somethingdone,this%control%mpidir) - if (this%control%createh5bin) call createh5bintxt(this%sgg,this%control%layoutnumber,this%control%size) !lo deben llamar todos haya on on this%thereAre%observation + if (this%thereAre%Observation) call createxdmfOnTheFly(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%vtkindex,this%control%createh5bin,somethingdone,this%control%mpidir) + if (this%control%createh5bin) call createh5bintxt(this%sgg,this%control%layoutnumber,this%control%num_procs) !lo deben llamar todos haya on on this%thereAre%observation #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -2020,7 +2013,7 @@ subroutine solver_run(this) this%control%simu_devia, & this%EpsMuTimeScale_input_parameters,pscale_alpha,this%still_planewave_time & #ifdef CompileWithMPI - ,this%control%layoutnumber,this%control%size & + ,this%control%layoutnumber,this%control%num_procs & #endif ,this%control%stochastic,this%control%verbose) #ifndef miguelPscaleStandAlone @@ -2042,7 +2035,7 @@ subroutine updateAndFlush() call UpdateObservation(this%sgg,this%media,this%tag_numbers, this%n,this%ini_save, Ex, Ey, Ez, Hx, Hy, Hz, dxe, dye, dze, dxh, dyh, dzh,this%control%wiresflavor,this%sinPML_fullsize,this%control%wirecrank, this%control%noconformalmapvtk,this%bounds) if (this%n>=this%ini_save+BuffObse) then mindum=min(this%control%finaltimestep,this%ini_save+BuffObse) - call FlushObservationFiles(this%sgg,this%ini_save,mindum,this%control%layoutnumber,this%control%size, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.FALSE.) !no se flushean los farfields ahora + call FlushObservationFiles(this%sgg,this%ini_save,mindum,this%control%layoutnumber,this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.FALSE.) !no se flushean los farfields ahora endif endif end subroutine @@ -2058,11 +2051,11 @@ subroutine singleUnpack() write(dubuf,'(a,i9)') ' Unpacking .bin files and prostprocessing them at n= ',this%n call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - if (this%thereAre%Observation) call unpacksinglefiles(this%sgg,this%control%layoutnumber,this%control%size,this%control%singlefilewrite,this%initialtimestep,this%control%resume) !dump the remaining to disk + if (this%thereAre%Observation) call unpacksinglefiles(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%singlefilewrite,this%initialtimestep,this%control%resume) !dump the remaining to disk somethingdone=.false. if (this%control%singlefilewrite.and.this%perform%Unpack) then at=this%n*this%sgg%dt - if (this%thereAre%Observation) call PostProcessOnthefly(this%control%layoutnumber,this%control%size,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) + if (this%thereAre%Observation) call PostProcessOnthefly(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) endif #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -2111,7 +2104,7 @@ subroutine step(this) call this%advanceNodalE() #ifdef CompileWithMPI - if (this%control%size>1) then + if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_E_Cray endif @@ -2151,20 +2144,20 @@ subroutine step(this) !lo he movido aqui a 16/10/2012 porque el farfield necesita tener los campos magneticos correctos !e intuyo que el Bloque current tambien a tenor del comentario siguiente !Incluyo un flush inicial antes de entrar al bucle para que el resuming sea correcto - if (this%control%size>1) then + if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_H_Cray endif if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then - if ((this%control%size>1).and.(this%thereAre%wires)) call newFlushWiresMPI(this%control%layoutnumber,this%control%size) + if ((this%control%num_procs>1).and.(this%thereAre%wires)) call newFlushWiresMPI(this%control%layoutnumber,this%control%num_procs) #ifdef CompileWithStochastic - if (this%control%stochastic) call syncstoch_mpi_wires(this%control%simu_devia,this%control%layoutnumber,this%control%size) + if (this%control%stochastic) call syncstoch_mpi_wires(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) #endif endif #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then - if ((this%control%size>1).and.(this%thereAre%wires)) call FlushWiresMPI_Berenger(this%control%layoutnumber,this%control%size) + if ((this%control%num_procs>1).and.(this%thereAre%wires)) call FlushWiresMPI_Berenger(this%control%layoutnumber,this%control%num_procs) endif #endif #endif @@ -2172,13 +2165,13 @@ subroutine step(this) !!!no se si el orden wires - sgbcs del sync importa 150519 #ifdef CompileWithMPI #ifdef CompileWithStochastic - if (this%control%stochastic) call syncstoch_mpi_sgbcs(this%control%simu_devia,this%control%layoutnumber,this%control%size) + if (this%control%stochastic) call syncstoch_mpi_sgbcs(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) #endif #endif #ifdef CompileWithMPI #ifdef CompileWithStochastic - if (this%control%stochastic) call syncstoch_mpi_lumped(this%control%simu_devia,this%control%layoutnumber,this%control%size) + if (this%control%stochastic) call syncstoch_mpi_lumped(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) #endif #endif call this%advanceMagneticMUR() @@ -2193,7 +2186,7 @@ subroutine flushPlanewaveOff(pw_switched_off, pw_still_time, pw_thereAre) pw_still_time = pw_still_time.and.this%thereAre%PlaneWaveBoxes pw_thereAre = this%thereAre%PlaneWaveBoxes #ifdef CompileWithMPI - if (this%control%size>1) then + if (this%control%num_procs>1) then pw_still_time_aux = pw_still_time call MPI_AllReduce(pw_still_time_aux, pw_still_time, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) pw_thereAre_aux = pw_thereAre @@ -2227,7 +2220,7 @@ subroutine init_MPIConformalProbes(this) SUBCOMM_MPI_conformal_probes=0 MPI_conformal_probes_root=-1 endif - call MPIinitSubcomm(this%control%layoutnumber,this%control%size,SUBCOMM_MPI_conformal_probes,& + call MPIinitSubcomm(this%control%layoutnumber,this%control%num_procs,SUBCOMM_MPI_conformal_probes,& MPI_conformal_probes_root,group_conformalprobes_dummy) ! print *,'-----creating--->',this%control%layoutnumber,SIZE,SUBCOMM_MPI_conformal_probes,MPI_conformal_probes_root call MPI_BARRIER(SUBCOMM_MPI, ierr) @@ -2534,15 +2527,15 @@ subroutine advanceHz(this, sggMiHz) return end subroutine advanceHz - subroutine solver_advanceConformalE(this) - class(solver_t) :: this - if (this%thereAre%conformals) call advanceConformalE(this%sgg) - end subroutine solver_advanceConformalE - - subroutine solver_advanceConformalH(this) - class(solver_t) :: this - if (this%thereAre%conformals) call advanceConformalH(this%sgg) - end subroutine solver_advanceConformalH + subroutine solver_advanceConformalE(this) + class(solver_t) :: this + ! Conformal time stepping is still WIP; no implementation is linked. + end subroutine solver_advanceConformalE + + subroutine solver_advanceConformalH(this) + class(solver_t) :: this + ! Conformal time stepping is still WIP; no implementation is linked. + end subroutine solver_advanceConformalH subroutine solver_advanceEDispersiveE(this) @@ -2635,13 +2628,13 @@ subroutine solver_advanceMagneticCPML(this) subroutine solver_MinusCloneMagneticPMC(this) class(solver_t) :: this If (this%thereAre%PMCBorders) call MinusCloneMagneticPMC(this%sgg%alloc,this%sgg%border,this%Hx,this%Hy,this%Hz,this%sgg%sweep, & - this%control%layoutnumber,this%control%size) + this%control%layoutnumber,this%control%num_procs) end subroutine subroutine solver_CloneMagneticPeriodic(this) class(solver_t) :: this If (this%thereAre%PeriodicBorders) call CloneMagneticPeriodic(this%sgg%alloc,this%sgg%border,this%Hx,this%Hy,this%Hz,this%sgg%sweep,& - this%control%layoutnumber,this%control%size) + this%control%layoutnumber,this%control%num_procs) end subroutine @@ -2738,7 +2731,7 @@ subroutine solver_advanceMagneticMUR(this) this%control%mur_second) #ifdef CompileWithMPI if (this%control%mur_second) then - if (this%control%size>1) then + if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_H_Cray endif @@ -2780,7 +2773,7 @@ subroutine solver_end(this) this%control%finaltimestep = this%n this%lastexecutedtime=this%sgg%tiempo(this%control%finaltimestep) !se llama con dummylog para no perder los flags de parada - call Timing(this%sgg,this%bounds,this%n,ndummy,this%control%layoutnumber, this%control%size, & + call Timing(this%sgg,this%bounds,this%n,ndummy,this%control%layoutnumber, this%control%num_procs, & this%control%maxCPUtime,this%control%flushsecondsFields, this%control%flushsecondsData, & this%initialtimestep, this%control%finaltimestep,this%d_perform,dummylog,.FALSE., & Ex,Ey,Ez,this%everflushed,this%control%nentradaroot,this%control%maxSourceValue, & @@ -2792,7 +2785,7 @@ subroutine solver_end(this) if ((this%control%flushsecondsFields/=0).or.this%perform%flushFIELDS) then write(dubuf,'(a,i9)') ' INIT FINAL FLUSHING OF RESTARTING FIELDS n= ',this%n call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - call flush_and_save_resume(this%sgg, this%bounds, this%control%layoutnumber, this%control%size, this%control%nentradaroot, this%control%nresumeable2, this%thereare, this%n,this%eps0,this%mu0, this%everflushed, & + call flush_and_save_resume(this%sgg, this%bounds, this%control%layoutnumber, this%control%num_procs, this%control%nentradaroot, this%control%nresumeable2, this%thereare, this%n,this%eps0,this%mu0, this%everflushed, & Ex, Ey, Ez, Hx, Hy, Hz,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic) write(dubuf,'(a,i9)') ' DONE FINAL FLUSHING OF RESTARTING FIELDS N=',this%n call print11(this%control%layoutnumber,SEPARADOR//separador//separador) @@ -2809,8 +2802,8 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) if (this%thereAre%Observation) THEN - call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%size, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.TRUE.) - call CloseObservationFiles(this%sgg,this%control%layoutnumber,this%control%size,this%control%singlefilewrite,this%initialtimestep,this%lastexecutedtime,this%control%resume) !dump the remaining to disk + call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.TRUE.) + call CloseObservationFiles(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%singlefilewrite,this%initialtimestep,this%lastexecutedtime,this%control%resume) !dump the remaining to disk #ifdef CompileWithMTLN if (this%control%use_mtln_wires) then call FlushMTLNObservationFiles(this%control%nentradaroot, mtlnProblem = .false.) @@ -2837,7 +2830,7 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) somethingdone=.false. at=this%n*this%sgg%dt - if (this%thereAre%Observation) call PostProcess(this%control%layoutnumber,this%control%size,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) + if (this%thereAre%Observation) call PostProcess(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) call MPI_AllReduce(somethingdone, newsomethingdone, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) @@ -2862,7 +2855,7 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) somethingdone=.false. - if (this%thereAre%Observation) call createvtk(this%control%layoutnumber,this%control%size,this%sgg,this%control%vtkindex,somethingdone,this%control%mpidir,this%media%sggMtag,this%control%dontwritevtk) + if (this%thereAre%Observation) call createvtk(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%vtkindex,somethingdone,this%control%mpidir,this%media%sggMtag,this%control%dontwritevtk) #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -2886,8 +2879,8 @@ subroutine solver_end(this) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) somethingdone=.false. - if (this%thereAre%Observation) call createxdmf(this%sgg,this%control%layoutnumber,this%control%size,this%control%vtkindex,this%control%createh5bin,somethingdone,this%control%mpidir) - if (this%control%createh5bin) call createh5bintxt(this%sgg,this%control%layoutnumber,this%control%size) !lo deben llamar todos haya o no this%thereAre%observation + if (this%thereAre%Observation) call createxdmf(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%vtkindex,this%control%createh5bin,somethingdone,this%control%mpidir) + if (this%control%createh5bin) call createh5bintxt(this%sgg,this%control%layoutnumber,this%control%num_procs) !lo deben llamar todos haya o no this%thereAre%observation ! call create_interpreted_mesh(sgg) #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -2910,7 +2903,7 @@ subroutine solver_end(this) call MPI_Barrier(SUBCOMM_MPI,ierr) #endif call Timing(this%sgg,this%bounds,this%n,ndummy,this%control%layoutnumber, & - this%control%size, this%control%maxCPUtime,this%control%flushsecondsFields, & + this%control%num_procs, this%control%maxCPUtime,this%control%flushsecondsFields, & this%control%flushsecondsData,this%initialtimestep, & this%control%finaltimestep,this%perform,this%parar,.FALSE., & Ex,Ey,Ez,this%everflushed,this%control%nentradaroot,this%control%maxSourceValue,this%control%opcionestotales, & @@ -2925,8 +2918,8 @@ subroutine solver_end(this) !las sggmixx se desctruyen el en main pq se alocatean alli subroutine Destroy_All_exceptSGGMxx(sgg,Ex, Ey, Ez, Hx, Hy, Hz,G1,G2,GM1,GM2,dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh,thereare,wiresflavor ) character (len=*) , intent(in) :: wiresflavor - type (Logic_control), intent(IN) :: thereare - type (SGGFDTDINFO), intent(INOUT) :: sgg + type (logic_control_t), intent(IN) :: thereare + type (SGGFDTDINFO_t), intent(INOUT) :: sgg REAL (KIND=RKIND), intent(INOUT) , pointer, dimension ( : , : , : ) :: Ex,Ey,Ez,Hx,Hy,Hz REAL (KIND=RKIND), intent(INOUT) , pointer, dimension ( : ) :: G1,G2,GM1,GM2,dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh From aba41e20b2f7b180aa9bf2577afa133f3306e738 Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Mon, 10 Aug 2026 19:01:15 +0200 Subject: [PATCH 19/35] Reworking conformal thin surface. --- pytest.ini | 4 +++- src_json_parser/parser_tools.F90 | 3 +++ src_json_parser/smbjson.F90 | 3 +++ src_main_pub/fdetypes.F90 | 10 ++++++---- src_main_pub/nfde_types.F90 | 2 +- src_main_pub/preprocess_geom.F90 | 9 ++++++--- test/pyWrapper/test_full_system.py | 8 +++++++- test/pyWrapper/test_integration.py | 17 +++++++++++++---- test/pyWrapper/utils.py | 11 ++++------- .../cases/conformal/conformal_corner.fdtd.json | 4 ++-- .../conformal_fL_0.15_sphere_rcs.fdtd.json | 4 ++-- .../conformal/conformal_fL_sphere_rcs.fdtd.json | 4 ++-- .../conformal_sphere_1mm_rcs_delta.fdtd.json | 4 ++-- .../conformal/conformal_sphere_30.fdtd.json | 4 ++-- .../conformal/conformal_sphere_rcs.fdtd.json | 4 ++-- .../conformal/slanted_sphere_rcs.fdtd.json | 4 ++-- ...ormal_impedance_cylinder_conformal.fdtd.json | 4 ++-- 17 files changed, 62 insertions(+), 37 deletions(-) diff --git a/pytest.ini b/pytest.ini index aa3437ffc..4823a658c 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,4 +1,6 @@ [pytest] +testpaths = test +pythonpath = . markers = mtln: tests which use mtln features. codemodel: test that need xspice codemodels. @@ -18,4 +20,4 @@ markers = spice: tests for SPICE coupling (diodes, opamps, zeners) farfield: tests for near-to-far field transformation movie: tests for movie probes (time-resolved field snapshots) - vtk: tests for VTK output \ No newline at end of file + vtk: tests for VTK output diff --git a/src_json_parser/parser_tools.F90 b/src_json_parser/parser_tools.F90 index 9145296e9..473de6203 100644 --- a/src_json_parser/parser_tools.F90 +++ b/src_json_parser/parser_tools.F90 @@ -6,6 +6,9 @@ module parser_tools_m use json_module use json_kinds use NFDETypes_m +#ifdef CompileWithMTLN + use mtln_types_m, only: terminal_node_t +#endif use, intrinsic :: iso_fortran_env , only: error_unit diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 2a0750a24..cf4dccc73 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -2,6 +2,9 @@ module smbjson_m #ifdef CompileWithSMBJSON use NFDETypes_m +#ifdef CompileWithMTLN + use mtln_types_m +#endif use NFDETypes_extension_m use smbjson_labels_m diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index e76cdec44..a886241b2 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -191,10 +191,12 @@ module FDETYPES_m real (KIND=RKIND), PARAMETER :: EPSILON_VACUUM = & 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12 - real (KIND=RKIND), PARAMETER :: MU_VACUUM = & - 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 - - + real (KIND=RKIND), PARAMETER :: MU_VACUUM = & + 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 + real (KIND=RKIND), PARAMETER :: C_VACUUM = 1.0_RKIND / & + sqrt(EPSILON_VACUUM * MU_VACUUM) + + REAL (KIND=RKIND_tiempo) :: dt0 !aqui para OLDrlo accesible en resume pscale integer(kind=4), parameter :: FACE_X = 1 diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index 99f483346..35be186a6 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -2,7 +2,7 @@ MODULE NFDETypes_m ! USE FDETYPES_m #ifdef CompileWithMTLN - USE mtln_types_mod + USE mtln_types_m, ONLY: mtln_t #endif USE conformal_types_m ! diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index deef3529b..37b824c92 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -198,7 +198,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - sgg%NumMedia = contamedia + sgg%NumMedia = contamedia sgg%AllocMed = contamedia !reserva espacio ALLOCATE (sgg%Med(0:sgg%NumMedia)) @@ -4674,8 +4674,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN endif MEDIOEXTRA%index=CONTAMEDIA endif - !!!!!!!!!!!!! - sgg%NumMedia = contamedia + !!!!!!!!!!!!! + if (contamedia > sgg%AllocMed) then + call Readjust(sgg%AllocMed, sgg%Med, contamedia) + end if + sgg%NumMedia = contamedia !el medio 0 no precisa compresion diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index a4ff5f999..909ebc070 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1582,6 +1582,12 @@ def test_conformal_delay(tmp_path): tdelta = t4 + 2*(i*1.0/n)*0.02/3e8 assert np.abs(delay - tdelta)/tdelta < 0.01 +@pytest.mark.conformal +@pytest.mark.xfail( + run=False, + strict=True, + reason="The conformal thin-strip fixture is a placeholder with no surface triangles or impedance reference.", +) def test_conformal_thin_strip_resistance(tmp_path): fn = CASES_FOLDER + 'conformal_thin_strip/conformal_thin_strip.fdtd.json' solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, @@ -1794,4 +1800,4 @@ def get_probe_file(solver, probe_name): assert corr_yplus > 0.999 assert corr_yminus > 0.999 assert corr_j1 > 0.999 - assert corr_j2 > 0.999 \ No newline at end of file + assert corr_j2 > 0.999 diff --git a/test/pyWrapper/test_integration.py b/test/pyWrapper/test_integration.py index 411ba3c70..e08e67cde 100644 --- a/test/pyWrapper/test_integration.py +++ b/test/pyWrapper/test_integration.py @@ -171,8 +171,10 @@ def test_fill_conformal_vtk_sphere(tmp_path): face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') - assert line_media_dict[0.5] == 12 # PEC line - assert line_media_dict[2004] == 24 # Conformal line + assert line_media_dict + assert face_media_dict + assert line_media_dict[12] == 12 # PEC line + assert line_media_dict[13] == 24 # Conformal line assert face_media_dict[0] == 6 # PEC surface assert face_media_dict[1005] == 24 # Conformal PEC surface @@ -194,11 +196,13 @@ def test_fill_conformal_fL_0_005_vtk_large_sphere(tmp_path): line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') + assert line_media_dict assert -0.5 not in line_media_dict.keys() face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') + assert face_media_dict assert -1 not in face_media_dict.keys() @pytest.mark.conformal @@ -217,11 +221,13 @@ def test_fill_conformal_fL_0_15_vtk_large_sphere(tmp_path): line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') + assert line_media_dict assert -0.5 not in line_media_dict.keys() face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') + assert face_media_dict assert -1 not in face_media_dict.keys() @pytest.mark.conformal @@ -240,11 +246,13 @@ def test_fill_slanted_vtk_large_sphere(tmp_path): line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') + assert line_media_dict assert -0.5 not in line_media_dict.keys() face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') + assert face_media_dict assert -1 not in face_media_dict.keys() @@ -276,14 +284,15 @@ def test_fill_conformal_vtk_corner(tmp_path): face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') + assert face_media_dict assert(0 not in face_media_dict.keys()) assert face_media_dict[1005] == 2 # Conformal PEC surface #1 assert face_media_dict[1006] == 2 # Conformal PEC surface #2 line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') - assert line_media_dict[0.5] == 1 # PEC line - assert line_media_dict[2004] == 4 # Conformal line #1 + assert line_media_dict + assert line_media_dict[13] == 5 # Conformal line #1 @pytest.mark.probes @pytest.mark.movie diff --git a/test/pyWrapper/utils.py b/test/pyWrapper/utils.py index 5b2612cf9..e57befa62 100644 --- a/test/pyWrapper/utils.py +++ b/test/pyWrapper/utils.py @@ -128,14 +128,11 @@ def createUnshieldedWire(id, lpul, cpul, rpul=0.0, gpul=0.0): def createPropertyDictionary(vtkfile, celltype: int, property: str): ugrid = pv.UnstructuredGrid(vtkfile) - objs = np.argwhere(ugrid.celltypes == celltype) # [i][0] - if len(objs) == 0: + cell_mask = ugrid.celltypes == celltype + if not np.any(cell_mask): return dict() - props = np.array([]) - prop_array = ugrid.cell_data[property] - for i in range(objs[0][0], objs[-1][0]+1): - props = np.append(props, prop_array[i]) + props = np.asarray(ugrid.cell_data[property])[cell_mask] unique, counts = np.unique(props, return_counts=True) return dict(zip(unique, counts)) @@ -212,4 +209,4 @@ def corrcoef_on_common_time(t_ref, y_ref, t_cmp, y_cmp): t_common = t_ref[mask] y_ref_common = y_ref[mask] y_cmp_interp = np.interp(t_common, t_cmp, y_cmp) - return np.corrcoef(y_ref_common, y_cmp_interp)[0, 1] \ No newline at end of file + return np.corrcoef(y_ref_common, y_cmp_interp)[0, 1] diff --git a/testData/cases/conformal/conformal_corner.fdtd.json b/testData/cases/conformal/conformal_corner.fdtd.json index 46b15d655..d777e7c12 100644 --- a/testData/cases/conformal/conformal_corner.fdtd.json +++ b/testData/cases/conformal/conformal_corner.fdtd.json @@ -46,7 +46,7 @@ "elements": [ { "id": 1, - "type": "cell", + "type": "conformal", "subtype" : "volume", "intervals" : [], "triangles": [ @@ -84,4 +84,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json b/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json index c31f9b8e1..a13b622bf 100644 --- a/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json @@ -35,7 +35,7 @@ "elements": [ { "id": 1, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals": [], "triangles": [ @@ -32216,4 +32216,4 @@ } } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json b/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json index 8822f1378..7faa42671 100644 --- a/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json @@ -35,7 +35,7 @@ "elements": [ { "id": 1, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals": [], "triangles": [ @@ -32648,4 +32648,4 @@ } } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json b/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json index c0ab213a0..969613c2d 100644 --- a/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json +++ b/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json @@ -56,7 +56,7 @@ }, { "id": 3, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals" : [], "triangles": [ @@ -208,4 +208,4 @@ } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/conformal_sphere_30.fdtd.json b/testData/cases/conformal/conformal_sphere_30.fdtd.json index da699405e..b7cf519a5 100644 --- a/testData/cases/conformal/conformal_sphere_30.fdtd.json +++ b/testData/cases/conformal/conformal_sphere_30.fdtd.json @@ -70,7 +70,7 @@ }, { "id": 3, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals": [], "triangles": [ @@ -18153,4 +18153,4 @@ } } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/conformal_sphere_rcs.fdtd.json b/testData/cases/conformal/conformal_sphere_rcs.fdtd.json index 511e95092..9c2e0c858 100644 --- a/testData/cases/conformal/conformal_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/conformal_sphere_rcs.fdtd.json @@ -35,7 +35,7 @@ "elements": [ { "id": 1, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals": [], "triangles": [ @@ -18608,4 +18608,4 @@ } } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/slanted_sphere_rcs.fdtd.json b/testData/cases/conformal/slanted_sphere_rcs.fdtd.json index 67a18502e..f016b33c9 100644 --- a/testData/cases/conformal/slanted_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/slanted_sphere_rcs.fdtd.json @@ -35,7 +35,7 @@ "elements": [ { "id": 1, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals": [], "triangles": [ @@ -18608,4 +18608,4 @@ } } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json index 57f61cc96..80d83cde5 100755 --- a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json +++ b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json @@ -4609,7 +4609,7 @@ "elements": [ { "id": 1, - "type": "cell", + "type": "conformal", "subtype": "volume", "intervals": [ [ @@ -10779,4 +10779,4 @@ } } ] -} \ No newline at end of file +} From dbb04f16e69e688ba4b45d8a98fcc10243a61379 Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Tue, 11 Aug 2026 12:36:08 +0200 Subject: [PATCH 20/35] Adds conformal surface treatment --- src_conformal/conformal.F90 | 417 +++++++++++++++++- src_json_parser/smbjson.F90 | 22 + src_main_pub/preprocess_geom.F90 | 92 ++-- src_main_pub/timestepping.F90 | 245 +++++++++- test/CMakeLists.txt | 6 +- test/borders/CMakeLists.txt | 19 + test/borders/border_tests.cpp | 1 + test/borders/border_tests.h | 17 + test/borders/test_periodic.F90 | 134 ++++++ test/conformal/conformal_tests.h | 4 + test/conformal/test_filling.F90 | 63 +++ test/conformal/test_geometry.F90 | 90 +++- test/fdtd_tests.cpp | 1 + test/pyWrapper/test_full_system.py | 160 ++++++- test/pyWrapper/test_integration.py | 55 +++ test/smbjson/test_parser.F90 | 7 +- .../conformal_surface_midcell.fdtd.json | 72 +++ testData/cases/conformal_surface/gauss.exc | 19 + .../planewave/pw-with-periodic.fdtd.json | 18 +- testData/input_examples/conformal.fdtd.json | 4 +- 20 files changed, 1380 insertions(+), 66 deletions(-) create mode 100644 test/borders/CMakeLists.txt create mode 100644 test/borders/border_tests.cpp create mode 100644 test/borders/border_tests.h create mode 100644 test/borders/test_periodic.F90 create mode 100644 testData/cases/conformal_surface/conformal_surface_midcell.fdtd.json create mode 100644 testData/cases/conformal_surface/gauss.exc diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index 09851aa84..738659098 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -11,13 +11,13 @@ module conformal_m contains - function buildSideMaps(regions) result(res) - type(ConformalPECRegions_t), intent(in) :: regions + function buildSideMaps(elements) result(res) + type(ConformalPECElements_t), dimension(:), pointer, intent(in) :: elements type(side_tris_map_t), dimension(:), allocatable :: res integer :: i - allocate(res(size(regions%volumes))) - do i = 1, size(regions%volumes) - call buildSideMap(res(i),regions%volumes(i)%triangles) + allocate(res(size(elements))) + do i = 1, size(elements) + call buildSideMap(res(i), elements(i)%triangles) end do end function @@ -30,12 +30,417 @@ subroutine buildConformalMedia(conformalRegs, volumes, surfaces) allocate(volumes(0)) end if if (associated(conformalRegs%surfaces)) then - surfaces = buildMedia(conformalRegs%surfaces) + surfaces = buildSurfaceMedia(conformalRegs%surfaces) else allocate(surfaces(0)) end if end subroutine + function buildSurfaceMedia(elements) result(res) + type(ConformalPECElements_t), dimension(:), pointer, intent(in) :: elements + type(ConformalPECElements_t) :: canonical_element + type(ConformalMedia_t), dimension(:), allocatable :: res + integer :: i + + allocate(res(size(elements))) + do i = 1, size(elements) + canonical_element = canonicalClosedSurfaceOrientation(elements(i)) + res(i) = buildMediaFromElement(canonical_element) + end do + end function buildSurfaceMedia + + subroutine validateConformalSurface(element, is_valid, message) + type(ConformalPECElements_t), intent(in) :: element + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + + call validateConformalRegion(element, .false., is_valid, message) + end subroutine validateConformalSurface + + subroutine validateConformalVolume(element, is_valid, message) + type(ConformalPECElements_t), intent(in) :: element + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + + call validateConformalRegion(element, .true., is_valid, message) + end subroutine validateConformalVolume + + subroutine validateConformalRegion(element, require_closed, is_valid, message) + type(ConformalPECElements_t), intent(in) :: element + logical, intent(in) :: require_closed + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + type(cell_map_t) :: cell_map + type(side_t), dimension(:), allocatable :: sides, sides_on_face + integer(kind=4), dimension(3) :: cell + integer :: i, face + character(len=160) :: detail + + is_valid = .true. + message = '' + call validateSurfaceTopology(element%triangles, is_valid, message) + if (.not. is_valid) return + if (require_closed) then + call validateClosedSurfaceTopology(element%triangles, is_valid, message) + if (.not. is_valid) return + end if + + call buildCellMap(cell_map, element) + do i = 1, size(cell_map%keys) + cell = cell_map%keys(i)%cell + sides = cell_map%getSidesInCell(cell) + do face = FACE_X, FACE_Z + sides_on_face = getSidesOnFace(sides, face) + if (size(sides_on_face) > 0) then + call validateSurfaceFaceContour(sides_on_face, face, is_valid, detail) + if (.not. is_valid) then + call setCellFaceValidationError(trim(detail), cell, face, is_valid, message) + return + end if + end if + end do + end do + end subroutine validateConformalRegion + + function canonicalClosedSurfaceOrientation(element) result(res) + type(ConformalPECElements_t), intent(in) :: element + type(ConformalPECElements_t) :: res + integer, dimension(:), allocatable :: component + integer :: component_id, triangle_index + real :: signed_volume, volume_scale, volume_tolerance + real, dimension(3) :: min_position, max_position, extent + + res = element + if (.not. allocated(res%triangles)) return + if (size(res%triangles) == 0) return + call assignTriangleComponents(res%triangles, component) + + do component_id = 1, maxval(component) + if (.not. isClosedComponent(res%triangles, component, component_id)) cycle + signed_volume = 0.0 + min_position = huge(1.0) + max_position = -huge(1.0) + do triangle_index = 1, size(res%triangles) + if (component(triangle_index) /= component_id) cycle + signed_volume = signed_volume + dot_product(res%triangles(triangle_index)%vertices(1)%position, & + cross(res%triangles(triangle_index)%vertices(2)%position, res%triangles(triangle_index)%vertices(3)%position))/6.0 + min_position = min(min_position, res%triangles(triangle_index)%vertices(1)%position) + min_position = min(min_position, res%triangles(triangle_index)%vertices(2)%position) + min_position = min(min_position, res%triangles(triangle_index)%vertices(3)%position) + max_position = max(max_position, res%triangles(triangle_index)%vertices(1)%position) + max_position = max(max_position, res%triangles(triangle_index)%vertices(2)%position) + max_position = max(max_position, res%triangles(triangle_index)%vertices(3)%position) + end do + extent = max_position - min_position + volume_scale = max(1.0, extent(1)*extent(2)*extent(3)) + volume_tolerance = 100.0*epsilon(1.0)*volume_scale + if (signed_volume < -volume_tolerance) then + do triangle_index = 1, size(res%triangles) + if (component(triangle_index) == component_id) call reverseTriangle(res%triangles(triangle_index)) + end do + end if + end do + end function canonicalClosedSurfaceOrientation + + subroutine validateSurfaceTopology(triangles, is_valid, message) + type(triangle_t), dimension(:), allocatable, intent(in) :: triangles + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + integer :: triangle_index, edge, other_triangle, other_edge + integer :: first_id, second_id, direction, other_first, other_second, other_direction, incidence + + is_valid = .true. + message = '' + do triangle_index = 1, size(triangles) + do edge = 1, 3 + call triangleEdge(triangles(triangle_index), edge, first_id, second_id, direction) + if (first_id == second_id) then + write(message, '(A,I0,A,I0)') 'triangle ', triangle_index, ' has a degenerate edge ', edge + is_valid = .false. + return + end if + incidence = 0 + do other_triangle = 1, size(triangles) + do other_edge = 1, 3 + call triangleEdge(triangles(other_triangle), other_edge, other_first, other_second, other_direction) + if (first_id == other_first .and. second_id == other_second) then + incidence = incidence + 1 + if (other_triangle /= triangle_index .and. direction == other_direction) then + write(message, '(A,I0,A,I0,A,I0,A,I0,A)') 'triangles ', triangle_index, ' and ', other_triangle, & + ' traverse shared edge ', first_id, '-', second_id, ' in the same direction' + is_valid = .false. + return + end if + end if + end do + end do + if (incidence > 2) then + write(message, '(A,I0,A,I0,A,I0)') 'non-manifold edge ', first_id, '-', second_id, ' has incidence ', incidence + is_valid = .false. + return + end if + end do + end do + end subroutine validateSurfaceTopology + + subroutine validateClosedSurfaceTopology(triangles, is_valid, message) + type(triangle_t), dimension(:), allocatable, intent(in) :: triangles + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + integer :: triangle_index, edge, other_triangle, other_edge, incidence + integer :: first_id, second_id, direction, other_first, other_second, other_direction + + is_valid = .true. + message = '' + if (size(triangles) == 0) then + message = 'volume has no triangles' + is_valid = .false. + return + end if + do triangle_index = 1, size(triangles) + do edge = 1, 3 + call triangleEdge(triangles(triangle_index), edge, first_id, second_id, direction) + incidence = 0 + do other_triangle = 1, size(triangles) + do other_edge = 1, 3 + call triangleEdge(triangles(other_triangle), other_edge, other_first, other_second, other_direction) + if (first_id == other_first .and. second_id == other_second) incidence = incidence + 1 + end do + end do + if (incidence /= 2) then + write(message, '(A,I0,A,I0,A,I0)') 'open volume edge ', first_id, '-', second_id, ' has incidence ', incidence + is_valid = .false. + return + end if + end do + end do + end subroutine validateClosedSurfaceTopology + + subroutine validateSurfaceFaceContour(sides, face, is_valid, detail) + type(side_t), dimension(:), allocatable, intent(in) :: sides + integer, intent(in) :: face + logical, intent(out) :: is_valid + character(len=*), intent(out) :: detail + type(coord_t), dimension(:), allocatable :: vertices + integer, dimension(:), allocatable :: incoming, outgoing, queue + logical, dimension(:), allocatable :: visited + integer :: side_index, vertex_index, next_vertex, nvertices, head, tail, components + + is_valid = .true. + detail = '' + allocate(vertices(2*size(sides)), incoming(2*size(sides)), outgoing(2*size(sides))) + incoming = 0 + outgoing = 0 + nvertices = 0 + do side_index = 1, size(sides) + call registerContourVertex(sides(side_index)%init, vertices, incoming, outgoing, nvertices, vertex_index) + outgoing(vertex_index) = outgoing(vertex_index) + 1 + call registerContourVertex(sides(side_index)%end, vertices, incoming, outgoing, nvertices, vertex_index) + incoming(vertex_index) = incoming(vertex_index) + 1 + end do + do vertex_index = 1, nvertices + if (incoming(vertex_index) > 1 .or. outgoing(vertex_index) > 1) then + detail = 'branching contour vertex' + is_valid = .false. + return + end if + if (.not. isOnFaceBoundary(vertices(vertex_index), face) .and. & + (incoming(vertex_index) /= 1 .or. outgoing(vertex_index) /= 1)) then + detail = 'dangling contour vertex inside the cell face' + is_valid = .false. + return + end if + end do + + allocate(visited(size(sides)), queue(size(sides))) + visited = .false. + components = 0 + do side_index = 1, size(sides) + if (visited(side_index)) cycle + components = components + 1 + head = 1 + tail = 1 + queue(1) = side_index + visited(side_index) = .true. + do while (head <= tail) + next_vertex = queue(head) + head = head + 1 + do vertex_index = 1, size(sides) + if (visited(vertex_index)) cycle + if (sidesTouch(sides(next_vertex), sides(vertex_index))) then + tail = tail + 1 + queue(tail) = vertex_index + visited(vertex_index) = .true. + end if + end do + end do + end do + if (components /= 1) then + detail = 'multiple disconnected contours' + is_valid = .false. + end if + end subroutine validateSurfaceFaceContour + + subroutine registerContourVertex(vertex, vertices, incoming, outgoing, nvertices, index) + type(coord_t), intent(in) :: vertex + type(coord_t), dimension(:), intent(inout) :: vertices + integer, dimension(:), intent(inout) :: incoming, outgoing + integer, intent(inout) :: nvertices + integer, intent(out) :: index + integer :: i + + do i = 1, nvertices + if (sameCoordinate(vertices(i), vertex)) then + index = i + return + end if + end do + nvertices = nvertices + 1 + vertices(nvertices) = vertex + incoming(nvertices) = 0 + outgoing(nvertices) = 0 + index = nvertices + end subroutine registerContourVertex + + logical function isOnFaceBoundary(vertex, face) + type(coord_t), intent(in) :: vertex + integer, intent(in) :: face + integer :: first_direction, second_direction + + first_direction = mod(face, 3) + 1 + second_direction = mod(face + 1, 3) + 1 + isOnFaceBoundary = isOnGridPlane(vertex%position(first_direction)) .or. & + isOnGridPlane(vertex%position(second_direction)) + end function isOnFaceBoundary + + logical function isOnGridPlane(position) + real, intent(in) :: position + isOnGridPlane = abs(position - nint(position)) < 1.0e-5 + end function isOnGridPlane + + logical function sidesTouch(first, second) + type(side_t), intent(in) :: first, second + sidesTouch = sameCoordinate(first%init, second%init) .or. sameCoordinate(first%init, second%end) .or. & + sameCoordinate(first%end, second%init) .or. sameCoordinate(first%end, second%end) + end function sidesTouch + + logical function sameCoordinate(first, second) + type(coord_t), intent(in) :: first, second + sameCoordinate = all(abs(first%position-second%position) < 1.0e-5) + end function sameCoordinate + + subroutine setCellFaceValidationError(detail, cell, face, is_valid, message) + character(len=*), intent(in) :: detail + integer(kind=4), dimension(3), intent(in) :: cell + integer, intent(in) :: face + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + write(message, '(A,A,I0,A,I0,A,I0,A,I0)') trim(detail), ' at cell (', cell(1), ',', cell(2), ',', cell(3), '), face ', face + is_valid = .false. + end subroutine setCellFaceValidationError + + subroutine assignTriangleComponents(triangles, component) + type(triangle_t), dimension(:), allocatable, intent(in) :: triangles + integer, dimension(:), allocatable, intent(out) :: component + integer, dimension(:), allocatable :: queue + integer :: component_id, seed, head, tail, current, neighbor + + allocate(component(size(triangles)), queue(size(triangles))) + component = 0 + component_id = 0 + do seed = 1, size(triangles) + if (component(seed) /= 0) cycle + component_id = component_id + 1 + head = 1 + tail = 1 + queue(1) = seed + component(seed) = component_id + do while (head <= tail) + current = queue(head) + head = head + 1 + do neighbor = 1, size(triangles) + if (component(neighbor) /= 0) cycle + if (trianglesShareEdge(triangles(current), triangles(neighbor))) then + component(neighbor) = component_id + tail = tail + 1 + queue(tail) = neighbor + end if + end do + end do + end do + end subroutine assignTriangleComponents + + logical function isClosedComponent(triangles, component, component_id) + type(triangle_t), dimension(:), allocatable, intent(in) :: triangles + integer, dimension(:), intent(in) :: component + integer, intent(in) :: component_id + integer :: triangle_index, edge, other_triangle, other_edge, incidence + integer :: first_id, second_id, direction, other_first, other_second, other_direction + + isClosedComponent = .true. + do triangle_index = 1, size(triangles) + if (component(triangle_index) /= component_id) cycle + do edge = 1, 3 + call triangleEdge(triangles(triangle_index), edge, first_id, second_id, direction) + incidence = 0 + do other_triangle = 1, size(triangles) + if (component(other_triangle) /= component_id) cycle + do other_edge = 1, 3 + call triangleEdge(triangles(other_triangle), other_edge, other_first, other_second, other_direction) + if (first_id == other_first .and. second_id == other_second) incidence = incidence + 1 + end do + end do + if (incidence /= 2) then + isClosedComponent = .false. + return + end if + end do + end do + end function isClosedComponent + + logical function trianglesShareEdge(first, second) + type(triangle_t), intent(in) :: first, second + integer :: edge, other_edge, first_id, second_id, direction, other_first, other_second, other_direction + + trianglesShareEdge = .false. + do edge = 1, 3 + call triangleEdge(first, edge, first_id, second_id, direction) + do other_edge = 1, 3 + call triangleEdge(second, other_edge, other_first, other_second, other_direction) + if (first_id == other_first .and. second_id == other_second) then + trianglesShareEdge = .true. + return + end if + end do + end do + end function trianglesShareEdge + + subroutine triangleEdge(triangle, edge_index, first_id, second_id, direction) + type(triangle_t), intent(in) :: triangle + integer, intent(in) :: edge_index + integer, intent(out) :: first_id, second_id, direction + integer :: directed_first, directed_second + + directed_first = triangle%vertices(edge_index)%id + directed_second = triangle%vertices(mod(edge_index,3)+1)%id + first_id = min(directed_first, directed_second) + second_id = max(directed_first, directed_second) + if (directed_first == first_id) then + direction = 1 + else + direction = -1 + end if + end subroutine triangleEdge + + subroutine reverseTriangle(triangle) + type(triangle_t), intent(inout) :: triangle + type(coord_t) :: swapped_vertex + + swapped_vertex = triangle%vertices(2) + triangle%vertices(2) = triangle%vertices(3) + triangle%vertices(3) = swapped_vertex + end subroutine reverseTriangle + function buildMedia(elements) result(res) type(ConformalPECElements_t), dimension(:), pointer :: elements type(ConformalMedia_t), dimension(:), allocatable :: res diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index cf4dccc73..ceb8aef91 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -18,6 +18,7 @@ module smbjson_m use json_kinds use conformal_types_m + use conformal_m, only: validateConformalSurface, validateConformalVolume use, intrinsic :: iso_fortran_env , only: error_unit @@ -627,11 +628,14 @@ subroutine appendRegion(regions, region, tagName) type(ConformalPECElements_t), dimension(:), allocatable :: aux integer :: i + logical :: is_valid + character(len=256) :: validation_message if (.not. associated(regions)) then allocate(regions(1)) regions(1)%triangles = region%triangles regions(1)%intervals = copyIntervals(region%intervals) regions(1)%tag = tagName + call validateRegion(regions(1), region%type, tagName, is_valid, validation_message) else allocate(aux(size(regions) + 1)) do i = 1, size(regions) @@ -646,10 +650,28 @@ subroutine appendRegion(regions, region, tagName) do i = 1, size(aux) regions(i) = aux(i) end do + call validateRegion(regions(size(regions)), region%type, tagName, is_valid, validation_message) end if end subroutine + subroutine validateRegion(element, region_type, tag_name, is_valid, validation_message) + type(ConformalPECElements_t), intent(in) :: element + integer, intent(in) :: region_type + character(len=*), intent(in) :: tag_name + logical, intent(out) :: is_valid + character(len=*), intent(out) :: validation_message + + select case (region_type) + case (REGION_TYPE_SURFACE) + call validateConformalSurface(element, is_valid, validation_message) + if (.not. is_valid) call WarnErrReport('Invalid conformal surface ' // trim(tag_name) // ': ' // trim(validation_message), .true.) + case (REGION_TYPE_VOLUME) + call validateConformalVolume(element, is_valid, validation_message) + if (.not. is_valid) call WarnErrReport('Invalid conformal volume ' // trim(tag_name) // ': ' // trim(validation_message), .true.) + end select + end subroutine validateRegion + function copyIntervals(intervals) result(res) type(cell_interval_t), dimension(:), allocatable, intent(in) :: intervals type(interval_t), dimension(:), allocatable :: res diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 37b824c92..950a92a9e 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -103,7 +103,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes, conformal_surfaces real(kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios - type(side_tris_map_t), dimension(:), allocatable :: side_to_triangles_maps + type(side_tris_map_t), dimension(:), allocatable :: volume_side_maps, surface_side_maps eps0=eps00; mu0=mu00; !chapuz para convertir la variables de paso en globales cluz=1.0_RKIND/sqrt(eps0*mu0) zvac=sqrt(mu0/eps0) @@ -139,7 +139,16 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN call buildConformalMedia(this%conformalRegs, conformal_volumes, conformal_surfaces) sgg%dt = changeTimeStepIfConformalNeeded(sgg%dt) - if (associated(this%conformalRegs%volumes)) side_to_triangles_maps = buildSideMaps(this%conformalRegs) + if (associated(this%conformalRegs%volumes)) then + volume_side_maps = buildSideMaps(this%conformalRegs%volumes) + else + allocate(volume_side_maps(0)) + end if + if (associated(this%conformalRegs%surfaces)) then + surface_side_maps = buildSideMaps(this%conformalRegs%surfaces) + else + allocate(surface_side_maps(0)) + end if ! Cuenta los medios !!!!!calcula tamanios @@ -194,9 +203,16 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN call getDifferentFaceRatios(face_ratios, conformal_surfaces) ! edge_ratios = getDifferentEdgeRatios(conformal_volumes) ! face_ratios = getDifferentFaceRatios(conformal_volumes) - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + ! Surface updates need media distinct from volume updates even when their + ! geometric ratios are equal. + if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + end if sgg%NumMedia = contamedia sgg%AllocMed = contamedia @@ -2548,7 +2564,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN do j = 1, ubound(conformal_volumes,1) - call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j), isVolume) + call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, volume_side_maps(j), isVolume) numertag = searchtag(tagtype,conformal_volumes(j)%tag) CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & @@ -2560,13 +2576,15 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (ubound(conformal_volumes, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + end if ! faces from V and S with same ratio are considered different media, bc they need to perform different operations do j = 1, ubound(conformal_surfaces,1) - call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, side_to_triangles_maps(j), isSurface) + call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) ! numertag = searchtag(tagtype,conformal_surfaces(j)%tag) ! CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & ! & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & @@ -2578,9 +2596,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (ubound(conformal_surfaces, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + end if !reporta el bounding box @@ -4983,7 +5003,9 @@ subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ra call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, type) num_media = contamedia + ubound(edge_ratios_no_zero,1) call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox, type) - call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) + if (type == isVolume) then + call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) + end if end subroutine subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) @@ -4993,8 +5015,10 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios - integer (kind=4) :: face_media - integer (kind=4) :: cell(3) + integer (kind=4) :: face_media + integer (kind=4) :: cell(3) + integer (kind=4) :: previous_faces + type(face_t), dimension(:), allocatable :: combined_faces type(XYZlimit_t), intent(inout) :: bbox integer (kind=4), intent(in) :: type integer :: j, k @@ -5014,7 +5038,10 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ face_media = 0 end if - allocate(sgg%Med(face_media)%ConformalFace(conformal_volumes%face_media(j)%size)) + previous_faces = 0 + if (allocated(sgg%Med(face_media)%ConformalFace)) previous_faces = ubound(sgg%Med(face_media)%ConformalFace, 1) + allocate(combined_faces(previous_faces + conformal_volumes%face_media(j)%size)) + if (previous_faces > 0) combined_faces(1:previous_faces) = sgg%Med(face_media)%ConformalFace do k = 1, conformal_volumes%face_media(j)%size cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) @@ -5034,10 +5061,11 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ media%sggMiHz(cell(1), cell(2), cell(3)) = face_media end select - sgg%Med(face_media)%ConformalFace(k) = conformal_volumes%face_media(j)%faces(k) - - end do - end do + combined_faces(previous_faces+k) = conformal_volumes%face_media(j)%faces(k) + + end do + call move_alloc(combined_faces, sgg%Med(face_media)%ConformalFace) + end do end subroutine @@ -5060,8 +5088,10 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios - integer (kind=4) :: edge_media - integer (kind=4) :: cell(3) + integer (kind=4) :: edge_media + integer (kind=4) :: cell(3) + integer (kind=4) :: previous_edges + type(edge_t), dimension(:), allocatable :: combined_edges type(XYZlimit_t), intent(inout) :: bbox integer (kind=4), intent(in) :: type ! integer(kind=4), dimension(4) :: key @@ -5084,7 +5114,10 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ edge_media = 0 end if - allocate(sgg%Med(edge_media)%ConformalEdge(conformal_volumes%edge_media(j)%size)) + previous_edges = 0 + if (allocated(sgg%Med(edge_media)%ConformalEdge)) previous_edges = ubound(sgg%Med(edge_media)%ConformalEdge, 1) + allocate(combined_edges(previous_edges + conformal_volumes%edge_media(j)%size)) + if (previous_edges > 0) combined_edges(1:previous_edges) = sgg%Med(edge_media)%ConformalEdge do k = 1, conformal_volumes%edge_media(j)%size @@ -5106,11 +5139,12 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end select - sgg%Med(edge_media)%ConformalEdge(k) = conformal_volumes%edge_media(j)%edges(k) - - - end do - end do + combined_edges(previous_edges+k) = conformal_volumes%edge_media(j)%edges(k) + + + end do + call move_alloc(combined_edges, sgg%Med(edge_media)%ConformalEdge) + end do end subroutine subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 41c564f10..aebca4c7e 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -82,10 +82,19 @@ module Solver_m #ifdef CompileWithProfiling use nvtx #endif - implicit none - - - type, public :: solver_t + implicit none + + type :: conformal_surface_face_state_t + integer(kind=4), dimension(3) :: cell = 0 + integer(kind=4) :: face_direction = 0 + integer(kind=4) :: split_direction = 0 + real(kind=rkind) :: lower_fraction = 0.0_RKIND + real(kind=rkind) :: lower_h = 0.0_RKIND + real(kind=rkind) :: upper_h = 0.0_RKIND + end type conformal_surface_face_state_t + + + type, public :: solver_t type(sim_control_t) :: control type(logic_control_t) :: thereAre type(perform_t) :: perform, d_perform @@ -107,10 +116,11 @@ module Solver_m type (sggfdtdinfo_t) :: sgg type(media_matrices_t) :: media type(taglist_t) :: tag_numbers - type (limit_t), dimension(1:6) :: SINPML_fullsize,fullsize - logical :: finishedwithsuccess = .false. - real (kind=rkind) :: eps0,mu0 - type (tagtype_t) :: tagtype + type (limit_t), dimension(1:6) :: SINPML_fullsize,fullsize + logical :: finishedwithsuccess = .false. + real (kind=rkind) :: eps0,mu0 + type (tagtype_t) :: tagtype + type(conformal_surface_face_state_t), allocatable :: conformal_surface_faces(:) #ifdef CompileWithMTLN type (mtln_t) :: mtln_parsed @@ -1356,12 +1366,12 @@ subroutine initializeMultiports() #endif end subroutine initializeMultiports - subroutine initializeConformal() + subroutine initializeConformal() #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) - ! call initConformal(this%sgg, Ex,Ey,Ez,Hx,Hy,Hz) + call initializeConformalSurfaceStates(this) end subroutine @@ -2529,13 +2539,219 @@ end subroutine advanceHz subroutine solver_advanceConformalE(this) class(solver_t) :: this - ! Conformal time stepping is still WIP; no implementation is linked. + integer :: n, i, j, k, e, medium + real(kind=rkind) :: sign, inverse_step + + if (.not. allocated(this%conformal_surface_faces)) return + do n = 1, size(this%conformal_surface_faces) + i = this%conformal_surface_faces(n)%cell(1) + j = this%conformal_surface_faces(n)%cell(2) + k = this%conformal_surface_faces(n)%cell(3) + e = 6 - this%conformal_surface_faces(n)%face_direction - & + this%conformal_surface_faces(n)%split_direction + sign = leviCivita(this%conformal_surface_faces(n)%face_direction, & + this%conformal_surface_faces(n)%split_direction, e) + + select case(this%conformal_surface_faces(n)%split_direction) + case(1) + i = i + 1 + inverse_step = this%Idxh(i) + case(2) + j = j + 1 + inverse_step = this%Idyh(j) + case(3) + k = k + 1 + inverse_step = this%Idzh(k) + end select + + select case(e) + case(1) + medium = this%media%sggMiEx(i,j,k) + this%Ex(i,j,k) = this%Ex(i,j,k) + this%g%g2(medium)*inverse_step*sign* & + (this%conformal_surface_faces(n)%upper_h - this%conformal_surface_faces(n)%lower_h) + case(2) + medium = this%media%sggMiEy(i,j,k) + this%Ey(i,j,k) = this%Ey(i,j,k) + this%g%g2(medium)*inverse_step*sign* & + (this%conformal_surface_faces(n)%upper_h - this%conformal_surface_faces(n)%lower_h) + case(3) + medium = this%media%sggMiEz(i,j,k) + this%Ez(i,j,k) = this%Ez(i,j,k) + this%g%g2(medium)*inverse_step*sign* & + (this%conformal_surface_faces(n)%upper_h - this%conformal_surface_faces(n)%lower_h) + end select + end do end subroutine solver_advanceConformalE subroutine solver_advanceConformalH(this) class(solver_t) :: this - ! Conformal time stepping is still WIP; no implementation is linked. + integer :: n, i, j, k, e + real(kind=rkind) :: sign, inverse_step, lower_e, upper_e, lower_fraction + + if (.not. allocated(this%conformal_surface_faces)) return + do n = 1, size(this%conformal_surface_faces) + i = this%conformal_surface_faces(n)%cell(1) + j = this%conformal_surface_faces(n)%cell(2) + k = this%conformal_surface_faces(n)%cell(3) + e = 6 - this%conformal_surface_faces(n)%face_direction - & + this%conformal_surface_faces(n)%split_direction + sign = leviCivita(this%conformal_surface_faces(n)%face_direction, & + this%conformal_surface_faces(n)%split_direction, e) + lower_fraction = this%conformal_surface_faces(n)%lower_fraction + + select case(e) + case(1) + lower_e = this%Ex(i,j,k) + select case(this%conformal_surface_faces(n)%split_direction) + case(2); upper_e = this%Ex(i,j+1,k); inverse_step = this%Idye(j) + case(3); upper_e = this%Ex(i,j,k+1); inverse_step = this%Idze(k) + end select + case(2) + lower_e = this%Ey(i,j,k) + select case(this%conformal_surface_faces(n)%split_direction) + case(1); upper_e = this%Ey(i+1,j,k); inverse_step = this%Idxe(i) + case(3); upper_e = this%Ey(i,j,k+1); inverse_step = this%Idze(k) + end select + case(3) + lower_e = this%Ez(i,j,k) + select case(this%conformal_surface_faces(n)%split_direction) + case(1); upper_e = this%Ez(i+1,j,k); inverse_step = this%Idxe(i) + case(2); upper_e = this%Ez(i,j+1,k); inverse_step = this%Idye(j) + end select + end select + + this%conformal_surface_faces(n)%lower_h = this%conformal_surface_faces(n)%lower_h + & + this%sgg%dt/(this%mu0*lower_fraction)*(-sign)*(-lower_e)*inverse_step + this%conformal_surface_faces(n)%upper_h = this%conformal_surface_faces(n)%upper_h + & + this%sgg%dt/(this%mu0*(1.0_RKIND-lower_fraction))*(-sign)*upper_e*inverse_step + + select case(this%conformal_surface_faces(n)%face_direction) + case(1); this%Hx(i,j,k) = this%conformal_surface_faces(n)%lower_h + case(2); this%Hy(i,j,k) = this%conformal_surface_faces(n)%lower_h + case(3); this%Hz(i,j,k) = this%conformal_surface_faces(n)%lower_h + end select + end do end subroutine solver_advanceConformalH + + subroutine initializeConformalSurfaceStates(this) + class(solver_t) :: this + type(conformal_surface_face_state_t), allocatable :: states(:), enlarged(:) + integer :: medium, feature, split_direction + type(face_t) :: face + real(kind=rkind) :: lower_fraction + + ! A coordinate-normal sheet cuts opposite, parallel edges at the same + ! fractional coordinate. Those faces can be split into independent + ! lower/upper Yee states without defining a PEC volume. + allocate(states(0)) + do medium = 1, this%sgg%NumMedia + if (.not. this%sgg%Med(medium)%Is%ConformalPEC .or. & + .not. this%sgg%Med(medium)%Is%Surface) cycle + if (.not. allocated(this%sgg%Med(medium)%ConformalFace)) cycle + do feature = 1, size(this%sgg%Med(medium)%ConformalFace) + face = this%sgg%Med(medium)%ConformalFace(feature) + call findSurfaceFaceSplit(this%sgg, face, split_direction, lower_fraction) + if (split_direction == 0) cycle + if (lower_fraction <= 1.0e-5_RKIND .or. lower_fraction >= 1.0_RKIND-1.0e-5_RKIND) cycle + if (surfaceStateExists(states, face%cell, face%direction)) cycle + allocate(enlarged(size(states)+1)) + if (size(states) > 0) enlarged(1:size(states)) = states + enlarged(size(enlarged))%cell = face%cell + enlarged(size(enlarged))%face_direction = face%direction + enlarged(size(enlarged))%split_direction = split_direction + enlarged(size(enlarged))%lower_fraction = lower_fraction + call move_alloc(enlarged, states) + end do + end do + call move_alloc(states, this%conformal_surface_faces) + end subroutine initializeConformalSurfaceStates + + subroutine findSurfaceFaceSplit(sgg, face, split_direction, lower_fraction) + type(SGGFDTDINFO_t), intent(in) :: sgg + type(face_t), intent(in) :: face + integer, intent(out) :: split_direction + real(kind=rkind), intent(out) :: lower_fraction + integer :: medium, feature, candidate + real(kind=rkind) :: candidate_fraction + + split_direction = 0 + lower_fraction = 0.0_RKIND + do medium = 1, sgg%NumMedia + if (.not. sgg%Med(medium)%Is%ConformalPEC .or. .not. sgg%Med(medium)%Is%Surface) cycle + if (.not. allocated(sgg%Med(medium)%ConformalEdge)) cycle + do feature = 1, size(sgg%Med(medium)%ConformalEdge) + candidate = sgg%Med(medium)%ConformalEdge(feature)%direction + if (candidate == face%direction) cycle + if (.not. edgeBoundsFace(sgg%Med(medium)%ConformalEdge(feature), face)) cycle + candidate_fraction = edgeIntersectionFraction(sgg%Med(medium)%ConformalEdge(feature)) + if (candidate_fraction <= 0.0_RKIND) cycle + if (split_direction /= 0 .and. split_direction /= candidate) then + split_direction = 0 + lower_fraction = 0.0_RKIND + return + end if + if (split_direction == candidate .and. lower_fraction > 0.0_RKIND .and. & + abs(lower_fraction-candidate_fraction) > 1.0e-5_RKIND) then + split_direction = 0 + lower_fraction = 0.0_RKIND + return + end if + split_direction = candidate + lower_fraction = candidate_fraction + end do + end do + end subroutine findSurfaceFaceSplit + + logical function edgeBoundsFace(edge, face) + type(edge_t), intent(in) :: edge + type(face_t), intent(in) :: face + integer :: remaining_direction + + edgeBoundsFace = .false. + if (edge%direction == face%direction) return + remaining_direction = 6 - edge%direction - face%direction + if (edge%cell(face%direction) /= face%cell(face%direction)) return + if (edge%cell(edge%direction) /= face%cell(edge%direction)) return + edgeBoundsFace = edge%cell(remaining_direction) == face%cell(remaining_direction) .or. & + edge%cell(remaining_direction) == face%cell(remaining_direction) + 1 + end function edgeBoundsFace + + real(kind=rkind) function edgeIntersectionFraction(edge) result(fraction) + type(edge_t), intent(in) :: edge + real(kind=rkind) :: first_fraction, second_fraction + + first_fraction = edge%material_coords(1) - floor(edge%material_coords(1)) + second_fraction = edge%material_coords(2) - floor(edge%material_coords(2)) + fraction = 0.0_RKIND + if (first_fraction > 1.0e-5_RKIND) fraction = first_fraction + if (second_fraction > 1.0e-5_RKIND) fraction = second_fraction + end function edgeIntersectionFraction + + logical function surfaceStateExists(states, cell, direction) + type(conformal_surface_face_state_t), dimension(:), intent(in) :: states + integer(kind=4), dimension(3), intent(in) :: cell + integer, intent(in) :: direction + integer :: n + + surfaceStateExists = .false. + do n = 1, size(states) + if (states(n)%face_direction == direction .and. all(states(n)%cell == cell)) then + surfaceStateExists = .true. + return + end if + end do + end function surfaceStateExists + + real(kind=rkind) function leviCivita(first, second, third) result(value) + integer, intent(in) :: first, second, third + if (first == second .or. second == third .or. first == third) then + value = 0.0_RKIND + else if ((first == 1 .and. second == 2 .and. third == 3) .or. & + (first == 2 .and. second == 3 .and. third == 1) .or. & + (first == 3 .and. second == 1 .and. third == 2)) then + value = 1.0_RKIND + else + value = -1.0_RKIND + end if + end function leviCivita subroutine solver_advanceEDispersiveE(this) @@ -2994,8 +3210,9 @@ subroutine destroy_and_deallocate(this) call DestroyMURBorders !Destroy the remaining deallocate (this%sgg%Med,this%sgg%LineX,this%sgg%LineY,this%sgg%LineZ,this%sgg%DX,this%sgg%DY,this%sgg%DZ,this%sgg%tiempo) - call this%g%destroy() - deallocate (this%Ex, this%Ey, this%Ez, this%Hx, this%Hy, this%Hz) + call this%g%destroy() + if (allocated(this%conformal_surface_faces)) deallocate(this%conformal_surface_faces) + deallocate (this%Ex, this%Ey, this%Ez, this%Hx, this%Hy, this%Hz) deallocate (this%dxe, this%dye, this%dze, this%Idxe, this%Idye, this%Idze, this%dxh, this%dyh, this%dzh, this%Idxh, this%Idyh, this%Idzh) return end subroutine destroy_and_deallocate diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1cf9378ed..d4959a4e6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -32,6 +32,9 @@ endif() add_subdirectory(conformal) set(CONFORMAL_TESTS_LIBRARY conformal_tests) +add_subdirectory(borders) +set(BORDER_TESTS_LIBRARY border_tests) + add_subdirectory(preprocess) set(PREPROCESS_TESTS_LIBRARY preprocess_tests) @@ -43,6 +46,7 @@ target_link_libraries(fdtd_tests ${MTLN_TESTS_LIBRARY} ${SMBJSON_TESTS_LIBRARY} ${CONFORMAL_TESTS_LIBRARY} + ${BORDER_TESTS_LIBRARY} ${PREPROCESS_TESTS_LIBRARY} ${ROTATE_TESTS_LIBRARY} ${HDF_TESTS_LIBRARY} @@ -50,4 +54,4 @@ target_link_libraries(fdtd_tests ${SYSTEM_TESTS_LIBRARY} ${OBSERVATION_TESTS_LIBRARY} GTest::gtest_main -) \ No newline at end of file +) diff --git a/test/borders/CMakeLists.txt b/test/borders/CMakeLists.txt new file mode 100644 index 000000000..5b2e02a04 --- /dev/null +++ b/test/borders/CMakeLists.txt @@ -0,0 +1,19 @@ +message(STATUS "Creating build system for border tests") + +set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod) + +add_library(border_test_fortran + "test_periodic.F90" +) + +target_link_libraries(border_test_fortran + semba-components + semba-types +) + +add_library(border_tests "border_tests.cpp") + +target_link_libraries(border_tests + border_test_fortran + GTest::gtest +) diff --git a/test/borders/border_tests.cpp b/test/borders/border_tests.cpp new file mode 100644 index 000000000..1eba2dc7e --- /dev/null +++ b/test/borders/border_tests.cpp @@ -0,0 +1 @@ +#include "border_tests.h" diff --git a/test/borders/border_tests.h b/test/borders/border_tests.h new file mode 100644 index 000000000..3360a9c11 --- /dev/null +++ b/test/borders/border_tests.h @@ -0,0 +1,17 @@ +#include + +extern "C" int test_periodic_x_ghost_planes(); +extern "C" int test_periodic_y_ghost_planes(); +extern "C" int test_periodic_z_ghost_planes(); + +TEST(periodic_borders, x_ghost_planes) { + EXPECT_EQ(0, test_periodic_x_ghost_planes()); +} + +TEST(periodic_borders, y_ghost_planes) { + EXPECT_EQ(0, test_periodic_y_ghost_planes()); +} + +TEST(periodic_borders, z_ghost_planes) { + EXPECT_EQ(0, test_periodic_z_ghost_planes()); +} diff --git a/test/borders/test_periodic.F90 b/test/borders/test_periodic.F90 new file mode 100644 index 000000000..57f6cd2eb --- /dev/null +++ b/test/borders/test_periodic.F90 @@ -0,0 +1,134 @@ +module periodic_border_test_m + use FDETYPES_m + use BORDERS_other_m, only: CloneMagneticPeriodic + implicit none + +contains + + subroutine initialize_bounds(alloc, sweep) + type(XYZlimit_t), dimension(1:6), intent(out) :: alloc, sweep + integer :: field + + do field = 1, 6 + alloc(field)%XI = 0 + alloc(field)%XE = 3 + alloc(field)%YI = 0 + alloc(field)%YE = 3 + alloc(field)%ZI = 0 + alloc(field)%ZE = 3 + sweep(field)%XI = 1 + sweep(field)%XE = 2 + sweep(field)%YI = 1 + sweep(field)%YE = 2 + sweep(field)%ZI = 1 + sweep(field)%ZE = 2 + end do + end subroutine initialize_bounds + + subroutine initialize_border(border) + type(Border_t), intent(out) :: border + + border%IsBackPeriodic = .false. + border%IsFrontPeriodic = .false. + border%IsLeftPeriodic = .false. + border%IsRightPeriodic = .false. + border%IsDownPeriodic = .false. + border%IsUpPeriodic = .false. + end subroutine initialize_border + + subroutine initialize_fields(Hx, Hy, Hz) + real(kind=RKIND), dimension(0:3,0:3,0:3), intent(out) :: Hx, Hy, Hz + integer :: i, j, k + + do k = 0, 3 + do j = 0, 3 + do i = 0, 3 + Hx(i,j,k) = real(1000 + 100*i + 10*j + k, RKIND) + Hy(i,j,k) = real(2000 + 100*i + 10*j + k, RKIND) + Hz(i,j,k) = real(3000 + 100*i + 10*j + k, RKIND) + end do + end do + end do + end subroutine initialize_fields + +end module periodic_border_test_m + +integer function test_periodic_x_ghost_planes() bind(C) result(err) + use periodic_border_test_m + implicit none + type(XYZlimit_t), dimension(1:6) :: alloc, sweep + type(Border_t) :: border + real(kind=RKIND), dimension(0:3,0:3,0:3) :: Hx, Hy, Hz, Hx_before + + err = 0 + call initialize_bounds(alloc, sweep) + call initialize_border(border) + call initialize_fields(Hx, Hy, Hz) + Hx_before = Hx + border%IsBackPeriodic = .true. + border%IsFrontPeriodic = .true. + + call CloneMagneticPeriodic(alloc, border, Hx, Hy, Hz, sweep, 0, 1) + + if (any(Hy(0,:,:) /= Hy(2,:,:))) err = err + 1 + if (any(Hy(3,:,:) /= Hy(1,:,:))) err = err + 1 + if (any(Hz(0,:,:) /= Hz(2,:,:))) err = err + 1 + if (any(Hz(3,:,:) /= Hz(1,:,:))) err = err + 1 + if (any(Hx /= Hx_before)) err = err + 1 +end function test_periodic_x_ghost_planes + +integer function test_periodic_y_ghost_planes() bind(C) result(err) + use periodic_border_test_m + implicit none + type(XYZlimit_t), dimension(1:6) :: alloc, sweep + type(Border_t) :: border + real(kind=RKIND), dimension(0:3,0:3,0:3) :: Hx, Hy, Hz, Hy_before + + err = 0 + call initialize_bounds(alloc, sweep) + call initialize_border(border) + call initialize_fields(Hx, Hy, Hz) + Hy_before = Hy + border%IsLeftPeriodic = .true. + border%IsRightPeriodic = .true. + + call CloneMagneticPeriodic(alloc, border, Hx, Hy, Hz, sweep, 0, 1) + + if (any(Hx(:,0,:) /= Hx(:,2,:))) err = err + 1 + if (any(Hx(:,3,:) /= Hx(:,1,:))) err = err + 1 + if (any(Hz(:,0,:) /= Hz(:,2,:))) err = err + 1 + if (any(Hz(:,3,:) /= Hz(:,1,:))) err = err + 1 + if (any(Hy /= Hy_before)) err = err + 1 +end function test_periodic_y_ghost_planes + +integer function test_periodic_z_ghost_planes() bind(C) result(err) + use periodic_border_test_m + implicit none + type(XYZlimit_t), dimension(1:6) :: alloc, sweep + type(Border_t) :: border + real(kind=RKIND), dimension(0:3,0:3,0:3) :: Hx, Hy, Hz, Hz_before + + err = 0 + call initialize_bounds(alloc, sweep) + call initialize_border(border) + call initialize_fields(Hx, Hy, Hz) + Hz_before = Hz + border%IsDownPeriodic = .true. + border%IsUpPeriodic = .true. + + ! Rank zero owns only the lower periodic ghost plane. + call CloneMagneticPeriodic(alloc, border, Hx, Hy, Hz, sweep, 0, 2) + if (any(Hx(:,:,0) /= Hx(:,:,2))) err = err + 1 + if (any(Hy(:,:,0) /= Hy(:,:,2))) err = err + 1 + if (any(Hx(:,:,3) == Hx(:,:,1))) err = err + 1 + if (any(Hy(:,:,3) == Hy(:,:,1))) err = err + 1 + + call initialize_fields(Hx, Hy, Hz) + ! The last rank owns only the upper periodic ghost plane. + call CloneMagneticPeriodic(alloc, border, Hx, Hy, Hz, sweep, 1, 2) + if (any(Hx(:,:,3) /= Hx(:,:,1))) err = err + 1 + if (any(Hy(:,:,3) /= Hy(:,:,1))) err = err + 1 + if (any(Hx(:,:,0) == Hx(:,:,2))) err = err + 1 + if (any(Hy(:,:,0) == Hy(:,:,2))) err = err + 1 + if (any(Hz /= Hz_before)) err = err + 1 +end function test_periodic_z_ghost_planes diff --git a/test/conformal/conformal_tests.h b/test/conformal/conformal_tests.h index 15ade1dd5..53254cc4c 100644 --- a/test/conformal/conformal_tests.h +++ b/test/conformal/conformal_tests.h @@ -17,6 +17,7 @@ extern "C" int test_geometry_side_side_contour(); extern "C" int test_geometry_side_side_contour_2(); extern "C" int test_geometry_side_side_contour_3(); extern "C" int test_geometry_areas(); +extern "C" int test_geometry_closed_surface_orientation(); extern "C" int test_cell_map_coords(); extern "C" int test_cell_map_array(); extern "C" int test_cell_map_add_triangle(); @@ -24,6 +25,7 @@ extern "C" int test_cell_map_cellmap_set_get(); extern "C" int test_conformal_filling_off_face_triangle_x(); extern "C" int test_conformal_filling_off_face_triangle_y(); extern "C" int test_conformal_filling_off_face_triangle_z(); +extern "C" int test_conformal_surface_complementary_ratios(); extern "C" int test_conformal_filling_open(); extern "C" int test_conformal_filling_closed(); extern "C" int test_conformal_edge_next_cell(); @@ -49,6 +51,7 @@ TEST(conformal, geometry_ss_contour) { EXPECT_EQ(0, test_geometry_side_sid TEST(conformal, geometry_ss_contour2) { EXPECT_EQ(0, test_geometry_side_side_contour_2()); } TEST(conformal, geometry_ss_contour3) { EXPECT_EQ(0, test_geometry_side_side_contour_3()); } TEST(conformal, geometry_areas) { EXPECT_EQ(0, test_geometry_areas()); } +TEST(conformal, geometry_closed_surface_orientation) { EXPECT_EQ(0, test_geometry_closed_surface_orientation()); } TEST(conformal, cell_map_coords) { EXPECT_EQ(0, test_cell_map_coords()); } TEST(conformal, cell_map_array) { EXPECT_EQ(0, test_cell_map_array()); } @@ -58,6 +61,7 @@ TEST(conformal, cell_map_cellmap_set_get) { EXPECT_EQ(0, test_cell_map_cellm TEST(conformal, conformal_filling_off_face_triangle_x) { EXPECT_EQ(0, test_conformal_filling_off_face_triangle_x()); } TEST(conformal, conformal_filling_off_face_triangle_y) { EXPECT_EQ(0, test_conformal_filling_off_face_triangle_y()); } TEST(conformal, conformal_filling_off_face_triangle_z) { EXPECT_EQ(0, test_conformal_filling_off_face_triangle_z()); } +TEST(conformal, conformal_surface_complementary_ratios) { EXPECT_EQ(0, test_conformal_surface_complementary_ratios()); } TEST(conformal, conformal_filling_open) { EXPECT_EQ(0, test_conformal_filling_open()); } TEST(conformal, conformal_filling_closed) { EXPECT_EQ(0, test_conformal_filling_closed()); } TEST(conformal, conformal_edge_next_cell) { EXPECT_EQ(0, test_conformal_edge_next_cell()); } diff --git a/test/conformal/test_filling.F90 b/test/conformal/test_filling.F90 index 0f6a3661f..2f61b7f43 100644 --- a/test/conformal/test_filling.F90 +++ b/test/conformal/test_filling.F90 @@ -89,6 +89,69 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err end function +integer function test_conformal_surface_complementary_ratios() bind(C) result(err) + use conformal_m + implicit none + real(kind=rkind), dimension(3) :: fractions + real(kind=rkind) :: fraction, forward_ratio, reverse_ratio + integer :: axis, fraction_index + + err = 0 + fractions = [0.25_RKIND, 0.5_RKIND, 0.75_RKIND] + + do axis = 1, 3 + do fraction_index = 1, size(fractions) + block + type(coord_t), dimension(3) :: coords + type(coord_t), dimension(3) :: vertices + type(ConformalPECRegions_t) :: regions + type(ConformalMedia_t), dimension(:), allocatable :: media + + fraction = fractions(fraction_index) + select case(axis) + case(1) + coords(1) = coord_t(position=[fraction,0.0_RKIND,0.0_RKIND], id=1) + coords(2) = coord_t(position=[fraction,0.0_RKIND,1.0_RKIND], id=2) + coords(3) = coord_t(position=[fraction,1.0_RKIND,0.0_RKIND], id=3) + case(2) + coords(1) = coord_t(position=[0.0_RKIND,fraction,0.0_RKIND], id=1) + coords(2) = coord_t(position=[0.0_RKIND,fraction,1.0_RKIND], id=2) + coords(3) = coord_t(position=[1.0_RKIND,fraction,0.0_RKIND], id=3) + case(3) + coords(1) = coord_t(position=[0.0_RKIND,0.0_RKIND,fraction], id=1) + coords(2) = coord_t(position=[0.0_RKIND,1.0_RKIND,fraction], id=2) + coords(3) = coord_t(position=[1.0_RKIND,0.0_RKIND,fraction], id=3) + end select + + allocate(regions%surfaces(1)) + allocate(regions%surfaces(1)%triangles(1)) + allocate(regions%surfaces(1)%intervals(0)) + + vertices = [coords(1), coords(2), coords(3)] + regions%surfaces(1)%triangles(1) = triangle_t(vertices) + media = buildMedia(regions%surfaces) + if (size(media(1)%face_media) /= 1) then + err = err + 1 + cycle + end if + forward_ratio = media(1)%face_media(1)%ratio + + vertices = [coords(1), coords(3), coords(2)] + regions%surfaces(1)%triangles(1) = triangle_t(vertices) + media = buildMedia(regions%surfaces) + if (size(media(1)%face_media) /= 1) then + err = err + 1 + cycle + end if + reverse_ratio = media(1)%face_media(1)%ratio + + if (abs(forward_ratio + reverse_ratio - 1.0_RKIND) > 0.01_RKIND) err = err + 1 + if (min(abs(forward_ratio-fraction), abs(reverse_ratio-fraction)) > 0.01_RKIND) err = err + 1 + end block + end do + end do +end function test_conformal_surface_complementary_ratios + integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err) ! /| diff --git a/test/conformal/test_geometry.F90 b/test/conformal/test_geometry.F90 index dfdbbdad6..642ab217e 100644 --- a/test/conformal/test_geometry.F90 +++ b/test/conformal/test_geometry.F90 @@ -55,6 +55,94 @@ integer function test_geometry_coord_position() bind(C) result(err) end function +integer function test_geometry_closed_surface_orientation() bind(C) result(err) + use conformal_m + use NFDETypes_m, only: ConformalPECElements_t + implicit none + + type(coord_t) :: c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 + type(ConformalPECElements_t) :: surface + type(triangle_t), dimension(:), allocatable :: outward, inward + logical :: is_valid + character(len=256) :: message + integer :: triangle_index, vertex_index + integer, dimension(3,4) :: inward_ids + + err = 0 + c1 = coord_t(position=[0.2,0.2,0.2], id=1) + c2 = coord_t(position=[0.8,0.2,0.2], id=2) + c3 = coord_t(position=[0.2,0.8,0.2], id=3) + c4 = coord_t(position=[0.2,0.2,0.8], id=4) + + allocate(outward(4)) + outward(1) = triangle_t(vertices=[c2,c3,c4]) + outward(2) = triangle_t(vertices=[c1,c4,c3]) + outward(3) = triangle_t(vertices=[c1,c2,c4]) + outward(4) = triangle_t(vertices=[c1,c3,c2]) + inward = outward + do triangle_index = 1, size(inward) + inward(triangle_index)%vertices = [outward(triangle_index)%vertices(1), & + outward(triangle_index)%vertices(3), & + outward(triangle_index)%vertices(2)] + end do + + surface%triangles = outward + allocate(surface%intervals(0)) + call validateConformalSurface(surface, is_valid, message) + if (.not. is_valid) err = err + 1 + call validateConformalVolume(surface, is_valid, message) + if (.not. is_valid) err = err + 1 + + surface%triangles = inward + do triangle_index = 1, size(inward) + do vertex_index = 1, 3 + inward_ids(vertex_index, triangle_index) = inward(triangle_index)%vertices(vertex_index)%id + end do + end do + call validateConformalSurface(surface, is_valid, message) + if (.not. is_valid) err = err + 1 + call validateConformalVolume(surface, is_valid, message) + if (.not. is_valid) err = err + 1 + do triangle_index = 1, size(inward) + do vertex_index = 1, 3 + if (surface%triangles(triangle_index)%vertices(vertex_index)%id /= inward_ids(vertex_index, triangle_index)) err = err + 1 + end do + end do + + surface%triangles(2)%vertices = [c1,c4,c3] + call validateConformalSurface(surface, is_valid, message) + if (is_valid) err = err + 1 + call validateConformalVolume(surface, is_valid, message) + if (is_valid) err = err + 1 + + surface%triangles = [outward, outward(1)] + call validateConformalSurface(surface, is_valid, message) + if (is_valid) err = err + 1 + call validateConformalVolume(surface, is_valid, message) + if (is_valid) err = err + 1 + + deallocate(surface%triangles) + allocate(surface%triangles(1)) + surface%triangles(1) = triangle_t(vertices=[c1,c3,c2]) + call validateConformalSurface(surface, is_valid, message) + if (.not. is_valid) err = err + 1 + call validateConformalVolume(surface, is_valid, message) + if (is_valid) err = err + 1 + + c5 = coord_t(position=[0.0,0.0,0.2], id=5) + c6 = coord_t(position=[1.0,0.0,0.2], id=6) + c7 = coord_t(position=[0.5,0.5,0.5], id=7) + c8 = coord_t(position=[0.0,0.0,0.7], id=8) + c9 = coord_t(position=[1.0,0.0,0.7], id=9) + c10 = coord_t(position=[0.5,0.5,0.6], id=10) + deallocate(surface%triangles) + allocate(surface%triangles(2)) + surface%triangles(1) = triangle_t(vertices=[c5,c6,c7]) + surface%triangles(2) = triangle_t(vertices=[c8,c9,c10]) + call validateConformalSurface(surface, is_valid, message) + if (is_valid) err = err + 1 +end function test_geometry_closed_surface_orientation + integer function test_geometry_side_position() bind(C) result(err) use geometry_m implicit none @@ -716,4 +804,4 @@ integer function test_geometry_areas() bind(C) result(err) if (area /= 0.125) err = err + 1 -end function \ No newline at end of file +end function diff --git a/test/fdtd_tests.cpp b/test/fdtd_tests.cpp index 8c9aee1cc..743ea171a 100644 --- a/test/fdtd_tests.cpp +++ b/test/fdtd_tests.cpp @@ -13,6 +13,7 @@ #include "observation/observation_tests.h" #endif #include "conformal/conformal_tests.h" +#include "borders/border_tests.h" #include "preprocess/preprocess_tests.h" int main(int argc, char **argv) { diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index 909ebc070..9a23632f8 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -4,6 +4,7 @@ import os from sys import platform from scipy import signal +from scipy.constants import speed_of_light # compiled without mtln uses classic wires @@ -609,7 +610,15 @@ def test_planewave_with_periodic_boundaries(tmp_path): inbox = Probe(solver.getSolvedProbeFilenames("inbox")[0]) after = Probe(solver.getSolvedProbeFilenames("after")[0]) + edge_probes = [ + Probe(solver.getSolvedProbeFilenames(name)[0]) + for name in ("x_lower_edge", "x_upper_edge", "y_lower_edge", "y_upper_edge") + ] + assert np.corrcoef(inbox.data['field'].to_numpy(), inbox.data['incident'].to_numpy())[0, 1] > 0.999 + for edge in edge_probes: + assert np.corrcoef(edge.data['field'].to_numpy(), edge.data['incident'].to_numpy())[0, 1] > 0.999 + assert np.allclose(edge.data['field'].to_numpy(), inbox.data['field'].to_numpy(), atol=1e-6) zeros = np.zeros_like(before.data['field']) assert np.allclose(before.data['field'].to_numpy(), zeros, atol=1.5e-3) assert np.allclose(after.data['field'].to_numpy(), zeros, atol=1.5e-3) @@ -1527,22 +1536,71 @@ def test_conformal_impedance_cylinder_unshielded(tmp_path): @pytest.mark.probes def test_conformal_sphere_rcs(tmp_path): case_name = 'conformal_sphere_rcs' - solver = FDTD(input_filename=TEST_DATA_FOLDER+'cases/conformal/'+case_name+'.fdtd.json', path_to_exe=SEMBA_EXE, - run_in_folder=tmp_path) - solver.run() - assert solver.hasFinishedSuccessfully() + input_filename = TEST_DATA_FOLDER+'cases/conformal/'+case_name+'.fdtd.json' + + def run_variant(name, subtype, reverse_winding=False): + run_folder = tmp_path/name + run_folder.mkdir() + solver = FDTD(input_filename=input_filename, path_to_exe=SEMBA_EXE, + run_in_folder=run_folder) + conformal_element = next( + element for element in solver['mesh']['elements'] + if element['type'] == 'conformal' + ) + conformal_element['subtype'] = subtype + if reverse_winding: + conformal_element['triangles'] = [ + [triangle[0], triangle[2], triangle[1]] + for triangle in conformal_element['triangles'] + ] - far = Probe(solver.getSolvedProbeFilenames("n2f")[0]) - ra = far.data.loc[(far.data['Theta'] == 90.0) & (far.data['Phi'] == 0.0), 'rcs_arit'] - rg = far.data.loc[(far.data['Theta'] == 90.0) & (far.data['Phi'] == 0.0), 'rcs_geom'] - ffar = far.data.loc[(far.data['Theta'] == 90.0) & (far.data['Phi'] == 0.0), 'freq'] + solver.run() + assert solver.hasFinishedSuccessfully() + + inside = {} + inside_files = solver.getSolvedProbeFilenames("inside") + assert len(inside_files) == 3 + for filename in inside_files: + probe = Probe(filename) + assert probe.field == 'E' + inside[probe.direction] = { + 'payload': readWithoutHeader(filename), + 'field': probe['field'].to_numpy(), + } + + far_files = solver.getSolvedProbeFilenames("n2f") + assert len(far_files) == 1 + far = Probe(far_files[0]) + return { + 'inside': inside, + 'far_payload': readWithoutHeader(far_files[0]), + 'far': far.data.copy(), + } + + results = { + 'volume': run_variant('volume', 'volume'), + 'surface': run_variant('surface', 'surface'), + 'surface_reversed': run_variant('surface_reversed', 'surface', reverse_winding=True), + } + + volume = results['volume'] + for result in results.values(): + assert result['inside'].keys() == volume['inside'].keys() + for direction, probe in result['inside'].items(): + assert np.count_nonzero(probe['field']) == 0 + assert probe['payload'] == volume['inside'][direction]['payload'] + assert result['far_payload'] == volume['far_payload'] + + far = volume['far'] + rg = far.loc[(far['Theta'] == 90.0) & (far['Phi'] == 0.0), 'rcs_geom'] + ffar = far.loc[(far['Theta'] == 90.0) & (far['Phi'] == 0.0), 'freq'] # analytical RCS f = np.linspace(1e7,7e8,200) r = 0.5 # in meters rcs = RCS(fspace=f, radius=r) # simulated, interpolated to analytical frequencies - rcs_interp = np.interp(f,ffar,rg) + rcs_interp = np.interp(f, ffar, rg) assert np.corrcoef(rcs[5:150], rcs_interp[5:150])[0,1] > 0.98 @@ -1581,6 +1639,90 @@ def test_conformal_delay(tmp_path): delay = t[front['field'].argmin()] tdelta = t4 + 2*(i*1.0/n)*0.02/3e8 assert np.abs(delay - tdelta)/tdelta < 0.01 + + +@pytest.mark.conformal +@pytest.mark.planewave +@pytest.mark.probes +@pytest.mark.parametrize("normal_axis,propagation,reverse_winding", [ + ('x', 1, False), ('x', -1, False), ('x', 1, True), ('x', -1, True), + ('y', 1, False), ('y', -1, False), ('z', 1, False), ('z', -1, False) +]) +def test_conformal_surface_midcell_reflection(tmp_path, normal_axis, propagation, reverse_winding): + fn = CASES_FOLDER + 'conformal_surface/conformal_surface_midcell.fdtd.json' + solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) + + permutations = { + 'x': (0, 1, 2), + 'y': (1, 0, 2), + 'z': (2, 1, 0), + } + permutation = permutations[normal_axis] + if normal_axis != 'x': + grid = solver['mesh']['grid'] + grid['numberOfCells'] = [grid['numberOfCells'][index] for index in permutation] + for coordinate in solver['mesh']['coordinates']: + position = coordinate['relativePosition'] + coordinate['relativePosition'] = [position[index] for index in permutation] + for element in solver['mesh']['elements']: + for interval in element.get('intervals', []): + interval[0] = [interval[0][index] for index in permutation] + interval[1] = [interval[1][index] for index in permutation] + + periodic_axes = {'x', 'y', 'z'} - {normal_axis} + solver['boundary'].clear() + for axis in ('x', 'y', 'z'): + boundary_type = 'periodic' if axis in periodic_axes else 'mur' + solver['boundary'][axis+'Lower'] = {'type': boundary_type} + solver['boundary'][axis+'Upper'] = {'type': boundary_type} + + if normal_axis == 'x': + solver['sources'][0]['direction'] = {'theta': propagation*np.pi/2, 'phi': 0.0} + probe_direction = 'z' + elif normal_axis == 'y': + solver['sources'][0]['direction'] = {'theta': np.pi/2, 'phi': propagation*np.pi/2} + probe_direction = 'z' + else: + solver['sources'][0]['direction'] = {'theta': 0.0 if propagation > 0 else np.pi, 'phi': 0.0} + solver['sources'][0]['polarization'] = {'theta': np.pi/2, 'phi': 0.0} + probe_direction = 'x' + for probe in solver['probes']: + probe['directions'] = [probe_direction] + + if reverse_winding: + triangles = solver['mesh']['elements'][0]['triangles'] + solver['mesh']['elements'][0]['triangles'] = [ + [triangle[0], triangle[2], triangle[1]] for triangle in triangles + ] + + solver.run() + + incident_name, shadow_name = ('left', 'right') if propagation > 0 else ('right', 'left') + incident_probe = Probe(solver.getSolvedProbeFilenames(incident_name)[0]) + shadow_probe = Probe(solver.getSolvedProbeFilenames(shadow_name)[0]) + + time = incident_probe['time'].to_numpy() + incident = incident_probe['incident'].to_numpy() + reflected = incident_probe['field'].to_numpy() - incident + shadow = shadow_probe['field'].to_numpy() + dt = time[1] - time[0] + + correlation = signal.correlate(reflected, -incident, mode='full') + lags = signal.correlation_lags(reflected.size, incident.size, mode='full') + lag = lags[np.argmax(correlation)] + normalized_correlation = np.max(correlation) / np.sqrt( + np.dot(reflected, reflected)*np.dot(incident, incident) + ) + reflection_amplitude = np.linalg.norm(reflected) / np.linalg.norm(incident) + + surface_position = 8.5*0.01 + probe_position = (4 if propagation > 0 else 12)*0.01 + expected_delay = 2*abs(surface_position-probe_position)/speed_of_light + + assert normalized_correlation > 0.99 + assert np.isclose(reflection_amplitude, 1.0, rtol=0.05) + assert abs(lag*dt-expected_delay) <= 4*dt + assert np.max(np.abs(shadow)) <= 0.01*np.max(np.abs(incident)) @pytest.mark.conformal @pytest.mark.xfail( diff --git a/test/pyWrapper/test_integration.py b/test/pyWrapper/test_integration.py index e08e67cde..91eaab608 100644 --- a/test/pyWrapper/test_integration.py +++ b/test/pyWrapper/test_integration.py @@ -180,6 +180,61 @@ def test_fill_conformal_vtk_sphere(tmp_path): assert face_media_dict[1005] == 24 # Conformal PEC surface assert face_media_dict[1006] == 24 # Conformal PEC surface + +@pytest.mark.conformal +@pytest.mark.vtk +def test_fill_conformal_surface_midcell_vtk(tmp_path): + fn = CASES_FOLDER + 'conformal_surface/conformal_surface_midcell.fdtd.json' + solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, + run_in_folder=tmp_path, flags=['-mapvtk']) + solver['general']['numberOfSteps'] = 1 + + solver.run() + + vtkmapfile = solver.getVTKMap() + assert os.path.isfile(vtkmapfile) + + line_media_dict = createPropertyDictionary( + vtkmapfile, celltype=3, property='mediatype') + face_media_dict = createPropertyDictionary( + vtkmapfile, celltype=9, property='mediatype') + volume_media_dict = createPropertyDictionary( + vtkmapfile, celltype=12, property='mediatype') + + assert sum(line_media_dict.values()) == 21 + assert sum(face_media_dict.values()) == 12 + assert not volume_media_dict + + +@pytest.mark.conformal +@pytest.mark.vtk +def test_fill_mixed_conformal_volume_and_surfaces(tmp_path): + fn = CASES_FOLDER + 'conformal/conformal_sphere_1mm_rcs_delta.fdtd.json' + solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, + run_in_folder=tmp_path, flags=['-mapvtk']) + solver['general']['numberOfSteps'] = 1 + + solver['mesh']['coordinates'].extend([ + {"id": 28, "relativePosition": [5.5, 5, 5]}, + {"id": 29, "relativePosition": [5.5, 6, 5]}, + {"id": 30, "relativePosition": [5.5, 5, 6]}, + {"id": 31, "relativePosition": [7.5, 5, 5]}, + {"id": 32, "relativePosition": [7.5, 6, 5]}, + {"id": 33, "relativePosition": [7.5, 5, 6]}, + ]) + solver['mesh']['elements'].extend([ + {"id": 5, "type": "conformal", "subtype": "surface", "intervals": [], "triangles": [[28, 29, 30]]}, + {"id": 6, "type": "conformal", "subtype": "surface", "intervals": [], "triangles": [[31, 32, 33]]}, + ]) + solver['materialAssociations'][0]['elementIds'].extend([5, 6]) + + solver.run() + + vtkmapfile = solver.getVTKMap() + assert os.path.isfile(vtkmapfile) + assert createPropertyDictionary(vtkmapfile, celltype=3, property='mediatype') + assert createPropertyDictionary(vtkmapfile, celltype=9, property='mediatype') + @pytest.mark.conformal @pytest.mark.vtk def test_fill_conformal_fL_0_005_vtk_large_sphere(tmp_path): diff --git a/test/smbjson/test_parser.F90 b/test/smbjson/test_parser.F90 index c7677b8c1..dfea5592a 100644 --- a/test/smbjson/test_parser.F90 +++ b/test/smbjson/test_parser.F90 @@ -115,6 +115,7 @@ integer function test_parser_read_conformal_volume() bind(C) result(err) character(len=*),parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'conformal.fdtd.json' type(parser_t) :: parser type(mesh_t) :: mesh + type(Parseador_t) :: problem logical :: found type(conformal_region_t), dimension(:), allocatable :: conformal_regions type(cell_region_t), dimension(:), allocatable :: cell_regions @@ -128,4 +129,8 @@ integer function test_parser_read_conformal_volume() bind(C) result(err) if (size(conformal_regions(1)%triangles) /= 24) err = err + 1 cell_regions = mesh%getCellRegions([5]) if (size(cell_regions(1)%intervals) /= 1) err = err + 1 -end function \ No newline at end of file + + problem = parser%readProblemDescription() + if (.not. associated(problem%conformalRegs%volumes)) err = err + 1 + if (size(problem%conformalRegs%volumes) /= 1) err = err + 1 +end function diff --git a/testData/cases/conformal_surface/conformal_surface_midcell.fdtd.json b/testData/cases/conformal_surface/conformal_surface_midcell.fdtd.json new file mode 100644 index 000000000..0d08f96e1 --- /dev/null +++ b/testData/cases/conformal_surface/conformal_surface_midcell.fdtd.json @@ -0,0 +1,72 @@ +{ + "format": "FDTD Input file", + "__comments": "Pseudo-1D plane wave reflecting from a two-sided conformal PEC sheet.", + "general": { + "timeStep": 1.5e-11, + "numberOfSteps": 600 + }, + "boundary": { + "xLower": {"type": "mur"}, + "xUpper": {"type": "mur"}, + "yLower": {"type": "periodic"}, + "yUpper": {"type": "periodic"}, + "zLower": {"type": "periodic"}, + "zUpper": {"type": "periodic"} + }, + "mesh": { + "grid": { + "numberOfCells": [16, 2, 2], + "steps": {"x": [0.01], "y": [0.01], "z": [0.01]} + }, + "coordinates": [ + {"id": 1, "relativePosition": [8.5, 0, 0]}, + {"id": 2, "relativePosition": [8.5, 1, 0]}, + {"id": 3, "relativePosition": [8.5, 2, 0]}, + {"id": 4, "relativePosition": [8.5, 0, 1]}, + {"id": 5, "relativePosition": [8.5, 1, 1]}, + {"id": 6, "relativePosition": [8.5, 2, 1]}, + {"id": 7, "relativePosition": [8.5, 0, 2]}, + {"id": 8, "relativePosition": [8.5, 1, 2]}, + {"id": 9, "relativePosition": [8.5, 2, 2]}, + {"id": 10, "relativePosition": [4, 1, 1]}, + {"id": 11, "relativePosition": [12, 1, 1]} + ], + "elements": [ + { + "id": 1, + "name": "mid-cell PEC sheet", + "type": "conformal", + "subtype": "surface", + "intervals": [], + "triangles": [ + [1, 2, 5], [1, 5, 4], + [2, 3, 6], [2, 6, 5], + [4, 5, 8], [4, 8, 7], + [5, 6, 9], [5, 9, 8] + ] + }, + {"id": 2, "name": "total-field box", "type": "cell", "intervals": [[[1, -1, -1], [15, 3, 3]]]}, + {"id": 3, "type": "node", "coordinateIds": [10]}, + {"id": 4, "type": "node", "coordinateIds": [11]} + ] + }, + "materials": [ + {"id": 1, "name": "PEC sheet", "type": "pec"} + ], + "materialAssociations": [ + {"materialId": 1, "elementIds": [1]} + ], + "sources": [ + { + "type": "planewave", + "magnitudeFile": "gauss.exc", + "elementIds": [2], + "direction": {"theta": 1.5707963267948966, "phi": 0.0}, + "polarization": {"theta": 0.0, "phi": 0.0} + } + ], + "probes": [ + {"name": "left", "type": "point", "field": "electric", "elementIds": [3], "directions": ["z"], "domain": {"type": "time"}}, + {"name": "right", "type": "point", "field": "electric", "elementIds": [4], "directions": ["z"], "domain": {"type": "time"}} + ] +} diff --git a/testData/cases/conformal_surface/gauss.exc b/testData/cases/conformal_surface/gauss.exc new file mode 100644 index 000000000..aedd7986b --- /dev/null +++ b/testData/cases/conformal_surface/gauss.exc @@ -0,0 +1,19 @@ +0.0000000000e+00 1.5229979745e-08 +1.5406665612e-10 1.1511984844e-06 +3.0813331225e-10 4.8071197776e-05 +4.6219996837e-10 1.1089284576e-03 +6.1626662449e-10 1.4132076009e-02 +7.7033328062e-10 9.9492937046e-02 +9.2439993674e-10 3.8695671651e-01 +1.0784665929e-09 8.3141217099e-01 +1.2325332490e-09 9.8685698017e-01 +1.3865999051e-09 6.4710671665e-01 +1.5406665612e-09 2.3441286820e-01 +1.6947332174e-09 4.6910584133e-02 +1.8487998735e-09 5.1861381773e-03 +2.0028665296e-09 3.1673873473e-04 +2.1569331857e-09 1.0686663194e-05 +2.3109998419e-09 1.9918971841e-07 +2.4650664980e-09 2.0510467715e-09 +2.6191331541e-09 1.1667238110e-11 +2.7731998102e-09 3.6664385395e-14 diff --git a/testData/cases/planewave/pw-with-periodic.fdtd.json b/testData/cases/planewave/pw-with-periodic.fdtd.json index 2d6a1759a..f1209a279 100644 --- a/testData/cases/planewave/pw-with-periodic.fdtd.json +++ b/testData/cases/planewave/pw-with-periodic.fdtd.json @@ -24,12 +24,20 @@ "coordinates": [ {"id": 1, "relativePosition": [3, 3, 1]}, {"id": 2, "relativePosition": [3, 3, 3]}, - {"id": 3, "relativePosition": [3, 3, 5]} + {"id": 3, "relativePosition": [3, 3, 5]}, + {"id": 4, "relativePosition": [1, 3, 3]}, + {"id": 5, "relativePosition": [5, 3, 3]}, + {"id": 6, "relativePosition": [3, 1, 3]}, + {"id": 7, "relativePosition": [3, 5, 3]} ], "elements": [ {"id": 1, "type": "node", "coordinateIds": [1]}, {"id": 2, "type": "node", "coordinateIds": [2]}, {"id": 3, "type": "node", "coordinateIds": [3]}, + {"id": 5, "type": "node", "coordinateIds": [4]}, + {"id": 6, "type": "node", "coordinateIds": [5]}, + {"id": 7, "type": "node", "coordinateIds": [6]}, + {"id": 8, "type": "node", "coordinateIds": [7]}, {"id": 4, "type": "cell", "name": "pw-box", "intervals": [ [ [-1, -1, 2], [7, 7, 4] ] ]} ] }, @@ -53,6 +61,10 @@ "probes": [ {"name": "before", "type": "point", "elementIds": [1], "directions": ["x"]}, {"name": "inbox", "type": "point", "elementIds": [2], "directions": ["x"]}, - {"name": "after", "type": "point", "elementIds": [3], "directions": ["x"]} + {"name": "after", "type": "point", "elementIds": [3], "directions": ["x"]}, + {"name": "x_lower_edge", "type": "point", "elementIds": [5], "directions": ["x"]}, + {"name": "x_upper_edge", "type": "point", "elementIds": [6], "directions": ["x"]}, + {"name": "y_lower_edge", "type": "point", "elementIds": [7], "directions": ["x"]}, + {"name": "y_upper_edge", "type": "point", "elementIds": [8], "directions": ["x"]} ] -} \ No newline at end of file +} diff --git a/testData/input_examples/conformal.fdtd.json b/testData/input_examples/conformal.fdtd.json index 251db668f..f80af68ec 100644 --- a/testData/input_examples/conformal.fdtd.json +++ b/testData/input_examples/conformal.fdtd.json @@ -78,7 +78,7 @@ ], "materialAssociations": [ - {"materialId": 2, "elementIds": [4]} + {"materialId": 2, "elementIds": [4, 5]} ], "sources": [ @@ -113,4 +113,4 @@ "elementIds": [2] } ] -} \ No newline at end of file +} From 11ca501bd7c7b3a93ef10dca8f738d37083e42f1 Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Tue, 11 Aug 2026 12:46:03 +0200 Subject: [PATCH 21/35] Fixes MTLN compilation --- src_json_parser/smbjson.F90 | 1192 ++++++++++++++++++------- src_main_pub/timestepping.F90 | 23 +- test/smbjson/smbjson_testingTools.F90 | 3 + 3 files changed, 859 insertions(+), 359 deletions(-) diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index ceb8aef91..88b9466cc 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -41,7 +41,7 @@ module smbjson_m contains procedure :: readProblemDescription procedure :: readMesh - + #ifdef CompileWithMTLN procedure :: readMTLN #endif @@ -75,6 +75,7 @@ module smbjson_m procedure, private :: getMatrixAt procedure, private :: getStrAt procedure, private :: existsAt + procedure, private :: dimensionAt procedure, private :: getDomain procedure, private :: buildPECPMCRegions procedure, private :: getMaterialAssociations @@ -111,6 +112,8 @@ module smbjson_m integer :: initialConnectorId = -1 integer :: endConnectorId = -1 integer :: containedWithinElementId = -1 + real(kind=RKIND), dimension(:), allocatable :: totalResistance + logical :: hasTotalResistance = .false. end type type, private :: domain_t @@ -127,7 +130,7 @@ function parser_ctor(filename) result(res) type(parser_t) :: res character(len=*), intent(in) :: filename res%filename = filename - + allocate(res%jsonfile) call res%jsonfile%initialize() if (res%jsonfile%failed()) then @@ -151,38 +154,38 @@ function parser_ctor(filename) result(res) function readProblemDescription(this) result (res) class(parser_t) :: this type(Parseador_t) :: res - integer :: stat + integer :: stat this%mesh = this%readMesh() this%matTable = IdChildTable_t(this%core, this%root, J_MATERIALS) this%elementTable = IdChildTable_t(this%core, this%root, J_MESH//'.'//J_ELEMENTS) - + call initializeProblemDescription(res) - + res%switches = this%readAdditionalArguments() - + ! Basics res%general = this%readGeneral() res%matriz = this%readMediaMatrix() res%despl = this%readGrid() res%front = this%readBoundary() - + ! Materials res%pecRegs = this%readPECRegions() res%pmcRegs = this%readPMCRegions() res%dielRegs = this%readDielectricRegions() res%lossyThinSurfs = this%readLossyThinSurfaces() - + ! Sources res%plnSrc = this%readPlanewaves() res%nodSrc = this%readNodalSources() - + ! Probes res%oldSonda = this%readProbes() res%sonda = this%readMoreProbes() res%BloquePrb = this%readBlockProbes() res%VolPrb = this%readVolumicProbes() - + ! Conformal elements res%conformalRegs = this%readConformalRegions() @@ -210,9 +213,9 @@ subroutine addCoordinates(mesh) integer :: id, i real, dimension(:), allocatable :: pos type(coordinate_t) :: c - integer :: numberOfCoordinates + integer :: numberOfCoordinates logical :: found - + call this%core%get(this%root, J_MESH//'.'//J_COORDINATES, jcs, found=found) if (found) then numberOfCoordinates = this%core%count(jcs) @@ -226,7 +229,7 @@ subroutine addCoordinates(mesh) end do end if end subroutine - + subroutine addElements(mesh) type(mesh_t), intent(inout) :: mesh character (len=:), allocatable :: elementType @@ -237,11 +240,11 @@ subroutine addElements(mesh) integer, dimension(:), allocatable :: coordIds integer :: numberOfElements logical :: found - + call this%core%get(this%root, J_MESH//'.'//J_ELEMENTS, jes, found=found) numberOfElements = this%core%count(jes) call res%allocateElements(100*numberOfElements) - + if (found) then do i = 1, numberOfElements call this%core%get_child(jes, i, je) @@ -323,7 +326,7 @@ function readTriangles(place, path) result(res) res(i)%vertices(j)%id = triangle(j) end do end do - + end function @@ -436,12 +439,12 @@ function readBoundary(this) result (res) type(json_value), pointer :: bdrs logical :: found character(len=*), parameter :: errorMsgInit = "ERROR reading boundary: " - + call this%core%get(this%root, J_BOUNDARY, bdrs, found) if (.not. found) then call WarnErrReport("Error reading boundary: " // J_BOUNDARY // " not found.", .true.) end if - + block bdrType = this%getStrAt(bdrs, J_BND_ALL//'.'//J_TYPE, found) if (found) then @@ -452,7 +455,7 @@ function readBoundary(this) result (res) return end if end block - + block character(len=*), dimension(6), parameter :: placeLabels = & [J_BND_XL, J_BND_XU, J_BND_YL, J_BND_YU, J_BND_ZL, J_BND_ZU] @@ -530,16 +533,16 @@ function readPMCRegions(this) result (res) function buildPECPMCRegions(this, matType) result(res) class(parser_t) :: this - character (len=*), intent(in) :: matType + character (len=*), intent(in) :: matType type(PECRegions_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs type(coords_t), dimension(:), pointer :: cs integer :: i - + mAs = this%getMaterialAssociations([matType], [J_ELEM_TYPE_CELL]) block type(coords_t), dimension(:), pointer :: emptyCoords - if (size(mAs) == 0) then + if (size(mAs) == 0) then allocate(emptyCoords(0)) call appendRegion(res%lins, res%nLins, res%nLins_max, emptyCoords) call appendRegion(res%surfs, res%nSurfs, res%nSurfs_max, emptyCoords) @@ -547,7 +550,7 @@ function buildPECPMCRegions(this, matType) result(res) return end if end block - + do i = 1, size(mAs) call this%matAssToCoords(cs, mAs(i), CELL_TYPE_LINEL) call appendRegion(res%lins, res%nLins, res%nLins_max, cs) @@ -573,13 +576,13 @@ subroutine appendRegion(resCoords, resNCoords, resNCoordsMax, cs) end do resNCoords = size(cs) resNCoordsMax = size(cs) - else + else allocate(auxCs(size(resCoords))) do i = 1, size(resCoords) auxCs(i) = resCoords(i) end do deallocate(resCoords) - + allocate(resCoords(size(auxCs) + size(cs))) resNCoords = size(resCoords) resNCoordsMax = size(resCoords) @@ -590,7 +593,7 @@ subroutine appendRegion(resCoords, resNCoords, resNCoordsMax, cs) resCoords(i + size(auxCs)) = cs(i) end do end if - end subroutine + end subroutine end function function readConformalRegions(this) result(res) @@ -608,19 +611,19 @@ function readConformalRegions(this) result(res) do i = 1, size(mAs) do j = 1, size(mAs(i)%elementIds) cR = this%mesh%getConformalRegion(mAs(i)%elementIds(j), found) - if (found) then + if (found) then tagName = this%buildTagName(mAs(i)%materialId, mAs(i)%elementIds(j)) - if (cR%type == REGION_TYPE_VOLUME) then + if (cR%type == REGION_TYPE_VOLUME) then call appendRegion(res%volumes, cR, tagName) end if - if (cR%type == REGION_TYPE_SURFACE) then + if (cR%type == REGION_TYPE_SURFACE) then call appendRegion(res%surfaces, cR, tagName) end if end if end do end do - contains + contains subroutine appendRegion(regions, region, tagName) type(ConformalPECElements_t), dimension(:), pointer :: regions type(conformal_region_t), intent(in) :: region @@ -630,13 +633,13 @@ subroutine appendRegion(regions, region, tagName) integer :: i logical :: is_valid character(len=256) :: validation_message - if (.not. associated(regions)) then + if (.not. associated(regions)) then allocate(regions(1)) regions(1)%triangles = region%triangles regions(1)%intervals = copyIntervals(region%intervals) regions(1)%tag = tagName call validateRegion(regions(1), region%type, tagName, is_valid, validation_message) - else + else allocate(aux(size(regions) + 1)) do i = 1, size(regions) aux(i) = regions(i) @@ -645,7 +648,7 @@ subroutine appendRegion(regions, region, tagName) aux(size(regions) + 1)%intervals = copyIntervals(region%intervals) aux(size(regions) + 1)%tag = tagName deallocate(regions) - + allocate(regions(size(aux))) do i = 1, size(aux) regions(i) = aux(i) @@ -689,11 +692,11 @@ function copyIntervals(intervals) result(res) function readDielectricRegions(this) result (res) class(parser_t), intent(in) :: this type(DielectricRegions_t) :: res - + call fillDielectricsOfCellType(res%vols, CELL_TYPE_VOXEL) call fillDielectricsOfCellType(res%surfs, CELL_TYPE_SURFEL) call fillDielectricsOfCellType(res%lins, CELL_TYPE_LINEL) - + res%nVols = size(res%vols) res%nSurfs = size(res%Surfs) res%nLins = size(res%Lins) @@ -705,14 +708,14 @@ function readDielectricRegions(this) result (res) subroutine fillDielectricsOfCellType(res, cellType) integer, intent(in) :: cellType type(dielectric_t), dimension(:), pointer :: res - + type(materialAssociation_t), dimension(:), allocatable :: mAs type(materialAssociation_t) :: mA type(cell_region_t) :: cR integer :: i, j integer :: nCs, nDielectrics - + mAs = this%getMaterialAssociations( & [J_MAT_TYPE_ISOTROPIC, J_MAT_TYPE_LUMPED]) if (size(mAs) == 0) then @@ -722,20 +725,20 @@ subroutine fillDielectricsOfCellType(res, cellType) ! Precounts nDielectrics = 0 - do i = 1, size(mAs) + do i = 1, size(mAs) if (containsCellRegionsWithType(mAs(i), cellType)) then nDielectrics = nDielectrics + 1 - end if + end if end do ! Fills allocate(res(nDielectrics)) - + if (nDielectrics == 0) return j = 0 mAs = this%getMaterialAssociations([J_MAT_TYPE_ISOTROPIC]) - do i = 1, size(mAs) + do i = 1, size(mAs) if (.not. containsCellRegionsWithType(mAs(i), cellType)) cycle j = j + 1 res(j) = readDielectric(mAs(i), cellType) @@ -762,7 +765,7 @@ function readDielectric(mA, cellType) result(res) res%n_c1p = 0 call this%matAssToCoords(res%c2p, mA, cellType) res%n_c2p = size(res%c2p) - + matPtr = this%matTable%getId(mA%materialId) ! Fills rest of dielectric data. res%sigma = this%getRealAt(matPtr%p, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0) @@ -790,17 +793,17 @@ function readLumped(mA, cellType) result(res) res%n_c1p = 0 call this%matAssToCoords(res%c2p, mA, cellType) res%n_c2p = size(res%c2p) - + matPtr = this%matTable%getId(mA%materialId) - + ! Get the model type model = this%getStrAt(matPtr%p, J_MAT_LUMPED_MODEL, found) if (.not. found) then write(errorMsg, '(A)') errorMsgInit, mA%materialId, " model not found." call WarnErrReport(errorMsg, .true.) end if - - ! Not really needed for resistor, inductor, or capacitor. + + ! Not really needed for resistor, inductor, or capacitor. ! But avoids error in lumped initialization. res%orient = 1 res%DiodOri = 1 @@ -851,7 +854,7 @@ logical function containsCellRegionsWithType(mA, cellType) type(materialAssociation_t), intent(in) :: mA integer :: e type(cell_region_t) :: cR - + do e = 1, size(mA%elementIds) cR = this%mesh%getCellRegion(mA%elementIds(e)) if (size(cellRegionToCoords(cR, cellType)) /= 0) then @@ -874,7 +877,7 @@ subroutine matAssToCoords(this, res, mA, cellType) type (cell_region_t) :: cR integer :: nCs integer :: e, jIni, jEnd - + ! Precount nCs = 0 do e = 1, size(mA%elementIds) @@ -893,7 +896,7 @@ subroutine matAssToCoords(this, res, mA, cellType) if (size(newCoords) == 0) cycle jEnd = jIni + size(newCoords) - 1 res(jIni:jEnd) = newCoords(:) - jIni = jEnd + 1 + jIni = jEnd + 1 end do end subroutine @@ -908,7 +911,7 @@ function readLossyThinSurfaces(this) result (res) type(coords_t), dimension(:), pointer :: cs mAs = this%getMaterialAssociations([J_MAT_TYPE_MULTILAYERED_SURFACE]) - + ! Precounts nLossySurfaces = 0 do i = 1, size(mAs) @@ -933,7 +936,7 @@ function readLossyThinSurfaces(this) result (res) res%cs(k) = readLossyThinSurface(mAs(i)) k = k + 1 end do - + contains function readLossyThinSurface(mA) result(res) type(materialAssociation_t), intent(in) :: mA @@ -944,7 +947,7 @@ function readLossyThinSurface(mA) result(res) type(json_value_ptr_t) :: mat type(json_value), pointer :: layer type(json_value), pointer :: layers - + call this%matAssToCoords(res%c, mA, CELL_TYPE_SURFEL) res%nc = size(res%c) @@ -1090,7 +1093,7 @@ function readField(jns) result(res) case default call WarnErrReport('Error reading current field source. Field label not recognized.', .true.) end select - + select case (this%getStrAt(jns, J_SRC_NS_HARDNESS, default=J_SRC_NS_HARDNESS_SOFT)) case (J_SRC_NS_HARDNESS_SOFT) res%isHard = .false. @@ -1099,7 +1102,7 @@ function readField(jns) result(res) case default call WarnErrReport('Error reading current field source. Hardness label not recognized.', .true.) end select - + res%isInitialValue = .false. res%nombre = trim(adjustl(this%getStrAt(jns, J_SRC_MAGNITUDE_FILE))) @@ -1267,11 +1270,11 @@ function readMoreProbes(this) result (res) end if ps = this%jsonValueFilterByKeyValues(allProbes, J_TYPE, validTypes) - + filtered_size = 0 do i=1, size(ps) fieldLbl = this%getStrAt(ps(i)%p, J_FIELD, default=J_FIELD_ELECTRIC) - if (isMoreProbe(ps(i)%p)) then + if (isMoreProbe(ps(i)%p)) then filtered_size = filtered_size + 1 end if end do @@ -1280,9 +1283,9 @@ function readMoreProbes(this) result (res) allocate(res%collection(filtered_size)) do i=1, size(ps) fieldLbl = this%getStrAt(ps(i)%p, J_FIELD, default=J_FIELD_ELECTRIC) - if (isMoreProbe(ps(i)%p)) then + if (isMoreProbe(ps(i)%p)) then probeLbl = this%getStrAt(ps(i)%p, J_TYPE, default=J_FIELD_ELECTRIC) - if (probeLbl == J_PR_TYPE_WIRE .or. probeLbl == J_PR_TYPE_POINT) then + if (probeLbl == J_PR_TYPE_WIRE .or. probeLbl == J_PR_TYPE_POINT) then res%collection(n) = readPointProbe(ps(i)%p) n = n + 1 else if (probeLbl == J_PR_TYPE_LINE) then @@ -1316,13 +1319,13 @@ logical function isCurrentProbeDefinedOnWire(p) integer :: i, j integer :: cId type(polyline_t) :: polyline - + fieldLabel = this%getStrAt(p, J_FIELD, found=found) if (.not. found .or. fieldLabel /= J_FIELD_CURRENT) then isCurrentProbeDefinedOnWire = .false. return end if - + block type(pixel_t) :: pixel integer, dimension(:), allocatable :: eIds @@ -1380,7 +1383,7 @@ function readLineProbe(p) result (res) logical :: elementIdsFound, nameFound outputName = this%getStrAt(p, J_NAME, found=nameFound) - if (.not. nameFound) then + if (.not. nameFound) then call WarnErrReport("ERROR: name entry not found for probe.", .true.) end if res%outputrequest = trim(adjustl(outputName)) @@ -1430,7 +1433,7 @@ function readPointProbe(p) result (res) logical :: elementIdsFound, typeLabelFound, dirLabelsFound, fieldLabelFound, nameFound outputName = this%getStrAt(p, J_NAME, found=nameFound) - if (.not. nameFound) then + if (.not. nameFound) then call WarnErrReport("Point probes must define a name.", .true.) end if res%outputrequest = trim(adjustl(outputName)) @@ -1459,15 +1462,15 @@ function readPointProbe(p) result (res) res%cordinates(1)%Xi = pixel%tag res%cordinates(1)%Yi = 0 res%cordinates(1)%Zi = 0 - res%cordinates(1)%Or = strToFieldType(fieldLabel) + res%cordinates(1)%Or = strToFieldType(fieldLabel) case (J_PR_TYPE_POINT) call this%core%get(p, J_PR_POINT_DIRECTIONS, dirLabelPtr, found=dirLabelsFound) if(dirLabelsFound) then dirLabels = buildDirLabels(dirLabelPtr) - else + else dirLabels = [J_DIR_X, J_DIR_Y, J_DIR_Z] end if - fieldLabel = this%getStrAt(p, J_FIELD, default=J_FIELD_ELECTRIC, found=fieldLabelFound) + fieldLabel = this%getStrAt(p, J_FIELD, default=J_FIELD_ELECTRIC, found=fieldLabelFound) allocate(res%cordinates(size(dirLabels))) do j = 1, size(dirLabels) res%cordinates(j)%tag = outputName @@ -1605,7 +1608,7 @@ function readBlockProbe(bp) result(res) if (size(cRs(1)%intervals) /= 1) then call WarnErrReport("Bulk current probe must be defined by a single cell interval.", .true.) - end if + end if cs = cellIntervalsToCoords(cRs(1)%intervals) res%i1 = cs(1)%xi @@ -1615,7 +1618,7 @@ function readBlockProbe(bp) result(res) res%k1 = cs(1)%zi res%k2 = cs(1)%ze res%nml = abs(cs(1)%Or) - if (res%nml == 0) then !DIR_NULL + if (res%nml == 0) then !DIR_NULL direction = this%getStrAt(bp, J_DIR) select case(trim(adjustl(direction))) case(J_DIR_X); res%nml = 1 !DIR_X @@ -1673,7 +1676,7 @@ function readVolumicProbes(this) result (res) ps = this%jsonValueFilterByKeyValues(probes, J_TYPE, [J_PR_TYPE_MOVIE]) if (size(ps) == 0) then - res = buildNoVolProbes() + res = buildNoVolProbes() return end if @@ -1721,12 +1724,12 @@ function readVolProbe(p) result(res) call this%core%get(compsPtr, component) res%cordinates(1) = cs(1) res%cordinates(1)%Or = buildVolProbeType(fieldType, component) - else + else component = J_DIR_M res%cordinates(1)%Or = buildVolProbeType(fieldType, component) endif res%len_cor = size(res%cordinates) - + res%outputrequest = trim(adjustl(this%getStrAt(p, J_NAME, default=" "))) call setDomain(res, this%getDomain(p, J_PR_DOMAIN)) end function @@ -1795,7 +1798,7 @@ subroutine setDomain(res, domain) end subroutine end function - subroutine appendLogSufix(fn) + subroutine appendLogSufix(fn) character(len=BUFSIZE), intent(inout) :: fn character (len=*), parameter :: SMBJSON_LOG_SUFFIX = "_log_" fn = trim(fn) // SMBJSON_LOG_SUFFIX @@ -1804,7 +1807,7 @@ subroutine appendLogSufix(fn) function readThinSlots(this) result (res) class(parser_t) :: this type(ThinSlots_t) :: res - + type(materialAssociation_t), dimension(:), allocatable :: mAs integer :: i @@ -1826,7 +1829,7 @@ function readThinSlot(mA) result(res) type(coords_t), dimension(:), pointer :: cs type(json_value_ptr_t) :: mat logical :: found - + mat = this%matTable%getId(mA%materialId) res%width = this%getRealAt(mat%p, J_MAT_THINSLOT_WIDTH, found) if (.not. found) then @@ -1850,7 +1853,7 @@ subroutine coordsToThinSlotComp(tc, cs) do i = 1, size(cs) nXYZ = (cs(i)%xe - cs(i)%xi + 1) * & (cs(i)%ye - cs(i)%yi + 1) * & - (cs(i)%ze - cs(i)%zi + 1) + (cs(i)%ze - cs(i)%zi + 1) nTgc = nTgc + nXYZ end do @@ -1942,7 +1945,7 @@ function readThinWire(cable) result(res) radius = this%getRealAt(m%p, J_MAT_WIRE_RADIUS, default = 0.0) resistance = this%getRealAt(m%p, J_MAT_WIRE_RESISTANCE, default = 0.0) inductance = this%getRealAt(m%p, J_MAT_WIRE_INDUCTANCE, default = 0.0) - res%rad = radius + res%rad = radius res%res = resistance res%ind = inductance res%dispfile = trim(adjustl(" ")) @@ -1978,7 +1981,7 @@ function readThinWire(cable) result(res) type(polyline_t) :: polyline character (len=MAX_LINE) :: tagLabel type(generator_description_t), dimension(:), allocatable :: genDesc - + polyline = this%mesh%getPolyline(cable%elementIds(1)) linels = this%mesh%polylineToLinels(polyline) @@ -2073,7 +2076,7 @@ function findSourcePositionInLinels(srcElemIds, linels) result(res) type(pixel_t) :: pixel integer :: res integer :: i - + pixel = this%mesh%nodeToPixel(this%mesh%getNode(srcElemIds(1))) do i = 1, size(linels) if (linels(i)%tag == pixel%tag) then @@ -2150,7 +2153,7 @@ logical function isThinWire(mA) if (.not. this%mesh%arePolylineSegmentsStructured(pl)) then call WarnErrReport("Thin wires must be defined by a structured polyline.", .true.) end if - + isThinWire = .true. end function end function @@ -2263,14 +2266,14 @@ function parseMaterialAssociation(this, matAss) result(res) logical :: found logical :: isMultiwire, isWireOrMultiwire character (len=BUFSIZE) :: errorMsg - + ! Fills material association. res%materialId = this%getIntAt(matAss, J_MATERIAL_ID, found) if (.not. found) call showLabelNotFoundError(J_MATERIAL_ID) - + res%elementIds = this%getIntsAt(matAss, J_ELEMENTIDS, found) if (.not. found) call showLabelNotFoundError(J_ELEMENTIDS) - + res%name = this%getStrAt(matAss, J_NAME, found) if (.not. found) then res%name = "" @@ -2283,12 +2286,22 @@ function parseMaterialAssociation(this, matAss) result(res) res%containedWithinElementId = & this%getIntAt(matAss, J_MAT_ASS_CAB_CONTAINED_WITHIN_ID, default=-1) + res%hasTotalResistance = this%existsAt(matAss, J_MAT_ASS_TOTAL_RESISTANCE) + if (res%hasTotalResistance) then + if (this%dimensionAt(matAss, J_MAT_ASS_TOTAL_RESISTANCE) == 0) then + allocate(res%totalResistance(1)) + res%totalResistance(1) = this%getRealAt(matAss, J_MAT_ASS_TOTAL_RESISTANCE) + else + res%totalResistance = this%getRealsAt(matAss, J_MAT_ASS_TOTAL_RESISTANCE) + end if + end if + ! Checks validity of associations. if (this%matTable%checkId(res%materialId) /= 0) then write(errorMsg, *) errorMsgInit, "material with id ", res%materialId, " not found." call WarnErrReport(errorMsg, .true.) endif - + if (size(res%elementIds) == 0) then write(errorMsg, *) errorMsgInit, J_ELEMENTIDS, "must not be empty." call WarnErrReport(errorMsg, .true.) @@ -2308,8 +2321,8 @@ function parseMaterialAssociation(this, matAss) result(res) this%getStrAt(mat%p, J_TYPE) == J_MAT_TYPE_SHIELDED_MULTIWIRE .or. & this%getStrAt(mat%p, J_TYPE) == J_MAT_TYPE_UNSHIELDED_MULTIWIRE isWireOrMultiwire = & - this%getStrAt(mat%p, J_TYPE) == J_MAT_TYPE_WIRE .or. isMultiwire - + this%getStrAt(mat%p, J_TYPE) == J_MAT_TYPE_WIRE .or. isMultiwire + if (isWireOrMultiwire) then if (res%initialTerminalId == -1 .or. res%endTerminalId == -1) then write(errorMsg, *), errorMsgInit, "wire associations must include terminals." @@ -2328,7 +2341,7 @@ function parseMaterialAssociation(this, matAss) result(res) write(errorMsg, *) errorMsgInit, "material with id ", res%materialId, " must be a connector." call WarnErrReport(errorMsg, .true.) end if - end if + end if if (res%endConnectorId /= -1) then if (.not. isMaterialIdOfType(res%endConnectorId, J_MAT_TYPE_CONNECTOR)) then write(errorMsg, *) errorMsgInit, "material with id ", res%materialId, " must be a connector." @@ -2337,7 +2350,7 @@ function parseMaterialAssociation(this, matAss) result(res) end if end if if (isMultiwire) then - ! Not defininign a containedWithinElementId is an error if the simulation is a 3D-FDTD one. + ! Not defininign a containedWithinElementId is an error if the simulation is a 3D-FDTD one. ! For pure MTLN mode it is not an error. ! if (res%containedWithinElementId == -1) then ! write(error_unit, *) errorMsgInit, "multiwire associations must include: ", J_MAT_ASS_CAB_CONTAINED_WITHIN_ID @@ -2347,8 +2360,8 @@ function parseMaterialAssociation(this, matAss) result(res) ! write(error_unit, *) errorMsgInit, "element with id ", res%containedWithinElementId, " not found." ! end if end if - - contains + + contains logical function isMaterialIdOfType(matId, matType) integer, intent(in) :: matId character (len=*), intent(in) :: matType @@ -2361,10 +2374,10 @@ logical function isMaterialIdOfType(matId, matType) mat = this%matTable%getId(matId) isMaterialIdOfType = this%getStrAt(mat%p, J_TYPE) == matType end function - + subroutine showLabelNotFoundError(label) character (len=*), intent(in) :: label - + end subroutine end function @@ -2374,7 +2387,7 @@ function getMaterialAssociations(this, materialTypes, elementLabels) result(res) type(materialAssociation_t), dimension(:), allocatable :: res type(json_value), pointer :: allMatAss character(len=*), intent(in), optional :: elementLabels(:) - + type(json_value), pointer :: mAPtr integer :: i, j, k, e integer :: nMaterials @@ -2390,7 +2403,7 @@ function getMaterialAssociations(this, materialTypes, elementLabels) result(res) call this%core%get_child(allMatAss, i, mAPtr) do j = 1, size(materialTypes) if (isAssociatedWithMaterial(mAPtr, trim(materialTypes(j)))) then - if (present(elementLabels)) then + if (present(elementLabels)) then if (isAssociatedWithElementLabel(mAPtr, elementLabels)) nMaterials = nMaterials + 1 else nMaterials = nMaterials + 1 @@ -2405,8 +2418,8 @@ function getMaterialAssociations(this, materialTypes, elementLabels) result(res) call this%core%get_child(allMatAss, i, mAPtr) do k = 1, size(materialTypes) if (isAssociatedWithMaterial(mAPtr, trim(materialTypes(k)))) then - if (present(elementLabels)) then - if (isAssociatedWithElementLabel(mAPtr, elementLabels)) then + if (present(elementLabels)) then + if (isAssociatedWithElementLabel(mAPtr, elementLabels)) then res(j) = this%parseMaterialAssociation(mAPtr) j = j+1 end if @@ -2418,11 +2431,11 @@ function getMaterialAssociations(this, materialTypes, elementLabels) result(res) end do end do - contains + contains logical function isAssociatedWithMaterial(mAPtr, materialType) type(json_value), pointer, intent(in) :: mAPtr character (len=*), intent(in) :: materialType - + type(materialAssociation_t) :: matAss type(json_value_ptr_t) :: mat @@ -2449,7 +2462,7 @@ logical function isAssociatedWithElementLabel(mAPtr, elementLabels) do i = 1, size(elementIds) elm = this%elementTable%getId(elementIds(i)) do j = 1, size(elementLabels) - if (elementLabels(j)(1:1) == "-") then + if (elementLabels(j)(1:1) == "-") then elementLabel = elementLabels(j)(2:) negative = .true. else @@ -2457,11 +2470,11 @@ logical function isAssociatedWithElementLabel(mAPtr, elementLabels) negative = .false. end if trimmedLabel = trim(elementLabel) - if (negative) then + if (negative) then isAssociatedWithElementLabel = isAssociatedWithElementLabel .and. (.not.(this%getStrAt(elm%p, J_TYPE, default="") == trimmedLabel) .and. & .not.(this%getStrAt(elm%p, J_SUBTYPE, default="") == trimmedLabel)) - else - isAssociatedWithElementLabel = isAssociatedWithElementLabel .or. (this%getStrAt(elm%p, J_TYPE, default="") == trimmedLabel .or. & + else + isAssociatedWithElementLabel = isAssociatedWithElementLabel .or. (this%getStrAt(elm%p, J_TYPE, default="") == trimmedLabel .or. & this%getStrAt(elm%p, J_SUBTYPE, default="") == trimmedLabel ) end if end do @@ -2476,7 +2489,7 @@ function buildTagName(this, matId, elementId) result(res) character(len=:), allocatable :: matName, layerName logical :: found character (len=BUFSIZE) :: errorMsg - + block type(json_value_ptr_t) :: mat mat = this%matTable%getId(matId) @@ -2488,7 +2501,7 @@ function buildTagName(this, matId, elementId) result(res) end if matName = adaptName(matName) end block - + block type(json_value_ptr_t) :: elem elem = this%elementTable%getId(elementId) @@ -2496,11 +2509,11 @@ function buildTagName(this, matId, elementId) result(res) if (.not. found) then deallocate(layerName) allocate(character(len(TAG_LAYER) + 12) :: layerName) - write(layerName, '(a,i0)') TAG_LAYER, elementId + write(layerName, '(a,i0)') TAG_LAYER, elementId end if layerName = adaptName(layerName) end block - + call checkIsValidName(matName) call checkIsValidName(layerName) res = trim(matName // '@' // layerName) @@ -2514,7 +2527,7 @@ subroutine checkIsValidName(str) write(errorMsg, *) "ERROR in name: ", str, & " contains invalid character ", notAllowedChars(i:i) call WarnErrReport(errorMsg, .true.) - end if + end if end do end subroutine @@ -2537,21 +2550,19 @@ function readMTLN(this) result (mtln_res) class(parser_t) :: this type(mtln_t) :: mtln_res type(fhash_tbl_t) :: elemIdToPosition, elemIdToCable, connIdToConnector - type(materialAssociation_t), dimension(:), allocatable :: wires, multiwires, cables + type(materialAssociation_t), dimension(:), allocatable :: cables class(cable_t), pointer :: ptr, read_cable integer :: i - - cables = this%getMaterialAssociations([ & J_MAT_TYPE_SHIELDED_MULTIWIRE//' ',& - J_MAT_TYPE_UNSHIELDED_MULTIWIRE ]) - ! spaces are needed to make strings have same length. + J_MAT_TYPE_UNSHIELDED_MULTIWIRE ,& + J_MAT_TYPE_WIRE//' ' ]) + ! spaces are needed to make strings have same length. ! Why? Because of FORTRAN! It only accepts fixed length strings for arrays. mtln_res%connectors => readConnectors() call addConnIdToConnectorMap(connIdToConnector, mtln_res%connectors) - if (size(cables) == 0) then - mtln_res%has_multiwires = .false. + if (size(cables) == 0) then mtln_res%time_step = 0 mtln_res%number_of_steps = 0 allocate(mtln_res%cables(0)) @@ -2560,13 +2571,21 @@ function readMTLN(this) result (mtln_res) return end if - mtln_res%has_multiwires = .true. - mtln_res%time_step = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_TIME_STEP) + block + type(materialAssociation_t), dimension(:), allocatable :: unshielded, shielded + unshielded = this%getMaterialAssociations([J_MAT_TYPE_UNSHIELDED_MULTIWIRE, J_MAT_TYPE_WIRE//' ']) + mtln_res%n_unsh = size(unshielded) + shielded = this%getMaterialAssociations([J_MAT_TYPE_SHIELDED_MULTIWIRE]) + mtln_res%n_sh = size(shielded) + end block + + + mtln_res%time_step = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_TIME_STEP, default=0.0_RKIND) mtln_res%number_of_steps = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_NUMBER_OF_STEPS) allocate (mtln_res%cables(size(cables))) do i = 1, size(cables) - read_cable => readMTLNCable(cables(i), this%readGrid()) + read_cable => readMTLNCable(cables(i)) call stopOnRepeteadName(read_cable, mtln_res%cables, i - 1) mtln_res%cables(i)%ptr => read_cable call addElemIdToCableMap(elemIdToCable, cables(i)%elementIds, i) @@ -2580,7 +2599,8 @@ function readMTLN(this) result (mtln_res) ptr%conductor_in_parent = assignConductorInParent(cables(i)) end select end do - + + mtln_res%wireGenerators = readWireGenerators() mtln_res%probes = readMultiwireProbes() mtln_res%networks = buildNetworks() @@ -2596,15 +2616,17 @@ function assignParentCable(cable, cables) result(res) mat = this%matTable%getId(cable%materialId) select case (this%getStrAt(mat%p, J_TYPE)) - case (J_MAT_TYPE_SHIELDED_MULTIWIRE) + case (J_MAT_TYPE_SHIELDED_MULTIWIRE) parentId = cable%containedWithinElementId if (parentId == -1) then res => null() - else + else res => getPointerToParentCable(cables, parentId) end if case (J_MAT_TYPE_UNSHIELDED_MULTIWIRE) res => null() + case (J_MAT_TYPE_WIRE) + res => null() case default call WarnErrReport('ERROR: Material type not recognized', .true.) end select @@ -2623,11 +2645,13 @@ function assignConductorInParent(cable) result(res) parentId = cable%containedWithinElementId if (parentId == -1) then res = 0 - else + else res = getParentPositionInMultiwire(parentId) end if case (J_MAT_TYPE_UNSHIELDED_MULTIWIRE) res = 0 + case (J_MAT_TYPE_WIRE) + res = 0 case default call WarnErrReport('ERROR: Material type not recognized', .true.) end select @@ -2638,7 +2662,7 @@ subroutine stopOnRepeteadName(cable, cables, n) type(cable_abstract_t), dimension(:), allocatable :: cables integer :: n, i logical :: unique - character (len=BUFSIZE) :: errorMsg + character(len=BUFSIZE) :: errorMsg unique = .true. do i = 1, n if (cable%name == cables(i)%ptr%name) then @@ -2657,13 +2681,13 @@ function readConnectors() result(res) logical :: materialsFound type(json_value_ptr_t), dimension(:), allocatable :: connectors integer :: i, j, id, n - + call this%core%get(this%root, J_MATERIALS, mat, materialsFound) if (.not. materialsFound) then allocate(res(0)) return end if - + connectors = this%jsonValueFilterByKeyValue(mat, J_TYPE, J_MAT_TYPE_CONNECTOR) allocate(res(size(connectors))) if (size(connectors) /= 0) then @@ -2720,22 +2744,26 @@ function buildNetworks() result(res) integer, dimension(:), allocatable :: elemIds type(json_value), pointer :: terminations_ini, terminations_end type(coordinate_t), dimension(:), allocatable :: networks_coordinates - type(subcircuit_t), dimension(:), allocatable :: subcircuits type(materialAssociation_t), dimension(:), allocatable :: cables - subcircuits = readSubcircuits() - + type(json_value_ptr_t) :: cableMat + character(len=:), allocatable :: cableType + logical :: isShieldedCable + allocate(aux_nodes(0)) allocate(networks_coordinates(0)) - cables = [ this%getMaterialAssociations([J_MAT_TYPE_WIRE]), & - this%getMaterialAssociations([J_MAT_TYPE_UNSHIELDED_MULTIWIRE]), & - this%getMaterialAssociations([J_MAT_TYPE_SHIELDED_MULTIWIRE]) ] + cables = [this%getMaterialAssociations([J_MAT_TYPE_UNSHIELDED_MULTIWIRE]), & + this%getMaterialAssociations([J_MAT_TYPE_SHIELDED_MULTIWIRE]) ,& + this%getMaterialAssociations([J_MAT_TYPE_WIRE]) ] do i = 1, size(cables) elemIds = cables(i)%elementIds + cableMat = this%matTable%getId(cables(i)%materialId) + cableType = this%getStrAt(cableMat%p, J_TYPE) + isShieldedCable = (cableType == J_MAT_TYPE_SHIELDED_MULTIWIRE) terminations_ini => getTerminationsOnSide(cables(i)%initialTerminalId) terminations_end => getTerminationsOnSide(cables(i)%endTerminalId) do j = 1, size(elemIds) - aux_nodes = [aux_nodes, buildNode(terminations_ini, TERMINAL_NODE_SIDE_INI, j, elemIds(j))] - aux_nodes = [aux_nodes, buildNode(terminations_end, TERMINAL_NODE_SIDE_END, j, elemIds(j))] + aux_nodes = [aux_nodes, buildNode(terminations_ini, TERMINAL_NODE_SIDE_INI, j, elemIds(j), isShieldedCable)] + aux_nodes = [aux_nodes, buildNode(terminations_end, TERMINAL_NODE_SIDE_END, j, elemIds(j), isShieldedCable)] call updateListOfNetworksCoordinates(networks_coordinates, elemIds(j)) end do @@ -2744,49 +2772,11 @@ function buildNetworks() result(res) do i = 1, size(networks_coordinates) - res(i) = buildNetwork(networks_coordinates(i), aux_nodes, subcircuits) + res(i) = buildNetwork(networks_coordinates(i), aux_nodes, i) end do end function - function readSubcircuits() result(res_ckt) - type(subcircuit_t), dimension(:), allocatable :: res_ckt - type(json_value), pointer :: subCkt, ckt - type(json_value_ptr_t) :: m - integer :: i, j, id - logical :: found - type(coordinate_t) :: ports_coordinate - type(node_t) :: node - integer, dimension(:), allocatable :: elemIds - - if (this%existsAt(this%root, J_SUBCIRCUITS)) then - call this%core%get(this%root, J_SUBCIRCUITS, subCkt) - allocate(res_ckt(this%core%count(subCkt))) - do i = 1, this%core%count(subCkt) - call this%core%get_child(subCkt, i, ckt) - res_ckt(i)%subcircuit_name = trim(adjustl(this%getStrAt(ckt,J_SUBCKT_NAME))) - - elemIds = this%getIntsAt(ckt, J_ELEMENTIDS) - node = this%mesh%getNode(elemIds(1)) - res_ckt(i)%nodeId = node%coordIds(1) - - id = this%getIntAt(ckt,J_MATERIAL_ID) - m = this%matTable%getId(this%getIntAt(ckt, J_MATERIAL_ID, found)) - if (.not. found) then - call WarnErrReport("Error reading material region: materialId label not found.", .true.) - end if - res_ckt(i)%model_file = this%getStrAt(m%p, J_SUBCKT_FILE) - res_ckt(i)%model_name = this%getStrAt(m%p, J_SUBCKT_NAME) - res_ckt(i)%numberOfPorts = this%getIntAt(m%p, J_SUBCKT_PORTS) - end do - - else - allocate(res_ckt(0)) - end if - - - end function - function buildListOfCoordinates(elemIds) result(res) integer, dimension(:), intent(in) :: elemIds integer :: i @@ -2797,37 +2787,91 @@ function buildListOfCoordinates(elemIds) result(res) end do end function - function countSubcircuitsInNetwork(network_coordinate,subcircuits) result (res) - type(coordinate_t) :: network_coordinate - type(subcircuit_t), dimension(:), intent(in) :: subcircuits - integer :: i, res - res = 0 - do i = 1, size(subcircuits) - if (network_coordinate == this%mesh%getCoordinate(subcircuits(i)%nodeId)) then - res = res + 1 - end if - end do - end function - - function buildNetwork(network_coordinate, aux_nodes, subcircuits) result(res) + function buildNetwork(network_coordinate, aux_nodes, network_index) result(res) type(coordinate_t) :: network_coordinate type(aux_node_t), dimension(:), intent(in) :: aux_nodes - type(subcircuit_t), dimension(:), intent(in) :: subcircuits + integer, intent(in) :: network_index + type(network_circuit_t), dimension(:), allocatable :: network_circuits type(aux_node_t), dimension(:), allocatable :: network_nodes integer, dimension(:), allocatable :: node_ids integer :: i, j type(terminal_network_t) :: res type(node_t) :: node - - network_nodes = filterNetworkNodes(network_coordinate, aux_nodes) + + network_nodes = filterNetworkNodesByCoordinate(aux_nodes, network_coordinate) node_ids = buildListOfNodeIds(network_nodes) + network_circuits = buildNetworkCircuits(network_nodes, node_ids, network_index) + + do i = 1, size(node_ids) + call res%add_connection(buildConnection(node_ids(i), network_nodes, network_circuits)) + end do + + + end function + + function buildNetworkCircuits(nodes, node_ids, network_index) result(res) + type(aux_node_t), dimension(:), intent(in) :: nodes + integer, dimension(:), intent(in) :: node_ids + integer, intent(in) :: network_index + type(aux_node_t), dimension(:), allocatable :: subckt_filtered_nodes, id_filtered_nodes + type(network_circuit_t), dimension(:), allocatable :: res + character(20) :: index + character(BUFSIZE) :: circuit_name + integer :: i, j, n + n = 0 + subckt_filtered_nodes = filterNetworkNodesByNetworkCircuit(nodes) + do i = 1, size(node_ids) + id_filtered_nodes = filterNetworkNodesById(subckt_filtered_nodes, node_ids(i)) + if (size(id_filtered_nodes) /= 0) n = n + 1 + end do + write(index, '(I0)') network_index + + allocate(res(n)) + n = 1 do i = 1, size(node_ids) - call res%add_connection(buildConnection(node_ids(i), network_nodes, subcircuits)) + id_filtered_nodes = filterNetworkNodesById(subckt_filtered_nodes, node_ids(i)) + if (size(id_filtered_nodes) /= 0) then + res(n)%nodeId = id_filtered_nodes(1)%cId + res(n)%model_name = trim(id_filtered_nodes(1)%node%termination%model%name) + res(n)%model_file = trim(id_filtered_nodes(1)%node%termination%model%file) + res(n)%circuit_name = 'subckt_' // trim(res(n)%model_file)//'_'// trim(adjustl(index)) + res(n)%number_of_nodes = readNumberOfNodes(res(n)%model_file,res(n)%model_name) + if (res(n)%number_of_nodes == 0) call WarnErrReport('Problem in network model. No ports detected', .true.) + n = n + 1 + end if end do + end function + function readNumberOfNodes(model_file, model_name) result(res) + character(len=*), intent(in) :: model_file + character(len=*), intent(in) :: model_name + integer :: res + character(len=BUFSIZE) :: line + character(len=:), allocatable :: line_trim + character(len=BUFSIZE), allocatable, dimension(:) :: words + integer :: io + res = 0 + open(unit=1, file = model_file, status='old', action='read', iostat=io) + if (io /= 0) return + do + read(1, '(A)', iostat=io) line + if (io /= 0) exit + line_trim = adjustl(line) + if (len_trim(line_trim) == 0) cycle + if (line_trim(1:1) == '*') cycle + call splitLineIntoWords(line_trim, words) + if (size(words) >= 2) then + if (to_upper(words(1)) == '.SUBCKT' .and. & + trim(words(2)) == trim(model_name)) then + res = size(words) -2 + exit + end if + end if + end do + close(1) end function function buildListOfNodeIds(network_nodes) result(res) @@ -2840,23 +2884,74 @@ function buildListOfNodeIds(network_nodes) result(res) end do end function - function filterNetworkNodes(network_coordinate, aux_nodes) result(res) - type(coordinate_t), intent(in) :: network_coordinate + function filterNetworkNodesByCoordinate(aux_nodes, network_coordinate) result(res) type(aux_node_t), dimension(:), intent(in) :: aux_nodes + type(coordinate_t), intent(in) :: network_coordinate type(aux_node_t), dimension(:), allocatable :: res - integer :: i - allocate(res(0)) + integer :: i, n + n = 0 + do i = 1, size(aux_nodes) + if (aux_nodes(i)%relPos == network_coordinate) then + n = n + 1 + end if + end do + allocate(res(n)) + n = 1 do i = 1, size(aux_nodes) if (aux_nodes(i)%relPos == network_coordinate) then - res = [res, aux_nodes(i)] + res(n) = aux_nodes(i) + n = n + 1 + end if + end do + end function + + function filterNetworkNodesById(aux_nodes, cId) result(res) + type(aux_node_t), dimension(:), intent(in) :: aux_nodes + integer, intent(in) :: cId + type(aux_node_t), dimension(:), allocatable :: res + integer :: i, n + n = 0 + do i = 1, size(aux_nodes) + if (aux_nodes(i)%cId == cId) then + n = n + 1 + end if + end do + allocate(res(n)) + n = 1 + do i = 1, size(aux_nodes) + if (aux_nodes(i)%cId == cId) then + res = aux_nodes(i) + n = n + 1 + end if + end do + end function + + function filterNetworkNodesByNetworkCircuit(aux_nodes) result(res) + type(aux_node_t), dimension(:), intent(in) :: aux_nodes + type(aux_node_t), dimension(:), allocatable :: res + integer :: i, n + n = 0 + do i = 1, size(aux_nodes) + if (aux_nodes(i)%node%termination%termination_type == TERMINATION_NETWORK) then + n = n + 1 + end if + end do + allocate(res(n)) + n = 1 + do i = 1, size(aux_nodes) + if (aux_nodes(i)%node%termination%termination_type == TERMINATION_NETWORK) then + res = aux_nodes(i) + n = n + 1 end if end do end function - function buildConnection(node_id, network_nodes, subcircuits) result (res) + + + function buildConnection(node_id, network_nodes, network_circuits) result (res) integer, intent(in) :: node_id type(aux_node_t), dimension(:), intent(in) :: network_nodes - type(subcircuit_t), dimension(:), intent(in) :: subcircuits + type(network_circuit_t), dimension(:), intent(in) :: network_circuits type(terminal_connection_t) :: res integer :: i do i = 1, size(network_nodes) @@ -2864,14 +2959,11 @@ function buildConnection(node_id, network_nodes, subcircuits) result (res) call res%add_node(network_nodes(i)%node) end if end do - do i = 1, size(subcircuits) - if (subcircuits(i)%nodeId == node_id) then - res%subcircuit = subcircuits(i) - res%has_subcircuit = .true. + do i = 1, size(network_circuits) + if (network_circuits(i)%nodeId == node_id) then + res%network_circuit = network_circuits(i) end if end do - - end function subroutine updateListOfConnectionIds(ids, id) @@ -2883,7 +2975,7 @@ subroutine updateListOfConnectionIds(ids, id) subroutine updateListOfNetworksCoordinates(coordinates, conductor_index) type(coordinate_t), dimension(:), allocatable, intent(inout) :: coordinates integer, intent(in) :: conductor_index - type (polyline_t) ::polyline + type(polyline_t) ::polyline integer :: i logical :: found_ini, found_end type(coordinate_t) :: coord_ini, coord_end @@ -2941,24 +3033,26 @@ function getTerminationsOnSide(terminationId) result(res) - function buildNode(termination_list, label, index, id) result(res) + function buildNode(termination_list, label, index, id, isShieldedCable) result(res) type(json_value), pointer :: termination_list, termination integer, intent(in) :: label integer, intent(in) :: index, id + logical, intent(in) :: isShieldedCable type(polyline_t) :: polyline type(aux_node_t) :: res integer :: cable_index integer :: stat + character(len=BUFSIZE) :: warningMsg call this%core%get_child(termination_list, index, termination) - + res%node%termination%termination_type = readTerminationType(termination) - res%node%termination%capacitance = readTerminationRLC(termination,J_MAT_TERM_CAPACITANCE, default = 1e22) - res%node%termination%resistance = readTerminationRLC(termination, J_MAT_TERM_RESISTANCE, default = 0.0) - res%node%termination%inductance = readTerminationRLC(termination, J_MAT_TERM_INDUCTANCE, default=0.0) + res%node%termination%capacitance = readTerminationRLC(termination,J_MAT_TERM_CAPACITANCE, default = 1e22_RKIND) + res%node%termination%resistance = readTerminationRLC(termination, J_MAT_TERM_RESISTANCE, default = 0.0_RKIND) + res%node%termination%inductance = readTerminationRLC(termination, J_MAT_TERM_INDUCTANCE, default=0.0_RKIND) res%node%termination%source = readGeneratorOnTermination(id,label) res%node%termination%model = readTerminationModel(termination) - res%node%termination%subcircuitPort = readTerminationSubcircuitPort(termination, default = -1) - + res%node%termination%networkCircuitNode = readTerminationnetworkCircuitNode(termination, default = -1) + res%node%side = label res%node%conductor_in_cable = index @@ -2974,7 +3068,186 @@ function buildNode(termination_list, label, index, id) result(res) res%cId = polyline%coordIds(ubound(polyline%coordIds,1)) res%relPos = this%mesh%getCoordinate(polyline%coordIds(ubound(polyline%coordIds,1))) end if + + if (res%node%termination%termination_type == TERMINATION_SHORT .and. .not. isShieldedCable) then + if (.not. terminalTouchesAnyEntity(res%cId, res%relPos, id)) then + res%node%termination%termination_type = TERMINATION_OPEN + write(warningMsg, '(A)') 'MTLN terminal on cable '//trim(res%node%belongs_to_cable%name)// & + ' (conductor '//trim(intToStr(index))//', side '//trim(sideToStr(label))//') is short but not touching any wire or non-vacuum material. Treating as open.' + call WarnErrReport(trim(warningMsg), .false.) + end if + end if + end if + end function + + logical function terminalTouchesAnyEntity(cId, relPos, ownElemId) + integer, intent(in) :: cId, ownElemId + type(coordinate_t), intent(in) :: relPos + terminalTouchesAnyEntity = touchesOtherWire(cId, ownElemId) .or. touchesNonVacuumMaterial(cId, relPos) + end function + + logical function touchesOtherWire(cId, ownElemId) + integer, intent(in) :: cId, ownElemId + type(materialAssociation_t), dimension(:), allocatable :: wireMAs + type(polyline_t) :: pl + logical :: found + integer :: i, j + + wireMAs = [this%getMaterialAssociations([J_MAT_TYPE_UNSHIELDED_MULTIWIRE]), & + this%getMaterialAssociations([J_MAT_TYPE_SHIELDED_MULTIWIRE]), & + this%getMaterialAssociations([J_MAT_TYPE_WIRE])] + + do i = 1, size(wireMAs) + do j = 1, size(wireMAs(i)%elementIds) + if (wireMAs(i)%elementIds(j) == ownElemId) cycle + pl = this%mesh%getPolyline(wireMAs(i)%elementIds(j), found) + if (found) then + if (any(pl%coordIds == cId)) then + touchesOtherWire = .true. + return + end if + end if + end do + end do + touchesOtherWire = .false. + end function + + logical function touchesNonVacuumMaterial(cId, relPos) + integer, intent(in) :: cId + type(coordinate_t), intent(in) :: relPos + type(json_value), pointer :: allMatAss, mAPtr + type(json_value_ptr_t) :: mat + type(materialAssociation_t) :: mA + character(len=:), allocatable :: matType + logical :: found + integer :: i, j, ix, iy, iz + + ix = nint(relPos%position(1)) + iy = nint(relPos%position(2)) + iz = nint(relPos%position(3)) + + call this%core%get(this%root, J_MATERIAL_ASSOCIATIONS, allMatAss, found) + if (.not. found) then + touchesNonVacuumMaterial = .false. + return end if + + do i = 1, this%core%count(allMatAss) + call this%core%get_child(allMatAss, i, mAPtr) + mA = this%parseMaterialAssociation(mAPtr) + mat = this%matTable%getId(mA%materialId) + matType = this%getStrAt(mat%p, J_TYPE) + + if (matType == J_MAT_TYPE_WIRE .or. & + matType == J_MAT_TYPE_UNSHIELDED_MULTIWIRE .or. & + matType == J_MAT_TYPE_SHIELDED_MULTIWIRE .or. & + matType == J_MAT_TYPE_TERMINAL .or. & + matType == J_MAT_TYPE_CONNECTOR) cycle + + if (matType == J_MAT_TYPE_ISOTROPIC) then + if (isVacuumIsotropic(mat%p)) cycle + end if + + do j = 1, size(mA%elementIds) + if (elementTouchesCoordinate(mA%elementIds(j), cId, ix, iy, iz)) then + touchesNonVacuumMaterial = .true. + return + end if + end do + end do + + touchesNonVacuumMaterial = .false. + end function + + logical function elementTouchesCoordinate(elemId, cId, ix, iy, iz) + integer, intent(in) :: elemId, cId, ix, iy, iz + type(node_t) :: node + type(polyline_t) :: pl + type(cell_region_t) :: cr + logical :: found + integer :: k + + node = this%mesh%getNode(elemId, found) + if (found) then + elementTouchesCoordinate = any(node%coordIds == cId) + return + end if + + pl = this%mesh%getPolyline(elemId, found) + if (found) then + elementTouchesCoordinate = any(pl%coordIds == cId) + return + end if + + cr = this%mesh%getCellRegion(elemId, found) + if (found) then + do k = 1, size(cr%intervals) + if (intervalContainsNode(cr%intervals(k), ix, iy, iz)) then + elementTouchesCoordinate = .true. + return + end if + end do + end if + + elementTouchesCoordinate = .false. + end function + + logical function intervalContainsNode(interval, ix, iy, iz) + type(cell_interval_t), intent(in) :: interval + integer, intent(in) :: ix, iy, iz + integer :: ax, bx, ay, by, az, bz + + ax = min(interval%ini%cell(1), interval%end%cell(1)) + bx = max(interval%ini%cell(1), interval%end%cell(1)) + ay = min(interval%ini%cell(2), interval%end%cell(2)) + by = max(interval%ini%cell(2), interval%end%cell(2)) + az = min(interval%ini%cell(3), interval%end%cell(3)) + bz = max(interval%ini%cell(3), interval%end%cell(3)) + + intervalContainsNode = (ix >= ax .and. ix <= bx .and. & + iy >= ay .and. iy <= by .and. & + iz >= az .and. iz <= bz) + end function + + logical function isVacuumIsotropic(matPtr) + type(json_value), pointer, intent(in) :: matPtr + real(kind=RKIND) :: relEps, relMu, sigmaE, sigmaM + real(kind=RKIND) :: absEps, absMu + real(kind=RKIND), parameter :: tol = 1.0e-12_RKIND + + relEps = this%getRealAt(matPtr, J_MAT_REL_PERMITTIVITY, default = 1.0_RKIND) + relMu = this%getRealAt(matPtr, J_MAT_REL_PERMEABILITY, default = 1.0_RKIND) + sigmaE = this%getRealAt(matPtr, J_MAT_ELECTRIC_CONDUCTIVITY, default = 0.0_RKIND) + sigmaM = this%getRealAt(matPtr, J_MAT_MAGNETIC_CONDUCTIVITY, default = 0.0_RKIND) + + absEps = this%getRealAt(matPtr, J_MAT_ABS_PERMITTIVITY, default = relEps*EPSILON_VACUUM) + absMu = this%getRealAt(matPtr, J_MAT_ABS_PERMEABILITY, default = relMu*MU_VACUUM) + + isVacuumIsotropic = abs(relEps - 1.0_RKIND) <= tol .and. & + abs(relMu - 1.0_RKIND) <= tol .and. & + abs(absEps - EPSILON_VACUUM) <= max(tol, tol*EPSILON_VACUUM) .and. & + abs(absMu - MU_VACUUM) <= max(tol, tol*MU_VACUUM) .and. & + abs(sigmaE) <= tol .and. abs(sigmaM) <= tol + end function + + function sideToStr(side) result(res) + integer, intent(in) :: side + character(len=:), allocatable :: res + if (side == TERMINAL_NODE_SIDE_INI) then + res = 'initial' + else if (side == TERMINAL_NODE_SIDE_END) then + res = 'end' + else + res = 'undefined' + end if + end function + + function intToStr(v) result(res) + integer, intent(in) :: v + character(len=:), allocatable :: res + character(len=20) :: tmp + write(tmp, '(I0)') v + res = trim(tmp) end function function readGeneratorOnTermination(id, label) result(res) @@ -2985,7 +3258,7 @@ function readGeneratorOnTermination(id, label) result(res) type(node_source_t) :: res integer :: polylineId - character (len=*), dimension(1), parameter :: validTypes = & + character(len=*), dimension(1), parameter :: validTypes = & [J_SRC_TYPE_GEN] call this%core%get(this%root, J_SOURCES, sources, found) @@ -2994,7 +3267,7 @@ function readGeneratorOnTermination(id, label) result(res) res%source_type = SOURCE_TYPE_UNDEFINED return end if - + genSrcs = this%jsonValueFilterByKeyValues(sources, J_TYPE, validTypes) if (size(genSrcs) == 0) then res%path_to_excitation = trim("") @@ -3008,7 +3281,7 @@ function readGeneratorOnTermination(id, label) result(res) integer, dimension(:), allocatable :: sourceElemIds type(polyline_t) :: poly integer :: i - + poly = this%mesh%getPolyline(id) do i = 1, size(genSrcs) if (.not. this%existsAt(genSrcs(i)%p, J_SRC_MAGNITUDE_FILE)) then @@ -3024,18 +3297,20 @@ function readGeneratorOnTermination(id, label) result(res) return end if if (this%getStrAt(genSrcs(i)%p, J_FIELD) /= J_FIELD_VOLTAGE .and. & - this%getStrAt(genSrcs(i)%p, J_FIELD) /= J_FIELD_CURRENT) then + this%getStrAt(genSrcs(i)%p, J_FIELD) /= J_FIELD_CURRENT) then call WarnErrReport('Only voltage and current generators are supported', .true.) res%path_to_excitation = trim("") res%source_type = SOURCE_TYPE_UNDEFINED return end if - if (isSourceAttachedToLine(genSrcs(i)%p, poly, id, label)) then - if (this%getStrAt(genSrcs(i)%p, J_FIELD) == J_FIELD_VOLTAGE) then - res%source_type = SOURCE_TYPE_VOLTAGE - else if (this%getStrAt(genSrcs(i)%p, J_FIELD) == J_FIELD_CURRENT) then + if (isSourceAttachedToLine(genSrcs(i)%p, poly, id, label)) then + if (this%getStrAt(genSrcs(i)%p, J_FIELD) == J_FIELD_VOLTAGE) then + res%source_type = SOURCE_TYPE_VOLTAGE + res%resistance = this%getRealAt(genSrcs(i)%p, J_SRC_RESISTANCE_GEN, default = 0.0_rkind) + else if (this%getStrAt(genSrcs(i)%p, J_FIELD) == J_FIELD_CURRENT) then res%source_type = SOURCE_TYPE_CURRENT + res%resistance = this%getRealAt(genSrcs(i)%p, J_SRC_RESISTANCE_GEN, default = 1.0e22_rkind) end if res%path_to_excitation = trim(this%getStrAt(genSrcs(i)%p, J_SRC_MAGNITUDE_FILE)) return @@ -3044,11 +3319,11 @@ function readGeneratorOnTermination(id, label) result(res) end do res%path_to_excitation = trim("") res%source_type = SOURCE_TYPE_UNDEFINED - end block + end block end function function isSourceAttachedToLine(src, polyline, id, label) result(res) - type(json_value), pointer, intent(in) :: src + type(json_value), pointer, intent(in) :: src type(polyline_t), intent(in) :: polyline integer, intent(in) :: id, label integer :: index @@ -3061,16 +3336,16 @@ function isSourceAttachedToLine(src, polyline, id, label) result(res) if (label == TERMINAL_NODE_SIDE_INI) then index = 1 - else if (label == TERMINAL_NODE_SIDE_END) then + else if (label == TERMINAL_NODE_SIDE_END) then index = ubound(polyline%coordIds,1) end if - - if (this%existsAt(src, J_SRC_ATTACHED_ID)) then + + if (this%existsAt(src, J_SRC_ATTACHED_ID)) then res = (srcCoord%coordIds(1) == polyline%coordIds(index)) .and. (this%getIntAt(src, J_SRC_ATTACHED_ID) == id) else res = (srcCoord%coordIds(1) == polyline%coordIds(index)) end if - + end function function readTerminationType(termination) result(res) @@ -3098,8 +3373,10 @@ function readTerminationType(termination) result(res) res = TERMINATION_LCsRp else if (type == J_MAT_TERM_TYPE_RLsCp) then res = TERMINATION_RLsCp - else if (type == J_MAT_TERM_TYPE_CIRCUIT) then + else if (type == J_MAT_TERM_TYPE_CIRCUIT) then res = TERMINATION_CIRCUIT + else if (type == J_MAT_TERM_TYPE_NETWORK) then + res = TERMINATION_NETWORK else res = TERMINATION_UNDEFINED end if @@ -3115,19 +3392,19 @@ function readTerminationModel(termination) result(res) end if if (this%existsAt(termination, J_MAT_TERM_MODEL_NAME)) then - res%model_name = this%getStrAt(termination, J_MAT_TERM_MODEL_NAME) + res%name = this%getStrAt(termination, J_MAT_TERM_MODEL_NAME) else - res%model_name = "" + res%name = "" end if end function - function readTerminationSubcircuitPort(termination, default) result(res) + function readTerminationnetworkCircuitNode(termination, default) result(res) type(json_value), pointer :: termination integer, intent(in) :: default integer :: res - if (this%existsAt(termination, J_MAT_TERM_MODEL_PORT)) then - res = this%getIntAt(termination, J_MAT_TERM_MODEL_PORT) + if (this%existsAt(termination, J_MAT_TERM_MODEL_NODE)) then + res = this%getIntAt(termination, J_MAT_TERM_MODEL_NODE) else res = default end if @@ -3137,8 +3414,8 @@ function readTerminationSubcircuitPort(termination, default) result(res) function readTerminationRLC(termination, label, default) result(res) type(json_value), pointer :: termination character(*), intent(in) :: label - real, intent(in) :: default - real :: res + real(kind=RKIND), intent(in) :: default + real(kind=RKIND) :: res if (this%existsAt(termination, label)) then res = this%getRealAt(termination, label) else @@ -3147,84 +3424,217 @@ function readTerminationRLC(termination, label, default) result(res) end function + function readWireGenerators() result(res) + type(parsed_generator_t), dimension(:), allocatable :: res + type(json_value), pointer :: sources + type(json_value_ptr_t), dimension(:), allocatable :: gens + logical :: found + integer :: i, n + type(linel_t), dimension(:), allocatable :: linels + type(polyline_t) :: pl + type(coordinate_t) :: coord + integer :: idAndPos(2), index + + call this%core%get(this%root, J_sources, sources, found) + if (.not. found) then + allocate(res(0)) + return + end if + gens = [this%jsonValueFilterByKeyValue(sources, J_TYPE, J_SRC_TYPE_GEN)] + + n = 0 + do i =1, size(gens) + if (IsGeneratorOnWire(gens(i)%p)) n = n + 1 + end do + allocate(res(n)) + if (n == 0) return + n = 1 + + do i = 1, size(gens) + if (IsGeneratorOnWire(gens(i)%p)) then + if (.not. this%existsAt(gens(i)%p, J_SRC_MAGNITUDE_FILE)) then + call WarnErrReport('magnitudeFile of source missing', .true.) + end if + + select case(this%getStrAt(gens(i)%p, J_FIELD)) + case (J_FIELD_VOLTAGE) + res(n)%generator_type = SOURCE_TYPE_VOLTAGE + res(n)%resistance = this%getRealAt(gens(i)%p, J_SRC_RESISTANCE_GEN, default = 0.0_rkind) + case (J_FIELD_CURRENT) + res(n)%generator_type = SOURCE_TYPE_CURRENT + res(n)%resistance = this%getRealAt(gens(i)%p, J_SRC_RESISTANCE_GEN, default = 1.0e22_rkind) + case default + call WarnErrReport('Field block of source of type generator must be current or voltage', .true.) + end select + res(n)%path_to_excitation = this%getStrAt(gens(i)%p, J_SRC_MAGNITUDE_FILE) + + idAndPos = getPolylineElemIdAndConductorOfGenerator(gens(i)%p) + call elemIdToCable%get(key(idAndPos(1)), value=index) + coord = GetCoordinateFromElemIdNode(gens(i)%p) + pl = this%mesh%getPolyline(idAndPos(1)) + linels = this%mesh%polylineToLinels(pl) + + res(n)%conductor = idAndPos(2) + res(n)%index = findIndexInLinels(coord, linels) + res(n)%attached_to_cable => mtln_res%cables(index)%ptr + + n = n + 1 + end if + end do + end function + + + + logical function IsGeneratorOnWire(p) + type(json_value), pointer :: p + character (len=:), allocatable :: fieldLabel + logical :: found + type(materialAssociation_t), dimension(:), allocatable :: mAs + integer :: i, j, k, l + integer :: cId + type(polyline_t) :: polyline + IsGeneratorOnWire = .false. + fieldLabel = this%getStrAt(p, J_FIELD, found=found) + if (.not. found .or. (fieldLabel /= J_FIELD_CURRENT .and. fieldLabel /= J_FIELD_VOLTAGE)) then + IsGeneratorOnWire = .false. + call WarnErrReport('field type not recognized', .true.) + return + end if + + block + type(pixel_t) :: pixel + integer, dimension(:), allocatable :: eIds + eIds = this%getIntsAt(p, J_ELEMENTIDS) + pixel = getPixelFromElementId(this%mesh, eIds(1)) + cId = pixel%tag + end block + + mAs = this%getMaterialAssociations([ & + J_MAT_TYPE_SHIELDED_MULTIWIRE//' ',& + J_MAT_TYPE_UNSHIELDED_MULTIWIRE ,& + J_MAT_TYPE_WIRE//' ' ]) + + do i = 1, size(mAs) + do l = 1, size(mAs(i)%elementIds) + polyline = this%mesh%getPolyline(mAs(i)%elementIds(l)) + do j = 2, size(polyline%coordIds)-1 + if (polyline%coordIds(j) == cId) then + if (fieldLabel == J_FIELD_VOLTAGE .and. (mAs(i)%matAssType == J_MAT_TYPE_WIRE .or. mAs(i)%matAssType == J_MAT_TYPE_UNSHIELDED_MULTIWIRE)) then + call WarnErrReport('Voltage generators cannot be defined on wire/unshieldedMultiwire interior points', .true.) + return + else if (fieldLabel == J_FIELD_CURRENT .and. mAs(i)%matAssType == J_MAT_TYPE_SHIELDED_MULTIWIRE) then + call WarnErrReport('Current generators cannot be defined on shieldedMultiwire interior points', .true.) + return + end if + IsGeneratorOnWire = .true. + return + end if + end do + end do + end do + + end function + function readMultiwireProbes() result(res) type(probe_t), dimension(:), allocatable :: res type(json_value_ptr_t), dimension(:), allocatable :: wire_probes type(json_value), pointer :: probes integer :: i, j, index, n integer, dimension(:), allocatable :: ids - type (coordinate_t) :: probe_node_coord + type(coordinate_t) :: probe_node_coord type(linel_t), dimension(:), allocatable :: linels type(polyline_t) :: pl class(cable_t), pointer :: cable_ptr, aux_ptr logical :: parent_cable_found = .false., found call this%core%get(this%root, J_PROBES, probes, found) - if (.not. found) then + if (.not. found) then allocate(res(0)) return end if wire_probes = [this%jsonValueFilterByKeyValue(probes, J_TYPE, J_PR_TYPE_WIRE)] - n = countOutputProbes(wire_probes) + + n = countNumberOfMultiwireProbes(wire_probes) allocate(res(n)) if (n == 0) return - n = 1 + + n = 0 do i = 1, size(wire_probes) - if (isProbeDefinedOnMultiwire(wire_probes(i)%p)) then + if (isProbeDefinedOnMultiwire(wire_probes(i)%p)) then ids = getPolylineElemIdOfMultiwireProbe(wire_probes(i)%p) - probe_node_coord = getProbeNodeCoordinate(wire_probes(i)%p) - + probe_node_coord = GetCoordinateFromElemIdNode(wire_probes(i)%p) + do j = 1, size(ids) + n = n + 1 res(n)%probe_name = readProbeName(wire_probes(i)%p) res(n)%probe_type = readProbeType(wire_probes(i)%p) res(n)%probe_position = probe_node_coord%position - + call elemIdToCable%get(key(ids(j)), value=index) pl = this%mesh%getPolyline(ids(j)) linels = this%mesh%polylineToLinels(pl) - res(n)%index = findProbeIndexInLinels(probe_node_coord, linels) + res(n)%index = findIndexInLinels(probe_node_coord, linels) cable_ptr => mtln_res%cables(index)%ptr ! Inside select type, cable_ptr is shielded_multiwire_t but parent_cable is cable_t ! Outside, cable_t does not have the parent_cable member - ! aux_ptr is used insted of cable_ptr => cable_ptr%parent_cable - parent_cable_found = .false. + ! aux_ptr is used insted of cable_ptr => cable_ptr%parent_cable + parent_cable_found = .false. do while (.not. parent_cable_found) select type(cable_ptr) type is(shielded_multiwire_t) if (associated(cable_ptr%parent_cable)) then - aux_ptr => cable_ptr%parent_cable + aux_ptr => cable_ptr%parent_cable else parent_cable_found = .true. end if type is(unshielded_multiwire_t) parent_cable_found = .true. end select - if (.not. parent_cable_found) then + if (.not. parent_cable_found) then cable_ptr => aux_ptr end if end do res(n)%attached_to_cable => cable_ptr - n = n + 1 end do end if end do end function - function getProbeNodeCoordinate(probe) result (res) - type(json_value), pointer, intent(in) :: probe + function GetCoordinateFromElemIdNode(object) result (res) + type(json_value), pointer, intent(in) :: object type(coordinate_t) :: res integer, dimension(:), allocatable :: elemIds type(node_t) :: node - - elemIds = this%getIntsAt(probe, J_ELEMENTIDS) + + elemIds = this%getIntsAt(object, J_ELEMENTIDS) node = this%mesh%getNode(elemIds(1)) res = this%mesh%getCoordinate(node%coordIds(1)) end function - function findProbeIndexInLinels(probe_coord, linels) result(res) - type(coordinate_t) :: probe_coord + function findIndexPositionInLinels(elemIds, linels) result(res) + integer, dimension(:), intent(in) :: elemIds + type(linel_t), dimension(:), intent(in) :: linels + type(pixel_t) :: pixel + integer :: res + integer :: i + + pixel = this%mesh%nodeToPixel(this%mesh%getNode(elemIds(1))) + do i = 1, size(linels) + if (linels(i)%tag == pixel%tag) then + res = i + return + end if + end do + + call WarnErrReport("Source could not be found in linels.", .true.) + + end function + + + function findIndexInLinels(coord, linels) result(res) + type(coordinate_t) :: coord type(linel_t), dimension(:), allocatable :: linels type(coordinate_t), dimension(:), allocatable :: linelCoords @@ -3237,63 +3647,22 @@ function findProbeIndexInLinels(probe_coord, linels) result(res) linelCoords(i)%position(2) = linels(i)%cell(2) linelCoords(i)%position(3) = linels(i)%cell(3) if (linels(i)%orientation < 0) then - or = abs(linels(i)%orientation) + or = abs(linels(i)%orientation) linelCoords(i)%position(or) = linelCoords(i)%position(or) + 1 end if end do or = linels(size(linels))%orientation linelCoords(size(linels)+1)%position = linelCoords(size(linels))%position linelCoords(size(linels)+1)%position(abs(or)) = linelCoords(i)%position(abs(or)) + merge(1,-1,or>0) - + allocate(distance_to_linel_cell(size(linelCoords))) do i = 1, size(linelCoords) - distance_to_linel_cell(i) = norm2(linelCoords(i)%position-probe_coord%position) + distance_to_linel_cell(i) = norm2(linelCoords(i)%position-coord%position) end do m = minloc(distance_to_linel_cell) res = m(1) end function - function countOutputProbes(probes) result(res) - type(json_value_ptr_t), dimension(:), allocatable :: probes - integer :: res - - character (len=:), allocatable :: fieldLabel - logical :: found - type(materialAssociation_t), dimension(:), allocatable :: mAs - integer :: i, j, k - integer :: cId - type(polyline_t) :: polyline - res = 0 - do k = 1, size(probes) - fieldLabel = this%getStrAt(probes(k)%p, J_FIELD, found=found) - if (.not. found .or. (fieldLabel /= J_FIELD_CURRENT .and. fieldLabel /= J_FIELD_VOLTAGE)) then - continue - end if - - block - type(pixel_t) :: pixel - integer, dimension(:), allocatable :: eIds - eIds = this%getIntsAt(probes(k)%p, J_ELEMENTIDS) - pixel = getPixelFromElementId(this%mesh, eIds(1)) - cId = pixel%tag - end block - - mAs = this%getMaterialAssociations([ & - J_MAT_TYPE_SHIELDED_MULTIWIRE//' ',& - J_MAT_TYPE_UNSHIELDED_MULTIWIRE ]) - - do i = 1, size(mAs) - polyline = this%mesh%getPolyline(mAs(i)%elementIds(1)) - do j = 1, size(polyline%coordIds) - if (polyline%coordIds(j) == cId) then - res = res + 1 - end if - end do - end do - end do - - end function - logical function isProbeDefinedOnMultiwire(p) type(json_value), pointer :: p character (len=:), allocatable :: fieldLabel @@ -3302,13 +3671,13 @@ logical function isProbeDefinedOnMultiwire(p) integer :: i, j integer :: cId type(polyline_t) :: polyline - + fieldLabel = this%getStrAt(p, J_FIELD, found=found) if (.not. found .or. (fieldLabel /= J_FIELD_CURRENT .and. fieldLabel /= J_FIELD_VOLTAGE)) then isProbeDefinedOnMultiwire = .false. return end if - + block type(pixel_t) :: pixel integer, dimension(:), allocatable :: eIds @@ -3319,7 +3688,8 @@ logical function isProbeDefinedOnMultiwire(p) mAs = this%getMaterialAssociations([ & J_MAT_TYPE_SHIELDED_MULTIWIRE//' ',& - J_MAT_TYPE_UNSHIELDED_MULTIWIRE ]) + J_MAT_TYPE_UNSHIELDED_MULTIWIRE ,& + J_MAT_TYPE_WIRE//' ' ]) do i = 1, size(mAs) polyline = this%mesh%getPolyline(mAs(i)%elementIds(1)) @@ -3334,6 +3704,20 @@ logical function isProbeDefinedOnMultiwire(p) isProbeDefinedOnMultiwire = .false. end function + function countNumberOfMultiwireProbes(probes) result(res) + type(json_value_ptr_t), dimension(:), allocatable :: probes + integer :: i + integer, dimension(:), allocatable :: ids + integer :: res + res = 0 + do i = 1, size(probes) + if (isProbeDefinedOnMultiwire(probes(i)%p)) then + ids = getPolylineElemIdOfMultiwireProbe(probes(i)%p) + res = res + size(ids) + end if + end do + end function + function getPolylineElemIdOfMultiwireProbe(p) result(res) type(json_value), pointer :: p type(polyline_t) :: polyline @@ -3341,7 +3725,7 @@ function getPolylineElemIdOfMultiwireProbe(p) result(res) type(materialAssociation_t), dimension(:), allocatable :: mAs integer :: i, j integer :: cId - + block type(pixel_t) :: pixel integer, dimension(:), allocatable :: eIds @@ -3352,7 +3736,8 @@ function getPolylineElemIdOfMultiwireProbe(p) result(res) mAs = this%getMaterialAssociations([ & J_MAT_TYPE_SHIELDED_MULTIWIRE//' ',& - J_MAT_TYPE_UNSHIELDED_MULTIWIRE ]) + J_MAT_TYPE_UNSHIELDED_MULTIWIRE ,& + J_MAT_TYPE_WIRE//' ' ]) allocate(res(0)) do i = 1, size(mAs) polyline = this%mesh%getPolyline(mAs(i)%elementIds(1)) @@ -3364,6 +3749,41 @@ function getPolylineElemIdOfMultiwireProbe(p) result(res) end do end function + function getPolylineElemIdAndConductorOfGenerator(p) result(res) + type(json_value), pointer :: p + type(polyline_t) :: polyline + integer :: res(2) + type(materialAssociation_t), dimension(:), allocatable :: mAs + integer :: i, j, k + integer :: cId + + block + type(pixel_t) :: pixel + integer, dimension(:), allocatable :: eIds + eIds = this%getIntsAt(p, J_ELEMENTIDS) + pixel = getPixelFromElementId(this%mesh, eIds(1)) + cId = pixel%tag + end block + + mAs = this%getMaterialAssociations([ & + J_MAT_TYPE_SHIELDED_MULTIWIRE//' ',& + J_MAT_TYPE_UNSHIELDED_MULTIWIRE ,& + J_MAT_TYPE_WIRE//' ' ]) + res(:) = 0 + do i = 1, size(mAs) + do k = 1, size(mAs(i)%elementIds) + polyline = this%mesh%getPolyline(mAs(i)%elementIds(k)) + do j = 2, size(polyline%coordIds)-1 + if (polyline%coordIds(j) == cId) then + res(1) = mAs(i)%elementIds(k) + res(2) = k + end if + end do + end do + end do + if (all(res(:) == 0)) call WarnErrReport('Generator does not belong to any wire, unshielded multiwire or shielded multiwire', .true.) + end function + function readProbeType(probe) result(res) type(json_value), pointer :: probe character(:), allocatable :: probe_type @@ -3385,9 +3805,9 @@ function readProbeType(probe) result(res) function readProbeName(probe) result(res) type(json_value), pointer :: probe character(:), allocatable :: res - if (this%existsAt(probe, J_NAME)) then + if (this%existsAt(probe, J_NAME)) then res = this%getStrAt(probe, J_NAME) - else + else res = "" end if end function @@ -3476,16 +3896,24 @@ function getCableElemIds(cable) result(res) end function - function readMTLNCable(j_cable, despl) result(res) + function readMTLNCable(j_cable) result(res) type(materialAssociation_t), intent(in) :: j_cable - type(Desplazamiento_t), intent(in) :: despl + type(Desplazamiento_t) :: mtln_despl class(cable_t), pointer :: res type(json_value_ptr_t) :: material integer :: nConductors logical :: found character(:), allocatable :: materialType + character(len=MAX_LINE) :: tagLabel + type(segment_t), dimension(:), allocatable :: cable_segments + real(kind=rkind), allocatable, dimension(:) :: cable_step_size + real(kind=rkind) :: totalLength material = this%matTable%getId(j_cable%materialId) materialType = this%getStrAt(material%p, J_TYPE) + mtln_despl = buildMTLNDespl() + cable_segments = buildSegments(j_cable, mtln_despl) + cable_step_size = buildStepSize(cable_segments, mtln_despl) + totalLength = sum(cable_step_size) select case (materialType) case (J_MAT_TYPE_SHIELDED_MULTIWIRE) allocate(shielded_multiwire_t :: res) @@ -3493,25 +3921,57 @@ function readMTLNCable(j_cable, despl) result(res) type is(shielded_multiwire_t) res%transfer_impedance = buildTransferImpedance(material) call assignPULProperties(res, material, size(j_cable%elementIds)) + if (j_cable%hasTotalResistance) then + res%resistance_per_meter = vectorToDiagonalMatrix( & + j_cable%totalResistance / totalLength) + end if end select - case (J_MAT_TYPE_UNSHIELDED_MULTIWIRE) + case (J_MAT_TYPE_UNSHIELDED_MULTIWIRE, J_MAT_TYPE_WIRE) allocate(unshielded_multiwire_t :: res) select type(res) type is(unshielded_multiwire_t) call assignInCellProperties(res, material, size(j_cable%elementIds)) + if (j_cable%hasTotalResistance) then + res%resistance_per_meter = vectorToDiagonalMatrix( & + j_cable%totalResistance / totalLength) + end if + write(tagLabel, '(i10)') j_cable%elementIds(1) + res%tag = trim(adjustl(tagLabel)) end select case default call WarnErrReport("Error reading cable: material type is not valid", .true.) end select - res%initial_connector => findConnectorWithId(j_cable%initialConnectorId) res%end_connector => findConnectorWithId(j_cable%endConnectorId) res%name = j_cable%name - res%segments = buildSegments(j_cable, despl) - res%step_size = buildStepSize(res%segments, despl) + res%segments = cable_segments + res%n_segments = size(cable_segments) + res%step_size = cable_step_size + + end function + function buildMTLNDespl() result(res) + type(Desplazamiento_t) :: despl, res + despl = this%readGrid() + res%nx = despl%nx + res%ny = despl%ny + res%nz = despl%nz + call copyAndEnlargeDes(res%desX, despl%desX, despl%mX2) + call copyAndEnlargeDes(res%desY, despl%desY, despl%mY2) + call copyAndEnlargeDes(res%desZ, despl%desZ, despl%mZ2) end function + subroutine copyAndEnlargeDes(copy, d, n) + real(kind=RKIND), dimension(:), pointer :: copy, d + integer :: n + allocate(copy(0:n-1)) + if (size(d) == 1) then + copy(:) = d(1) + else + copy = d + end if + end subroutine + function buildTransferImpedance(mat) result(res) type(json_value_ptr_t):: mat type(transfer_impedance_per_meter_t) :: res @@ -3528,10 +3988,10 @@ subroutine assignPULProperties(res, mat, n) type(shielded_multiwire_t), intent(inout) :: res type(json_value_ptr_t) :: mat integer, intent(in) :: n - real, dimension(:,:), allocatable :: null_matrix + real(kind=rkind), dimension(:,:), allocatable :: null_matrix logical :: found - allocate(null_matrix(n,n), source = 0.0) + allocate(null_matrix(n,n), source = 0.0_rkind) if (this%existsAt(mat%p, J_MAT_MULTIWIRE_INDUCTANCE)) then res%inductance_per_meter = this%getMatrixAt(mat%p, J_MAT_MULTIWIRE_INDUCTANCE,found) else @@ -3564,46 +4024,73 @@ subroutine assignInCellProperties(res, mat, n) type(json_value_ptr_t) :: mat type(json_value), pointer :: multipolarExpansionPtr integer, intent(in) :: n - real, dimension(:,:), allocatable :: null_matrix + integer :: m + real(kind=rkind), dimension(:,:), allocatable :: null_matrix logical :: found logical :: areFixedInCell logical :: areMultipolarInCell - - allocate(null_matrix(n,n), source = 0.0) + logical :: hasRadius + real(kind=RKIND), dimension(:), allocatable :: r, c + + allocate(null_matrix(n,n), source = 0.0_rkind) areFixedInCell = & this%existsAt(mat%p, J_MAT_MULTIWIRE_INDUCTANCE) .and. & this%existsAt(mat%p, J_MAT_MULTIWIRE_CAPACITANCE) - areMultipolarInCell = & + areMultipolarInCell = & this%existsAt(mat%p, J_MAT_MULTIWIRE_MULTIPOLAR_EXPANSION) - - if ((areFixedInCell .and. areMultipolarInCell) .or. & - (.not. areFixedInCell .and. .not. areMultipolarInCell) ) then - call WarnErrReport( & - "Unshielded multiwires in cell properties must be defined by fixed OR multipolarExpansions, but not both.", .true.) + hasRadius = & + this%existsAt(mat%p, J_MAT_WIRE_RADIUS) .and. & + this%getRealAt(mat%p, J_MAT_WIRE_RADIUS, default=0.0_RKIND) /= 0.0_RKIND + + if (.not. hasRadius) then + if ((areFixedInCell .and. areMultipolarInCell) .or. & + (.not. areFixedInCell .and. .not. areMultipolarInCell) ) then + call WarnErrReport( & + "Unshielded multiwires in cell properties must be defined by fixed OR multipolarExpansions, but not both.", .true.) + end if end if if (areFixedInCell) then res%cell_inductance_per_meter = this%getMatrixAt(mat%p, J_MAT_MULTIWIRE_INDUCTANCE,found) res%cell_capacitance_per_meter = this%getMatrixAt(mat%p, J_MAT_MULTIWIRE_CAPACITANCE,found) allocate(res%multipolar_expansion(0)) - else + else if (areMultipolarInCell) then res%cell_inductance_per_meter = null_matrix res%cell_capacitance_per_meter = null_matrix call this%core%get(mat%p, J_MAT_MULTIWIRE_MULTIPOLAR_EXPANSION, multipolarExpansionPtr) - allocate(res%multipolar_expansion(1)) + allocate(res%multipolar_expansion(1)) res%multipolar_expansion(1) = readMultipolarExpansion(multipolarExpansionPtr) + else if (hasRadius) then + res%cell_inductance_per_meter = null_matrix + res%cell_capacitance_per_meter = null_matrix + allocate(res%multipolar_expansion(0)) + res%radius = this%getRealAt(mat%p, J_MAT_WIRE_RADIUS, default=0.0_RKIND) end if + if (this%existsAt(mat%p, J_MAT_MULTIWIRE_RESISTANCE)) then - res%resistance_per_meter = & - vectorToDiagonalMatrix(this%getRealsAt(mat%p, J_MAT_MULTIWIRE_RESISTANCE,found)) + m = this%dimensionAt(mat%p, J_MAT_MULTIWIRE_RESISTANCE) + if (m == 0) then + allocate(r(1)) + r(1) = this%getRealAt(mat%p, J_MAT_MULTIWIRE_RESISTANCE,found) + else + r = this%getRealsAt(mat%p, J_MAT_MULTIWIRE_RESISTANCE,found) + end if + res%resistance_per_meter = vectorToDiagonalMatrix(r) else res%resistance_per_meter = null_matrix end if if (this%existsAt(mat%p, J_MAT_MULTIWIRE_CONDUCTANCE)) then - res%conductance_per_meter = vectorToDiagonalMatrix(this%getRealsAt(mat%p, J_MAT_MULTIWIRE_CONDUCTANCE,found)) + m = this%dimensionAt(mat%p, J_MAT_MULTIWIRE_CONDUCTANCE) + if (m == 0) then + allocate(c(1)) + c(1) = this%getRealAt(mat%p, J_MAT_MULTIWIRE_CONDUCTANCE,found) + else + c = this%getRealsAt(mat%p, J_MAT_MULTIWIRE_CONDUCTANCE,found) + end if + res%conductance_per_meter = vectorToDiagonalMatrix(c) else res%conductance_per_meter = null_matrix end if @@ -3615,11 +4102,11 @@ function readMultipolarExpansion(multipolarExpansionPtr) result (res) type(multipolar_expansion_t) :: res type(json_value), pointer :: jvPtr logical :: found - + call this%core%get(multipolarExpansionPtr, J_MAT_MULTIWIRE_ME_INNER_REGION_BOX, jvPtr, found) if (.not. found) then call WarnErrReport("Error reading multipolar expansion: innerRegionBox label not found", .true.) - end if + end if res%inner_region = readInnnerRegionBox(jvPtr) call this%core%get(multipolarExpansionPtr, J_MAT_MULTIWIRE_ME_ELECTRIC, jvPtr, found) @@ -3634,14 +4121,14 @@ function readMultipolarExpansion(multipolarExpansionPtr) result (res) end if res%magnetic = readFieldReconstruction(jvPtr) end function - + function readInnnerRegionBox(ptr) result(inner_region) type(json_value), pointer, intent(in) :: ptr type(box_2d_t) :: inner_region inner_region%min = this%getRealsAt(ptr, J_MAT_MULTIWIRE_ME_INNER_REGION_BOX_MIN) inner_region%max = this%getRealsAt(ptr, J_MAT_MULTIWIRE_ME_INNER_REGION_BOX_MAX) end function - + function readFieldReconstruction(ptr) result(res) type(json_value), pointer, intent(in) :: ptr type(field_reconstruction_t), dimension(:), allocatable :: res @@ -3649,7 +4136,7 @@ function readFieldReconstruction(ptr) result(res) type(json_value), pointer :: frPtr type(json_value), pointer :: absPtr type(json_value), pointer :: abPtr - + integer :: i, j logical :: found @@ -3667,14 +4154,14 @@ function readFieldReconstruction(ptr) result(res) end if allocate(res(j)%ab(this%core%count(absPtr))) do i = 1, size(res(j)%ab) - call this%core%get_child(absPtr, i, abPtr) + call this%core%get_child(absPtr, i, abPtr) call this%core%get(abPtr, '(1)', res(j)%ab(i)%a) call this%core%get(abPtr, '(2)', res(j)%ab(i)%b) end do end do end function - + function buildSegments(j_cable, despl) result(res) type(materialAssociation_t), intent(in) :: j_cable type(Desplazamiento_t), intent(in) :: despl @@ -3684,8 +4171,10 @@ function buildSegments(j_cable, despl) result(res) type(linel_t), dimension(:), allocatable :: linels type(coordinate_t) :: coord integer :: i,j, prevOr + type(polyline_t) :: temp elemIds = j_cable%elementIds - linels = this%mesh%polylineToLinels(this%mesh%getPolyline(elemIds(1))) + temp = this%mesh%getPolyline(elemIds(1)) + linels = this%mesh%polylineToLinels(temp) prevOr = 0 allocate(res(size(linels))) do i = 1, size(linels) @@ -3693,16 +4182,25 @@ function buildSegments(j_cable, despl) result(res) res(i)%y = linels(i)%cell(2) res(i)%z = linels(i)%cell(3) res(i)%orientation = linels(i)%orientation - if (prevOr == abs(res(i)%orientation)) then + if (prevOr == abs(res(i)%orientation)) then res(i)%dualBox = res(i-1)%dualBox - else + res(i)%d1 = res(i-1)%d1 + res(i)%d2 = res(i-1)%d2 + else select case(abs(res(i)%orientation)) case(DIR_X) res(i)%dualBox = getdualBoxYZ(res(i), despl) + res(i)%d1 = despl%desY(res(i)%y-1) + res(i)%d2 = despl%desZ(res(i)%z-1) case(DIR_Y) res(i)%dualBox = getdualBoxZX(res(i), despl) + res(i)%d1 = despl%desZ(res(i)%z-1) + res(i)%d2 = despl%desX(res(i)%x-1) case(DIR_Z) res(i)%dualBox = getdualBoxXY(res(i), despl) + res(i)%d1 = despl%desX(res(i)%x-1) + res(i)%d2 = despl%desY(res(i)%y-1) + end select end if prevOr = abs(res(i)%orientation) @@ -3762,7 +4260,7 @@ function getdualBoxZX(segment, despl) result (res) function buildStepSize(segments, despl) result(res) type(segment_t), dimension(:), allocatable :: segments type(Desplazamiento_t), intent(in) :: despl - real, allocatable, dimension(:) :: res + real(kind=rkind), allocatable, dimension(:) :: res integer :: i, or allocate(res(size(segments))) do i = 1, size(segments) @@ -3803,17 +4301,17 @@ function readTransferImpedance(z) result(res) else if (direction == "both") then res%direction = TRANSFER_IMPEDANCE_DIRECTION_BOTH end if - + block type(json_value), pointer :: poles, residues, p, r integer :: i, n real :: read_value - if (this%existsAt(z, J_MAT_TRANSFER_IMPEDANCE_POLES)) then + if (this%existsAt(z, J_MAT_TRANSFER_IMPEDANCE_POLES)) then n = this%getIntAt(z, J_MAT_TRANSFER_IMPEDANCE_NUMBER_POLES) allocate(res%poles(n),res%residues(n)) call this%core%get(z, J_MAT_TRANSFER_IMPEDANCE_POLES, poles) call this%core%get(z, J_MAT_TRANSFER_IMPEDANCE_RESIDUES, residues) - do i = 1, n + do i = 1, n call this%core%get_child(poles, i, p) call this%core%get(p, '(1)', read_value) res%poles(i)%re = read_value @@ -3826,10 +4324,10 @@ function readTransferImpedance(z) result(res) call this%core%get(r, '(2)', read_value) res%residues(i)%im = read_value end do - else + else allocate(res%poles(0),res%residues(0)) end if - + end block end function @@ -3901,7 +4399,7 @@ function getLogicalAt(this, place, path, found, default) result(res) logical, intent(out), optional :: found logical, optional :: default logical :: localFound - + call this%core%get(place, path, res, localFound, default) if (present(found)) then found = localFound @@ -3919,7 +4417,7 @@ function getIntAt(this, place, path, found, default) result(res) logical, intent(out), optional :: found integer, optional :: default logical :: localFound - + call this%core%get(place, path, res, localFound, default) if (present(found)) then found = localFound @@ -3935,7 +4433,7 @@ function getIntsAt(this, place, path, found) result(res) character(len=*) :: path logical, intent(out), optional :: found logical :: localFound - + call this%core%get(place, path, res, localFound) if (present(found)) then found = localFound @@ -4013,7 +4511,7 @@ function getStrAt(this, place, path, found, default) result(res) logical, intent(out), optional :: found character (len=*), optional :: default logical :: localFound - + call this%core%get(place, path, res, localFound, default) if (present(found)) then found = localFound @@ -4030,6 +4528,14 @@ function existsAt(this, place, path) result(res) call this%core%info(place, path, found=res) end function + function dimensionAt(this, place, path) result(res) + integer :: res + class(parser_t) :: this + type(json_value), pointer :: place + character(len=*) :: path + call this%core%info(place, path, n_children=res) + end function + function jsonValueFilterByKeyValues(this, srcs, key, values) result (res) class(parser_t) :: this type(json_value_ptr_t), dimension(:), allocatable :: res @@ -4115,5 +4621,5 @@ function getSingleVolumeInElementsIds(this, pw) result (res) end if end function -#endif +#endif end module diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index aebca4c7e..86cac13fa 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -298,9 +298,8 @@ subroutine launch_mtln_simulation(this, mtln_parsed, nEntradaRoot, layoutnumber) character (len=*), intent(in) :: nEntradaRoot integer (kind=4), intent(in) :: layoutnumber - call solveMTLNProblem(mtln_parsed) - call reportSimulationEnd(layoutnumber) - call FlushMTLNObservationFiles(nEntradaRoot, mtlnProblem = .true.) + call solveMTLNProblem(mtln_parsed, nEntradaRoot) + call reportSimulationEnd(layoutnumber) end subroutine #endif @@ -1273,7 +1272,10 @@ subroutine initializeWires() call MPI_Barrier(SUBCOMM_MPI,ierr) #endif write(dubuf,*) 'Init MTLN Wires...'; call print11(this%control%layoutnumber,dubuf) - call InitWires_mtln(this%sgg,Ex,Ey,Ez,Idxh,Idyh,Idzh,this%eps0, this%mu0, this%mtln_parsed,this%thereAre%MTLNbundles) + call InitWires_mtln(this%sgg,Ex,Ey,Ez, & + this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz, & + this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & + this%eps0, this%mu0, this%mtln_parsed,this%thereAre%MTLNbundles, dtcritico) #else write(buff,'(a)') 'WIR_ERROR: Executable was not compiled with MTLN modules.' #endif @@ -2888,13 +2890,7 @@ subroutine solver_advanceWiresE(this) if (this%control%wirecrank) then call AdvanceWiresEcrank(this%sgg, this%n, this%control%layoutnumber,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic) else -#ifdef CompileWithMTLN - if (this%mtln_parsed%has_multiwires) then - write(buff, *) 'ERROR: Multiwires in simulation but -mtlnwires flag has not been selected' - call WarnErrReport(buff) - end if -#endif - call AdvanceWiresE(this%sgg,this%n, this%control%layoutnumber,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic,this%control%experimentalVideal,this%control%wirethickness,this%eps0,this%mu0) + call AdvanceWiresE(this%sgg,this%n, this%control%layoutnumber,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic,this%control%experimentalVideal,this%control%wirethickness,this%eps0,this%mu0) endif endif endif @@ -3020,11 +3016,6 @@ subroutine solver_end(this) if (this%thereAre%Observation) THEN call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.TRUE.) call CloseObservationFiles(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%singlefilewrite,this%initialtimestep,this%lastexecutedtime,this%control%resume) !dump the remaining to disk -#ifdef CompileWithMTLN - if (this%control%use_mtln_wires) then - call FlushMTLNObservationFiles(this%control%nentradaroot, mtlnProblem = .false.) - end if -#endif endif if (this%thereAre%FarFields) then diff --git a/test/smbjson/smbjson_testingTools.F90 b/test/smbjson/smbjson_testingTools.F90 index 13582c394..14838ddbc 100644 --- a/test/smbjson/smbjson_testingTools.F90 +++ b/test/smbjson/smbjson_testingTools.F90 @@ -1,5 +1,8 @@ module smbjson_testingTools use NFDETypes_extension_m +#ifdef CompileWithMTLN + use mtln_types_m +#endif implicit none character(len=*), parameter :: PATH_TO_TEST_DATA = 'testData/' From e0d17858746c9a20cc85b529cd18c7a5aab55a86 Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Wed, 12 Aug 2026 12:37:20 +0200 Subject: [PATCH 22/35] Refactor conformal.fdtd.json and add new input examples - Updated the triangles in conformal.fdtd.json for better clarity and organization. - Introduced a new input example conformal_cell_label.fdtd.json with a basic cell structure. - Added another input example mixed_sign_surface_interval.fdtd.json demonstrating a mixed sign surface interval. --- src_conformal/CMakeLists.txt | 2 +- src_conformal/conformal.F90 | 355 +- src_json_parser/cells.F90 | 19 +- src_json_parser/smbjson.F90 | 562 ++- src_main_pub/fdetypes.F90 | 16 +- src_main_pub/preprocess_geom.F90 | 22 +- src_main_pub/semba_fdtd.F90 | 3 +- test/conformal/conformal_tests.h | 2 + test/conformal/test_geometry.F90 | 93 + test/pyWrapper/test_full_system.py | 9 +- test/pyWrapper/test_integration.py | 51 +- test/smbjson/smbjson_tests.h | 7 +- test/smbjson/test_cells.F90 | 11 +- test/smbjson/test_parser.F90 | 37 + .../Conductors_50ohm_terminals.fdtd.json | 108 +- ...nductors_Holland_50ohm_terminals.fdtd.json | 108 +- testData/cases/conformal/conformal.fdtd.json | 136 +- .../conformal_fL_0.15_sphere_rcs.fdtd.json | 8 +- .../conformal_fL_sphere_rcs.fdtd.json | 8 +- .../conformal_sphere_1mm_rcs_delta.fdtd.json | 86 +- .../conformal_str_sphere_rcs.fdtd.json | 3596 ++++++++--------- .../conformal/structured_sphere.fdtd.json | 303 -- ...mal_impedance_cylinder_conformal.fdtd.json | 80 +- ...mal_impedance_cylinder_staircase.fdtd.json | 1132 +++--- testData/input_examples/conformal.fdtd.json | 12 +- .../conformal_cell_label.fdtd.json | 14 + .../mixed_sign_surface_interval.fdtd.json | 13 + 27 files changed, 3650 insertions(+), 3143 deletions(-) delete mode 100644 testData/cases/conformal/structured_sphere.fdtd.json create mode 100644 testData/input_examples/conformal_cell_label.fdtd.json create mode 100644 testData/input_examples/mixed_sign_surface_interval.fdtd.json diff --git a/src_conformal/CMakeLists.txt b/src_conformal/CMakeLists.txt index 0d91adb33..fa541ce3f 100644 --- a/src_conformal/CMakeLists.txt +++ b/src_conformal/CMakeLists.txt @@ -8,4 +8,4 @@ add_library(conformal "conformal.F90" ) -target_link_libraries(conformal PRIVATE semba-types fhash) +target_link_libraries(conformal PRIVATE semba-types semba-reports fhash) diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index 738659098..fc18eb529 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -1,5 +1,6 @@ module conformal_m + use Report_m, only: WarnErrReport use geometry_m use cell_map_m use NFDETypes_m, only: ConformalPECRegions_t, ConformalPECElements_t, ConformalMedia_t, & @@ -8,16 +9,29 @@ module conformal_m real (kind=rkind), PARAMETER :: EDGE_RATIO_EQ_TOLERANCE = 1e-5 real (kind=rkind), PARAMETER :: FACE_RATIO_EQ_TOLERANCE = 1e-3 + real, parameter :: TOPOLOGY_TOLERANCE = 1.0e-5 + + type :: oriented_edge_t + real, dimension(3) :: first + real, dimension(3) :: second + end type oriented_edge_t + + type :: rectangle_key_t + integer, dimension(3) :: cell + integer :: face + end type rectangle_key_t contains function buildSideMaps(elements) result(res) type(ConformalPECElements_t), dimension(:), pointer, intent(in) :: elements type(side_tris_map_t), dimension(:), allocatable :: res + type(ConformalPECElements_t) :: canonical_element integer :: i allocate(res(size(elements))) do i = 1, size(elements) - call buildSideMap(res(i), elements(i)%triangles) + canonical_element = canonicalClosedSurfaceOrientation(elements(i)) + call buildSideMap(res(i), canonical_element%triangles) end do end function @@ -75,14 +89,29 @@ subroutine validateConformalRegion(element, require_closed, is_valid, message) integer(kind=4), dimension(3) :: cell integer :: i, face character(len=160) :: detail + logical :: has_intervals, has_triangles is_valid = .true. message = '' - call validateSurfaceTopology(element%triangles, is_valid, message) - if (.not. is_valid) return - if (require_closed) then - call validateClosedSurfaceTopology(element%triangles, is_valid, message) + has_intervals = .false. + has_triangles = .false. + if (allocated(element%intervals)) has_intervals = size(element%intervals) > 0 + if (allocated(element%triangles)) has_triangles = size(element%triangles) > 0 + if (.not. has_intervals .and. .not. has_triangles) then + message = 'conformal region has no surface patches' + is_valid = .false. + return + end if + if (has_intervals) then + call validateCombinedSurfaceTopology(element, require_closed, is_valid, message) + if (.not. is_valid) return + else + call validateSurfaceTopology(element%triangles, is_valid, message) if (.not. is_valid) return + if (require_closed) then + call validateClosedSurfaceTopology(element%triangles, is_valid, message) + if (.not. is_valid) return + end if end if call buildCellMap(cell_map, element) @@ -216,6 +245,318 @@ subroutine validateClosedSurfaceTopology(triangles, is_valid, message) end do end subroutine validateClosedSurfaceTopology + subroutine validateCombinedSurfaceTopology(element, require_closed, is_valid, message) + type(ConformalPECElements_t), intent(in) :: element + logical, intent(in) :: require_closed + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + type(oriented_edge_t), dimension(:), allocatable :: raw_edges, atomic_edges + type(rectangle_key_t), dimension(:), allocatable :: rectangle_keys + integer :: triangle_index, edge_index, interval_index, rectangle_count, raw_count, atomic_count + integer :: max_raw_edges, ntriangles + + is_valid = .true. + message = '' + ntriangles = 0 + if (allocated(element%triangles)) ntriangles = size(element%triangles) + + call countAndValidateRectangles(element%intervals, rectangle_count, is_valid, message) + if (.not. is_valid) return + if (ntriangles + rectangle_count == 0) then + message = 'conformal region has no surface patches' + is_valid = .false. + return + end if + + max_raw_edges = 3*ntriangles + 4*rectangle_count + allocate(raw_edges(max_raw_edges), rectangle_keys(rectangle_count)) + raw_count = 0 + do triangle_index = 1, ntriangles + do edge_index = 1, 3 + call appendRawEdge(raw_edges, raw_count, & + element%triangles(triangle_index)%vertices(edge_index)%position, & + element%triangles(triangle_index)%vertices(mod(edge_index,3)+1)%position, is_valid, message) + if (.not. is_valid) return + end do + end do + + rectangle_count = 0 + do interval_index = 1, size(element%intervals) + call appendIntervalEdges(element%intervals(interval_index), raw_edges, raw_count, & + rectangle_keys, rectangle_count, is_valid, message) + if (.not. is_valid) return + end do + + allocate(atomic_edges(max(1, raw_count))) + atomic_count = 0 + do edge_index = 1, raw_count + call splitAndAppendEdge(raw_edges(edge_index), raw_edges, raw_count, atomic_edges, atomic_count) + end do + call validateAtomicEdges(atomic_edges, atomic_count, require_closed, is_valid, message) + end subroutine validateCombinedSurfaceTopology + + subroutine countAndValidateRectangles(intervals, rectangle_count, is_valid, message) + type(interval_t), dimension(:), allocatable, intent(in) :: intervals + integer, intent(out) :: rectangle_count + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + integer, dimension(3) :: diff + integer :: interval_index, face, first_direction, second_direction + + rectangle_count = 0 + is_valid = .true. + message = '' + if (.not. allocated(intervals)) return + do interval_index = 1, size(intervals) + diff = intervals(interval_index)%end%cell - intervals(interval_index)%ini%cell + if (count(diff /= 0) /= 2) then + write(message, '(A,I0,A)') 'interval ', interval_index, ' must define a non-zero rectangular surface' + is_valid = .false. + return + end if + face = minloc(abs(diff), 1) + first_direction = mod(face,3) + 1 + second_direction = mod(face+1,3) + 1 + if ((diff(first_direction) < 0) .neqv. (diff(second_direction) < 0)) then + write(message, '(A,I0,A)') 'interval ', interval_index, & + ' has mixed-sign directions; both varying directions must have the same sign' + call WarnErrReport(trim(message), .true.) + is_valid = .false. + return + end if + rectangle_count = rectangle_count + abs(diff(first_direction))*abs(diff(second_direction)) + end do + end subroutine countAndValidateRectangles + + subroutine appendIntervalEdges(interval, raw_edges, raw_count, rectangle_keys, rectangle_count, is_valid, message) + type(interval_t), intent(in) :: interval + type(oriented_edge_t), dimension(:), intent(inout) :: raw_edges + integer, intent(inout) :: raw_count, rectangle_count + type(rectangle_key_t), dimension(:), intent(inout) :: rectangle_keys + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + integer, dimension(3) :: diff, lower, cell + real, dimension(4,3) :: corners + integer :: face, first_direction, second_direction, first_offset, second_offset, orientation, i + + is_valid = .true. + message = '' + diff = interval%end%cell - interval%ini%cell + face = minloc(abs(diff), 1) + first_direction = mod(face,3) + 1 + second_direction = mod(face+1,3) + 1 + orientation = merge(1, -1, diff(first_direction) > 0) + lower = min(interval%ini%cell, interval%end%cell) + + do first_offset = 0, abs(diff(first_direction))-1 + do second_offset = 0, abs(diff(second_direction))-1 + cell = lower + cell(first_direction) = lower(first_direction) + first_offset + cell(second_direction) = lower(second_direction) + second_offset + do i = 1, rectangle_count + if (rectangle_keys(i)%face == face .and. all(rectangle_keys(i)%cell == cell)) then + write(message, '(A,I0,A,I0,A,I0,A,I0)') 'duplicate interval rectangle at cell (', & + cell(1), ',', cell(2), ',', cell(3), '), face ', face + is_valid = .false. + return + end if + end do + rectangle_count = rectangle_count + 1 + rectangle_keys(rectangle_count)%cell = cell + rectangle_keys(rectangle_count)%face = face + call rectangleCorners(cell, face, corners) + if (orientation < 0) corners = corners([1,4,3,2],:) + do i = 1, 4 + call appendRawEdge(raw_edges, raw_count, corners(i,:), corners(mod(i,4)+1,:), is_valid, message) + if (.not. is_valid) return + end do + end do + end do + end subroutine appendIntervalEdges + + subroutine rectangleCorners(cell, face, corners) + integer, dimension(3), intent(in) :: cell + integer, intent(in) :: face + real, dimension(4,3), intent(out) :: corners + + corners(1,:) = real(cell) + select case(face) + case(FACE_X) + corners(2,:) = corners(1,:) + [0.0,1.0,0.0] + corners(3,:) = corners(1,:) + [0.0,1.0,1.0] + corners(4,:) = corners(1,:) + [0.0,0.0,1.0] + case(FACE_Y) + corners(2,:) = corners(1,:) + [0.0,0.0,1.0] + corners(3,:) = corners(1,:) + [1.0,0.0,1.0] + corners(4,:) = corners(1,:) + [1.0,0.0,0.0] + case(FACE_Z) + corners(2,:) = corners(1,:) + [1.0,0.0,0.0] + corners(3,:) = corners(1,:) + [1.0,1.0,0.0] + corners(4,:) = corners(1,:) + [0.0,1.0,0.0] + end select + end subroutine rectangleCorners + + subroutine appendRawEdge(edges, edge_count, first, second, is_valid, message) + type(oriented_edge_t), dimension(:), intent(inout) :: edges + integer, intent(inout) :: edge_count + real, dimension(3), intent(in) :: first, second + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + + is_valid = .false. + if (norm2(second-first) <= TOPOLOGY_TOLERANCE) then + message = 'surface patch has a degenerate geometric edge' + return + end if + edge_count = edge_count + 1 + edges(edge_count)%first = first + edges(edge_count)%second = second + is_valid = .true. + message = '' + end subroutine appendRawEdge + + subroutine splitAndAppendEdge(edge, raw_edges, raw_count, atomic_edges, atomic_count) + type(oriented_edge_t), intent(in) :: edge + type(oriented_edge_t), dimension(:), intent(in) :: raw_edges + integer, intent(in) :: raw_count + type(oriented_edge_t), dimension(:), allocatable, intent(inout) :: atomic_edges + integer, intent(inout) :: atomic_count + real, dimension(:), allocatable :: parameters + real, dimension(3) :: direction + real :: parameter, swap + integer :: edge_index, endpoint, parameter_count, i, j + + allocate(parameters(2*raw_count + 2)) + parameter_count = 2 + parameters(1:2) = [0.0, 1.0] + direction = edge%second-edge%first + do edge_index = 1, raw_count + do endpoint = 1, 2 + if (endpoint == 1) then + if (.not. pointOnSegment(raw_edges(edge_index)%first, edge)) cycle + parameter = dot_product(raw_edges(edge_index)%first-edge%first, direction)/dot_product(direction,direction) + else + if (.not. pointOnSegment(raw_edges(edge_index)%second, edge)) cycle + parameter = dot_product(raw_edges(edge_index)%second-edge%first, direction)/dot_product(direction,direction) + end if + if (any(abs(parameters(1:parameter_count)-parameter) < TOPOLOGY_TOLERANCE)) cycle + parameter_count = parameter_count + 1 + parameters(parameter_count) = max(0.0, min(1.0, parameter)) + end do + end do + do i = 2, parameter_count + swap = parameters(i) + j = i-1 + do while (j >= 1) + if (parameters(j) <= swap) exit + parameters(j+1) = parameters(j) + j = j-1 + end do + parameters(j+1) = swap + end do + do i = 1, parameter_count-1 + if (parameters(i+1)-parameters(i) <= TOPOLOGY_TOLERANCE) cycle + call ensureEdgeCapacity(atomic_edges, atomic_count+1) + atomic_count = atomic_count + 1 + atomic_edges(atomic_count)%first = edge%first + parameters(i)*direction + atomic_edges(atomic_count)%second = edge%first + parameters(i+1)*direction + end do + end subroutine splitAndAppendEdge + + subroutine ensureEdgeCapacity(edges, needed) + type(oriented_edge_t), dimension(:), allocatable, intent(inout) :: edges + integer, intent(in) :: needed + type(oriented_edge_t), dimension(:), allocatable :: enlarged + + if (needed <= size(edges)) return + allocate(enlarged(max(needed, 2*size(edges)))) + enlarged(1:size(edges)) = edges + call move_alloc(enlarged, edges) + end subroutine ensureEdgeCapacity + + logical function pointOnSegment(point, edge) + real, dimension(3), intent(in) :: point + type(oriented_edge_t), intent(in) :: edge + real, dimension(3) :: direction, offset + real :: length_squared, parameter + + direction = edge%second-edge%first + offset = point-edge%first + length_squared = dot_product(direction,direction) + parameter = dot_product(offset,direction)/length_squared + pointOnSegment = parameter >= -TOPOLOGY_TOLERANCE .and. parameter <= 1.0+TOPOLOGY_TOLERANCE .and. & + norm2(offset-parameter*direction) <= TOPOLOGY_TOLERANCE + end function pointOnSegment + + subroutine validateAtomicEdges(edges, edge_count, require_closed, is_valid, message) + type(oriented_edge_t), dimension(:), intent(in) :: edges + integer, intent(in) :: edge_count + logical, intent(in) :: require_closed + logical, intent(out) :: is_valid + character(len=*), intent(out) :: message + integer :: edge_index, other_index, incidence + logical :: same_direction + + is_valid = .true. + message = '' + do edge_index = 1, edge_count + if (edgeAlreadyChecked(edges, edge_index)) cycle + incidence = 0 + same_direction = .false. + do other_index = 1, edge_count + if (.not. equivalentEdge(edges(edge_index), edges(other_index))) cycle + incidence = incidence + 1 + if (other_index /= edge_index .and. directedSameWay(edges(edge_index), edges(other_index))) same_direction = .true. + end do + if (incidence > 2) then + write(message, '(A,I0)') 'non-manifold combined surface edge has incidence ', incidence + is_valid = .false. + return + end if + if (same_direction) then + message = 'combined surface patches traverse a shared edge in the same direction' + is_valid = .false. + return + end if + if (require_closed .and. incidence /= 2) then + write(message, '(A,3(F0.5,1X),A,3(F0.5,1X),A,I0)') 'open combined volume edge from ', & + edges(edge_index)%first, 'to ', edges(edge_index)%second, 'has incidence ', incidence + is_valid = .false. + return + end if + end do + end subroutine validateAtomicEdges + + logical function edgeAlreadyChecked(edges, edge_index) + type(oriented_edge_t), dimension(:), intent(in) :: edges + integer, intent(in) :: edge_index + integer :: previous + + edgeAlreadyChecked = .false. + do previous = 1, edge_index-1 + if (equivalentEdge(edges(previous), edges(edge_index))) then + edgeAlreadyChecked = .true. + return + end if + end do + end function edgeAlreadyChecked + + logical function equivalentEdge(first, second) + type(oriented_edge_t), intent(in) :: first, second + equivalentEdge = (samePoint(first%first,second%first) .and. samePoint(first%second,second%second)) .or. & + (samePoint(first%first,second%second) .and. samePoint(first%second,second%first)) + end function equivalentEdge + + logical function directedSameWay(first, second) + type(oriented_edge_t), intent(in) :: first, second + directedSameWay = samePoint(first%first,second%first) .and. samePoint(first%second,second%second) + end function directedSameWay + + logical function samePoint(first, second) + real, dimension(3), intent(in) :: first, second + samePoint = all(abs(first-second) < TOPOLOGY_TOLERANCE) + end function samePoint + subroutine validateSurfaceFaceContour(sides, face, is_valid, detail) type(side_t), dimension(:), allocatable, intent(in) :: sides integer, intent(in) :: face @@ -443,11 +784,13 @@ end subroutine reverseTriangle function buildMedia(elements) result(res) type(ConformalPECElements_t), dimension(:), pointer :: elements + type(ConformalPECElements_t) :: canonical_element type(ConformalMedia_t), dimension(:), allocatable :: res integer :: i allocate(res(size(elements))) do i = 1, size(elements) - res(i) = buildMediaFromElement(elements(i)) + canonical_element = canonicalClosedSurfaceOrientation(elements(i)) + res(i) = buildMediaFromElement(canonical_element) end do end function diff --git a/src_json_parser/cells.F90 b/src_json_parser/cells.F90 index f3eadd7be..cd2196f9b 100644 --- a/src_json_parser/cells.F90 +++ b/src_json_parser/cells.F90 @@ -1,5 +1,7 @@ module cells_m + use Report_m, only: WarnErrReport + integer, parameter :: DIR_NULL = 0 integer, parameter :: DIR_X = 1 integer, parameter :: DIR_Y = 2 @@ -40,6 +42,7 @@ module cells_m contains procedure :: getType => cell_interval_getType procedure :: getOrientation => cell_interval_getOrientation + procedure :: hasMixedSignOrientation => cell_interval_hasMixedSignOrientation procedure :: getSize => cell_interval_getSize procedure, private :: varyingDirections => cell_interval_varyingDirections end type @@ -92,7 +95,7 @@ elemental function cell_interval_getType(this) result(res) res = this%varyingDirections() end function - elemental function cell_interval_getOrientation(this) result(res) + impure elemental function cell_interval_getOrientation(this) result(res) class(cell_interval_t), intent(in) :: this integer :: res integer :: i @@ -114,6 +117,12 @@ elemental function cell_interval_getOrientation(this) result(res) case (CELL_TYPE_SURFEL) block integer, dimension(3) :: diff + if (this%hasMixedSignOrientation()) then + call WarnErrReport('Surface interval has mixed-sign directions; ' // & + 'both varying directions must have the same sign.', .true.) + res = DIR_NULL + return + end if diff = this%end%cell - this%ini%cell do i = DIR_X, DIR_Z if (diff(i) == 0) res = i @@ -126,6 +135,14 @@ elemental function cell_interval_getOrientation(this) result(res) end select end function + elemental logical function cell_interval_hasMixedSignOrientation(this) result(res) + class(cell_interval_t), intent(in) :: this + integer, dimension(3) :: diff + + diff = this%end%cell - this%ini%cell + res = this%getType() == CELL_TYPE_SURFEL .and. any(diff > 0) .and. any(diff < 0) + end function + elemental function cell_interval_getSize(this) result(res) class(cell_interval_t), intent(in) :: this integer :: res diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 88b9466cc..d061f518a 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -18,7 +18,7 @@ module smbjson_m use json_kinds use conformal_types_m - use conformal_m, only: validateConformalSurface, validateConformalVolume + use conformal_m, only: validateConformalSurface, validateConformalVolume, validateClosedSurfaceTopology use, intrinsic :: iso_fortran_env , only: error_unit @@ -51,6 +51,7 @@ module smbjson_m procedure, private :: readGeneral procedure, private :: readGrid procedure, private :: readMediaMatrix + procedure, private :: readBackgroundMaterial procedure, private :: readPECRegions procedure, private :: readPMCRegions procedure, private :: readDielectricRegions @@ -171,6 +172,7 @@ function readProblemDescription(this) result (res) res%front = this%readBoundary() ! Materials + call this%readBackgroundMaterial(res%mats) res%pecRegs = this%readPECRegions() res%pmcRegs = this%readPMCRegions() res%dielRegs = this%readDielectricRegions() @@ -190,7 +192,7 @@ function readProblemDescription(this) result (res) res%conformalRegs = this%readConformalRegions() ! Thin elements - res%tWires = this%readThinWires() + call this%readThinWires(res%tWires, res%sonda) res%tSlots = this%readThinSlots() #ifdef CompileWithMTLN @@ -261,8 +263,18 @@ subroutine addElements(mesh) call mesh%addElement(id, polyline) CASE (J_ELEM_TYPE_CELL) block - type(json_value), pointer :: subtypeEntry, trianglesEntry + type(json_value), pointer :: conformalEntry type(cell_region_t) :: cR + logical :: foundConformalEntry + + call this%core%get(je, J_CONF_VOLUME_TRIANGLES, conformalEntry, found=foundConformalEntry) + if (.not. foundConformalEntry) then + call this%core%get(je, J_SUBTYPE, conformalEntry, found=foundConformalEntry) + end if + if (foundConformalEntry) then + call WarnErrReport('Element type "cell" cannot define conformal geometry. Use type "conformal".', .true.) + return + end if cR%intervals = readCellIntervals(je, J_CELL_INTERVALS) call mesh%addCellRegion(id, cR) end block @@ -283,6 +295,7 @@ function readCellIntervals(place, path) result(res) type(json_value), pointer :: intervalsPlace, interval integer :: i, nIntervals real, dimension(:), allocatable :: cellIni, cellEnd + character(len=160) :: error_message logical :: containsInterval call this%core%get(place, path, intervalsPlace, found=containsInterval) @@ -294,10 +307,24 @@ function readCellIntervals(place, path) result(res) allocate(res(nIntervals)) do i = 1, nIntervals call this%core%get_child(intervalsPlace, i, interval) + if (this%core%count(interval) /= 2) then + call WarnErrReport('Cell intervals must contain exactly two three-dimensional endpoints.', .true.) + return + end if cellIni = this%getRealsAt(interval, '(1)') cellEnd = this%getRealsAt(interval, '(2)') + if (size(cellIni) /= 3 .or. size(cellEnd) /= 3) then + call WarnErrReport('Cell interval endpoints must contain exactly three coordinates.', .true.) + return + end if res(i)%ini%cell = cellIni(1:3) res(i)%end%cell = cellEnd(1:3) + if (res(i)%hasMixedSignOrientation()) then + write(error_message, '(A,I0,A)') 'Surface interval ', i, & + ' has mixed-sign directions; both varying directions must have the same sign.' + call WarnErrReport(trim(error_message), .true.) + return + end if end do end function @@ -370,8 +397,10 @@ function readAdditionalArguments(this) result (res) function readGeneral(this) result (res) class(parser_t) :: this type(NFDEGeneral_t) :: res - res%dt = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_TIME_STEP) + res%dt = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_TIME_STEP, default = 0.0_RKIND) + if (res%dt < 0) call WarnErrReport('timeStep cannot be negative', .true.) res%nmax = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_NUMBER_OF_STEPS) + if (res%nmax <= 0) call WarnErrReport('numberOfSteps has to be positive', .true.) res%mtlnProblem = this%getLogicalAt(this%root, J_GENERAL//'.'//J_GEN_MTLN_PROBLEM, default = .false.) end function @@ -379,9 +408,9 @@ function readMediaMatrix(this) result(res) class(parser_t) :: this type(MatrizMedios_t) :: res character (len=*), parameter :: P = J_MESH//'.'//J_GRID//'.'//J_GRID_NUMBER_OF_CELLS - res%totalX = this%getIntAt(this%root, P//'(1)') - res%totalY = this%getIntAt(this%root, P//'(2)') - res%totalZ = this%getIntAt(this%root, P//'(3)') + res%totalX = this%getIntAt(this%root, P//'(1)') + 1 + res%totalY = this%getIntAt(this%root, P//'(2)') + 1 + res%totalZ = this%getIntAt(this%root, P//'(3)') + 1 end function function readGrid(this) result (res) @@ -390,28 +419,38 @@ function readGrid(this) result (res) real, dimension(:), allocatable :: vec character (len=*), parameter :: P = J_MESH//'.'//J_GRID - res%nX = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(1)') - res%nY = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(2)') - res%nZ = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(3)') + integer :: nX, nY, nZ + + nX = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(1)') + nY = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(2)') + nZ = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(3)') + + res%nX = nX + res%nY = nY + res%nZ = nZ call assignDes(P//'.'//J_GRID_STEPS//'.x', res%desX, res%nX) call assignDes(P//'.'//J_GRID_STEPS//'.y', res%desY, res%nY) call assignDes(P//'.'//J_GRID_STEPS//'.z', res%desZ, res%nZ) + res%originx = this%getRealAt(this%root, P//'.'//J_GRID_ORIGIN//'(1)', default=0.0_RKIND) + res%originy = this%getRealAt(this%root, P//'.'//J_GRID_ORIGIN//'(2)', default=0.0_RKIND) + res%originz = this%getRealAt(this%root, P//'.'//J_GRID_ORIGIN//'(3)', default=0.0_RKIND) + res%mx1 = 0 res%my1 = 0 res%mz1 = 0 - res%mx2 = res%nX - res%my2 = res%nY - res%mz2 = res%nZ + res%mx2 = nX + res%my2 = nY + res%mz2 = nZ contains - subroutine assignDes(path, dest, numberOfCells) + subroutine assignDes(path, dest, n) character(kind=CK, len=*) :: path real (kind=rkind), dimension(:), pointer :: dest - real, dimension(:), allocatable :: vec - integer (kind=4), intent(in) :: numberOfCells + real(kind=RKIND), dimension(:), allocatable :: vec + integer (kind=4), intent(inout) :: n logical :: found = .false. vec= this%getRealsAt(this%root, path, found) @@ -419,19 +458,34 @@ subroutine assignDes(path, dest, numberOfCells) if (.not. found) then call WarnErrReport('Error reading grid: steps not found.', .true.) endif - if (size(vec) /= 1 .and. size(vec) /= numberOfCells) then + if (size(vec) /= 1 .and. size(vec) /= n) then call WarnErrReport( 'Error reading grid: steps must be arrays of size 1 (for regular grids) or size equal to the number of cells.', .true.) end if - allocate(dest(0 : numberOfCells-1)) if (size(vec) == 1) then - dest(:) = vec(1) + n = 1 + allocate(dest(1:1)) + dest(1) = vec(1) else + allocate(dest(0 : n-1)) dest = vec end if end subroutine end function + subroutine readBackgroundMaterial(this, mats) + class(parser_t) :: this + type(Materials_t), intent(inout) :: mats + logical :: found + real(kind=RKIND) :: val + + val = this%getRealAt(this%root, J_BACKGROUND//'.'//J_BKG_ABS_PERMITTIVITY, found=found) + if (found) mats%mats(1)%eps = val + + val = this%getRealAt(this%root, J_BACKGROUND//'.'//J_BKG_ABS_PERMEABILITY, found=found) + if (found) mats%mats(1)%mu = val + end subroutine + function readBoundary(this) result (res) class(parser_t) :: this type(Frontera_t) :: res @@ -539,7 +593,8 @@ function buildPECPMCRegions(this, matType) result(res) type(coords_t), dimension(:), pointer :: cs integer :: i - mAs = this%getMaterialAssociations([matType], [J_ELEM_TYPE_CELL]) + mAs = this%getMaterialAssociations([matType], [ & + '-'//J_CONF_SUBTYPE_SURFACE, J_ELEM_TYPE_CELL//' ', '-'//J_CONF_SUBTYPE_VOLUME//' ']) block type(coords_t), dimension(:), pointer :: emptyCoords if (size(mAs) == 0) then @@ -606,7 +661,9 @@ function readConformalRegions(this) result(res) integer :: i, j logical :: found - mAs = this%getMaterialAssociations([J_MAT_TYPE_PEC], [J_ELEM_TYPE_CONFORMAL]) + ! Put the longest label first so the Fortran character constructor does not + ! truncate "surface" to the length of "volume". + mAs = this%getMaterialAssociations([J_MAT_TYPE_PEC], [J_CONF_SUBTYPE_SURFACE, J_CONF_SUBTYPE_VOLUME]) do i = 1, size(mAs) do j = 1, size(mAs(i)%elementIds) @@ -617,13 +674,35 @@ function readConformalRegions(this) result(res) call appendRegion(res%volumes, cR, tagName) end if if (cR%type == REGION_TYPE_SURFACE) then - call appendRegion(res%surfaces, cR, tagName) + if (isClosedRegion(cR)) then + ! A closed PEC shell has the same electromagnetic semantics as a + ! conformal volume; use the established volume filling path. + call appendRegion(res%volumes, cR, tagName) + else + call appendRegion(res%surfaces, cR, tagName) + end if end if end if end do end do contains + logical function isClosedRegion(region) + type(conformal_region_t), intent(in) :: region + type(ConformalPECElements_t) :: element + logical :: is_valid + character(len=256) :: validation_message + + element%triangles = region%triangles + element%intervals = copyIntervals(region%intervals) + if (size(element%intervals) == 0) then + call validateClosedSurfaceTopology(element%triangles, is_valid, validation_message) + else + call validateConformalVolume(element, is_valid, validation_message) + end if + isClosedRegion = is_valid + end function isClosedRegion + subroutine appendRegion(regions, region, tagName) type(ConformalPECElements_t), dimension(:), pointer :: regions type(conformal_region_t), intent(in) :: region @@ -668,10 +747,12 @@ subroutine validateRegion(element, region_type, tag_name, is_valid, validation_m select case (region_type) case (REGION_TYPE_SURFACE) call validateConformalSurface(element, is_valid, validation_message) - if (.not. is_valid) call WarnErrReport('Invalid conformal surface ' // trim(tag_name) // ': ' // trim(validation_message), .true.) + if (.not. is_valid .and. .not. isFatalError()) & + call WarnErrReport('Invalid conformal surface ' // trim(tag_name) // ': ' // trim(validation_message), .true.) case (REGION_TYPE_VOLUME) call validateConformalVolume(element, is_valid, validation_message) - if (.not. is_valid) call WarnErrReport('Invalid conformal volume ' // trim(tag_name) // ': ' // trim(validation_message), .true.) + if (.not. is_valid .and. .not. isFatalError()) & + call WarnErrReport('Invalid conformal volume ' // trim(tag_name) // ': ' // trim(validation_message), .true.) end select end subroutine validateRegion @@ -928,7 +1009,6 @@ function readLossyThinSurfaces(this) result (res) allocate(res%cs(nLossySurfaces)) res%length = nLossySurfaces res%length_max = nLossySurfaces - res%nC_max = nLossySurfaces k = 1 do i = 1, size(mAs) call this%matAssToCoords(cs, mAs(i), CELL_TYPE_SURFEL) @@ -937,11 +1017,15 @@ function readLossyThinSurfaces(this) result (res) k = k + 1 end do + do i = 1, nLossySurfaces + res%nC_max = max(res%nC_max, size(res%cs(i)%c)) + end do + contains function readLossyThinSurface(mA) result(res) type(materialAssociation_t), intent(in) :: mA type(LossyThinSurface_t) :: res - logical :: found + logical :: found, hasAbsPermittivity, hasAbsPermeability character (len=*), parameter :: errorMsgInit = "ERROR reading lossy thin surface: " integer :: i type(json_value_ptr_t) :: mat @@ -952,6 +1036,7 @@ function readLossyThinSurface(mA) result(res) res%nc = size(res%c) mat = this%matTable%getId(mA%materialId) + res%files = trim(adjustl(this%getStrAt(mat%p, J_NAME, default=' '))) call this%core%get(mat%p, J_MAT_MULTILAYERED_SURF_LAYERS, layers) res%numcapas = this%core%count(layers) @@ -967,19 +1052,25 @@ function readLossyThinSurface(mA) result(res) allocate(res%thk_devia( res%numcapas)) do i = 1, res%numcapas call this%core%get_child(layers, i, layer) - res%sigma(i) = this%getRealAt(layer, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0) - res%sigmam(i) = this%getRealAt(layer, J_MAT_MAGNETIC_CONDUCTIVITY, default=0.0) - res%eps(i) = this%getRealAt(layer, J_MAT_REL_PERMITTIVITY, default=1.0) * EPSILON_VACUUM - res%mu(i) = this%getRealAt(layer, J_MAT_REL_PERMEABILITY, default=1.0) * MU_VACUUM + res%sigma(i) = this%getRealAt(layer, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0_RKIND) + res%sigmam(i) = this%getRealAt(layer, J_MAT_MAGNETIC_CONDUCTIVITY, default=0.0_RKIND) + res%eps(i) = this%getRealAt(layer, J_MAT_ABS_PERMITTIVITY, hasAbsPermittivity) + if (.not. hasAbsPermittivity) then + res%eps(i) = this%getRealAt(layer, J_MAT_REL_PERMITTIVITY, default=1.0_RKIND) * EPSILON_VACUUM + end if + res%mu(i) = this%getRealAt(layer, J_MAT_ABS_PERMEABILITY, hasAbsPermeability) + if (.not. hasAbsPermeability) then + res%mu(i) = this%getRealAt(layer, J_MAT_REL_PERMEABILITY, default=1.0_RKIND) * MU_VACUUM + end if res%thk(i) = this%getRealAt(layer, J_MAT_MULTILAYERED_SURF_THICKNESS, found) if (.not. found) then call WarnErrReport(errorMsgInit // J_MAT_MULTILAYERED_SURF_THICKNESS // " in layer not found.", .true.) end if - res%sigma_devia(i) = 0.0 - res%eps_devia(i) = 0.0 - res%mu_devia(i) = 0.0 - res%sigmam_devia(i) = 0.0 - res%thk_devia(i) = 0.0 + res%sigma_devia(i) = 0.0_RKIND + res%eps_devia(i) = 0.0_RKIND + res%mu_devia(i) = 0.0_RKIND + res%sigmam_devia(i) = 0.0_RKIND + res%thk_devia(i) = 0.0_RKIND end do end function @@ -1028,24 +1119,28 @@ function readPlanewave(pw) result (res) res%nombre_fichero = trim(adjustl(this%getStrAt(pw,J_SRC_MAGNITUDE_FILE))) - res%atributo = "" + res%atributo = "LOCKED" res%theta = this%getRealAt(pw, J_SRC_PW_DIRECTION//'.'//J_SRC_PW_THETA) res%phi = this%getRealAt(pw, J_SRC_PW_DIRECTION//'.'//J_SRC_PW_PHI) res%alpha = this%getRealAt(pw, J_SRC_PW_POLARIZATION//'.'//J_SRC_PW_THETA) res%beta = this%getRealAt(pw, J_SRC_PW_POLARIZATION//'.'//J_SRC_PW_PHI) + res%isRC = .false. + res%nummodes = 1 + res%incertmax = 0.0_RKIND block + type(cell_interval_t), dimension(:), allocatable :: cellIntervals type(coords_t), dimension(:), allocatable :: nfdeCoords - nfdeCoords = & - cellIntervalsToCoords(this%getSingleVolumeInElementsIds(pw)) + cellIntervals = this%getSingleVolumeInElementsIds(pw) + if (size(cellIntervals) == 0) then + call WarnErrReport('Planewave elementIds must define one non-empty volume.', .true.) + return + end if + nfdeCoords = cellIntervalsToCoords(cellIntervals) res%coor1 = [nfdeCoords(1)%Xi, nfdeCoords(1)%Yi, nfdeCoords(1)%Zi] res%coor2 = [nfdeCoords(1)%Xe, nfdeCoords(1)%Ye, nfdeCoords(1)%Ze] end block - - res%isRC = .false. - res%nummodes = 1 - res%incertmax = 0.0 end function end function @@ -1076,8 +1171,13 @@ function readNodalSources(this) result (res) res%NodalSource(i) = readField(nodSrcs(i)%p) end do do i = 1, size(nodSrcs) + res%n_C1P_max = max(res%n_C1P_max, res%NodalSource(i)%n_C1P) res%n_C2P_max = max(res%n_C2P_max, res%NodalSource(i)%n_C2P) end do + if (res%n_nodSrc > 0) then + if (res%n_C1P_max == 0) res%n_C1P_max = 1 + if (res%n_C2P_max == 0) res%n_C2P_max = 1 + end if contains function readField(jns) result(res) @@ -1085,7 +1185,8 @@ function readField(jns) result(res) type(json_value), pointer :: jns, entry integer, dimension(:), allocatable :: elementIds character (len=BUFSIZE) :: nodalSourceName - type(coords_scaled_t), dimension(:), allocatable :: coordsFromLinels + type(coords_scaled_t), dimension(:), pointer :: allCoords + integer :: j, cnt_c1p, cnt_c2p select case (this%getStrAt(jns, J_FIELD, default=J_FIELD_CURRENT)) case (J_FIELD_CURRENT) @@ -1109,12 +1210,40 @@ function readField(jns) result(res) nodalSourceName = this%getStrAt(jns, J_NAME, default=' ') - allocate(res%c1P(0)) - res%n_C1P = 0 - elementIds = this%getIntsAt(jns, J_ELEMENTIDS) - call cellRegionsToScaledCoords(res%C2P, this%mesh%getCellRegions(elementIds), nodalSourceName) - res%n_C2P = size(res%C2p) + call cellRegionsToScaledCoords(allCoords, this%mesh%getCellRegions(elementIds)) + + cnt_c1p = 0 + cnt_c2p = 0 + do j = 1, size(allCoords) + if (allCoords(j)%Xi == allCoords(j)%Xe .and. & + allCoords(j)%Yi == allCoords(j)%Ye .and. & + allCoords(j)%Zi == allCoords(j)%Ze) then + cnt_c1p = cnt_c1p + 1 + else + cnt_c2p = cnt_c2p + 1 + end if + end do + + if (cnt_c1p > 0) allocate(res%c1P(cnt_c1p)) + if (cnt_c2p > 0) allocate(res%c2P(cnt_c2p)) + cnt_c1p = 0 + cnt_c2p = 0 + do j = 1, size(allCoords) + if (allCoords(j)%Xi == allCoords(j)%Xe .and. & + allCoords(j)%Yi == allCoords(j)%Ye .and. & + allCoords(j)%Zi == allCoords(j)%Ze) then + cnt_c1p = cnt_c1p + 1 + res%c1P(cnt_c1p) = allCoords(j) + else + cnt_c2p = cnt_c2p + 1 + res%c2P(cnt_c2p) = allCoords(j) + end if + end do + res%n_C1P = cnt_c1p + res%n_C2P = cnt_c2p + + deallocate(allCoords) end function end function @@ -1254,8 +1383,8 @@ function readMoreProbes(this) result (res) type(json_value_ptr_t), dimension(:), allocatable :: ps integer :: i - character (len=*), dimension(3), parameter :: validTypes = & - [J_PR_TYPE_POINT, J_PR_TYPE_WIRE, J_PR_TYPE_LINE] + character (len=*), dimension(2), parameter :: validTypes = & + [J_PR_TYPE_POINT, J_PR_TYPE_LINE] logical :: found character (len=:), allocatable :: fieldLbl, probeLbl integer :: filtered_size, n @@ -1285,7 +1414,7 @@ function readMoreProbes(this) result (res) fieldLbl = this%getStrAt(ps(i)%p, J_FIELD, default=J_FIELD_ELECTRIC) if (isMoreProbe(ps(i)%p)) then probeLbl = this%getStrAt(ps(i)%p, J_TYPE, default=J_FIELD_ELECTRIC) - if (probeLbl == J_PR_TYPE_WIRE .or. probeLbl == J_PR_TYPE_POINT) then + if (probeLbl == J_PR_TYPE_POINT) then res%collection(n) = readPointProbe(ps(i)%p) n = n + 1 else if (probeLbl == J_PR_TYPE_LINE) then @@ -1297,13 +1426,15 @@ function readMoreProbes(this) result (res) res%length = size(res%collection) res%length_max = size(res%collection) - res%len_cor_max = 0 + do i=1, size(res%collection) + if (size(res%collection(i)%cordinates) > res%len_cor_max) then + res%len_cor_max = size(res%collection(i)%cordinates) + end if + end do contains logical function isMoreProbe(p) type(json_value), pointer :: p - isMoreProbe = isPointProbe(p) & - .or. isCurrentProbeDefinedOnWire(p) & - .or. isLineProbe(p) + isMoreProbe = isPointProbe(p) .or. isLineProbe(p) end function logical function isLineProbe(p) @@ -1311,43 +1442,6 @@ logical function isLineProbe(p) isLineProbe = this%getStrAt(p, J_TYPE) == J_PR_TYPE_LINE end function - logical function isCurrentProbeDefinedOnWire(p) - type(json_value), pointer :: p - character (len=:), allocatable :: fieldLabel - logical :: found - type(materialAssociation_t), dimension(:), allocatable :: mAs - integer :: i, j - integer :: cId - type(polyline_t) :: polyline - - fieldLabel = this%getStrAt(p, J_FIELD, found=found) - if (.not. found .or. fieldLabel /= J_FIELD_CURRENT) then - isCurrentProbeDefinedOnWire = .false. - return - end if - - block - type(pixel_t) :: pixel - integer, dimension(:), allocatable :: eIds - eIds = this%getIntsAt(p, J_ELEMENTIDS) - pixel = getPixelFromElementId(this%mesh, eIds(1)) - cId = pixel%tag - end block - - mAs = this%getMaterialAssociations([J_MAT_TYPE_WIRE]) - do i = 1, size(mAs) - polyline = this%mesh%getPolyline(mAs(i)%elementIds(1)) - do j = 1, size(polyline%coordIds) - if (polyline%coordIds(j) == cId) then - isCurrentProbeDefinedOnWire = .true. - return - end if - end do - end do - - isCurrentProbeDefinedOnWire = .false. - end function - logical function isPointProbe(p) type(json_value), pointer :: p character (len=:), allocatable :: typeLabel, fieldLabel @@ -1455,14 +1549,6 @@ function readPointProbe(p) result (res) call WarnErrReport("Point probe type label not found.", .true.) end if select case (typeLabel) - case (J_PR_TYPE_WIRE) - allocate(res%cordinates(1)) - fieldLabel = this%getStrAt(p, J_FIELD, default=J_FIELD_VOLTAGE) - res%cordinates(1)%tag = outputName - res%cordinates(1)%Xi = pixel%tag - res%cordinates(1)%Yi = 0 - res%cordinates(1)%Zi = 0 - res%cordinates(1)%Or = strToFieldType(fieldLabel) case (J_PR_TYPE_POINT) call this%core%get(p, J_PR_POINT_DIRECTIONS, dirLabelPtr, found=dirLabelsFound) if(dirLabelsFound) then @@ -1895,11 +1981,13 @@ function buildBaseThinSlotComponent(cs) result(res) end function end function - function readThinWires(this) result (res) + subroutine readThinWires(this, res, sonda) class(parser_t) :: this - type(ThinWires_t) :: res + type(ThinWires_t), intent(out) :: res + type(MasSondas_t), intent(inout) :: sonda type(materialAssociation_t), dimension(:), allocatable :: mAs - integer :: i, j + integer :: i, j, nGlobal, nNodes + integer, dimension(:), allocatable :: nodeCoordIds, nodeNodeIdx logical :: found mAs = this%getMaterialAssociations([J_MAT_TYPE_WIRE]) @@ -1919,6 +2007,10 @@ function readThinWires(this) result (res) res%n_tw_max = size(res%tw) end block + nGlobal = 0 + nNodes = 0 + allocate(nodeCoordIds(2 * res%n_tw)) + allocate(nodeNodeIdx(2 * res%n_tw)) j = 1 if (size(mAs) /=0 ) then do i = 1, size(mAs) @@ -1929,6 +2021,38 @@ function readThinWires(this) result (res) end do end if +#ifndef CompileWithMTLN + ! Classic wire probes refer to the solver node numbering generated above. + block + type(json_value), pointer :: allProbes + type(json_value_ptr_t), dimension(:), allocatable :: wireProbePs + type(MasSonda_t), dimension(:), pointer :: newCollection + integer :: nWireProbes, nExisting, k + + call this%core%get(this%root, J_PROBES, allProbes, found) + if (found) then + wireProbePs = [this%jsonValueFilterByKeyValue(allProbes, J_TYPE, J_PR_TYPE_WIRE)] + nWireProbes = size(wireProbePs) + if (nWireProbes > 0) then + nExisting = sonda%length + allocate(newCollection(nExisting + nWireProbes)) + if (nExisting > 0) newCollection(1:nExisting) = sonda%collection(1:nExisting) + do k = 1, nWireProbes + newCollection(nExisting + k) = readWireProbe(wireProbePs(k)%p) + end do + deallocate(sonda%collection) + sonda%collection => newCollection + sonda%length = nExisting + nWireProbes + sonda%length_max = sonda%length + end if + end if + end block + + do i = 1, size(sonda%collection) + sonda%len_cor_max = max(sonda%len_cor_max, size(sonda%collection(i)%cordinates)) + end do +#endif + contains function readThinWire(cable) result(res) type(ThinWire_t) :: res @@ -1938,13 +2062,13 @@ function readThinWire(cable) result(res) type(json_value), pointer :: je, je2 integer :: i logical :: found - real :: radius, resistance, inductance + real(kind=RKIND) :: radius, resistance, inductance block type(json_value_ptr_t) :: m m = this%matTable%getId(cable%materialId) - radius = this%getRealAt(m%p, J_MAT_WIRE_RADIUS, default = 0.0) - resistance = this%getRealAt(m%p, J_MAT_WIRE_RESISTANCE, default = 0.0) - inductance = this%getRealAt(m%p, J_MAT_WIRE_INDUCTANCE, default = 0.0) + radius = this%getRealAt(m%p, J_MAT_WIRE_RADIUS) + resistance = this%getRealAt(m%p, J_MAT_WIRE_RESISTANCE, default=0.0_RKIND) + inductance = this%getRealAt(m%p, J_MAT_WIRE_INDUCTANCE, default=0.0_RKIND) res%rad = radius res%res = resistance res%ind = inductance @@ -1985,13 +2109,49 @@ function readThinWire(cable) result(res) polyline = this%mesh%getPolyline(cable%elementIds(1)) linels = this%mesh%polylineToLinels(polyline) - write(tagLabel, '(i10)') cable%elementIds(1) + if (cable%hasTotalResistance) then + block + type(Desplazamiento_t) :: despl + real(kind=RKIND) :: totalLength, stepSize + integer :: k + despl = this%readGrid() + totalLength = 0.0_RKIND + do k = 1, size(linels) + select case(abs(linels(k)%orientation)) + case(DIR_X) + if (size(despl%desX) == 1) then + stepSize = despl%desX(1) + else + stepSize = despl%desX(linels(k)%cell(1)) + end if + case(DIR_Y) + if (size(despl%desY) == 1) then + stepSize = despl%desY(1) + else + stepSize = despl%desY(linels(k)%cell(2)) + end if + case(DIR_Z) + if (size(despl%desZ) == 1) then + stepSize = despl%desZ(1) + else + stepSize = despl%desZ(linels(k)%cell(3)) + end if + end select + totalLength = totalLength + stepSize + end do + res%res = cable%totalResistance(1) / totalLength + end block + end if + + tagLabel = this%buildTagName(cable%materialId, cable%elementIds(1)) genDesc = readGeneratorOnThinWire(linels, cable%elementIds) res%n_twc = size(linels) res%n_twc_max = size(linels) allocate(res%twc(size(linels))) + res%LeftEnd = getOrAssignNodeIndex(polyline%coordIds(1)) + res%RightEnd = getOrAssignNodeIndex(polyline%coordIds(size(polyline%coordIds))) do i = 1, size(linels) res%twc(i)%srcfile = genDesc(i)%srcfile res%twc(i)%srctype = genDesc(i)%srctype @@ -2000,13 +2160,30 @@ function readThinWire(cable) result(res) res%twc(i)%j = linels(i)%cell(2) res%twc(i)%k = linels(i)%cell(3) res%twc(i)%d = abs(linels(i)%orientation) - res%twc(i)%nd = linels(i)%tag + res%twc(i)%nd = nGlobal + i res%twc(i)%tag = trim(adjustl(tagLabel)) end do + nGlobal = nGlobal + size(linels) end block end function + function getOrAssignNodeIndex(coordId) result(nodeIdx) + integer, intent(in) :: coordId + integer :: nodeIdx, k + do k = 1, nNodes + if (nodeCoordIds(k) == coordId) then + nodeIdx = nodeNodeIdx(k) + return + end if + end do + nGlobal = nGlobal + 1 + nNodes = nNodes + 1 + nodeCoordIds(nNodes) = coordId + nodeNodeIdx(nNodes) = nGlobal + nodeIdx = nGlobal + end function + function readGeneratorOnThinWire(linels, plineElemIds) result(res) type(linel_t), dimension(:), intent(in) :: linels integer, dimension(:), intent(in) :: plineElemIds @@ -2020,7 +2197,7 @@ function readGeneratorOnThinWire(linels, plineElemIds) result(res) do i = 1, size(linels) res(i)%srcfile = 'None' res(i)%srctype = 'None' - res(i)%multiplier = 0.0 + res(i)%multiplier = 0.0_RKIND end do call this%core%get(this%root, J_SOURCES, sources, found) @@ -2054,22 +2231,33 @@ function readGeneratorOnThinWire(linels, plineElemIds) result(res) select case(this%getStrAt(genSrcs(i)%p, J_FIELD)) case (J_FIELD_VOLTAGE) - res(position)%srctype = "VOLT" - res(position)%srcfile = this%getStrAt(genSrcs(i)%p, J_SRC_MAGNITUDE_FILE) - res(position)%multiplier = 1.0 + res(position)%srctype = F_SOURCE_VOLTAGE case (J_FIELD_CURRENT) - res(position)%srctype = "CURR" - res(position)%srcfile = this%getStrAt(genSrcs(i)%p, J_SRC_MAGNITUDE_FILE) - res(position)%multiplier = 1.0 + res(position)%srctype = F_SOURCE_CURRENT case default call WarnErrReport('Field block of source of type generator must be current or voltage', .true.) end select + res(position)%srcfile = this%getStrAt(genSrcs(i)%p, J_SRC_MAGNITUDE_FILE) + res(position)%multiplier = 1.0_RKIND*orientFieldFromGenerator(linels, position) end do end block end function + function orientFieldFromGenerator(linels, position) result(res) + type(linel_t), dimension(:), intent(in) :: linels + integer, intent(in) :: position + integer :: res + if (position == 1) then + res = sign(1, linels(position)%orientation) + else if (position == size(linels)) then + res = -sign(1, linels(position)%orientation) + else + res = sign(1, linels(position)%orientation) + end if + end function + function findSourcePositionInLinels(srcElemIds, linels) result(res) integer, dimension(:), intent(in) :: srcElemIds type(linel_t), dimension(:), intent(in) :: linels @@ -2114,13 +2302,20 @@ function readThinWireTermination(terminal) result(res) select case(label) case(J_MAT_TERM_TYPE_OPEN) - res%r = 0.0 - res%l = 0.0 - res%c = 0.0 + res%r = 0.0_RKIND + res%l = 0.0_RKIND + res%c = 0.0_RKIND + case(J_MAT_TERM_TYPE_SHORT) + res%r = 0.0_RKIND + res%l = 0.0_RKIND + res%c = 0.0_RKIND + case(J_MAT_TERM_TYPE_SERIES) + res%r = this%getRealAt(tm, J_MAT_TERM_RESISTANCE, default=0.0_RKIND) + res%l = this%getRealAt(tm, J_MAT_TERM_INDUCTANCE, default=0.0_RKIND) + res%c = this%getRealAt(tm, J_MAT_TERM_CAPACITANCE, default=1e22_RKIND) case default - res%r = this%getRealAt(tm, J_MAT_TERM_RESISTANCE, default=0.0) - res%l = this%getRealAt(tm, J_MAT_TERM_INDUCTANCE, default=0.0) - res%c = this%getRealAt(tm, J_MAT_TERM_CAPACITANCE, default=1e22) + call WarnErrReport(& + "Error reading wire terminal. Holland wires only support open, short, and series terminations", .true.) end select end function @@ -2156,7 +2351,116 @@ logical function isThinWire(mA) isThinWire = .true. end function - end function + +#ifndef CompileWithMTLN + function readWireProbe(p) result(res) + type(MasSonda_t) :: res + type(json_value), pointer :: p + character(len=:), allocatable :: outputName, fieldLabel + type(node_t) :: node + type(coordinate_t) :: probe_coord + integer, dimension(:), allocatable :: elemIds + logical :: nameFound, elementIdsFound + + outputName = this%getStrAt(p, J_NAME, found=nameFound) + if (.not. nameFound) call WarnErrReport("Wire probes must define a name.", .true.) + res%outputrequest = trim(adjustl(outputName)) + + call setDomainOfWireProbe(res, this%getDomain(p, J_PR_DOMAIN)) + + elemIds = this%getIntsAt(p, J_ELEMENTIDS, found=elementIdsFound) + if (.not. elementIdsFound) then + call WarnErrReport("Element ids entry not found for wire probe.", .true.) + end if + if (size(elemIds) /= 1) then + call WarnErrReport("Wire probe must contain a single element id.", .true.) + end if + + node = this%mesh%getNode(elemIds(1)) + probe_coord = this%mesh%getCoordinate(node%coordIds(1)) + fieldLabel = this%getStrAt(p, J_FIELD, default=J_FIELD_VOLTAGE) + + allocate(res%cordinates(1)) + res%cordinates(1)%tag = outputName + res%cordinates(1)%Xi = getSegmentNdWhichMatchesCoord(node%coordIds(1), probe_coord) + res%cordinates(1)%Yi = 0 + res%cordinates(1)%Zi = 0 + select case (fieldLabel) + case (J_FIELD_CURRENT) + res%cordinates(1)%Or = NP_COR_WIRECURRENT + case (J_FIELD_VOLTAGE) + res%cordinates(1)%Or = NP_COR_DDP + case default + call WarnErrReport("Invalid field label for wire probe.", .true.) + end select + + res%len_cor = 1 + end function + + subroutine setDomainOfWireProbe(res, domain) + type(MasSonda_t), intent(inout) :: res + type(domain_t), intent(in) :: domain + + res%tstart = domain%tstart + res%tstep = domain%tstep + res%tstop = domain%tstop + res%fstart = domain%fstart + res%fstep = domain%fstep + res%fstop = domain%fstop + if (allocated(domain%filename)) then + res%filename = domain%filename + else + res%filename = " " + end if + res%type1 = domain%type1 + res%type2 = domain%type2 + + if (domain%isLogarithmicFrequencySpacing) call appendLogSufix(res%outputrequest) + end subroutine + + function getSegmentNdWhichMatchesCoord(coordId, probe_coord) result(nd_index) + integer :: nd_index + integer, intent(in) :: coordId + type(coordinate_t), intent(in) :: probe_coord + type(linel_t), dimension(:), allocatable :: linels + type(polyline_t) :: polyline + type(coordinate_t), dimension(:), allocatable :: linelCoords + real, dimension(:), allocatable :: distance_to_linel_cell + integer :: k, j, i, m(1), orientation, n_linels, local_idx + + nd_index = 0 + do k = 1, size(mAs) + polyline = this%mesh%getPolyline(mAs(k)%elementIds(1)) + do j = 1, size(polyline%coordIds) + if (polyline%coordIds(j) == coordId) then + linels = this%mesh%polylineToLinels(polyline) + n_linels = size(linels) + allocate(linelCoords(n_linels+1)) + do i = 1, n_linels + linelCoords(i)%position = linels(i)%cell + if (linels(i)%orientation < 0) then + orientation = abs(linels(i)%orientation) + linelCoords(i)%position(orientation) = linelCoords(i)%position(orientation) + 1 + end if + end do + orientation = linels(n_linels)%orientation + linelCoords(n_linels+1)%position = linelCoords(n_linels)%position + linelCoords(n_linels+1)%position(abs(orientation)) = & + linelCoords(n_linels+1)%position(abs(orientation)) + merge(1, -1, orientation > 0) + allocate(distance_to_linel_cell(n_linels+1)) + do i = 1, n_linels+1 + distance_to_linel_cell(i) = norm2(linelCoords(i)%position - probe_coord%position) + end do + m = minloc(distance_to_linel_cell) + local_idx = min(m(1), n_linels) + nd_index = res%tw(k)%twc(local_idx)%nd + return + end if + end do + end do + end function +#endif + end subroutine function getDomain(this, place, path) result(res) class(parser_t) :: this @@ -4443,12 +4747,12 @@ function getIntsAt(this, place, path, found) result(res) end function function getRealAt(this, place, path, found, default) result(res) - real :: res + real(kind=RKIND) :: res class(parser_t) :: this type(json_value), pointer :: place character(len=*) :: path logical, intent(out), optional :: found - real, optional :: default + real(kind=RKIND), optional :: default logical :: localFound call this%core%get(place, path, res, localFound, default) @@ -4460,7 +4764,7 @@ function getRealAt(this, place, path, found, default) result(res) end function function getRealsAt(this, place, path, found) result(res) - real, dimension(:), allocatable :: res + real(kind=RKIND), dimension(:), allocatable :: res class(parser_t) :: this type(json_value), pointer :: place character(len=*) :: path @@ -4605,14 +4909,20 @@ function getSingleVolumeInElementsIds(this, pw) result (res) elemIds = this%getIntsAt(pw, J_ELEMENTIDS, found=found) if (.not. found) then call WarnErrReport("Error reading single volume elementIds label not found.", .true.) + allocate(res(0)) + return end if if (size(elemIds) /= 1) then call WarnErrReport("Entity must contain a single elementId.", .true.) + allocate(res(0)) + return end if cellRegion = this%mesh%getCellRegion(elemIds(1), found) if (.not. found) then write(errorMsg, *) "Entity elementId ", elemIds(1), " not found." call WarnErrReport(errorMsg, .true.) + allocate(res(0)) + return end if res = cellRegion%getIntervalsOfType(CELL_TYPE_VOXEL) if (size(res) /= 1) then diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index a886241b2..6e1270661 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -203,12 +203,16 @@ module FDETYPES_m integer(kind=4), parameter :: FACE_Y = 2 integer(kind=4), parameter :: FACE_Z = 3 - integer(kind=4), parameter :: EDGE_X = 1 - integer(kind=4), parameter :: EDGE_Y = 2 - integer(kind=4), parameter :: EDGE_Z = 3 - - -#ifdef CompileWithReal4 + integer(kind=4), parameter :: EDGE_X = 1 + integer(kind=4), parameter :: EDGE_Y = 2 + integer(kind=4), parameter :: EDGE_Z = 3 + + ! Source types. + character(len=*), parameter :: F_SOURCE_VOLTAGE = 'VOLT' + character(len=*), parameter :: F_SOURCE_CURRENT = 'CURR' + + +#ifdef CompileWithReal4 CHARACTER (LEN=*), PARAMETER :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 #else #ifdef CompileWithReal8 diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 950a92a9e..cae69fc2a 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -2582,19 +2582,10 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 end if ! faces from V and S with same ratio are considered different media, bc they need to perform different operations - do j = 1, ubound(conformal_surfaces,1) - + do j = 1, ubound(conformal_surfaces,1) call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) - ! numertag = searchtag(tagtype,conformal_surfaces(j)%tag) - ! CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - ! & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - ! & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - ! & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - ! & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - ! & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - ! & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, conf_bounding_box, 0) - - end do + + end do if (ubound(conformal_surfaces, 1) > 0) then contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) @@ -5980,10 +5971,9 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize DEALLOCATE (lineasX, lineasY, lineasZ) !General Parameter sgg%InitialTimeStep = 0 - sgg%TimeSteps = this%general%nmax - sgg%dt = this%general%dt - if (sgg%dt < abs(tiny(1.0_RKIND)*2.0_RKIND)) sgg%dt=huge(1.0_RKIND)/2.0_RKIND - !border + sgg%TimeSteps = this%general%nmax + sgg%dt = this%general%dt + !border !this%BORDER%PROPIEDADESPML(I)%ORDEN no lo considero porque en el interior de mi programa lo pongo (esta a 2 normalmente) sgg%Border%IsBackPEC = .FALSE. sgg%Border%IsFrontPEC = .FALSE. diff --git a/src_main_pub/semba_fdtd.F90 b/src_main_pub/semba_fdtd.F90 index 2d5c6cd41..9cef18496 100755 --- a/src_main_pub/semba_fdtd.F90 +++ b/src_main_pub/semba_fdtd.F90 @@ -953,6 +953,7 @@ subroutine data_loader(filename, parsedProblem) parsed_t = fdtdjson_parser_t(filename) allocate(parsedProblem) parsedProblem = parsed_t%readProblemDescription() + if (isFatalError()) error stop 1 #endif else @@ -1345,4 +1346,4 @@ subroutine initEntrada(input) end subroutine -end module SEMBA_FDTD_m \ No newline at end of file +end module SEMBA_FDTD_m diff --git a/test/conformal/conformal_tests.h b/test/conformal/conformal_tests.h index 53254cc4c..8b6594ee7 100644 --- a/test/conformal/conformal_tests.h +++ b/test/conformal/conformal_tests.h @@ -18,6 +18,7 @@ extern "C" int test_geometry_side_side_contour_2(); extern "C" int test_geometry_side_side_contour_3(); extern "C" int test_geometry_areas(); extern "C" int test_geometry_closed_surface_orientation(); +extern "C" int test_geometry_combined_surface_topology(); extern "C" int test_cell_map_coords(); extern "C" int test_cell_map_array(); extern "C" int test_cell_map_add_triangle(); @@ -52,6 +53,7 @@ TEST(conformal, geometry_ss_contour2) { EXPECT_EQ(0, test_geometry_side_sid TEST(conformal, geometry_ss_contour3) { EXPECT_EQ(0, test_geometry_side_side_contour_3()); } TEST(conformal, geometry_areas) { EXPECT_EQ(0, test_geometry_areas()); } TEST(conformal, geometry_closed_surface_orientation) { EXPECT_EQ(0, test_geometry_closed_surface_orientation()); } +TEST(conformal, geometry_combined_surface_topology) { EXPECT_EQ(0, test_geometry_combined_surface_topology()); } TEST(conformal, cell_map_coords) { EXPECT_EQ(0, test_cell_map_coords()); } TEST(conformal, cell_map_array) { EXPECT_EQ(0, test_cell_map_array()); } diff --git a/test/conformal/test_geometry.F90 b/test/conformal/test_geometry.F90 index 642ab217e..b1871a88e 100644 --- a/test/conformal/test_geometry.F90 +++ b/test/conformal/test_geometry.F90 @@ -143,6 +143,99 @@ integer function test_geometry_closed_surface_orientation() bind(C) result(err) if (is_valid) err = err + 1 end function test_geometry_closed_surface_orientation +integer function test_geometry_combined_surface_topology() bind(C) result(err) + use conformal_m + use NFDETypes_m, only: ConformalPECElements_t + use Report_m, only: isFatalError, resetFatalError + implicit none + + type(ConformalPECElements_t) :: region + type(coord_t) :: c1, c2, c3, c4 + logical :: is_valid + character(len=256) :: message + integer :: interval_index + + err = 0 + allocate(region%triangles(0), region%intervals(6)) + region%intervals(1)%ini%cell = [1,0,0]; region%intervals(1)%end%cell = [1,1,1] + region%intervals(2)%ini%cell = [0,1,1]; region%intervals(2)%end%cell = [0,0,0] + region%intervals(3)%ini%cell = [0,1,0]; region%intervals(3)%end%cell = [1,1,1] + region%intervals(4)%ini%cell = [1,0,1]; region%intervals(4)%end%cell = [0,0,0] + region%intervals(5)%ini%cell = [0,0,1]; region%intervals(5)%end%cell = [1,1,1] + region%intervals(6)%ini%cell = [1,1,0]; region%intervals(6)%end%cell = [0,0,0] + call validateConformalVolume(region, is_valid, message) + if (.not. is_valid) err = err + 1 + do interval_index = 1, size(region%intervals) + call reverse_interval(region%intervals(interval_index)) + end do + call validateConformalVolume(region, is_valid, message) + if (.not. is_valid) err = err + 1 + do interval_index = 1, size(region%intervals) + call reverse_interval(region%intervals(interval_index)) + end do + call reverse_interval(region%intervals(1)) + call validateConformalVolume(region, is_valid, message) + if (is_valid) err = err + 1 + call reverse_interval(region%intervals(1)) + + deallocate(region%triangles, region%intervals) + allocate(region%intervals(5), region%triangles(2)) + region%intervals(1)%ini%cell = [1,0,0]; region%intervals(1)%end%cell = [1,1,1] + region%intervals(2)%ini%cell = [0,1,1]; region%intervals(2)%end%cell = [0,0,0] + region%intervals(3)%ini%cell = [0,1,0]; region%intervals(3)%end%cell = [1,1,1] + region%intervals(4)%ini%cell = [1,0,1]; region%intervals(4)%end%cell = [0,0,0] + region%intervals(5)%ini%cell = [1,1,0]; region%intervals(5)%end%cell = [0,0,0] + c1 = coord_t(position=[0.0,0.0,1.0], id=1) + c2 = coord_t(position=[1.0,0.0,1.0], id=2) + c3 = coord_t(position=[1.0,1.0,1.0], id=3) + c4 = coord_t(position=[0.0,1.0,1.0], id=4) + region%triangles(1) = triangle_t(vertices=[c1,c2,c3]) + region%triangles(2) = triangle_t(vertices=[c1,c3,c4]) + call validateConformalVolume(region, is_valid, message) + if (.not. is_valid) err = err + 1 + region%triangles(2)%vertices = [c1,c4,c3] + call validateConformalVolume(region, is_valid, message) + if (is_valid) err = err + 1 + + deallocate(region%triangles, region%intervals) + allocate(region%triangles(0), region%intervals(2)) + region%intervals(1)%ini%cell = [0,0,0]; region%intervals(1)%end%cell = [1,1,0] + region%intervals(2)%ini%cell = [1,0,0]; region%intervals(2)%end%cell = [2,1,0] + call validateConformalSurface(region, is_valid, message) + if (.not. is_valid) err = err + 1 + call reverse_interval(region%intervals(2)) + call validateConformalSurface(region, is_valid, message) + if (is_valid) err = err + 1 + call reverse_interval(region%intervals(2)) + region%intervals(2) = region%intervals(1) + call validateConformalSurface(region, is_valid, message) + if (is_valid) err = err + 1 + region%intervals(2)%ini%cell = [0,0,0] + region%intervals(2)%end%cell = [1,0,0] + call validateConformalSurface(region, is_valid, message) + if (is_valid) err = err + 1 + + deallocate(region%triangles, region%intervals) + allocate(region%triangles(0), region%intervals(1)) + region%intervals(1)%ini%cell = [0,1,0] + region%intervals(1)%end%cell = [1,0,0] + call resetFatalError() + call validateConformalSurface(region, is_valid, message) + if (is_valid) err = err + 1 + if (index(message, 'mixed-sign directions') == 0) err = err + 1 + if (.not. isFatalError()) err = err + 1 + call resetFatalError() + +contains + subroutine reverse_interval(interval) + type(interval_t), intent(inout) :: interval + type(point_t) :: point + point = interval%ini + interval%ini = interval%end + interval%end = point + end subroutine reverse_interval +end function test_geometry_combined_surface_topology + integer function test_geometry_side_position() bind(C) result(err) use geometry_m implicit none diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index 9a23632f8..2f3e5d151 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1584,12 +1584,16 @@ def run_variant(name, subtype, reverse_winding=False): } volume = results['volume'] + def assert_byte_equal(actual, expected, description): + if actual != expected: + raise AssertionError(description + ' differs byte-for-byte from the volume result') + for result in results.values(): assert result['inside'].keys() == volume['inside'].keys() for direction, probe in result['inside'].items(): assert np.count_nonzero(probe['field']) == 0 - assert probe['payload'] == volume['inside'][direction]['payload'] - assert result['far_payload'] == volume['far_payload'] + assert_byte_equal(probe['payload'], volume['inside'][direction]['payload'], 'inside probe') + assert_byte_equal(result['far_payload'], volume['far_payload'], 'far-field output') far = volume['far'] rg = far.loc[(far['Theta'] == 90.0) & (far['Phi'] == 0.0), 'rcs_geom'] @@ -1644,6 +1648,7 @@ def test_conformal_delay(tmp_path): @pytest.mark.conformal @pytest.mark.planewave @pytest.mark.probes +@pytest.mark.skip(reason="Conformal PEC surface timestepping is not implemented for open sheets.") @pytest.mark.parametrize("normal_axis,propagation,reverse_winding", [ ('x', 1, False), ('x', -1, False), ('x', 1, True), ('x', -1, True), ('y', 1, False), ('y', -1, False), ('z', 1, False), ('z', -1, False) diff --git a/test/pyWrapper/test_integration.py b/test/pyWrapper/test_integration.py index 91eaab608..cea2661b1 100644 --- a/test/pyWrapper/test_integration.py +++ b/test/pyWrapper/test_integration.py @@ -181,31 +181,6 @@ def test_fill_conformal_vtk_sphere(tmp_path): assert face_media_dict[1006] == 24 # Conformal PEC surface -@pytest.mark.conformal -@pytest.mark.vtk -def test_fill_conformal_surface_midcell_vtk(tmp_path): - fn = CASES_FOLDER + 'conformal_surface/conformal_surface_midcell.fdtd.json' - solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, - run_in_folder=tmp_path, flags=['-mapvtk']) - solver['general']['numberOfSteps'] = 1 - - solver.run() - - vtkmapfile = solver.getVTKMap() - assert os.path.isfile(vtkmapfile) - - line_media_dict = createPropertyDictionary( - vtkmapfile, celltype=3, property='mediatype') - face_media_dict = createPropertyDictionary( - vtkmapfile, celltype=9, property='mediatype') - volume_media_dict = createPropertyDictionary( - vtkmapfile, celltype=12, property='mediatype') - - assert sum(line_media_dict.values()) == 21 - assert sum(face_media_dict.values()) == 12 - assert not volume_media_dict - - @pytest.mark.conformal @pytest.mark.vtk def test_fill_mixed_conformal_volume_and_surfaces(tmp_path): @@ -261,29 +236,15 @@ def test_fill_conformal_fL_0_005_vtk_large_sphere(tmp_path): assert -1 not in face_media_dict.keys() @pytest.mark.conformal -@pytest.mark.vtk -def test_fill_conformal_fL_0_15_vtk_large_sphere(tmp_path): +def test_reject_conformal_fL_0_15_multiple_face_contours(tmp_path): fn = CASES_FOLDER + 'conformal/conformal_fL_0.15_sphere_rcs.fdtd.json' - solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, - run_in_folder=tmp_path, flags=['-mapvtk']) - solver['general']['numberOfSteps'] = 1 - - solver.run() - - vtkmapfile = solver.getVTKMap() - assert os.path.isfile(vtkmapfile) - - line_media_dict = createPropertyDictionary( - vtkmapfile, celltype=3, property='mediatype') + solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) - assert line_media_dict - assert -0.5 not in line_media_dict.keys() + result = subprocess.run(solver.run_command, cwd=solver.getFolder(), capture_output=True) + output = result.stdout + result.stderr - face_media_dict = createPropertyDictionary( - vtkmapfile, celltype=9, property='mediatype') - - assert face_media_dict - assert -1 not in face_media_dict.keys() + assert result.returncode != 0 + assert b'multiple disconnected contours' in output @pytest.mark.conformal @pytest.mark.vtk diff --git a/test/smbjson/smbjson_tests.h b/test/smbjson/smbjson_tests.h index cf46da7b1..dfb680e6b 100644 --- a/test/smbjson/smbjson_tests.h +++ b/test/smbjson/smbjson_tests.h @@ -12,6 +12,8 @@ extern "C" int test_mesh_polyline_to_linel(); extern "C" int test_parser_ctor(); extern "C" int test_parser_read_mesh(); extern "C" int test_parser_read_conformal_volume(); +extern "C" int test_parser_reject_conformal_cell_label(); +extern "C" int test_parser_reject_mixed_sign_surface_interval(); extern "C" int test_read_planewave(); extern "C" int test_read_planewave_empty_elementids(); @@ -50,6 +52,10 @@ TEST(smbjson, mesh_polyline_to_linel) { EXPECT_EQ(0, test_mesh_polyline_to_li TEST(smbjson, parser_ctor) { EXPECT_EQ(0, test_parser_ctor()); } TEST(smbjson, parser_read_mesh) { EXPECT_EQ(0, test_parser_read_mesh()); } TEST(smbjson, parser_read_conf_volume) { EXPECT_EQ(0, test_parser_read_conformal_volume()); } +TEST(smbjson, parser_reject_conformal_cell_label) { EXPECT_EQ(0, test_parser_reject_conformal_cell_label()); } +TEST(smbjson, parser_reject_mixed_sign_surface_interval) { + EXPECT_EQ(0, test_parser_reject_mixed_sign_surface_interval()); +} TEST(smbjson, read_planewave) { EXPECT_EQ(0, test_read_planewave()); } TEST(smbjson, read_planewave_empty_elementids) { EXPECT_EQ(0, test_read_planewave_empty_elementids()); } TEST(smbjson, read_dielectricslab) { EXPECT_EQ(0, test_read_dielectricslab()); } @@ -78,4 +84,3 @@ TEST(smbjson, read_unshielded_multiwires_multipolar_expansion) { #else TEST(smbjson, read_holland1981) { EXPECT_EQ(0, test_read_holland1981()); } #endif - diff --git a/test/smbjson/test_cells.F90 b/test/smbjson/test_cells.F90 index 6efbf34c3..18fc6f33c 100644 --- a/test/smbjson/test_cells.F90 +++ b/test/smbjson/test_cells.F90 @@ -1,6 +1,7 @@ integer function test_cells() bind(C) result(err) use cells_m use smbjson_testingTools + use Report_m, only: isFatalError, resetFatalError implicit none @@ -37,4 +38,12 @@ integer function test_cells() bind(C) result(err) if (interval%getType() /= CELL_TYPE_SURFEL) err = err + 1 if (interval%getOrientation() /= - DIR_X) err = err + 1 if (interval%getSize() /= 3) err = err + 1 -end function \ No newline at end of file + + ! A mixed-sign diagonal does not define an accepted surface orientation. + interval = cell_interval_t(ini=cell_t([5, 4, 2]), end=cell_t([5, 7, 1])) + if (.not. interval%hasMixedSignOrientation()) err = err + 1 + call resetFatalError() + if (interval%getOrientation() /= DIR_NULL) err = err + 1 + if (.not. isFatalError()) err = err + 1 + call resetFatalError() +end function diff --git a/test/smbjson/test_parser.F90 b/test/smbjson/test_parser.F90 index dfea5592a..78b750d91 100644 --- a/test/smbjson/test_parser.F90 +++ b/test/smbjson/test_parser.F90 @@ -134,3 +134,40 @@ integer function test_parser_read_conformal_volume() bind(C) result(err) if (.not. associated(problem%conformalRegs%volumes)) err = err + 1 if (size(problem%conformalRegs%volumes) /= 1) err = err + 1 end function + +integer function test_parser_reject_conformal_cell_label() bind(C) result(err) + use smbjson_m + use smbjson_testingTools + use Report_m, only: isFatalError, resetFatalError + implicit none + + character(len=*), parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'conformal_cell_label.fdtd.json' + type(parser_t) :: parser + type(mesh_t) :: mesh + + err = 0 + call resetFatalError() + parser = parser_t(filename) + mesh = parser%readMesh() + if (.not. isFatalError()) err = err + 1 + call resetFatalError() +end function test_parser_reject_conformal_cell_label + +integer function test_parser_reject_mixed_sign_surface_interval() bind(C) result(err) + use smbjson_m + use smbjson_testingTools + use Report_m, only: isFatalError, resetFatalError + implicit none + + character(len=*), parameter :: filename = & + PATH_TO_TEST_DATA//INPUT_EXAMPLES//'mixed_sign_surface_interval.fdtd.json' + type(parser_t) :: parser + type(mesh_t) :: mesh + + err = 0 + call resetFatalError() + parser = parser_t(filename) + mesh = parser%readMesh() + if (.not. isFatalError()) err = err + 1 + call resetFatalError() +end function test_parser_reject_mixed_sign_surface_interval diff --git a/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json b/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json index b8c40d573..4d1a038f0 100644 --- a/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json +++ b/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json @@ -8628,324 +8628,324 @@ [ 27, 15, - 6 + 5 ], [ 27, 16, - 5 + 6 ] ], [ [ 27, 16, - 6 + 5 ], [ 27, 17, - 5 + 6 ] ], [ [ 27, 17, - 6 + 5 ], [ 27, 18, - 5 + 6 ] ], [ [ 27, 18, - 6 + 5 ], [ 27, 19, - 5 + 6 ] ], [ [ 27, 18, - 7 + 6 ], [ 27, 19, - 6 + 7 ] ], [ [ 27, 19, - 6 + 5 ], [ 27, 20, - 5 + 6 ] ], [ [ 27, 19, - 7 + 6 ], [ 27, 20, - 6 + 7 ] ], [ [ 27, 20, - 6 + 5 ], [ 27, 21, - 5 + 6 ] ], [ [ 27, 20, - 7 + 6 ], [ 27, 21, - 6 + 7 ] ], [ [ 27, 21, - 6 + 5 ], [ 27, 22, - 5 + 6 ] ], [ [ 27, 21, - 7 + 6 ], [ 27, 22, - 6 + 7 ] ], [ [ 27, 21, - 8 + 7 ], [ 27, 22, - 7 + 8 ] ], [ [ 27, 22, - 6 + 5 ], [ 27, 23, - 5 + 6 ] ], [ [ 27, 22, - 7 + 6 ], [ 27, 23, - 6 + 7 ] ], [ [ 27, 22, - 8 + 7 ], [ 27, 23, - 7 + 8 ] ], [ [ 27, 14, - 6 + 5 ], [ 27, 15, - 5 + 6 ] ], [ [ 27, 14, - 7 + 6 ], [ 27, 15, - 6 + 7 ] ], [ [ 27, 14, - 8 + 7 ], [ 27, 15, - 7 + 8 ] ], [ [ 27, 15, - 7 + 6 ], [ 27, 16, - 6 + 7 ] ], [ [ 27, 15, - 8 + 7 ], [ 27, 16, - 7 + 8 ] ], [ [ 27, 16, - 7 + 6 ], [ 27, 17, - 6 + 7 ] ], [ [ 27, 16, - 8 + 7 ], [ 27, 17, - 7 + 8 ] ], [ [ 27, 17, - 7 + 6 ], [ 27, 18, - 6 + 7 ] ], [ [ 27, 17, - 8 + 7 ], [ 27, 18, - 7 + 8 ] ], [ [ 27, 18, - 8 + 7 ], [ 27, 19, - 7 + 8 ] ], [ [ 27, 19, - 8 + 7 ], [ 27, 20, - 7 + 8 ] ], [ [ 27, 20, - 8 + 7 ], [ 27, 21, - 7 + 8 ] ] ] diff --git a/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json b/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json index d89a2c2ab..1e30b48b8 100644 --- a/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json +++ b/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json @@ -8628,324 +8628,324 @@ [ 27, 15, - 6 + 5 ], [ 27, 16, - 5 + 6 ] ], [ [ 27, 16, - 6 + 5 ], [ 27, 17, - 5 + 6 ] ], [ [ 27, 17, - 6 + 5 ], [ 27, 18, - 5 + 6 ] ], [ [ 27, 18, - 6 + 5 ], [ 27, 19, - 5 + 6 ] ], [ [ 27, 18, - 7 + 6 ], [ 27, 19, - 6 + 7 ] ], [ [ 27, 19, - 6 + 5 ], [ 27, 20, - 5 + 6 ] ], [ [ 27, 19, - 7 + 6 ], [ 27, 20, - 6 + 7 ] ], [ [ 27, 20, - 6 + 5 ], [ 27, 21, - 5 + 6 ] ], [ [ 27, 20, - 7 + 6 ], [ 27, 21, - 6 + 7 ] ], [ [ 27, 21, - 6 + 5 ], [ 27, 22, - 5 + 6 ] ], [ [ 27, 21, - 7 + 6 ], [ 27, 22, - 6 + 7 ] ], [ [ 27, 21, - 8 + 7 ], [ 27, 22, - 7 + 8 ] ], [ [ 27, 22, - 6 + 5 ], [ 27, 23, - 5 + 6 ] ], [ [ 27, 22, - 7 + 6 ], [ 27, 23, - 6 + 7 ] ], [ [ 27, 22, - 8 + 7 ], [ 27, 23, - 7 + 8 ] ], [ [ 27, 14, - 6 + 5 ], [ 27, 15, - 5 + 6 ] ], [ [ 27, 14, - 7 + 6 ], [ 27, 15, - 6 + 7 ] ], [ [ 27, 14, - 8 + 7 ], [ 27, 15, - 7 + 8 ] ], [ [ 27, 15, - 7 + 6 ], [ 27, 16, - 6 + 7 ] ], [ [ 27, 15, - 8 + 7 ], [ 27, 16, - 7 + 8 ] ], [ [ 27, 16, - 7 + 6 ], [ 27, 17, - 6 + 7 ] ], [ [ 27, 16, - 8 + 7 ], [ 27, 17, - 7 + 8 ] ], [ [ 27, 17, - 7 + 6 ], [ 27, 18, - 6 + 7 ] ], [ [ 27, 17, - 8 + 7 ], [ 27, 18, - 7 + 8 ] ], [ [ 27, 18, - 8 + 7 ], [ 27, 19, - 7 + 8 ] ], [ [ 27, 19, - 8 + 7 ], [ 27, 20, - 7 + 8 ] ], [ [ 27, 20, - 8 + 7 ], [ 27, 21, - 7 + 8 ] ] ] diff --git a/testData/cases/conformal/conformal.fdtd.json b/testData/cases/conformal/conformal.fdtd.json index 02b5e200d..ba2b95f51 100644 --- a/testData/cases/conformal/conformal.fdtd.json +++ b/testData/cases/conformal/conformal.fdtd.json @@ -98,7 +98,7 @@ "relativePosition": [ 0, 0, - 5.0 + 4.25 ] }, { @@ -106,7 +106,7 @@ "relativePosition": [ 2, 0, - 5.0 + 4.25 ] }, { @@ -114,7 +114,7 @@ "relativePosition": [ 0, 2, - 5.0 + 4.25 ] }, { @@ -122,7 +122,7 @@ "relativePosition": [ 2, 2, - 5.0 + 4.25 ] }, { @@ -170,7 +170,7 @@ "relativePosition": [ 1, 0, - 5.0 + 4.25 ] }, { @@ -178,7 +178,7 @@ "relativePosition": [ 2, 1, - 5.0 + 4.25 ] }, { @@ -186,7 +186,7 @@ "relativePosition": [ 0, 1, - 5.0 + 4.25 ] }, { @@ -194,7 +194,7 @@ "relativePosition": [ 1, 2, - 5.0 + 4.25 ] }, { @@ -202,7 +202,7 @@ "relativePosition": [ 1, 1, - 5.0 + 4.25 ] } ], @@ -275,7 +275,9 @@ 1, 1, 5 - ], + ] + ], + [ [ 0, 1, @@ -285,7 +287,9 @@ 1, 2, 5 - ], + ] + ], + [ [ 1, 0, @@ -295,7 +299,9 @@ 2, 1, 5 - ], + ] + ], + [ [ 1, 1, @@ -309,25 +315,20 @@ ] ], "triangles": [ - [ - 7, - 18, - 20 - ], [ 7, 20, 16 ], [ - 16, - 20, - 17 + 7, + 18, + 20 ], [ - 16, - 17, - 8 + 18, + 19, + 20 ], [ 18, @@ -335,14 +336,14 @@ 19 ], [ - 18, - 19, - 20 + 16, + 17, + 8 ], [ + 16, 20, - 19, - 10 + 17 ], [ 20, @@ -350,45 +351,20 @@ 17 ], [ - 7, - 11, - 3 + 20, + 19, + 10 ], [ - 16, + 7, 11, 3 ], [ + 7, 16, - 4, 11 ], - [ - 16, - 8, - 4 - ], - [ - 8, - 12, - 4 - ], - [ - 8, - 17, - 12 - ], - [ - 17, - 10, - 6 - ], - [ - 17, - 6, - 12 - ], [ 9, 5, @@ -399,6 +375,16 @@ 14, 19 ], + [ + 16, + 4, + 11 + ], + [ + 16, + 8, + 4 + ], [ 19, 14, @@ -409,25 +395,45 @@ 6, 10 ], + [ + 7, + 13, + 18 + ], [ 7, 3, 13 ], [ - 7, - 13, - 18 + 8, + 17, + 12 ], [ - 18, - 13, - 5 + 8, + 12, + 4 ], [ 18, 5, 9 + ], + [ + 18, + 13, + 5 + ], + [ + 17, + 10, + 6 + ], + [ + 17, + 6, + 12 ] ] } @@ -500,4 +506,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json b/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json index a13b622bf..50ef9c60f 100644 --- a/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/conformal_fL_0.15_sphere_rcs.fdtd.json @@ -271,8 +271,8 @@ ], [ 22, - 35, - 37 + 37, + 35 ], [ 24, @@ -316,8 +316,8 @@ ], [ 31, - 22, - 37 + 37, + 22 ], [ 28, diff --git a/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json b/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json index 7faa42671..1453c14ef 100644 --- a/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/conformal_fL_sphere_rcs.fdtd.json @@ -271,8 +271,8 @@ ], [ 22, - 35, - 37 + 37, + 35 ], [ 24, @@ -316,8 +316,8 @@ ], [ 31, - 22, - 37 + 37, + 22 ], [ 28, diff --git a/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json b/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json index 969613c2d..3faf20077 100644 --- a/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json +++ b/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json @@ -60,54 +60,54 @@ "subtype": "volume", "intervals" : [], "triangles": [ - [1,2,3], - [8,1,3 ], + [8,1,2], + [2,1,11 ], - [3,2,4], - [3,4,7 ], - [5,3,7 ], - [3,5,6], - [3,6,8 ], - [19,8,6 ], - [19,18,1 ], - [8,19,1 ], + [19,1,8], [18,11,1 ], - [2,11,12], - [2,1,11], - [12,4,2 ], + [19,18,1 ], + [2,7,3], + [8,2,3 ], + [2,4,7 ], + [2,12,4 ], + [2,11,12 ], + [7,5,3 ], + [8,3,5], + [15,7,4], + [15,4,12 ], - [5,7,14], - [5,14,13], - [13,17,5], - [6,5,17], - [6,17,25], - [6,25,19], - [18,19,25], - [18,25,24], - [18,24,11], - [18,20,11], - [16,12,11], - [16,11,20], - [4,12,16], - [4,16,15], - [7,4,15], - [7,15,14], + [8,5,6], + [6,5,13], + [7,13,5], + [19,8,6], + [6,13,17], + [19,6,17], + [7,14,13], + [15,14,7], + [20,12,11], + [20,11,18], + [15,12,16], + [20,16,12], + [13,14,21], + [22,17,13], + [22,13,21], + [15,21,14], - [23,15,16], - [21,14,15], - [21,15,23], - [21,13,14], - [13,21,22], - [13,22,17], - [25,17,22], - [26,24,25], - [26,25,22], - [24,26,20], - [16,20,26], - [16,26,23], + [15,16,23], + [15,23,21], + [20,23,16], + [19,17,25], + [22,25,17], + [19,24,18], + [20,18,24], + [19,25,24], + [20,26,23], + [20,24,26], + [22,21,23], + [22,23,26], - [26,21,23], - [26,22,21] + [22,24,25], + [22,26,24] ] }, diff --git a/testData/cases/conformal/conformal_str_sphere_rcs.fdtd.json b/testData/cases/conformal/conformal_str_sphere_rcs.fdtd.json index 758d9913c..9db068027 100644 --- a/testData/cases/conformal/conformal_str_sphere_rcs.fdtd.json +++ b/testData/cases/conformal/conformal_str_sphere_rcs.fdtd.json @@ -67,23 +67,23 @@ [ 33, 31, - 20 + 21 ], [ 33, 30, - 21 + 20 ] ], [ [ 33, - 31, + 30, 21 ], [ 34, - 30, + 31, 21 ] ], @@ -198,24 +198,24 @@ [ [ 32, - 33, + 32, 21 ], [ 33, - 32, + 33, 21 ] ], [ [ 35, - 31, + 30, 22 ], [ 36, - 30, + 31, 22 ] ], @@ -258,12 +258,12 @@ [ [ 33, - 33, + 32, 21 ], [ 34, - 32, + 33, 21 ] ], @@ -329,12 +329,12 @@ ], [ [ - 34, + 35, 33, 22 ], [ - 35, + 34, 33, 21 ] @@ -355,23 +355,23 @@ [ 37, 31, - 22 + 23 ], [ 37, 30, - 23 + 22 ] ], [ [ 32, - 34, + 33, 21 ], [ 33, - 33, + 34, 21 ] ], @@ -427,23 +427,23 @@ [ 36, 32, - 22 + 23 ], [ 36, 31, - 23 + 22 ] ], [ [ 35, - 33, + 32, 22 ], [ 36, - 32, + 33, 22 ] ], @@ -461,12 +461,12 @@ ], [ [ - 30, + 31, 33, 21 ], [ - 31, + 30, 33, 20 ] @@ -498,12 +498,12 @@ [ [ 30, - 34, + 33, 21 ], [ 31, - 33, + 34, 21 ] ], @@ -534,24 +534,24 @@ [ [ 29, - 33, + 32, 20 ], [ 30, - 32, + 33, 20 ] ], [ [ 29, - 31, + 30, 20 ], [ 30, - 30, + 31, 20 ] ], @@ -594,12 +594,12 @@ [ [ 36, - 33, + 32, 23 ], [ 37, - 32, + 33, 23 ] ], @@ -629,12 +629,12 @@ ], [ [ - 29, + 30, 33, 21 ], [ - 30, + 29, 33, 20 ] @@ -654,23 +654,23 @@ [ [ 33, - 35, + 34, 22 ], [ 34, - 34, + 35, 22 ] ], [ [ - 32, + 33, 35, 22 ], [ - 33, + 32, 35, 21 ] @@ -678,23 +678,23 @@ [ [ 31, - 35, + 34, 21 ], [ 32, - 34, + 35, 21 ] ], [ [ - 35, + 36, 34, 23 ], [ - 36, + 35, 34, 22 ] @@ -713,12 +713,12 @@ ], [ [ - 38, + 37, 31, 23 ], [ - 37, + 38, 31, 24 ] @@ -738,36 +738,36 @@ [ [ 37, - 32, + 31, 24 ], [ 38, - 31, + 32, 24 ] ], [ [ 34, - 35, + 34, 22 ], [ 35, - 34, + 35, 22 ] ], [ [ 30, - 35, + 34, 21 ], [ 31, - 34, + 35, 21 ] ], @@ -785,12 +785,12 @@ ], [ [ - 31, + 32, 35, 22 ], [ - 32, + 31, 35, 21 ] @@ -821,12 +821,12 @@ ], [ [ - 34, + 35, 35, 23 ], [ - 35, + 34, 35, 22 ] @@ -834,24 +834,24 @@ [ [ 28, - 33, + 32, 20 ], [ 29, - 32, + 33, 20 ] ], [ [ 28, - 32, + 31, 20 ], [ 29, - 31, + 32, 20 ] ], @@ -869,12 +869,12 @@ ], [ [ - 28, + 29, 33, 21 ], [ - 29, + 28, 33, 20 ] @@ -894,12 +894,12 @@ [ [ 35, - 35, + 34, 23 ], [ 36, - 34, + 35, 23 ] ], @@ -942,23 +942,23 @@ [ [ 31, - 36, + 35, 22 ], [ 32, - 35, + 36, 22 ] ], [ [ - 30, + 31, 35, 22 ], [ - 31, + 30, 35, 21 ] @@ -966,12 +966,12 @@ [ [ 39, - 30, + 31, 25 ], [ 38, - 31, + 30, 25 ] ], @@ -1003,22 +1003,22 @@ [ 38, 31, - 25 + 24 ], [ 38, 32, - 24 + 25 ] ], [ [ - 33, + 34, 36, 23 ], [ - 34, + 33, 36, 22 ] @@ -1038,12 +1038,12 @@ [ [ 28, - 34, + 33, 21 ], [ 29, - 33, + 34, 21 ] ], @@ -1110,12 +1110,12 @@ [ [ 28, - 31, + 30, 20 ], [ 29, - 30, + 31, 20 ] ], @@ -1145,12 +1145,12 @@ ], [ [ - 32, + 33, 36, 23 ], [ - 33, + 32, 36, 22 ] @@ -1218,12 +1218,12 @@ [ [ 38, - 33, + 34, 24 ], [ 37, - 34, + 33, 24 ] ], @@ -1231,12 +1231,12 @@ [ 38, 33, - 25 + 24 ], [ 38, 34, - 24 + 25 ] ], [ @@ -1289,12 +1289,12 @@ ], [ [ - 27, + 28, 32, 21 ], [ - 28, + 27, 32, 20 ] @@ -1302,12 +1302,12 @@ [ [ 27, - 32, + 31, 20 ], [ 28, - 31, + 32, 20 ] ], @@ -1325,12 +1325,12 @@ ], [ [ - 31, + 32, 36, 23 ], [ - 32, + 31, 36, 22 ] @@ -1387,47 +1387,47 @@ [ 37, 34, - 25 + 24 ], [ 37, 35, - 24 + 25 ] ], [ [ 33, - 37, + 36, 23 ], [ 34, - 36, + 37, 23 ] ], [ [ 31, - 37, + 36, 23 ], [ 32, - 36, + 37, 23 ] ], [ [ 39, - 32, + 33, 25 ], [ 38, - 33, + 32, 25 ] ], @@ -1447,12 +1447,12 @@ [ 39, 32, - 26 + 25 ], [ 39, 33, - 25 + 26 ] ], [ @@ -1481,12 +1481,12 @@ ], [ [ - 30, + 31, 37, 23 ], [ - 31, + 30, 37, 22 ] @@ -1567,12 +1567,12 @@ [ 36, 35, - 25 + 24 ], [ 36, 36, - 24 + 25 ] ], [ @@ -1591,12 +1591,12 @@ [ 38, 33, - 26 + 25 ], [ 38, 34, - 25 + 26 ] ], [ @@ -1614,12 +1614,12 @@ [ [ 27, - 35, + 34, 21 ], [ 28, - 34, + 35, 21 ] ], @@ -1638,48 +1638,48 @@ [ [ 27, - 31, + 30, 20 ], [ 28, - 30, + 31, 20 ] ], [ [ 38, - 34, + 35, 25 ], [ 37, - 35, + 34, 25 ] ], [ [ 37, - 35, + 36, 25 ], [ 36, - 36, + 35, 25 ] ], [ [ 29, - 37, + 36, 22 ], [ 30, - 36, + 37, 22 ] ], @@ -1699,12 +1699,12 @@ [ 39, 31, - 27 + 26 ], [ 39, 32, - 26 + 27 ] ], [ @@ -1818,12 +1818,12 @@ [ [ 26, - 34, + 33, 21 ], [ 27, - 33, + 34, 21 ] ], @@ -1831,12 +1831,12 @@ [ 39, 32, - 27 + 26 ], [ 39, 33, - 26 + 27 ] ], [ @@ -1854,12 +1854,12 @@ [ [ 36, - 36, + 37, 25 ], [ 35, - 37, + 36, 25 ] ], @@ -1891,23 +1891,23 @@ [ 27, 31, - 20 + 21 ], [ 27, 30, - 21 + 20 ] ], [ [ 26, - 32, + 31, 21 ], [ 27, - 31, + 32, 21 ] ], @@ -1915,12 +1915,12 @@ [ 37, 35, - 26 + 25 ], [ 37, 36, - 25 + 26 ] ], [ @@ -1950,12 +1950,12 @@ [ [ 32, - 38, + 37, 24 ], [ 33, - 37, + 38, 24 ] ], @@ -1986,12 +1986,12 @@ [ [ 28, - 37, + 36, 23 ], [ 29, - 36, + 37, 23 ] ], @@ -2011,12 +2011,12 @@ [ 39, 33, - 27 + 26 ], [ 39, 34, - 26 + 27 ] ], [ @@ -2034,12 +2034,12 @@ [ [ 26, - 35, + 34, 22 ], [ 27, - 34, + 35, 22 ] ], @@ -2069,12 +2069,12 @@ ], [ [ - 37, + 36, 36, 25 ], [ - 36, + 37, 36, 26 ] @@ -2094,12 +2094,12 @@ [ [ 30, - 38, + 37, 23 ], [ 31, - 37, + 38, 23 ] ], @@ -2142,12 +2142,12 @@ [ [ 33, - 38, + 37, 24 ], [ 34, - 37, + 38, 24 ] ], @@ -2179,12 +2179,12 @@ [ 40, 31, - 28 + 27 ], [ 40, 32, - 27 + 28 ] ], [ @@ -2203,22 +2203,22 @@ [ 36, 36, - 26 + 25 ], [ 36, 37, - 25 + 26 ] ], [ [ - 30, + 31, 38, 24 ], [ - 31, + 30, 38, 23 ] @@ -2262,12 +2262,12 @@ [ [ 38, - 35, + 36, 26 ], [ 37, - 36, + 35, 26 ] ], @@ -2299,12 +2299,12 @@ [ 39, 32, - 28 + 27 ], [ 39, 33, - 27 + 28 ] ], [ @@ -2335,12 +2335,12 @@ [ 27, 30, - 20 + 21 ], [ 27, 29, - 21 + 20 ] ], [ @@ -2359,22 +2359,22 @@ [ 38, 35, - 27 + 26 ], [ 38, 36, - 26 + 27 ] ], [ [ - 38, + 37, 36, 26 ], [ - 37, + 38, 36, 27 ] @@ -2382,23 +2382,23 @@ [ [ 37, - 36, + 37, 26 ], [ 36, - 37, + 36, 26 ] ], [ [ - 29, + 30, 38, 24 ], [ - 30, + 29, 38, 23 ] @@ -2454,24 +2454,24 @@ [ [ 25, - 33, + 32, 21 ], [ 26, - 32, + 33, 21 ] ], [ [ 26, - 31, + 32, 21 ], [ 25, - 32, + 31, 21 ] ], @@ -2479,12 +2479,12 @@ [ 35, 37, - 26 + 25 ], [ 35, 38, - 25 + 26 ] ], [ @@ -2514,12 +2514,12 @@ [ [ 26, - 30, + 29, 21 ], [ 27, - 29, + 30, 21 ] ], @@ -2549,12 +2549,12 @@ ], [ [ - 31, + 32, 38, 25 ], [ - 32, + 31, 38, 24 ] @@ -2574,12 +2574,12 @@ [ [ 39, - 34, + 35, 27 ], [ 38, - 35, + 34, 27 ] ], @@ -2634,12 +2634,12 @@ [ [ 40, - 32, + 33, 28 ], [ 39, - 33, + 32, 28 ] ], @@ -2647,12 +2647,12 @@ [ 37, 36, - 27 + 26 ], [ 37, 37, - 26 + 27 ] ], [ @@ -2683,22 +2683,22 @@ [ 39, 34, - 28 + 27 ], [ 39, 35, - 27 + 28 ] ], [ [ - 39, + 38, 35, 27 ], [ - 38, + 39, 35, 28 ] @@ -2754,12 +2754,12 @@ [ [ 36, - 37, + 38, 26 ], [ 35, - 38, + 37, 26 ] ], @@ -2777,12 +2777,12 @@ ], [ [ - 27, + 28, 37, 24 ], [ - 28, + 27, 37, 23 ] @@ -2873,12 +2873,12 @@ ], [ [ - 40, + 39, 33, 28 ], [ - 39, + 40, 33, 29 ] @@ -2899,22 +2899,22 @@ [ 36, 37, - 27 + 26 ], [ 36, 38, - 26 + 27 ] ], [ [ - 36, + 35, 38, 26 ], [ - 35, + 36, 38, 27 ] @@ -2945,12 +2945,12 @@ ], [ [ - 29, + 30, 38, 25 ], [ - 30, + 29, 38, 24 ] @@ -2959,24 +2959,24 @@ [ 27, 29, - 20 + 21 ], [ 27, 28, - 21 + 20 ] ], [ [ 40, 30, - 30 + 29 ], [ 40, 31, - 29 + 30 ] ], [ @@ -3006,12 +3006,12 @@ [ [ 25, - 36, + 35, 23 ], [ 26, - 35, + 36, 23 ] ], @@ -3042,23 +3042,23 @@ [ [ 34, - 38, + 39, 26 ], [ 33, - 39, + 38, 26 ] ], [ [ - 26, + 27, 37, 24 ], [ - 27, + 26, 37, 23 ] @@ -3090,12 +3090,12 @@ [ [ 29, - 39, + 38, 25 ], [ 30, - 38, + 39, 25 ] ], @@ -3151,12 +3151,12 @@ [ 37, 36, - 28 + 27 ], [ 37, 37, - 27 + 28 ] ], [ @@ -3185,12 +3185,12 @@ ], [ [ - 28, + 29, 38, 25 ], [ - 29, + 28, 38, 24 ] @@ -3221,12 +3221,12 @@ ], [ [ - 28, + 27, 28, 20 ], [ - 27, + 28, 28, 21 ] @@ -3269,12 +3269,12 @@ ], [ [ - 37, + 36, 37, 27 ], [ - 36, + 37, 37, 28 ] @@ -3283,12 +3283,12 @@ [ 40, 32, - 30 + 29 ], [ 40, 33, - 29 + 30 ] ], [ @@ -3329,24 +3329,24 @@ ], [ [ - 27, + 28, 38, 25 ], [ - 28, + 27, 38, 24 ] ], [ [ - 25, + 26, 36, 24 ], [ - 26, + 25, 36, 23 ] @@ -3438,12 +3438,12 @@ [ [ 28, - 39, + 38, 25 ], [ 29, - 38, + 39, 25 ] ], @@ -3451,12 +3451,12 @@ [ 24, 33, - 22 + 23 ], [ 24, 32, - 23 + 22 ] ], [ @@ -3487,24 +3487,24 @@ [ 40, 30, - 31 + 30 ], [ 40, 31, - 30 + 31 ] ], [ [ 39, 33, - 30 + 29 ], [ 39, 34, - 29 + 30 ] ], [ @@ -3533,12 +3533,12 @@ ], [ [ - 29, + 30, 39, 26 ], [ - 30, + 29, 39, 25 ] @@ -3546,23 +3546,23 @@ [ [ 26, - 38, + 37, 24 ], [ 27, - 37, + 38, 24 ] ], [ [ - 26, + 27, 38, 25 ], [ - 27, + 26, 38, 24 ] @@ -3582,12 +3582,12 @@ [ [ 35, - 38, + 39, 27 ], [ 34, - 39, + 38, 27 ] ], @@ -3605,12 +3605,12 @@ ], [ [ - 38, + 37, 36, 28 ], [ - 37, + 38, 36, 29 ] @@ -3629,12 +3629,12 @@ ], [ [ - 24, + 25, 35, 24 ], [ - 25, + 24, 35, 23 ] @@ -3667,12 +3667,12 @@ [ 28, 28, - 20 + 21 ], [ 28, 27, - 21 + 20 ] ], [ @@ -3691,12 +3691,12 @@ [ 39, 34, - 30 + 29 ], [ 39, 35, - 29 + 30 ] ], [ @@ -3715,12 +3715,12 @@ [ 35, 38, - 28 + 27 ], [ 35, 39, - 27 + 28 ] ], [ @@ -3749,12 +3749,12 @@ ], [ [ - 28, + 29, 39, 26 ], [ - 29, + 28, 39, 25 ] @@ -3798,35 +3798,35 @@ [ [ 24, - 36, + 35, 24 ], [ 25, - 35, + 36, 24 ] ], [ [ 24, - 32, + 33, 23 ], [ 23, - 33, + 32, 23 ] ], [ [ - 24, + 23, 31, 22 ], [ - 23, + 24, 31, 23 ] @@ -3834,23 +3834,23 @@ [ [ 38, - 36, + 37, 29 ], [ 37, - 37, + 36, 29 ] ], [ [ - 25, + 26, 37, 25 ], [ - 26, + 25, 37, 24 ] @@ -3858,12 +3858,12 @@ [ [ 24, - 33, + 34, 23 ], [ 23, - 34, + 33, 23 ] ], @@ -3882,12 +3882,12 @@ [ [ 24, - 31, + 32, 23 ], [ 23, - 32, + 31, 23 ] ], @@ -3907,24 +3907,24 @@ [ 40, 32, - 31 + 30 ], [ 40, 33, - 30 + 31 ] ], [ [ 38, 35, - 30 + 29 ], [ 38, 36, - 29 + 30 ] ], [ @@ -3941,12 +3941,12 @@ ], [ [ - 36, + 37, 37, 29 ], [ - 37, + 36, 37, 28 ] @@ -3977,12 +3977,12 @@ ], [ [ - 27, + 28, 39, 26 ], [ - 28, + 27, 39, 25 ] @@ -4001,12 +4001,12 @@ ], [ [ - 29, + 28, 27, 20 ], [ - 28, + 29, 27, 21 ] @@ -4027,12 +4027,12 @@ [ 27, 38, - 26 + 25 ], [ 27, 39, - 25 + 26 ] ], [ @@ -4073,12 +4073,12 @@ ], [ [ - 40, + 39, 33, 30 ], [ - 39, + 40, 33, 31 ] @@ -4087,12 +4087,12 @@ [ 25, 36, - 25 + 24 ], [ 25, 37, - 24 + 25 ] ], [ @@ -4122,12 +4122,12 @@ [ [ 37, - 37, + 38, 29 ], [ 36, - 38, + 37, 29 ] ], @@ -4145,12 +4145,12 @@ ], [ [ - 24, + 25, 36, 25 ], [ - 25, + 24, 36, 24 ] @@ -4170,12 +4170,12 @@ [ [ 24, - 34, + 35, 24 ], [ 23, - 35, + 34, 24 ] ], @@ -4193,24 +4193,24 @@ ], [ [ - 32, + 33, 39, 28 ], [ - 33, + 32, 39, 27 ] ], [ [ - 26, + 27, 38, 26 ], [ - 27, + 26, 38, 25 ] @@ -4242,12 +4242,12 @@ [ [ 25, - 28, + 27, 21 ], [ 26, - 27, + 28, 21 ] ], @@ -4279,12 +4279,12 @@ [ 40, 31, - 32 + 31 ], [ 40, 32, - 31 + 32 ] ], [ @@ -4314,24 +4314,24 @@ [ [ 25, - 38, + 37, 25 ], [ 26, - 37, + 38, 25 ] ], [ [ 24, - 37, + 36, 25 ], [ 25, - 36, + 37, 25 ] ], @@ -4349,12 +4349,12 @@ ], [ [ - 26, + 25, 27, 21 ], [ - 25, + 26, 27, 22 ] @@ -4385,12 +4385,12 @@ ], [ [ - 28, + 29, 39, 27 ], [ - 29, + 28, 39, 26 ] @@ -4410,12 +4410,12 @@ [ [ 23, - 30, + 29, 22 ], [ 24, - 29, + 30, 22 ] ], @@ -4483,58 +4483,58 @@ [ 40, 32, - 32 + 31 ], [ 40, 33, - 31 + 32 ] ], [ [ 29, - 40, + 39, 27 ], [ 30, - 39, + 40, 27 ] ], [ [ - 25, + 26, 38, 26 ], [ - 26, + 25, 38, 25 ] ], [ [ - 24, + 23, 35, 24 ], [ - 23, + 24, 35, 25 ] ], [ [ - 39, + 38, 35, 30 ], [ - 38, + 39, 35, 31 ] @@ -4625,24 +4625,24 @@ ], [ [ - 27, + 28, 39, 27 ], [ - 28, + 27, 39, 26 ] ], [ [ - 23, + 24, 29, 23 ], [ - 24, + 23, 29, 22 ] @@ -4651,12 +4651,12 @@ [ 38, 35, - 31 + 30 ], [ 38, 36, - 30 + 31 ] ], [ @@ -4723,12 +4723,12 @@ [ 26, 27, - 21 + 22 ], [ 26, 26, - 22 + 21 ] ], [ @@ -4746,24 +4746,24 @@ [ [ 30, - 29, + 28, 20 ], [ 31, - 28, + 29, 20 ] ], [ [ 28, - 27, + 26, 21 ], [ 29, - 26, + 27, 21 ] ], @@ -4781,12 +4781,12 @@ ], [ [ - 24, + 25, 37, 26 ], [ - 25, + 24, 37, 25 ] @@ -4817,12 +4817,12 @@ ], [ [ - 35, + 36, 38, 30 ], [ - 36, + 35, 38, 29 ] @@ -4830,24 +4830,24 @@ [ [ 23, - 32, + 33, 24 ], [ 22, - 33, + 32, 24 ] ], [ [ 40, - 32, + 33, 32 ], [ 39, - 33, + 32, 32 ] ], @@ -4913,12 +4913,12 @@ ], [ [ - 26, + 27, 39, 27 ], [ - 27, + 26, 39, 26 ] @@ -4949,12 +4949,12 @@ ], [ [ - 38, + 37, 37, 30 ], [ - 37, + 38, 37, 31 ] @@ -4963,12 +4963,12 @@ [ 39, 34, - 32 + 31 ], [ 39, 35, - 31 + 32 ] ], [ @@ -5009,12 +5009,12 @@ ], [ [ - 27, + 26, 26, 21 ], [ - 26, + 27, 26, 22 ] @@ -5022,12 +5022,12 @@ [ [ 28, - 40, + 39, 27 ], [ 29, - 39, + 40, 27 ] ], @@ -5059,12 +5059,12 @@ [ 40, 31, - 33 + 32 ], [ 40, 32, - 32 + 33 ] ], [ @@ -5083,22 +5083,22 @@ [ 24, 36, - 26 + 25 ], [ 24, 37, - 25 + 26 ] ], [ [ - 23, + 22, 34, 24 ], [ - 22, + 23, 34, 25 ] @@ -5117,12 +5117,12 @@ ], [ [ - 40, + 39, 32, 32 ], [ - 39, + 40, 32, 33 ] @@ -5166,12 +5166,12 @@ [ [ 40, - 30, + 31, 33 ], [ 39, - 31, + 30, 33 ] ], @@ -5189,24 +5189,24 @@ ], [ [ - 28, + 29, 40, 28 ], [ - 29, + 28, 40, 27 ] ], [ [ - 23, + 24, 36, 26 ], [ - 24, + 23, 36, 25 ] @@ -5238,35 +5238,35 @@ [ [ 40, - 31, + 32, 33 ], [ 39, - 32, + 31, 33 ] ], [ [ 30, - 30, + 29, 20 ], [ 31, - 29, + 30, 20 ] ], [ [ - 31, + 32, 40, 29 ], [ - 32, + 31, 40, 28 ] @@ -5285,12 +5285,12 @@ ], [ [ - 25, + 26, 38, 27 ], [ - 26, + 25, 38, 26 ] @@ -5311,24 +5311,24 @@ [ 39, 32, - 33 + 32 ], [ 39, 33, - 32 + 33 ] ], [ [ 38, 35, - 32 + 31 ], [ 38, 36, - 31 + 32 ] ], [ @@ -5345,12 +5345,12 @@ ], [ [ - 33, + 34, 39, 30 ], [ - 34, + 33, 39, 29 ] @@ -5383,23 +5383,23 @@ [ 23, 35, - 26 + 25 ], [ 23, 36, - 25 + 26 ] ], [ [ 38, - 36, + 37, 31 ], [ 37, - 37, + 36, 31 ] ], @@ -5417,12 +5417,12 @@ ], [ [ - 27, + 28, 39, 28 ], [ - 28, + 27, 39, 27 ] @@ -5431,12 +5431,12 @@ [ 22, 32, - 25 + 24 ], [ 22, 33, - 24 + 25 ] ], [ @@ -5455,24 +5455,24 @@ [ 27, 26, - 21 + 22 ], [ 27, 25, - 22 + 21 ] ], [ [ 33, 39, - 30 + 29 ], [ 33, 40, - 29 + 30 ] ], [ @@ -5489,12 +5489,12 @@ ], [ [ - 24, + 25, 38, 27 ], [ - 25, + 24, 38, 26 ] @@ -5599,12 +5599,12 @@ [ 39, 33, - 33 + 32 ], [ 39, 34, - 32 + 33 ] ], [ @@ -5635,46 +5635,46 @@ [ 24, 37, - 27 + 26 ], [ 24, 38, - 26 + 27 ] ], [ [ - 23, + 22, 35, 25 ], [ - 22, + 23, 35, 26 ] ], [ [ - 24, + 25, 26, 23 ], [ - 25, + 24, 26, 22 ] ], [ [ - 28, + 27, 25, 21 ], [ - 27, + 28, 25, 22 ] @@ -5693,12 +5693,12 @@ ], [ [ - 35, + 36, 38, 31 ], [ - 36, + 35, 38, 30 ] @@ -5719,23 +5719,23 @@ [ 35, 38, - 31 + 30 ], [ 35, 39, - 30 + 31 ] ], [ [ 30, - 27, + 26, 21 ], [ 31, - 26, + 27, 21 ] ], @@ -5753,12 +5753,12 @@ ], [ [ - 26, + 27, 39, 28 ], [ - 27, + 26, 39, 27 ] @@ -5767,12 +5767,12 @@ [ 22, 34, - 26 + 25 ], [ 22, 35, - 25 + 26 ] ], [ @@ -5789,12 +5789,12 @@ ], [ [ - 23, + 22, 29, 23 ], [ - 22, + 23, 29, 24 ] @@ -5802,12 +5802,12 @@ [ [ 37, - 37, + 38, 31 ], [ 36, - 38, + 37, 31 ] ], @@ -5837,12 +5837,12 @@ ], [ [ - 39, + 38, 35, 32 ], [ - 38, + 39, 35, 33 ] @@ -5851,12 +5851,12 @@ [ 39, 34, - 33 + 32 ], [ 39, 35, - 32 + 33 ] ], [ @@ -5873,12 +5873,12 @@ ], [ [ - 23, + 24, 37, 27 ], [ - 24, + 23, 37, 26 ] @@ -5909,12 +5909,12 @@ ], [ [ - 34, + 35, 39, 31 ], [ - 35, + 34, 39, 30 ] @@ -5993,12 +5993,12 @@ ], [ [ - 28, + 29, 40, 29 ], [ - 29, + 28, 40, 28 ] @@ -6017,12 +6017,12 @@ ], [ [ - 25, + 26, 39, 28 ], [ - 26, + 25, 39, 27 ] @@ -6043,23 +6043,23 @@ [ 25, 26, - 22 + 23 ], [ 25, 25, - 23 + 22 ] ], [ [ 39, - 34, + 35, 33 ], [ 38, - 35, + 34, 33 ] ], @@ -6067,12 +6067,12 @@ [ 22, 30, - 25 + 24 ], [ 22, 31, - 24 + 25 ] ], [ @@ -6089,12 +6089,12 @@ ], [ [ - 30, + 31, 40, 30 ], [ - 31, + 30, 40, 29 ] @@ -6115,58 +6115,58 @@ [ 39, 32, - 34 + 33 ], [ 39, 33, - 33 + 34 ] ], [ [ 38, 35, - 33 + 32 ], [ 38, 36, - 32 + 33 ] ], [ [ 22, - 31, + 32, 25 ], [ 21, - 32, + 31, 25 ] ], [ [ - 26, + 25, 25, 22 ], [ - 25, + 26, 25, 23 ] ], [ [ - 33, + 34, 39, 31 ], [ - 34, + 33, 39, 30 ] @@ -6187,59 +6187,59 @@ [ 23, 27, - 24 + 23 ], [ 23, 28, - 23 + 24 ] ], [ [ 24, - 26, + 27, 23 ], [ 23, - 27, + 26, 23 ] ], [ [ 31, - 29, + 28, 20 ], [ 32, - 28, + 29, 20 ] ], [ [ 22, - 30, + 31, 25 ], [ 21, - 31, + 30, 25 ] ], [ [ 31, - 28, + 27, 20 ], [ 32, - 27, + 28, 20 ] ], @@ -6269,24 +6269,24 @@ ], [ [ - 24, + 25, 38, 28 ], [ - 25, + 24, 38, 27 ] ], [ [ - 22, + 23, 36, 27 ], [ - 23, + 22, 36, 26 ] @@ -6305,12 +6305,12 @@ ], [ [ - 21, + 22, 33, 26 ], [ - 22, + 21, 33, 25 ] @@ -6318,12 +6318,12 @@ [ [ 22, - 32, + 33, 25 ], [ 21, - 33, + 32, 25 ] ], @@ -6331,12 +6331,12 @@ [ 33, 39, - 31 + 30 ], [ 33, 40, - 30 + 31 ] ], [ @@ -6355,24 +6355,24 @@ [ 21, 32, - 26 + 25 ], [ 21, 33, - 25 + 26 ] ], [ [ 22, 29, - 25 + 24 ], [ 22, 30, - 24 + 25 ] ], [ @@ -6389,12 +6389,12 @@ ], [ [ - 29, + 30, 40, 30 ], [ - 30, + 29, 40, 29 ] @@ -6402,12 +6402,12 @@ [ [ 23, - 27, + 28, 24 ], [ 22, - 28, + 27, 24 ] ], @@ -6439,22 +6439,22 @@ [ 35, 38, - 32 + 31 ], [ 35, 39, - 31 + 32 ] ], [ [ - 32, + 33, 40, 31 ], [ - 33, + 32, 40, 30 ] @@ -6462,12 +6462,12 @@ [ [ 24, - 26, + 25, 23 ], [ 25, - 25, + 26, 23 ] ], @@ -6487,12 +6487,12 @@ [ 37, 36, - 33 + 32 ], [ 37, 37, - 32 + 33 ] ], [ @@ -6511,12 +6511,12 @@ [ 24, 37, - 28 + 27 ], [ 24, 38, - 27 + 28 ] ], [ @@ -6534,23 +6534,23 @@ [ [ 22, - 29, + 30, 25 ], [ 21, - 30, + 29, 25 ] ], [ [ - 38, + 39, 34, 34 ], [ - 39, + 38, 34, 33 ] @@ -6571,24 +6571,24 @@ [ 23, 26, - 24 + 23 ], [ 23, 27, - 23 + 24 ] ], [ [ 26, 25, - 22 + 23 ], [ 26, 24, - 23 + 22 ] ], [ @@ -6617,12 +6617,12 @@ ], [ [ - 30, + 29, 25, 21 ], [ - 29, + 30, 25, 22 ] @@ -6641,12 +6641,12 @@ ], [ [ - 23, + 24, 37, 28 ], [ - 24, + 23, 37, 27 ] @@ -6655,24 +6655,24 @@ [ 22, 34, - 27 + 26 ], [ 22, 35, - 26 + 27 ] ], [ [ 21, 31, - 26 + 25 ], [ 21, 32, - 25 + 26 ] ], [ @@ -6701,12 +6701,12 @@ ], [ [ - 27, + 26, 24, 22 ], [ - 26, + 27, 24, 23 ] @@ -6737,24 +6737,24 @@ ], [ [ - 36, + 37, 37, 33 ], [ - 37, + 36, 37, 32 ] ], [ [ - 23, + 24, 26, 24 ], [ - 24, + 23, 26, 23 ] @@ -6763,12 +6763,12 @@ [ 32, 28, - 20 + 21 ], [ 32, 27, - 21 + 20 ] ], [ @@ -6809,12 +6809,12 @@ ], [ [ - 22, + 21, 34, 26 ], [ - 21, + 22, 34, 27 ] @@ -6822,12 +6822,12 @@ [ [ 39, - 33, + 34, 34 ], [ 38, - 34, + 33, 34 ] ], @@ -6835,12 +6835,12 @@ [ 36, 37, - 33 + 32 ], [ 36, 38, - 32 + 33 ] ], [ @@ -6869,12 +6869,12 @@ ], [ [ - 27, + 28, 40, 30 ], [ - 28, + 27, 40, 29 ] @@ -6895,46 +6895,46 @@ [ 21, 33, - 27 + 26 ], [ 21, 34, - 26 + 27 ] ], [ [ 21, 30, - 26 + 25 ], [ 21, 31, - 25 + 26 ] ], [ [ 24, 25, - 24 + 23 ], [ 24, 26, - 23 + 24 ] ], [ [ - 30, + 31, 40, 31 ], [ - 31, + 30, 40, 30 ] @@ -6979,12 +6979,12 @@ [ 22, 27, - 25 + 24 ], [ 22, 28, - 24 + 25 ] ], [ @@ -7002,12 +7002,12 @@ [ [ 31, - 30, + 29, 20 ], [ 32, - 29, + 30, 20 ] ], @@ -7025,12 +7025,12 @@ ], [ [ - 39, + 38, 33, 34 ], [ - 38, + 39, 33, 35 ] @@ -7049,12 +7049,12 @@ ], [ [ - 37, + 38, 36, 34 ], [ - 38, + 37, 36, 33 ] @@ -7063,12 +7063,12 @@ [ 38, 35, - 34 + 33 ], [ 38, 36, - 33 + 34 ] ], [ @@ -7087,12 +7087,12 @@ [ 33, 39, - 32 + 31 ], [ 33, 40, - 31 + 32 ] ], [ @@ -7110,35 +7110,35 @@ [ [ 22, - 28, + 29, 25 ], [ 21, - 29, + 28, 25 ] ], [ [ - 28, + 27, 24, 22 ], [ - 27, + 28, 24, 23 ] ], [ [ - 31, + 30, 25, 21 ], [ - 30, + 31, 25, 22 ] @@ -7158,12 +7158,12 @@ [ [ 24, - 25, + 26, 24 ], [ 23, - 26, + 25, 24 ] ], @@ -7181,12 +7181,12 @@ ], [ [ - 26, + 27, 39, 30 ], [ - 27, + 26, 39, 29 ] @@ -7231,23 +7231,23 @@ [ 21, 29, - 26 + 25 ], [ 21, 30, - 25 + 26 ] ], [ [ 31, - 26, + 25, 21 ], [ 32, - 25, + 26, 21 ] ], @@ -7265,12 +7265,12 @@ ], [ [ - 29, + 30, 40, 31 ], [ - 30, + 29, 40, 30 ] @@ -7291,34 +7291,34 @@ [ 22, 26, - 25 + 24 ], [ 22, 27, - 24 + 25 ] ], [ [ 22, - 27, + 26, 24 ], [ 23, - 26, + 27, 24 ] ], [ [ - 25, + 24, 25, 23 ], [ - 24, + 25, 25, 24 ] @@ -7338,12 +7338,12 @@ [ [ 32, - 28, + 27, 21 ], [ 33, - 27, + 28, 21 ] ], @@ -7351,22 +7351,22 @@ [ 38, 33, - 35 + 34 ], [ 38, 34, - 34 + 35 ] ], [ [ - 34, + 35, 39, 33 ], [ - 35, + 34, 39, 32 ] @@ -7375,12 +7375,12 @@ [ 35, 38, - 33 + 32 ], [ 35, 39, - 32 + 33 ] ], [ @@ -7397,12 +7397,12 @@ ], [ [ - 22, + 23, 26, 25 ], [ - 23, + 22, 26, 24 ] @@ -7411,22 +7411,22 @@ [ 37, 36, - 34 + 33 ], [ 37, 37, - 33 + 34 ] ], [ [ - 23, + 24, 37, 29 ], [ - 24, + 23, 37, 28 ] @@ -7435,24 +7435,24 @@ [ 24, 37, - 29 + 28 ], [ 24, 38, - 28 + 29 ] ], [ [ 25, 25, - 23 + 24 ], [ 25, 24, - 24 + 23 ] ], [ @@ -7493,12 +7493,12 @@ ], [ [ - 25, + 26, 39, 30 ], [ - 26, + 25, 39, 29 ] @@ -7506,23 +7506,23 @@ [ [ 32, - 29, + 28, 20 ], [ 33, - 28, + 29, 20 ] ], [ [ - 36, + 37, 37, 34 ], [ - 37, + 36, 37, 33 ] @@ -7530,12 +7530,12 @@ [ [ 33, - 39, + 40, 32 ], [ 32, - 40, + 39, 32 ] ], @@ -7553,12 +7553,12 @@ ], [ [ - 21, + 22, 35, 28 ], [ - 22, + 21, 35, 27 ] @@ -7567,34 +7567,34 @@ [ 21, 31, - 27 + 26 ], [ 21, 32, - 26 + 27 ] ], [ [ 21, 28, - 26 + 25 ], [ 21, 29, - 25 + 26 ] ], [ [ - 29, + 28, 24, 22 ], [ - 28, + 29, 24, 23 ] @@ -7602,24 +7602,24 @@ [ [ 32, - 27, + 26, 21 ], [ 33, - 26, + 27, 21 ] ], [ [ 25, - 24, + 25, 24 ], [ 24, - 25, + 24, 24 ] ], @@ -7637,12 +7637,12 @@ ], [ [ - 32, + 31, 25, 21 ], [ - 31, + 32, 25, 22 ] @@ -7650,12 +7650,12 @@ [ [ 35, - 38, + 39, 33 ], [ 34, - 39, + 38, 33 ] ], @@ -7675,34 +7675,34 @@ [ 38, 31, - 36 + 35 ], [ 38, 32, - 35 + 36 ] ], [ [ 38, 34, - 35 + 34 ], [ 38, 35, - 34 + 35 ] ], [ [ - 33, + 34, 39, 33 ], [ - 34, + 33, 39, 32 ] @@ -7723,47 +7723,47 @@ [ 23, 25, - 25 + 24 ], [ 23, 26, - 24 + 25 ] ], [ [ 29, 24, - 22 + 23 ], [ 29, 23, - 23 + 22 ] ], [ [ 25, 38, - 30 + 29 ], [ 25, 39, - 29 + 30 ] ], [ [ 28, - 24, + 23, 23 ], [ 29, - 23, + 24, 23 ] ], @@ -7793,36 +7793,36 @@ ], [ [ - 27, + 28, 40, 31 ], [ - 28, + 27, 40, 30 ] ], [ [ - 24, + 25, 38, 30 ], [ - 25, + 24, 38, 29 ] ], [ [ - 37, + 38, 35, 35 ], [ - 38, + 37, 35, 34 ] @@ -7831,12 +7831,12 @@ [ 36, 37, - 34 + 33 ], [ 36, 38, - 33 + 34 ] ], [ @@ -7855,12 +7855,12 @@ [ 23, 36, - 29 + 28 ], [ 23, 37, - 28 + 29 ] ], [ @@ -7879,35 +7879,35 @@ [ 21, 30, - 27 + 26 ], [ 21, 31, - 26 + 27 ] ], [ [ 21, 27, - 26 + 25 ], [ 21, 28, - 25 + 26 ] ], [ [ 22, - 27, + 28, 25 ], [ 21, - 28, + 27, 25 ] ], @@ -7915,46 +7915,46 @@ [ 33, 29, - 20 + 21 ], [ 33, 28, - 21 + 20 ] ], [ [ 37, - 36, + 37, 34 ], [ 36, - 37, + 36, 34 ] ], [ [ - 35, + 36, 38, 34 ], [ - 36, + 35, 38, 33 ] ], [ [ - 21, + 22, 27, 26 ], [ - 22, + 21, 27, 25 ] @@ -7962,24 +7962,24 @@ [ [ 29, - 24, + 23, 22 ], [ 30, - 23, + 24, 22 ] ], [ [ 37, - 35, + 34, 35 ], [ 38, - 34, + 35, 35 ] ], @@ -7987,12 +7987,12 @@ [ 27, 39, - 31 + 30 ], [ 27, 40, - 30 + 31 ] ], [ @@ -8009,36 +8009,36 @@ ], [ [ - 32, + 33, 39, 33 ], [ - 33, + 32, 39, 32 ] ], [ [ - 29, + 30, 40, 32 ], [ - 30, + 29, 40, 31 ] ], [ [ - 24, + 23, 25, 24 ], [ - 23, + 24, 25, 25 ] @@ -8047,22 +8047,22 @@ [ 26, 24, - 23 + 24 ], [ 26, 23, - 24 + 23 ] ], [ [ - 30, + 29, 23, 22 ], [ - 29, + 30, 23, 23 ] @@ -8070,12 +8070,12 @@ [ [ 31, - 25, + 24, 22 ], [ 32, - 24, + 25, 22 ] ], @@ -8095,12 +8095,12 @@ [ 37, 35, - 35 + 34 ], [ 37, 36, - 34 + 35 ] ], [ @@ -8117,12 +8117,12 @@ ], [ [ - 26, + 27, 39, 31 ], [ - 27, + 26, 39, 30 ] @@ -8179,12 +8179,12 @@ [ 21, 29, - 27 + 26 ], [ 21, 30, - 26 + 27 ] ], [ @@ -8203,12 +8203,12 @@ [ 24, 24, - 25 + 24 ], [ 24, 25, - 24 + 25 ] ], [ @@ -8239,12 +8239,12 @@ [ 23, 37, - 30 + 29 ], [ 23, 38, - 29 + 30 ] ], [ @@ -8263,22 +8263,22 @@ [ 32, 39, - 33 + 32 ], [ 32, 40, - 32 + 33 ] ], [ [ - 28, + 29, 40, 32 ], [ - 29, + 28, 40, 31 ] @@ -8298,12 +8298,12 @@ [ [ 32, - 30, + 29, 20 ], [ 33, - 29, + 30, 20 ] ], @@ -8322,12 +8322,12 @@ [ [ 24, - 24, + 25, 25 ], [ 23, - 25, + 24, 25 ] ], @@ -8335,22 +8335,22 @@ [ 38, 30, - 37 + 36 ], [ 38, 31, - 36 + 37 ] ], [ [ - 36, + 37, 36, 35 ], [ - 37, + 36, 36, 34 ] @@ -8395,23 +8395,23 @@ [ 33, 26, - 21 + 22 ], [ 33, 25, - 22 + 21 ] ], [ [ 23, - 25, + 26, 25 ], [ 22, - 26, + 25, 25 ] ], @@ -8419,34 +8419,34 @@ [ 38, 33, - 36 + 35 ], [ 38, 34, - 35 + 36 ] ], [ [ 38, - 33, + 34, 36 ], [ 37, - 34, + 33, 36 ] ], [ [ - 20, + 21, 32, 28 ], [ - 21, + 20, 32, 27 ] @@ -8454,47 +8454,47 @@ [ [ 30, - 24, + 23, 22 ], [ 31, - 23, + 24, 22 ] ], [ [ - 31, + 30, 23, 22 ], [ - 30, + 31, 23, 23 ] ], [ [ - 25, + 26, 39, 31 ], [ - 26, + 25, 39, 30 ] ], [ [ - 37, + 38, 34, 36 ], [ - 38, + 37, 34, 35 ] @@ -8503,24 +8503,24 @@ [ 36, 36, - 35 + 34 ], [ 36, 37, - 34 + 35 ] ], [ [ 34, 38, - 34 + 33 ], [ 34, 39, - 33 + 34 ] ], [ @@ -8539,22 +8539,22 @@ [ 21, 28, - 27 + 26 ], [ 21, 29, - 26 + 27 ] ], [ [ - 25, + 24, 24, 24 ], [ - 24, + 25, 24, 25 ] @@ -8562,36 +8562,36 @@ [ [ 33, - 28, + 27, 21 ], [ 34, - 27, + 28, 21 ] ], [ [ 38, - 30, + 31, 37 ], [ 37, - 31, + 30, 37 ] ], [ [ 32, - 39, + 40, 33 ], [ 31, - 40, + 39, 33 ] ], @@ -8609,12 +8609,12 @@ ], [ [ - 27, + 28, 40, 32 ], [ - 28, + 27, 40, 31 ] @@ -8635,34 +8635,34 @@ [ 22, 25, - 26 + 25 ], [ 22, 26, - 25 + 26 ] ], [ [ 22, 36, - 30 + 29 ], [ 22, 37, - 29 + 30 ] ], [ [ - 22, + 23, 37, 30 ], [ - 23, + 22, 37, 29 ] @@ -8670,12 +8670,12 @@ [ [ 38, - 31, + 32, 36 ], [ 37, - 32, + 31, 36 ] ], @@ -8707,12 +8707,12 @@ [ 27, 39, - 32 + 31 ], [ 27, 40, - 31 + 32 ] ], [ @@ -8730,23 +8730,23 @@ [ [ 22, - 26, + 27, 26 ], [ 21, - 27, + 26, 26 ] ], [ [ - 23, + 22, 25, 25 ], [ - 22, + 23, 25, 26 ] @@ -8755,12 +8755,12 @@ [ 25, 24, - 24 + 25 ], [ 25, 23, - 25 + 24 ] ], [ @@ -8779,24 +8779,24 @@ [ 25, 38, - 31 + 30 ], [ 25, 39, - 30 + 31 ] ], [ [ 37, 31, - 37 + 36 ], [ 37, 32, - 36 + 37 ] ], [ @@ -8827,34 +8827,34 @@ [ 31, 24, - 22 + 23 ], [ 31, 23, - 23 + 22 ] ], [ [ 38, - 32, + 33, 36 ], [ 37, - 33, + 32, 36 ] ], [ [ - 24, + 25, 38, 31 ], [ - 25, + 24, 38, 30 ] @@ -8874,12 +8874,12 @@ [ [ 33, - 27, + 26, 21 ], [ 34, - 26, + 27, 21 ] ], @@ -8887,22 +8887,22 @@ [ 37, 34, - 36 + 35 ], [ 37, 35, - 35 + 36 ] ], [ [ - 35, + 36, 37, 35 ], [ - 36, + 35, 37, 34 ] @@ -8911,12 +8911,12 @@ [ 20, 30, - 28 + 27 ], [ 20, 31, - 27 + 28 ] ], [ @@ -8947,12 +8947,12 @@ [ 33, 30, - 20 + 21 ], [ 33, 29, - 21 + 20 ] ], [ @@ -8981,12 +8981,12 @@ ], [ [ - 26, + 27, 39, 32 ], [ - 27, + 26, 39, 31 ] @@ -8995,12 +8995,12 @@ [ 21, 33, - 29 + 28 ], [ 21, 34, - 28 + 29 ] ], [ @@ -9018,12 +9018,12 @@ [ [ 37, - 35, + 36, 35 ], [ 36, - 36, + 35, 35 ] ], @@ -9042,23 +9042,23 @@ [ [ 27, - 23, + 22, 24 ], [ 28, - 22, + 23, 24 ] ], [ [ - 32, + 33, 39, 34 ], [ - 33, + 32, 39, 33 ] @@ -9067,22 +9067,22 @@ [ 23, 24, - 26 + 25 ], [ 23, 25, - 25 + 26 ] ], [ [ - 26, + 25, 23, 24 ], [ - 25, + 26, 23, 25 ] @@ -9103,23 +9103,23 @@ [ 35, 37, - 35 + 34 ], [ 35, 38, - 34 + 35 ] ], [ [ 34, - 38, + 39, 34 ], [ 33, - 39, + 38, 34 ] ], @@ -9185,12 +9185,12 @@ ], [ [ - 21, + 22, 35, 30 ], [ - 22, + 21, 35, 29 ] @@ -9209,12 +9209,12 @@ ], [ [ - 36, + 37, 35, 36 ], [ - 37, + 36, 35, 35 ] @@ -9234,12 +9234,12 @@ [ [ 31, - 39, + 40, 33 ], [ 30, - 40, + 39, 33 ] ], @@ -9259,47 +9259,47 @@ [ 20, 29, - 28 + 27 ], [ 20, 30, - 27 + 28 ] ], [ [ 21, 26, - 27 + 26 ], [ 21, 27, - 26 + 27 ] ], [ [ 29, 23, - 23 + 24 ], [ 29, 22, - 24 + 23 ] ], [ [ 33, - 26, + 25, 22 ], [ 34, - 25, + 26, 22 ] ], @@ -9307,24 +9307,24 @@ [ 34, 27, - 21 + 22 ], [ 34, 26, - 22 + 21 ] ], [ [ 23, 37, - 31 + 30 ], [ 23, 38, - 30 + 31 ] ], [ @@ -9342,12 +9342,12 @@ [ [ 29, - 23, + 22, 23 ], [ 30, - 22, + 23, 23 ] ], @@ -9367,46 +9367,46 @@ [ 36, 35, - 36 + 35 ], [ 36, 36, - 35 + 36 ] ], [ [ - 28, + 29, 40, 33 ], [ - 29, + 28, 40, 32 ] ], [ [ - 25, + 26, 39, 32 ], [ - 26, + 25, 39, 31 ] ], [ [ - 22, + 21, 26, 26 ], [ - 21, + 22, 26, 27 ] @@ -9439,23 +9439,23 @@ [ 28, 39, - 33 + 32 ], [ 28, 40, - 32 + 33 ] ], [ [ 27, - 22, + 23, 24 ], [ 26, - 23, + 22, 24 ] ], @@ -9463,12 +9463,12 @@ [ 26, 23, - 24 + 25 ], [ 26, 22, - 25 + 24 ] ], [ @@ -9487,24 +9487,24 @@ [ 21, 34, - 30 + 29 ], [ 21, 35, - 29 + 30 ] ], [ [ 25, 38, - 32 + 31 ], [ 25, 39, - 31 + 32 ] ], [ @@ -9523,22 +9523,22 @@ [ 24, 23, - 26 + 25 ], [ 24, 24, - 25 + 26 ] ], [ [ - 27, + 26, 22, 24 ], [ - 26, + 27, 22, 25 ] @@ -9558,24 +9558,24 @@ [ [ 36, - 36, + 37, 35 ], [ 35, - 37, + 36, 35 ] ], [ [ 35, - 37, + 38, 35 ], [ 34, - 38, + 37, 35 ] ], @@ -9607,12 +9607,12 @@ [ 22, 25, - 27 + 26 ], [ 22, 26, - 26 + 27 ] ], [ @@ -9643,58 +9643,58 @@ [ 37, 33, - 37 + 36 ], [ 37, 34, - 36 + 37 ] ], [ [ - 33, + 34, 38, 35 ], [ - 34, + 33, 38, 34 ] ], [ [ - 27, + 28, 39, 33 ], [ - 28, + 27, 39, 32 ] ], [ [ - 24, + 25, 38, 32 ], [ - 25, + 24, 38, 31 ] ], [ [ - 20, + 21, 28, 28 ], [ - 21, + 20, 28, 27 ] @@ -9715,35 +9715,35 @@ [ 22, 36, - 31 + 30 ], [ 22, 37, - 30 + 31 ] ], [ [ 23, - 24, + 25, 26 ], [ 22, - 25, + 24, 26 ] ], [ [ 30, - 23, + 22, 23 ], [ 31, - 22, + 23, 23 ] ], @@ -9773,12 +9773,12 @@ ], [ [ - 25, + 24, 23, 25 ], [ - 24, + 25, 23, 26 ] @@ -9799,12 +9799,12 @@ [ 21, 33, - 30 + 29 ], [ 21, 34, - 29 + 30 ] ], [ @@ -9823,12 +9823,12 @@ [ 35, 36, - 36 + 35 ], [ 35, 37, - 35 + 36 ] ], [ @@ -9845,12 +9845,12 @@ ], [ [ - 28, + 27, 22, 24 ], [ - 27, + 28, 22, 25 ] @@ -9881,12 +9881,12 @@ ], [ [ - 20, + 21, 33, 30 ], [ - 21, + 20, 33, 29 ] @@ -9894,12 +9894,12 @@ [ [ 26, - 22, + 23, 25 ], [ 25, - 23, + 22, 25 ] ], @@ -9931,12 +9931,12 @@ [ 33, 38, - 35 + 34 ], [ 33, 39, - 34 + 35 ] ], [ @@ -9966,23 +9966,23 @@ [ [ 24, - 23, + 24, 26 ], [ 23, - 24, + 23, 26 ] ], [ [ - 31, + 30, 22, 23 ], [ - 30, + 31, 22, 24 ] @@ -10014,12 +10014,12 @@ [ [ 34, - 28, + 27, 21 ], [ 35, - 27, + 28, 21 ] ], @@ -10073,12 +10073,12 @@ ], [ [ - 23, + 24, 37, 32 ], [ - 24, + 23, 37, 31 ] @@ -10087,12 +10087,12 @@ [ 24, 37, - 32 + 31 ], [ 24, 38, - 31 + 32 ] ], [ @@ -10111,23 +10111,23 @@ [ 34, 25, - 22 + 23 ], [ 34, 24, - 23 + 22 ] ], [ [ 34, - 27, + 26, 22 ], [ 35, - 26, + 27, 22 ] ], @@ -10183,24 +10183,24 @@ [ 36, 34, - 37 + 36 ], [ 36, 35, - 36 + 37 ] ], [ [ 25, 23, - 25 + 26 ], [ 25, 22, - 26 + 25 ] ], [ @@ -10241,12 +10241,12 @@ ], [ [ - 34, + 35, 37, 36 ], [ - 35, + 34, 37, 35 ] @@ -10267,12 +10267,12 @@ [ 21, 26, - 28 + 27 ], [ 21, 27, - 27 + 28 ] ], [ @@ -10301,12 +10301,12 @@ ], [ [ - 37, + 36, 31, 37 ], [ - 36, + 37, 31, 38 ] @@ -10325,12 +10325,12 @@ ], [ [ - 29, + 28, 22, 24 ], [ - 28, + 29, 22, 25 ] @@ -10339,35 +10339,35 @@ [ 31, 23, - 23 + 24 ], [ 31, 22, - 24 + 23 ] ], [ [ 36, - 35, + 36, 36 ], [ 35, - 36, + 35, 36 ] ], [ [ 22, - 25, + 26, 27 ], [ 21, - 26, + 25, 27 ] ], @@ -10409,12 +10409,12 @@ ], [ [ - 25, + 26, 39, 33 ], [ - 26, + 25, 39, 32 ] @@ -10423,23 +10423,23 @@ [ 25, 38, - 33 + 32 ], [ 25, 39, - 32 + 33 ] ], [ [ 21, - 27, + 28, 28 ], [ 20, - 28, + 27, 28 ] ], @@ -10457,12 +10457,12 @@ ], [ [ - 32, + 31, 23, 23 ], [ - 31, + 32, 23, 24 ] @@ -10495,23 +10495,23 @@ [ 20, 31, - 30 + 29 ], [ 20, 32, - 29 + 30 ] ], [ [ 34, - 26, + 25, 22 ], [ 35, - 25, + 26, 22 ] ], @@ -10531,12 +10531,12 @@ [ 23, 36, - 32 + 31 ], [ 23, 37, - 31 + 32 ] ], [ @@ -10555,22 +10555,22 @@ [ 34, 37, - 36 + 35 ], [ 34, 38, - 35 + 36 ] ], [ [ - 22, + 23, 36, 32 ], [ - 23, + 22, 36, 31 ] @@ -10626,12 +10626,12 @@ [ [ 26, - 38, + 39, 33 ], [ 25, - 39, + 38, 33 ] ], @@ -10639,22 +10639,22 @@ [ 35, 35, - 37 + 36 ], [ 35, 36, - 36 + 37 ] ], [ [ - 33, + 34, 38, 36 ], [ - 34, + 33, 38, 35 ] @@ -10662,12 +10662,12 @@ [ [ 34, - 37, + 38, 36 ], [ 33, - 38, + 37, 36 ] ], @@ -10685,12 +10685,12 @@ ], [ [ - 27, + 26, 22, 25 ], [ - 26, + 27, 22, 26 ] @@ -10757,12 +10757,12 @@ ], [ [ - 24, + 25, 38, 33 ], [ - 25, + 24, 38, 32 ] @@ -10783,12 +10783,12 @@ [ 20, 30, - 30 + 29 ], [ 20, 31, - 29 + 30 ] ], [ @@ -10805,12 +10805,12 @@ ], [ [ - 33, + 32, 23, 23 ], [ - 32, + 33, 23, 24 ] @@ -10818,12 +10818,12 @@ [ [ 33, - 24, + 23, 23 ], [ 34, - 23, + 24, 23 ] ], @@ -10831,12 +10831,12 @@ [ 35, 26, - 22 + 23 ], [ 35, 25, - 23 + 22 ] ], [ @@ -10867,12 +10867,12 @@ [ 36, 32, - 38 + 37 ], [ 36, 33, - 37 + 38 ] ], [ @@ -10891,12 +10891,12 @@ [ 22, 35, - 32 + 31 ], [ 22, 36, - 31 + 32 ] ], [ @@ -10927,34 +10927,34 @@ [ 24, 23, - 26 + 27 ], [ 24, 22, - 27 + 26 ] ], [ [ 27, 22, - 25 + 26 ], [ 27, 21, - 26 + 25 ] ], [ [ - 20, + 21, 33, 31 ], [ - 21, + 20, 33, 30 ] @@ -10963,34 +10963,34 @@ [ 24, 37, - 33 + 32 ], [ 24, 38, - 32 + 33 ] ], [ [ - 21, + 20, 27, 28 ], [ - 20, + 21, 27, 29 ] ], [ [ - 25, + 24, 22, 26 ], [ - 24, + 25, 22, 27 ] @@ -11009,12 +11009,12 @@ ], [ [ - 28, + 27, 21, 25 ], [ - 27, + 28, 21, 26 ] @@ -11047,23 +11047,23 @@ [ 20, 29, - 30 + 29 ], [ 20, 30, - 29 + 30 ] ], [ [ 32, - 23, + 22, 24 ], [ 33, - 22, + 23, 24 ] ], @@ -11129,12 +11129,12 @@ ], [ [ - 21, + 22, 35, 32 ], [ - 22, + 21, 35, 31 ] @@ -11165,24 +11165,24 @@ ], [ [ - 23, + 24, 37, 33 ], [ - 24, + 23, 37, 32 ] ], [ [ - 23, + 22, 24, 27 ], [ - 22, + 23, 24, 28 ] @@ -11203,46 +11203,46 @@ [ 26, 38, - 34 + 33 ], [ 26, 39, - 33 + 34 ] ], [ [ 21, 34, - 32 + 31 ], [ 21, 35, - 31 + 32 ] ], [ [ 21, 26, - 29 + 28 ], [ 21, 27, - 28 + 29 ] ], [ [ - 34, + 33, 23, 23 ], [ - 33, + 34, 23, 24 ] @@ -11311,12 +11311,12 @@ [ 34, 36, - 37 + 36 ], [ 34, 37, - 36 + 37 ] ], [ @@ -11370,12 +11370,12 @@ [ [ 36, - 26, + 27, 22 ], [ 35, - 27, + 26, 22 ] ], @@ -11383,34 +11383,34 @@ [ 20, 28, - 30 + 29 ], [ 20, 29, - 29 + 30 ] ], [ [ 36, 33, - 38 + 37 ], [ 36, 34, - 37 + 38 ] ], [ [ - 31, + 32, 38, 36 ], [ - 32, + 31, 38, 35 ] @@ -11455,12 +11455,12 @@ [ 34, 24, - 23 + 24 ], [ 34, 23, - 24 + 23 ] ], [ @@ -11479,12 +11479,12 @@ [ 20, 31, - 31 + 30 ], [ 20, 32, - 30 + 31 ] ], [ @@ -11501,12 +11501,12 @@ ], [ [ - 35, + 36, 34, 38 ], [ - 36, + 35, 34, 37 ] @@ -11538,12 +11538,12 @@ [ [ 31, - 38, + 39, 35 ], [ 30, - 39, + 38, 35 ] ], @@ -11611,24 +11611,24 @@ [ 21, 33, - 32 + 31 ], [ 21, 34, - 31 + 32 ] ], [ [ 26, 22, - 26 + 27 ], [ 26, 21, - 27 + 26 ] ], [ @@ -11669,12 +11669,12 @@ ], [ [ - 27, + 26, 21, 26 ], [ - 26, + 27, 21, 27 ] @@ -11693,12 +11693,12 @@ ], [ [ - 35, + 34, 24, 23 ], [ - 34, + 35, 24, 24 ] @@ -11706,12 +11706,12 @@ [ [ 33, - 37, + 38, 36 ], [ 32, - 38, + 37, 36 ] ], @@ -11753,12 +11753,12 @@ ], [ [ - 22, + 21, 25, 28 ], [ - 21, + 22, 25, 29 ] @@ -11790,12 +11790,12 @@ [ [ 35, - 30, + 29, 22 ], [ 36, - 29, + 30, 22 ] ], @@ -11827,22 +11827,22 @@ [ 24, 37, - 34 + 33 ], [ 24, 38, - 33 + 34 ] ], [ [ - 24, + 25, 38, 34 ], [ - 25, + 24, 38, 33 ] @@ -11851,22 +11851,22 @@ [ 22, 35, - 33 + 32 ], [ 22, 36, - 32 + 33 ] ], [ [ - 20, + 21, 33, 32 ], [ - 21, + 20, 33, 31 ] @@ -11874,12 +11874,12 @@ [ [ 31, - 22, + 21, 25 ], [ 32, - 21, + 22, 25 ] ], @@ -11923,24 +11923,24 @@ [ 27, 38, - 35 + 34 ], [ 27, 39, - 34 + 35 ] ], [ [ 20, 32, - 32 + 31 ], [ 20, 33, - 31 + 32 ] ], [ @@ -11971,24 +11971,24 @@ [ 21, 26, - 30 + 29 ], [ 21, 27, - 29 + 30 ] ], [ [ 35, 34, - 38 + 37 ], [ 35, 35, - 37 + 38 ] ], [ @@ -12029,24 +12029,24 @@ ], [ [ - 25, + 24, 22, 27 ], [ - 24, + 25, 22, 28 ] ], [ [ - 28, + 27, 21, 26 ], [ - 27, + 28, 21, 27 ] @@ -12066,12 +12066,12 @@ [ [ 25, - 37, + 38, 34 ], [ 24, - 38, + 37, 34 ] ], @@ -12091,12 +12091,12 @@ [ 35, 31, - 39 + 38 ], [ 35, 32, - 38 + 39 ] ], [ @@ -12115,58 +12115,58 @@ [ 35, 25, - 23 + 24 ], [ 35, 24, - 24 + 23 ] ], [ [ 26, - 21, + 22, 27 ], [ 25, - 22, + 21, 27 ] ], [ [ - 34, + 35, 35, 38 ], [ - 35, + 34, 35, 37 ] ], [ [ - 29, + 30, 38, 36 ], [ - 30, + 29, 38, 35 ] ], [ [ - 26, + 27, 38, 35 ], [ - 27, + 26, 38, 34 ] @@ -12185,12 +12185,12 @@ ], [ [ - 21, + 22, 35, 33 ], [ - 22, + 21, 35, 32 ] @@ -12199,34 +12199,34 @@ [ 34, 23, - 24 + 25 ], [ 34, 22, - 25 + 24 ] ], [ [ - 34, + 33, 22, 24 ], [ - 33, + 34, 22, 25 ] ], [ [ - 23, + 24, 37, 34 ], [ - 24, + 23, 37, 33 ] @@ -12235,12 +12235,12 @@ [ 20, 31, - 32 + 31 ], [ 20, 32, - 31 + 32 ] ], [ @@ -12283,24 +12283,24 @@ [ 21, 25, - 30 + 29 ], [ 21, 26, - 29 + 30 ] ], [ [ 23, 36, - 34 + 33 ], [ 23, 37, - 33 + 34 ] ], [ @@ -12329,12 +12329,12 @@ ], [ [ - 29, + 28, 21, 26 ], [ - 28, + 29, 21, 27 ] @@ -12391,12 +12391,12 @@ [ 20, 28, - 31 + 30 ], [ 20, 29, - 30 + 31 ] ], [ @@ -12426,23 +12426,23 @@ [ [ 32, - 37, + 38, 36 ], [ 31, - 38, + 37, 36 ] ], [ [ - 26, + 25, 21, 27 ], [ - 25, + 26, 21, 28 ] @@ -12475,22 +12475,22 @@ [ 31, 37, - 37 + 36 ], [ 31, 38, - 36 + 37 ] ], [ [ - 28, + 29, 38, 36 ], [ - 29, + 28, 38, 35 ] @@ -12511,12 +12511,12 @@ [ 20, 30, - 32 + 31 ], [ 20, 31, - 31 + 32 ] ], [ @@ -12558,12 +12558,12 @@ [ [ 23, - 23, + 24, 29 ], [ 22, - 24, + 23, 29 ] ], @@ -12571,24 +12571,24 @@ [ 21, 33, - 33 + 32 ], [ 21, 34, - 32 + 33 ] ], [ [ 36, 25, - 24 + 23 ], [ 36, 26, - 23 + 24 ] ], [ @@ -12630,12 +12630,12 @@ [ [ 37, - 28, + 29, 23 ], [ 36, - 29, + 28, 23 ] ], @@ -12643,24 +12643,24 @@ [ 34, 35, - 38 + 37 ], [ 34, 36, - 37 + 38 ] ], [ [ 25, 37, - 35 + 34 ], [ 25, 38, - 34 + 35 ] ], [ @@ -12689,12 +12689,12 @@ ], [ [ - 30, + 29, 21, 26 ], [ - 29, + 30, 21, 27 ] @@ -12751,12 +12751,12 @@ [ 35, 32, - 39 + 38 ], [ 35, 33, - 38 + 39 ] ], [ @@ -12810,12 +12810,12 @@ [ [ 24, - 36, + 37, 34 ], [ 23, - 37, + 36, 34 ] ], @@ -12823,34 +12823,34 @@ [ 22, 35, - 34 + 33 ], [ 22, 36, - 33 + 34 ] ], [ [ - 22, + 23, 36, 34 ], [ - 23, + 22, 36, 33 ] ], [ [ - 27, + 26, 21, 27 ], [ - 26, + 27, 21, 28 ] @@ -12859,34 +12859,34 @@ [ 33, 22, - 25 + 26 ], [ 33, 21, - 26 + 25 ] ], [ [ 26, - 37, + 38, 35 ], [ 25, - 38, + 37, 35 ] ], [ [ - 21, + 20, 27, 30 ], [ - 20, + 21, 27, 31 ] @@ -12931,12 +12931,12 @@ [ 20, 29, - 32 + 31 ], [ 20, 30, - 31 + 32 ] ], [ @@ -12966,23 +12966,23 @@ [ [ 37, - 29, + 30, 22 ], [ 36, - 30, + 29, 22 ] ], [ [ - 34, + 35, 33, 39 ], [ - 35, + 34, 33, 38 ] @@ -13038,12 +13038,12 @@ [ [ 24, - 22, + 23, 29 ], [ 23, - 23, + 22, 29 ] ], @@ -13086,12 +13086,12 @@ [ [ 31, - 37, + 38, 37 ], [ 30, - 38, + 37, 37 ] ], @@ -13111,12 +13111,12 @@ [ 22, 23, - 30 + 29 ], [ 22, 24, - 29 + 30 ] ], [ @@ -13135,46 +13135,46 @@ [ 20, 28, - 32 + 31 ], [ 20, 29, - 31 + 32 ] ], [ [ - 25, + 24, 22, 28 ], [ - 24, + 25, 22, 29 ] ], [ [ - 28, + 27, 21, 27 ], [ - 27, + 28, 21, 28 ] ], [ [ - 34, + 33, 22, 25 ], [ - 33, + 34, 22, 26 ] @@ -13183,34 +13183,34 @@ [ 37, 26, - 24 + 23 ], [ 37, 27, - 23 + 24 ] ], [ [ 28, - 21, + 20, 27 ], [ 29, - 20, + 21, 27 ] ], [ [ - 29, + 30, 38, 37 ], [ - 30, + 29, 38, 36 ] @@ -13219,24 +13219,24 @@ [ 24, 36, - 35 + 34 ], [ 24, 37, - 34 + 35 ] ], [ [ 22, 34, - 34 + 33 ], [ 22, 35, - 33 + 34 ] ], [ @@ -13266,35 +13266,35 @@ [ [ 34, - 23, + 22, 25 ], [ 35, - 22, + 23, 25 ] ], [ [ 35, - 24, + 23, 25 ], [ 36, - 23, + 24, 25 ] ], [ [ - 32, + 33, 36, 38 ], [ - 33, + 32, 36, 37 ] @@ -13313,12 +13313,12 @@ ], [ [ - 26, + 27, 38, 36 ], [ - 27, + 26, 38, 35 ] @@ -13363,12 +13363,12 @@ [ 26, 37, - 36 + 35 ], [ 26, 38, - 35 + 36 ] ], [ @@ -13385,12 +13385,12 @@ ], [ [ - 29, + 28, 20, 27 ], [ - 28, + 29, 20, 28 ] @@ -13410,12 +13410,12 @@ [ [ 30, - 37, + 38, 37 ], [ 29, - 38, + 37, 37 ] ], @@ -13423,12 +13423,12 @@ [ 34, 33, - 39 + 38 ], [ 34, 34, - 38 + 39 ] ], [ @@ -13447,22 +13447,22 @@ [ 20, 27, - 32 + 31 ], [ 20, 28, - 31 + 32 ] ], [ [ - 26, + 25, 21, 28 ], [ - 25, + 26, 21, 29 ] @@ -13483,35 +13483,35 @@ [ 36, 24, - 25 + 24 ], [ 36, 25, - 24 + 25 ] ], [ [ 34, - 30, + 31, 39 ], [ 33, - 31, + 30, 39 ] ], [ [ 21, - 31, + 32, 33 ], [ 20, - 32, + 31, 33 ] ], @@ -13529,12 +13529,12 @@ ], [ [ - 24, + 23, 22, 29 ], [ - 23, + 24, 22, 30 ] @@ -13555,12 +13555,12 @@ [ 29, 37, - 37 + 36 ], [ 29, 38, - 36 + 37 ] ], [ @@ -13579,12 +13579,12 @@ [ 20, 30, - 33 + 32 ], [ 20, 31, - 32 + 33 ] ], [ @@ -13602,12 +13602,12 @@ [ [ 30, - 21, + 20, 27 ], [ 31, - 20, + 21, 27 ] ], @@ -13625,12 +13625,12 @@ ], [ [ - 36, + 37, 25, 25 ], [ - 37, + 36, 25, 24 ] @@ -13639,46 +13639,46 @@ [ 37, 27, - 24 + 23 ], [ 37, 28, - 23 + 24 ] ], [ [ 32, - 36, + 37, 37 ], [ 31, - 37, + 36, 37 ] ], [ [ - 22, + 21, 25, 30 ], [ - 21, + 22, 25, 31 ] ], [ [ - 28, + 29, 37, 37 ], [ - 29, + 28, 37, 36 ] @@ -13686,12 +13686,12 @@ [ [ 29, - 37, + 38, 36 ], [ 28, - 38, + 37, 36 ] ], @@ -13711,23 +13711,23 @@ [ 35, 23, - 25 + 26 ], [ 35, 22, - 26 + 25 ] ], [ [ 28, - 37, + 38, 36 ], [ 27, - 38, + 37, 36 ] ], @@ -13771,22 +13771,22 @@ [ 23, 35, - 35 + 34 ], [ 23, 36, - 34 + 35 ] ], [ [ - 30, + 29, 20, 27 ], [ - 29, + 30, 20, 28 ] @@ -13831,34 +13831,34 @@ [ 33, 30, - 40 + 39 ], [ 33, 31, - 39 + 40 ] ], [ [ - 33, + 34, 34, 39 ], [ - 34, + 33, 34, 38 ] ], [ [ - 31, + 32, 36, 38 ], [ - 32, + 31, 36, 37 ] @@ -13867,22 +13867,22 @@ [ 21, 26, - 32 + 31 ], [ 21, 27, - 31 + 32 ] ], [ [ - 27, + 26, 21, 28 ], [ - 26, + 27, 21, 29 ] @@ -13890,24 +13890,24 @@ [ [ 25, - 36, + 37, 35 ], [ 24, - 37, + 36, 35 ] ], [ [ 38, - 27, + 28, 24 ], [ 37, - 28, + 27, 24 ] ], @@ -13927,12 +13927,12 @@ [ 20, 29, - 33 + 32 ], [ 20, 30, - 32 + 33 ] ], [ @@ -13951,12 +13951,12 @@ [ 37, 25, - 25 + 24 ], [ 37, 26, - 24 + 25 ] ], [ @@ -13973,12 +13973,12 @@ ], [ [ - 25, + 24, 22, 29 ], [ - 24, + 25, 22, 30 ] @@ -13987,12 +13987,12 @@ [ 31, 36, - 38 + 37 ], [ 31, 37, - 37 + 38 ] ], [ @@ -14010,12 +14010,12 @@ [ [ 21, - 27, + 28, 32 ], [ 20, - 28, + 27, 32 ] ], @@ -14034,12 +14034,12 @@ [ [ 37, - 29, + 28, 24 ], [ 38, - 28, + 29, 24 ] ], @@ -14047,22 +14047,22 @@ [ 25, 22, - 29 + 30 ], [ 25, 21, - 30 + 29 ] ], [ [ - 27, + 28, 37, 37 ], [ - 28, + 27, 37, 36 ] @@ -14071,35 +14071,35 @@ [ 25, 36, - 36 + 35 ], [ 25, 37, - 35 + 36 ] ], [ [ 22, - 33, + 34, 34 ], [ 21, - 34, + 33, 34 ] ], [ [ 21, - 30, + 31, 33 ], [ 20, - 31, + 30, 33 ] ], @@ -14155,22 +14155,22 @@ [ 22, 23, - 31 + 30 ], [ 22, 24, - 30 + 31 ] ], [ [ - 23, + 22, 23, 30 ], [ - 22, + 23, 23, 31 ] @@ -14178,12 +14178,12 @@ [ [ 31, - 21, + 20, 27 ], [ 32, - 20, + 21, 27 ] ], @@ -14227,12 +14227,12 @@ [ 22, 34, - 35 + 34 ], [ 22, 35, - 34 + 35 ] ], [ @@ -14251,22 +14251,22 @@ [ 21, 25, - 32 + 31 ], [ 21, 26, - 31 + 32 ] ], [ [ - 28, + 27, 20, 28 ], [ - 27, + 28, 20, 29 ] @@ -14275,12 +14275,12 @@ [ 36, 23, - 26 + 25 ], [ 36, 24, - 25 + 26 ] ], [ @@ -14299,46 +14299,46 @@ [ 34, 22, - 26 + 27 ], [ 34, 21, - 27 + 26 ] ], [ [ 38, - 26, + 27, 24 ], [ 37, - 27, + 26, 24 ] ], [ [ - 37, + 38, 26, 25 ], [ - 38, + 37, 26, 24 ] ], [ [ - 26, + 25, 21, 29 ], [ - 25, + 26, 21, 30 ] @@ -14346,23 +14346,23 @@ [ [ 31, - 36, + 37, 38 ], [ 30, - 37, + 36, 38 ] ], [ [ - 30, + 31, 37, 38 ], [ - 31, + 30, 37, 37 ] @@ -14407,23 +14407,23 @@ [ 38, 26, - 25 + 24 ], [ 38, 27, - 24 + 25 ] ], [ [ 24, - 35, + 36, 35 ], [ 23, - 36, + 35, 35 ] ], @@ -14455,46 +14455,46 @@ [ 33, 34, - 39 + 38 ], [ 33, 35, - 38 + 39 ] ], [ [ 21, - 29, + 30, 33 ], [ 20, - 30, + 29, 33 ] ], [ [ - 29, + 28, 20, 28 ], [ - 28, + 29, 20, 29 ] ], [ [ - 32, + 31, 20, 27 ], [ - 31, + 32, 20, 28 ] @@ -14526,12 +14526,12 @@ [ [ 21, - 28, + 29, 33 ], [ 20, - 29, + 28, 33 ] ], @@ -14549,12 +14549,12 @@ ], [ [ - 26, + 27, 37, 37 ], [ - 27, + 26, 37, 36 ] @@ -14587,34 +14587,34 @@ [ 22, 24, - 32 + 31 ], [ 22, 25, - 31 + 32 ] ], [ [ 32, 21, - 27 + 28 ], [ 32, 20, - 28 + 27 ] ], [ [ - 24, + 23, 22, 30 ], [ - 23, + 24, 22, 31 ] @@ -14634,23 +14634,23 @@ [ [ 35, - 23, + 22, 26 ], [ 36, - 22, + 23, 26 ] ], [ [ - 32, + 33, 35, 39 ], [ - 33, + 32, 35, 38 ] @@ -14659,24 +14659,24 @@ [ 24, 35, - 36 + 35 ], [ 24, 36, - 35 + 36 ] ], [ [ 21, 30, - 34 + 33 ], [ 21, 31, - 33 + 34 ] ], [ @@ -14694,23 +14694,23 @@ [ [ 23, - 23, + 24, 31 ], [ 22, - 24, + 23, 31 ] ], [ [ - 27, + 26, 21, 29 ], [ - 26, + 27, 21, 30 ] @@ -14719,12 +14719,12 @@ [ 26, 36, - 37 + 36 ], [ 26, 37, - 36 + 37 ] ], [ @@ -14755,12 +14755,12 @@ [ 37, 24, - 26 + 25 ], [ 37, 25, - 25 + 26 ] ], [ @@ -14814,12 +14814,12 @@ [ [ 30, - 36, + 37, 38 ], [ 29, - 37, + 36, 38 ] ], @@ -14849,12 +14849,12 @@ ], [ [ - 30, + 29, 20, 28 ], [ - 29, + 30, 20, 29 ] @@ -14875,12 +14875,12 @@ [ 33, 31, - 40 + 39 ], [ 33, 32, - 39 + 40 ] ], [ @@ -14899,12 +14899,12 @@ [ 21, 26, - 33 + 32 ], [ 21, 27, - 32 + 33 ] ], [ @@ -14923,12 +14923,12 @@ [ 36, 23, - 26 + 27 ], [ 36, 22, - 27 + 26 ] ], [ @@ -14945,12 +14945,12 @@ ], [ [ - 25, + 26, 36, 37 ], [ - 26, + 25, 36, 36 ] @@ -14971,12 +14971,12 @@ [ 21, 29, - 34 + 33 ], [ 21, 30, - 33 + 34 ] ], [ @@ -14993,12 +14993,12 @@ ], [ [ - 37, + 38, 25, 26 ], [ - 38, + 37, 25, 25 ] @@ -15017,24 +15017,24 @@ ], [ [ - 25, + 24, 22, 30 ], [ - 24, + 25, 22, 31 ] ], [ [ - 28, + 27, 20, 29 ], [ - 27, + 28, 20, 30 ] @@ -15042,12 +15042,12 @@ [ [ 27, - 36, + 37, 37 ], [ 26, - 37, + 36, 37 ] ], @@ -15055,12 +15055,12 @@ [ 23, 34, - 36 + 35 ], [ 23, 35, - 35 + 36 ] ], [ @@ -15090,12 +15090,12 @@ [ [ 23, - 23, + 22, 31 ], [ 24, - 22, + 23, 31 ] ], @@ -15115,12 +15115,12 @@ [ 29, 36, - 38 + 37 ], [ 29, 37, - 37 + 38 ] ], [ @@ -15139,12 +15139,12 @@ [ 38, 28, - 25 + 24 ], [ 38, 29, - 24 + 25 ] ], [ @@ -15162,12 +15162,12 @@ [ [ 34, - 22, + 21, 27 ], [ 35, - 21, + 22, 27 ] ], @@ -15185,12 +15185,12 @@ ], [ [ - 31, + 32, 35, 39 ], [ - 32, + 31, 35, 38 ] @@ -15246,12 +15246,12 @@ [ [ 32, - 21, + 20, 28 ], [ 33, - 20, + 21, 28 ] ], @@ -15269,24 +15269,24 @@ ], [ [ - 29, + 28, 20, 29 ], [ - 28, + 29, 20, 30 ] ], [ [ - 32, + 33, 32, 40 ], [ - 33, + 32, 32, 39 ] @@ -15307,12 +15307,12 @@ [ 21, 31, - 35 + 34 ], [ 21, 32, - 34 + 35 ] ], [ @@ -15329,12 +15329,12 @@ ], [ [ - 36, + 37, 23, 27 ], [ - 37, + 36, 23, 26 ] @@ -15355,12 +15355,12 @@ [ 25, 35, - 37 + 36 ], [ 25, 36, - 36 + 37 ] ], [ @@ -15427,12 +15427,12 @@ [ 37, 23, - 27 + 26 ], [ 37, 24, - 26 + 27 ] ], [ @@ -15451,36 +15451,36 @@ [ 22, 33, - 36 + 35 ], [ 22, 34, - 35 + 36 ] ], [ [ 35, 22, - 27 + 28 ], [ 35, 21, - 28 + 27 ] ], [ [ 38, 26, - 26 + 25 ], [ 38, 27, - 25 + 26 ] ], [ @@ -15510,12 +15510,12 @@ [ [ 22, - 25, + 26, 33 ], [ 21, - 26, + 25, 33 ] ], @@ -15533,12 +15533,12 @@ ], [ [ - 24, + 25, 35, 37 ], [ - 25, + 24, 35, 36 ] @@ -15569,12 +15569,12 @@ ], [ [ - 30, + 29, 20, 29 ], [ - 29, + 30, 20, 30 ] @@ -15595,12 +15595,12 @@ [ 21, 30, - 35 + 34 ], [ 21, 31, - 34 + 35 ] ], [ @@ -15618,23 +15618,23 @@ [ [ 24, - 34, + 35, 36 ], [ 23, - 35, + 34, 36 ] ], [ [ - 27, + 26, 21, 30 ], [ - 26, + 27, 21, 31 ] @@ -15689,12 +15689,12 @@ ], [ [ - 38, + 39, 27, 26 ], [ - 39, + 38, 27, 25 ] @@ -15714,23 +15714,23 @@ [ [ 39, - 29, + 30, 25 ], [ 38, - 30, + 29, 25 ] ], [ [ - 30, + 31, 35, 39 ], [ - 31, + 30, 35, 38 ] @@ -15738,23 +15738,23 @@ [ [ 22, - 31, + 32, 35 ], [ 21, - 32, + 31, 35 ] ], [ [ - 23, + 22, 24, 32 ], [ - 22, + 23, 24, 33 ] @@ -15773,12 +15773,12 @@ ], [ [ - 36, + 35, 22, 27 ], [ - 35, + 36, 22, 28 ] @@ -15787,24 +15787,24 @@ [ 38, 24, - 27 + 26 ], [ 38, 25, - 26 + 27 ] ], [ [ 39, 27, - 26 + 25 ], [ 39, 28, - 25 + 26 ] ], [ @@ -15859,24 +15859,24 @@ [ 24, 34, - 37 + 36 ], [ 24, 35, - 36 + 37 ] ], [ [ 22, 32, - 36 + 35 ], [ 22, 33, - 35 + 36 ] ], [ @@ -15917,12 +15917,12 @@ ], [ [ - 28, + 27, 20, 30 ], [ - 27, + 28, 20, 31 ] @@ -15931,12 +15931,12 @@ [ 21, 29, - 35 + 34 ], [ 21, 30, - 34 + 35 ] ], [ @@ -16062,12 +16062,12 @@ [ [ 32, - 33, + 34, 39 ], [ 31, - 34, + 33, 39 ] ], @@ -16087,12 +16087,12 @@ [ 32, 32, - 40 + 39 ], [ 32, 33, - 39 + 40 ] ], [ @@ -16121,12 +16121,12 @@ ], [ [ - 29, + 28, 20, 30 ], [ - 28, + 29, 20, 31 ] @@ -16135,12 +16135,12 @@ [ 26, 35, - 38 + 37 ], [ 26, 36, - 37 + 38 ] ], [ @@ -16159,24 +16159,24 @@ [ 21, 28, - 35 + 34 ], [ 21, 29, - 34 + 35 ] ], [ [ 22, 25, - 34 + 33 ], [ 22, 26, - 33 + 34 ] ], [ @@ -16205,12 +16205,12 @@ ], [ [ - 29, + 30, 35, 39 ], [ - 30, + 29, 35, 38 ] @@ -16218,12 +16218,12 @@ [ [ 29, - 35, + 36, 38 ], [ 28, - 36, + 35, 38 ] ], @@ -16243,12 +16243,12 @@ [ 23, 33, - 37 + 36 ], [ 23, 34, - 36 + 37 ] ], [ @@ -16290,12 +16290,12 @@ [ [ 22, - 26, + 27, 34 ], [ 21, - 27, + 26, 34 ] ], @@ -16315,12 +16315,12 @@ [ 37, 23, - 28 + 27 ], [ 37, 24, - 27 + 28 ] ], [ @@ -16361,12 +16361,12 @@ ], [ [ - 33, + 32, 20, 29 ], [ - 32, + 33, 20, 30 ] @@ -16387,46 +16387,46 @@ [ 39, 26, - 27 + 26 ], [ 39, 27, - 26 + 27 ] ], [ [ 23, - 32, + 33, 36 ], [ 22, - 33, + 32, 36 ] ], [ [ - 30, + 29, 20, 30 ], [ - 29, + 30, 20, 31 ] ], [ [ - 31, + 32, 33, 40 ], [ - 32, + 31, 33, 39 ] @@ -16435,12 +16435,12 @@ [ 22, 30, - 36 + 35 ], [ 22, 31, - 35 + 36 ] ], [ @@ -16458,12 +16458,12 @@ [ [ 22, - 27, + 28, 35 ], [ 21, - 28, + 27, 35 ] ], @@ -16505,12 +16505,12 @@ ], [ [ - 37, + 38, 24, 28 ], [ - 38, + 37, 24, 27 ] @@ -16531,12 +16531,12 @@ [ 33, 21, - 29 + 30 ], [ 33, 20, - 30 + 29 ] ], [ @@ -16553,12 +16553,12 @@ ], [ [ - 22, + 21, 27, 34 ], [ - 21, + 22, 27, 35 ] @@ -16638,12 +16638,12 @@ [ [ 24, - 33, + 34, 37 ], [ 23, - 34, + 33, 37 ] ], @@ -16651,23 +16651,23 @@ [ 23, 32, - 37 + 36 ], [ 23, 33, - 36 + 37 ] ], [ [ 22, - 28, + 29, 35 ], [ 21, - 29, + 28, 35 ] ], @@ -16687,35 +16687,35 @@ [ 38, 24, - 28 + 27 ], [ 38, 25, - 27 + 28 ] ], [ [ 39, 27, - 27 + 26 ], [ 39, 28, - 26 + 27 ] ], [ [ 23, - 24, + 25, 34 ], [ 22, - 25, + 24, 34 ] ], @@ -16747,12 +16747,12 @@ [ 22, 29, - 36 + 35 ], [ 22, 30, - 35 + 36 ] ], [ @@ -16783,12 +16783,12 @@ [ 25, 34, - 38 + 37 ], [ 25, 35, - 37 + 38 ] ], [ @@ -16817,12 +16817,12 @@ ], [ [ - 29, + 28, 20, 31 ], [ - 28, + 29, 20, 32 ] @@ -16865,12 +16865,12 @@ ], [ [ - 24, + 23, 23, 33 ], [ - 23, + 24, 23, 34 ] @@ -16902,12 +16902,12 @@ [ [ 26, - 34, + 35, 38 ], [ 25, - 35, + 34, 38 ] ], @@ -16927,12 +16927,12 @@ [ 23, 31, - 37 + 36 ], [ 23, 32, - 36 + 37 ] ], [ @@ -16963,46 +16963,46 @@ [ 39, 25, - 28 + 27 ], [ 39, 26, - 27 + 28 ] ], [ [ 39, 28, - 27 + 26 ], [ 39, 29, - 26 + 27 ] ], [ [ 26, - 21, + 22, 33 ], [ 25, - 22, + 21, 33 ] ], [ [ - 22, + 23, 31, 37 ], [ - 23, + 22, 31, 36 ] @@ -17129,12 +17129,12 @@ ], [ [ - 23, + 22, 25, 34 ], [ - 22, + 23, 25, 35 ] @@ -17166,12 +17166,12 @@ [ [ 29, - 34, + 35, 39 ], [ 28, - 35, + 34, 39 ] ], @@ -17190,35 +17190,35 @@ [ [ 27, - 34, + 35, 38 ], [ 26, - 35, + 34, 38 ] ], [ [ 25, - 33, + 34, 38 ], [ 24, - 34, + 33, 38 ] ], [ [ - 25, + 24, 22, 33 ], [ - 24, + 25, 22, 34 ] @@ -17227,12 +17227,12 @@ [ 24, 22, - 34 + 33 ], [ 24, 23, - 33 + 34 ] ], [ @@ -17261,12 +17261,12 @@ ], [ [ - 30, + 31, 33, 40 ], [ - 31, + 30, 33, 39 ] @@ -17287,12 +17287,12 @@ [ 24, 33, - 38 + 37 ], [ 24, 34, - 37 + 38 ] ], [ @@ -17311,23 +17311,23 @@ [ 22, 30, - 37 + 36 ], [ 22, 31, - 36 + 37 ] ], [ [ 24, - 23, + 24, 34 ], [ 23, - 24, + 23, 34 ] ], @@ -17371,24 +17371,24 @@ [ 27, 34, - 39 + 38 ], [ 27, 35, - 38 + 39 ] ], [ [ 22, 27, - 36 + 35 ], [ 22, 28, - 35 + 36 ] ], [ @@ -17405,12 +17405,12 @@ ], [ [ - 28, + 27, 21, 32 ], [ - 27, + 28, 21, 33 ] @@ -17442,24 +17442,24 @@ [ [ 23, - 30, + 31, 37 ], [ 22, - 31, + 30, 37 ] ], [ [ 25, - 22, + 23, 34 ], [ 24, - 23, + 22, 34 ] ], @@ -17515,12 +17515,12 @@ [ 39, 27, - 28 + 27 ], [ 39, 28, - 27 + 28 ] ], [ @@ -17539,46 +17539,46 @@ [ 22, 29, - 37 + 36 ], [ 22, 30, - 36 + 37 ] ], [ [ - 26, + 25, 22, 33 ], [ - 25, + 26, 22, 34 ] ], [ [ - 29, + 28, 20, 32 ], [ - 28, + 29, 20, 33 ] ], [ [ - 32, + 31, 20, 31 ], [ - 31, + 32, 20, 32 ] @@ -17683,12 +17683,12 @@ [ 24, 32, - 38 + 37 ], [ 24, 33, - 37 + 38 ] ], [ @@ -17705,12 +17705,12 @@ ], [ [ - 23, + 22, 26, 35 ], [ - 22, + 23, 26, 36 ] @@ -17779,35 +17779,35 @@ [ 40, 28, - 28 + 27 ], [ 40, 29, - 27 + 28 ] ], [ [ 30, - 33, + 34, 39 ], [ 29, - 34, + 33, 39 ] ], [ [ 23, - 29, + 30, 37 ], [ 22, - 30, + 29, 37 ] ], @@ -17825,12 +17825,12 @@ ], [ [ - 37, + 38, 23, 30 ], [ - 38, + 37, 23, 29 ] @@ -17850,12 +17850,12 @@ [ [ 26, - 33, + 34, 38 ], [ 25, - 34, + 33, 38 ] ], @@ -17873,24 +17873,24 @@ ], [ [ - 27, + 26, 21, 33 ], [ - 26, + 27, 21, 34 ] ], [ [ - 30, + 29, 20, 32 ], [ - 29, + 30, 20, 33 ] @@ -17935,12 +17935,12 @@ [ 23, 28, - 37 + 36 ], [ 23, 29, - 36 + 37 ] ], [ @@ -17993,12 +17993,12 @@ ], [ [ - 25, + 24, 23, 34 ], [ - 24, + 25, 23, 35 ] @@ -18018,12 +18018,12 @@ [ [ 23, - 27, + 28, 36 ], [ 22, - 28, + 27, 36 ] ], @@ -18043,12 +18043,12 @@ [ 26, 33, - 39 + 38 ], [ 26, 34, - 38 + 39 ] ], [ @@ -18114,12 +18114,12 @@ [ [ 24, - 24, + 25, 35 ], [ 23, - 25, + 24, 35 ] ], @@ -18137,12 +18137,12 @@ ], [ [ - 28, + 27, 21, 33 ], [ - 27, + 28, 21, 34 ] @@ -18162,12 +18162,12 @@ [ [ 27, - 33, + 34, 39 ], [ 26, - 34, + 33, 39 ] ], @@ -18175,12 +18175,12 @@ [ 38, 24, - 30 + 29 ], [ 38, 25, - 29 + 30 ] ], [ @@ -18221,12 +18221,12 @@ ], [ [ - 38, + 39, 25, 30 ], [ - 39, + 38, 25, 29 ] @@ -18235,22 +18235,22 @@ [ 23, 27, - 37 + 36 ], [ 23, 28, - 36 + 37 ] ], [ [ - 24, + 23, 25, 35 ], [ - 23, + 24, 25, 36 ] @@ -18258,12 +18258,12 @@ [ [ 27, - 21, + 22, 34 ], [ 26, - 22, + 21, 34 ] ], @@ -18318,12 +18318,12 @@ [ [ 28, - 33, + 34, 39 ], [ 27, - 34, + 33, 39 ] ], @@ -18341,12 +18341,12 @@ ], [ [ - 26, + 25, 22, 34 ], [ - 25, + 26, 22, 35 ] @@ -18377,24 +18377,24 @@ ], [ [ - 29, + 28, 21, 33 ], [ - 28, + 29, 21, 34 ] ], [ [ - 32, + 31, 20, 32 ], [ - 31, + 32, 20, 33 ] @@ -18403,12 +18403,12 @@ [ 39, 25, - 30 + 29 ], [ 39, 26, - 29 + 30 ] ], [ @@ -18462,24 +18462,24 @@ [ [ 25, - 23, + 24, 35 ], [ 24, - 24, + 23, 35 ] ], [ [ 26, - 22, + 23, 35 ], [ 25, - 23, + 22, 35 ] ], @@ -18545,12 +18545,12 @@ ], [ [ - 27, + 26, 22, 34 ], [ - 26, + 27, 22, 35 ] @@ -18618,12 +18618,12 @@ [ [ 26, - 32, + 33, 39 ], [ 25, - 33, + 32, 39 ] ], @@ -18631,34 +18631,34 @@ [ 25, 32, - 39 + 38 ], [ 25, 33, - 38 + 39 ] ], [ [ - 25, + 24, 24, 35 ], [ - 24, + 25, 24, 36 ] ], [ [ - 30, + 29, 21, 33 ], [ - 29, + 30, 21, 34 ] @@ -18666,12 +18666,12 @@ [ [ 24, - 25, + 26, 36 ], [ 23, - 26, + 25, 36 ] ], @@ -18691,12 +18691,12 @@ [ 39, 26, - 30 + 29 ], [ 39, 27, - 29 + 30 ] ], [ @@ -18773,12 +18773,12 @@ ], [ [ - 39, + 40, 27, 30 ], [ - 40, + 39, 27, 29 ] @@ -18834,12 +18834,12 @@ [ [ 28, - 21, + 22, 35 ], [ 27, - 22, + 21, 35 ] ], @@ -18857,12 +18857,12 @@ ], [ [ - 37, + 36, 23, 31 ], [ - 36, + 37, 23, 32 ] @@ -18895,35 +18895,35 @@ [ 38, 24, - 31 + 30 ], [ 38, 25, - 30 + 31 ] ], [ [ 40, 27, - 30 + 29 ], [ 40, 28, - 29 + 30 ] ], [ [ 24, - 26, + 27, 37 ], [ 23, - 27, + 26, 37 ] ], @@ -18965,12 +18965,12 @@ ], [ [ - 24, + 23, 29, 37 ], [ - 23, + 24, 29, 38 ] @@ -18990,12 +18990,12 @@ [ [ 27, - 32, + 33, 39 ], [ 26, - 33, + 32, 39 ] ], @@ -19003,23 +19003,23 @@ [ 25, 31, - 39 + 38 ], [ 25, 32, - 38 + 39 ] ], [ [ 24, - 27, + 28, 37 ], [ 23, - 28, + 27, 37 ] ], @@ -19038,12 +19038,12 @@ [ [ 29, - 32, + 33, 40 ], [ 28, - 33, + 32, 40 ] ], @@ -19075,12 +19075,12 @@ [ 28, 32, - 40 + 39 ], [ 28, 33, - 39 + 40 ] ], [ @@ -19097,24 +19097,24 @@ ], [ [ - 29, + 28, 21, 34 ], [ - 28, + 29, 21, 35 ] ], [ [ - 32, + 31, 21, 33 ], [ - 31, + 32, 21, 34 ] @@ -19146,12 +19146,12 @@ [ [ 25, - 30, + 31, 38 ], [ 24, - 31, + 30, 38 ] ], @@ -19169,12 +19169,12 @@ ], [ [ - 38, + 37, 24, 31 ], [ - 37, + 38, 24, 32 ] @@ -19193,12 +19193,12 @@ ], [ [ - 27, + 26, 22, 35 ], [ - 26, + 27, 22, 36 ] @@ -19218,12 +19218,12 @@ [ [ 28, - 32, + 33, 39 ], [ 27, - 33, + 32, 39 ] ], @@ -19254,12 +19254,12 @@ [ [ 27, - 22, + 23, 36 ], [ 26, - 23, + 22, 36 ] ], @@ -19267,58 +19267,58 @@ [ 40, 29, - 30 + 29 ], [ 40, 30, - 29 + 30 ] ], [ [ 26, - 31, + 32, 39 ], [ 25, - 32, + 31, 39 ] ], [ [ - 30, + 29, 21, 34 ], [ - 29, + 30, 21, 35 ] ], [ [ - 33, + 32, 21, 33 ], [ - 32, + 33, 21, 34 ] ], [ [ - 36, + 35, 22, 32 ], [ - 35, + 36, 22, 33 ] @@ -19351,12 +19351,12 @@ [ 38, 24, - 32 + 31 ], [ 38, 25, - 31 + 32 ] ], [ @@ -19398,36 +19398,36 @@ [ [ 29, - 21, + 22, 35 ], [ 28, - 22, + 21, 35 ] ], [ [ 30, - 31, + 32, 40 ], [ 29, - 32, + 31, 40 ] ], [ [ 25, - 29, + 30, 38 ], [ 24, - 30, + 29, 38 ] ], @@ -19447,22 +19447,22 @@ [ 36, 23, - 32 + 33 ], [ 36, 22, - 33 + 32 ] ], [ [ - 38, + 39, 25, 32 ], [ - 39, + 38, 25, 31 ] @@ -19505,12 +19505,12 @@ ], [ [ - 34, + 33, 21, 33 ], [ - 33, + 34, 21, 34 ] @@ -19531,12 +19531,12 @@ [ 40, 27, - 31 + 30 ], [ 40, 28, - 30 + 31 ] ], [ @@ -19555,12 +19555,12 @@ [ 39, 25, - 32 + 31 ], [ 39, 26, - 31 + 32 ] ], [ @@ -19637,12 +19637,12 @@ ], [ [ - 29, + 28, 22, 35 ], [ - 28, + 29, 22, 36 ] @@ -19686,12 +19686,12 @@ [ [ 30, - 21, + 22, 35 ], [ 29, - 22, + 21, 35 ] ], @@ -19733,12 +19733,12 @@ ], [ [ - 25, + 24, 26, 37 ], [ - 24, + 25, 26, 38 ] @@ -19781,12 +19781,12 @@ ], [ [ - 38, + 37, 24, 32 ], [ - 37, + 38, 24, 33 ] @@ -19818,12 +19818,12 @@ [ [ 28, - 22, + 23, 36 ], [ 27, - 23, + 22, 36 ] ], @@ -19843,12 +19843,12 @@ [ 27, 31, - 40 + 39 ], [ 27, 32, - 39 + 40 ] ], [ @@ -19878,12 +19878,12 @@ [ [ 33, - 21, + 22, 35 ], [ 32, - 22, + 21, 35 ] ], @@ -19901,12 +19901,12 @@ ], [ [ - 39, + 40, 27, 32 ], [ - 40, + 39, 27, 31 ] @@ -19939,59 +19939,59 @@ [ 38, 24, - 33 + 32 ], [ 38, 25, - 32 + 33 ] ], [ [ 40, 27, - 32 + 31 ], [ 40, 28, - 31 + 32 ] ], [ [ 28, - 31, + 32, 40 ], [ 27, - 32, + 31, 40 ] ], [ [ 31, - 21, + 22, 35 ], [ 30, - 22, + 21, 35 ] ], [ [ 29, - 31, + 32, 40 ], [ 28, - 32, + 31, 40 ] ], @@ -20010,12 +20010,12 @@ [ [ 27, - 23, + 24, 37 ], [ 26, - 24, + 23, 37 ] ], @@ -20105,12 +20105,12 @@ ], [ [ - 26, + 25, 25, 37 ], [ - 25, + 26, 25, 38 ] @@ -20131,24 +20131,24 @@ [ 39, 25, - 33 + 32 ], [ 39, 26, - 32 + 33 ] ], [ [ 40, 28, - 32 + 31 ], [ 40, 29, - 31 + 32 ] ], [ @@ -20166,12 +20166,12 @@ [ [ 26, - 25, + 26, 38 ], [ 25, - 26, + 25, 38 ] ], @@ -20189,12 +20189,12 @@ ], [ [ - 29, + 28, 23, 36 ], [ - 28, + 29, 23, 37 ] @@ -20263,12 +20263,12 @@ [ 40, 29, - 32 + 31 ], [ 40, 30, - 31 + 32 ] ], [ @@ -20346,12 +20346,12 @@ [ [ 26, - 26, + 27, 38 ], [ 25, - 27, + 26, 38 ] ], @@ -20383,12 +20383,12 @@ [ 27, 30, - 40 + 39 ], [ 27, 31, - 39 + 40 ] ], [ @@ -20417,24 +20417,24 @@ ], [ [ - 27, + 26, 24, 37 ], [ - 26, + 27, 24, 38 ] ], [ [ - 30, + 29, 22, 36 ], [ - 29, + 30, 22, 37 ] @@ -20466,23 +20466,23 @@ [ [ 35, - 22, + 23, 35 ], [ 34, - 23, + 22, 35 ] ], [ [ - 26, + 25, 27, 38 ], [ - 25, + 26, 27, 39 ] @@ -20501,12 +20501,12 @@ ], [ [ - 33, + 32, 22, 35 ], [ - 32, + 33, 22, 36 ] @@ -20515,22 +20515,22 @@ [ 39, 27, - 33 + 32 ], [ 39, 28, - 32 + 33 ] ], [ [ - 36, + 35, 23, 34 ], [ - 35, + 36, 23, 35 ] @@ -20538,12 +20538,12 @@ [ [ 30, - 22, + 23, 37 ], [ 29, - 23, + 22, 37 ] ], @@ -20561,12 +20561,12 @@ ], [ [ - 40, + 39, 28, 32 ], [ - 39, + 40, 28, 33 ] @@ -20586,35 +20586,35 @@ [ [ 30, - 30, + 31, 40 ], [ 29, - 31, + 30, 40 ] ], [ [ 28, - 30, + 31, 40 ], [ 27, - 31, + 30, 40 ] ], [ [ - 31, + 30, 22, 36 ], [ - 30, + 31, 22, 37 ] @@ -20647,22 +20647,22 @@ [ 40, 28, - 33 + 32 ], [ 40, 29, - 32 + 33 ] ], [ [ - 28, + 27, 24, 37 ], [ - 27, + 28, 24, 38 ] @@ -20682,12 +20682,12 @@ [ [ 34, - 22, + 23, 36 ], [ 33, - 23, + 22, 36 ] ], @@ -20705,12 +20705,12 @@ ], [ [ - 38, + 39, 26, 34 ], [ - 39, + 38, 26, 33 ] @@ -20718,12 +20718,12 @@ [ [ 27, - 29, + 30, 39 ], [ 26, - 30, + 29, 39 ] ], @@ -20742,12 +20742,12 @@ [ [ 40, - 28, + 29, 33 ], [ 39, - 29, + 28, 33 ] ], @@ -20766,12 +20766,12 @@ [ [ 27, - 25, + 26, 38 ], [ 26, - 26, + 25, 38 ] ], @@ -20814,12 +20814,12 @@ [ [ 29, - 23, + 24, 37 ], [ 28, - 24, + 23, 37 ] ], @@ -20837,12 +20837,12 @@ ], [ [ - 32, + 31, 23, 36 ], [ - 31, + 32, 23, 37 ] @@ -20910,12 +20910,12 @@ [ [ 29, - 30, + 31, 40 ], [ 28, - 31, + 30, 40 ] ], @@ -20933,24 +20933,24 @@ ], [ [ - 27, + 26, 26, 38 ], [ - 26, + 27, 26, 39 ] ], [ [ - 29, + 28, 24, 37 ], [ - 28, + 29, 24, 38 ] @@ -20970,12 +20970,12 @@ [ [ 36, - 23, + 24, 35 ], [ 35, - 24, + 23, 35 ] ], @@ -20995,22 +20995,22 @@ [ 39, 27, - 34 + 33 ], [ 39, 28, - 33 + 34 ] ], [ [ - 33, + 32, 23, 36 ], [ - 32, + 33, 23, 37 ] @@ -21029,12 +21029,12 @@ ], [ [ - 38, + 37, 25, 34 ], [ - 37, + 38, 25, 35 ] @@ -21054,12 +21054,12 @@ [ [ 40, - 29, + 30, 33 ], [ 39, - 30, + 29, 33 ] ], @@ -21078,23 +21078,23 @@ [ [ 27, - 27, + 28, 39 ], [ 26, - 28, + 27, 39 ] ], [ [ - 36, + 35, 24, 35 ], [ - 35, + 36, 24, 36 ] @@ -21113,12 +21113,12 @@ ], [ [ - 30, + 29, 23, 37 ], [ - 29, + 30, 23, 38 ] @@ -21126,12 +21126,12 @@ [ [ 30, - 23, + 24, 38 ], [ 29, - 24, + 23, 38 ] ], @@ -21162,12 +21162,12 @@ [ [ 37, - 24, + 25, 35 ], [ 36, - 25, + 24, 35 ] ], @@ -21185,24 +21185,24 @@ ], [ [ - 34, + 33, 23, 36 ], [ - 33, + 34, 23, 37 ] ], [ [ - 28, + 27, 25, 38 ], [ - 27, + 28, 25, 39 ] @@ -21235,12 +21235,12 @@ [ 38, 26, - 35 + 34 ], [ 38, 27, - 34 + 35 ] ], [ @@ -21270,12 +21270,12 @@ [ [ 29, - 24, + 25, 38 ], [ 28, - 25, + 24, 38 ] ], @@ -21305,12 +21305,12 @@ ], [ [ - 37, + 36, 25, 35 ], [ - 36, + 37, 25, 36 ] @@ -21318,23 +21318,23 @@ [ [ 31, - 23, + 24, 38 ], [ 30, - 24, + 23, 38 ] ], [ [ - 39, + 38, 27, 34 ], [ - 38, + 39, 27, 35 ] @@ -21389,12 +21389,12 @@ ], [ [ - 35, + 34, 24, 36 ], [ - 34, + 35, 24, 37 ] @@ -21402,12 +21402,12 @@ [ [ 32, - 23, + 24, 37 ], [ 31, - 24, + 23, 37 ] ], @@ -21437,12 +21437,12 @@ ], [ [ - 29, + 28, 25, 38 ], [ - 28, + 29, 25, 39 ] @@ -21462,24 +21462,24 @@ [ [ 36, - 24, + 25, 36 ], [ 35, - 25, + 24, 36 ] ], [ [ 28, - 26, + 27, 39 ], [ 27, - 27, + 26, 39 ] ], @@ -21557,12 +21557,12 @@ ], [ [ - 38, + 37, 26, 35 ], [ - 37, + 38, 26, 36 ] @@ -21570,23 +21570,23 @@ [ [ 28, - 27, + 28, 39 ], [ 27, - 28, + 27, 39 ] ], [ [ - 36, + 35, 25, 36 ], [ - 35, + 36, 25, 37 ] @@ -21618,12 +21618,12 @@ [ [ 29, - 25, + 26, 39 ], [ 28, - 26, + 25, 39 ] ], @@ -21653,12 +21653,12 @@ ], [ [ - 30, + 29, 25, 38 ], [ - 29, + 30, 25, 39 ] @@ -21726,12 +21726,12 @@ [ [ 35, - 24, + 25, 37 ], [ 34, - 25, + 24, 37 ] ], @@ -21773,12 +21773,12 @@ ], [ [ - 37, + 36, 26, 36 ], [ - 36, + 37, 26, 37 ] @@ -21798,12 +21798,12 @@ [ [ 34, - 24, + 25, 38 ], [ 33, - 25, + 24, 38 ] ], @@ -21811,12 +21811,12 @@ [ 38, 28, - 36 + 35 ], [ 38, 29, - 35 + 36 ] ], [ @@ -21894,12 +21894,12 @@ [ [ 30, - 25, + 26, 39 ], [ 29, - 26, + 25, 39 ] ], @@ -22063,34 +22063,34 @@ [ 37, 28, - 37 + 36 ], [ 37, 29, - 36 + 37 ] ], [ [ 38, - 28, + 29, 36 ], [ 37, - 29, + 28, 36 ] ], [ [ - 37, + 38, 29, 37 ], [ - 38, + 37, 29, 36 ] @@ -22098,12 +22098,12 @@ [ [ 30, - 26, + 27, 39 ], [ 29, - 27, + 26, 39 ] ], @@ -22145,12 +22145,12 @@ ], [ [ - 30, + 29, 27, 39 ], [ - 29, + 30, 27, 40 ] @@ -22158,36 +22158,36 @@ [ [ 33, - 25, + 26, 39 ], [ 32, - 26, + 25, 39 ] ], [ [ 34, - 25, + 26, 38 ], [ 33, - 26, + 25, 38 ] ], [ [ 36, - 26, + 27, 38 ], [ 35, - 27, + 26, 38 ] ], @@ -22207,12 +22207,12 @@ [ 38, 29, - 37 + 36 ], [ 38, 30, - 36 + 37 ] ], [ @@ -22230,24 +22230,24 @@ [ [ 37, - 27, + 28, 37 ], [ 36, - 28, + 27, 37 ] ], [ [ 38, - 29, + 30, 37 ], [ 37, - 30, + 29, 37 ] ], @@ -22338,24 +22338,24 @@ [ [ 36, - 27, + 28, 38 ], [ 35, - 28, + 27, 38 ] ], [ [ 32, - 26, + 27, 39 ], [ 31, - 27, + 26, 39 ] ], @@ -22373,12 +22373,12 @@ ], [ [ - 31, + 30, 27, 39 ], [ - 30, + 31, 27, 40 ] @@ -22422,12 +22422,12 @@ [ [ 34, - 26, + 27, 39 ], [ 33, - 27, + 26, 39 ] ], @@ -22482,12 +22482,12 @@ [ [ 31, - 27, + 28, 40 ], [ 30, - 28, + 27, 40 ] ], @@ -22529,12 +22529,12 @@ ], [ [ - 32, + 31, 27, 39 ], [ - 31, + 32, 27, 40 ] @@ -22566,12 +22566,12 @@ [ [ 32, - 27, + 28, 40 ], [ 31, - 28, + 27, 40 ] ], @@ -22614,12 +22614,12 @@ [ [ 35, - 28, + 29, 39 ], [ 34, - 29, + 28, 39 ] ], @@ -22650,23 +22650,23 @@ [ [ 34, - 28, + 29, 39 ], [ 33, - 29, + 28, 39 ] ], [ [ - 33, + 32, 28, 39 ], [ - 32, + 33, 28, 40 ] @@ -22698,24 +22698,24 @@ [ [ 33, - 28, + 29, 40 ], [ 32, - 29, + 28, 40 ] ], [ [ 32, - 28, + 29, 40 ], [ 31, - 29, + 28, 40 ] ], @@ -22746,36 +22746,36 @@ [ [ 33, - 29, + 30, 40 ], [ 32, - 30, + 29, 40 ] ], [ [ 31, - 29, + 30, 40 ], [ 30, - 30, + 29, 40 ] ], [ [ 32, - 29, + 30, 40 ], [ 31, - 30, + 29, 40 ] ] diff --git a/testData/cases/conformal/structured_sphere.fdtd.json b/testData/cases/conformal/structured_sphere.fdtd.json deleted file mode 100644 index 91921fbcc..000000000 --- a/testData/cases/conformal/structured_sphere.fdtd.json +++ /dev/null @@ -1,303 +0,0 @@ -{ - "_format": "FDTD Input file", - "general": { - "timeStep": 3.85167e-11, - "numberOfSteps": 1000 - }, - "boundary": { - "all": { - "type": "pml", - "layers": 10, - "order": 2, - "reflection": 0.001 - } - }, - "mesh": { - "grid": { - "numberOfCells": [ - 50, - 50, - 50 - ], - "steps": { - "x": [ - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0 - ], - "y": [ - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0 - ], - "z": [ - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0, - 4.0 - ] - }, - "origin": [ - -100.0, - -100.0, - -100.0 - ] - }, - "elements": [ - { - "id": 1, - "type": "cell", - "intervals": [ - [ - [ - 0, - 0, - 0 - ], - [ - 25, - 25, - 25 - ] - ] - ] - }, - { - "id": 2, - "type": "cell", - "intervals": [ - [ - [ - 2, - 2, - 2 - ], - [ - 23, - 23, - 23 - ] - ] - ] - }, - { - "id": 3, - "type": "cell", - "subtype": "volume", - "intervals": [], - "triangles": [] - } - ], - "coordinates": [] - }, - "materials": [ - { - "id": 1, - "type": "pec" - } - ], - "materialAssociations": [ - { - "materialId": 1, - "elementIds": [ - 3 - ] - } - ], - "sources": [ - { - "type": "planewave", - "magnitudeFile": "gauss.exc", - "elementIds": [ - 1 - ], - "direction": { - "theta": 0.0, - "phi": 0.0 - }, - "polarization": { - "theta": 1.5707963268, - "phi": 0.0 - } - } - ], - "probes": [ - { - "name": "FarField", - "type": "farField", - "elementIds": [ - 2 - ], - "theta": { - "initial": 0.0, - "final": 10.0, - "step": 10.0 - }, - "phi": { - "initial": 0.0, - "final": 360.0, - "step": 10.0 - }, - "domain": { - "type": "frequency", - "initialFrequency": 10000000.0, - "finalFrequency": 500000000.0, - "numberOfFrequencies": 1, - "frequencySpacing": "logarithmic" - } - }, - { - "name": "electric_field_movie", - "type": "movie", - "field": "electric", - "component": "x", - "elementIds": [ - 2 - ], - "domain": { - "type": "time", - "samplingPeriod": 1e-09 - } - } - ] -} \ No newline at end of file diff --git a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json index 80d83cde5..88d375d27 100755 --- a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json +++ b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json @@ -4614,12 +4614,12 @@ "intervals": [ [ [ - 10.0, + 9.0, 5.0, 7.0 ], [ - 9.0, + 10.0, 5.0, 8.0 ] @@ -4640,22 +4640,22 @@ [ 10.0, 5.0, - 8.0 + 7.0 ], [ 10.0, 6.0, - 7.0 + 8.0 ] ], [ [ - 10.0, + 9.0, 5.0, 8.0 ], [ - 9.0, + 10.0, 5.0, 9.0 ] @@ -4664,22 +4664,22 @@ [ 10.0, 5.0, - 9.0 + 8.0 ], [ 10.0, 6.0, - 8.0 + 9.0 ] ], [ [ - 10.0, + 9.0, 5.0, 9.0 ], [ - 9.0, + 10.0, 5.0, 10.0 ] @@ -4688,22 +4688,22 @@ [ 10.0, 5.0, - 10.0 + 9.0 ], [ 10.0, 6.0, - 9.0 + 10.0 ] ], [ [ - 10.0, + 9.0, 5.0, 10.0 ], [ - 9.0, + 10.0, 5.0, 11.0 ] @@ -4712,22 +4712,22 @@ [ 10.0, 5.0, - 11.0 + 10.0 ], [ 10.0, 6.0, - 10.0 + 11.0 ] ], [ [ - 10.0, + 9.0, 5.0, 11.0 ], [ - 9.0, + 10.0, 5.0, 12.0 ] @@ -4736,12 +4736,12 @@ [ 10.0, 5.0, - 12.0 + 11.0 ], [ 10.0, 6.0, - 11.0 + 12.0 ] ], [ @@ -4760,34 +4760,34 @@ [ 10.0, 5.0, - 13.0 + 12.0 ], [ 10.0, 6.0, - 12.0 + 13.0 ] ], [ [ 10.0, - 5.0, + 6.0, 13.0 ], [ 9.0, - 6.0, + 5.0, 13.0 ] ], [ [ - 9.0, + 10.0, 6.0, 8.0 ], [ - 10.0, + 9.0, 6.0, 7.0 ] @@ -4939,12 +4939,12 @@ [ [ 11.0, - 6.0, + 5.0, 7.0 ], [ 12.0, - 5.0, + 6.0, 7.0 ] ], @@ -5022,72 +5022,72 @@ ], [ [ - 11.0, + 12.0, 6.0, 8.0 ], [ - 12.0, + 11.0, 6.0, 7.0 ] ], [ [ - 11.0, + 12.0, 6.0, 9.0 ], [ - 12.0, + 11.0, 6.0, 8.0 ] ], [ [ - 11.0, + 12.0, 6.0, 10.0 ], [ - 12.0, + 11.0, 6.0, 9.0 ] ], [ [ - 11.0, + 12.0, 6.0, 11.0 ], [ - 12.0, + 11.0, 6.0, 10.0 ] ], [ [ - 11.0, + 12.0, 6.0, 12.0 ], [ - 12.0, + 11.0, 6.0, 11.0 ] ], [ [ - 11.0, + 12.0, 6.0, 13.0 ], [ - 12.0, + 11.0, 6.0, 12.0 ] diff --git a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json index 90e5218f4..dd75806ea 100755 --- a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json +++ b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json @@ -53,12 +53,12 @@ "intervals": [ [ [ - 12, + 11, 5, 7 ], [ - 11, + 12, 5, 8 ] @@ -127,12 +127,12 @@ [ 13, 6, - 12 + 13 ], [ 13, 5, - 13 + 12 ] ], [ @@ -413,12 +413,12 @@ ], [ [ - 15, + 14, 7, 11 ], [ - 14, + 15, 7, 12 ] @@ -487,12 +487,12 @@ [ 15, 8, - 8 + 9 ], [ 15, 7, - 9 + 8 ] ], [ @@ -847,156 +847,156 @@ [ 16, 11, - 11 + 10 ], [ 16, 12, - 10 + 11 ] ], [ [ 16, 11, - 12 + 11 ], [ 16, 12, - 11 + 12 ] ], [ [ 16, 11, - 13 + 12 ], [ 16, 12, - 12 + 13 ] ], [ [ 16, 11, - 8 + 7 ], [ 16, 12, - 7 + 8 ] ], [ [ 16, 11, - 9 + 8 ], [ 16, 12, - 8 + 9 ] ], [ [ 16, 11, - 10 + 9 ], [ 16, 12, - 9 + 10 ] ], [ [ 16, 12, - 10 + 9 ], [ 16, 13, - 9 + 10 ] ], [ [ 16, 12, - 11 + 10 ], [ 16, 13, - 10 + 11 ] ], [ [ 16, 12, - 12 + 11 ], [ 16, 13, - 11 + 12 ] ], [ [ 16, 12, - 13 + 12 ], [ 16, 13, - 12 + 13 ] ], [ [ 16, 12, - 8 + 7 ], [ 16, 13, - 7 + 8 ] ], [ [ 16, 12, - 9 + 8 ], [ 16, 13, - 8 + 9 ] ], [ [ 15, 13, - 9 + 8 ], [ 15, 14, - 8 + 9 ] ], [ @@ -1135,60 +1135,60 @@ [ 15, 14, - 10 + 9 ], [ 15, 15, - 9 + 10 ] ], [ [ 15, 14, - 11 + 10 ], [ 15, 15, - 10 + 11 ] ], [ [ 15, 14, - 12 + 11 ], [ 15, 15, - 11 + 12 ] ], [ [ 15, 14, - 13 + 12 ], [ 15, 15, - 12 + 13 ] ], [ [ 15, 14, - 8 + 7 ], [ 15, 15, - 7 + 8 ] ], [ @@ -1279,12 +1279,12 @@ [ 14, 15, - 13 + 12 ], [ 14, 16, - 12 + 13 ] ], [ @@ -1351,60 +1351,60 @@ [ 14, 15, - 8 + 7 ], [ 14, 16, - 7 + 8 ] ], [ [ 14, 15, - 9 + 8 ], [ 14, 16, - 8 + 9 ] ], [ [ 14, 15, - 10 + 9 ], [ 14, 16, - 9 + 10 ] ], [ [ 14, 15, - 11 + 10 ], [ 14, 16, - 10 + 11 ] ], [ [ 14, 15, - 12 + 11 ], [ 14, 16, - 11 + 12 ] ], [ @@ -1481,12 +1481,12 @@ ], [ [ - 12, + 13, 16, 11 ], [ - 13, + 12, 16, 10 ] @@ -1495,24 +1495,24 @@ [ 12, 16, - 12 + 11 ], [ 12, 17, - 11 + 12 ] ], [ [ 12, 16, - 13 + 12 ], [ 12, 17, - 12 + 13 ] ], [ @@ -1531,48 +1531,48 @@ [ 12, 16, - 8 + 7 ], [ 12, 17, - 7 + 8 ] ], [ [ 12, 16, - 9 + 8 ], [ 12, 17, - 8 + 9 ] ], [ [ 12, 16, - 10 + 9 ], [ 12, 17, - 9 + 10 ] ], [ [ 12, 16, - 11 + 10 ], [ 12, 17, - 10 + 11 ] ], [ @@ -1625,12 +1625,12 @@ ], [ [ - 11, + 12, 17, 12 ], [ - 12, + 11, 17, 11 ] @@ -1709,144 +1709,144 @@ ], [ [ - 9, + 10, 17, 8 ], [ - 10, + 9, 17, 7 ] ], [ [ - 9, + 10, 17, 9 ], [ - 10, + 9, 17, 8 ] ], [ [ - 9, + 10, 17, 10 ], [ - 10, + 9, 17, 9 ] ], [ [ - 9, + 10, 17, 11 ], [ - 10, + 9, 17, 10 ] ], [ [ - 9, + 10, 17, 12 ], [ - 10, + 9, 17, 11 ] ], [ [ - 9, + 10, 17, 13 ], [ - 10, + 9, 17, 12 ] ], [ [ - 8, + 9, 17, 8 ], [ - 9, + 8, 17, 7 ] ], [ [ - 8, + 9, 17, 9 ], [ - 9, + 8, 17, 8 ] ], [ [ - 8, + 9, 17, 10 ], [ - 9, + 8, 17, 9 ] ], [ [ - 8, + 9, 17, 11 ], [ - 9, + 8, 17, 10 ] ], [ [ - 8, + 9, 17, 12 ], [ - 9, + 8, 17, 11 ] ], [ [ - 8, + 9, 17, 13 ], [ - 9, + 8, 17, 12 ] @@ -1855,214 +1855,214 @@ [ 8, 16, - 8 + 7 ], [ 8, 17, - 7 + 8 ] ], [ [ 8, 16, - 9 + 8 ], [ 8, 17, - 8 + 9 ] ], [ [ 8, 16, - 10 + 9 ], [ 8, 17, - 9 + 10 ] ], [ [ 8, 16, - 11 + 10 ], [ 8, 17, - 10 + 11 ] ], [ [ 8, 16, - 12 + 11 ], [ 8, 17, - 11 + 12 ] ], [ [ 8, 16, - 13 + 12 ], [ 8, 17, - 12 + 13 ] ], [ [ - 7, + 8, 16, 8 ], [ - 8, + 7, 16, 7 ] ], [ [ - 7, + 8, 16, 9 ], [ - 8, + 7, 16, 8 ] ], [ [ - 7, + 8, 16, 10 ], [ - 8, + 7, 16, 9 ] ], [ [ - 7, + 8, 16, 11 ], [ - 8, + 7, 16, 10 ] ], [ [ - 7, + 8, 16, 12 ], [ - 8, + 7, 16, 11 ] ], [ [ - 7, + 8, 16, 13 ], [ - 8, + 7, 16, 12 ] ], [ [ - 6, + 7, 16, 8 ], [ - 7, + 6, 16, 7 ] ], [ [ - 6, + 7, 16, 9 ], [ - 7, + 6, 16, 8 ] ], [ [ - 6, + 7, 16, 10 ], [ - 7, + 6, 16, 9 ] ], [ [ - 6, + 7, 16, 11 ], [ - 7, + 6, 16, 10 ] ], [ [ - 6, + 7, 16, 12 ], [ - 7, + 6, 16, 11 ] ], [ [ - 6, + 7, 16, 13 ], [ - 7, + 6, 16, 12 ] @@ -2071,48 +2071,48 @@ [ 6, 15, - 8 + 7 ], [ 6, 16, - 7 + 8 ] ], [ [ 6, 15, - 9 + 8 ], [ 6, 16, - 8 + 9 ] ], [ [ 6, 15, - 10 + 9 ], [ 6, 16, - 9 + 10 ] ], [ [ 6, 15, - 11 + 10 ], [ 6, 16, - 10 + 11 ] ], [ @@ -2131,22 +2131,22 @@ [ 6, 15, - 13 + 12 ], [ 6, 16, - 12 + 13 ] ], [ [ - 5, + 6, 15, 8 ], [ - 6, + 5, 15, 7 ] @@ -2165,48 +2165,48 @@ ], [ [ - 5, + 6, 15, 10 ], [ - 6, + 5, 15, 9 ] ], [ [ - 5, + 6, 15, 11 ], [ - 6, + 5, 15, 10 ] ], [ [ - 5, + 6, 15, 12 ], [ - 6, + 5, 15, 11 ] ], [ [ - 5, + 6, 15, 13 ], [ - 6, + 5, 15, 12 ] @@ -2215,60 +2215,60 @@ [ 5, 14, - 8 + 7 ], [ 5, 15, - 7 + 8 ] ], [ [ 5, 14, - 9 + 8 ], [ 5, 15, - 8 + 9 ] ], [ [ 5, 14, - 10 + 9 ], [ 5, 15, - 9 + 10 ] ], [ [ 5, 14, - 11 + 10 ], [ 5, 15, - 10 + 11 ] ], [ [ 5, 14, - 12 + 11 ], [ 5, 15, - 11 + 12 ] ], [ @@ -2287,120 +2287,120 @@ [ 5, 13, - 11 + 10 ], [ 5, 14, - 10 + 11 ] ], [ [ 5, 13, - 12 + 11 ], [ 5, 14, - 11 + 12 ] ], [ [ 5, 13, - 13 + 12 ], [ 5, 14, - 12 + 13 ] ], [ [ 5, 13, - 8 + 7 ], [ 5, 14, - 7 + 8 ] ], [ [ 5, 13, - 9 + 8 ], [ 5, 14, - 8 + 9 ] ], [ [ 5, 13, - 10 + 9 ], [ 5, 14, - 9 + 10 ] ], [ [ 4, 12, - 10 + 9 ], [ 4, 13, - 9 + 10 ] ], [ [ 4, 12, - 11 + 10 ], [ 4, 13, - 10 + 11 ] ], [ [ 4, 12, - 12 + 11 ], [ 4, 13, - 11 + 12 ] ], [ [ 4, 12, - 13 + 12 ], [ 4, 13, - 12 + 13 ] ], [ @@ -2503,84 +2503,84 @@ [ 4, 11, - 13 + 12 ], [ 4, 12, - 12 + 13 ] ], [ [ 4, 11, - 8 + 7 ], [ 4, 12, - 7 + 8 ] ], [ [ 4, 11, - 9 + 8 ], [ 4, 12, - 8 + 9 ] ], [ [ 4, 11, - 10 + 9 ], [ 4, 12, - 9 + 10 ] ], [ [ 4, 11, - 11 + 10 ], [ 4, 12, - 10 + 11 ] ], [ [ 4, 11, - 12 + 11 ], [ 4, 12, - 11 + 12 ] ], [ [ 4, 10, - 13 + 12 ], [ 4, 11, - 12 + 13 ] ], [ @@ -2717,72 +2717,72 @@ ], [ [ - 5, + 4, 9, 8 ], [ - 4, + 5, 9, 9 ] ], [ [ - 5, + 4, 9, 9 ], [ - 4, + 5, 9, 10 ] ], [ [ - 5, + 4, 9, 10 ], [ - 4, + 5, 9, 11 ] ], [ [ - 5, + 4, 9, 11 ], [ - 4, + 5, 9, 12 ] ], [ [ - 5, + 4, 9, 12 ], [ - 4, + 5, 9, 13 ] ], [ [ - 5, + 4, 9, 7 ], [ - 4, + 5, 9, 8 ] @@ -2933,72 +2933,72 @@ ], [ [ - 6, + 5, 7, 9 ], [ - 5, + 6, 7, 10 ] ], [ [ - 6, + 5, 7, 10 ], [ - 5, + 6, 7, 11 ] ], [ [ - 6, + 5, 7, 11 ], [ - 5, + 6, 7, 12 ] ], [ [ - 6, + 5, 7, 12 ], [ - 5, + 6, 7, 13 ] ], [ [ - 6, + 5, 7, 7 ], [ - 5, + 6, 7, 8 ] ], [ [ - 6, + 5, 7, 8 ], [ - 5, + 6, 7, 9 ] @@ -3007,12 +3007,12 @@ [ 6, 7, - 9 + 10 ], [ 6, 6, - 10 + 9 ] ], [ @@ -3077,144 +3077,144 @@ ], [ [ - 7, + 6, 6, 7 ], [ - 6, + 7, 6, 8 ] ], [ [ - 7, + 6, 6, 8 ], [ - 6, + 7, 6, 9 ] ], [ [ - 7, + 6, 6, 9 ], [ - 6, + 7, 6, 10 ] ], [ [ - 7, + 6, 6, 10 ], [ - 6, + 7, 6, 11 ] ], [ [ - 7, + 6, 6, 11 ], [ - 6, + 7, 6, 12 ] ], [ [ - 7, + 6, 6, 12 ], [ - 6, + 7, 6, 13 ] ], [ [ - 8, + 7, 6, 7 ], [ - 7, + 8, 6, 8 ] ], [ [ - 8, + 7, 6, 8 ], [ - 7, + 8, 6, 9 ] ], [ [ - 8, + 7, 6, 9 ], [ - 7, + 8, 6, 10 ] ], [ [ - 8, + 7, 6, 10 ], [ - 7, + 8, 6, 11 ] ], [ [ - 8, + 7, 6, 11 ], [ - 7, + 8, 6, 12 ] ], [ [ - 8, + 7, 6, 12 ], [ - 7, + 8, 6, 13 ] @@ -3293,144 +3293,144 @@ ], [ [ - 9, + 8, 5, 7 ], [ - 8, + 9, 5, 8 ] ], [ [ - 9, + 8, 5, 8 ], [ - 8, + 9, 5, 9 ] ], [ [ - 9, + 8, 5, 9 ], [ - 8, + 9, 5, 10 ] ], [ [ - 9, + 8, 5, 10 ], [ - 8, + 9, 5, 11 ] ], [ [ - 9, + 8, 5, 11 ], [ - 8, + 9, 5, 12 ] ], [ [ - 9, + 8, 5, 12 ], [ - 8, + 9, 5, 13 ] ], [ [ - 10, + 9, 5, 7 ], [ - 9, + 10, 5, 8 ] ], [ [ - 10, + 9, 5, 8 ], [ - 9, + 10, 5, 9 ] ], [ [ - 10, + 9, 5, 9 ], [ - 9, + 10, 5, 10 ] ], [ [ - 10, + 9, 5, 10 ], [ - 9, + 10, 5, 11 ] ], [ [ - 10, + 9, 5, 11 ], [ - 9, + 10, 5, 12 ] ], [ [ - 10, + 9, 5, 12 ], [ - 9, + 10, 5, 13 ] @@ -3486,12 +3486,12 @@ [ [ 11, - 17, + 16, 7 ], [ 12, - 16, + 17, 7 ] ], @@ -3510,12 +3510,12 @@ [ [ 10, - 17, + 16, 7 ], [ 11, - 16, + 17, 7 ] ], @@ -3534,12 +3534,12 @@ [ [ 9, - 17, + 16, 7 ], [ 10, - 16, + 17, 7 ] ], @@ -3582,24 +3582,24 @@ [ [ 7, - 16, + 15, 7 ], [ 8, - 15, + 16, 7 ] ], [ [ 15, - 9, + 8, 7 ], [ 16, - 8, + 9, 7 ] ], @@ -3630,24 +3630,24 @@ [ [ 14, - 8, + 7, 7 ], [ 15, - 7, + 8, 7 ] ], [ [ 6, - 15, + 14, 7 ], [ 7, - 14, + 15, 7 ] ], @@ -3666,24 +3666,24 @@ [ [ 13, - 7, + 6, 7 ], [ 14, - 6, + 7, 7 ] ], [ [ 5, - 14, + 13, 7 ], [ 6, - 13, + 14, 7 ] ], @@ -3726,24 +3726,24 @@ [ [ 11, - 6, + 5, 7 ], [ 12, - 5, + 6, 7 ] ], [ [ 4, - 12, + 11, 7 ], [ 5, - 11, + 12, 7 ] ], @@ -3810,12 +3810,12 @@ [ [ 7, - 7, + 6, 7 ], [ 8, - 6, + 7, 7 ] ], @@ -3846,35 +3846,35 @@ [ [ 6, - 8, + 7, 7 ], [ 7, - 7, + 8, 7 ] ], [ [ - 11, + 12, 6, 8 ], [ - 12, + 11, 6, 7 ] ], [ [ - 11, + 12, 6, 9 ], [ - 12, + 11, 6, 8 ] @@ -3893,36 +3893,36 @@ ], [ [ - 11, + 12, 6, 11 ], [ - 12, + 11, 6, 10 ] ], [ [ - 11, + 12, 6, 12 ], [ - 12, + 11, 6, 11 ] ], [ [ - 11, + 12, 6, 13 ], [ - 12, + 11, 6, 12 ] @@ -3931,22 +3931,22 @@ [ 12, 6, - 8 + 7 ], [ 12, 7, - 7 + 8 ] ], [ [ - 12, + 13, 7, 8 ], [ - 13, + 12, 7, 7 ] @@ -3955,58 +3955,58 @@ [ 12, 6, - 9 + 8 ], [ 12, 7, - 8 + 9 ] ], [ [ - 12, + 13, 7, 9 ], [ - 13, + 12, 7, 8 ] ], [ [ - 12, + 13, 7, 10 ], [ - 13, + 12, 7, 9 ] ], [ [ - 12, + 13, 7, 11 ], [ - 13, + 12, 7, 10 ] ], [ [ - 12, + 13, 7, 12 ], [ - 13, + 12, 7, 11 ] @@ -4015,130 +4015,130 @@ [ 12, 6, - 10 + 9 ], [ 12, 7, - 9 + 10 ] ], [ [ 12, 6, - 11 + 10 ], [ 12, 7, - 10 + 11 ] ], [ [ 12, 6, - 12 + 11 ], [ 12, 7, - 11 + 12 ] ], [ [ 12, 6, - 13 + 12 ], [ 12, 7, - 12 + 13 ] ], [ [ - 12, + 13, 7, 13 ], [ - 13, + 12, 7, 12 ] ], [ [ - 13, + 14, 7, 8 ], [ - 14, + 13, 7, 7 ] ], [ [ - 13, + 14, 7, 9 ], [ - 14, + 13, 7, 8 ] ], [ [ - 13, + 14, 7, 10 ], [ - 14, + 13, 7, 9 ] ], [ [ - 13, + 14, 7, 11 ], [ - 14, + 13, 7, 10 ] ], [ [ - 13, + 14, 7, 12 ], [ - 14, + 13, 7, 11 ] ], [ [ - 13, + 14, 7, 13 ], [ - 14, + 13, 7, 12 ] @@ -4147,94 +4147,94 @@ [ 14, 7, - 8 + 7 ], [ 14, 8, - 7 + 8 ] ], [ [ 14, 7, - 9 + 8 ], [ 14, 8, - 8 + 9 ] ], [ [ 14, 7, - 10 + 9 ], [ 14, 8, - 9 + 10 ] ], [ [ 14, 7, - 11 + 10 ], [ 14, 8, - 10 + 11 ] ], [ [ 14, 7, - 12 + 11 ], [ 14, 8, - 11 + 12 ] ], [ [ 14, 7, - 13 + 12 ], [ 14, 8, - 12 + 13 ] ], [ [ - 14, + 15, 9, 8 ], [ - 15, + 14, 9, 7 ] ], [ [ - 14, + 15, 9, 9 ], [ - 15, + 14, 9, 8 ] @@ -4255,58 +4255,58 @@ [ 14, 8, - 8 + 7 ], [ 14, 9, - 7 + 8 ] ], [ [ 14, 8, - 9 + 8 ], [ 14, 9, - 8 + 9 ] ], [ [ 14, 8, - 10 + 9 ], [ 14, 9, - 9 + 10 ] ], [ [ 14, 8, - 11 + 10 ], [ 14, 9, - 10 + 11 ] ], [ [ - 14, + 15, 9, 11 ], [ - 15, + 14, 9, 10 ] @@ -4315,22 +4315,22 @@ [ 14, 8, - 12 + 11 ], [ 14, 9, - 11 + 12 ] ], [ [ - 14, + 15, 9, 12 ], [ - 15, + 14, 9, 11 ] @@ -4339,22 +4339,22 @@ [ 14, 8, - 13 + 12 ], [ 14, 9, - 12 + 13 ] ], [ [ - 14, + 15, 9, 13 ], [ - 15, + 14, 9, 12 ] @@ -4399,48 +4399,48 @@ [ 15, 9, - 11 + 10 ], [ 15, 10, - 10 + 11 ] ], [ [ 15, 9, - 12 + 11 ], [ 15, 10, - 11 + 12 ] ], [ [ 15, 9, - 13 + 12 ], [ 15, 10, - 12 + 13 ] ], [ [ 15, 10, - 13 + 12 ], [ 15, 11, - 12 + 13 ] ], [ @@ -4627,24 +4627,24 @@ [ 15, 12, - 12 + 11 ], [ 15, 13, - 11 + 12 ] ], [ [ 15, 12, - 13 + 12 ], [ 15, 13, - 12 + 13 ] ], [ @@ -4661,60 +4661,60 @@ ], [ [ - 15, + 14, 13, 7 ], [ - 14, + 15, 13, 8 ] ], [ [ - 15, + 14, 13, 8 ], [ - 14, + 15, 13, 9 ] ], [ [ - 15, + 14, 13, 9 ], [ - 14, + 15, 13, 10 ] ], [ [ - 15, + 14, 13, 10 ], [ - 14, + 15, 13, 11 ] ], [ [ - 15, + 14, 13, 11 ], [ - 14, + 15, 13, 12 ] @@ -4781,12 +4781,12 @@ ], [ [ - 15, + 14, 13, 12 ], [ - 14, + 15, 13, 13 ] @@ -4889,12 +4889,12 @@ ], [ [ - 14, + 13, 15, 11 ], [ - 13, + 14, 15, 12 ] @@ -4913,12 +4913,12 @@ ], [ [ - 14, + 13, 15, 12 ], [ - 13, + 14, 15, 13 ] @@ -4937,72 +4937,72 @@ ], [ [ - 13, + 12, 15, 7 ], [ - 12, + 13, 15, 8 ] ], [ [ - 13, + 12, 15, 8 ], [ - 12, + 13, 15, 9 ] ], [ [ - 13, + 12, 15, 9 ], [ - 12, + 13, 15, 10 ] ], [ [ - 13, + 12, 15, 10 ], [ - 12, + 13, 15, 11 ] ], [ [ - 13, + 12, 15, 11 ], [ - 12, + 13, 15, 12 ] ], [ [ - 13, + 12, 15, 12 ], [ - 12, + 13, 15, 13 ] @@ -5081,60 +5081,60 @@ ], [ [ - 12, + 11, 16, 7 ], [ - 11, + 12, 16, 8 ] ], [ [ - 12, + 11, 16, 8 ], [ - 11, + 12, 16, 9 ] ], [ [ - 12, + 11, 16, 9 ], [ - 11, + 12, 16, 10 ] ], [ [ - 12, + 11, 16, 10 ], [ - 11, + 12, 16, 11 ] ], [ [ - 12, + 11, 16, 11 ], [ - 11, + 12, 16, 12 ] @@ -5153,72 +5153,72 @@ ], [ [ - 11, + 10, 16, 7 ], [ - 10, + 11, 16, 8 ] ], [ [ - 11, + 10, 16, 8 ], [ - 10, + 11, 16, 9 ] ], [ [ - 11, + 10, 16, 9 ], [ - 10, + 11, 16, 10 ] ], [ [ - 11, + 10, 16, 10 ], [ - 10, + 11, 16, 11 ] ], [ [ - 11, + 10, 16, 11 ], [ - 10, + 11, 16, 12 ] ], [ [ - 11, + 10, 16, 12 ], [ - 10, + 11, 16, 13 ] @@ -5273,12 +5273,12 @@ ], [ [ - 10, + 9, 16, 11 ], [ - 9, + 10, 16, 12 ] @@ -5477,12 +5477,12 @@ ], [ [ - 8, + 7, 15, 10 ], [ - 7, + 8, 15, 11 ] @@ -5659,12 +5659,12 @@ [ 6, 14, - 11 + 12 ], [ 6, 13, - 12 + 11 ] ], [ @@ -5729,12 +5729,12 @@ ], [ [ - 5, + 6, 13, 13 ], [ - 6, + 5, 13, 12 ] @@ -5803,60 +5803,60 @@ [ 5, 12, - 9 + 8 ], [ 5, 13, - 8 + 9 ] ], [ [ 5, 12, - 10 + 9 ], [ 5, 13, - 9 + 10 ] ], [ [ 5, 12, - 11 + 10 ], [ 5, 13, - 10 + 11 ] ], [ [ 5, 12, - 12 + 11 ], [ 5, 13, - 11 + 12 ] ], [ [ 5, 12, - 13 + 12 ], [ 5, 13, - 12 + 13 ] ], [ @@ -5875,36 +5875,36 @@ [ 5, 11, - 11 + 10 ], [ 5, 12, - 10 + 11 ] ], [ [ 5, 11, - 12 + 11 ], [ 5, 12, - 11 + 12 ] ], [ [ 5, 11, - 13 + 12 ], [ 5, 12, - 12 + 13 ] ], [ @@ -5959,70 +5959,70 @@ [ 5, 10, - 9 + 8 ], [ 5, 11, - 8 + 9 ] ], [ [ 5, 10, - 10 + 9 ], [ 5, 11, - 9 + 10 ] ], [ [ 5, 10, - 11 + 10 ], [ 5, 11, - 10 + 11 ] ], [ [ 5, 10, - 12 + 11 ], [ 5, 11, - 11 + 12 ] ], [ [ 5, 10, - 13 + 12 ], [ 5, 11, - 12 + 13 ] ], [ [ - 6, + 5, 9, 7 ], [ - 5, + 6, 9, 8 ] @@ -6041,12 +6041,12 @@ ], [ [ - 6, + 5, 9, 8 ], [ - 5, + 6, 9, 9 ] @@ -6163,96 +6163,96 @@ [ 6, 8, - 8 + 7 ], [ 6, 9, - 7 + 8 ] ], [ [ 6, 8, - 9 + 8 ], [ 6, 9, - 8 + 9 ] ], [ [ 6, 8, - 10 + 9 ], [ 6, 9, - 9 + 10 ] ], [ [ 6, 8, - 11 + 10 ], [ 6, 9, - 10 + 11 ] ], [ [ 6, 8, - 12 + 11 ], [ 6, 9, - 11 + 12 ] ], [ [ 6, 8, - 13 + 12 ], [ 6, 9, - 12 + 13 ] ], [ [ 7, 7, - 8 + 7 ], [ 7, 8, - 7 + 8 ] ], [ [ 7, 7, - 9 + 8 ], [ 7, 8, - 8 + 9 ] ], [ @@ -6295,12 +6295,12 @@ [ 7, 7, - 10 + 9 ], [ 7, 8, - 9 + 10 ] ], [ @@ -6319,34 +6319,34 @@ [ 7, 7, - 11 + 10 ], [ 7, 8, - 10 + 11 ] ], [ [ 7, 7, - 12 + 11 ], [ 7, 8, - 11 + 12 ] ], [ [ - 7, + 6, 8, 11 ], [ - 6, + 7, 8, 12 ] @@ -6355,22 +6355,22 @@ [ 7, 7, - 13 + 12 ], [ 7, 8, - 12 + 13 ] ], [ [ - 7, + 6, 8, 12 ], [ - 6, + 7, 8, 13 ] @@ -6451,12 +6451,12 @@ [ 8, 6, - 8 + 7 ], [ 8, 7, - 7 + 8 ] ], [ @@ -6485,12 +6485,12 @@ ], [ [ - 8, + 9, 6, 10 ], [ - 9, + 8, 6, 9 ] @@ -6499,60 +6499,60 @@ [ 8, 6, - 9 + 8 ], [ 8, 7, - 8 + 9 ] ], [ [ 8, 6, - 10 + 9 ], [ 8, 7, - 9 + 10 ] ], [ [ 8, 6, - 11 + 10 ], [ 8, 7, - 10 + 11 ] ], [ [ 8, 6, - 12 + 11 ], [ 8, 7, - 11 + 12 ] ], [ [ 8, 6, - 13 + 12 ], [ 8, 7, - 12 + 13 ] ], [ @@ -6593,12 +6593,12 @@ ], [ [ - 9, + 10, 6, 8 ], [ - 10, + 9, 6, 7 ] @@ -6666,48 +6666,48 @@ [ [ 15, - 7, + 8, 13 ], [ 14, - 8, + 7, 13 ] ], [ [ 14, - 6, + 7, 13 ], [ 13, - 7, + 6, 13 ] ], [ [ 15, - 8, + 9, 13 ], [ 14, - 9, + 8, 13 ] ], [ [ 16, - 8, + 9, 13 ], [ 15, - 9, + 8, 13 ] ], @@ -6726,108 +6726,108 @@ [ [ 13, - 6, + 7, 13 ], [ 12, - 7, + 6, 13 ] ], [ [ 16, - 9, + 10, 13 ], [ 15, - 10, + 9, 13 ] ], [ [ 12, - 5, + 6, 13 ], [ 11, - 6, + 5, 13 ] ], [ [ 16, - 10, + 11, 13 ], [ 15, - 11, + 10, 13 ] ], [ [ 16, - 11, + 12, 13 ], [ 15, - 12, + 11, 13 ] ], [ [ 10, - 5, + 6, 13 ], [ 9, - 6, + 5, 13 ] ], [ [ 16, - 12, + 13, 13 ], [ 15, - 13, + 12, 13 ] ], [ [ 9, - 5, + 6, 13 ], [ 8, - 6, + 5, 13 ] ], [ [ 15, - 13, + 14, 13 ], [ 14, - 14, + 13, 13 ] ], @@ -6930,12 +6930,12 @@ [ [ 12, - 16, + 17, 13 ], [ 11, - 17, + 16, 13 ] ], @@ -6966,12 +6966,12 @@ [ [ 5, - 10, + 11, 13 ], [ 4, - 11, + 10, 13 ] ], @@ -7014,60 +7014,60 @@ [ [ 5, - 12, + 13, 13 ], [ 4, - 13, + 12, 13 ] ], [ [ 8, - 15, + 16, 13 ], [ 7, - 16, + 15, 13 ] ], [ [ 7, - 15, + 16, 13 ], [ 6, - 16, + 15, 13 ] ], [ [ 6, - 13, + 14, 13 ], [ 5, - 14, + 13, 13 ] ], [ [ 6, - 14, + 15, 13 ], [ 5, - 15, + 14, 13 ] ], @@ -7159,36 +7159,36 @@ [ 10, 5, - 11 + 10 ], [ 10, 6, - 10 + 11 ] ], [ [ 10, 5, - 12 + 11 ], [ 10, 6, - 11 + 12 ] ], [ [ 10, 5, - 13 + 12 ], [ 10, 6, - 12 + 13 ] ], [ diff --git a/testData/input_examples/conformal.fdtd.json b/testData/input_examples/conformal.fdtd.json index f80af68ec..eaeb15598 100644 --- a/testData/input_examples/conformal.fdtd.json +++ b/testData/input_examples/conformal.fdtd.json @@ -49,13 +49,13 @@ {"id": 2, "type": "node", "coordinateIds": [2]}, {"id": 3, "type": "cell", "name": "pw-box", "intervals": [ [ [-1, -1, 3], [3, 3, 35] ] ]}, {"id": 4, "type": "cell", "name": "square", "intervals": [ [ [0, 0, 5], [2, 2, 5] ] ]}, - {"id": 5, "type": "conformal", "subtype" : "volume", "name": "conformal-box", + {"id": 5, "type": "conformal", "subtype" : "volume", "name": "conformal-box", "intervals" : [[[0,0,5],[2,2,5]]], - "triangles": [ [7, 18, 20], [7, 20, 16], [16, 20, 17], [16, 17, 8], [18, 9, 19], [18, 19,20 ], [20, 19, 10], [20, 10, 17], - [7,11 ,3 ], [16, 11, 3], [16, 4,11 ], [16, 8, 4], - [8,12 ,4 ], [8, 17, 12], [17, 10,6 ], [17, 6, 12], - [9, 5, 14], [9,14 ,19 ], [19, 14, 6], [19,6 ,10 ], - [7,3 ,13 ], [7,13 ,18 ], [18, 13, 5], [18, 5, 9] + "triangles": [ [7, 20, 16], [7, 18, 20], [18, 19, 20], [18, 9, 19], [16, 17, 8], [16, 20,17 ], [20, 10, 17], [20, 19, 10], + [7,11 ,3 ], [7, 16, 11], [9, 5,14 ], [9, 14, 19], + [16,4 ,11 ], [16, 8, 4], [19, 14,6 ], [19, 6, 10], + [7, 13, 18], [7,3 ,13 ], [8, 17, 12], [8,12 ,4 ], + [18,5 ,9 ], [18,13 ,5 ], [17, 10, 6], [17, 6, 12] ] } ] diff --git a/testData/input_examples/conformal_cell_label.fdtd.json b/testData/input_examples/conformal_cell_label.fdtd.json new file mode 100644 index 000000000..53bdc8008 --- /dev/null +++ b/testData/input_examples/conformal_cell_label.fdtd.json @@ -0,0 +1,14 @@ +{ + "mesh": { + "coordinates": [], + "elements": [ + { + "id": 1, + "type": "cell", + "subtype": "volume", + "intervals": [], + "triangles": [] + } + ] + } +} diff --git a/testData/input_examples/mixed_sign_surface_interval.fdtd.json b/testData/input_examples/mixed_sign_surface_interval.fdtd.json new file mode 100644 index 000000000..4528541f4 --- /dev/null +++ b/testData/input_examples/mixed_sign_surface_interval.fdtd.json @@ -0,0 +1,13 @@ +{ + "mesh": { + "coordinates": [], + "elements": [ + { + "id": 1, + "name": "mixed-sign-surface", + "type": "cell", + "intervals": [[[0, 1, 0], [1, 0, 0]]] + } + ] + } +} From b96c732a3499b1dd0ed6e00bea8530a7a9acead6 Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Thu, 13 Aug 2026 12:14:37 +0200 Subject: [PATCH 23/35] Remove mixed sign surface interval test data file from input examples --- src_json_parser/cells.F90 | 19 +- src_json_parser/smbjson.F90 | 29 +- src_main_pub/fdetypes.F90 | 10 +- src_main_pub/preprocess_geom.F90 | 79 +- src_main_pub/timestepping.F90 | 11 +- test/pyWrapper/test_full_system.py | 2 + test/smbjson/smbjson_tests.h | 4 - test/smbjson/test_cells.F90 | 8 - test/smbjson/test_parser.F90 | 20 +- ...mal_impedance_cylinder_conformal.fdtd.json | 21560 ++++++++-------- .../mixed_sign_surface_interval.fdtd.json | 13 - 11 files changed, 10876 insertions(+), 10879 deletions(-) delete mode 100644 testData/input_examples/mixed_sign_surface_interval.fdtd.json diff --git a/src_json_parser/cells.F90 b/src_json_parser/cells.F90 index cd2196f9b..f3eadd7be 100644 --- a/src_json_parser/cells.F90 +++ b/src_json_parser/cells.F90 @@ -1,7 +1,5 @@ module cells_m - use Report_m, only: WarnErrReport - integer, parameter :: DIR_NULL = 0 integer, parameter :: DIR_X = 1 integer, parameter :: DIR_Y = 2 @@ -42,7 +40,6 @@ module cells_m contains procedure :: getType => cell_interval_getType procedure :: getOrientation => cell_interval_getOrientation - procedure :: hasMixedSignOrientation => cell_interval_hasMixedSignOrientation procedure :: getSize => cell_interval_getSize procedure, private :: varyingDirections => cell_interval_varyingDirections end type @@ -95,7 +92,7 @@ elemental function cell_interval_getType(this) result(res) res = this%varyingDirections() end function - impure elemental function cell_interval_getOrientation(this) result(res) + elemental function cell_interval_getOrientation(this) result(res) class(cell_interval_t), intent(in) :: this integer :: res integer :: i @@ -117,12 +114,6 @@ impure elemental function cell_interval_getOrientation(this) result(res) case (CELL_TYPE_SURFEL) block integer, dimension(3) :: diff - if (this%hasMixedSignOrientation()) then - call WarnErrReport('Surface interval has mixed-sign directions; ' // & - 'both varying directions must have the same sign.', .true.) - res = DIR_NULL - return - end if diff = this%end%cell - this%ini%cell do i = DIR_X, DIR_Z if (diff(i) == 0) res = i @@ -135,14 +126,6 @@ impure elemental function cell_interval_getOrientation(this) result(res) end select end function - elemental logical function cell_interval_hasMixedSignOrientation(this) result(res) - class(cell_interval_t), intent(in) :: this - integer, dimension(3) :: diff - - diff = this%end%cell - this%ini%cell - res = this%getType() == CELL_TYPE_SURFEL .and. any(diff > 0) .and. any(diff < 0) - end function - elemental function cell_interval_getSize(this) result(res) class(cell_interval_t), intent(in) :: this integer :: res diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index d061f518a..f87e95681 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -192,12 +192,12 @@ function readProblemDescription(this) result (res) res%conformalRegs = this%readConformalRegions() ! Thin elements - call this%readThinWires(res%tWires, res%sonda) - res%tSlots = this%readThinSlots() - #ifdef CompileWithMTLN res%mtln = this%readMTLN() +#else + call this%readThinWires(res%tWires, res%sonda) #endif + res%tSlots = this%readThinSlots() end function @@ -295,7 +295,6 @@ function readCellIntervals(place, path) result(res) type(json_value), pointer :: intervalsPlace, interval integer :: i, nIntervals real, dimension(:), allocatable :: cellIni, cellEnd - character(len=160) :: error_message logical :: containsInterval call this%core%get(place, path, intervalsPlace, found=containsInterval) @@ -307,24 +306,10 @@ function readCellIntervals(place, path) result(res) allocate(res(nIntervals)) do i = 1, nIntervals call this%core%get_child(intervalsPlace, i, interval) - if (this%core%count(interval) /= 2) then - call WarnErrReport('Cell intervals must contain exactly two three-dimensional endpoints.', .true.) - return - end if cellIni = this%getRealsAt(interval, '(1)') cellEnd = this%getRealsAt(interval, '(2)') - if (size(cellIni) /= 3 .or. size(cellEnd) /= 3) then - call WarnErrReport('Cell interval endpoints must contain exactly three coordinates.', .true.) - return - end if res(i)%ini%cell = cellIni(1:3) res(i)%end%cell = cellEnd(1:3) - if (res(i)%hasMixedSignOrientation()) then - write(error_message, '(A,I0,A)') 'Surface interval ', i, & - ' has mixed-sign directions; both varying directions must have the same sign.' - call WarnErrReport(trim(error_message), .true.) - return - end if end do end function @@ -2905,7 +2890,7 @@ function readMTLN(this) result (mtln_res) end do mtln_res%wireGenerators = readWireGenerators() - mtln_res%probes = readMultiwireProbes() + call readMultiwireProbes(mtln_res%probes) mtln_res%networks = buildNetworks() contains @@ -3839,8 +3824,8 @@ logical function IsGeneratorOnWire(p) end function - function readMultiwireProbes() result(res) - type(probe_t), dimension(:), allocatable :: res + subroutine readMultiwireProbes(res) + type(probe_t), dimension(:), allocatable, intent(out) :: res type(json_value_ptr_t), dimension(:), allocatable :: wire_probes type(json_value), pointer :: probes integer :: i, j, index, n @@ -3903,7 +3888,7 @@ function readMultiwireProbes() result(res) end do end if end do - end function + end subroutine function GetCoordinateFromElemIdNode(object) result (res) type(json_value), pointer, intent(in) :: object diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index 6e1270661..062c1cbff 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -373,6 +373,11 @@ module FDETYPES_m logical :: repetido,multirabo !marca segmentos que aparecen repetidos en un mismo thin wire!los bundles deberan estar thin-wires distintos logical :: orientadoalreves end type oriented_point_t + +#ifdef CompileWithMTLN + type :: Multiwires_t + end type +#endif type :: Wires_t REAL (KIND=RKIND_wires) :: Radius,R,L,C,P_R,P_L,P_C @@ -665,7 +670,10 @@ module FDETYPES_m type (DispersiveParams_t), dimension( : ), pointer :: EDispersive type (DispersiveParams_t), dimension( : ), pointer :: MDispersive type (Anisotropic_t) , dimension( : ), pointer :: Anisotropic - type (Lumped_t) , dimension( : ), pointer :: Lumped + type (Lumped_t) , dimension( : ), pointer :: Lumped +#ifdef CompileWithMTLN + type(Multiwires_t) , dimension( : ), pointer :: Multiwire +#endif ! type (conformal_feature_t), , dimension( : ), pointer :: Conformal type (edge_t), dimension( : ), allocatable :: ConformalEdge type (face_t), dimension( : ), allocatable :: ConformalFace diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index cae69fc2a..7890b4e86 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -12,6 +12,9 @@ MODULE Preprocess_m ! USE Report_m USE NFDETypes_m +#ifdef CompileWithMTLN + use mtln_types_m, only: cable_t, unshielded_multiwire_t +#endif !healer sgg10 USE CreateMatrices_m !typos que leo desde mi FDE @@ -206,6 +209,9 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 +#ifdef CompileWithMTLN + contamedia = contamedia + this%mtln%n_unsh +#endif ! Surface updates need media distinct from volume updates even when their ! geometric ratios are equal. if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then @@ -461,9 +467,10 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%Med%Is%Lossy = .FALSE. sgg%Med%Is%multiport = .FALSE. sgg%Med%Is%multiportpadding = .FALSE. - sgg%Med%Is%AnisMultiport = .FALSE. - sgg%Med%Is%ThinWire = .FALSE. - sgg%Med%Is%SlantedWire = .FALSE. + sgg%Med%Is%AnisMultiport = .FALSE. + sgg%Med%Is%ThinWire = .FALSE. + sgg%Med%Is%Multiwire = .FALSE. + sgg%Med%Is%SlantedWire = .FALSE. sgg%Med%Is%ThinSlot = .FALSE. sgg%Med%Is%PEC = .FALSE. sgg%Med%Is%ConformalPEC = .FALSE. @@ -2592,9 +2599,48 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 end if - - - !reporta el bounding box + +#ifdef CompileWithMTLN + block + class(cable_t), pointer :: ptr + do j = 1, this%mtln%n_sh + this%mtln%n_unsh + ptr => this%mtln%cables(j)%ptr + select type(ptr) + type is(unshielded_multiwire_t) + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%multiwire(1)) + sgg%Med(contamedia)%Priority = prior_TW + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr + sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma + sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur + sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM + sgg%Med(contamedia)%Is%Multiwire = .TRUE. + + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%mtln%cables(j)%ptr%tag) + do k = 1, ptr%n_segments + punto%xi = ptr%segments(k)%x + punto%xe = ptr%segments(k)%x + punto%yi = ptr%segments(k)%y + punto%ye = ptr%segments(k)%y + punto%zi = ptr%segments(k)%z + punto%ze = ptr%segments(k)%z + orientacion = ptr%segments(k)%orientation + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + end select + end do + end block +#endif + + !reporta el bounding box #ifdef CompileWithMPI call MPI_BARRIER(MPI_COMM_WORLD,ierr) @@ -7014,10 +7060,23 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) endif end do endif - end do - - - tama = this%swires%n_sw + end do + +#ifdef CompileWithMTLN + block + class(cable_t), pointer :: ptr + do i = 1, this%mtln%n_unsh + this%mtln%n_sh + ptr => this%mtln%cables(i)%ptr + select type(ptr) + type is(unshielded_multiwire_t) + numertag = numertag + 1 + if (precounting == 1) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag + end select + end do + end block +#endif + + tama = this%swires%n_sw do i=1, tama numertag = numertag + 1 tama2=this%swires%SW(i)%n_swc diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 86cac13fa..be43f3092 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -248,10 +248,13 @@ subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamient this%control%resume_fromold = input%resume_fromold this%control%vtkindex = input%vtkindex this%control%createh5bin = input%createh5bin - this%control%wirecrank = input%wirecrank - this%control%fatalerror = input%fatalerror - - this%control%cfl = input%cfl + this%control%wirecrank = input%wirecrank + this%control%fatalerror = input%fatalerror +#ifdef CompileWithMTLN + this%control%use_mtln_wires = .true. +#endif + + this%control%cfl = input%cfl this%control%attfactorc = input%attfactorc this%control%attfactorw = input%attfactorw this%control%alphamaxpar = input%alphamaxpar diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index 2f3e5d151..06cb1c3bf 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1788,6 +1788,8 @@ def test_current_generators_with_resistance(tmp_path): assert np.allclose(Vend['voltage_0'][-100:-1], 16.666, rtol=0.005) assert np.allclose(Vstart['voltage_0'][-100:-1], -16.666, rtol=0.005) +@no_mtln_skip +@pytest.mark.mtln @pytest.mark.wires @pytest.mark.nodal_source @pytest.mark.probes diff --git a/test/smbjson/smbjson_tests.h b/test/smbjson/smbjson_tests.h index dfb680e6b..abe0623a0 100644 --- a/test/smbjson/smbjson_tests.h +++ b/test/smbjson/smbjson_tests.h @@ -13,7 +13,6 @@ extern "C" int test_parser_ctor(); extern "C" int test_parser_read_mesh(); extern "C" int test_parser_read_conformal_volume(); extern "C" int test_parser_reject_conformal_cell_label(); -extern "C" int test_parser_reject_mixed_sign_surface_interval(); extern "C" int test_read_planewave(); extern "C" int test_read_planewave_empty_elementids(); @@ -53,9 +52,6 @@ TEST(smbjson, parser_ctor) { EXPECT_EQ(0, test_parser_ctor()); } TEST(smbjson, parser_read_mesh) { EXPECT_EQ(0, test_parser_read_mesh()); } TEST(smbjson, parser_read_conf_volume) { EXPECT_EQ(0, test_parser_read_conformal_volume()); } TEST(smbjson, parser_reject_conformal_cell_label) { EXPECT_EQ(0, test_parser_reject_conformal_cell_label()); } -TEST(smbjson, parser_reject_mixed_sign_surface_interval) { - EXPECT_EQ(0, test_parser_reject_mixed_sign_surface_interval()); -} TEST(smbjson, read_planewave) { EXPECT_EQ(0, test_read_planewave()); } TEST(smbjson, read_planewave_empty_elementids) { EXPECT_EQ(0, test_read_planewave_empty_elementids()); } TEST(smbjson, read_dielectricslab) { EXPECT_EQ(0, test_read_dielectricslab()); } diff --git a/test/smbjson/test_cells.F90 b/test/smbjson/test_cells.F90 index 18fc6f33c..02a858ead 100644 --- a/test/smbjson/test_cells.F90 +++ b/test/smbjson/test_cells.F90 @@ -1,7 +1,6 @@ integer function test_cells() bind(C) result(err) use cells_m use smbjson_testingTools - use Report_m, only: isFatalError, resetFatalError implicit none @@ -39,11 +38,4 @@ integer function test_cells() bind(C) result(err) if (interval%getOrientation() /= - DIR_X) err = err + 1 if (interval%getSize() /= 3) err = err + 1 - ! A mixed-sign diagonal does not define an accepted surface orientation. - interval = cell_interval_t(ini=cell_t([5, 4, 2]), end=cell_t([5, 7, 1])) - if (.not. interval%hasMixedSignOrientation()) err = err + 1 - call resetFatalError() - if (interval%getOrientation() /= DIR_NULL) err = err + 1 - if (.not. isFatalError()) err = err + 1 - call resetFatalError() end function diff --git a/test/smbjson/test_parser.F90 b/test/smbjson/test_parser.F90 index 78b750d91..6616b76b2 100644 --- a/test/smbjson/test_parser.F90 +++ b/test/smbjson/test_parser.F90 @@ -79,6 +79,7 @@ integer function test_parser_read_mesh() bind(C) result(err) character(len=*),parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'mtln.fdtd.json' type(parser_t) :: parser type(mesh_t) :: mesh + type(cell_region_t), dimension(:), allocatable :: regions logical :: found type(coordinate_t) :: expected, obtained @@ -152,22 +153,3 @@ integer function test_parser_reject_conformal_cell_label() bind(C) result(err) if (.not. isFatalError()) err = err + 1 call resetFatalError() end function test_parser_reject_conformal_cell_label - -integer function test_parser_reject_mixed_sign_surface_interval() bind(C) result(err) - use smbjson_m - use smbjson_testingTools - use Report_m, only: isFatalError, resetFatalError - implicit none - - character(len=*), parameter :: filename = & - PATH_TO_TEST_DATA//INPUT_EXAMPLES//'mixed_sign_surface_interval.fdtd.json' - type(parser_t) :: parser - type(mesh_t) :: mesh - - err = 0 - call resetFatalError() - parser = parser_t(filename) - mesh = parser%readMesh() - if (.not. isFatalError()) err = err + 1 - call resetFatalError() -end function test_parser_reject_mixed_sign_surface_interval diff --git a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json index 88d375d27..c00c9955e 100755 --- a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json +++ b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_conformal.fdtd.json @@ -1,10782 +1,10782 @@ -{ - "_format": "FDTD Input file", - "general": { - "timeStep": 30.2e-12, - "numberOfSteps": 300000 - }, - "boundary": { - "all": { - "type": "mur" - } - }, - "mesh": { - "grid": { - "numberOfCells": [ - 20, - 20, - 20 - ], - "steps": { - "x": [ - 0.05 - ], - "y": [ - 0.05 - ], - "z": [ - 0.05 - ] - } - }, - "coordinates": [ - { - "id": 1, - "relativePosition": [ - 5.0, - 9.0, - 7.0 - ] - }, - { - "id": 2, - "relativePosition": [ - 5.0, - 8.0, - 7.0 - ] - }, - { - "id": 3, - "relativePosition": [ - 4.5, - 9.0, - 7.0 - ] - }, - { - "id": 4, - "relativePosition": [ - 4.5, - 9.0, - 8.0 - ] - }, - { - "id": 5, - "relativePosition": [ - 5.0, - 8.0, - 8.0 - ] - }, - { - "id": 6, - "relativePosition": [ - 4.5, - 9.0, - 9.0 - ] - }, - { - "id": 7, - "relativePosition": [ - 5.0, - 8.0, - 9.0 - ] - }, - { - "id": 8, - "relativePosition": [ - 4.5, - 9.0, - 10.0 - ] - }, - { - "id": 9, - "relativePosition": [ - 5.0, - 8.0, - 10.0 - ] - }, - { - "id": 10, - "relativePosition": [ - 4.5, - 9.0, - 11.0 - ] - }, - { - "id": 11, - "relativePosition": [ - 5.0, - 8.0, - 11.0 - ] - }, - { - "id": 12, - "relativePosition": [ - 4.5, - 9.0, - 12.0 - ] - }, - { - "id": 13, - "relativePosition": [ - 5.0, - 8.0, - 12.0 - ] - }, - { - "id": 14, - "relativePosition": [ - 4.5, - 9.0, - 13.0 - ] - }, - { - "id": 15, - "relativePosition": [ - 5.0, - 8.0, - 13.0 - ] - }, - { - "id": 16, - "relativePosition": [ - 5.0, - 9.0, - 13.0 - ] - }, - { - "id": 17, - "relativePosition": [ - 5.0, - 10.0, - 7.0 - ] - }, - { - "id": 18, - "relativePosition": [ - 4.2, - 10.0, - 7.0 - ] - }, - { - "id": 19, - "relativePosition": [ - 4.2, - 10.0, - 8.0 - ] - }, - { - "id": 20, - "relativePosition": [ - 4.2, - 10.0, - 9.0 - ] - }, - { - "id": 21, - "relativePosition": [ - 4.2, - 10.0, - 10.0 - ] - }, - { - "id": 22, - "relativePosition": [ - 4.2, - 10.0, - 11.0 - ] - }, - { - "id": 23, - "relativePosition": [ - 4.2, - 10.0, - 12.0 - ] - }, - { - "id": 24, - "relativePosition": [ - 4.2, - 10.0, - 13.0 - ] - }, - { - "id": 25, - "relativePosition": [ - 5.0, - 10.0, - 13.0 - ] - }, - { - "id": 26, - "relativePosition": [ - 5.0, - 11.0, - 7.0 - ] - }, - { - "id": 27, - "relativePosition": [ - 4.2, - 11.0, - 7.0 - ] - }, - { - "id": 28, - "relativePosition": [ - 4.2, - 11.0, - 8.0 - ] - }, - { - "id": 29, - "relativePosition": [ - 4.2, - 11.0, - 9.0 - ] - }, - { - "id": 30, - "relativePosition": [ - 4.2, - 11.0, - 10.0 - ] - }, - { - "id": 31, - "relativePosition": [ - 4.2, - 11.0, - 11.0 - ] - }, - { - "id": 32, - "relativePosition": [ - 4.2, - 11.0, - 12.0 - ] - }, - { - "id": 33, - "relativePosition": [ - 4.2, - 11.0, - 13.0 - ] - }, - { - "id": 34, - "relativePosition": [ - 5.0, - 11.0, - 13.0 - ] - }, - { - "id": 35, - "relativePosition": [ - 5.0, - 12.0, - 7.0 - ] - }, - { - "id": 36, - "relativePosition": [ - 4.35, - 12.0, - 7.0 - ] - }, - { - "id": 37, - "relativePosition": [ - 4.35, - 12.0, - 8.0 - ] - }, - { - "id": 38, - "relativePosition": [ - 4.35, - 12.0, - 9.0 - ] - }, - { - "id": 39, - "relativePosition": [ - 4.35, - 12.0, - 10.0 - ] - }, - { - "id": 40, - "relativePosition": [ - 4.35, - 12.0, - 11.0 - ] - }, - { - "id": 41, - "relativePosition": [ - 4.35, - 12.0, - 12.0 - ] - }, - { - "id": 42, - "relativePosition": [ - 4.35, - 12.0, - 13.0 - ] - }, - { - "id": 43, - "relativePosition": [ - 5.0, - 12.0, - 13.0 - ] - }, - { - "id": 44, - "relativePosition": [ - 4.5, - 13.0, - 7.0 - ] - }, - { - "id": 45, - "relativePosition": [ - 5.0, - 13.0, - 7.0 - ] - }, - { - "id": 46, - "relativePosition": [ - 4.5, - 13.0, - 8.0 - ] - }, - { - "id": 47, - "relativePosition": [ - 4.5, - 13.0, - 9.0 - ] - }, - { - "id": 48, - "relativePosition": [ - 4.5, - 13.0, - 10.0 - ] - }, - { - "id": 49, - "relativePosition": [ - 4.5, - 13.0, - 11.0 - ] - }, - { - "id": 50, - "relativePosition": [ - 4.5, - 13.0, - 12.0 - ] - }, - { - "id": 51, - "relativePosition": [ - 4.5, - 13.0, - 13.0 - ] - }, - { - "id": 52, - "relativePosition": [ - 5.0, - 13.0, - 13.0 - ] - }, - { - "id": 53, - "relativePosition": [ - 5.0, - 14.0, - 7.0 - ] - }, - { - "id": 54, - "relativePosition": [ - 5.0, - 14.0, - 8.0 - ] - }, - { - "id": 55, - "relativePosition": [ - 5.0, - 14.0, - 9.0 - ] - }, - { - "id": 56, - "relativePosition": [ - 5.0, - 14.0, - 10.0 - ] - }, - { - "id": 57, - "relativePosition": [ - 5.0, - 14.0, - 11.0 - ] - }, - { - "id": 58, - "relativePosition": [ - 5.0, - 14.0, - 12.0 - ] - }, - { - "id": 59, - "relativePosition": [ - 5.0, - 14.0, - 13.0 - ] - }, - { - "id": 60, - "relativePosition": [ - 6.0, - 7.0, - 7.0 - ] - }, - { - "id": 61, - "relativePosition": [ - 6.0, - 6.65, - 7.0 - ] - }, - { - "id": 62, - "relativePosition": [ - 5.65, - 7.0, - 7.0 - ] - }, - { - "id": 63, - "relativePosition": [ - 5.65, - 7.0, - 8.0 - ] - }, - { - "id": 64, - "relativePosition": [ - 6.0, - 6.65, - 8.0 - ] - }, - { - "id": 65, - "relativePosition": [ - 5.65, - 7.0, - 9.0 - ] - }, - { - "id": 66, - "relativePosition": [ - 6.0, - 6.65, - 9.0 - ] - }, - { - "id": 67, - "relativePosition": [ - 5.65, - 7.0, - 10.0 - ] - }, - { - "id": 68, - "relativePosition": [ - 6.0, - 6.65, - 10.0 - ] - }, - { - "id": 69, - "relativePosition": [ - 5.65, - 7.0, - 11.0 - ] - }, - { - "id": 70, - "relativePosition": [ - 6.0, - 6.65, - 11.0 - ] - }, - { - "id": 71, - "relativePosition": [ - 5.65, - 7.0, - 12.0 - ] - }, - { - "id": 72, - "relativePosition": [ - 6.0, - 6.65, - 12.0 - ] - }, - { - "id": 73, - "relativePosition": [ - 5.65, - 7.0, - 13.0 - ] - }, - { - "id": 74, - "relativePosition": [ - 6.0, - 6.65, - 13.0 - ] - }, - { - "id": 75, - "relativePosition": [ - 6.0, - 7.0, - 13.0 - ] - }, - { - "id": 76, - "relativePosition": [ - 6.0, - 8.0, - 7.0 - ] - }, - { - "id": 77, - "relativePosition": [ - 6.0, - 8.0, - 13.0 - ] - }, - { - "id": 78, - "relativePosition": [ - 5.65, - 9.0, - 7.0 - ] - }, - { - "id": 79, - "relativePosition": [ - 6.0, - 8.2, - 7.0 - ] - }, - { - "id": 80, - "relativePosition": [ - 6.0, - 8.2, - 8.0 - ] - }, - { - "id": 81, - "relativePosition": [ - 5.65, - 9.0, - 8.0 - ] - }, - { - "id": 82, - "relativePosition": [ - 6.0, - 8.2, - 9.0 - ] - }, - { - "id": 83, - "relativePosition": [ - 5.65, - 9.0, - 9.0 - ] - }, - { - "id": 84, - "relativePosition": [ - 6.0, - 8.2, - 10.0 - ] - }, - { - "id": 85, - "relativePosition": [ - 5.65, - 9.0, - 10.0 - ] - }, - { - "id": 86, - "relativePosition": [ - 6.0, - 8.2, - 11.0 - ] - }, - { - "id": 87, - "relativePosition": [ - 5.65, - 9.0, - 11.0 - ] - }, - { - "id": 88, - "relativePosition": [ - 6.0, - 8.2, - 12.0 - ] - }, - { - "id": 89, - "relativePosition": [ - 5.65, - 9.0, - 12.0 - ] - }, - { - "id": 90, - "relativePosition": [ - 6.0, - 8.2, - 13.0 - ] - }, - { - "id": 91, - "relativePosition": [ - 5.65, - 9.0, - 13.0 - ] - }, - { - "id": 92, - "relativePosition": [ - 5.35, - 10.0, - 7.0 - ] - }, - { - "id": 93, - "relativePosition": [ - 5.35, - 10.0, - 8.0 - ] - }, - { - "id": 94, - "relativePosition": [ - 5.35, - 10.0, - 9.0 - ] - }, - { - "id": 95, - "relativePosition": [ - 5.35, - 10.0, - 10.0 - ] - }, - { - "id": 96, - "relativePosition": [ - 5.35, - 10.0, - 11.0 - ] - }, - { - "id": 97, - "relativePosition": [ - 5.35, - 10.0, - 12.0 - ] - }, - { - "id": 98, - "relativePosition": [ - 5.35, - 10.0, - 13.0 - ] - }, - { - "id": 99, - "relativePosition": [ - 5.2, - 11.0, - 7.0 - ] - }, - { - "id": 100, - "relativePosition": [ - 5.2, - 11.0, - 8.0 - ] - }, - { - "id": 101, - "relativePosition": [ - 5.2, - 11.0, - 9.0 - ] - }, - { - "id": 102, - "relativePosition": [ - 5.2, - 11.0, - 10.0 - ] - }, - { - "id": 103, - "relativePosition": [ - 5.2, - 11.0, - 11.0 - ] - }, - { - "id": 104, - "relativePosition": [ - 5.2, - 11.0, - 12.0 - ] - }, - { - "id": 105, - "relativePosition": [ - 5.2, - 11.0, - 13.0 - ] - }, - { - "id": 106, - "relativePosition": [ - 5.35, - 12.0, - 7.0 - ] - }, - { - "id": 107, - "relativePosition": [ - 5.35, - 12.0, - 8.0 - ] - }, - { - "id": 108, - "relativePosition": [ - 5.35, - 12.0, - 9.0 - ] - }, - { - "id": 109, - "relativePosition": [ - 5.35, - 12.0, - 10.0 - ] - }, - { - "id": 110, - "relativePosition": [ - 5.35, - 12.0, - 11.0 - ] - }, - { - "id": 111, - "relativePosition": [ - 5.35, - 12.0, - 12.0 - ] - }, - { - "id": 112, - "relativePosition": [ - 5.35, - 12.0, - 13.0 - ] - }, - { - "id": 113, - "relativePosition": [ - 5.65, - 13.0, - 7.0 - ] - }, - { - "id": 114, - "relativePosition": [ - 5.65, - 13.0, - 8.0 - ] - }, - { - "id": 115, - "relativePosition": [ - 5.65, - 13.0, - 9.0 - ] - }, - { - "id": 116, - "relativePosition": [ - 5.65, - 13.0, - 10.0 - ] - }, - { - "id": 117, - "relativePosition": [ - 5.65, - 13.0, - 11.0 - ] - }, - { - "id": 118, - "relativePosition": [ - 5.65, - 13.0, - 12.0 - ] - }, - { - "id": 119, - "relativePosition": [ - 5.65, - 13.0, - 13.0 - ] - }, - { - "id": 120, - "relativePosition": [ - 6.0, - 14.0, - 7.0 - ] - }, - { - "id": 121, - "relativePosition": [ - 6.0, - 13.65, - 7.0 - ] - }, - { - "id": 122, - "relativePosition": [ - 6.0, - 13.65, - 8.0 - ] - }, - { - "id": 123, - "relativePosition": [ - 6.0, - 13.65, - 9.0 - ] - }, - { - "id": 124, - "relativePosition": [ - 6.0, - 13.65, - 10.0 - ] - }, - { - "id": 125, - "relativePosition": [ - 6.0, - 13.65, - 11.0 - ] - }, - { - "id": 126, - "relativePosition": [ - 6.0, - 13.65, - 12.0 - ] - }, - { - "id": 127, - "relativePosition": [ - 6.0, - 13.65, - 13.0 - ] - }, - { - "id": 128, - "relativePosition": [ - 6.0, - 14.0, - 13.0 - ] - }, - { - "id": 129, - "relativePosition": [ - 5.8, - 15.0, - 7.0 - ] - }, - { - "id": 130, - "relativePosition": [ - 6.0, - 15.0, - 7.0 - ] - }, - { - "id": 131, - "relativePosition": [ - 5.8, - 15.0, - 8.0 - ] - }, - { - "id": 132, - "relativePosition": [ - 5.8, - 15.0, - 9.0 - ] - }, - { - "id": 133, - "relativePosition": [ - 5.8, - 15.0, - 10.0 - ] - }, - { - "id": 134, - "relativePosition": [ - 5.8, - 15.0, - 11.0 - ] - }, - { - "id": 135, - "relativePosition": [ - 5.8, - 15.0, - 12.0 - ] - }, - { - "id": 136, - "relativePosition": [ - 5.8, - 15.0, - 13.0 - ] - }, - { - "id": 137, - "relativePosition": [ - 6.0, - 15.0, - 13.0 - ] - }, - { - "id": 138, - "relativePosition": [ - 6.0, - 15.2, - 7.0 - ] - }, - { - "id": 139, - "relativePosition": [ - 6.0, - 15.2, - 8.0 - ] - }, - { - "id": 140, - "relativePosition": [ - 6.0, - 15.2, - 9.0 - ] - }, - { - "id": 141, - "relativePosition": [ - 6.0, - 15.2, - 10.0 - ] - }, - { - "id": 142, - "relativePosition": [ - 6.0, - 15.2, - 11.0 - ] - }, - { - "id": 143, - "relativePosition": [ - 6.0, - 15.2, - 12.0 - ] - }, - { - "id": 144, - "relativePosition": [ - 6.0, - 15.2, - 13.0 - ] - }, - { - "id": 145, - "relativePosition": [ - 7.0, - 6.0, - 7.0 - ] - }, - { - "id": 146, - "relativePosition": [ - 7.0, - 5.8, - 7.0 - ] - }, - { - "id": 147, - "relativePosition": [ - 6.8, - 6.0, - 7.0 - ] - }, - { - "id": 148, - "relativePosition": [ - 6.8, - 6.0, - 8.0 - ] - }, - { - "id": 149, - "relativePosition": [ - 7.0, - 5.8, - 8.0 - ] - }, - { - "id": 150, - "relativePosition": [ - 6.8, - 6.0, - 9.0 - ] - }, - { - "id": 151, - "relativePosition": [ - 7.0, - 5.8, - 9.0 - ] - }, - { - "id": 152, - "relativePosition": [ - 6.8, - 6.0, - 10.0 - ] - }, - { - "id": 153, - "relativePosition": [ - 7.0, - 5.8, - 10.0 - ] - }, - { - "id": 154, - "relativePosition": [ - 6.8, - 6.0, - 11.0 - ] - }, - { - "id": 155, - "relativePosition": [ - 7.0, - 5.8, - 11.0 - ] - }, - { - "id": 156, - "relativePosition": [ - 6.8, - 6.0, - 12.0 - ] - }, - { - "id": 157, - "relativePosition": [ - 7.0, - 5.8, - 12.0 - ] - }, - { - "id": 158, - "relativePosition": [ - 6.8, - 6.0, - 13.0 - ] - }, - { - "id": 159, - "relativePosition": [ - 7.0, - 5.8, - 13.0 - ] - }, - { - "id": 160, - "relativePosition": [ - 7.0, - 6.0, - 13.0 - ] - }, - { - "id": 161, - "relativePosition": [ - 7.0, - 7.0, - 7.0 - ] - }, - { - "id": 162, - "relativePosition": [ - 7.0, - 7.0, - 13.0 - ] - }, - { - "id": 163, - "relativePosition": [ - 6.2, - 8.0, - 7.0 - ] - }, - { - "id": 164, - "relativePosition": [ - 7.0, - 7.2, - 7.0 - ] - }, - { - "id": 165, - "relativePosition": [ - 7.0, - 7.2, - 8.0 - ] - }, - { - "id": 166, - "relativePosition": [ - 6.2, - 8.0, - 8.0 - ] - }, - { - "id": 167, - "relativePosition": [ - 7.0, - 7.2, - 9.0 - ] - }, - { - "id": 168, - "relativePosition": [ - 6.2, - 8.0, - 9.0 - ] - }, - { - "id": 169, - "relativePosition": [ - 7.0, - 7.2, - 10.0 - ] - }, - { - "id": 170, - "relativePosition": [ - 6.2, - 8.0, - 10.0 - ] - }, - { - "id": 171, - "relativePosition": [ - 7.0, - 7.2, - 11.0 - ] - }, - { - "id": 172, - "relativePosition": [ - 6.2, - 8.0, - 11.0 - ] - }, - { - "id": 173, - "relativePosition": [ - 7.0, - 7.2, - 12.0 - ] - }, - { - "id": 174, - "relativePosition": [ - 6.2, - 8.0, - 12.0 - ] - }, - { - "id": 175, - "relativePosition": [ - 7.0, - 7.2, - 13.0 - ] - }, - { - "id": 176, - "relativePosition": [ - 6.2, - 8.0, - 13.0 - ] - }, - { - "id": 177, - "relativePosition": [ - 6.2, - 14.0, - 7.0 - ] - }, - { - "id": 178, - "relativePosition": [ - 6.2, - 14.0, - 8.0 - ] - }, - { - "id": 179, - "relativePosition": [ - 6.2, - 14.0, - 9.0 - ] - }, - { - "id": 180, - "relativePosition": [ - 6.2, - 14.0, - 10.0 - ] - }, - { - "id": 181, - "relativePosition": [ - 6.2, - 14.0, - 11.0 - ] - }, - { - "id": 182, - "relativePosition": [ - 6.2, - 14.0, - 12.0 - ] - }, - { - "id": 183, - "relativePosition": [ - 6.2, - 14.0, - 13.0 - ] - }, - { - "id": 184, - "relativePosition": [ - 7.0, - 15.0, - 7.0 - ] - }, - { - "id": 185, - "relativePosition": [ - 7.0, - 14.8, - 7.0 - ] - }, - { - "id": 186, - "relativePosition": [ - 7.0, - 14.8, - 8.0 - ] - }, - { - "id": 187, - "relativePosition": [ - 7.0, - 14.8, - 9.0 - ] - }, - { - "id": 188, - "relativePosition": [ - 7.0, - 14.8, - 10.0 - ] - }, - { - "id": 189, - "relativePosition": [ - 7.0, - 14.8, - 11.0 - ] - }, - { - "id": 190, - "relativePosition": [ - 7.0, - 14.8, - 12.0 - ] - }, - { - "id": 191, - "relativePosition": [ - 7.0, - 14.8, - 13.0 - ] - }, - { - "id": 192, - "relativePosition": [ - 7.0, - 15.0, - 13.0 - ] - }, - { - "id": 193, - "relativePosition": [ - 7.0, - 16.0, - 7.0 - ] - }, - { - "id": 194, - "relativePosition": [ - 7.0, - 16.0, - 8.0 - ] - }, - { - "id": 195, - "relativePosition": [ - 7.0, - 16.0, - 9.0 - ] - }, - { - "id": 196, - "relativePosition": [ - 7.0, - 16.0, - 10.0 - ] - }, - { - "id": 197, - "relativePosition": [ - 7.0, - 16.0, - 11.0 - ] - }, - { - "id": 198, - "relativePosition": [ - 7.0, - 16.0, - 12.0 - ] - }, - { - "id": 199, - "relativePosition": [ - 7.0, - 16.0, - 13.0 - ] - }, - { - "id": 200, - "relativePosition": [ - 8.0, - 6.0, - 7.0 - ] - }, - { - "id": 201, - "relativePosition": [ - 8.0, - 5.35, - 7.0 - ] - }, - { - "id": 202, - "relativePosition": [ - 8.0, - 5.35, - 8.0 - ] - }, - { - "id": 203, - "relativePosition": [ - 8.0, - 5.35, - 9.0 - ] - }, - { - "id": 204, - "relativePosition": [ - 8.0, - 5.35, - 10.0 - ] - }, - { - "id": 205, - "relativePosition": [ - 8.0, - 5.35, - 11.0 - ] - }, - { - "id": 206, - "relativePosition": [ - 8.0, - 5.35, - 12.0 - ] - }, - { - "id": 207, - "relativePosition": [ - 8.0, - 5.35, - 13.0 - ] - }, - { - "id": 208, - "relativePosition": [ - 8.0, - 6.0, - 13.0 - ] - }, - { - "id": 209, - "relativePosition": [ - 8.0, - 6.5, - 7.0 - ] - }, - { - "id": 210, - "relativePosition": [ - 7.2, - 7.0, - 7.0 - ] - }, - { - "id": 211, - "relativePosition": [ - 8.0, - 6.5, - 8.0 - ] - }, - { - "id": 212, - "relativePosition": [ - 7.2, - 7.0, - 8.0 - ] - }, - { - "id": 213, - "relativePosition": [ - 8.0, - 6.5, - 9.0 - ] - }, - { - "id": 214, - "relativePosition": [ - 7.2, - 7.0, - 9.0 - ] - }, - { - "id": 215, - "relativePosition": [ - 8.0, - 6.5, - 10.0 - ] - }, - { - "id": 216, - "relativePosition": [ - 7.2, - 7.0, - 10.0 - ] - }, - { - "id": 217, - "relativePosition": [ - 8.0, - 6.5, - 11.0 - ] - }, - { - "id": 218, - "relativePosition": [ - 7.2, - 7.0, - 11.0 - ] - }, - { - "id": 219, - "relativePosition": [ - 8.0, - 6.5, - 12.0 - ] - }, - { - "id": 220, - "relativePosition": [ - 7.2, - 7.0, - 12.0 - ] - }, - { - "id": 221, - "relativePosition": [ - 8.0, - 6.5, - 13.0 - ] - }, - { - "id": 222, - "relativePosition": [ - 7.2, - 7.0, - 13.0 - ] - }, - { - "id": 223, - "relativePosition": [ - 7.35, - 15.0, - 7.0 - ] - }, - { - "id": 224, - "relativePosition": [ - 7.35, - 15.0, - 8.0 - ] - }, - { - "id": 225, - "relativePosition": [ - 7.35, - 15.0, - 9.0 - ] - }, - { - "id": 226, - "relativePosition": [ - 7.35, - 15.0, - 10.0 - ] - }, - { - "id": 227, - "relativePosition": [ - 7.35, - 15.0, - 11.0 - ] - }, - { - "id": 228, - "relativePosition": [ - 7.35, - 15.0, - 12.0 - ] - }, - { - "id": 229, - "relativePosition": [ - 7.35, - 15.0, - 13.0 - ] - }, - { - "id": 230, - "relativePosition": [ - 8.0, - 16.0, - 7.0 - ] - }, - { - "id": 231, - "relativePosition": [ - 8.0, - 15.35, - 7.0 - ] - }, - { - "id": 232, - "relativePosition": [ - 8.0, - 15.35, - 8.0 - ] - }, - { - "id": 233, - "relativePosition": [ - 8.0, - 15.35, - 9.0 - ] - }, - { - "id": 234, - "relativePosition": [ - 8.0, - 15.35, - 10.0 - ] - }, - { - "id": 235, - "relativePosition": [ - 8.0, - 15.35, - 11.0 - ] - }, - { - "id": 236, - "relativePosition": [ - 8.0, - 15.35, - 12.0 - ] - }, - { - "id": 237, - "relativePosition": [ - 8.0, - 15.35, - 13.0 - ] - }, - { - "id": 238, - "relativePosition": [ - 8.0, - 16.0, - 13.0 - ] - }, - { - "id": 239, - "relativePosition": [ - 8.0, - 16.5, - 7.0 - ] - }, - { - "id": 240, - "relativePosition": [ - 8.0, - 16.5, - 8.0 - ] - }, - { - "id": 241, - "relativePosition": [ - 8.0, - 16.5, - 9.0 - ] - }, - { - "id": 242, - "relativePosition": [ - 8.0, - 16.5, - 10.0 - ] - }, - { - "id": 243, - "relativePosition": [ - 8.0, - 16.5, - 11.0 - ] - }, - { - "id": 244, - "relativePosition": [ - 8.0, - 16.5, - 12.0 - ] - }, - { - "id": 245, - "relativePosition": [ - 8.0, - 16.5, - 13.0 - ] - }, - { - "id": 246, - "relativePosition": [ - 9.0, - 6.0, - 7.0 - ] - }, - { - "id": 247, - "relativePosition": [ - 9.0, - 5.0, - 7.0 - ] - }, - { - "id": 248, - "relativePosition": [ - 9.0, - 5.0, - 8.0 - ] - }, - { - "id": 249, - "relativePosition": [ - 9.0, - 5.0, - 9.0 - ] - }, - { - "id": 250, - "relativePosition": [ - 9.0, - 5.0, - 10.0 - ] - }, - { - "id": 251, - "relativePosition": [ - 9.0, - 5.0, - 11.0 - ] - }, - { - "id": 252, - "relativePosition": [ - 9.0, - 5.0, - 12.0 - ] - }, - { - "id": 253, - "relativePosition": [ - 9.0, - 5.0, - 13.0 - ] - }, - { - "id": 254, - "relativePosition": [ - 9.0, - 6.0, - 13.0 - ] - }, - { - "id": 255, - "relativePosition": [ - 9.0, - 6.0, - 8.0 - ] - }, - { - "id": 256, - "relativePosition": [ - 9.0, - 6.0, - 9.0 - ] - }, - { - "id": 257, - "relativePosition": [ - 9.0, - 6.0, - 10.0 - ] - }, - { - "id": 258, - "relativePosition": [ - 9.0, - 6.0, - 11.0 - ] - }, - { - "id": 259, - "relativePosition": [ - 9.0, - 6.0, - 12.0 - ] - }, - { - "id": 260, - "relativePosition": [ - 9.0, - 16.0, - 7.0 - ] - }, - { - "id": 261, - "relativePosition": [ - 9.0, - 15.8, - 7.0 - ] - }, - { - "id": 262, - "relativePosition": [ - 9.0, - 15.8, - 8.0 - ] - }, - { - "id": 263, - "relativePosition": [ - 9.0, - 15.8, - 9.0 - ] - }, - { - "id": 264, - "relativePosition": [ - 9.0, - 15.8, - 10.0 - ] - }, - { - "id": 265, - "relativePosition": [ - 9.0, - 15.8, - 11.0 - ] - }, - { - "id": 266, - "relativePosition": [ - 9.0, - 15.8, - 12.0 - ] - }, - { - "id": 267, - "relativePosition": [ - 9.0, - 15.8, - 13.0 - ] - }, - { - "id": 268, - "relativePosition": [ - 9.0, - 16.0, - 13.0 - ] - }, - { - "id": 269, - "relativePosition": [ - 9.0, - 16.8, - 7.0 - ] - }, - { - "id": 270, - "relativePosition": [ - 9.0, - 16.8, - 8.0 - ] - }, - { - "id": 271, - "relativePosition": [ - 9.0, - 16.8, - 9.0 - ] - }, - { - "id": 272, - "relativePosition": [ - 9.0, - 16.8, - 10.0 - ] - }, - { - "id": 273, - "relativePosition": [ - 9.0, - 16.8, - 11.0 - ] - }, - { - "id": 274, - "relativePosition": [ - 9.0, - 16.8, - 12.0 - ] - }, - { - "id": 275, - "relativePosition": [ - 9.0, - 16.8, - 13.0 - ] - }, - { - "id": 276, - "relativePosition": [ - 10.0, - 16.0, - 7.0 - ] - }, - { - "id": 277, - "relativePosition": [ - 10.0, - 15.8, - 7.0 - ] - }, - { - "id": 278, - "relativePosition": [ - 10.0, - 15.8, - 8.0 - ] - }, - { - "id": 279, - "relativePosition": [ - 10.0, - 15.8, - 9.0 - ] - }, - { - "id": 280, - "relativePosition": [ - 10.0, - 15.8, - 10.0 - ] - }, - { - "id": 281, - "relativePosition": [ - 10.0, - 15.8, - 11.0 - ] - }, - { - "id": 282, - "relativePosition": [ - 10.0, - 15.8, - 12.0 - ] - }, - { - "id": 283, - "relativePosition": [ - 10.0, - 15.8, - 13.0 - ] - }, - { - "id": 284, - "relativePosition": [ - 10.0, - 16.0, - 13.0 - ] - }, - { - "id": 285, - "relativePosition": [ - 10.0, - 16.8, - 7.0 - ] - }, - { - "id": 286, - "relativePosition": [ - 10.0, - 16.8, - 8.0 - ] - }, - { - "id": 287, - "relativePosition": [ - 10.0, - 16.8, - 9.0 - ] - }, - { - "id": 288, - "relativePosition": [ - 10.0, - 16.8, - 10.0 - ] - }, - { - "id": 289, - "relativePosition": [ - 10.0, - 16.8, - 11.0 - ] - }, - { - "id": 290, - "relativePosition": [ - 10.0, - 16.8, - 12.0 - ] - }, - { - "id": 291, - "relativePosition": [ - 10.0, - 16.8, - 13.0 - ] - }, - { - "id": 292, - "relativePosition": [ - 11.0, - 16.0, - 7.0 - ] - }, - { - "id": 293, - "relativePosition": [ - 11.0, - 15.8, - 7.0 - ] - }, - { - "id": 294, - "relativePosition": [ - 11.0, - 15.8, - 8.0 - ] - }, - { - "id": 295, - "relativePosition": [ - 11.0, - 15.8, - 9.0 - ] - }, - { - "id": 296, - "relativePosition": [ - 11.0, - 15.8, - 10.0 - ] - }, - { - "id": 297, - "relativePosition": [ - 11.0, - 15.8, - 11.0 - ] - }, - { - "id": 298, - "relativePosition": [ - 11.0, - 15.8, - 12.0 - ] - }, - { - "id": 299, - "relativePosition": [ - 11.0, - 15.8, - 13.0 - ] - }, - { - "id": 300, - "relativePosition": [ - 11.0, - 16.0, - 13.0 - ] - }, - { - "id": 301, - "relativePosition": [ - 11.0, - 16.8, - 7.0 - ] - }, - { - "id": 302, - "relativePosition": [ - 11.0, - 16.8, - 8.0 - ] - }, - { - "id": 303, - "relativePosition": [ - 11.0, - 16.8, - 9.0 - ] - }, - { - "id": 304, - "relativePosition": [ - 11.0, - 16.8, - 10.0 - ] - }, - { - "id": 305, - "relativePosition": [ - 11.0, - 16.8, - 11.0 - ] - }, - { - "id": 306, - "relativePosition": [ - 11.0, - 16.8, - 12.0 - ] - }, - { - "id": 307, - "relativePosition": [ - 11.0, - 16.8, - 13.0 - ] - }, - { - "id": 308, - "relativePosition": [ - 12.0, - 16.0, - 7.0 - ] - }, - { - "id": 309, - "relativePosition": [ - 12.0, - 15.5, - 7.0 - ] - }, - { - "id": 310, - "relativePosition": [ - 12.0, - 15.5, - 8.0 - ] - }, - { - "id": 311, - "relativePosition": [ - 12.0, - 15.5, - 9.0 - ] - }, - { - "id": 312, - "relativePosition": [ - 12.0, - 15.5, - 10.0 - ] - }, - { - "id": 313, - "relativePosition": [ - 12.0, - 15.5, - 11.0 - ] - }, - { - "id": 314, - "relativePosition": [ - 12.0, - 15.5, - 12.0 - ] - }, - { - "id": 315, - "relativePosition": [ - 12.0, - 15.5, - 13.0 - ] - }, - { - "id": 316, - "relativePosition": [ - 12.0, - 16.0, - 13.0 - ] - }, - { - "id": 317, - "relativePosition": [ - 12.0, - 16.5, - 7.0 - ] - }, - { - "id": 318, - "relativePosition": [ - 12.0, - 16.5, - 8.0 - ] - }, - { - "id": 319, - "relativePosition": [ - 12.0, - 16.5, - 9.0 - ] - }, - { - "id": 320, - "relativePosition": [ - 12.0, - 16.5, - 10.0 - ] - }, - { - "id": 321, - "relativePosition": [ - 12.0, - 16.5, - 11.0 - ] - }, - { - "id": 322, - "relativePosition": [ - 12.0, - 16.5, - 12.0 - ] - }, - { - "id": 323, - "relativePosition": [ - 12.0, - 16.5, - 13.0 - ] - }, - { - "id": 324, - "relativePosition": [ - 13.0, - 6.0, - 7.0 - ] - }, - { - "id": 325, - "relativePosition": [ - 13.0, - 5.8, - 7.0 - ] - }, - { - "id": 326, - "relativePosition": [ - 12.0, - 5.0, - 7.0 - ] - }, - { - "id": 327, - "relativePosition": [ - 12.0, - 6.0, - 7.0 - ] - }, - { - "id": 328, - "relativePosition": [ - 13.0, - 5.8, - 8.0 - ] - }, - { - "id": 329, - "relativePosition": [ - 12.0, - 5.0, - 8.0 - ] - }, - { - "id": 330, - "relativePosition": [ - 13.0, - 5.8, - 9.0 - ] - }, - { - "id": 331, - "relativePosition": [ - 12.0, - 5.0, - 9.0 - ] - }, - { - "id": 332, - "relativePosition": [ - 13.0, - 5.8, - 10.0 - ] - }, - { - "id": 333, - "relativePosition": [ - 12.0, - 5.0, - 10.0 - ] - }, - { - "id": 334, - "relativePosition": [ - 13.0, - 5.8, - 11.0 - ] - }, - { - "id": 335, - "relativePosition": [ - 12.0, - 5.0, - 11.0 - ] - }, - { - "id": 336, - "relativePosition": [ - 13.0, - 5.8, - 12.0 - ] - }, - { - "id": 337, - "relativePosition": [ - 12.0, - 5.0, - 12.0 - ] - }, - { - "id": 338, - "relativePosition": [ - 13.0, - 5.8, - 13.0 - ] - }, - { - "id": 339, - "relativePosition": [ - 12.0, - 5.0, - 13.0 - ] - }, - { - "id": 340, - "relativePosition": [ - 13.0, - 6.0, - 13.0 - ] - }, - { - "id": 341, - "relativePosition": [ - 12.0, - 6.0, - 13.0 - ] - }, - { - "id": 342, - "relativePosition": [ - 13.0, - 7.0, - 7.0 - ] - }, - { - "id": 343, - "relativePosition": [ - 12.0, - 6.0, - 8.0 - ] - }, - { - "id": 344, - "relativePosition": [ - 13.0, - 7.0, - 8.0 - ] - }, - { - "id": 345, - "relativePosition": [ - 12.0, - 6.0, - 9.0 - ] - }, - { - "id": 346, - "relativePosition": [ - 13.0, - 7.0, - 9.0 - ] - }, - { - "id": 347, - "relativePosition": [ - 12.0, - 6.0, - 10.0 - ] - }, - { - "id": 348, - "relativePosition": [ - 13.0, - 7.0, - 10.0 - ] - }, - { - "id": 349, - "relativePosition": [ - 12.0, - 6.0, - 11.0 - ] - }, - { - "id": 350, - "relativePosition": [ - 13.0, - 7.0, - 11.0 - ] - }, - { - "id": 351, - "relativePosition": [ - 12.0, - 6.0, - 12.0 - ] - }, - { - "id": 352, - "relativePosition": [ - 13.0, - 7.0, - 12.0 - ] - }, - { - "id": 353, - "relativePosition": [ - 13.0, - 7.0, - 13.0 - ] - }, - { - "id": 354, - "relativePosition": [ - 13.0, - 16.0, - 7.0 - ] - }, - { - "id": 355, - "relativePosition": [ - 13.0, - 15.0, - 7.0 - ] - }, - { - "id": 356, - "relativePosition": [ - 13.0, - 15.0, - 8.0 - ] - }, - { - "id": 357, - "relativePosition": [ - 13.0, - 15.0, - 9.0 - ] - }, - { - "id": 358, - "relativePosition": [ - 13.0, - 15.0, - 10.0 - ] - }, - { - "id": 359, - "relativePosition": [ - 13.0, - 15.0, - 11.0 - ] - }, - { - "id": 360, - "relativePosition": [ - 13.0, - 15.0, - 12.0 - ] - }, - { - "id": 361, - "relativePosition": [ - 13.0, - 15.0, - 13.0 - ] - }, - { - "id": 362, - "relativePosition": [ - 13.0, - 16.0, - 13.0 - ] - }, - { - "id": 363, - "relativePosition": [ - 13.0, - 16.2, - 7.0 - ] - }, - { - "id": 364, - "relativePosition": [ - 13.0, - 16.2, - 8.0 - ] - }, - { - "id": 365, - "relativePosition": [ - 13.0, - 16.2, - 9.0 - ] - }, - { - "id": 366, - "relativePosition": [ - 13.0, - 16.2, - 10.0 - ] - }, - { - "id": 367, - "relativePosition": [ - 13.0, - 16.2, - 11.0 - ] - }, - { - "id": 368, - "relativePosition": [ - 13.0, - 16.2, - 12.0 - ] - }, - { - "id": 369, - "relativePosition": [ - 13.0, - 16.2, - 13.0 - ] - }, - { - "id": 370, - "relativePosition": [ - 13.35, - 6.0, - 7.0 - ] - }, - { - "id": 371, - "relativePosition": [ - 13.35, - 6.0, - 8.0 - ] - }, - { - "id": 372, - "relativePosition": [ - 13.35, - 6.0, - 9.0 - ] - }, - { - "id": 373, - "relativePosition": [ - 13.35, - 6.0, - 10.0 - ] - }, - { - "id": 374, - "relativePosition": [ - 13.35, - 6.0, - 11.0 - ] - }, - { - "id": 375, - "relativePosition": [ - 13.35, - 6.0, - 12.0 - ] - }, - { - "id": 376, - "relativePosition": [ - 13.35, - 6.0, - 13.0 - ] - }, - { - "id": 377, - "relativePosition": [ - 14.0, - 7.0, - 7.0 - ] - }, - { - "id": 378, - "relativePosition": [ - 14.0, - 6.5, - 7.0 - ] - }, - { - "id": 379, - "relativePosition": [ - 13.2, - 7.0, - 7.0 - ] - }, - { - "id": 380, - "relativePosition": [ - 14.0, - 6.5, - 8.0 - ] - }, - { - "id": 381, - "relativePosition": [ - 13.2, - 7.0, - 8.0 - ] - }, - { - "id": 382, - "relativePosition": [ - 14.0, - 6.5, - 9.0 - ] - }, - { - "id": 383, - "relativePosition": [ - 13.2, - 7.0, - 9.0 - ] - }, - { - "id": 384, - "relativePosition": [ - 14.0, - 6.5, - 10.0 - ] - }, - { - "id": 385, - "relativePosition": [ - 13.2, - 7.0, - 10.0 - ] - }, - { - "id": 386, - "relativePosition": [ - 14.0, - 6.5, - 11.0 - ] - }, - { - "id": 387, - "relativePosition": [ - 13.2, - 7.0, - 11.0 - ] - }, - { - "id": 388, - "relativePosition": [ - 14.0, - 6.5, - 12.0 - ] - }, - { - "id": 389, - "relativePosition": [ - 13.2, - 7.0, - 12.0 - ] - }, - { - "id": 390, - "relativePosition": [ - 14.0, - 6.5, - 13.0 - ] - }, - { - "id": 391, - "relativePosition": [ - 13.2, - 7.0, - 13.0 - ] - }, - { - "id": 392, - "relativePosition": [ - 14.0, - 7.0, - 13.0 - ] - }, - { - "id": 393, - "relativePosition": [ - 14.0, - 7.8, - 7.0 - ] - }, - { - "id": 394, - "relativePosition": [ - 14.0, - 7.8, - 8.0 - ] - }, - { - "id": 395, - "relativePosition": [ - 14.0, - 8.0, - 7.0 - ] - }, - { - "id": 396, - "relativePosition": [ - 14.0, - 8.0, - 8.0 - ] - }, - { - "id": 397, - "relativePosition": [ - 14.0, - 7.8, - 9.0 - ] - }, - { - "id": 398, - "relativePosition": [ - 14.0, - 8.0, - 9.0 - ] - }, - { - "id": 399, - "relativePosition": [ - 14.0, - 7.8, - 10.0 - ] - }, - { - "id": 400, - "relativePosition": [ - 14.0, - 8.0, - 10.0 - ] - }, - { - "id": 401, - "relativePosition": [ - 14.0, - 7.8, - 11.0 - ] - }, - { - "id": 402, - "relativePosition": [ - 14.0, - 8.0, - 11.0 - ] - }, - { - "id": 403, - "relativePosition": [ - 14.0, - 7.8, - 12.0 - ] - }, - { - "id": 404, - "relativePosition": [ - 14.0, - 8.0, - 12.0 - ] - }, - { - "id": 405, - "relativePosition": [ - 14.0, - 7.8, - 13.0 - ] - }, - { - "id": 406, - "relativePosition": [ - 14.0, - 8.0, - 13.0 - ] - }, - { - "id": 407, - "relativePosition": [ - 14.0, - 15.0, - 7.0 - ] - }, - { - "id": 408, - "relativePosition": [ - 14.0, - 14.0, - 7.0 - ] - }, - { - "id": 409, - "relativePosition": [ - 14.0, - 14.0, - 8.0 - ] - }, - { - "id": 410, - "relativePosition": [ - 14.0, - 14.0, - 9.0 - ] - }, - { - "id": 411, - "relativePosition": [ - 14.0, - 14.0, - 10.0 - ] - }, - { - "id": 412, - "relativePosition": [ - 14.0, - 14.0, - 11.0 - ] - }, - { - "id": 413, - "relativePosition": [ - 14.0, - 14.0, - 12.0 - ] - }, - { - "id": 414, - "relativePosition": [ - 14.0, - 14.0, - 13.0 - ] - }, - { - "id": 415, - "relativePosition": [ - 14.0, - 15.0, - 13.0 - ] - }, - { - "id": 416, - "relativePosition": [ - 13.2, - 16.0, - 7.0 - ] - }, - { - "id": 417, - "relativePosition": [ - 14.0, - 15.5, - 7.0 - ] - }, - { - "id": 418, - "relativePosition": [ - 14.0, - 15.5, - 8.0 - ] - }, - { - "id": 419, - "relativePosition": [ - 13.2, - 16.0, - 8.0 - ] - }, - { - "id": 420, - "relativePosition": [ - 14.0, - 15.5, - 9.0 - ] - }, - { - "id": 421, - "relativePosition": [ - 13.2, - 16.0, - 9.0 - ] - }, - { - "id": 422, - "relativePosition": [ - 14.0, - 15.5, - 10.0 - ] - }, - { - "id": 423, - "relativePosition": [ - 13.2, - 16.0, - 10.0 - ] - }, - { - "id": 424, - "relativePosition": [ - 14.0, - 15.5, - 11.0 - ] - }, - { - "id": 425, - "relativePosition": [ - 13.2, - 16.0, - 11.0 - ] - }, - { - "id": 426, - "relativePosition": [ - 14.0, - 15.5, - 12.0 - ] - }, - { - "id": 427, - "relativePosition": [ - 13.2, - 16.0, - 12.0 - ] - }, - { - "id": 428, - "relativePosition": [ - 14.0, - 15.5, - 13.0 - ] - }, - { - "id": 429, - "relativePosition": [ - 13.2, - 16.0, - 13.0 - ] - }, - { - "id": 430, - "relativePosition": [ - 14.5, - 7.0, - 7.0 - ] - }, - { - "id": 431, - "relativePosition": [ - 14.5, - 7.0, - 8.0 - ] - }, - { - "id": 432, - "relativePosition": [ - 14.5, - 7.0, - 9.0 - ] - }, - { - "id": 433, - "relativePosition": [ - 14.5, - 7.0, - 10.0 - ] - }, - { - "id": 434, - "relativePosition": [ - 14.5, - 7.0, - 11.0 - ] - }, - { - "id": 435, - "relativePosition": [ - 14.5, - 7.0, - 12.0 - ] - }, - { - "id": 436, - "relativePosition": [ - 14.5, - 7.0, - 13.0 - ] - }, - { - "id": 437, - "relativePosition": [ - 15.0, - 8.0, - 7.0 - ] - }, - { - "id": 438, - "relativePosition": [ - 15.0, - 7.5, - 7.0 - ] - }, - { - "id": 439, - "relativePosition": [ - 15.0, - 7.5, - 8.0 - ] - }, - { - "id": 440, - "relativePosition": [ - 15.0, - 7.5, - 9.0 - ] - }, - { - "id": 441, - "relativePosition": [ - 15.0, - 7.5, - 10.0 - ] - }, - { - "id": 442, - "relativePosition": [ - 15.0, - 7.5, - 11.0 - ] - }, - { - "id": 443, - "relativePosition": [ - 15.0, - 7.5, - 12.0 - ] - }, - { - "id": 444, - "relativePosition": [ - 15.0, - 7.5, - 13.0 - ] - }, - { - "id": 445, - "relativePosition": [ - 15.0, - 8.0, - 13.0 - ] - }, - { - "id": 446, - "relativePosition": [ - 14.65, - 9.0, - 7.0 - ] - }, - { - "id": 447, - "relativePosition": [ - 15.0, - 9.0, - 7.0 - ] - }, - { - "id": 448, - "relativePosition": [ - 14.65, - 9.0, - 8.0 - ] - }, - { - "id": 449, - "relativePosition": [ - 14.65, - 9.0, - 9.0 - ] - }, - { - "id": 450, - "relativePosition": [ - 14.65, - 9.0, - 10.0 - ] - }, - { - "id": 451, - "relativePosition": [ - 14.65, - 9.0, - 11.0 - ] - }, - { - "id": 452, - "relativePosition": [ - 14.65, - 9.0, - 12.0 - ] - }, - { - "id": 453, - "relativePosition": [ - 14.65, - 9.0, - 13.0 - ] - }, - { - "id": 454, - "relativePosition": [ - 15.0, - 9.0, - 13.0 - ] - }, - { - "id": 455, - "relativePosition": [ - 15.0, - 10.0, - 7.0 - ] - }, - { - "id": 456, - "relativePosition": [ - 15.0, - 10.0, - 8.0 - ] - }, - { - "id": 457, - "relativePosition": [ - 15.0, - 10.0, - 9.0 - ] - }, - { - "id": 458, - "relativePosition": [ - 15.0, - 10.0, - 10.0 - ] - }, - { - "id": 459, - "relativePosition": [ - 15.0, - 10.0, - 11.0 - ] - }, - { - "id": 460, - "relativePosition": [ - 15.0, - 10.0, - 12.0 - ] - }, - { - "id": 461, - "relativePosition": [ - 15.0, - 10.0, - 13.0 - ] - }, - { - "id": 462, - "relativePosition": [ - 15.0, - 10.2, - 7.0 - ] - }, - { - "id": 463, - "relativePosition": [ - 15.0, - 10.2, - 8.0 - ] - }, - { - "id": 464, - "relativePosition": [ - 15.0, - 11.0, - 8.0 - ] - }, - { - "id": 465, - "relativePosition": [ - 15.0, - 11.0, - 7.0 - ] - }, - { - "id": 466, - "relativePosition": [ - 15.0, - 10.2, - 9.0 - ] - }, - { - "id": 467, - "relativePosition": [ - 15.0, - 11.0, - 9.0 - ] - }, - { - "id": 468, - "relativePosition": [ - 15.0, - 10.2, - 10.0 - ] - }, - { - "id": 469, - "relativePosition": [ - 15.0, - 11.0, - 10.0 - ] - }, - { - "id": 470, - "relativePosition": [ - 15.0, - 10.2, - 11.0 - ] - }, - { - "id": 471, - "relativePosition": [ - 15.0, - 11.0, - 11.0 - ] - }, - { - "id": 472, - "relativePosition": [ - 15.0, - 10.2, - 12.0 - ] - }, - { - "id": 473, - "relativePosition": [ - 15.0, - 11.0, - 12.0 - ] - }, - { - "id": 474, - "relativePosition": [ - 15.0, - 10.2, - 13.0 - ] - }, - { - "id": 475, - "relativePosition": [ - 15.0, - 11.0, - 13.0 - ] - }, - { - "id": 476, - "relativePosition": [ - 15.0, - 11.65, - 8.0 - ] - }, - { - "id": 477, - "relativePosition": [ - 15.0, - 11.65, - 7.0 - ] - }, - { - "id": 478, - "relativePosition": [ - 15.0, - 12.0, - 8.0 - ] - }, - { - "id": 479, - "relativePosition": [ - 15.0, - 12.0, - 7.0 - ] - }, - { - "id": 480, - "relativePosition": [ - 15.0, - 11.65, - 9.0 - ] - }, - { - "id": 481, - "relativePosition": [ - 15.0, - 12.0, - 9.0 - ] - }, - { - "id": 482, - "relativePosition": [ - 15.0, - 11.65, - 10.0 - ] - }, - { - "id": 483, - "relativePosition": [ - 15.0, - 12.0, - 10.0 - ] - }, - { - "id": 484, - "relativePosition": [ - 15.0, - 11.65, - 11.0 - ] - }, - { - "id": 485, - "relativePosition": [ - 15.0, - 12.0, - 11.0 - ] - }, - { - "id": 486, - "relativePosition": [ - 15.0, - 11.65, - 12.0 - ] - }, - { - "id": 487, - "relativePosition": [ - 15.0, - 12.0, - 12.0 - ] - }, - { - "id": 488, - "relativePosition": [ - 15.0, - 11.65, - 13.0 - ] - }, - { - "id": 489, - "relativePosition": [ - 15.0, - 12.0, - 13.0 - ] - }, - { - "id": 490, - "relativePosition": [ - 14.65, - 13.0, - 7.0 - ] - }, - { - "id": 491, - "relativePosition": [ - 15.0, - 13.0, - 7.0 - ] - }, - { - "id": 492, - "relativePosition": [ - 14.65, - 13.0, - 8.0 - ] - }, - { - "id": 493, - "relativePosition": [ - 14.65, - 13.0, - 9.0 - ] - }, - { - "id": 494, - "relativePosition": [ - 14.65, - 13.0, - 10.0 - ] - }, - { - "id": 495, - "relativePosition": [ - 14.65, - 13.0, - 11.0 - ] - }, - { - "id": 496, - "relativePosition": [ - 14.65, - 13.0, - 12.0 - ] - }, - { - "id": 497, - "relativePosition": [ - 14.65, - 13.0, - 13.0 - ] - }, - { - "id": 498, - "relativePosition": [ - 15.0, - 13.0, - 13.0 - ] - }, - { - "id": 499, - "relativePosition": [ - 15.0, - 14.0, - 7.0 - ] - }, - { - "id": 500, - "relativePosition": [ - 15.0, - 14.0, - 13.0 - ] - }, - { - "id": 501, - "relativePosition": [ - 14.5, - 15.0, - 7.0 - ] - }, - { - "id": 502, - "relativePosition": [ - 15.0, - 14.35, - 7.0 - ] - }, - { - "id": 503, - "relativePosition": [ - 15.0, - 14.35, - 8.0 - ] - }, - { - "id": 504, - "relativePosition": [ - 14.5, - 15.0, - 8.0 - ] - }, - { - "id": 505, - "relativePosition": [ - 15.0, - 14.35, - 9.0 - ] - }, - { - "id": 506, - "relativePosition": [ - 14.5, - 15.0, - 9.0 - ] - }, - { - "id": 507, - "relativePosition": [ - 15.0, - 14.35, - 10.0 - ] - }, - { - "id": 508, - "relativePosition": [ - 14.5, - 15.0, - 10.0 - ] - }, - { - "id": 509, - "relativePosition": [ - 15.0, - 14.35, - 11.0 - ] - }, - { - "id": 510, - "relativePosition": [ - 14.5, - 15.0, - 11.0 - ] - }, - { - "id": 511, - "relativePosition": [ - 15.0, - 14.35, - 12.0 - ] - }, - { - "id": 512, - "relativePosition": [ - 14.5, - 15.0, - 12.0 - ] - }, - { - "id": 513, - "relativePosition": [ - 15.0, - 14.35, - 13.0 - ] - }, - { - "id": 514, - "relativePosition": [ - 14.5, - 15.0, - 13.0 - ] - }, - { - "id": 515, - "relativePosition": [ - 15.35, - 8.0, - 7.0 - ] - }, - { - "id": 516, - "relativePosition": [ - 15.35, - 8.0, - 8.0 - ] - }, - { - "id": 517, - "relativePosition": [ - 15.35, - 8.0, - 9.0 - ] - }, - { - "id": 518, - "relativePosition": [ - 15.35, - 8.0, - 10.0 - ] - }, - { - "id": 519, - "relativePosition": [ - 15.35, - 8.0, - 11.0 - ] - }, - { - "id": 520, - "relativePosition": [ - 15.35, - 8.0, - 12.0 - ] - }, - { - "id": 521, - "relativePosition": [ - 15.35, - 8.0, - 13.0 - ] - }, - { - "id": 522, - "relativePosition": [ - 15.8, - 9.0, - 7.0 - ] - }, - { - "id": 523, - "relativePosition": [ - 15.8, - 9.0, - 8.0 - ] - }, - { - "id": 524, - "relativePosition": [ - 15.8, - 9.0, - 9.0 - ] - }, - { - "id": 525, - "relativePosition": [ - 15.8, - 9.0, - 10.0 - ] - }, - { - "id": 526, - "relativePosition": [ - 15.8, - 9.0, - 11.0 - ] - }, - { - "id": 527, - "relativePosition": [ - 15.8, - 9.0, - 12.0 - ] - }, - { - "id": 528, - "relativePosition": [ - 15.8, - 9.0, - 13.0 - ] - }, - { - "id": 529, - "relativePosition": [ - 16.0, - 10.0, - 7.0 - ] - }, - { - "id": 530, - "relativePosition": [ - 16.0, - 10.0, - 8.0 - ] - }, - { - "id": 531, - "relativePosition": [ - 16.0, - 10.0, - 9.0 - ] - }, - { - "id": 532, - "relativePosition": [ - 16.0, - 10.0, - 10.0 - ] - }, - { - "id": 533, - "relativePosition": [ - 16.0, - 10.0, - 11.0 - ] - }, - { - "id": 534, - "relativePosition": [ - 16.0, - 10.0, - 12.0 - ] - }, - { - "id": 535, - "relativePosition": [ - 16.0, - 10.0, - 13.0 - ] - }, - { - "id": 536, - "relativePosition": [ - 16.0, - 11.0, - 7.0 - ] - }, - { - "id": 537, - "relativePosition": [ - 16.0, - 11.0, - 8.0 - ] - }, - { - "id": 538, - "relativePosition": [ - 16.0, - 11.0, - 9.0 - ] - }, - { - "id": 539, - "relativePosition": [ - 16.0, - 11.0, - 10.0 - ] - }, - { - "id": 540, - "relativePosition": [ - 16.0, - 11.0, - 11.0 - ] - }, - { - "id": 541, - "relativePosition": [ - 16.0, - 11.0, - 12.0 - ] - }, - { - "id": 542, - "relativePosition": [ - 16.0, - 11.0, - 13.0 - ] - }, - { - "id": 543, - "relativePosition": [ - 16.0, - 12.0, - 7.0 - ] - }, - { - "id": 544, - "relativePosition": [ - 16.0, - 11.8, - 7.0 - ] - }, - { - "id": 545, - "relativePosition": [ - 16.0, - 11.8, - 8.0 - ] - }, - { - "id": 546, - "relativePosition": [ - 16.0, - 12.0, - 8.0 - ] - }, - { - "id": 547, - "relativePosition": [ - 16.0, - 11.8, - 9.0 - ] - }, - { - "id": 548, - "relativePosition": [ - 16.0, - 12.0, - 9.0 - ] - }, - { - "id": 549, - "relativePosition": [ - 16.0, - 11.8, - 10.0 - ] - }, - { - "id": 550, - "relativePosition": [ - 16.0, - 12.0, - 10.0 - ] - }, - { - "id": 551, - "relativePosition": [ - 16.0, - 11.8, - 11.0 - ] - }, - { - "id": 552, - "relativePosition": [ - 16.0, - 12.0, - 11.0 - ] - }, - { - "id": 553, - "relativePosition": [ - 16.0, - 11.8, - 12.0 - ] - }, - { - "id": 554, - "relativePosition": [ - 16.0, - 12.0, - 12.0 - ] - }, - { - "id": 555, - "relativePosition": [ - 16.0, - 11.8, - 13.0 - ] - }, - { - "id": 556, - "relativePosition": [ - 16.0, - 12.0, - 13.0 - ] - }, - { - "id": 557, - "relativePosition": [ - 15.65, - 13.0, - 7.0 - ] - }, - { - "id": 558, - "relativePosition": [ - 15.65, - 13.0, - 8.0 - ] - }, - { - "id": 559, - "relativePosition": [ - 15.65, - 13.0, - 9.0 - ] - }, - { - "id": 560, - "relativePosition": [ - 15.65, - 13.0, - 10.0 - ] - }, - { - "id": 561, - "relativePosition": [ - 15.65, - 13.0, - 11.0 - ] - }, - { - "id": 562, - "relativePosition": [ - 15.65, - 13.0, - 12.0 - ] - }, - { - "id": 563, - "relativePosition": [ - 15.65, - 13.0, - 13.0 - ] - }, - { - "id": 564, - "relativePosition": [ - 15.2, - 14.0, - 7.0 - ] - }, - { - "id": 565, - "relativePosition": [ - 15.2, - 14.0, - 8.0 - ] - }, - { - "id": 566, - "relativePosition": [ - 15.2, - 14.0, - 9.0 - ] - }, - { - "id": 567, - "relativePosition": [ - 15.2, - 14.0, - 10.0 - ] - }, - { - "id": 568, - "relativePosition": [ - 15.2, - 14.0, - 11.0 - ] - }, - { - "id": 569, - "relativePosition": [ - 15.2, - 14.0, - 12.0 - ] - }, - { - "id": 570, - "relativePosition": [ - 15.2, - 14.0, - 13.0 - ] - }, - { - "id": 571, - "relativePosition": [ - 10.0, - 6.0, - 13.0 - ] - }, - { - "id": 572, - "relativePosition": [ - 11.0, - 6.0, - 13.0 - ] - } - ], - "elements": [ - { - "id": 1, +{ + "_format": "FDTD Input file", + "general": { + "timeStep": 30.2e-12, + "numberOfSteps": 300000 + }, + "boundary": { + "all": { + "type": "mur" + } + }, + "mesh": { + "grid": { + "numberOfCells": [ + 20, + 20, + 20 + ], + "steps": { + "x": [ + 0.05 + ], + "y": [ + 0.05 + ], + "z": [ + 0.05 + ] + } + }, + "coordinates": [ + { + "id": 1, + "relativePosition": [ + 5.0, + 9.0, + 7.0 + ] + }, + { + "id": 2, + "relativePosition": [ + 5.0, + 8.0, + 7.0 + ] + }, + { + "id": 3, + "relativePosition": [ + 4.5, + 9.0, + 7.0 + ] + }, + { + "id": 4, + "relativePosition": [ + 4.5, + 9.0, + 8.0 + ] + }, + { + "id": 5, + "relativePosition": [ + 5.0, + 8.0, + 8.0 + ] + }, + { + "id": 6, + "relativePosition": [ + 4.5, + 9.0, + 9.0 + ] + }, + { + "id": 7, + "relativePosition": [ + 5.0, + 8.0, + 9.0 + ] + }, + { + "id": 8, + "relativePosition": [ + 4.5, + 9.0, + 10.0 + ] + }, + { + "id": 9, + "relativePosition": [ + 5.0, + 8.0, + 10.0 + ] + }, + { + "id": 10, + "relativePosition": [ + 4.5, + 9.0, + 11.0 + ] + }, + { + "id": 11, + "relativePosition": [ + 5.0, + 8.0, + 11.0 + ] + }, + { + "id": 12, + "relativePosition": [ + 4.5, + 9.0, + 12.0 + ] + }, + { + "id": 13, + "relativePosition": [ + 5.0, + 8.0, + 12.0 + ] + }, + { + "id": 14, + "relativePosition": [ + 4.5, + 9.0, + 13.0 + ] + }, + { + "id": 15, + "relativePosition": [ + 5.0, + 8.0, + 13.0 + ] + }, + { + "id": 16, + "relativePosition": [ + 5.0, + 9.0, + 13.0 + ] + }, + { + "id": 17, + "relativePosition": [ + 5.0, + 10.0, + 7.0 + ] + }, + { + "id": 18, + "relativePosition": [ + 4.2, + 10.0, + 7.0 + ] + }, + { + "id": 19, + "relativePosition": [ + 4.2, + 10.0, + 8.0 + ] + }, + { + "id": 20, + "relativePosition": [ + 4.2, + 10.0, + 9.0 + ] + }, + { + "id": 21, + "relativePosition": [ + 4.2, + 10.0, + 10.0 + ] + }, + { + "id": 22, + "relativePosition": [ + 4.2, + 10.0, + 11.0 + ] + }, + { + "id": 23, + "relativePosition": [ + 4.2, + 10.0, + 12.0 + ] + }, + { + "id": 24, + "relativePosition": [ + 4.2, + 10.0, + 13.0 + ] + }, + { + "id": 25, + "relativePosition": [ + 5.0, + 10.0, + 13.0 + ] + }, + { + "id": 26, + "relativePosition": [ + 5.0, + 11.0, + 7.0 + ] + }, + { + "id": 27, + "relativePosition": [ + 4.2, + 11.0, + 7.0 + ] + }, + { + "id": 28, + "relativePosition": [ + 4.2, + 11.0, + 8.0 + ] + }, + { + "id": 29, + "relativePosition": [ + 4.2, + 11.0, + 9.0 + ] + }, + { + "id": 30, + "relativePosition": [ + 4.2, + 11.0, + 10.0 + ] + }, + { + "id": 31, + "relativePosition": [ + 4.2, + 11.0, + 11.0 + ] + }, + { + "id": 32, + "relativePosition": [ + 4.2, + 11.0, + 12.0 + ] + }, + { + "id": 33, + "relativePosition": [ + 4.2, + 11.0, + 13.0 + ] + }, + { + "id": 34, + "relativePosition": [ + 5.0, + 11.0, + 13.0 + ] + }, + { + "id": 35, + "relativePosition": [ + 5.0, + 12.0, + 7.0 + ] + }, + { + "id": 36, + "relativePosition": [ + 4.35, + 12.0, + 7.0 + ] + }, + { + "id": 37, + "relativePosition": [ + 4.35, + 12.0, + 8.0 + ] + }, + { + "id": 38, + "relativePosition": [ + 4.35, + 12.0, + 9.0 + ] + }, + { + "id": 39, + "relativePosition": [ + 4.35, + 12.0, + 10.0 + ] + }, + { + "id": 40, + "relativePosition": [ + 4.35, + 12.0, + 11.0 + ] + }, + { + "id": 41, + "relativePosition": [ + 4.35, + 12.0, + 12.0 + ] + }, + { + "id": 42, + "relativePosition": [ + 4.35, + 12.0, + 13.0 + ] + }, + { + "id": 43, + "relativePosition": [ + 5.0, + 12.0, + 13.0 + ] + }, + { + "id": 44, + "relativePosition": [ + 4.5, + 13.0, + 7.0 + ] + }, + { + "id": 45, + "relativePosition": [ + 5.0, + 13.0, + 7.0 + ] + }, + { + "id": 46, + "relativePosition": [ + 4.5, + 13.0, + 8.0 + ] + }, + { + "id": 47, + "relativePosition": [ + 4.5, + 13.0, + 9.0 + ] + }, + { + "id": 48, + "relativePosition": [ + 4.5, + 13.0, + 10.0 + ] + }, + { + "id": 49, + "relativePosition": [ + 4.5, + 13.0, + 11.0 + ] + }, + { + "id": 50, + "relativePosition": [ + 4.5, + 13.0, + 12.0 + ] + }, + { + "id": 51, + "relativePosition": [ + 4.5, + 13.0, + 13.0 + ] + }, + { + "id": 52, + "relativePosition": [ + 5.0, + 13.0, + 13.0 + ] + }, + { + "id": 53, + "relativePosition": [ + 5.0, + 14.0, + 7.0 + ] + }, + { + "id": 54, + "relativePosition": [ + 5.0, + 14.0, + 8.0 + ] + }, + { + "id": 55, + "relativePosition": [ + 5.0, + 14.0, + 9.0 + ] + }, + { + "id": 56, + "relativePosition": [ + 5.0, + 14.0, + 10.0 + ] + }, + { + "id": 57, + "relativePosition": [ + 5.0, + 14.0, + 11.0 + ] + }, + { + "id": 58, + "relativePosition": [ + 5.0, + 14.0, + 12.0 + ] + }, + { + "id": 59, + "relativePosition": [ + 5.0, + 14.0, + 13.0 + ] + }, + { + "id": 60, + "relativePosition": [ + 6.0, + 7.0, + 7.0 + ] + }, + { + "id": 61, + "relativePosition": [ + 6.0, + 6.65, + 7.0 + ] + }, + { + "id": 62, + "relativePosition": [ + 5.65, + 7.0, + 7.0 + ] + }, + { + "id": 63, + "relativePosition": [ + 5.65, + 7.0, + 8.0 + ] + }, + { + "id": 64, + "relativePosition": [ + 6.0, + 6.65, + 8.0 + ] + }, + { + "id": 65, + "relativePosition": [ + 5.65, + 7.0, + 9.0 + ] + }, + { + "id": 66, + "relativePosition": [ + 6.0, + 6.65, + 9.0 + ] + }, + { + "id": 67, + "relativePosition": [ + 5.65, + 7.0, + 10.0 + ] + }, + { + "id": 68, + "relativePosition": [ + 6.0, + 6.65, + 10.0 + ] + }, + { + "id": 69, + "relativePosition": [ + 5.65, + 7.0, + 11.0 + ] + }, + { + "id": 70, + "relativePosition": [ + 6.0, + 6.65, + 11.0 + ] + }, + { + "id": 71, + "relativePosition": [ + 5.65, + 7.0, + 12.0 + ] + }, + { + "id": 72, + "relativePosition": [ + 6.0, + 6.65, + 12.0 + ] + }, + { + "id": 73, + "relativePosition": [ + 5.65, + 7.0, + 13.0 + ] + }, + { + "id": 74, + "relativePosition": [ + 6.0, + 6.65, + 13.0 + ] + }, + { + "id": 75, + "relativePosition": [ + 6.0, + 7.0, + 13.0 + ] + }, + { + "id": 76, + "relativePosition": [ + 6.0, + 8.0, + 7.0 + ] + }, + { + "id": 77, + "relativePosition": [ + 6.0, + 8.0, + 13.0 + ] + }, + { + "id": 78, + "relativePosition": [ + 5.65, + 9.0, + 7.0 + ] + }, + { + "id": 79, + "relativePosition": [ + 6.0, + 8.2, + 7.0 + ] + }, + { + "id": 80, + "relativePosition": [ + 6.0, + 8.2, + 8.0 + ] + }, + { + "id": 81, + "relativePosition": [ + 5.65, + 9.0, + 8.0 + ] + }, + { + "id": 82, + "relativePosition": [ + 6.0, + 8.2, + 9.0 + ] + }, + { + "id": 83, + "relativePosition": [ + 5.65, + 9.0, + 9.0 + ] + }, + { + "id": 84, + "relativePosition": [ + 6.0, + 8.2, + 10.0 + ] + }, + { + "id": 85, + "relativePosition": [ + 5.65, + 9.0, + 10.0 + ] + }, + { + "id": 86, + "relativePosition": [ + 6.0, + 8.2, + 11.0 + ] + }, + { + "id": 87, + "relativePosition": [ + 5.65, + 9.0, + 11.0 + ] + }, + { + "id": 88, + "relativePosition": [ + 6.0, + 8.2, + 12.0 + ] + }, + { + "id": 89, + "relativePosition": [ + 5.65, + 9.0, + 12.0 + ] + }, + { + "id": 90, + "relativePosition": [ + 6.0, + 8.2, + 13.0 + ] + }, + { + "id": 91, + "relativePosition": [ + 5.65, + 9.0, + 13.0 + ] + }, + { + "id": 92, + "relativePosition": [ + 5.35, + 10.0, + 7.0 + ] + }, + { + "id": 93, + "relativePosition": [ + 5.35, + 10.0, + 8.0 + ] + }, + { + "id": 94, + "relativePosition": [ + 5.35, + 10.0, + 9.0 + ] + }, + { + "id": 95, + "relativePosition": [ + 5.35, + 10.0, + 10.0 + ] + }, + { + "id": 96, + "relativePosition": [ + 5.35, + 10.0, + 11.0 + ] + }, + { + "id": 97, + "relativePosition": [ + 5.35, + 10.0, + 12.0 + ] + }, + { + "id": 98, + "relativePosition": [ + 5.35, + 10.0, + 13.0 + ] + }, + { + "id": 99, + "relativePosition": [ + 5.2, + 11.0, + 7.0 + ] + }, + { + "id": 100, + "relativePosition": [ + 5.2, + 11.0, + 8.0 + ] + }, + { + "id": 101, + "relativePosition": [ + 5.2, + 11.0, + 9.0 + ] + }, + { + "id": 102, + "relativePosition": [ + 5.2, + 11.0, + 10.0 + ] + }, + { + "id": 103, + "relativePosition": [ + 5.2, + 11.0, + 11.0 + ] + }, + { + "id": 104, + "relativePosition": [ + 5.2, + 11.0, + 12.0 + ] + }, + { + "id": 105, + "relativePosition": [ + 5.2, + 11.0, + 13.0 + ] + }, + { + "id": 106, + "relativePosition": [ + 5.35, + 12.0, + 7.0 + ] + }, + { + "id": 107, + "relativePosition": [ + 5.35, + 12.0, + 8.0 + ] + }, + { + "id": 108, + "relativePosition": [ + 5.35, + 12.0, + 9.0 + ] + }, + { + "id": 109, + "relativePosition": [ + 5.35, + 12.0, + 10.0 + ] + }, + { + "id": 110, + "relativePosition": [ + 5.35, + 12.0, + 11.0 + ] + }, + { + "id": 111, + "relativePosition": [ + 5.35, + 12.0, + 12.0 + ] + }, + { + "id": 112, + "relativePosition": [ + 5.35, + 12.0, + 13.0 + ] + }, + { + "id": 113, + "relativePosition": [ + 5.65, + 13.0, + 7.0 + ] + }, + { + "id": 114, + "relativePosition": [ + 5.65, + 13.0, + 8.0 + ] + }, + { + "id": 115, + "relativePosition": [ + 5.65, + 13.0, + 9.0 + ] + }, + { + "id": 116, + "relativePosition": [ + 5.65, + 13.0, + 10.0 + ] + }, + { + "id": 117, + "relativePosition": [ + 5.65, + 13.0, + 11.0 + ] + }, + { + "id": 118, + "relativePosition": [ + 5.65, + 13.0, + 12.0 + ] + }, + { + "id": 119, + "relativePosition": [ + 5.65, + 13.0, + 13.0 + ] + }, + { + "id": 120, + "relativePosition": [ + 6.0, + 14.0, + 7.0 + ] + }, + { + "id": 121, + "relativePosition": [ + 6.0, + 13.65, + 7.0 + ] + }, + { + "id": 122, + "relativePosition": [ + 6.0, + 13.65, + 8.0 + ] + }, + { + "id": 123, + "relativePosition": [ + 6.0, + 13.65, + 9.0 + ] + }, + { + "id": 124, + "relativePosition": [ + 6.0, + 13.65, + 10.0 + ] + }, + { + "id": 125, + "relativePosition": [ + 6.0, + 13.65, + 11.0 + ] + }, + { + "id": 126, + "relativePosition": [ + 6.0, + 13.65, + 12.0 + ] + }, + { + "id": 127, + "relativePosition": [ + 6.0, + 13.65, + 13.0 + ] + }, + { + "id": 128, + "relativePosition": [ + 6.0, + 14.0, + 13.0 + ] + }, + { + "id": 129, + "relativePosition": [ + 5.8, + 15.0, + 7.0 + ] + }, + { + "id": 130, + "relativePosition": [ + 6.0, + 15.0, + 7.0 + ] + }, + { + "id": 131, + "relativePosition": [ + 5.8, + 15.0, + 8.0 + ] + }, + { + "id": 132, + "relativePosition": [ + 5.8, + 15.0, + 9.0 + ] + }, + { + "id": 133, + "relativePosition": [ + 5.8, + 15.0, + 10.0 + ] + }, + { + "id": 134, + "relativePosition": [ + 5.8, + 15.0, + 11.0 + ] + }, + { + "id": 135, + "relativePosition": [ + 5.8, + 15.0, + 12.0 + ] + }, + { + "id": 136, + "relativePosition": [ + 5.8, + 15.0, + 13.0 + ] + }, + { + "id": 137, + "relativePosition": [ + 6.0, + 15.0, + 13.0 + ] + }, + { + "id": 138, + "relativePosition": [ + 6.0, + 15.2, + 7.0 + ] + }, + { + "id": 139, + "relativePosition": [ + 6.0, + 15.2, + 8.0 + ] + }, + { + "id": 140, + "relativePosition": [ + 6.0, + 15.2, + 9.0 + ] + }, + { + "id": 141, + "relativePosition": [ + 6.0, + 15.2, + 10.0 + ] + }, + { + "id": 142, + "relativePosition": [ + 6.0, + 15.2, + 11.0 + ] + }, + { + "id": 143, + "relativePosition": [ + 6.0, + 15.2, + 12.0 + ] + }, + { + "id": 144, + "relativePosition": [ + 6.0, + 15.2, + 13.0 + ] + }, + { + "id": 145, + "relativePosition": [ + 7.0, + 6.0, + 7.0 + ] + }, + { + "id": 146, + "relativePosition": [ + 7.0, + 5.8, + 7.0 + ] + }, + { + "id": 147, + "relativePosition": [ + 6.8, + 6.0, + 7.0 + ] + }, + { + "id": 148, + "relativePosition": [ + 6.8, + 6.0, + 8.0 + ] + }, + { + "id": 149, + "relativePosition": [ + 7.0, + 5.8, + 8.0 + ] + }, + { + "id": 150, + "relativePosition": [ + 6.8, + 6.0, + 9.0 + ] + }, + { + "id": 151, + "relativePosition": [ + 7.0, + 5.8, + 9.0 + ] + }, + { + "id": 152, + "relativePosition": [ + 6.8, + 6.0, + 10.0 + ] + }, + { + "id": 153, + "relativePosition": [ + 7.0, + 5.8, + 10.0 + ] + }, + { + "id": 154, + "relativePosition": [ + 6.8, + 6.0, + 11.0 + ] + }, + { + "id": 155, + "relativePosition": [ + 7.0, + 5.8, + 11.0 + ] + }, + { + "id": 156, + "relativePosition": [ + 6.8, + 6.0, + 12.0 + ] + }, + { + "id": 157, + "relativePosition": [ + 7.0, + 5.8, + 12.0 + ] + }, + { + "id": 158, + "relativePosition": [ + 6.8, + 6.0, + 13.0 + ] + }, + { + "id": 159, + "relativePosition": [ + 7.0, + 5.8, + 13.0 + ] + }, + { + "id": 160, + "relativePosition": [ + 7.0, + 6.0, + 13.0 + ] + }, + { + "id": 161, + "relativePosition": [ + 7.0, + 7.0, + 7.0 + ] + }, + { + "id": 162, + "relativePosition": [ + 7.0, + 7.0, + 13.0 + ] + }, + { + "id": 163, + "relativePosition": [ + 6.2, + 8.0, + 7.0 + ] + }, + { + "id": 164, + "relativePosition": [ + 7.0, + 7.2, + 7.0 + ] + }, + { + "id": 165, + "relativePosition": [ + 7.0, + 7.2, + 8.0 + ] + }, + { + "id": 166, + "relativePosition": [ + 6.2, + 8.0, + 8.0 + ] + }, + { + "id": 167, + "relativePosition": [ + 7.0, + 7.2, + 9.0 + ] + }, + { + "id": 168, + "relativePosition": [ + 6.2, + 8.0, + 9.0 + ] + }, + { + "id": 169, + "relativePosition": [ + 7.0, + 7.2, + 10.0 + ] + }, + { + "id": 170, + "relativePosition": [ + 6.2, + 8.0, + 10.0 + ] + }, + { + "id": 171, + "relativePosition": [ + 7.0, + 7.2, + 11.0 + ] + }, + { + "id": 172, + "relativePosition": [ + 6.2, + 8.0, + 11.0 + ] + }, + { + "id": 173, + "relativePosition": [ + 7.0, + 7.2, + 12.0 + ] + }, + { + "id": 174, + "relativePosition": [ + 6.2, + 8.0, + 12.0 + ] + }, + { + "id": 175, + "relativePosition": [ + 7.0, + 7.2, + 13.0 + ] + }, + { + "id": 176, + "relativePosition": [ + 6.2, + 8.0, + 13.0 + ] + }, + { + "id": 177, + "relativePosition": [ + 6.2, + 14.0, + 7.0 + ] + }, + { + "id": 178, + "relativePosition": [ + 6.2, + 14.0, + 8.0 + ] + }, + { + "id": 179, + "relativePosition": [ + 6.2, + 14.0, + 9.0 + ] + }, + { + "id": 180, + "relativePosition": [ + 6.2, + 14.0, + 10.0 + ] + }, + { + "id": 181, + "relativePosition": [ + 6.2, + 14.0, + 11.0 + ] + }, + { + "id": 182, + "relativePosition": [ + 6.2, + 14.0, + 12.0 + ] + }, + { + "id": 183, + "relativePosition": [ + 6.2, + 14.0, + 13.0 + ] + }, + { + "id": 184, + "relativePosition": [ + 7.0, + 15.0, + 7.0 + ] + }, + { + "id": 185, + "relativePosition": [ + 7.0, + 14.8, + 7.0 + ] + }, + { + "id": 186, + "relativePosition": [ + 7.0, + 14.8, + 8.0 + ] + }, + { + "id": 187, + "relativePosition": [ + 7.0, + 14.8, + 9.0 + ] + }, + { + "id": 188, + "relativePosition": [ + 7.0, + 14.8, + 10.0 + ] + }, + { + "id": 189, + "relativePosition": [ + 7.0, + 14.8, + 11.0 + ] + }, + { + "id": 190, + "relativePosition": [ + 7.0, + 14.8, + 12.0 + ] + }, + { + "id": 191, + "relativePosition": [ + 7.0, + 14.8, + 13.0 + ] + }, + { + "id": 192, + "relativePosition": [ + 7.0, + 15.0, + 13.0 + ] + }, + { + "id": 193, + "relativePosition": [ + 7.0, + 16.0, + 7.0 + ] + }, + { + "id": 194, + "relativePosition": [ + 7.0, + 16.0, + 8.0 + ] + }, + { + "id": 195, + "relativePosition": [ + 7.0, + 16.0, + 9.0 + ] + }, + { + "id": 196, + "relativePosition": [ + 7.0, + 16.0, + 10.0 + ] + }, + { + "id": 197, + "relativePosition": [ + 7.0, + 16.0, + 11.0 + ] + }, + { + "id": 198, + "relativePosition": [ + 7.0, + 16.0, + 12.0 + ] + }, + { + "id": 199, + "relativePosition": [ + 7.0, + 16.0, + 13.0 + ] + }, + { + "id": 200, + "relativePosition": [ + 8.0, + 6.0, + 7.0 + ] + }, + { + "id": 201, + "relativePosition": [ + 8.0, + 5.35, + 7.0 + ] + }, + { + "id": 202, + "relativePosition": [ + 8.0, + 5.35, + 8.0 + ] + }, + { + "id": 203, + "relativePosition": [ + 8.0, + 5.35, + 9.0 + ] + }, + { + "id": 204, + "relativePosition": [ + 8.0, + 5.35, + 10.0 + ] + }, + { + "id": 205, + "relativePosition": [ + 8.0, + 5.35, + 11.0 + ] + }, + { + "id": 206, + "relativePosition": [ + 8.0, + 5.35, + 12.0 + ] + }, + { + "id": 207, + "relativePosition": [ + 8.0, + 5.35, + 13.0 + ] + }, + { + "id": 208, + "relativePosition": [ + 8.0, + 6.0, + 13.0 + ] + }, + { + "id": 209, + "relativePosition": [ + 8.0, + 6.5, + 7.0 + ] + }, + { + "id": 210, + "relativePosition": [ + 7.2, + 7.0, + 7.0 + ] + }, + { + "id": 211, + "relativePosition": [ + 8.0, + 6.5, + 8.0 + ] + }, + { + "id": 212, + "relativePosition": [ + 7.2, + 7.0, + 8.0 + ] + }, + { + "id": 213, + "relativePosition": [ + 8.0, + 6.5, + 9.0 + ] + }, + { + "id": 214, + "relativePosition": [ + 7.2, + 7.0, + 9.0 + ] + }, + { + "id": 215, + "relativePosition": [ + 8.0, + 6.5, + 10.0 + ] + }, + { + "id": 216, + "relativePosition": [ + 7.2, + 7.0, + 10.0 + ] + }, + { + "id": 217, + "relativePosition": [ + 8.0, + 6.5, + 11.0 + ] + }, + { + "id": 218, + "relativePosition": [ + 7.2, + 7.0, + 11.0 + ] + }, + { + "id": 219, + "relativePosition": [ + 8.0, + 6.5, + 12.0 + ] + }, + { + "id": 220, + "relativePosition": [ + 7.2, + 7.0, + 12.0 + ] + }, + { + "id": 221, + "relativePosition": [ + 8.0, + 6.5, + 13.0 + ] + }, + { + "id": 222, + "relativePosition": [ + 7.2, + 7.0, + 13.0 + ] + }, + { + "id": 223, + "relativePosition": [ + 7.35, + 15.0, + 7.0 + ] + }, + { + "id": 224, + "relativePosition": [ + 7.35, + 15.0, + 8.0 + ] + }, + { + "id": 225, + "relativePosition": [ + 7.35, + 15.0, + 9.0 + ] + }, + { + "id": 226, + "relativePosition": [ + 7.35, + 15.0, + 10.0 + ] + }, + { + "id": 227, + "relativePosition": [ + 7.35, + 15.0, + 11.0 + ] + }, + { + "id": 228, + "relativePosition": [ + 7.35, + 15.0, + 12.0 + ] + }, + { + "id": 229, + "relativePosition": [ + 7.35, + 15.0, + 13.0 + ] + }, + { + "id": 230, + "relativePosition": [ + 8.0, + 16.0, + 7.0 + ] + }, + { + "id": 231, + "relativePosition": [ + 8.0, + 15.35, + 7.0 + ] + }, + { + "id": 232, + "relativePosition": [ + 8.0, + 15.35, + 8.0 + ] + }, + { + "id": 233, + "relativePosition": [ + 8.0, + 15.35, + 9.0 + ] + }, + { + "id": 234, + "relativePosition": [ + 8.0, + 15.35, + 10.0 + ] + }, + { + "id": 235, + "relativePosition": [ + 8.0, + 15.35, + 11.0 + ] + }, + { + "id": 236, + "relativePosition": [ + 8.0, + 15.35, + 12.0 + ] + }, + { + "id": 237, + "relativePosition": [ + 8.0, + 15.35, + 13.0 + ] + }, + { + "id": 238, + "relativePosition": [ + 8.0, + 16.0, + 13.0 + ] + }, + { + "id": 239, + "relativePosition": [ + 8.0, + 16.5, + 7.0 + ] + }, + { + "id": 240, + "relativePosition": [ + 8.0, + 16.5, + 8.0 + ] + }, + { + "id": 241, + "relativePosition": [ + 8.0, + 16.5, + 9.0 + ] + }, + { + "id": 242, + "relativePosition": [ + 8.0, + 16.5, + 10.0 + ] + }, + { + "id": 243, + "relativePosition": [ + 8.0, + 16.5, + 11.0 + ] + }, + { + "id": 244, + "relativePosition": [ + 8.0, + 16.5, + 12.0 + ] + }, + { + "id": 245, + "relativePosition": [ + 8.0, + 16.5, + 13.0 + ] + }, + { + "id": 246, + "relativePosition": [ + 9.0, + 6.0, + 7.0 + ] + }, + { + "id": 247, + "relativePosition": [ + 9.0, + 5.0, + 7.0 + ] + }, + { + "id": 248, + "relativePosition": [ + 9.0, + 5.0, + 8.0 + ] + }, + { + "id": 249, + "relativePosition": [ + 9.0, + 5.0, + 9.0 + ] + }, + { + "id": 250, + "relativePosition": [ + 9.0, + 5.0, + 10.0 + ] + }, + { + "id": 251, + "relativePosition": [ + 9.0, + 5.0, + 11.0 + ] + }, + { + "id": 252, + "relativePosition": [ + 9.0, + 5.0, + 12.0 + ] + }, + { + "id": 253, + "relativePosition": [ + 9.0, + 5.0, + 13.0 + ] + }, + { + "id": 254, + "relativePosition": [ + 9.0, + 6.0, + 13.0 + ] + }, + { + "id": 255, + "relativePosition": [ + 9.0, + 6.0, + 8.0 + ] + }, + { + "id": 256, + "relativePosition": [ + 9.0, + 6.0, + 9.0 + ] + }, + { + "id": 257, + "relativePosition": [ + 9.0, + 6.0, + 10.0 + ] + }, + { + "id": 258, + "relativePosition": [ + 9.0, + 6.0, + 11.0 + ] + }, + { + "id": 259, + "relativePosition": [ + 9.0, + 6.0, + 12.0 + ] + }, + { + "id": 260, + "relativePosition": [ + 9.0, + 16.0, + 7.0 + ] + }, + { + "id": 261, + "relativePosition": [ + 9.0, + 15.8, + 7.0 + ] + }, + { + "id": 262, + "relativePosition": [ + 9.0, + 15.8, + 8.0 + ] + }, + { + "id": 263, + "relativePosition": [ + 9.0, + 15.8, + 9.0 + ] + }, + { + "id": 264, + "relativePosition": [ + 9.0, + 15.8, + 10.0 + ] + }, + { + "id": 265, + "relativePosition": [ + 9.0, + 15.8, + 11.0 + ] + }, + { + "id": 266, + "relativePosition": [ + 9.0, + 15.8, + 12.0 + ] + }, + { + "id": 267, + "relativePosition": [ + 9.0, + 15.8, + 13.0 + ] + }, + { + "id": 268, + "relativePosition": [ + 9.0, + 16.0, + 13.0 + ] + }, + { + "id": 269, + "relativePosition": [ + 9.0, + 16.8, + 7.0 + ] + }, + { + "id": 270, + "relativePosition": [ + 9.0, + 16.8, + 8.0 + ] + }, + { + "id": 271, + "relativePosition": [ + 9.0, + 16.8, + 9.0 + ] + }, + { + "id": 272, + "relativePosition": [ + 9.0, + 16.8, + 10.0 + ] + }, + { + "id": 273, + "relativePosition": [ + 9.0, + 16.8, + 11.0 + ] + }, + { + "id": 274, + "relativePosition": [ + 9.0, + 16.8, + 12.0 + ] + }, + { + "id": 275, + "relativePosition": [ + 9.0, + 16.8, + 13.0 + ] + }, + { + "id": 276, + "relativePosition": [ + 10.0, + 16.0, + 7.0 + ] + }, + { + "id": 277, + "relativePosition": [ + 10.0, + 15.8, + 7.0 + ] + }, + { + "id": 278, + "relativePosition": [ + 10.0, + 15.8, + 8.0 + ] + }, + { + "id": 279, + "relativePosition": [ + 10.0, + 15.8, + 9.0 + ] + }, + { + "id": 280, + "relativePosition": [ + 10.0, + 15.8, + 10.0 + ] + }, + { + "id": 281, + "relativePosition": [ + 10.0, + 15.8, + 11.0 + ] + }, + { + "id": 282, + "relativePosition": [ + 10.0, + 15.8, + 12.0 + ] + }, + { + "id": 283, + "relativePosition": [ + 10.0, + 15.8, + 13.0 + ] + }, + { + "id": 284, + "relativePosition": [ + 10.0, + 16.0, + 13.0 + ] + }, + { + "id": 285, + "relativePosition": [ + 10.0, + 16.8, + 7.0 + ] + }, + { + "id": 286, + "relativePosition": [ + 10.0, + 16.8, + 8.0 + ] + }, + { + "id": 287, + "relativePosition": [ + 10.0, + 16.8, + 9.0 + ] + }, + { + "id": 288, + "relativePosition": [ + 10.0, + 16.8, + 10.0 + ] + }, + { + "id": 289, + "relativePosition": [ + 10.0, + 16.8, + 11.0 + ] + }, + { + "id": 290, + "relativePosition": [ + 10.0, + 16.8, + 12.0 + ] + }, + { + "id": 291, + "relativePosition": [ + 10.0, + 16.8, + 13.0 + ] + }, + { + "id": 292, + "relativePosition": [ + 11.0, + 16.0, + 7.0 + ] + }, + { + "id": 293, + "relativePosition": [ + 11.0, + 15.8, + 7.0 + ] + }, + { + "id": 294, + "relativePosition": [ + 11.0, + 15.8, + 8.0 + ] + }, + { + "id": 295, + "relativePosition": [ + 11.0, + 15.8, + 9.0 + ] + }, + { + "id": 296, + "relativePosition": [ + 11.0, + 15.8, + 10.0 + ] + }, + { + "id": 297, + "relativePosition": [ + 11.0, + 15.8, + 11.0 + ] + }, + { + "id": 298, + "relativePosition": [ + 11.0, + 15.8, + 12.0 + ] + }, + { + "id": 299, + "relativePosition": [ + 11.0, + 15.8, + 13.0 + ] + }, + { + "id": 300, + "relativePosition": [ + 11.0, + 16.0, + 13.0 + ] + }, + { + "id": 301, + "relativePosition": [ + 11.0, + 16.8, + 7.0 + ] + }, + { + "id": 302, + "relativePosition": [ + 11.0, + 16.8, + 8.0 + ] + }, + { + "id": 303, + "relativePosition": [ + 11.0, + 16.8, + 9.0 + ] + }, + { + "id": 304, + "relativePosition": [ + 11.0, + 16.8, + 10.0 + ] + }, + { + "id": 305, + "relativePosition": [ + 11.0, + 16.8, + 11.0 + ] + }, + { + "id": 306, + "relativePosition": [ + 11.0, + 16.8, + 12.0 + ] + }, + { + "id": 307, + "relativePosition": [ + 11.0, + 16.8, + 13.0 + ] + }, + { + "id": 308, + "relativePosition": [ + 12.0, + 16.0, + 7.0 + ] + }, + { + "id": 309, + "relativePosition": [ + 12.0, + 15.5, + 7.0 + ] + }, + { + "id": 310, + "relativePosition": [ + 12.0, + 15.5, + 8.0 + ] + }, + { + "id": 311, + "relativePosition": [ + 12.0, + 15.5, + 9.0 + ] + }, + { + "id": 312, + "relativePosition": [ + 12.0, + 15.5, + 10.0 + ] + }, + { + "id": 313, + "relativePosition": [ + 12.0, + 15.5, + 11.0 + ] + }, + { + "id": 314, + "relativePosition": [ + 12.0, + 15.5, + 12.0 + ] + }, + { + "id": 315, + "relativePosition": [ + 12.0, + 15.5, + 13.0 + ] + }, + { + "id": 316, + "relativePosition": [ + 12.0, + 16.0, + 13.0 + ] + }, + { + "id": 317, + "relativePosition": [ + 12.0, + 16.5, + 7.0 + ] + }, + { + "id": 318, + "relativePosition": [ + 12.0, + 16.5, + 8.0 + ] + }, + { + "id": 319, + "relativePosition": [ + 12.0, + 16.5, + 9.0 + ] + }, + { + "id": 320, + "relativePosition": [ + 12.0, + 16.5, + 10.0 + ] + }, + { + "id": 321, + "relativePosition": [ + 12.0, + 16.5, + 11.0 + ] + }, + { + "id": 322, + "relativePosition": [ + 12.0, + 16.5, + 12.0 + ] + }, + { + "id": 323, + "relativePosition": [ + 12.0, + 16.5, + 13.0 + ] + }, + { + "id": 324, + "relativePosition": [ + 13.0, + 6.0, + 7.0 + ] + }, + { + "id": 325, + "relativePosition": [ + 13.0, + 5.8, + 7.0 + ] + }, + { + "id": 326, + "relativePosition": [ + 12.0, + 5.0, + 7.0 + ] + }, + { + "id": 327, + "relativePosition": [ + 12.0, + 6.0, + 7.0 + ] + }, + { + "id": 328, + "relativePosition": [ + 13.0, + 5.8, + 8.0 + ] + }, + { + "id": 329, + "relativePosition": [ + 12.0, + 5.0, + 8.0 + ] + }, + { + "id": 330, + "relativePosition": [ + 13.0, + 5.8, + 9.0 + ] + }, + { + "id": 331, + "relativePosition": [ + 12.0, + 5.0, + 9.0 + ] + }, + { + "id": 332, + "relativePosition": [ + 13.0, + 5.8, + 10.0 + ] + }, + { + "id": 333, + "relativePosition": [ + 12.0, + 5.0, + 10.0 + ] + }, + { + "id": 334, + "relativePosition": [ + 13.0, + 5.8, + 11.0 + ] + }, + { + "id": 335, + "relativePosition": [ + 12.0, + 5.0, + 11.0 + ] + }, + { + "id": 336, + "relativePosition": [ + 13.0, + 5.8, + 12.0 + ] + }, + { + "id": 337, + "relativePosition": [ + 12.0, + 5.0, + 12.0 + ] + }, + { + "id": 338, + "relativePosition": [ + 13.0, + 5.8, + 13.0 + ] + }, + { + "id": 339, + "relativePosition": [ + 12.0, + 5.0, + 13.0 + ] + }, + { + "id": 340, + "relativePosition": [ + 13.0, + 6.0, + 13.0 + ] + }, + { + "id": 341, + "relativePosition": [ + 12.0, + 6.0, + 13.0 + ] + }, + { + "id": 342, + "relativePosition": [ + 13.0, + 7.0, + 7.0 + ] + }, + { + "id": 343, + "relativePosition": [ + 12.0, + 6.0, + 8.0 + ] + }, + { + "id": 344, + "relativePosition": [ + 13.0, + 7.0, + 8.0 + ] + }, + { + "id": 345, + "relativePosition": [ + 12.0, + 6.0, + 9.0 + ] + }, + { + "id": 346, + "relativePosition": [ + 13.0, + 7.0, + 9.0 + ] + }, + { + "id": 347, + "relativePosition": [ + 12.0, + 6.0, + 10.0 + ] + }, + { + "id": 348, + "relativePosition": [ + 13.0, + 7.0, + 10.0 + ] + }, + { + "id": 349, + "relativePosition": [ + 12.0, + 6.0, + 11.0 + ] + }, + { + "id": 350, + "relativePosition": [ + 13.0, + 7.0, + 11.0 + ] + }, + { + "id": 351, + "relativePosition": [ + 12.0, + 6.0, + 12.0 + ] + }, + { + "id": 352, + "relativePosition": [ + 13.0, + 7.0, + 12.0 + ] + }, + { + "id": 353, + "relativePosition": [ + 13.0, + 7.0, + 13.0 + ] + }, + { + "id": 354, + "relativePosition": [ + 13.0, + 16.0, + 7.0 + ] + }, + { + "id": 355, + "relativePosition": [ + 13.0, + 15.0, + 7.0 + ] + }, + { + "id": 356, + "relativePosition": [ + 13.0, + 15.0, + 8.0 + ] + }, + { + "id": 357, + "relativePosition": [ + 13.0, + 15.0, + 9.0 + ] + }, + { + "id": 358, + "relativePosition": [ + 13.0, + 15.0, + 10.0 + ] + }, + { + "id": 359, + "relativePosition": [ + 13.0, + 15.0, + 11.0 + ] + }, + { + "id": 360, + "relativePosition": [ + 13.0, + 15.0, + 12.0 + ] + }, + { + "id": 361, + "relativePosition": [ + 13.0, + 15.0, + 13.0 + ] + }, + { + "id": 362, + "relativePosition": [ + 13.0, + 16.0, + 13.0 + ] + }, + { + "id": 363, + "relativePosition": [ + 13.0, + 16.2, + 7.0 + ] + }, + { + "id": 364, + "relativePosition": [ + 13.0, + 16.2, + 8.0 + ] + }, + { + "id": 365, + "relativePosition": [ + 13.0, + 16.2, + 9.0 + ] + }, + { + "id": 366, + "relativePosition": [ + 13.0, + 16.2, + 10.0 + ] + }, + { + "id": 367, + "relativePosition": [ + 13.0, + 16.2, + 11.0 + ] + }, + { + "id": 368, + "relativePosition": [ + 13.0, + 16.2, + 12.0 + ] + }, + { + "id": 369, + "relativePosition": [ + 13.0, + 16.2, + 13.0 + ] + }, + { + "id": 370, + "relativePosition": [ + 13.35, + 6.0, + 7.0 + ] + }, + { + "id": 371, + "relativePosition": [ + 13.35, + 6.0, + 8.0 + ] + }, + { + "id": 372, + "relativePosition": [ + 13.35, + 6.0, + 9.0 + ] + }, + { + "id": 373, + "relativePosition": [ + 13.35, + 6.0, + 10.0 + ] + }, + { + "id": 374, + "relativePosition": [ + 13.35, + 6.0, + 11.0 + ] + }, + { + "id": 375, + "relativePosition": [ + 13.35, + 6.0, + 12.0 + ] + }, + { + "id": 376, + "relativePosition": [ + 13.35, + 6.0, + 13.0 + ] + }, + { + "id": 377, + "relativePosition": [ + 14.0, + 7.0, + 7.0 + ] + }, + { + "id": 378, + "relativePosition": [ + 14.0, + 6.5, + 7.0 + ] + }, + { + "id": 379, + "relativePosition": [ + 13.2, + 7.0, + 7.0 + ] + }, + { + "id": 380, + "relativePosition": [ + 14.0, + 6.5, + 8.0 + ] + }, + { + "id": 381, + "relativePosition": [ + 13.2, + 7.0, + 8.0 + ] + }, + { + "id": 382, + "relativePosition": [ + 14.0, + 6.5, + 9.0 + ] + }, + { + "id": 383, + "relativePosition": [ + 13.2, + 7.0, + 9.0 + ] + }, + { + "id": 384, + "relativePosition": [ + 14.0, + 6.5, + 10.0 + ] + }, + { + "id": 385, + "relativePosition": [ + 13.2, + 7.0, + 10.0 + ] + }, + { + "id": 386, + "relativePosition": [ + 14.0, + 6.5, + 11.0 + ] + }, + { + "id": 387, + "relativePosition": [ + 13.2, + 7.0, + 11.0 + ] + }, + { + "id": 388, + "relativePosition": [ + 14.0, + 6.5, + 12.0 + ] + }, + { + "id": 389, + "relativePosition": [ + 13.2, + 7.0, + 12.0 + ] + }, + { + "id": 390, + "relativePosition": [ + 14.0, + 6.5, + 13.0 + ] + }, + { + "id": 391, + "relativePosition": [ + 13.2, + 7.0, + 13.0 + ] + }, + { + "id": 392, + "relativePosition": [ + 14.0, + 7.0, + 13.0 + ] + }, + { + "id": 393, + "relativePosition": [ + 14.0, + 7.8, + 7.0 + ] + }, + { + "id": 394, + "relativePosition": [ + 14.0, + 7.8, + 8.0 + ] + }, + { + "id": 395, + "relativePosition": [ + 14.0, + 8.0, + 7.0 + ] + }, + { + "id": 396, + "relativePosition": [ + 14.0, + 8.0, + 8.0 + ] + }, + { + "id": 397, + "relativePosition": [ + 14.0, + 7.8, + 9.0 + ] + }, + { + "id": 398, + "relativePosition": [ + 14.0, + 8.0, + 9.0 + ] + }, + { + "id": 399, + "relativePosition": [ + 14.0, + 7.8, + 10.0 + ] + }, + { + "id": 400, + "relativePosition": [ + 14.0, + 8.0, + 10.0 + ] + }, + { + "id": 401, + "relativePosition": [ + 14.0, + 7.8, + 11.0 + ] + }, + { + "id": 402, + "relativePosition": [ + 14.0, + 8.0, + 11.0 + ] + }, + { + "id": 403, + "relativePosition": [ + 14.0, + 7.8, + 12.0 + ] + }, + { + "id": 404, + "relativePosition": [ + 14.0, + 8.0, + 12.0 + ] + }, + { + "id": 405, + "relativePosition": [ + 14.0, + 7.8, + 13.0 + ] + }, + { + "id": 406, + "relativePosition": [ + 14.0, + 8.0, + 13.0 + ] + }, + { + "id": 407, + "relativePosition": [ + 14.0, + 15.0, + 7.0 + ] + }, + { + "id": 408, + "relativePosition": [ + 14.0, + 14.0, + 7.0 + ] + }, + { + "id": 409, + "relativePosition": [ + 14.0, + 14.0, + 8.0 + ] + }, + { + "id": 410, + "relativePosition": [ + 14.0, + 14.0, + 9.0 + ] + }, + { + "id": 411, + "relativePosition": [ + 14.0, + 14.0, + 10.0 + ] + }, + { + "id": 412, + "relativePosition": [ + 14.0, + 14.0, + 11.0 + ] + }, + { + "id": 413, + "relativePosition": [ + 14.0, + 14.0, + 12.0 + ] + }, + { + "id": 414, + "relativePosition": [ + 14.0, + 14.0, + 13.0 + ] + }, + { + "id": 415, + "relativePosition": [ + 14.0, + 15.0, + 13.0 + ] + }, + { + "id": 416, + "relativePosition": [ + 13.2, + 16.0, + 7.0 + ] + }, + { + "id": 417, + "relativePosition": [ + 14.0, + 15.5, + 7.0 + ] + }, + { + "id": 418, + "relativePosition": [ + 14.0, + 15.5, + 8.0 + ] + }, + { + "id": 419, + "relativePosition": [ + 13.2, + 16.0, + 8.0 + ] + }, + { + "id": 420, + "relativePosition": [ + 14.0, + 15.5, + 9.0 + ] + }, + { + "id": 421, + "relativePosition": [ + 13.2, + 16.0, + 9.0 + ] + }, + { + "id": 422, + "relativePosition": [ + 14.0, + 15.5, + 10.0 + ] + }, + { + "id": 423, + "relativePosition": [ + 13.2, + 16.0, + 10.0 + ] + }, + { + "id": 424, + "relativePosition": [ + 14.0, + 15.5, + 11.0 + ] + }, + { + "id": 425, + "relativePosition": [ + 13.2, + 16.0, + 11.0 + ] + }, + { + "id": 426, + "relativePosition": [ + 14.0, + 15.5, + 12.0 + ] + }, + { + "id": 427, + "relativePosition": [ + 13.2, + 16.0, + 12.0 + ] + }, + { + "id": 428, + "relativePosition": [ + 14.0, + 15.5, + 13.0 + ] + }, + { + "id": 429, + "relativePosition": [ + 13.2, + 16.0, + 13.0 + ] + }, + { + "id": 430, + "relativePosition": [ + 14.5, + 7.0, + 7.0 + ] + }, + { + "id": 431, + "relativePosition": [ + 14.5, + 7.0, + 8.0 + ] + }, + { + "id": 432, + "relativePosition": [ + 14.5, + 7.0, + 9.0 + ] + }, + { + "id": 433, + "relativePosition": [ + 14.5, + 7.0, + 10.0 + ] + }, + { + "id": 434, + "relativePosition": [ + 14.5, + 7.0, + 11.0 + ] + }, + { + "id": 435, + "relativePosition": [ + 14.5, + 7.0, + 12.0 + ] + }, + { + "id": 436, + "relativePosition": [ + 14.5, + 7.0, + 13.0 + ] + }, + { + "id": 437, + "relativePosition": [ + 15.0, + 8.0, + 7.0 + ] + }, + { + "id": 438, + "relativePosition": [ + 15.0, + 7.5, + 7.0 + ] + }, + { + "id": 439, + "relativePosition": [ + 15.0, + 7.5, + 8.0 + ] + }, + { + "id": 440, + "relativePosition": [ + 15.0, + 7.5, + 9.0 + ] + }, + { + "id": 441, + "relativePosition": [ + 15.0, + 7.5, + 10.0 + ] + }, + { + "id": 442, + "relativePosition": [ + 15.0, + 7.5, + 11.0 + ] + }, + { + "id": 443, + "relativePosition": [ + 15.0, + 7.5, + 12.0 + ] + }, + { + "id": 444, + "relativePosition": [ + 15.0, + 7.5, + 13.0 + ] + }, + { + "id": 445, + "relativePosition": [ + 15.0, + 8.0, + 13.0 + ] + }, + { + "id": 446, + "relativePosition": [ + 14.65, + 9.0, + 7.0 + ] + }, + { + "id": 447, + "relativePosition": [ + 15.0, + 9.0, + 7.0 + ] + }, + { + "id": 448, + "relativePosition": [ + 14.65, + 9.0, + 8.0 + ] + }, + { + "id": 449, + "relativePosition": [ + 14.65, + 9.0, + 9.0 + ] + }, + { + "id": 450, + "relativePosition": [ + 14.65, + 9.0, + 10.0 + ] + }, + { + "id": 451, + "relativePosition": [ + 14.65, + 9.0, + 11.0 + ] + }, + { + "id": 452, + "relativePosition": [ + 14.65, + 9.0, + 12.0 + ] + }, + { + "id": 453, + "relativePosition": [ + 14.65, + 9.0, + 13.0 + ] + }, + { + "id": 454, + "relativePosition": [ + 15.0, + 9.0, + 13.0 + ] + }, + { + "id": 455, + "relativePosition": [ + 15.0, + 10.0, + 7.0 + ] + }, + { + "id": 456, + "relativePosition": [ + 15.0, + 10.0, + 8.0 + ] + }, + { + "id": 457, + "relativePosition": [ + 15.0, + 10.0, + 9.0 + ] + }, + { + "id": 458, + "relativePosition": [ + 15.0, + 10.0, + 10.0 + ] + }, + { + "id": 459, + "relativePosition": [ + 15.0, + 10.0, + 11.0 + ] + }, + { + "id": 460, + "relativePosition": [ + 15.0, + 10.0, + 12.0 + ] + }, + { + "id": 461, + "relativePosition": [ + 15.0, + 10.0, + 13.0 + ] + }, + { + "id": 462, + "relativePosition": [ + 15.0, + 10.2, + 7.0 + ] + }, + { + "id": 463, + "relativePosition": [ + 15.0, + 10.2, + 8.0 + ] + }, + { + "id": 464, + "relativePosition": [ + 15.0, + 11.0, + 8.0 + ] + }, + { + "id": 465, + "relativePosition": [ + 15.0, + 11.0, + 7.0 + ] + }, + { + "id": 466, + "relativePosition": [ + 15.0, + 10.2, + 9.0 + ] + }, + { + "id": 467, + "relativePosition": [ + 15.0, + 11.0, + 9.0 + ] + }, + { + "id": 468, + "relativePosition": [ + 15.0, + 10.2, + 10.0 + ] + }, + { + "id": 469, + "relativePosition": [ + 15.0, + 11.0, + 10.0 + ] + }, + { + "id": 470, + "relativePosition": [ + 15.0, + 10.2, + 11.0 + ] + }, + { + "id": 471, + "relativePosition": [ + 15.0, + 11.0, + 11.0 + ] + }, + { + "id": 472, + "relativePosition": [ + 15.0, + 10.2, + 12.0 + ] + }, + { + "id": 473, + "relativePosition": [ + 15.0, + 11.0, + 12.0 + ] + }, + { + "id": 474, + "relativePosition": [ + 15.0, + 10.2, + 13.0 + ] + }, + { + "id": 475, + "relativePosition": [ + 15.0, + 11.0, + 13.0 + ] + }, + { + "id": 476, + "relativePosition": [ + 15.0, + 11.65, + 8.0 + ] + }, + { + "id": 477, + "relativePosition": [ + 15.0, + 11.65, + 7.0 + ] + }, + { + "id": 478, + "relativePosition": [ + 15.0, + 12.0, + 8.0 + ] + }, + { + "id": 479, + "relativePosition": [ + 15.0, + 12.0, + 7.0 + ] + }, + { + "id": 480, + "relativePosition": [ + 15.0, + 11.65, + 9.0 + ] + }, + { + "id": 481, + "relativePosition": [ + 15.0, + 12.0, + 9.0 + ] + }, + { + "id": 482, + "relativePosition": [ + 15.0, + 11.65, + 10.0 + ] + }, + { + "id": 483, + "relativePosition": [ + 15.0, + 12.0, + 10.0 + ] + }, + { + "id": 484, + "relativePosition": [ + 15.0, + 11.65, + 11.0 + ] + }, + { + "id": 485, + "relativePosition": [ + 15.0, + 12.0, + 11.0 + ] + }, + { + "id": 486, + "relativePosition": [ + 15.0, + 11.65, + 12.0 + ] + }, + { + "id": 487, + "relativePosition": [ + 15.0, + 12.0, + 12.0 + ] + }, + { + "id": 488, + "relativePosition": [ + 15.0, + 11.65, + 13.0 + ] + }, + { + "id": 489, + "relativePosition": [ + 15.0, + 12.0, + 13.0 + ] + }, + { + "id": 490, + "relativePosition": [ + 14.65, + 13.0, + 7.0 + ] + }, + { + "id": 491, + "relativePosition": [ + 15.0, + 13.0, + 7.0 + ] + }, + { + "id": 492, + "relativePosition": [ + 14.65, + 13.0, + 8.0 + ] + }, + { + "id": 493, + "relativePosition": [ + 14.65, + 13.0, + 9.0 + ] + }, + { + "id": 494, + "relativePosition": [ + 14.65, + 13.0, + 10.0 + ] + }, + { + "id": 495, + "relativePosition": [ + 14.65, + 13.0, + 11.0 + ] + }, + { + "id": 496, + "relativePosition": [ + 14.65, + 13.0, + 12.0 + ] + }, + { + "id": 497, + "relativePosition": [ + 14.65, + 13.0, + 13.0 + ] + }, + { + "id": 498, + "relativePosition": [ + 15.0, + 13.0, + 13.0 + ] + }, + { + "id": 499, + "relativePosition": [ + 15.0, + 14.0, + 7.0 + ] + }, + { + "id": 500, + "relativePosition": [ + 15.0, + 14.0, + 13.0 + ] + }, + { + "id": 501, + "relativePosition": [ + 14.5, + 15.0, + 7.0 + ] + }, + { + "id": 502, + "relativePosition": [ + 15.0, + 14.35, + 7.0 + ] + }, + { + "id": 503, + "relativePosition": [ + 15.0, + 14.35, + 8.0 + ] + }, + { + "id": 504, + "relativePosition": [ + 14.5, + 15.0, + 8.0 + ] + }, + { + "id": 505, + "relativePosition": [ + 15.0, + 14.35, + 9.0 + ] + }, + { + "id": 506, + "relativePosition": [ + 14.5, + 15.0, + 9.0 + ] + }, + { + "id": 507, + "relativePosition": [ + 15.0, + 14.35, + 10.0 + ] + }, + { + "id": 508, + "relativePosition": [ + 14.5, + 15.0, + 10.0 + ] + }, + { + "id": 509, + "relativePosition": [ + 15.0, + 14.35, + 11.0 + ] + }, + { + "id": 510, + "relativePosition": [ + 14.5, + 15.0, + 11.0 + ] + }, + { + "id": 511, + "relativePosition": [ + 15.0, + 14.35, + 12.0 + ] + }, + { + "id": 512, + "relativePosition": [ + 14.5, + 15.0, + 12.0 + ] + }, + { + "id": 513, + "relativePosition": [ + 15.0, + 14.35, + 13.0 + ] + }, + { + "id": 514, + "relativePosition": [ + 14.5, + 15.0, + 13.0 + ] + }, + { + "id": 515, + "relativePosition": [ + 15.35, + 8.0, + 7.0 + ] + }, + { + "id": 516, + "relativePosition": [ + 15.35, + 8.0, + 8.0 + ] + }, + { + "id": 517, + "relativePosition": [ + 15.35, + 8.0, + 9.0 + ] + }, + { + "id": 518, + "relativePosition": [ + 15.35, + 8.0, + 10.0 + ] + }, + { + "id": 519, + "relativePosition": [ + 15.35, + 8.0, + 11.0 + ] + }, + { + "id": 520, + "relativePosition": [ + 15.35, + 8.0, + 12.0 + ] + }, + { + "id": 521, + "relativePosition": [ + 15.35, + 8.0, + 13.0 + ] + }, + { + "id": 522, + "relativePosition": [ + 15.8, + 9.0, + 7.0 + ] + }, + { + "id": 523, + "relativePosition": [ + 15.8, + 9.0, + 8.0 + ] + }, + { + "id": 524, + "relativePosition": [ + 15.8, + 9.0, + 9.0 + ] + }, + { + "id": 525, + "relativePosition": [ + 15.8, + 9.0, + 10.0 + ] + }, + { + "id": 526, + "relativePosition": [ + 15.8, + 9.0, + 11.0 + ] + }, + { + "id": 527, + "relativePosition": [ + 15.8, + 9.0, + 12.0 + ] + }, + { + "id": 528, + "relativePosition": [ + 15.8, + 9.0, + 13.0 + ] + }, + { + "id": 529, + "relativePosition": [ + 16.0, + 10.0, + 7.0 + ] + }, + { + "id": 530, + "relativePosition": [ + 16.0, + 10.0, + 8.0 + ] + }, + { + "id": 531, + "relativePosition": [ + 16.0, + 10.0, + 9.0 + ] + }, + { + "id": 532, + "relativePosition": [ + 16.0, + 10.0, + 10.0 + ] + }, + { + "id": 533, + "relativePosition": [ + 16.0, + 10.0, + 11.0 + ] + }, + { + "id": 534, + "relativePosition": [ + 16.0, + 10.0, + 12.0 + ] + }, + { + "id": 535, + "relativePosition": [ + 16.0, + 10.0, + 13.0 + ] + }, + { + "id": 536, + "relativePosition": [ + 16.0, + 11.0, + 7.0 + ] + }, + { + "id": 537, + "relativePosition": [ + 16.0, + 11.0, + 8.0 + ] + }, + { + "id": 538, + "relativePosition": [ + 16.0, + 11.0, + 9.0 + ] + }, + { + "id": 539, + "relativePosition": [ + 16.0, + 11.0, + 10.0 + ] + }, + { + "id": 540, + "relativePosition": [ + 16.0, + 11.0, + 11.0 + ] + }, + { + "id": 541, + "relativePosition": [ + 16.0, + 11.0, + 12.0 + ] + }, + { + "id": 542, + "relativePosition": [ + 16.0, + 11.0, + 13.0 + ] + }, + { + "id": 543, + "relativePosition": [ + 16.0, + 12.0, + 7.0 + ] + }, + { + "id": 544, + "relativePosition": [ + 16.0, + 11.8, + 7.0 + ] + }, + { + "id": 545, + "relativePosition": [ + 16.0, + 11.8, + 8.0 + ] + }, + { + "id": 546, + "relativePosition": [ + 16.0, + 12.0, + 8.0 + ] + }, + { + "id": 547, + "relativePosition": [ + 16.0, + 11.8, + 9.0 + ] + }, + { + "id": 548, + "relativePosition": [ + 16.0, + 12.0, + 9.0 + ] + }, + { + "id": 549, + "relativePosition": [ + 16.0, + 11.8, + 10.0 + ] + }, + { + "id": 550, + "relativePosition": [ + 16.0, + 12.0, + 10.0 + ] + }, + { + "id": 551, + "relativePosition": [ + 16.0, + 11.8, + 11.0 + ] + }, + { + "id": 552, + "relativePosition": [ + 16.0, + 12.0, + 11.0 + ] + }, + { + "id": 553, + "relativePosition": [ + 16.0, + 11.8, + 12.0 + ] + }, + { + "id": 554, + "relativePosition": [ + 16.0, + 12.0, + 12.0 + ] + }, + { + "id": 555, + "relativePosition": [ + 16.0, + 11.8, + 13.0 + ] + }, + { + "id": 556, + "relativePosition": [ + 16.0, + 12.0, + 13.0 + ] + }, + { + "id": 557, + "relativePosition": [ + 15.65, + 13.0, + 7.0 + ] + }, + { + "id": 558, + "relativePosition": [ + 15.65, + 13.0, + 8.0 + ] + }, + { + "id": 559, + "relativePosition": [ + 15.65, + 13.0, + 9.0 + ] + }, + { + "id": 560, + "relativePosition": [ + 15.65, + 13.0, + 10.0 + ] + }, + { + "id": 561, + "relativePosition": [ + 15.65, + 13.0, + 11.0 + ] + }, + { + "id": 562, + "relativePosition": [ + 15.65, + 13.0, + 12.0 + ] + }, + { + "id": 563, + "relativePosition": [ + 15.65, + 13.0, + 13.0 + ] + }, + { + "id": 564, + "relativePosition": [ + 15.2, + 14.0, + 7.0 + ] + }, + { + "id": 565, + "relativePosition": [ + 15.2, + 14.0, + 8.0 + ] + }, + { + "id": 566, + "relativePosition": [ + 15.2, + 14.0, + 9.0 + ] + }, + { + "id": 567, + "relativePosition": [ + 15.2, + 14.0, + 10.0 + ] + }, + { + "id": 568, + "relativePosition": [ + 15.2, + 14.0, + 11.0 + ] + }, + { + "id": 569, + "relativePosition": [ + 15.2, + 14.0, + 12.0 + ] + }, + { + "id": 570, + "relativePosition": [ + 15.2, + 14.0, + 13.0 + ] + }, + { + "id": 571, + "relativePosition": [ + 10.0, + 6.0, + 13.0 + ] + }, + { + "id": 572, + "relativePosition": [ + 11.0, + 6.0, + 13.0 + ] + } + ], + "elements": [ + { + "id": 1, "type": "conformal", - "subtype": "volume", - "intervals": [ - [ - [ - 9.0, - 5.0, - 7.0 - ], - [ - 10.0, - 5.0, - 8.0 - ] - ], - [ - [ - 10.0, - 6.0, - 7.0 - ], - [ - 9.0, - 5.0, - 7.0 - ] - ], - [ - [ - 10.0, - 5.0, - 7.0 - ], - [ - 10.0, - 6.0, - 8.0 - ] - ], - [ - [ - 9.0, - 5.0, - 8.0 - ], - [ - 10.0, - 5.0, - 9.0 - ] - ], - [ - [ - 10.0, - 5.0, - 8.0 - ], - [ - 10.0, - 6.0, - 9.0 - ] - ], - [ - [ - 9.0, - 5.0, - 9.0 - ], - [ - 10.0, - 5.0, - 10.0 - ] - ], - [ - [ - 10.0, - 5.0, - 9.0 - ], - [ - 10.0, - 6.0, - 10.0 - ] - ], - [ - [ - 9.0, - 5.0, - 10.0 - ], - [ - 10.0, - 5.0, - 11.0 - ] - ], - [ - [ - 10.0, - 5.0, - 10.0 - ], - [ - 10.0, - 6.0, - 11.0 - ] - ], - [ - [ - 9.0, - 5.0, - 11.0 - ], - [ - 10.0, - 5.0, - 12.0 - ] - ], - [ - [ - 10.0, - 5.0, - 11.0 - ], - [ - 10.0, - 6.0, - 12.0 - ] - ], - [ - [ - 9.0, - 5.0, - 12.0 - ], - [ - 10.0, - 5.0, - 13.0 - ] - ], - [ - [ - 10.0, - 5.0, - 12.0 - ], - [ - 10.0, - 6.0, - 13.0 - ] - ], - [ - [ - 10.0, - 6.0, - 13.0 - ], - [ - 9.0, - 5.0, - 13.0 - ] - ], - [ - [ - 10.0, - 6.0, - 8.0 - ], - [ - 9.0, - 6.0, - 7.0 - ] - ], - [ - [ - 10.0, - 6.0, - 9.0 - ], - [ - 9.0, - 6.0, - 8.0 - ] - ], - [ - [ - 10.0, - 6.0, - 10.0 - ], - [ - 9.0, - 6.0, - 9.0 - ] - ], - [ - [ - 10.0, - 6.0, - 11.0 - ], - [ - 9.0, - 6.0, - 10.0 - ] - ], - [ - [ - 10.0, - 6.0, - 12.0 - ], - [ - 9.0, - 6.0, - 11.0 - ] - ], - [ - [ - 10.0, - 6.0, - 13.0 - ], - [ - 9.0, - 6.0, - 12.0 - ] - ], - [ - [ - 11.0, - 5.0, - 7.0 - ], - [ - 11.0, - 6.0, - 8.0 - ] - ], - [ - [ - 11.0, - 5.0, - 8.0 - ], - [ - 11.0, - 6.0, - 9.0 - ] - ], - [ - [ - 11.0, - 5.0, - 9.0 - ], - [ - 11.0, - 6.0, - 10.0 - ] - ], - [ - [ - 11.0, - 5.0, - 10.0 - ], - [ - 11.0, - 6.0, - 11.0 - ] - ], - [ - [ - 11.0, - 5.0, - 11.0 - ], - [ - 11.0, - 6.0, - 12.0 - ] - ], - [ - [ - 11.0, - 5.0, - 12.0 - ], - [ - 11.0, - 6.0, - 13.0 - ] - ], - [ - [ - 11.0, - 5.0, - 7.0 - ], - [ - 12.0, - 5.0, - 8.0 - ] - ], - [ - [ - 11.0, - 5.0, - 7.0 - ], - [ - 12.0, - 6.0, - 7.0 - ] - ], - [ - [ - 11.0, - 5.0, - 8.0 - ], - [ - 12.0, - 5.0, - 9.0 - ] - ], - [ - [ - 11.0, - 5.0, - 9.0 - ], - [ - 12.0, - 5.0, - 10.0 - ] - ], - [ - [ - 11.0, - 5.0, - 10.0 - ], - [ - 12.0, - 5.0, - 11.0 - ] - ], - [ - [ - 11.0, - 5.0, - 11.0 - ], - [ - 12.0, - 5.0, - 12.0 - ] - ], - [ - [ - 11.0, - 5.0, - 12.0 - ], - [ - 12.0, - 5.0, - 13.0 - ] - ], - [ - [ - 11.0, - 5.0, - 13.0 - ], - [ - 12.0, - 6.0, - 13.0 - ] - ], - [ - [ - 12.0, - 6.0, - 8.0 - ], - [ - 11.0, - 6.0, - 7.0 - ] - ], - [ - [ - 12.0, - 6.0, - 9.0 - ], - [ - 11.0, - 6.0, - 8.0 - ] - ], - [ - [ - 12.0, - 6.0, - 10.0 - ], - [ - 11.0, - 6.0, - 9.0 - ] - ], - [ - [ - 12.0, - 6.0, - 11.0 - ], - [ - 11.0, - 6.0, - 10.0 - ] - ], - [ - [ - 12.0, - 6.0, - 12.0 - ], - [ - 11.0, - 6.0, - 11.0 - ] - ], - [ - [ - 12.0, - 6.0, - 13.0 - ], - [ - 11.0, - 6.0, - 12.0 - ] - ] - ], - "triangles": [ - [ - 1, - 2, - 3 - ], - [ - 2, - 4, - 3 - ], - [ - 2, - 5, - 4 - ], - [ - 5, - 6, - 4 - ], - [ - 5, - 7, - 6 - ], - [ - 7, - 8, - 6 - ], - [ - 7, - 9, - 8 - ], - [ - 9, - 10, - 8 - ], - [ - 9, - 11, - 10 - ], - [ - 11, - 12, - 10 - ], - [ - 11, - 13, - 12 - ], - [ - 13, - 14, - 12 - ], - [ - 13, - 15, - 14 - ], - [ - 15, - 16, - 14 - ], - [ - 17, - 3, - 18 - ], - [ - 17, - 1, - 3 - ], - [ - 3, - 19, - 18 - ], - [ - 3, - 4, - 19 - ], - [ - 4, - 20, - 19 - ], - [ - 4, - 6, - 20 - ], - [ - 6, - 21, - 20 - ], - [ - 6, - 8, - 21 - ], - [ - 8, - 22, - 21 - ], - [ - 8, - 10, - 22 - ], - [ - 10, - 23, - 22 - ], - [ - 10, - 12, - 23 - ], - [ - 14, - 24, - 23 - ], - [ - 12, - 14, - 23 - ], - [ - 14, - 16, - 25 - ], - [ - 14, - 25, - 24 - ], - [ - 26, - 17, - 18 - ], - [ - 27, - 26, - 18 - ], - [ - 18, - 28, - 27 - ], - [ - 18, - 19, - 28 - ], - [ - 19, - 29, - 28 - ], - [ - 19, - 20, - 29 - ], - [ - 20, - 30, - 29 - ], - [ - 20, - 21, - 30 - ], - [ - 21, - 31, - 30 - ], - [ - 21, - 22, - 31 - ], - [ - 22, - 32, - 31 - ], - [ - 22, - 23, - 32 - ], - [ - 24, - 33, - 32 - ], - [ - 23, - 24, - 32 - ], - [ - 25, - 34, - 24 - ], - [ - 24, - 34, - 33 - ], - [ - 35, - 26, - 27 - ], - [ - 36, - 35, - 27 - ], - [ - 28, - 36, - 27 - ], - [ - 28, - 37, - 36 - ], - [ - 29, - 37, - 28 - ], - [ - 29, - 38, - 37 - ], - [ - 30, - 38, - 29 - ], - [ - 30, - 39, - 38 - ], - [ - 31, - 39, - 30 - ], - [ - 31, - 40, - 39 - ], - [ - 32, - 41, - 40 - ], - [ - 32, - 40, - 31 - ], - [ - 33, - 41, - 32 - ], - [ - 33, - 42, - 41 - ], - [ - 34, - 43, - 33 - ], - [ - 33, - 43, - 42 - ], - [ - 44, - 45, - 35 - ], - [ - 44, - 35, - 36 - ], - [ - 36, - 46, - 44 - ], - [ - 36, - 37, - 46 - ], - [ - 37, - 47, - 46 - ], - [ - 37, - 38, - 47 - ], - [ - 39, - 48, - 38 - ], - [ - 38, - 48, - 47 - ], - [ - 40, - 48, - 39 - ], - [ - 40, - 49, - 48 - ], - [ - 41, - 49, - 40 - ], - [ - 41, - 50, - 49 - ], - [ - 42, - 50, - 41 - ], - [ - 42, - 51, - 50 - ], - [ - 43, - 51, - 42 - ], - [ - 43, - 52, - 51 - ], - [ - 53, - 45, - 44 - ], - [ - 46, - 53, - 44 - ], - [ - 46, - 54, - 53 - ], - [ - 47, - 54, - 46 - ], - [ - 47, - 55, - 54 - ], - [ - 48, - 56, - 47 - ], - [ - 56, - 55, - 47 - ], - [ - 49, - 56, - 48 - ], - [ - 49, - 57, - 56 - ], - [ - 50, - 57, - 49 - ], - [ - 50, - 58, - 57 - ], - [ - 51, - 58, - 50 - ], - [ - 51, - 59, - 58 - ], - [ - 52, - 59, - 51 - ], - [ - 60, - 61, - 62 - ], - [ - 61, - 63, - 62 - ], - [ - 61, - 64, - 63 - ], - [ - 64, - 65, - 63 - ], - [ - 64, - 66, - 65 - ], - [ - 66, - 67, - 65 - ], - [ - 66, - 68, - 67 - ], - [ - 68, - 69, - 67 - ], - [ - 68, - 70, - 69 - ], - [ - 70, - 71, - 69 - ], - [ - 70, - 72, - 71 - ], - [ - 72, - 73, - 71 - ], - [ - 72, - 74, - 73 - ], - [ - 74, - 75, - 73 - ], - [ - 76, - 62, - 2 - ], - [ - 76, - 60, - 62 - ], - [ - 62, - 5, - 2 - ], - [ - 62, - 63, - 5 - ], - [ - 63, - 7, - 5 - ], - [ - 63, - 65, - 7 - ], - [ - 65, - 9, - 7 - ], - [ - 65, - 67, - 9 - ], - [ - 67, - 11, - 9 - ], - [ - 67, - 69, - 11 - ], - [ - 69, - 13, - 11 - ], - [ - 69, - 71, - 13 - ], - [ - 71, - 15, - 13 - ], - [ - 71, - 73, - 15 - ], - [ - 73, - 75, - 77 - ], - [ - 73, - 77, - 15 - ], - [ - 78, - 2, - 1 - ], - [ - 78, - 79, - 2 - ], - [ - 79, - 76, - 2 - ], - [ - 80, - 78, - 81 - ], - [ - 80, - 79, - 78 - ], - [ - 82, - 80, - 81 - ], - [ - 82, - 81, - 83 - ], - [ - 84, - 83, - 85 - ], - [ - 84, - 82, - 83 - ], - [ - 86, - 85, - 87 - ], - [ - 86, - 84, - 85 - ], - [ - 88, - 87, - 89 - ], - [ - 88, - 86, - 87 - ], - [ - 90, - 89, - 91 - ], - [ - 90, - 88, - 89 - ], - [ - 15, - 90, - 91 - ], - [ - 15, - 77, - 90 - ], - [ - 15, - 91, - 16 - ], - [ - 92, - 78, - 1 - ], - [ - 92, - 1, - 17 - ], - [ - 78, - 93, - 81 - ], - [ - 78, - 92, - 93 - ], - [ - 81, - 94, - 83 - ], - [ - 81, - 93, - 94 - ], - [ - 83, - 95, - 85 - ], - [ - 83, - 94, - 95 - ], - [ - 85, - 96, - 87 - ], - [ - 85, - 95, - 96 - ], - [ - 87, - 97, - 89 - ], - [ - 87, - 96, - 97 - ], - [ - 89, - 97, - 98 - ], - [ - 91, - 89, - 98 - ], - [ - 16, - 91, - 98 - ], - [ - 16, - 98, - 25 - ], - [ - 99, - 92, - 17 - ], - [ - 99, - 17, - 26 - ], - [ - 92, - 100, - 93 - ], - [ - 92, - 99, - 100 - ], - [ - 93, - 100, - 101 - ], - [ - 94, - 93, - 101 - ], - [ - 95, - 101, - 102 - ], - [ - 95, - 94, - 101 - ], - [ - 96, - 102, - 103 - ], - [ - 96, - 95, - 102 - ], - [ - 97, - 103, - 104 - ], - [ - 97, - 96, - 103 - ], - [ - 98, - 104, - 105 - ], - [ - 98, - 97, - 104 - ], - [ - 98, - 34, - 25 - ], - [ - 98, - 105, - 34 - ], - [ - 106, - 99, - 26 - ], - [ - 106, - 26, - 35 - ], - [ - 99, - 107, - 100 - ], - [ - 99, - 106, - 107 - ], - [ - 100, - 108, - 101 - ], - [ - 100, - 107, - 108 - ], - [ - 102, - 108, - 109 - ], - [ - 101, - 108, - 102 - ], - [ - 103, - 109, - 110 - ], - [ - 103, - 102, - 109 - ], - [ - 104, - 110, - 111 - ], - [ - 104, - 103, - 110 - ], - [ - 105, - 111, - 112 - ], - [ - 105, - 104, - 111 - ], - [ - 105, - 43, - 34 - ], - [ - 105, - 112, - 43 - ], - [ - 45, - 113, - 106 - ], - [ - 45, - 106, - 35 - ], - [ - 106, - 114, - 107 - ], - [ - 106, - 113, - 114 - ], - [ - 108, - 114, - 115 - ], - [ - 107, - 114, - 108 - ], - [ - 109, - 115, - 116 - ], - [ - 109, - 108, - 115 - ], - [ - 110, - 116, - 117 - ], - [ - 110, - 109, - 116 - ], - [ - 111, - 117, - 118 - ], - [ - 111, - 110, - 117 - ], - [ - 112, - 118, - 119 - ], - [ - 112, - 111, - 118 - ], - [ - 112, - 52, - 43 - ], - [ - 112, - 119, - 52 - ], - [ - 120, - 121, - 53 - ], - [ - 53, - 121, - 113 - ], - [ - 53, - 113, - 45 - ], - [ - 113, - 122, - 114 - ], - [ - 113, - 121, - 122 - ], - [ - 114, - 123, - 115 - ], - [ - 114, - 122, - 123 - ], - [ - 115, - 124, - 116 - ], - [ - 115, - 123, - 124 - ], - [ - 116, - 125, - 117 - ], - [ - 116, - 124, - 125 - ], - [ - 117, - 125, - 126 - ], - [ - 117, - 126, - 118 - ], - [ - 118, - 127, - 119 - ], - [ - 118, - 126, - 127 - ], - [ - 52, - 119, - 59 - ], - [ - 119, - 127, - 59 - ], - [ - 127, - 128, - 59 - ], - [ - 129, - 130, - 120 - ], - [ - 129, - 120, - 53 - ], - [ - 131, - 129, - 53 - ], - [ - 54, - 131, - 53 - ], - [ - 55, - 131, - 54 - ], - [ - 55, - 132, - 131 - ], - [ - 56, - 132, - 55 - ], - [ - 56, - 133, - 132 - ], - [ - 57, - 133, - 56 - ], - [ - 57, - 134, - 133 - ], - [ - 58, - 134, - 57 - ], - [ - 58, - 135, - 134 - ], - [ - 59, - 135, - 58 - ], - [ - 59, - 136, - 135 - ], - [ - 128, - 136, - 59 - ], - [ - 128, - 137, - 136 - ], - [ - 138, - 130, - 129 - ], - [ - 131, - 138, - 129 - ], - [ - 131, - 139, - 138 - ], - [ - 132, - 139, - 131 - ], - [ - 132, - 140, - 139 - ], - [ - 133, - 141, - 140 - ], - [ - 133, - 140, - 132 - ], - [ - 134, - 141, - 133 - ], - [ - 134, - 142, - 141 - ], - [ - 135, - 142, - 134 - ], - [ - 135, - 143, - 142 - ], - [ - 136, - 143, - 135 - ], - [ - 136, - 144, - 143 - ], - [ - 136, - 137, - 144 - ], - [ - 145, - 146, - 147 - ], - [ - 146, - 148, - 147 - ], - [ - 146, - 149, - 148 - ], - [ - 149, - 150, - 148 - ], - [ - 149, - 151, - 150 - ], - [ - 151, - 152, - 150 - ], - [ - 151, - 153, - 152 - ], - [ - 153, - 154, - 152 - ], - [ - 153, - 155, - 154 - ], - [ - 155, - 156, - 154 - ], - [ - 155, - 157, - 156 - ], - [ - 157, - 158, - 156 - ], - [ - 157, - 159, - 158 - ], - [ - 159, - 160, - 158 - ], - [ - 161, - 145, - 147 - ], - [ - 161, - 147, - 61 - ], - [ - 161, - 61, - 60 - ], - [ - 147, - 64, - 61 - ], - [ - 147, - 148, - 64 - ], - [ - 148, - 66, - 64 - ], - [ - 148, - 150, - 66 - ], - [ - 150, - 68, - 66 - ], - [ - 150, - 152, - 68 - ], - [ - 152, - 70, - 68 - ], - [ - 152, - 154, - 70 - ], - [ - 154, - 72, - 70 - ], - [ - 154, - 156, - 72 - ], - [ - 72, - 158, - 74 - ], - [ - 156, - 158, - 72 - ], - [ - 158, - 160, - 162 - ], - [ - 158, - 75, - 74 - ], - [ - 158, - 162, - 75 - ], - [ - 163, - 60, - 76 - ], - [ - 164, - 161, - 60 - ], - [ - 163, - 164, - 60 - ], - [ - 165, - 163, - 166 - ], - [ - 165, - 164, - 163 - ], - [ - 167, - 165, - 166 - ], - [ - 167, - 166, - 168 - ], - [ - 169, - 168, - 170 - ], - [ - 169, - 167, - 168 - ], - [ - 171, - 170, - 172 - ], - [ - 171, - 169, - 170 - ], - [ - 173, - 172, - 174 - ], - [ - 173, - 171, - 172 - ], - [ - 175, - 174, - 176 - ], - [ - 175, - 173, - 174 - ], - [ - 75, - 162, - 175 - ], - [ - 75, - 176, - 77 - ], - [ - 75, - 175, - 176 - ], - [ - 79, - 163, - 76 - ], - [ - 166, - 79, - 80 - ], - [ - 166, - 163, - 79 - ], - [ - 168, - 80, - 82 - ], - [ - 168, - 166, - 80 - ], - [ - 84, - 168, - 82 - ], - [ - 170, - 168, - 84 - ], - [ - 172, - 84, - 86 - ], - [ - 172, - 170, - 84 - ], - [ - 174, - 86, - 88 - ], - [ - 174, - 172, - 86 - ], - [ - 176, - 88, - 90 - ], - [ - 176, - 174, - 88 - ], - [ - 77, - 176, - 90 - ], - [ - 177, - 121, - 120 - ], - [ - 121, - 178, - 122 - ], - [ - 121, - 177, - 178 - ], - [ - 122, - 179, - 123 - ], - [ - 122, - 178, - 179 - ], - [ - 123, - 180, - 124 - ], - [ - 123, - 179, - 180 - ], - [ - 124, - 181, - 125 - ], - [ - 124, - 180, - 181 - ], - [ - 125, - 182, - 126 - ], - [ - 125, - 181, - 182 - ], - [ - 182, - 183, - 127 - ], - [ - 126, - 182, - 127 - ], - [ - 127, - 183, - 128 - ], - [ - 184, - 185, - 130 - ], - [ - 130, - 185, - 177 - ], - [ - 130, - 177, - 120 - ], - [ - 177, - 186, - 178 - ], - [ - 177, - 185, - 186 - ], - [ - 178, - 187, - 179 - ], - [ - 178, - 186, - 187 - ], - [ - 179, - 188, - 180 - ], - [ - 179, - 187, - 188 - ], - [ - 180, - 189, - 181 - ], - [ - 180, - 188, - 189 - ], - [ - 181, - 190, - 182 - ], - [ - 181, - 189, - 190 - ], - [ - 182, - 190, - 191 - ], - [ - 182, - 191, - 183 - ], - [ - 191, - 192, - 137 - ], - [ - 183, - 137, - 128 - ], - [ - 183, - 191, - 137 - ], - [ - 193, - 184, - 138 - ], - [ - 138, - 184, - 130 - ], - [ - 139, - 193, - 138 - ], - [ - 139, - 194, - 193 - ], - [ - 195, - 194, - 139 - ], - [ - 140, - 195, - 139 - ], - [ - 141, - 195, - 140 - ], - [ - 141, - 196, - 195 - ], - [ - 142, - 196, - 141 - ], - [ - 142, - 197, - 196 - ], - [ - 143, - 197, - 142 - ], - [ - 143, - 198, - 197 - ], - [ - 144, - 198, - 143 - ], - [ - 144, - 199, - 198 - ], - [ - 192, - 199, - 144 - ], - [ - 137, - 192, - 144 - ], - [ - 200, - 201, - 146 - ], - [ - 200, - 146, - 145 - ], - [ - 201, - 149, - 146 - ], - [ - 201, - 202, - 149 - ], - [ - 202, - 151, - 149 - ], - [ - 202, - 203, - 151 - ], - [ - 203, - 153, - 151 - ], - [ - 203, - 204, - 153 - ], - [ - 204, - 155, - 153 - ], - [ - 204, - 205, - 155 - ], - [ - 205, - 157, - 155 - ], - [ - 205, - 206, - 157 - ], - [ - 206, - 159, - 157 - ], - [ - 206, - 207, - 159 - ], - [ - 207, - 160, - 159 - ], - [ - 207, - 208, - 160 - ], - [ - 209, - 200, - 145 - ], - [ - 210, - 209, - 145 - ], - [ - 210, - 145, - 161 - ], - [ - 211, - 210, - 212 - ], - [ - 211, - 209, - 210 - ], - [ - 213, - 211, - 212 - ], - [ - 213, - 212, - 214 - ], - [ - 215, - 214, - 216 - ], - [ - 215, - 213, - 214 - ], - [ - 217, - 216, - 218 - ], - [ - 217, - 215, - 216 - ], - [ - 219, - 218, - 220 - ], - [ - 219, - 217, - 218 - ], - [ - 221, - 220, - 222 - ], - [ - 221, - 219, - 220 - ], - [ - 160, - 208, - 221 - ], - [ - 160, - 221, - 222 - ], - [ - 160, - 222, - 162 - ], - [ - 164, - 210, - 161 - ], - [ - 212, - 164, - 165 - ], - [ - 212, - 210, - 164 - ], - [ - 214, - 165, - 167 - ], - [ - 214, - 212, - 165 - ], - [ - 216, - 167, - 169 - ], - [ - 216, - 214, - 167 - ], - [ - 218, - 169, - 171 - ], - [ - 218, - 216, - 169 - ], - [ - 220, - 171, - 173 - ], - [ - 220, - 218, - 171 - ], - [ - 222, - 220, - 173 - ], - [ - 222, - 173, - 175 - ], - [ - 162, - 222, - 175 - ], - [ - 184, - 223, - 185 - ], - [ - 185, - 224, - 186 - ], - [ - 185, - 223, - 224 - ], - [ - 186, - 225, - 187 - ], - [ - 186, - 224, - 225 - ], - [ - 187, - 226, - 188 - ], - [ - 187, - 225, - 226 - ], - [ - 188, - 226, - 227 - ], - [ - 188, - 227, - 189 - ], - [ - 189, - 228, - 190 - ], - [ - 189, - 227, - 228 - ], - [ - 190, - 229, - 191 - ], - [ - 190, - 228, - 229 - ], - [ - 191, - 229, - 192 - ], - [ - 230, - 231, - 193 - ], - [ - 193, - 231, - 223 - ], - [ - 193, - 223, - 184 - ], - [ - 223, - 231, - 224 - ], - [ - 231, - 232, - 224 - ], - [ - 224, - 233, - 225 - ], - [ - 224, - 232, - 233 - ], - [ - 225, - 234, - 226 - ], - [ - 225, - 233, - 234 - ], - [ - 226, - 235, - 227 - ], - [ - 226, - 234, - 235 - ], - [ - 227, - 236, - 228 - ], - [ - 227, - 235, - 236 - ], - [ - 228, - 237, - 229 - ], - [ - 228, - 236, - 237 - ], - [ - 237, - 238, - 199 - ], - [ - 229, - 237, - 199 - ], - [ - 192, - 229, - 199 - ], - [ - 239, - 230, - 193 - ], - [ - 194, - 239, - 193 - ], - [ - 194, - 240, - 239 - ], - [ - 195, - 240, - 194 - ], - [ - 195, - 241, - 240 - ], - [ - 196, - 241, - 195 - ], - [ - 196, - 242, - 241 - ], - [ - 197, - 242, - 196 - ], - [ - 197, - 243, - 242 - ], - [ - 244, - 243, - 197 - ], - [ - 198, - 244, - 197 - ], - [ - 199, - 244, - 198 - ], - [ - 199, - 245, - 244 - ], - [ - 199, - 238, - 245 - ], - [ - 246, - 247, - 201 - ], - [ - 246, - 201, - 200 - ], - [ - 247, - 202, - 201 - ], - [ - 247, - 248, - 202 - ], - [ - 248, - 203, - 202 - ], - [ - 248, - 249, - 203 - ], - [ - 249, - 204, - 203 - ], - [ - 249, - 250, - 204 - ], - [ - 250, - 205, - 204 - ], - [ - 250, - 251, - 205 - ], - [ - 251, - 206, - 205 - ], - [ - 251, - 252, - 206 - ], - [ - 252, - 207, - 206 - ], - [ - 252, - 253, - 207 - ], - [ - 253, - 254, - 207 - ], - [ - 207, - 254, - 208 - ], - [ - 209, - 246, - 200 - ], - [ - 255, - 209, - 211 - ], - [ - 255, - 246, - 209 - ], - [ - 256, - 211, - 213 - ], - [ - 256, - 255, - 211 - ], - [ - 215, - 256, - 213 - ], - [ - 257, - 256, - 215 - ], - [ - 258, - 215, - 217 - ], - [ - 258, - 257, - 215 - ], - [ - 259, - 217, - 219 - ], - [ - 259, - 258, - 217 - ], - [ - 254, - 219, - 221 - ], - [ - 254, - 259, - 219 - ], - [ - 208, - 254, - 221 - ], - [ - 260, - 261, - 230 - ], - [ - 230, - 261, - 231 - ], - [ - 231, - 262, - 232 - ], - [ - 231, - 261, - 262 - ], - [ - 232, - 263, - 233 - ], - [ - 232, - 262, - 263 - ], - [ - 233, - 264, - 234 - ], - [ - 233, - 263, - 264 - ], - [ - 234, - 265, - 235 - ], - [ - 234, - 264, - 265 - ], - [ - 235, - 266, - 236 - ], - [ - 235, - 265, - 266 - ], - [ - 236, - 266, - 237 - ], - [ - 266, - 267, - 237 - ], - [ - 237, - 267, - 268 - ], - [ - 237, - 268, - 238 - ], - [ - 269, - 260, - 230 - ], - [ - 269, - 230, - 239 - ], - [ - 240, - 269, - 239 - ], - [ - 240, - 270, - 269 - ], - [ - 241, - 270, - 240 - ], - [ - 241, - 271, - 270 - ], - [ - 242, - 271, - 241 - ], - [ - 242, - 272, - 271 - ], - [ - 243, - 272, - 242 - ], - [ - 243, - 273, - 272 - ], - [ - 244, - 273, - 243 - ], - [ - 244, - 274, - 273 - ], - [ - 275, - 274, - 244 - ], - [ - 245, - 275, - 244 - ], - [ - 238, - 275, - 245 - ], - [ - 238, - 268, - 275 - ], - [ - 276, - 277, - 261 - ], - [ - 276, - 261, - 260 - ], - [ - 261, - 278, - 262 - ], - [ - 261, - 277, - 278 - ], - [ - 262, - 279, - 263 - ], - [ - 262, - 278, - 279 - ], - [ - 263, - 280, - 264 - ], - [ - 263, - 279, - 280 - ], - [ - 264, - 281, - 265 - ], - [ - 264, - 280, - 281 - ], - [ - 265, - 281, - 266 - ], - [ - 281, - 282, - 266 - ], - [ - 266, - 283, - 267 - ], - [ - 266, - 282, - 283 - ], - [ - 267, - 284, - 268 - ], - [ - 267, - 283, - 284 - ], - [ - 285, - 276, - 269 - ], - [ - 269, - 276, - 260 - ], - [ - 286, - 285, - 269 - ], - [ - 270, - 286, - 269 - ], - [ - 271, - 286, - 270 - ], - [ - 271, - 287, - 286 - ], - [ - 272, - 287, - 271 - ], - [ - 272, - 288, - 287 - ], - [ - 273, - 288, - 272 - ], - [ - 273, - 289, - 288 - ], - [ - 274, - 289, - 273 - ], - [ - 274, - 290, - 289 - ], - [ - 275, - 290, - 274 - ], - [ - 275, - 291, - 290 - ], - [ - 268, - 284, - 275 - ], - [ - 284, - 291, - 275 - ], - [ - 292, - 293, - 277 - ], - [ - 292, - 277, - 276 - ], - [ - 293, - 278, - 277 - ], - [ - 293, - 294, - 278 - ], - [ - 294, - 279, - 278 - ], - [ - 294, - 295, - 279 - ], - [ - 295, - 280, - 279 - ], - [ - 295, - 296, - 280 - ], - [ - 296, - 281, - 280 - ], - [ - 296, - 297, - 281 - ], - [ - 297, - 282, - 281 - ], - [ - 297, - 298, - 282 - ], - [ - 298, - 283, - 282 - ], - [ - 298, - 299, - 283 - ], - [ - 299, - 284, - 283 - ], - [ - 299, - 300, - 284 - ], - [ - 285, - 301, - 292 - ], - [ - 285, - 292, - 276 - ], - [ - 302, - 285, - 286 - ], - [ - 302, - 301, - 285 - ], - [ - 303, - 286, - 287 - ], - [ - 303, - 302, - 286 - ], - [ - 304, - 287, - 288 - ], - [ - 304, - 303, - 287 - ], - [ - 305, - 288, - 289 - ], - [ - 305, - 304, - 288 - ], - [ - 306, - 289, - 290 - ], - [ - 306, - 305, - 289 - ], - [ - 307, - 306, - 291 - ], - [ - 291, - 306, - 290 - ], - [ - 284, - 300, - 291 - ], - [ - 300, - 307, - 291 - ], - [ - 308, - 309, - 293 - ], - [ - 308, - 293, - 292 - ], - [ - 309, - 310, - 293 - ], - [ - 293, - 310, - 294 - ], - [ - 310, - 295, - 294 - ], - [ - 310, - 311, - 295 - ], - [ - 311, - 296, - 295 - ], - [ - 311, - 312, - 296 - ], - [ - 312, - 297, - 296 - ], - [ - 312, - 313, - 297 - ], - [ - 313, - 298, - 297 - ], - [ - 313, - 314, - 298 - ], - [ - 314, - 315, - 298 - ], - [ - 298, - 315, - 299 - ], - [ - 315, - 300, - 299 - ], - [ - 315, - 316, - 300 - ], - [ - 301, - 317, - 308 - ], - [ - 301, - 308, - 292 - ], - [ - 318, - 301, - 302 - ], - [ - 318, - 317, - 301 - ], - [ - 319, - 302, - 303 - ], - [ - 319, - 318, - 302 - ], - [ - 320, - 303, - 304 - ], - [ - 320, - 319, - 303 - ], - [ - 321, - 304, - 305 - ], - [ - 321, - 320, - 304 - ], - [ - 322, - 321, - 306 - ], - [ - 306, - 321, - 305 - ], - [ - 323, - 306, - 307 - ], - [ - 323, - 322, - 306 - ], - [ - 300, - 316, - 307 - ], - [ - 316, - 323, - 307 - ], - [ - 324, - 325, - 326 - ], - [ - 324, - 326, - 327 - ], - [ - 326, - 328, - 329 - ], - [ - 326, - 325, - 328 - ], - [ - 329, - 330, - 331 - ], - [ - 329, - 328, - 330 - ], - [ - 331, - 332, - 333 - ], - [ - 331, - 330, - 332 - ], - [ - 333, - 334, - 335 - ], - [ - 333, - 332, - 334 - ], - [ - 335, - 336, - 337 - ], - [ - 335, - 334, - 336 - ], - [ - 336, - 338, - 339 - ], - [ - 337, - 336, - 339 - ], - [ - 339, - 340, - 341 - ], - [ - 339, - 338, - 340 - ], - [ - 342, - 324, - 327 - ], - [ - 343, - 344, - 327 - ], - [ - 344, - 342, - 327 - ], - [ - 345, - 344, - 343 - ], - [ - 345, - 346, - 344 - ], - [ - 347, - 346, - 345 - ], - [ - 347, - 348, - 346 - ], - [ - 349, - 348, - 347 - ], - [ - 349, - 350, - 348 - ], - [ - 351, - 350, - 349 - ], - [ - 351, - 352, - 350 - ], - [ - 353, - 352, - 351 - ], - [ - 341, - 353, - 351 - ], - [ - 340, - 353, - 341 - ], - [ - 354, - 355, - 309 - ], - [ - 354, - 309, - 308 - ], - [ - 355, - 310, - 309 - ], - [ - 355, - 356, - 310 - ], - [ - 356, - 357, - 310 - ], - [ - 310, - 357, - 311 - ], - [ - 357, - 312, - 311 - ], - [ - 357, - 358, - 312 - ], - [ - 358, - 313, - 312 - ], - [ - 358, - 359, - 313 - ], - [ - 359, - 314, - 313 - ], - [ - 359, - 360, - 314 - ], - [ - 360, - 315, - 314 - ], - [ - 360, - 361, - 315 - ], - [ - 361, - 362, - 315 - ], - [ - 315, - 362, - 316 - ], - [ - 317, - 363, - 354 - ], - [ - 317, - 354, - 308 - ], - [ - 364, - 317, - 318 - ], - [ - 364, - 363, - 317 - ], - [ - 365, - 318, - 319 - ], - [ - 365, - 364, - 318 - ], - [ - 366, - 319, - 320 - ], - [ - 366, - 365, - 319 - ], - [ - 367, - 366, - 321 - ], - [ - 321, - 366, - 320 - ], - [ - 368, - 321, - 322 - ], - [ - 368, - 367, - 321 - ], - [ - 369, - 322, - 323 - ], - [ - 369, - 368, - 322 - ], - [ - 316, - 369, - 323 - ], - [ - 316, - 362, - 369 - ], - [ - 324, - 370, - 325 - ], - [ - 325, - 371, - 328 - ], - [ - 325, - 370, - 371 - ], - [ - 371, - 372, - 330 - ], - [ - 328, - 371, - 330 - ], - [ - 330, - 373, - 332 - ], - [ - 330, - 372, - 373 - ], - [ - 332, - 374, - 334 - ], - [ - 332, - 373, - 374 - ], - [ - 334, - 375, - 336 - ], - [ - 334, - 374, - 375 - ], - [ - 336, - 376, - 338 - ], - [ - 336, - 375, - 376 - ], - [ - 338, - 376, - 340 - ], - [ - 377, - 378, - 379 - ], - [ - 379, - 378, - 370 - ], - [ - 379, - 370, - 342 - ], - [ - 342, - 370, - 324 - ], - [ - 370, - 380, - 371 - ], - [ - 370, - 378, - 380 - ], - [ - 344, - 379, - 342 - ], - [ - 344, - 381, - 379 - ], - [ - 371, - 382, - 372 - ], - [ - 371, - 380, - 382 - ], - [ - 346, - 381, - 344 - ], - [ - 346, - 383, - 381 - ], - [ - 372, - 384, - 373 - ], - [ - 372, - 382, - 384 - ], - [ - 348, - 383, - 346 - ], - [ - 348, - 385, - 383 - ], - [ - 373, - 386, - 374 - ], - [ - 373, - 384, - 386 - ], - [ - 350, - 385, - 348 - ], - [ - 350, - 387, - 385 - ], - [ - 374, - 388, - 375 - ], - [ - 374, - 386, - 388 - ], - [ - 352, - 387, - 350 - ], - [ - 352, - 389, - 387 - ], - [ - 375, - 390, - 376 - ], - [ - 375, - 388, - 390 - ], - [ - 353, - 389, - 352 - ], - [ - 353, - 391, - 389 - ], - [ - 376, - 390, - 391 - ], - [ - 390, - 392, - 391 - ], - [ - 376, - 391, - 353 - ], - [ - 340, - 376, - 353 - ], - [ - 393, - 377, - 379 - ], - [ - 381, - 394, - 379 - ], - [ - 394, - 393, - 379 - ], - [ - 394, - 395, - 393 - ], - [ - 394, - 396, - 395 - ], - [ - 383, - 394, - 381 - ], - [ - 383, - 397, - 394 - ], - [ - 397, - 396, - 394 - ], - [ - 397, - 398, - 396 - ], - [ - 385, - 397, - 383 - ], - [ - 385, - 399, - 397 - ], - [ - 399, - 398, - 397 - ], - [ - 399, - 400, - 398 - ], - [ - 387, - 399, - 385 - ], - [ - 387, - 401, - 399 - ], - [ - 402, - 400, - 399 - ], - [ - 401, - 402, - 399 - ], - [ - 389, - 401, - 387 - ], - [ - 389, - 403, - 401 - ], - [ - 403, - 402, - 401 - ], - [ - 403, - 404, - 402 - ], - [ - 391, - 403, - 389 - ], - [ - 391, - 405, - 403 - ], - [ - 405, - 404, - 403 - ], - [ - 405, - 406, - 404 - ], - [ - 391, - 392, - 405 - ], - [ - 407, - 408, - 355 - ], - [ - 408, - 356, - 355 - ], - [ - 408, - 409, - 356 - ], - [ - 409, - 357, - 356 - ], - [ - 409, - 410, - 357 - ], - [ - 410, - 358, - 357 - ], - [ - 410, - 411, - 358 - ], - [ - 411, - 359, - 358 - ], - [ - 411, - 412, - 359 - ], - [ - 412, - 360, - 359 - ], - [ - 412, - 413, - 360 - ], - [ - 413, - 361, - 360 - ], - [ - 413, - 414, - 361 - ], - [ - 414, - 415, - 361 - ], - [ - 416, - 417, - 355 - ], - [ - 417, - 407, - 355 - ], - [ - 416, - 355, - 354 - ], - [ - 418, - 416, - 419 - ], - [ - 418, - 417, - 416 - ], - [ - 420, - 419, - 421 - ], - [ - 420, - 418, - 419 - ], - [ - 422, - 421, - 423 - ], - [ - 422, - 420, - 421 - ], - [ - 424, - 423, - 425 - ], - [ - 424, - 422, - 423 - ], - [ - 426, - 425, - 427 - ], - [ - 426, - 424, - 425 - ], - [ - 428, - 427, - 429 - ], - [ - 428, - 426, - 427 - ], - [ - 361, - 415, - 428 - ], - [ - 361, - 428, - 429 - ], - [ - 361, - 429, - 362 - ], - [ - 363, - 416, - 354 - ], - [ - 419, - 363, - 364 - ], - [ - 419, - 416, - 363 - ], - [ - 421, - 364, - 365 - ], - [ - 421, - 419, - 364 - ], - [ - 423, - 365, - 366 - ], - [ - 423, - 421, - 365 - ], - [ - 425, - 366, - 367 - ], - [ - 425, - 423, - 366 - ], - [ - 427, - 367, - 368 - ], - [ - 427, - 425, - 367 - ], - [ - 429, - 368, - 369 - ], - [ - 429, - 427, - 368 - ], - [ - 362, - 429, - 369 - ], - [ - 377, - 430, - 378 - ], - [ - 378, - 431, - 380 - ], - [ - 378, - 430, - 431 - ], - [ - 380, - 432, - 382 - ], - [ - 380, - 431, - 432 - ], - [ - 432, - 433, - 384 - ], - [ - 382, - 432, - 384 - ], - [ - 384, - 434, - 386 - ], - [ - 384, - 433, - 434 - ], - [ - 386, - 435, - 388 - ], - [ - 386, - 434, - 435 - ], - [ - 388, - 436, - 390 - ], - [ - 388, - 435, - 436 - ], - [ - 390, - 436, - 392 - ], - [ - 437, - 438, - 395 - ], - [ - 395, - 438, - 430 - ], - [ - 395, - 430, - 393 - ], - [ - 393, - 430, - 377 - ], - [ - 430, - 439, - 431 - ], - [ - 430, - 438, - 439 - ], - [ - 431, - 440, - 432 - ], - [ - 431, - 439, - 440 - ], - [ - 432, - 441, - 433 - ], - [ - 432, - 440, - 441 - ], - [ - 433, - 442, - 434 - ], - [ - 433, - 441, - 442 - ], - [ - 442, - 443, - 435 - ], - [ - 434, - 442, - 435 - ], - [ - 435, - 444, - 436 - ], - [ - 435, - 443, - 444 - ], - [ - 392, - 436, - 405 - ], - [ - 436, - 406, - 405 - ], - [ - 436, - 444, - 406 - ], - [ - 444, - 445, - 406 - ], - [ - 446, - 447, - 437 - ], - [ - 446, - 437, - 395 - ], - [ - 448, - 446, - 395 - ], - [ - 396, - 448, - 395 - ], - [ - 398, - 448, - 396 - ], - [ - 398, - 449, - 448 - ], - [ - 400, - 449, - 398 - ], - [ - 400, - 450, - 449 - ], - [ - 402, - 450, - 400 - ], - [ - 402, - 451, - 450 - ], - [ - 404, - 451, - 402 - ], - [ - 404, - 452, - 451 - ], - [ - 406, - 452, - 404 - ], - [ - 406, - 453, - 452 - ], - [ - 445, - 453, - 406 - ], - [ - 445, - 454, - 453 - ], - [ - 455, - 447, - 446 - ], - [ - 446, - 456, - 455 - ], - [ - 446, - 448, - 456 - ], - [ - 448, - 457, - 456 - ], - [ - 448, - 449, - 457 - ], - [ - 449, - 458, - 457 - ], - [ - 449, - 450, - 458 - ], - [ - 450, - 459, - 458 - ], - [ - 451, - 459, - 450 - ], - [ - 452, - 459, - 451 - ], - [ - 452, - 460, - 459 - ], - [ - 453, - 460, - 452 - ], - [ - 453, - 461, - 460 - ], - [ - 453, - 454, - 461 - ], - [ - 456, - 462, - 455 - ], - [ - 456, - 463, - 462 - ], - [ - 462, - 464, - 465 - ], - [ - 462, - 463, - 464 - ], - [ - 457, - 463, - 456 - ], - [ - 457, - 466, - 463 - ], - [ - 463, - 467, - 464 - ], - [ - 463, - 466, - 467 - ], - [ - 458, - 466, - 457 - ], - [ - 458, - 468, - 466 - ], - [ - 466, - 469, - 467 - ], - [ - 466, - 468, - 469 - ], - [ - 459, - 468, - 458 - ], - [ - 459, - 470, - 468 - ], - [ - 468, - 471, - 469 - ], - [ - 468, - 470, - 471 - ], - [ - 460, - 470, - 459 - ], - [ - 460, - 472, - 470 - ], - [ - 470, - 473, - 471 - ], - [ - 470, - 472, - 473 - ], - [ - 461, - 472, - 460 - ], - [ - 461, - 474, - 472 - ], - [ - 474, - 475, - 472 - ], - [ - 472, - 475, - 473 - ], - [ - 465, - 476, - 477 - ], - [ - 465, - 464, - 476 - ], - [ - 477, - 478, - 479 - ], - [ - 477, - 476, - 478 - ], - [ - 464, - 467, - 476 - ], - [ - 467, - 480, - 476 - ], - [ - 476, - 481, - 478 - ], - [ - 476, - 480, - 481 - ], - [ - 469, - 480, - 467 - ], - [ - 469, - 482, - 480 - ], - [ - 480, - 483, - 481 - ], - [ - 480, - 482, - 483 - ], - [ - 471, - 482, - 469 - ], - [ - 471, - 484, - 482 - ], - [ - 482, - 485, - 483 - ], - [ - 482, - 484, - 485 - ], - [ - 473, - 484, - 471 - ], - [ - 473, - 486, - 484 - ], - [ - 484, - 487, - 485 - ], - [ - 484, - 486, - 487 - ], - [ - 475, - 486, - 473 - ], - [ - 475, - 488, - 486 - ], - [ - 486, - 488, - 489 - ], - [ - 486, - 489, - 487 - ], - [ - 490, - 491, - 479 - ], - [ - 479, - 492, - 490 - ], - [ - 479, - 478, - 492 - ], - [ - 478, - 493, - 492 - ], - [ - 478, - 481, - 493 - ], - [ - 481, - 494, - 493 - ], - [ - 481, - 483, - 494 - ], - [ - 483, - 485, - 494 - ], - [ - 485, - 495, - 494 - ], - [ - 487, - 495, - 485 - ], - [ - 487, - 496, - 495 - ], - [ - 489, - 496, - 487 - ], - [ - 489, - 497, - 496 - ], - [ - 489, - 498, - 497 - ], - [ - 499, - 491, - 490 - ], - [ - 499, - 490, - 408 - ], - [ - 490, - 492, - 408 - ], - [ - 408, - 492, - 409 - ], - [ - 492, - 410, - 409 - ], - [ - 492, - 493, - 410 - ], - [ - 493, - 411, - 410 - ], - [ - 493, - 494, - 411 - ], - [ - 494, - 412, - 411 - ], - [ - 494, - 495, - 412 - ], - [ - 495, - 413, - 412 - ], - [ - 495, - 496, - 413 - ], - [ - 496, - 414, - 413 - ], - [ - 496, - 497, - 414 - ], - [ - 497, - 498, - 500 - ], - [ - 497, - 500, - 414 - ], - [ - 501, - 408, - 407 - ], - [ - 501, - 502, - 408 - ], - [ - 502, - 499, - 408 - ], - [ - 503, - 501, - 504 - ], - [ - 503, - 502, - 501 - ], - [ - 505, - 504, - 506 - ], - [ - 505, - 503, - 504 - ], - [ - 507, - 506, - 508 - ], - [ - 507, - 505, - 506 - ], - [ - 509, - 508, - 510 - ], - [ - 509, - 507, - 508 - ], - [ - 511, - 509, - 512 - ], - [ - 512, - 509, - 510 - ], - [ - 513, - 512, - 514 - ], - [ - 513, - 511, - 512 - ], - [ - 414, - 500, - 513 - ], - [ - 414, - 513, - 514 - ], - [ - 414, - 514, - 415 - ], - [ - 417, - 501, - 407 - ], - [ - 504, - 417, - 418 - ], - [ - 504, - 501, - 417 - ], - [ - 506, - 504, - 420 - ], - [ - 420, - 504, - 418 - ], - [ - 508, - 420, - 422 - ], - [ - 508, - 506, - 420 - ], - [ - 510, - 422, - 424 - ], - [ - 510, - 508, - 422 - ], - [ - 512, - 424, - 426 - ], - [ - 512, - 510, - 424 - ], - [ - 514, - 426, - 428 - ], - [ - 514, - 512, - 426 - ], - [ - 415, - 514, - 428 - ], - [ - 515, - 438, - 437 - ], - [ - 438, - 516, - 439 - ], - [ - 438, - 515, - 516 - ], - [ - 439, - 517, - 440 - ], - [ - 439, - 516, - 517 - ], - [ - 440, - 518, - 441 - ], - [ - 440, - 517, - 518 - ], - [ - 518, - 519, - 442 - ], - [ - 441, - 518, - 442 - ], - [ - 442, - 520, - 443 - ], - [ - 442, - 519, - 520 - ], - [ - 443, - 521, - 444 - ], - [ - 443, - 520, - 521 - ], - [ - 444, - 521, - 445 - ], - [ - 447, - 522, - 515 - ], - [ - 447, - 515, - 437 - ], - [ - 515, - 523, - 516 - ], - [ - 515, - 522, - 523 - ], - [ - 516, - 524, - 517 - ], - [ - 516, - 523, - 524 - ], - [ - 517, - 525, - 518 - ], - [ - 517, - 524, - 525 - ], - [ - 518, - 526, - 519 - ], - [ - 518, - 525, - 526 - ], - [ - 519, - 527, - 520 - ], - [ - 519, - 526, - 527 - ], - [ - 520, - 528, - 521 - ], - [ - 520, - 527, - 528 - ], - [ - 521, - 454, - 445 - ], - [ - 521, - 528, - 454 - ], - [ - 529, - 522, - 455 - ], - [ - 455, - 522, - 447 - ], - [ - 522, - 530, - 523 - ], - [ - 522, - 529, - 530 - ], - [ - 523, - 531, - 524 - ], - [ - 523, - 530, - 531 - ], - [ - 524, - 532, - 525 - ], - [ - 524, - 531, - 532 - ], - [ - 525, - 533, - 526 - ], - [ - 525, - 532, - 533 - ], - [ - 526, - 534, - 527 - ], - [ - 526, - 533, - 534 - ], - [ - 527, - 535, - 528 - ], - [ - 527, - 534, - 535 - ], - [ - 528, - 535, - 461 - ], - [ - 454, - 528, - 461 - ], - [ - 536, - 529, - 465 - ], - [ - 529, - 455, - 462 - ], - [ - 465, - 529, - 462 - ], - [ - 529, - 537, - 530 - ], - [ - 529, - 536, - 537 - ], - [ - 530, - 538, - 531 - ], - [ - 530, - 537, - 538 - ], - [ - 531, - 539, - 532 - ], - [ - 531, - 538, - 539 - ], - [ - 532, - 540, - 533 - ], - [ - 532, - 539, - 540 - ], - [ - 533, - 541, - 534 - ], - [ - 533, - 540, - 541 - ], - [ - 534, - 542, - 535 - ], - [ - 534, - 541, - 542 - ], - [ - 461, - 535, - 474 - ], - [ - 474, - 535, - 475 - ], - [ - 535, - 542, - 475 - ], - [ - 543, - 544, - 477 - ], - [ - 543, - 477, - 479 - ], - [ - 544, - 536, - 477 - ], - [ - 477, - 536, - 465 - ], - [ - 537, - 544, - 545 - ], - [ - 537, - 536, - 544 - ], - [ - 545, - 543, - 546 - ], - [ - 545, - 544, - 543 - ], - [ - 538, - 545, - 547 - ], - [ - 538, - 537, - 545 - ], - [ - 545, - 548, - 547 - ], - [ - 545, - 546, - 548 - ], - [ - 549, - 547, - 550 - ], - [ - 539, - 547, - 549 - ], - [ - 539, - 538, - 547 - ], - [ - 547, - 548, - 550 - ], - [ - 551, - 550, - 552 - ], - [ - 551, - 549, - 550 - ], - [ - 540, - 549, - 551 - ], - [ - 540, - 539, - 549 - ], - [ - 541, - 551, - 553 - ], - [ - 553, - 552, - 554 - ], - [ - 553, - 551, - 552 - ], - [ - 541, - 540, - 551 - ], - [ - 542, - 553, - 555 - ], - [ - 542, - 541, - 553 - ], - [ - 555, - 554, - 556 - ], - [ - 555, - 553, - 554 - ], - [ - 475, - 542, - 488 - ], - [ - 542, - 555, - 488 - ], - [ - 555, - 489, - 488 - ], - [ - 555, - 556, - 489 - ], - [ - 557, - 543, - 479 - ], - [ - 491, - 557, - 479 - ], - [ - 546, - 557, - 558 - ], - [ - 546, - 543, - 557 - ], - [ - 548, - 558, - 559 - ], - [ - 548, - 546, - 558 - ], - [ - 550, - 559, - 560 - ], - [ - 550, - 548, - 559 - ], - [ - 552, - 560, - 561 - ], - [ - 552, - 550, - 560 - ], - [ - 554, - 561, - 562 - ], - [ - 554, - 552, - 561 - ], - [ - 556, - 562, - 563 - ], - [ - 556, - 554, - 562 - ], - [ - 556, - 563, - 489 - ], - [ - 489, - 563, - 498 - ], - [ - 564, - 491, - 499 - ], - [ - 564, - 557, - 491 - ], - [ - 558, - 564, - 565 - ], - [ - 558, - 557, - 564 - ], - [ - 559, - 565, - 566 - ], - [ - 559, - 558, - 565 - ], - [ - 560, - 566, - 567 - ], - [ - 560, - 559, - 566 - ], - [ - 561, - 567, - 568 - ], - [ - 561, - 560, - 567 - ], - [ - 562, - 568, - 569 - ], - [ - 562, - 561, - 568 - ], - [ - 563, - 569, - 570 - ], - [ - 563, - 562, - 569 - ], - [ - 498, - 563, - 570 - ], - [ - 498, - 570, - 500 - ], - [ - 502, - 564, - 499 - ], - [ - 565, - 502, - 503 - ], - [ - 565, - 564, - 502 - ], - [ - 566, - 503, - 505 - ], - [ - 566, - 565, - 503 - ], - [ - 567, - 505, - 507 - ], - [ - 567, - 566, - 505 - ], - [ - 568, - 507, - 509 - ], - [ - 568, - 567, - 507 - ], - [ - 569, - 509, - 511 - ], - [ - 569, - 568, - 509 - ], - [ - 570, - 511, - 513 - ], - [ - 570, - 569, - 511 - ], - [ - 500, - 570, - 513 - ] - ] - }, - { - "id": 2, - "type": "polyline", - "coordinateIds": [ - 571, - 572 - ] - }, - { - "id": 3, - "type": "cell", - "intervals": [ - [ - [ - 10, - 13, - 6 - ], - [ - 10, - 21, - 14 - ] - ] - ] - }, - { - "id": 4, - "type": "node", - "coordinateIds": [ - 572 - ] - } - ] - }, - "materials": [ - { - "name": "PEC", - "id": 1, - "type": "pec" - }, - { - "name": "Isotropic_Material", - "id": 2, - "type": "isotropic", - "relativePermittivity": 1.0, - "relativePermeability": 1.0, - "electricConductivity": 5000.0, - "magneticConductivity": 0.0 - }, - { - "name": "Wire_material", - "id": 3, - "type": "wire", - "radius": 0.0001, - "resistancePerMeter": 0.0, - "inductancePerMeter": 0.0 - }, - { - "name": "Terminal", - "id": 4, - "type": "terminal", - "terminations": [ - { - "type": "series", - "resistance": 0.1, - "capacitance": 1e+22 - } - ] - }, - { - "name": "Short", - "id": 5, - "type": "terminal", - "terminations": [ - { - "type": "short" - } - ] - } - ], - "materialAssociations": [ - { - "materialId": 1, - "elementIds": [ - 1 - ] - }, - { - "name": "Cable", - "type": "cable", - "elementIds": [ - 2 - ], - "materialId": 3, - "initialTerminalId": 4, - "endTerminalId": 5 - } - ], - "sources": [ - { - "name": "Generator", - "type": "generator", - "magnitudeFile": "predefinedExcitation.1.exc", - "elementIds": [ - 4 - ], - "field": "voltage" - } - ], - "probes": [ - { - "name": "BulkProbe", - "type": "bulkCurrent", - "field": "electric", - "elementIds": [ - 3 - ], - "domain": { - "type": "time" - } - } - ] + "subtype": "volume", + "intervals": [ + [ + [ + 10.0, + 5.0, + 8.0 + ], + [ + 9.0, + 5.0, + 7.0 + ] + ], + [ + [ + 10.0, + 6.0, + 7.0 + ], + [ + 9.0, + 5.0, + 7.0 + ] + ], + [ + [ + 10.0, + 5.0, + 7.0 + ], + [ + 10.0, + 6.0, + 8.0 + ] + ], + [ + [ + 10.0, + 5.0, + 9.0 + ], + [ + 9.0, + 5.0, + 8.0 + ] + ], + [ + [ + 10.0, + 5.0, + 8.0 + ], + [ + 10.0, + 6.0, + 9.0 + ] + ], + [ + [ + 10.0, + 5.0, + 10.0 + ], + [ + 9.0, + 5.0, + 9.0 + ] + ], + [ + [ + 10.0, + 5.0, + 9.0 + ], + [ + 10.0, + 6.0, + 10.0 + ] + ], + [ + [ + 10.0, + 5.0, + 11.0 + ], + [ + 9.0, + 5.0, + 10.0 + ] + ], + [ + [ + 10.0, + 5.0, + 10.0 + ], + [ + 10.0, + 6.0, + 11.0 + ] + ], + [ + [ + 10.0, + 5.0, + 12.0 + ], + [ + 9.0, + 5.0, + 11.0 + ] + ], + [ + [ + 10.0, + 5.0, + 11.0 + ], + [ + 10.0, + 6.0, + 12.0 + ] + ], + [ + [ + 10.0, + 5.0, + 13.0 + ], + [ + 9.0, + 5.0, + 12.0 + ] + ], + [ + [ + 10.0, + 5.0, + 12.0 + ], + [ + 10.0, + 6.0, + 13.0 + ] + ], + [ + [ + 9.0, + 5.0, + 13.0 + ], + [ + 10.0, + 6.0, + 13.0 + ] + ], + [ + [ + 9.0, + 6.0, + 7.0 + ], + [ + 10.0, + 6.0, + 8.0 + ] + ], + [ + [ + 9.0, + 6.0, + 8.0 + ], + [ + 10.0, + 6.0, + 9.0 + ] + ], + [ + [ + 9.0, + 6.0, + 9.0 + ], + [ + 10.0, + 6.0, + 10.0 + ] + ], + [ + [ + 9.0, + 6.0, + 10.0 + ], + [ + 10.0, + 6.0, + 11.0 + ] + ], + [ + [ + 9.0, + 6.0, + 11.0 + ], + [ + 10.0, + 6.0, + 12.0 + ] + ], + [ + [ + 9.0, + 6.0, + 12.0 + ], + [ + 10.0, + 6.0, + 13.0 + ] + ], + [ + [ + 11.0, + 6.0, + 8.0 + ], + [ + 11.0, + 5.0, + 7.0 + ] + ], + [ + [ + 11.0, + 6.0, + 9.0 + ], + [ + 11.0, + 5.0, + 8.0 + ] + ], + [ + [ + 11.0, + 6.0, + 10.0 + ], + [ + 11.0, + 5.0, + 9.0 + ] + ], + [ + [ + 11.0, + 6.0, + 11.0 + ], + [ + 11.0, + 5.0, + 10.0 + ] + ], + [ + [ + 11.0, + 6.0, + 12.0 + ], + [ + 11.0, + 5.0, + 11.0 + ] + ], + [ + [ + 11.0, + 6.0, + 13.0 + ], + [ + 11.0, + 5.0, + 12.0 + ] + ], + [ + [ + 12.0, + 5.0, + 8.0 + ], + [ + 11.0, + 5.0, + 7.0 + ] + ], + [ + [ + 12.0, + 6.0, + 7.0 + ], + [ + 11.0, + 5.0, + 7.0 + ] + ], + [ + [ + 12.0, + 5.0, + 9.0 + ], + [ + 11.0, + 5.0, + 8.0 + ] + ], + [ + [ + 12.0, + 5.0, + 10.0 + ], + [ + 11.0, + 5.0, + 9.0 + ] + ], + [ + [ + 12.0, + 5.0, + 11.0 + ], + [ + 11.0, + 5.0, + 10.0 + ] + ], + [ + [ + 12.0, + 5.0, + 12.0 + ], + [ + 11.0, + 5.0, + 11.0 + ] + ], + [ + [ + 12.0, + 5.0, + 13.0 + ], + [ + 11.0, + 5.0, + 12.0 + ] + ], + [ + [ + 11.0, + 5.0, + 13.0 + ], + [ + 12.0, + 6.0, + 13.0 + ] + ], + [ + [ + 11.0, + 6.0, + 7.0 + ], + [ + 12.0, + 6.0, + 8.0 + ] + ], + [ + [ + 11.0, + 6.0, + 8.0 + ], + [ + 12.0, + 6.0, + 9.0 + ] + ], + [ + [ + 11.0, + 6.0, + 9.0 + ], + [ + 12.0, + 6.0, + 10.0 + ] + ], + [ + [ + 11.0, + 6.0, + 10.0 + ], + [ + 12.0, + 6.0, + 11.0 + ] + ], + [ + [ + 11.0, + 6.0, + 11.0 + ], + [ + 12.0, + 6.0, + 12.0 + ] + ], + [ + [ + 11.0, + 6.0, + 12.0 + ], + [ + 12.0, + 6.0, + 13.0 + ] + ] + ], + "triangles": [ + [ + 1, + 2, + 3 + ], + [ + 2, + 4, + 3 + ], + [ + 2, + 5, + 4 + ], + [ + 5, + 6, + 4 + ], + [ + 5, + 7, + 6 + ], + [ + 7, + 8, + 6 + ], + [ + 7, + 9, + 8 + ], + [ + 9, + 10, + 8 + ], + [ + 9, + 11, + 10 + ], + [ + 11, + 12, + 10 + ], + [ + 11, + 13, + 12 + ], + [ + 13, + 14, + 12 + ], + [ + 13, + 15, + 14 + ], + [ + 15, + 16, + 14 + ], + [ + 17, + 3, + 18 + ], + [ + 17, + 1, + 3 + ], + [ + 3, + 19, + 18 + ], + [ + 3, + 4, + 19 + ], + [ + 4, + 20, + 19 + ], + [ + 4, + 6, + 20 + ], + [ + 6, + 21, + 20 + ], + [ + 6, + 8, + 21 + ], + [ + 8, + 22, + 21 + ], + [ + 8, + 10, + 22 + ], + [ + 10, + 23, + 22 + ], + [ + 10, + 12, + 23 + ], + [ + 14, + 24, + 23 + ], + [ + 12, + 14, + 23 + ], + [ + 14, + 16, + 25 + ], + [ + 14, + 25, + 24 + ], + [ + 26, + 17, + 18 + ], + [ + 27, + 26, + 18 + ], + [ + 18, + 28, + 27 + ], + [ + 18, + 19, + 28 + ], + [ + 19, + 29, + 28 + ], + [ + 19, + 20, + 29 + ], + [ + 20, + 30, + 29 + ], + [ + 20, + 21, + 30 + ], + [ + 21, + 31, + 30 + ], + [ + 21, + 22, + 31 + ], + [ + 22, + 32, + 31 + ], + [ + 22, + 23, + 32 + ], + [ + 24, + 33, + 32 + ], + [ + 23, + 24, + 32 + ], + [ + 25, + 34, + 24 + ], + [ + 24, + 34, + 33 + ], + [ + 35, + 26, + 27 + ], + [ + 36, + 35, + 27 + ], + [ + 28, + 36, + 27 + ], + [ + 28, + 37, + 36 + ], + [ + 29, + 37, + 28 + ], + [ + 29, + 38, + 37 + ], + [ + 30, + 38, + 29 + ], + [ + 30, + 39, + 38 + ], + [ + 31, + 39, + 30 + ], + [ + 31, + 40, + 39 + ], + [ + 32, + 41, + 40 + ], + [ + 32, + 40, + 31 + ], + [ + 33, + 41, + 32 + ], + [ + 33, + 42, + 41 + ], + [ + 34, + 43, + 33 + ], + [ + 33, + 43, + 42 + ], + [ + 44, + 45, + 35 + ], + [ + 44, + 35, + 36 + ], + [ + 36, + 46, + 44 + ], + [ + 36, + 37, + 46 + ], + [ + 37, + 47, + 46 + ], + [ + 37, + 38, + 47 + ], + [ + 39, + 48, + 38 + ], + [ + 38, + 48, + 47 + ], + [ + 40, + 48, + 39 + ], + [ + 40, + 49, + 48 + ], + [ + 41, + 49, + 40 + ], + [ + 41, + 50, + 49 + ], + [ + 42, + 50, + 41 + ], + [ + 42, + 51, + 50 + ], + [ + 43, + 51, + 42 + ], + [ + 43, + 52, + 51 + ], + [ + 53, + 45, + 44 + ], + [ + 46, + 53, + 44 + ], + [ + 46, + 54, + 53 + ], + [ + 47, + 54, + 46 + ], + [ + 47, + 55, + 54 + ], + [ + 48, + 56, + 47 + ], + [ + 56, + 55, + 47 + ], + [ + 49, + 56, + 48 + ], + [ + 49, + 57, + 56 + ], + [ + 50, + 57, + 49 + ], + [ + 50, + 58, + 57 + ], + [ + 51, + 58, + 50 + ], + [ + 51, + 59, + 58 + ], + [ + 52, + 59, + 51 + ], + [ + 60, + 61, + 62 + ], + [ + 61, + 63, + 62 + ], + [ + 61, + 64, + 63 + ], + [ + 64, + 65, + 63 + ], + [ + 64, + 66, + 65 + ], + [ + 66, + 67, + 65 + ], + [ + 66, + 68, + 67 + ], + [ + 68, + 69, + 67 + ], + [ + 68, + 70, + 69 + ], + [ + 70, + 71, + 69 + ], + [ + 70, + 72, + 71 + ], + [ + 72, + 73, + 71 + ], + [ + 72, + 74, + 73 + ], + [ + 74, + 75, + 73 + ], + [ + 76, + 62, + 2 + ], + [ + 76, + 60, + 62 + ], + [ + 62, + 5, + 2 + ], + [ + 62, + 63, + 5 + ], + [ + 63, + 7, + 5 + ], + [ + 63, + 65, + 7 + ], + [ + 65, + 9, + 7 + ], + [ + 65, + 67, + 9 + ], + [ + 67, + 11, + 9 + ], + [ + 67, + 69, + 11 + ], + [ + 69, + 13, + 11 + ], + [ + 69, + 71, + 13 + ], + [ + 71, + 15, + 13 + ], + [ + 71, + 73, + 15 + ], + [ + 73, + 75, + 77 + ], + [ + 73, + 77, + 15 + ], + [ + 78, + 2, + 1 + ], + [ + 78, + 79, + 2 + ], + [ + 79, + 76, + 2 + ], + [ + 80, + 78, + 81 + ], + [ + 80, + 79, + 78 + ], + [ + 82, + 80, + 81 + ], + [ + 82, + 81, + 83 + ], + [ + 84, + 83, + 85 + ], + [ + 84, + 82, + 83 + ], + [ + 86, + 85, + 87 + ], + [ + 86, + 84, + 85 + ], + [ + 88, + 87, + 89 + ], + [ + 88, + 86, + 87 + ], + [ + 90, + 89, + 91 + ], + [ + 90, + 88, + 89 + ], + [ + 15, + 90, + 91 + ], + [ + 15, + 77, + 90 + ], + [ + 15, + 91, + 16 + ], + [ + 92, + 78, + 1 + ], + [ + 92, + 1, + 17 + ], + [ + 78, + 93, + 81 + ], + [ + 78, + 92, + 93 + ], + [ + 81, + 94, + 83 + ], + [ + 81, + 93, + 94 + ], + [ + 83, + 95, + 85 + ], + [ + 83, + 94, + 95 + ], + [ + 85, + 96, + 87 + ], + [ + 85, + 95, + 96 + ], + [ + 87, + 97, + 89 + ], + [ + 87, + 96, + 97 + ], + [ + 89, + 97, + 98 + ], + [ + 91, + 89, + 98 + ], + [ + 16, + 91, + 98 + ], + [ + 16, + 98, + 25 + ], + [ + 99, + 92, + 17 + ], + [ + 99, + 17, + 26 + ], + [ + 92, + 100, + 93 + ], + [ + 92, + 99, + 100 + ], + [ + 93, + 100, + 101 + ], + [ + 94, + 93, + 101 + ], + [ + 95, + 101, + 102 + ], + [ + 95, + 94, + 101 + ], + [ + 96, + 102, + 103 + ], + [ + 96, + 95, + 102 + ], + [ + 97, + 103, + 104 + ], + [ + 97, + 96, + 103 + ], + [ + 98, + 104, + 105 + ], + [ + 98, + 97, + 104 + ], + [ + 98, + 34, + 25 + ], + [ + 98, + 105, + 34 + ], + [ + 106, + 99, + 26 + ], + [ + 106, + 26, + 35 + ], + [ + 99, + 107, + 100 + ], + [ + 99, + 106, + 107 + ], + [ + 100, + 108, + 101 + ], + [ + 100, + 107, + 108 + ], + [ + 102, + 108, + 109 + ], + [ + 101, + 108, + 102 + ], + [ + 103, + 109, + 110 + ], + [ + 103, + 102, + 109 + ], + [ + 104, + 110, + 111 + ], + [ + 104, + 103, + 110 + ], + [ + 105, + 111, + 112 + ], + [ + 105, + 104, + 111 + ], + [ + 105, + 43, + 34 + ], + [ + 105, + 112, + 43 + ], + [ + 45, + 113, + 106 + ], + [ + 45, + 106, + 35 + ], + [ + 106, + 114, + 107 + ], + [ + 106, + 113, + 114 + ], + [ + 108, + 114, + 115 + ], + [ + 107, + 114, + 108 + ], + [ + 109, + 115, + 116 + ], + [ + 109, + 108, + 115 + ], + [ + 110, + 116, + 117 + ], + [ + 110, + 109, + 116 + ], + [ + 111, + 117, + 118 + ], + [ + 111, + 110, + 117 + ], + [ + 112, + 118, + 119 + ], + [ + 112, + 111, + 118 + ], + [ + 112, + 52, + 43 + ], + [ + 112, + 119, + 52 + ], + [ + 120, + 121, + 53 + ], + [ + 53, + 121, + 113 + ], + [ + 53, + 113, + 45 + ], + [ + 113, + 122, + 114 + ], + [ + 113, + 121, + 122 + ], + [ + 114, + 123, + 115 + ], + [ + 114, + 122, + 123 + ], + [ + 115, + 124, + 116 + ], + [ + 115, + 123, + 124 + ], + [ + 116, + 125, + 117 + ], + [ + 116, + 124, + 125 + ], + [ + 117, + 125, + 126 + ], + [ + 117, + 126, + 118 + ], + [ + 118, + 127, + 119 + ], + [ + 118, + 126, + 127 + ], + [ + 52, + 119, + 59 + ], + [ + 119, + 127, + 59 + ], + [ + 127, + 128, + 59 + ], + [ + 129, + 130, + 120 + ], + [ + 129, + 120, + 53 + ], + [ + 131, + 129, + 53 + ], + [ + 54, + 131, + 53 + ], + [ + 55, + 131, + 54 + ], + [ + 55, + 132, + 131 + ], + [ + 56, + 132, + 55 + ], + [ + 56, + 133, + 132 + ], + [ + 57, + 133, + 56 + ], + [ + 57, + 134, + 133 + ], + [ + 58, + 134, + 57 + ], + [ + 58, + 135, + 134 + ], + [ + 59, + 135, + 58 + ], + [ + 59, + 136, + 135 + ], + [ + 128, + 136, + 59 + ], + [ + 128, + 137, + 136 + ], + [ + 138, + 130, + 129 + ], + [ + 131, + 138, + 129 + ], + [ + 131, + 139, + 138 + ], + [ + 132, + 139, + 131 + ], + [ + 132, + 140, + 139 + ], + [ + 133, + 141, + 140 + ], + [ + 133, + 140, + 132 + ], + [ + 134, + 141, + 133 + ], + [ + 134, + 142, + 141 + ], + [ + 135, + 142, + 134 + ], + [ + 135, + 143, + 142 + ], + [ + 136, + 143, + 135 + ], + [ + 136, + 144, + 143 + ], + [ + 136, + 137, + 144 + ], + [ + 145, + 146, + 147 + ], + [ + 146, + 148, + 147 + ], + [ + 146, + 149, + 148 + ], + [ + 149, + 150, + 148 + ], + [ + 149, + 151, + 150 + ], + [ + 151, + 152, + 150 + ], + [ + 151, + 153, + 152 + ], + [ + 153, + 154, + 152 + ], + [ + 153, + 155, + 154 + ], + [ + 155, + 156, + 154 + ], + [ + 155, + 157, + 156 + ], + [ + 157, + 158, + 156 + ], + [ + 157, + 159, + 158 + ], + [ + 159, + 160, + 158 + ], + [ + 161, + 145, + 147 + ], + [ + 161, + 147, + 61 + ], + [ + 161, + 61, + 60 + ], + [ + 147, + 64, + 61 + ], + [ + 147, + 148, + 64 + ], + [ + 148, + 66, + 64 + ], + [ + 148, + 150, + 66 + ], + [ + 150, + 68, + 66 + ], + [ + 150, + 152, + 68 + ], + [ + 152, + 70, + 68 + ], + [ + 152, + 154, + 70 + ], + [ + 154, + 72, + 70 + ], + [ + 154, + 156, + 72 + ], + [ + 72, + 158, + 74 + ], + [ + 156, + 158, + 72 + ], + [ + 158, + 160, + 162 + ], + [ + 158, + 75, + 74 + ], + [ + 158, + 162, + 75 + ], + [ + 163, + 60, + 76 + ], + [ + 164, + 161, + 60 + ], + [ + 163, + 164, + 60 + ], + [ + 165, + 163, + 166 + ], + [ + 165, + 164, + 163 + ], + [ + 167, + 165, + 166 + ], + [ + 167, + 166, + 168 + ], + [ + 169, + 168, + 170 + ], + [ + 169, + 167, + 168 + ], + [ + 171, + 170, + 172 + ], + [ + 171, + 169, + 170 + ], + [ + 173, + 172, + 174 + ], + [ + 173, + 171, + 172 + ], + [ + 175, + 174, + 176 + ], + [ + 175, + 173, + 174 + ], + [ + 75, + 162, + 175 + ], + [ + 75, + 176, + 77 + ], + [ + 75, + 175, + 176 + ], + [ + 79, + 163, + 76 + ], + [ + 166, + 79, + 80 + ], + [ + 166, + 163, + 79 + ], + [ + 168, + 80, + 82 + ], + [ + 168, + 166, + 80 + ], + [ + 84, + 168, + 82 + ], + [ + 170, + 168, + 84 + ], + [ + 172, + 84, + 86 + ], + [ + 172, + 170, + 84 + ], + [ + 174, + 86, + 88 + ], + [ + 174, + 172, + 86 + ], + [ + 176, + 88, + 90 + ], + [ + 176, + 174, + 88 + ], + [ + 77, + 176, + 90 + ], + [ + 177, + 121, + 120 + ], + [ + 121, + 178, + 122 + ], + [ + 121, + 177, + 178 + ], + [ + 122, + 179, + 123 + ], + [ + 122, + 178, + 179 + ], + [ + 123, + 180, + 124 + ], + [ + 123, + 179, + 180 + ], + [ + 124, + 181, + 125 + ], + [ + 124, + 180, + 181 + ], + [ + 125, + 182, + 126 + ], + [ + 125, + 181, + 182 + ], + [ + 182, + 183, + 127 + ], + [ + 126, + 182, + 127 + ], + [ + 127, + 183, + 128 + ], + [ + 184, + 185, + 130 + ], + [ + 130, + 185, + 177 + ], + [ + 130, + 177, + 120 + ], + [ + 177, + 186, + 178 + ], + [ + 177, + 185, + 186 + ], + [ + 178, + 187, + 179 + ], + [ + 178, + 186, + 187 + ], + [ + 179, + 188, + 180 + ], + [ + 179, + 187, + 188 + ], + [ + 180, + 189, + 181 + ], + [ + 180, + 188, + 189 + ], + [ + 181, + 190, + 182 + ], + [ + 181, + 189, + 190 + ], + [ + 182, + 190, + 191 + ], + [ + 182, + 191, + 183 + ], + [ + 191, + 192, + 137 + ], + [ + 183, + 137, + 128 + ], + [ + 183, + 191, + 137 + ], + [ + 193, + 184, + 138 + ], + [ + 138, + 184, + 130 + ], + [ + 139, + 193, + 138 + ], + [ + 139, + 194, + 193 + ], + [ + 195, + 194, + 139 + ], + [ + 140, + 195, + 139 + ], + [ + 141, + 195, + 140 + ], + [ + 141, + 196, + 195 + ], + [ + 142, + 196, + 141 + ], + [ + 142, + 197, + 196 + ], + [ + 143, + 197, + 142 + ], + [ + 143, + 198, + 197 + ], + [ + 144, + 198, + 143 + ], + [ + 144, + 199, + 198 + ], + [ + 192, + 199, + 144 + ], + [ + 137, + 192, + 144 + ], + [ + 200, + 201, + 146 + ], + [ + 200, + 146, + 145 + ], + [ + 201, + 149, + 146 + ], + [ + 201, + 202, + 149 + ], + [ + 202, + 151, + 149 + ], + [ + 202, + 203, + 151 + ], + [ + 203, + 153, + 151 + ], + [ + 203, + 204, + 153 + ], + [ + 204, + 155, + 153 + ], + [ + 204, + 205, + 155 + ], + [ + 205, + 157, + 155 + ], + [ + 205, + 206, + 157 + ], + [ + 206, + 159, + 157 + ], + [ + 206, + 207, + 159 + ], + [ + 207, + 160, + 159 + ], + [ + 207, + 208, + 160 + ], + [ + 209, + 200, + 145 + ], + [ + 210, + 209, + 145 + ], + [ + 210, + 145, + 161 + ], + [ + 211, + 210, + 212 + ], + [ + 211, + 209, + 210 + ], + [ + 213, + 211, + 212 + ], + [ + 213, + 212, + 214 + ], + [ + 215, + 214, + 216 + ], + [ + 215, + 213, + 214 + ], + [ + 217, + 216, + 218 + ], + [ + 217, + 215, + 216 + ], + [ + 219, + 218, + 220 + ], + [ + 219, + 217, + 218 + ], + [ + 221, + 220, + 222 + ], + [ + 221, + 219, + 220 + ], + [ + 160, + 208, + 221 + ], + [ + 160, + 221, + 222 + ], + [ + 160, + 222, + 162 + ], + [ + 164, + 210, + 161 + ], + [ + 212, + 164, + 165 + ], + [ + 212, + 210, + 164 + ], + [ + 214, + 165, + 167 + ], + [ + 214, + 212, + 165 + ], + [ + 216, + 167, + 169 + ], + [ + 216, + 214, + 167 + ], + [ + 218, + 169, + 171 + ], + [ + 218, + 216, + 169 + ], + [ + 220, + 171, + 173 + ], + [ + 220, + 218, + 171 + ], + [ + 222, + 220, + 173 + ], + [ + 222, + 173, + 175 + ], + [ + 162, + 222, + 175 + ], + [ + 184, + 223, + 185 + ], + [ + 185, + 224, + 186 + ], + [ + 185, + 223, + 224 + ], + [ + 186, + 225, + 187 + ], + [ + 186, + 224, + 225 + ], + [ + 187, + 226, + 188 + ], + [ + 187, + 225, + 226 + ], + [ + 188, + 226, + 227 + ], + [ + 188, + 227, + 189 + ], + [ + 189, + 228, + 190 + ], + [ + 189, + 227, + 228 + ], + [ + 190, + 229, + 191 + ], + [ + 190, + 228, + 229 + ], + [ + 191, + 229, + 192 + ], + [ + 230, + 231, + 193 + ], + [ + 193, + 231, + 223 + ], + [ + 193, + 223, + 184 + ], + [ + 223, + 231, + 224 + ], + [ + 231, + 232, + 224 + ], + [ + 224, + 233, + 225 + ], + [ + 224, + 232, + 233 + ], + [ + 225, + 234, + 226 + ], + [ + 225, + 233, + 234 + ], + [ + 226, + 235, + 227 + ], + [ + 226, + 234, + 235 + ], + [ + 227, + 236, + 228 + ], + [ + 227, + 235, + 236 + ], + [ + 228, + 237, + 229 + ], + [ + 228, + 236, + 237 + ], + [ + 237, + 238, + 199 + ], + [ + 229, + 237, + 199 + ], + [ + 192, + 229, + 199 + ], + [ + 239, + 230, + 193 + ], + [ + 194, + 239, + 193 + ], + [ + 194, + 240, + 239 + ], + [ + 195, + 240, + 194 + ], + [ + 195, + 241, + 240 + ], + [ + 196, + 241, + 195 + ], + [ + 196, + 242, + 241 + ], + [ + 197, + 242, + 196 + ], + [ + 197, + 243, + 242 + ], + [ + 244, + 243, + 197 + ], + [ + 198, + 244, + 197 + ], + [ + 199, + 244, + 198 + ], + [ + 199, + 245, + 244 + ], + [ + 199, + 238, + 245 + ], + [ + 246, + 247, + 201 + ], + [ + 246, + 201, + 200 + ], + [ + 247, + 202, + 201 + ], + [ + 247, + 248, + 202 + ], + [ + 248, + 203, + 202 + ], + [ + 248, + 249, + 203 + ], + [ + 249, + 204, + 203 + ], + [ + 249, + 250, + 204 + ], + [ + 250, + 205, + 204 + ], + [ + 250, + 251, + 205 + ], + [ + 251, + 206, + 205 + ], + [ + 251, + 252, + 206 + ], + [ + 252, + 207, + 206 + ], + [ + 252, + 253, + 207 + ], + [ + 253, + 254, + 207 + ], + [ + 207, + 254, + 208 + ], + [ + 209, + 246, + 200 + ], + [ + 255, + 209, + 211 + ], + [ + 255, + 246, + 209 + ], + [ + 256, + 211, + 213 + ], + [ + 256, + 255, + 211 + ], + [ + 215, + 256, + 213 + ], + [ + 257, + 256, + 215 + ], + [ + 258, + 215, + 217 + ], + [ + 258, + 257, + 215 + ], + [ + 259, + 217, + 219 + ], + [ + 259, + 258, + 217 + ], + [ + 254, + 219, + 221 + ], + [ + 254, + 259, + 219 + ], + [ + 208, + 254, + 221 + ], + [ + 260, + 261, + 230 + ], + [ + 230, + 261, + 231 + ], + [ + 231, + 262, + 232 + ], + [ + 231, + 261, + 262 + ], + [ + 232, + 263, + 233 + ], + [ + 232, + 262, + 263 + ], + [ + 233, + 264, + 234 + ], + [ + 233, + 263, + 264 + ], + [ + 234, + 265, + 235 + ], + [ + 234, + 264, + 265 + ], + [ + 235, + 266, + 236 + ], + [ + 235, + 265, + 266 + ], + [ + 236, + 266, + 237 + ], + [ + 266, + 267, + 237 + ], + [ + 237, + 267, + 268 + ], + [ + 237, + 268, + 238 + ], + [ + 269, + 260, + 230 + ], + [ + 269, + 230, + 239 + ], + [ + 240, + 269, + 239 + ], + [ + 240, + 270, + 269 + ], + [ + 241, + 270, + 240 + ], + [ + 241, + 271, + 270 + ], + [ + 242, + 271, + 241 + ], + [ + 242, + 272, + 271 + ], + [ + 243, + 272, + 242 + ], + [ + 243, + 273, + 272 + ], + [ + 244, + 273, + 243 + ], + [ + 244, + 274, + 273 + ], + [ + 275, + 274, + 244 + ], + [ + 245, + 275, + 244 + ], + [ + 238, + 275, + 245 + ], + [ + 238, + 268, + 275 + ], + [ + 276, + 277, + 261 + ], + [ + 276, + 261, + 260 + ], + [ + 261, + 278, + 262 + ], + [ + 261, + 277, + 278 + ], + [ + 262, + 279, + 263 + ], + [ + 262, + 278, + 279 + ], + [ + 263, + 280, + 264 + ], + [ + 263, + 279, + 280 + ], + [ + 264, + 281, + 265 + ], + [ + 264, + 280, + 281 + ], + [ + 265, + 281, + 266 + ], + [ + 281, + 282, + 266 + ], + [ + 266, + 283, + 267 + ], + [ + 266, + 282, + 283 + ], + [ + 267, + 284, + 268 + ], + [ + 267, + 283, + 284 + ], + [ + 285, + 276, + 269 + ], + [ + 269, + 276, + 260 + ], + [ + 286, + 285, + 269 + ], + [ + 270, + 286, + 269 + ], + [ + 271, + 286, + 270 + ], + [ + 271, + 287, + 286 + ], + [ + 272, + 287, + 271 + ], + [ + 272, + 288, + 287 + ], + [ + 273, + 288, + 272 + ], + [ + 273, + 289, + 288 + ], + [ + 274, + 289, + 273 + ], + [ + 274, + 290, + 289 + ], + [ + 275, + 290, + 274 + ], + [ + 275, + 291, + 290 + ], + [ + 268, + 284, + 275 + ], + [ + 284, + 291, + 275 + ], + [ + 292, + 293, + 277 + ], + [ + 292, + 277, + 276 + ], + [ + 293, + 278, + 277 + ], + [ + 293, + 294, + 278 + ], + [ + 294, + 279, + 278 + ], + [ + 294, + 295, + 279 + ], + [ + 295, + 280, + 279 + ], + [ + 295, + 296, + 280 + ], + [ + 296, + 281, + 280 + ], + [ + 296, + 297, + 281 + ], + [ + 297, + 282, + 281 + ], + [ + 297, + 298, + 282 + ], + [ + 298, + 283, + 282 + ], + [ + 298, + 299, + 283 + ], + [ + 299, + 284, + 283 + ], + [ + 299, + 300, + 284 + ], + [ + 285, + 301, + 292 + ], + [ + 285, + 292, + 276 + ], + [ + 302, + 285, + 286 + ], + [ + 302, + 301, + 285 + ], + [ + 303, + 286, + 287 + ], + [ + 303, + 302, + 286 + ], + [ + 304, + 287, + 288 + ], + [ + 304, + 303, + 287 + ], + [ + 305, + 288, + 289 + ], + [ + 305, + 304, + 288 + ], + [ + 306, + 289, + 290 + ], + [ + 306, + 305, + 289 + ], + [ + 307, + 306, + 291 + ], + [ + 291, + 306, + 290 + ], + [ + 284, + 300, + 291 + ], + [ + 300, + 307, + 291 + ], + [ + 308, + 309, + 293 + ], + [ + 308, + 293, + 292 + ], + [ + 309, + 310, + 293 + ], + [ + 293, + 310, + 294 + ], + [ + 310, + 295, + 294 + ], + [ + 310, + 311, + 295 + ], + [ + 311, + 296, + 295 + ], + [ + 311, + 312, + 296 + ], + [ + 312, + 297, + 296 + ], + [ + 312, + 313, + 297 + ], + [ + 313, + 298, + 297 + ], + [ + 313, + 314, + 298 + ], + [ + 314, + 315, + 298 + ], + [ + 298, + 315, + 299 + ], + [ + 315, + 300, + 299 + ], + [ + 315, + 316, + 300 + ], + [ + 301, + 317, + 308 + ], + [ + 301, + 308, + 292 + ], + [ + 318, + 301, + 302 + ], + [ + 318, + 317, + 301 + ], + [ + 319, + 302, + 303 + ], + [ + 319, + 318, + 302 + ], + [ + 320, + 303, + 304 + ], + [ + 320, + 319, + 303 + ], + [ + 321, + 304, + 305 + ], + [ + 321, + 320, + 304 + ], + [ + 322, + 321, + 306 + ], + [ + 306, + 321, + 305 + ], + [ + 323, + 306, + 307 + ], + [ + 323, + 322, + 306 + ], + [ + 300, + 316, + 307 + ], + [ + 316, + 323, + 307 + ], + [ + 324, + 325, + 326 + ], + [ + 324, + 326, + 327 + ], + [ + 326, + 328, + 329 + ], + [ + 326, + 325, + 328 + ], + [ + 329, + 330, + 331 + ], + [ + 329, + 328, + 330 + ], + [ + 331, + 332, + 333 + ], + [ + 331, + 330, + 332 + ], + [ + 333, + 334, + 335 + ], + [ + 333, + 332, + 334 + ], + [ + 335, + 336, + 337 + ], + [ + 335, + 334, + 336 + ], + [ + 336, + 338, + 339 + ], + [ + 337, + 336, + 339 + ], + [ + 339, + 340, + 341 + ], + [ + 339, + 338, + 340 + ], + [ + 342, + 324, + 327 + ], + [ + 343, + 344, + 327 + ], + [ + 344, + 342, + 327 + ], + [ + 345, + 344, + 343 + ], + [ + 345, + 346, + 344 + ], + [ + 347, + 346, + 345 + ], + [ + 347, + 348, + 346 + ], + [ + 349, + 348, + 347 + ], + [ + 349, + 350, + 348 + ], + [ + 351, + 350, + 349 + ], + [ + 351, + 352, + 350 + ], + [ + 353, + 352, + 351 + ], + [ + 341, + 353, + 351 + ], + [ + 340, + 353, + 341 + ], + [ + 354, + 355, + 309 + ], + [ + 354, + 309, + 308 + ], + [ + 355, + 310, + 309 + ], + [ + 355, + 356, + 310 + ], + [ + 356, + 357, + 310 + ], + [ + 310, + 357, + 311 + ], + [ + 357, + 312, + 311 + ], + [ + 357, + 358, + 312 + ], + [ + 358, + 313, + 312 + ], + [ + 358, + 359, + 313 + ], + [ + 359, + 314, + 313 + ], + [ + 359, + 360, + 314 + ], + [ + 360, + 315, + 314 + ], + [ + 360, + 361, + 315 + ], + [ + 361, + 362, + 315 + ], + [ + 315, + 362, + 316 + ], + [ + 317, + 363, + 354 + ], + [ + 317, + 354, + 308 + ], + [ + 364, + 317, + 318 + ], + [ + 364, + 363, + 317 + ], + [ + 365, + 318, + 319 + ], + [ + 365, + 364, + 318 + ], + [ + 366, + 319, + 320 + ], + [ + 366, + 365, + 319 + ], + [ + 367, + 366, + 321 + ], + [ + 321, + 366, + 320 + ], + [ + 368, + 321, + 322 + ], + [ + 368, + 367, + 321 + ], + [ + 369, + 322, + 323 + ], + [ + 369, + 368, + 322 + ], + [ + 316, + 369, + 323 + ], + [ + 316, + 362, + 369 + ], + [ + 324, + 370, + 325 + ], + [ + 325, + 371, + 328 + ], + [ + 325, + 370, + 371 + ], + [ + 371, + 372, + 330 + ], + [ + 328, + 371, + 330 + ], + [ + 330, + 373, + 332 + ], + [ + 330, + 372, + 373 + ], + [ + 332, + 374, + 334 + ], + [ + 332, + 373, + 374 + ], + [ + 334, + 375, + 336 + ], + [ + 334, + 374, + 375 + ], + [ + 336, + 376, + 338 + ], + [ + 336, + 375, + 376 + ], + [ + 338, + 376, + 340 + ], + [ + 377, + 378, + 379 + ], + [ + 379, + 378, + 370 + ], + [ + 379, + 370, + 342 + ], + [ + 342, + 370, + 324 + ], + [ + 370, + 380, + 371 + ], + [ + 370, + 378, + 380 + ], + [ + 344, + 379, + 342 + ], + [ + 344, + 381, + 379 + ], + [ + 371, + 382, + 372 + ], + [ + 371, + 380, + 382 + ], + [ + 346, + 381, + 344 + ], + [ + 346, + 383, + 381 + ], + [ + 372, + 384, + 373 + ], + [ + 372, + 382, + 384 + ], + [ + 348, + 383, + 346 + ], + [ + 348, + 385, + 383 + ], + [ + 373, + 386, + 374 + ], + [ + 373, + 384, + 386 + ], + [ + 350, + 385, + 348 + ], + [ + 350, + 387, + 385 + ], + [ + 374, + 388, + 375 + ], + [ + 374, + 386, + 388 + ], + [ + 352, + 387, + 350 + ], + [ + 352, + 389, + 387 + ], + [ + 375, + 390, + 376 + ], + [ + 375, + 388, + 390 + ], + [ + 353, + 389, + 352 + ], + [ + 353, + 391, + 389 + ], + [ + 376, + 390, + 391 + ], + [ + 390, + 392, + 391 + ], + [ + 376, + 391, + 353 + ], + [ + 340, + 376, + 353 + ], + [ + 393, + 377, + 379 + ], + [ + 381, + 394, + 379 + ], + [ + 394, + 393, + 379 + ], + [ + 394, + 395, + 393 + ], + [ + 394, + 396, + 395 + ], + [ + 383, + 394, + 381 + ], + [ + 383, + 397, + 394 + ], + [ + 397, + 396, + 394 + ], + [ + 397, + 398, + 396 + ], + [ + 385, + 397, + 383 + ], + [ + 385, + 399, + 397 + ], + [ + 399, + 398, + 397 + ], + [ + 399, + 400, + 398 + ], + [ + 387, + 399, + 385 + ], + [ + 387, + 401, + 399 + ], + [ + 402, + 400, + 399 + ], + [ + 401, + 402, + 399 + ], + [ + 389, + 401, + 387 + ], + [ + 389, + 403, + 401 + ], + [ + 403, + 402, + 401 + ], + [ + 403, + 404, + 402 + ], + [ + 391, + 403, + 389 + ], + [ + 391, + 405, + 403 + ], + [ + 405, + 404, + 403 + ], + [ + 405, + 406, + 404 + ], + [ + 391, + 392, + 405 + ], + [ + 407, + 408, + 355 + ], + [ + 408, + 356, + 355 + ], + [ + 408, + 409, + 356 + ], + [ + 409, + 357, + 356 + ], + [ + 409, + 410, + 357 + ], + [ + 410, + 358, + 357 + ], + [ + 410, + 411, + 358 + ], + [ + 411, + 359, + 358 + ], + [ + 411, + 412, + 359 + ], + [ + 412, + 360, + 359 + ], + [ + 412, + 413, + 360 + ], + [ + 413, + 361, + 360 + ], + [ + 413, + 414, + 361 + ], + [ + 414, + 415, + 361 + ], + [ + 416, + 417, + 355 + ], + [ + 417, + 407, + 355 + ], + [ + 416, + 355, + 354 + ], + [ + 418, + 416, + 419 + ], + [ + 418, + 417, + 416 + ], + [ + 420, + 419, + 421 + ], + [ + 420, + 418, + 419 + ], + [ + 422, + 421, + 423 + ], + [ + 422, + 420, + 421 + ], + [ + 424, + 423, + 425 + ], + [ + 424, + 422, + 423 + ], + [ + 426, + 425, + 427 + ], + [ + 426, + 424, + 425 + ], + [ + 428, + 427, + 429 + ], + [ + 428, + 426, + 427 + ], + [ + 361, + 415, + 428 + ], + [ + 361, + 428, + 429 + ], + [ + 361, + 429, + 362 + ], + [ + 363, + 416, + 354 + ], + [ + 419, + 363, + 364 + ], + [ + 419, + 416, + 363 + ], + [ + 421, + 364, + 365 + ], + [ + 421, + 419, + 364 + ], + [ + 423, + 365, + 366 + ], + [ + 423, + 421, + 365 + ], + [ + 425, + 366, + 367 + ], + [ + 425, + 423, + 366 + ], + [ + 427, + 367, + 368 + ], + [ + 427, + 425, + 367 + ], + [ + 429, + 368, + 369 + ], + [ + 429, + 427, + 368 + ], + [ + 362, + 429, + 369 + ], + [ + 377, + 430, + 378 + ], + [ + 378, + 431, + 380 + ], + [ + 378, + 430, + 431 + ], + [ + 380, + 432, + 382 + ], + [ + 380, + 431, + 432 + ], + [ + 432, + 433, + 384 + ], + [ + 382, + 432, + 384 + ], + [ + 384, + 434, + 386 + ], + [ + 384, + 433, + 434 + ], + [ + 386, + 435, + 388 + ], + [ + 386, + 434, + 435 + ], + [ + 388, + 436, + 390 + ], + [ + 388, + 435, + 436 + ], + [ + 390, + 436, + 392 + ], + [ + 437, + 438, + 395 + ], + [ + 395, + 438, + 430 + ], + [ + 395, + 430, + 393 + ], + [ + 393, + 430, + 377 + ], + [ + 430, + 439, + 431 + ], + [ + 430, + 438, + 439 + ], + [ + 431, + 440, + 432 + ], + [ + 431, + 439, + 440 + ], + [ + 432, + 441, + 433 + ], + [ + 432, + 440, + 441 + ], + [ + 433, + 442, + 434 + ], + [ + 433, + 441, + 442 + ], + [ + 442, + 443, + 435 + ], + [ + 434, + 442, + 435 + ], + [ + 435, + 444, + 436 + ], + [ + 435, + 443, + 444 + ], + [ + 392, + 436, + 405 + ], + [ + 436, + 406, + 405 + ], + [ + 436, + 444, + 406 + ], + [ + 444, + 445, + 406 + ], + [ + 446, + 447, + 437 + ], + [ + 446, + 437, + 395 + ], + [ + 448, + 446, + 395 + ], + [ + 396, + 448, + 395 + ], + [ + 398, + 448, + 396 + ], + [ + 398, + 449, + 448 + ], + [ + 400, + 449, + 398 + ], + [ + 400, + 450, + 449 + ], + [ + 402, + 450, + 400 + ], + [ + 402, + 451, + 450 + ], + [ + 404, + 451, + 402 + ], + [ + 404, + 452, + 451 + ], + [ + 406, + 452, + 404 + ], + [ + 406, + 453, + 452 + ], + [ + 445, + 453, + 406 + ], + [ + 445, + 454, + 453 + ], + [ + 455, + 447, + 446 + ], + [ + 446, + 456, + 455 + ], + [ + 446, + 448, + 456 + ], + [ + 448, + 457, + 456 + ], + [ + 448, + 449, + 457 + ], + [ + 449, + 458, + 457 + ], + [ + 449, + 450, + 458 + ], + [ + 450, + 459, + 458 + ], + [ + 451, + 459, + 450 + ], + [ + 452, + 459, + 451 + ], + [ + 452, + 460, + 459 + ], + [ + 453, + 460, + 452 + ], + [ + 453, + 461, + 460 + ], + [ + 453, + 454, + 461 + ], + [ + 456, + 462, + 455 + ], + [ + 456, + 463, + 462 + ], + [ + 462, + 464, + 465 + ], + [ + 462, + 463, + 464 + ], + [ + 457, + 463, + 456 + ], + [ + 457, + 466, + 463 + ], + [ + 463, + 467, + 464 + ], + [ + 463, + 466, + 467 + ], + [ + 458, + 466, + 457 + ], + [ + 458, + 468, + 466 + ], + [ + 466, + 469, + 467 + ], + [ + 466, + 468, + 469 + ], + [ + 459, + 468, + 458 + ], + [ + 459, + 470, + 468 + ], + [ + 468, + 471, + 469 + ], + [ + 468, + 470, + 471 + ], + [ + 460, + 470, + 459 + ], + [ + 460, + 472, + 470 + ], + [ + 470, + 473, + 471 + ], + [ + 470, + 472, + 473 + ], + [ + 461, + 472, + 460 + ], + [ + 461, + 474, + 472 + ], + [ + 474, + 475, + 472 + ], + [ + 472, + 475, + 473 + ], + [ + 465, + 476, + 477 + ], + [ + 465, + 464, + 476 + ], + [ + 477, + 478, + 479 + ], + [ + 477, + 476, + 478 + ], + [ + 464, + 467, + 476 + ], + [ + 467, + 480, + 476 + ], + [ + 476, + 481, + 478 + ], + [ + 476, + 480, + 481 + ], + [ + 469, + 480, + 467 + ], + [ + 469, + 482, + 480 + ], + [ + 480, + 483, + 481 + ], + [ + 480, + 482, + 483 + ], + [ + 471, + 482, + 469 + ], + [ + 471, + 484, + 482 + ], + [ + 482, + 485, + 483 + ], + [ + 482, + 484, + 485 + ], + [ + 473, + 484, + 471 + ], + [ + 473, + 486, + 484 + ], + [ + 484, + 487, + 485 + ], + [ + 484, + 486, + 487 + ], + [ + 475, + 486, + 473 + ], + [ + 475, + 488, + 486 + ], + [ + 486, + 488, + 489 + ], + [ + 486, + 489, + 487 + ], + [ + 490, + 491, + 479 + ], + [ + 479, + 492, + 490 + ], + [ + 479, + 478, + 492 + ], + [ + 478, + 493, + 492 + ], + [ + 478, + 481, + 493 + ], + [ + 481, + 494, + 493 + ], + [ + 481, + 483, + 494 + ], + [ + 483, + 485, + 494 + ], + [ + 485, + 495, + 494 + ], + [ + 487, + 495, + 485 + ], + [ + 487, + 496, + 495 + ], + [ + 489, + 496, + 487 + ], + [ + 489, + 497, + 496 + ], + [ + 489, + 498, + 497 + ], + [ + 499, + 491, + 490 + ], + [ + 499, + 490, + 408 + ], + [ + 490, + 492, + 408 + ], + [ + 408, + 492, + 409 + ], + [ + 492, + 410, + 409 + ], + [ + 492, + 493, + 410 + ], + [ + 493, + 411, + 410 + ], + [ + 493, + 494, + 411 + ], + [ + 494, + 412, + 411 + ], + [ + 494, + 495, + 412 + ], + [ + 495, + 413, + 412 + ], + [ + 495, + 496, + 413 + ], + [ + 496, + 414, + 413 + ], + [ + 496, + 497, + 414 + ], + [ + 497, + 498, + 500 + ], + [ + 497, + 500, + 414 + ], + [ + 501, + 408, + 407 + ], + [ + 501, + 502, + 408 + ], + [ + 502, + 499, + 408 + ], + [ + 503, + 501, + 504 + ], + [ + 503, + 502, + 501 + ], + [ + 505, + 504, + 506 + ], + [ + 505, + 503, + 504 + ], + [ + 507, + 506, + 508 + ], + [ + 507, + 505, + 506 + ], + [ + 509, + 508, + 510 + ], + [ + 509, + 507, + 508 + ], + [ + 511, + 509, + 512 + ], + [ + 512, + 509, + 510 + ], + [ + 513, + 512, + 514 + ], + [ + 513, + 511, + 512 + ], + [ + 414, + 500, + 513 + ], + [ + 414, + 513, + 514 + ], + [ + 414, + 514, + 415 + ], + [ + 417, + 501, + 407 + ], + [ + 504, + 417, + 418 + ], + [ + 504, + 501, + 417 + ], + [ + 506, + 504, + 420 + ], + [ + 420, + 504, + 418 + ], + [ + 508, + 420, + 422 + ], + [ + 508, + 506, + 420 + ], + [ + 510, + 422, + 424 + ], + [ + 510, + 508, + 422 + ], + [ + 512, + 424, + 426 + ], + [ + 512, + 510, + 424 + ], + [ + 514, + 426, + 428 + ], + [ + 514, + 512, + 426 + ], + [ + 415, + 514, + 428 + ], + [ + 515, + 438, + 437 + ], + [ + 438, + 516, + 439 + ], + [ + 438, + 515, + 516 + ], + [ + 439, + 517, + 440 + ], + [ + 439, + 516, + 517 + ], + [ + 440, + 518, + 441 + ], + [ + 440, + 517, + 518 + ], + [ + 518, + 519, + 442 + ], + [ + 441, + 518, + 442 + ], + [ + 442, + 520, + 443 + ], + [ + 442, + 519, + 520 + ], + [ + 443, + 521, + 444 + ], + [ + 443, + 520, + 521 + ], + [ + 444, + 521, + 445 + ], + [ + 447, + 522, + 515 + ], + [ + 447, + 515, + 437 + ], + [ + 515, + 523, + 516 + ], + [ + 515, + 522, + 523 + ], + [ + 516, + 524, + 517 + ], + [ + 516, + 523, + 524 + ], + [ + 517, + 525, + 518 + ], + [ + 517, + 524, + 525 + ], + [ + 518, + 526, + 519 + ], + [ + 518, + 525, + 526 + ], + [ + 519, + 527, + 520 + ], + [ + 519, + 526, + 527 + ], + [ + 520, + 528, + 521 + ], + [ + 520, + 527, + 528 + ], + [ + 521, + 454, + 445 + ], + [ + 521, + 528, + 454 + ], + [ + 529, + 522, + 455 + ], + [ + 455, + 522, + 447 + ], + [ + 522, + 530, + 523 + ], + [ + 522, + 529, + 530 + ], + [ + 523, + 531, + 524 + ], + [ + 523, + 530, + 531 + ], + [ + 524, + 532, + 525 + ], + [ + 524, + 531, + 532 + ], + [ + 525, + 533, + 526 + ], + [ + 525, + 532, + 533 + ], + [ + 526, + 534, + 527 + ], + [ + 526, + 533, + 534 + ], + [ + 527, + 535, + 528 + ], + [ + 527, + 534, + 535 + ], + [ + 528, + 535, + 461 + ], + [ + 454, + 528, + 461 + ], + [ + 536, + 529, + 465 + ], + [ + 529, + 455, + 462 + ], + [ + 465, + 529, + 462 + ], + [ + 529, + 537, + 530 + ], + [ + 529, + 536, + 537 + ], + [ + 530, + 538, + 531 + ], + [ + 530, + 537, + 538 + ], + [ + 531, + 539, + 532 + ], + [ + 531, + 538, + 539 + ], + [ + 532, + 540, + 533 + ], + [ + 532, + 539, + 540 + ], + [ + 533, + 541, + 534 + ], + [ + 533, + 540, + 541 + ], + [ + 534, + 542, + 535 + ], + [ + 534, + 541, + 542 + ], + [ + 461, + 535, + 474 + ], + [ + 474, + 535, + 475 + ], + [ + 535, + 542, + 475 + ], + [ + 543, + 544, + 477 + ], + [ + 543, + 477, + 479 + ], + [ + 544, + 536, + 477 + ], + [ + 477, + 536, + 465 + ], + [ + 537, + 544, + 545 + ], + [ + 537, + 536, + 544 + ], + [ + 545, + 543, + 546 + ], + [ + 545, + 544, + 543 + ], + [ + 538, + 545, + 547 + ], + [ + 538, + 537, + 545 + ], + [ + 545, + 548, + 547 + ], + [ + 545, + 546, + 548 + ], + [ + 549, + 547, + 550 + ], + [ + 539, + 547, + 549 + ], + [ + 539, + 538, + 547 + ], + [ + 547, + 548, + 550 + ], + [ + 551, + 550, + 552 + ], + [ + 551, + 549, + 550 + ], + [ + 540, + 549, + 551 + ], + [ + 540, + 539, + 549 + ], + [ + 541, + 551, + 553 + ], + [ + 553, + 552, + 554 + ], + [ + 553, + 551, + 552 + ], + [ + 541, + 540, + 551 + ], + [ + 542, + 553, + 555 + ], + [ + 542, + 541, + 553 + ], + [ + 555, + 554, + 556 + ], + [ + 555, + 553, + 554 + ], + [ + 475, + 542, + 488 + ], + [ + 542, + 555, + 488 + ], + [ + 555, + 489, + 488 + ], + [ + 555, + 556, + 489 + ], + [ + 557, + 543, + 479 + ], + [ + 491, + 557, + 479 + ], + [ + 546, + 557, + 558 + ], + [ + 546, + 543, + 557 + ], + [ + 548, + 558, + 559 + ], + [ + 548, + 546, + 558 + ], + [ + 550, + 559, + 560 + ], + [ + 550, + 548, + 559 + ], + [ + 552, + 560, + 561 + ], + [ + 552, + 550, + 560 + ], + [ + 554, + 561, + 562 + ], + [ + 554, + 552, + 561 + ], + [ + 556, + 562, + 563 + ], + [ + 556, + 554, + 562 + ], + [ + 556, + 563, + 489 + ], + [ + 489, + 563, + 498 + ], + [ + 564, + 491, + 499 + ], + [ + 564, + 557, + 491 + ], + [ + 558, + 564, + 565 + ], + [ + 558, + 557, + 564 + ], + [ + 559, + 565, + 566 + ], + [ + 559, + 558, + 565 + ], + [ + 560, + 566, + 567 + ], + [ + 560, + 559, + 566 + ], + [ + 561, + 567, + 568 + ], + [ + 561, + 560, + 567 + ], + [ + 562, + 568, + 569 + ], + [ + 562, + 561, + 568 + ], + [ + 563, + 569, + 570 + ], + [ + 563, + 562, + 569 + ], + [ + 498, + 563, + 570 + ], + [ + 498, + 570, + 500 + ], + [ + 502, + 564, + 499 + ], + [ + 565, + 502, + 503 + ], + [ + 565, + 564, + 502 + ], + [ + 566, + 503, + 505 + ], + [ + 566, + 565, + 503 + ], + [ + 567, + 505, + 507 + ], + [ + 567, + 566, + 505 + ], + [ + 568, + 507, + 509 + ], + [ + 568, + 567, + 507 + ], + [ + 569, + 509, + 511 + ], + [ + 569, + 568, + 509 + ], + [ + 570, + 511, + 513 + ], + [ + 570, + 569, + 511 + ], + [ + 500, + 570, + 513 + ] + ] + }, + { + "id": 2, + "type": "polyline", + "coordinateIds": [ + 571, + 572 + ] + }, + { + "id": 3, + "type": "cell", + "intervals": [ + [ + [ + 10, + 13, + 6 + ], + [ + 10, + 21, + 14 + ] + ] + ] + }, + { + "id": 4, + "type": "node", + "coordinateIds": [ + 572 + ] + } + ] + }, + "materials": [ + { + "name": "PEC", + "id": 1, + "type": "pec" + }, + { + "name": "Isotropic_Material", + "id": 2, + "type": "isotropic", + "relativePermittivity": 1.0, + "relativePermeability": 1.0, + "electricConductivity": 5000.0, + "magneticConductivity": 0.0 + }, + { + "name": "Wire_material", + "id": 3, + "type": "wire", + "radius": 0.0001, + "resistancePerMeter": 0.0, + "inductancePerMeter": 0.0 + }, + { + "name": "Terminal", + "id": 4, + "type": "terminal", + "terminations": [ + { + "type": "series", + "resistance": 0.1, + "capacitance": 1e+22 + } + ] + }, + { + "name": "Short", + "id": 5, + "type": "terminal", + "terminations": [ + { + "type": "short" + } + ] + } + ], + "materialAssociations": [ + { + "materialId": 1, + "elementIds": [ + 1 + ] + }, + { + "name": "Cable", + "type": "cable", + "elementIds": [ + 2 + ], + "materialId": 3, + "initialTerminalId": 4, + "endTerminalId": 5 + } + ], + "sources": [ + { + "name": "Generator", + "type": "generator", + "magnitudeFile": "predefinedExcitation.1.exc", + "elementIds": [ + 4 + ], + "field": "voltage" + } + ], + "probes": [ + { + "name": "BulkProbe", + "type": "bulkCurrent", + "field": "electric", + "elementIds": [ + 3 + ], + "domain": { + "type": "time" + } + } + ] } diff --git a/testData/input_examples/mixed_sign_surface_interval.fdtd.json b/testData/input_examples/mixed_sign_surface_interval.fdtd.json deleted file mode 100644 index 4528541f4..000000000 --- a/testData/input_examples/mixed_sign_surface_interval.fdtd.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "mesh": { - "coordinates": [], - "elements": [ - { - "id": 1, - "name": "mixed-sign-surface", - "type": "cell", - "intervals": [[[0, 1, 0], [1, 0, 0]]] - } - ] - } -} From 37853d4c6bef89c61d39a46a2ac8bf6005f9a41f Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Fri, 14 Aug 2026 11:17:40 +0200 Subject: [PATCH 24/35] Update linking in CMakeLists.txt and modify readMultipolarExpansion function signatures for consistency in smbjson.F90; adjust test assertions in test_integration.py for correct dictionary keys. --- CMakeLists.txt | 4 +++- src_json_parser/smbjson.F90 | 20 ++++++++++---------- test/pyWrapper/test_integration.py | 7 ++++--- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 285989629..12bb63a50 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,7 +269,9 @@ if (SEMBA_FDTD_EXECUTABLE) add_executable(semba-fdtd "src_main_pub/launcher.F90" ) - target_link_libraries(semba-fdtd semba-main semba-reports) + # Intel LLVM's linker does not rescan semba-main for module dependencies + # that are defined later in the same static archive. + target_link_libraries(semba-fdtd "$" semba-reports) target_link_libraries(semba-fdtd ${MPI_Fortran_LIBRARIES}) endif() diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index f87e95681..2af0c22a1 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -4350,7 +4350,7 @@ subroutine assignInCellProperties(res, mat, n) call this%core%get(mat%p, J_MAT_MULTIWIRE_MULTIPOLAR_EXPANSION, multipolarExpansionPtr) allocate(res%multipolar_expansion(1)) - res%multipolar_expansion(1) = readMultipolarExpansion(multipolarExpansionPtr) + call readMultipolarExpansion(multipolarExpansionPtr, res%multipolar_expansion(1)) else if (hasRadius) then res%cell_inductance_per_meter = null_matrix res%cell_capacitance_per_meter = null_matrix @@ -4386,9 +4386,9 @@ subroutine assignInCellProperties(res, mat, n) end subroutine - function readMultipolarExpansion(multipolarExpansionPtr) result (res) - type(json_value), pointer :: multipolarExpansionPtr - type(multipolar_expansion_t) :: res + subroutine readMultipolarExpansion(multipolarExpansionPtr, res) + type(json_value), pointer, intent(in) :: multipolarExpansionPtr + type(multipolar_expansion_t), intent(out) :: res type(json_value), pointer :: jvPtr logical :: found @@ -4402,14 +4402,14 @@ function readMultipolarExpansion(multipolarExpansionPtr) result (res) if (.not. found) then call WarnErrReport("Error reading multipolar expansion electric reconstruction not found", .true.) end if - res%electric = readFieldReconstruction(jvPtr) + call readFieldReconstruction(jvPtr, res%electric) call this%core%get(multipolarExpansionPtr, J_MAT_MULTIWIRE_ME_MAGNETIC, jvPtr, found) if (.not. found) then call WarnErrReport("Error reading multipolar expansion magnetic reconstruction not found", .true.) end if - res%magnetic = readFieldReconstruction(jvPtr) - end function + call readFieldReconstruction(jvPtr, res%magnetic) + end subroutine function readInnnerRegionBox(ptr) result(inner_region) type(json_value), pointer, intent(in) :: ptr @@ -4418,9 +4418,9 @@ function readInnnerRegionBox(ptr) result(inner_region) inner_region%max = this%getRealsAt(ptr, J_MAT_MULTIWIRE_ME_INNER_REGION_BOX_MAX) end function - function readFieldReconstruction(ptr) result(res) + subroutine readFieldReconstruction(ptr, res) type(json_value), pointer, intent(in) :: ptr - type(field_reconstruction_t), dimension(:), allocatable :: res + type(field_reconstruction_t), dimension(:), allocatable, intent(out) :: res real, dimension(:), allocatable :: auxAB type(json_value), pointer :: frPtr type(json_value), pointer :: absPtr @@ -4449,7 +4449,7 @@ function readFieldReconstruction(ptr) result(res) end do end do - end function + end subroutine function buildSegments(j_cable, despl) result(res) type(materialAssociation_t), intent(in) :: j_cable diff --git a/test/pyWrapper/test_integration.py b/test/pyWrapper/test_integration.py index cea2661b1..cb7d51f1e 100644 --- a/test/pyWrapper/test_integration.py +++ b/test/pyWrapper/test_integration.py @@ -173,8 +173,8 @@ def test_fill_conformal_vtk_sphere(tmp_path): assert line_media_dict assert face_media_dict - assert line_media_dict[12] == 12 # PEC line - assert line_media_dict[13] == 24 # Conformal line + assert line_media_dict[0.5] == 12 # PEC line + assert line_media_dict[2004] == 24 # Conformal lines assert face_media_dict[0] == 6 # PEC surface assert face_media_dict[1005] == 24 # Conformal PEC surface @@ -308,7 +308,8 @@ def test_fill_conformal_vtk_corner(tmp_path): line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') assert line_media_dict - assert line_media_dict[13] == 5 # Conformal line #1 + assert line_media_dict[0.5] == 1 # PEC line + assert line_media_dict[2004] == 4 # Conformal lines @pytest.mark.probes @pytest.mark.movie From 5173ce3b0ce0256f0c8dc4930ab415f6c0b99a17 Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Fri, 14 Aug 2026 12:26:01 +0200 Subject: [PATCH 25/35] Limit Intel archive rescan to Unix --- CMakeLists.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 12bb63a50..bacb4f26e 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,9 +269,14 @@ if (SEMBA_FDTD_EXECUTABLE) add_executable(semba-fdtd "src_main_pub/launcher.F90" ) - # Intel LLVM's linker does not rescan semba-main for module dependencies - # that are defined later in the same static archive. - target_link_libraries(semba-fdtd "$" semba-reports) + # Intel LLVM on Linux does not rescan semba-main for module dependencies + # that are defined later in the same static archive. RESCAN is unsupported + # by the Windows linker used by Intel oneAPI there. + if (UNIX AND CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM") + target_link_libraries(semba-fdtd "$" semba-reports) + else() + target_link_libraries(semba-fdtd semba-main semba-reports) + endif() target_link_libraries(semba-fdtd ${MPI_Fortran_LIBRARIES}) endif() From bfdd7777adb8c0843933b8aa2e88bf3844ec6f1b Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Mon, 17 Aug 2026 11:32:10 +0200 Subject: [PATCH 26/35] Remove skip marker for conformal PEC surface timestepping test in test_full_system.py --- test/pyWrapper/test_full_system.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index 06cb1c3bf..150694a14 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1648,7 +1648,6 @@ def test_conformal_delay(tmp_path): @pytest.mark.conformal @pytest.mark.planewave @pytest.mark.probes -@pytest.mark.skip(reason="Conformal PEC surface timestepping is not implemented for open sheets.") @pytest.mark.parametrize("normal_axis,propagation,reverse_winding", [ ('x', 1, False), ('x', -1, False), ('x', 1, True), ('x', -1, True), ('y', 1, False), ('y', -1, False), ('z', 1, False), ('z', -1, False) From 6a54033fea3bbc0a2e33d29a2a8ec3954d62fecd Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Mon, 17 Aug 2026 18:31:23 +0200 Subject: [PATCH 27/35] Dummy comment to re-trigger action --- test/pyWrapper/test_full_system.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index 150694a14..e13ffed7b 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -1655,7 +1655,7 @@ def test_conformal_delay(tmp_path): def test_conformal_surface_midcell_reflection(tmp_path, normal_axis, propagation, reverse_winding): fn = CASES_FOLDER + 'conformal_surface/conformal_surface_midcell.fdtd.json' solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) - + permutations = { 'x': (0, 1, 2), 'y': (1, 0, 2), From 15fb947006986244e8df2fbff5ee91a9762140cf Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Mon, 17 Aug 2026 19:11:22 +0200 Subject: [PATCH 28/35] Fix issues with RKIND and double --- src_json_parser/smbjson.F90 | 42 ++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 2af0c22a1..17d8e8868 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -93,7 +93,7 @@ module smbjson_m type, private :: thinwiretermination_t integer :: terminationType - real :: r, l, c + real(kind=RKIND) :: r, l, c end type type, private :: generator_description_t @@ -118,9 +118,9 @@ module smbjson_m end type type, private :: domain_t - real :: tstart = 0.0, tstop = 0.0, tstep = 0.0 - real :: fstart = 0.0, fstop = 0.0 - real :: fstep = 0.0 + real(kind=RKIND) :: tstart = 0.0_RKIND, tstop = 0.0_RKIND, tstep = 0.0_RKIND + real(kind=RKIND) :: fstart = 0.0_RKIND, fstop = 0.0_RKIND + real(kind=RKIND) :: fstep = 0.0_RKIND ! integer :: fstep = 0 character(len=:), allocatable :: filename integer :: type1 = NP_T1_PLAIN, type2 = NP_T2_TIME @@ -517,8 +517,8 @@ function readPMLProperties(p) result(res) type(FronteraPML_t) :: res character(len=*), intent(in) :: p res%numCapas = this%getIntAt(this%root, p//'.'//J_BND_PML_LAYERS, default=8) - res%orden = this%getRealAt(this%root, p//'.'//J_BND_PML_ORDER, default=2.0) - res%refl = this%getRealAt(this%root, p//'.'//J_BND_PML_REFLECTION, default=0.001) + res%orden = this%getRealAt(this%root, p//'.'//J_BND_PML_ORDER, default=2.0_RKIND) + res%refl = this%getRealAt(this%root, p//'.'//J_BND_PML_REFLECTION, default=0.001_RKIND) end function function labelToBoundaryPlace(str) result (place) @@ -834,10 +834,10 @@ function readDielectric(mA, cellType) result(res) matPtr = this%matTable%getId(mA%materialId) ! Fills rest of dielectric data. - res%sigma = this%getRealAt(matPtr%p, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0) - res%sigmam = this%getRealAt(matPtr%p, J_MAT_MAGNETIC_CONDUCTIVITY, default=0.0) - res%eps = this%getRealAt(matPtr%p, J_MAT_REL_PERMITTIVITY, default=1.0)*EPSILON_VACUUM - res%mu = this%getRealAt(matPtr%p, J_MAT_REL_PERMEABILITY, default=1.0)*MU_VACUUM + res%sigma = this%getRealAt(matPtr%p, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0_RKIND) + res%sigmam = this%getRealAt(matPtr%p, J_MAT_MAGNETIC_CONDUCTIVITY, default=0.0_RKIND) + res%eps = this%getRealAt(matPtr%p, J_MAT_REL_PERMITTIVITY, default=1.0_RKIND)*EPSILON_VACUUM + res%mu = this%getRealAt(matPtr%p, J_MAT_REL_PERMEABILITY, default=1.0_RKIND)*MU_VACUUM end function @@ -886,8 +886,8 @@ function readLumped(mA, cellType) result(res) write(errorMsg, '(A)') errorMsgInit, mA%materialId, " resistance not found." call WarnErrReport(errorMsg, .true.) end if - res%Rtime_on = this%getRealAt(matPtr%p, J_MAT_LUMPED_STARTING_TIME, default=0.0) - res%Rtime_off = this%getRealAt(matPtr%p, J_MAT_LUMPED_END_TIME, default=1.0) + res%Rtime_on = this%getRealAt(matPtr%p, J_MAT_LUMPED_STARTING_TIME, default=0.0_RKIND) + res%Rtime_off = this%getRealAt(matPtr%p, J_MAT_LUMPED_END_TIME, default=1.0_RKIND) case (J_MAT_LUMPED_MODEL_INDUCTOR) res%inductor = .true. res%L = this%getRealAt(matPtr%p, J_MAT_LUMPED_INDUCTANCE, found) @@ -895,7 +895,7 @@ function readLumped(mA, cellType) result(res) write(errorMsg, '(A)') errorMsgInit, mA%materialId, " inductance not found." call WarnErrReport(errorMsg, .true.) end if - res%R = this%getRealAt(matPtr%p, J_MAT_LUMPED_RESISTANCE, default=0.0) + res%R = this%getRealAt(matPtr%p, J_MAT_LUMPED_RESISTANCE, default=0.0_RKIND) case (J_MAT_LUMPED_MODEL_CAPACITOR) res%capacitor = .true. res%C = this%getRealAt(matPtr%p, J_MAT_LUMPED_CAPACITANCE, found) @@ -2475,15 +2475,15 @@ function getDomain(this, place, path) result(res) domainType = this%getStrAt(domain, J_TYPE, default=J_PR_DOMAIN_TYPE_TIME) res%type2 = getNPDomainType(domainType, transferFunctionFound) - res%tstart = this%getRealAt(domain, J_PR_DOMAIN_TIME_START, default=0.0) - res%tstop = this%getRealAt(domain, J_PR_DOMAIN_TIME_STOP, default=0.0) - res%tstep = this%getRealAt(domain, J_PR_DOMAIN_TIME_STEP, default=0.0) - res%fstart = this%getRealAt(domain, J_PR_DOMAIN_FREQ_START, default=0.0) - res%fstop = this%getRealAt(domain, J_PR_DOMAIN_FREQ_STOP, default=0.0) + res%tstart = this%getRealAt(domain, J_PR_DOMAIN_TIME_START, default=0.0_RKIND) + res%tstop = this%getRealAt(domain, J_PR_DOMAIN_TIME_STOP, default=0.0_RKIND) + res%tstep = this%getRealAt(domain, J_PR_DOMAIN_TIME_STEP, default=0.0_RKIND) + res%fstart = this%getRealAt(domain, J_PR_DOMAIN_FREQ_START, default=0.0_RKIND) + res%fstop = this%getRealAt(domain, J_PR_DOMAIN_FREQ_STOP, default=0.0_RKIND) numberOfFrequencies = this%getIntAt(domain, J_PR_DOMAIN_FREQ_NUMBER, default=0) if (numberOfFrequencies == 0) then - res%fstep = 0.0 + res%fstep = 0.0_RKIND else res%fstep = (res%fstop - res%fstart) / numberOfFrequencies endif @@ -4765,13 +4765,13 @@ function getRealsAt(this, place, path, found) result(res) end function function getMatrixAt(this, place, path, found) result(res) - real, dimension(:,:), allocatable :: res + real(kind=RKIND), dimension(:,:), allocatable :: res class(parser_t) :: this type(json_value), pointer :: place, matrix, row character(len=*) :: path logical, intent(out), optional :: found integer :: i, vartype, nr - real, dimension(:), allocatable :: res_row + real(kind=RKIND), dimension(:), allocatable :: res_row logical :: localFound call this%core%get(place, path, matrix, localfound) From 3083e6c22588d6053128d08bbbe002c6abd6985c Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Wed, 19 Aug 2026 12:29:09 +0200 Subject: [PATCH 29/35] Refactor preprocess_geom.F90 for code consistency and readability - Standardized indentation and spacing throughout the file. - Updated type definitions for clarity, specifically changing `XYZlimit_t_scaled` to `XYZlimit_scaled_t`. - Ensured consistent use of `intent` attributes in subroutine definitions. - Improved readability by aligning comments and code blocks. - Removed unnecessary comments and cleaned up commented-out code sections. --- src_conformal/cell_map.F90 | 48 +- src_main_pub/fdetypes.F90 | 1836 +++++++++++++++--------------- src_main_pub/preprocess_geom.F90 | 322 +++--- 3 files changed, 1100 insertions(+), 1106 deletions(-) diff --git a/src_conformal/cell_map.F90 b/src_conformal/cell_map.F90 index 4fd0111b0..334b803d4 100644 --- a/src_conformal/cell_map.F90 +++ b/src_conformal/cell_map.F90 @@ -18,7 +18,7 @@ module cell_map_m end type type, public :: cell_ratios_t - real (kind=rkind), dimension(3) :: area = [1,1,1], length = [1,1,1] + real(kind=rkind), dimension(3) :: area = [1,1,1], length = [1,1,1] end type type, extends(fhash_tbl_t) :: cell_ratios_map_t @@ -100,7 +100,7 @@ subroutine addTriangleToSide(this, side, triangle) type(triangle_t), intent(in) :: triangle class(*), allocatable :: alloc_list type(element_set_t) :: aux_list - integer (kind=4), dimension(4) :: side_dir + integer(kind=4), dimension(4) :: side_dir type(side_dir_t), dimension(:), allocatable :: aux_keys side_dir(1:3) = side%getCell() side_dir(4) = side%getEdge() @@ -130,6 +130,8 @@ subroutine addTriangleToSide(this, side, triangle) allocate(this%keys(size(aux_keys))) this%keys = aux_keys end if + + end subroutine subroutine buildSideMap(res, triangles) @@ -138,7 +140,7 @@ subroutine buildSideMap(res, triangles) type(side_triangle_map_t) :: tri_map type(side_dir_t), dimension(:), allocatable :: keys type(element_set_t) :: elems - integer (kind=4) :: i + integer(kind=4) :: i call buildSideToTrisMap(tri_map, triangles) keys = tri_map%keys do i = 1, size(keys) @@ -156,7 +158,7 @@ subroutine buildCellMap(res, volume) type(side_map_t) :: side_map, side_map_on type(cell_t), dimension(:), allocatable :: keys type(element_set_t) :: elems - integer (kind=4) :: i + integer(kind=4) :: i call buildMapOfTrisOnFaces(tri_map, volume%triangles) call buildMapOfIntervals(interval_map, volume%intervals) call buildMapOfSidesOnFaceOrEdgeFromTrisNotOnFaces(side_map, volume%triangles) @@ -177,7 +179,7 @@ subroutine buildCellMap(res, volume) function mergeKeys(tri_keys, side_keys) result(res) type(cell_t), dimension(:), allocatable, intent(in) :: tri_keys, side_keys type(cell_t), dimension(:), allocatable :: res, aux - integer (kind=4) :: i + integer(kind=4) :: i if (size(tri_keys) == 0) then allocate(res(0)) else @@ -206,7 +208,7 @@ subroutine addKey(keys, new_key) logical function isNewKey(keys, k) type(cell_t), dimension(:), allocatable, intent(in) :: keys type(cell_t), intent(in) :: k - integer (kind=4) :: i + integer(kind=4) :: i isNewKey = .true. if (size(keys) /= 0) then do i = 1, size(keys) @@ -218,7 +220,7 @@ logical function isNewKey(keys, k) subroutine buildMapOfTrisOnFaces(res, triangles) type(triangle_map_t), intent(inout) :: res type(triangle_t), dimension(:), allocatable :: triangles - integer (kind=4) :: i + integer(kind=4) :: i if (.not. allocated(res%keys)) allocate(res%keys(0)) do i = 1, size(triangles) if (triangles(i)%isOnAnyFace()) then @@ -231,7 +233,7 @@ subroutine buildMapOfTrisOnFaces(res, triangles) subroutine buildMapOfIntervals(res, intervals) type(interval_map_t), intent(inout) :: res type(interval_t), dimension(:), allocatable :: intervals - integer (kind=4) :: i + integer(kind=4) :: i if (.not. allocated(res%keys)) allocate(res%keys(0)) do i = 1, size(intervals) call res%addInterval(intervals(i)) @@ -243,8 +245,8 @@ subroutine buildMapOfSidesOnFaceOrEdgeFromTrisNotOnFaces(res, triangles) type(side_map_t), intent(inout) :: res type(triangle_t), dimension(:), allocatable :: triangles type(side_t), dimension(3) :: sides - integer (kind=4) :: i, j - integer (kind=4), dimension(3) :: cell + integer(kind=4) :: i, j + integer(kind=4), dimension(3) :: cell if (.not. allocated(res%keys)) allocate(res%keys(0)) do i = 1, size(triangles) if (.not. triangles(i)%isOnAnyFace()) then @@ -263,8 +265,8 @@ subroutine buildMapOfSidesOnEdgeFromTrisOnFaces(res, triangles) type(side_map_t), intent(inout) :: res type(triangle_t), dimension(:), allocatable :: triangles type(side_t), dimension(3) :: sides - integer (kind=4) :: i, j - integer (kind=4), dimension(3) :: cell + integer(kind=4) :: i, j + integer(kind=4), dimension(3) :: cell if (.not. allocated(res%keys)) allocate(res%keys(0)) do i = 1, size(triangles) if (triangles(i)%isOnAnyFace()) then @@ -310,7 +312,7 @@ subroutine addTriangle(this, triangle) type(triangle_t) :: triangle class(*), allocatable :: alloc_list type(element_set_t) :: aux_list - integer (kind=4), dimension(3) :: cell + integer(kind=4), dimension(3) :: cell type(cell_t), dimension(:), allocatable :: aux_keys cell = triangle%getCell() if (this%hasKey(cell)) then @@ -347,7 +349,7 @@ subroutine addInterval(this, interval) type(interval_t) :: interval class(*), allocatable :: alloc_list type(element_set_t) :: aux_list - integer (kind=4), dimension(3) :: cell + integer(kind=4), dimension(3) :: cell type(cell_t), dimension(:), allocatable :: aux_keys type(side_t) :: aux aux%init%position = interval%ini%cell @@ -387,7 +389,7 @@ subroutine addSide(this, side) type(side_t) :: side class(*), allocatable :: alloc_list type(element_set_t) :: aux_list - integer (kind=4), dimension(3) :: cell + integer(kind=4), dimension(3) :: cell type(cell_t), dimension(:), allocatable :: aux_keys cell = side%getCell() if (this%hasKey(cell)) then @@ -427,7 +429,7 @@ subroutine addSideOn(this, side) type(side_t) :: side class(*), allocatable :: alloc_list type(element_set_t) :: aux_list - integer (kind=4), dimension(3) :: cell + integer(kind=4), dimension(3) :: cell type(cell_t), dimension(:), allocatable :: aux_keys cell = side%getCell() if (this%hasKey(cell)) then @@ -554,9 +556,9 @@ subroutine addFaceRatio(this, cell, direction, ratio) class(cell_ratios_map_t) :: this class(*), allocatable :: alloc_list type(cell_ratios_t) :: aux_cell_ratio - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4), intent(in) :: direction - real (kind=rkind), intent(in) :: ratio + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4), intent(in) :: direction + real(kind=rkind), intent(in) :: ratio type(cell_t), dimension(:), allocatable :: aux_keys if (this%hasKey(cell)) then @@ -586,9 +588,9 @@ subroutine addEdgeRatio(this, cell, direction, ratio) class(*), allocatable :: alloc_list type(cell_ratios_t) :: aux_cell_ratio - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4), intent(in) :: direction - real (kind=rkind), intent(in) :: ratio + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4), intent(in) :: direction + real(kind=rkind), intent(in) :: ratio type(cell_t), dimension(:), allocatable :: aux_keys if (this%hasKey(cell)) then @@ -630,4 +632,4 @@ function getCellRatiosInCell(this, k) result(res) end function -end module +end module \ No newline at end of file diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index 062c1cbff..ed65de76f 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -1,605 +1,600 @@ - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! This module contains the types and parameters shared by all the rest of the modules -! No public variables are defined. Only types and parameters -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! This module contains the types and parameters shared by all the rest of the modules +! No public variables are defined. Only types and parameters +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! module FDETYPES_m - - -#ifdef CompileWithOpenMP - use omp_lib -#endif - - -#ifdef CompileWithReal16 -#undef CompileWithReal8 -#undef CompileWithReal4 -#endif - -#ifdef CompileWithReal8 -#undef CompileWithReal16 -#undef CompileWithReal4 -#endif - -#ifndef CompileWithReal16 -#ifndef CompileWithReal8 -#ifndef CompileWithReal4 -#define CompileWithReal4 -#endif -#endif -#endif - - -#ifndef CompileWithInt4 -#ifndef CompileWithInt2 -#ifndef CompileWithInt1 -#define CompileWithInt4 -#endif -#endif -#endif - - -#ifdef CompileWithMPI - use MPI - implicit none -#endif - - !Every type and parameter is public - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - PUBLIC - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !Tunable Parameters - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - integer(kind=4) :: quienmpi,tamaniompi - integer(kind=4) :: SUBCOMM_MPI -!240424 para que funcionen las sondas slice de conformal lo pongo como general. niapaa. algun dia hay que reahacer el conformal - !y esto debe desaparecer - integer(kind=4) :: SUBCOMM_MPI_conformal_probes,MPI_conformal_probes_root -!!! - integer (kind=8), parameter :: maxmpibytes = 2**27 - integer (kind=4), parameter :: BuffObse=2**10 !Steps of the temporal buffer to store evolution data - integer (kind=8), parameter :: MaxMemoryProbes=2_8**37_8 !128 Gb Maximum bytes of the buffer to store evolution data - integer (kind=8), parameter :: MaxProbes=150000 !Maximum number of probes (a limit of 200000 is set with ulimit in Linux) - ! - ! - INTEGER, parameter :: topCPUtime=10000000 !maximum cpu time in minutes - !size of character strings - INTEGER, parameter :: BUFSIZE=1024 - INTEGER, parameter :: BUFSIZE_LONG=16384 - !!!INTEGER :: maxmessages=20000 !numero maximo mensajes para alocatear en MPI overrideable con -maxmessages y quitado como parameter fijo !deprecated 07/03/15 - !dxf output stuff - !!!integer, parameter :: maxdxf= 20000,dxflinesize=14 - !!!character(len=dxflinesize) :: dxfbuff - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !Rest of Parameters - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -#ifdef CompileWithInt1 -#undef CompileWithInt2 -#undef CompileWithInt4 - INTEGER (kind=2), parameter :: INTEGERSIZEOFMEDIAMATRICES=1 -#ifdef CompileWithMPI - INTEGER (kind=4), parameter :: INTEGERSIZE=MPI_INTEGER1 -#endif -#endif -#ifdef CompileWithInt2 -#undef CompileWithInt1 -#undef CompileWithInt4 - INTEGER (kind=2), parameter :: INTEGERSIZEOFMEDIAMATRICES=2 -#ifdef CompileWithMPI - INTEGER (kind=4), parameter :: INTEGERSIZE=MPI_INTEGER2 -#endif -#endif -#ifdef CompileWithInt4 -#undef CompileWithInt1 -#undef CompileWithInt2 - INTEGER (kind=2), parameter :: INTEGERSIZEOFMEDIAMATRICES=4 -#ifdef CompileWithMPI - INTEGER (kind=4), parameter :: INTEGERSIZE=MPI_INTEGER4 -#endif -#endif - INTEGER (kind=4), parameter :: IKINDMTAG=4 !PARA SGGMTAG 151020 !dejarlo en 4 bytes. No tocar - - INTEGER (kind=2), parameter :: SINGLE=4 - INTEGER (kind=2), parameter :: DOUBLE=8 - INTEGER (kind=2), parameter :: LONG_DOUBLE=16 -#ifdef CompileWithReal8 - INTEGER (kind=2), parameter :: RKIND=DOUBLE - INTEGER (kind=2), parameter :: RKIND_wires=DOUBLE - INTEGER (kind=2), parameter :: RKIND_tiempo=DOUBLE - INTEGER (kind=2), parameter :: CKIND=DOUBLE -#else -#ifdef CompileWithReal16 - INTEGER (kind=2), parameter :: RKIND=LONG_DOUBLE - INTEGER (kind=2), parameter :: RKIND_wires=LONG_DOUBLE - INTEGER (kind=2), parameter :: RKIND_tiempo=LONG_DOUBLE - INTEGER (kind=2), parameter :: CKIND=LONG_DOUBLE -#else - !default - INTEGER (kind=2), parameter :: RKIND=SINGLE - INTEGER (kind=2), parameter :: RKIND_wires=DOUBLE !020719 a peticion - INTEGER (kind=2), parameter :: RKIND_tiempo=DOUBLE - !! INTEGER (kind=2), parameter :: CKIND=SINGLE - INTEGER (kind=2), parameter :: CKIND=DOUBLE !LOS COMPLEJOS LOS VOY A MANEJAR SIEMPRE EN DOBLE PRECISION como minimo -#endif -#endif - - ! - -#ifdef CompileWithMPI - real (kind=RKIND), parameter :: plusCPU_PML=2.0_RKIND !heuristic (1=No CPU overhead, 2=double CPU overhead) -#endif -#ifdef CompileWithMPI -#ifdef CompileWithReal8 - integer (kind=4), parameter :: REALSIZE=MPI_DOUBLE_PRECISION - integer (kind=4), parameter :: REALSIZE_wires=MPI_DOUBLE_PRECISION - integer (kind=4), parameter :: COMPLEXSIZE=MPI_DOUBLE_COMPLEX - integer (kind=4), parameter :: REALSIZE_tiempo=MPI_DOUBLE_PRECISION -#else -#ifdef CompileWithReal16 - integer (kind=4), parameter :: REALSIZE=MPI_REAL16 - integer (kind=4), parameter :: COMPLEXSIZE=MPI_COMPLEX32 - integer (kind=4), parameter :: REALSIZE_tiempo=MPI_REAL_16 -#else - integer (kind=4), parameter :: REALSIZE=MPI_REAL - integer (kind=4), parameter :: REALSIZE_wires=MPI_DOUBLE_PRECISION - integer (kind=4), parameter :: REALSIZE_tiempo=MPI_DOUBLE_PRECISION - -!!! integer (kind=4), parameter :: COMPLEXSIZE=MPI_COMPLEX - integer (kind=4), parameter :: COMPLEXSIZE=MPI_DOUBLE_COMPLEX !LOS COMPLEJOS LOS VOY A MANEJAR SIEMPRE EN DOBLE PRECISION como minimo !esto debe ir ligado a la definicion de ckind -#endif -#endif -#endif - REAL (KIND=RKIND) , parameter :: heurCFL=0.8_RKIND - REAL (KIND=RKIND) , parameter :: & - pi=3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148, & - unmedio = 0.5_RKIND - complex (kind=CKIND), parameter :: mcPI2 = - (0.0_RKIND, 1.0_RKIND) * 2.0_RKIND * pi; - ! - integer (kind=4), parameter :: Down=1, Up=2, Left=3, Right=4, Back=5, Front=6 - ! - integer (kind=4), parameter :: iEx=1,iEy=2,iEz=3,iHx=4,iHy=5,iHz=6,centroide=8,Nothing=666 - ! - integer (kind=4), parameter :: iMEC=51 !modulus, tangential, normal fields in cuts for Volumic probes - integer (kind=4), parameter :: iMHC=52 - integer (kind=4), parameter :: iCur=53 !Bloque currents along edges in thin wires, pec and surface edges - integer (kind=4), parameter :: iCurX=54 !Bloque currents along edges in surface with normal X - integer (kind=4), parameter :: iCurY=55 !Bloque currents along edges in surface with normal Y - integer (kind=4), parameter :: iCurZ=56 !Bloque currents along edges in surface with normal Z - integer (kind=4), parameter :: mapvtk=57 !Bloque currents along edges in surface with normal Z - integer (kind=4), parameter :: iExC=61 !components in cuts for Volumic probes - integer (kind=4), parameter :: iEyC=62 - integer (kind=4), parameter :: iEzC=63 - integer (kind=4), parameter :: iHxC=64 - integer (kind=4), parameter :: iHyC=65 - integer (kind=4), parameter :: iHzC=66 - integer (kind=4), parameter :: farfield=67 - integer (kind=4), parameter :: lineIntegral=68 - ! do not change - integer (kind=4), parameter :: iJx=10*iEx,iJy=10*iEy,iJz=10*iEz - integer (kind=4), parameter :: iQx=10000*iEx,iQy=10000*iEy,iQz=10000*iEz - integer (kind=4), parameter :: iVx=1000*iEx,iVy=1000*iEy,iVz=1000*iEz - integer (kind=4), parameter :: iBloqueJx=100*iEx,iBloqueJy=100*iEy,iBloqueJz=100*iEz - integer (kind=4), parameter :: iBloqueMx=100*iHx,iBloqueMy=100*iHy,iBloqueMz=100*iHz - ! - CHARACTER (LEN=*), PARAMETER :: SEPARADOR='______________' - integer (kind=4), PARAMETER :: comi=1,fine=2, icoord=1,jcoord=2,kcoord=3 - - real (KIND=RKIND), PARAMETER :: EPSILON_VACUUM = & - 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12 - real (KIND=RKIND), PARAMETER :: MU_VACUUM = & - 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 - real (KIND=RKIND), PARAMETER :: C_VACUUM = 1.0_RKIND / & - sqrt(EPSILON_VACUUM * MU_VACUUM) + +#ifdef CompileWithOpenMP + use omp_lib +#endif + + +#ifdef CompileWithReal16 +#undef CompileWithReal8 +#undef CompileWithReal4 +#endif + +#ifdef CompileWithReal8 +#undef CompileWithReal16 +#undef CompileWithReal4 +#endif + +#ifndef CompileWithReal16 +#ifndef CompileWithReal8 +#ifndef CompileWithReal4 +#define CompileWithReal4 +#endif +#endif +#endif + + +#ifndef CompileWithInt4 +#ifndef CompileWithInt2 +#ifndef CompileWithInt1 +#define CompileWithInt4 +#endif +#endif +#endif + + +#ifdef CompileWithMPI + use MPI + implicit none +#endif + + !Every type and parameter is public + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + public + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !Tunable Parameters + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + integer(kind=4) :: quienmpi,tamaniompi + integer(kind=4) :: SUBCOMM_MPI +!240424 para que funcionen las sondas slice de conformal lo pongo como general. niapaa. algun dia hay que reahacer el conformal + !y esto debe desaparecer + integer(kind=4) :: SUBCOMM_MPI_conformal_probes,MPI_conformal_probes_root +!!! + integer(kind=8), parameter :: maxmpibytes = 2**27 + integer(kind=4), parameter :: BuffObse=2**10 !Steps of the temporal buffer to store evolution data + integer(kind=8), parameter :: MaxMemoryProbes=2_8**37_8 !128 Gb Maximum bytes of the buffer to store evolution data + integer(kind=8), parameter :: MaxProbes=150000 !Maximum number of probes (a limit of 200000 is set with ulimit in Linux) + ! + ! + integer, parameter :: topCPUtime=10000000 !maximum cpu time in minutes + !size of character strings + integer, parameter :: BUFSIZE=1024 + integer, parameter :: BUFSIZE_LONG=16384 + !!!integer :: maxmessages=20000 !numero maximo mensajes para alocatear en MPI overrideable con -maxmessages y quitado como parameter fijo !deprecated 07/03/15 + !dxf output stuff + !!!integer, parameter :: maxdxf= 20000,dxflinesize=14 + !!!character(len=dxflinesize) :: dxfbuff + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !Rest of Parameters + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +#ifdef CompileWithInt1 +#undef CompileWithInt2 +#undef CompileWithInt4 + integer(kind=2), parameter :: INTEGERSIZEOFMEDIAMATRICES=1 +#ifdef CompileWithMPI + integer(kind=4), parameter :: INTEGERSIZE=MPI_INTEGER1 +#endif +#endif +#ifdef CompileWithInt2 +#undef CompileWithInt1 +#undef CompileWithInt4 + integer(kind=2), parameter :: INTEGERSIZEOFMEDIAMATRICES=2 +#ifdef CompileWithMPI + integer(kind=4), parameter :: INTEGERSIZE=MPI_INTEGER2 +#endif +#endif +#ifdef CompileWithInt4 +#undef CompileWithInt1 +#undef CompileWithInt2 + integer(kind=2), parameter :: INTEGERSIZEOFMEDIAMATRICES=4 +#ifdef CompileWithMPI + integer(kind=4), parameter :: INTEGERSIZE=MPI_INTEGER4 +#endif +#endif + integer(kind=4), parameter :: IKINDMTAG=4 !PARA SGGMTAG 151020 !dejarlo en 4 bytes. No tocar + + integer(kind=2), parameter :: SINGLE=4 + integer(kind=2), parameter :: DOUBLE=8 + integer(kind=2), parameter :: LONG_DOUBLE=16 +#ifdef CompileWithReal8 + integer(kind=2), parameter :: RKIND=DOUBLE + integer(kind=2), parameter :: RKIND_wires=DOUBLE + integer(kind=2), parameter :: RKIND_tiempo=DOUBLE + integer(kind=2), parameter :: CKIND=DOUBLE +#else +#ifdef CompileWithReal16 + integer(kind=2), parameter :: RKIND=LONG_DOUBLE + integer(kind=2), parameter :: RKIND_wires=LONG_DOUBLE + integer(kind=2), parameter :: RKIND_tiempo=LONG_DOUBLE + integer(kind=2), parameter :: CKIND=LONG_DOUBLE +#else + !default + integer(kind=2), parameter :: RKIND=SINGLE + integer(kind=2), parameter :: RKIND_wires=DOUBLE !020719 a peticion + integer(kind=2), parameter :: RKIND_tiempo=DOUBLE + !! integer(kind=2), parameter :: CKIND=SINGLE + integer(kind=2), parameter :: CKIND=DOUBLE !LOS COMPLEJOS LOS VOY A MANEJAR SIEMPRE EN DOBLE PRECISION como minimo +#endif +#endif + + ! + +#ifdef CompileWithMPI + real(kind=RKIND), parameter :: plusCPU_PML=2.0_RKIND !heuristic (1=No CPU overhead, 2=double CPU overhead) +#endif +#ifdef CompileWithMPI +#ifdef CompileWithReal8 + integer(kind=4), parameter :: REALSIZE=MPI_DOUBLE_PRECISION + integer(kind=4), parameter :: REALSIZE_wires=MPI_DOUBLE_PRECISION + integer(kind=4), parameter :: COMPLEXSIZE=MPI_DOUBLE_COMPLEX + integer(kind=4), parameter :: REALSIZE_tiempo=MPI_DOUBLE_PRECISION +#else +#ifdef CompileWithReal16 + integer(kind=4), parameter :: REALSIZE=MPI_REAL16 + integer(kind=4), parameter :: COMPLEXSIZE=MPI_COMPLEX32 + integer(kind=4), parameter :: REALSIZE_tiempo=MPI_REAL_16 +#else + integer(kind=4), parameter :: REALSIZE=MPI_REAL + integer(kind=4), parameter :: REALSIZE_wires=MPI_DOUBLE_PRECISION + integer(kind=4), parameter :: REALSIZE_tiempo=MPI_DOUBLE_PRECISION + +!!! integer(kind=4), parameter :: COMPLEXSIZE=MPI_COMPLEX + integer(kind=4), parameter :: COMPLEXSIZE=MPI_DOUBLE_COMPLEX !LOS COMPLEJOS LOS VOY A MANEJAR SIEMPRE EN DOBLE PRECISION como minimo !esto debe ir ligado a la definicion de ckind +#endif +#endif +#endif + real(kind=RKIND) , parameter :: heurCFL=0.8_RKIND + real(kind=RKIND) , parameter :: & + pi=3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148, & + unmedio = 0.5_RKIND + complex(kind=CKIND), parameter :: mcPI2 = - (0.0_RKIND, 1.0_RKIND) * 2.0_RKIND * pi; + ! + integer(kind=4), parameter :: Down=1, Up=2, Left=3, Right=4, Back=5, Front=6 + ! + integer(kind=4), parameter :: iEx=1,iEy=2,iEz=3,iHx=4,iHy=5,iHz=6,centroide=8,Nothing=666 + ! + integer(kind=4), parameter :: iMEC=51 !modulus, tangential, normal fields in cuts for Volumic probes + integer(kind=4), parameter :: iMHC=52 + integer(kind=4), parameter :: iCur=53 !Bloque currents along edges in thin wires, pec and surface edges + integer(kind=4), parameter :: iCurX=54 !Bloque currents along edges in surface with normal X + integer(kind=4), parameter :: iCurY=55 !Bloque currents along edges in surface with normal Y + integer(kind=4), parameter :: iCurZ=56 !Bloque currents along edges in surface with normal Z + integer(kind=4), parameter :: mapvtk=57 !Bloque currents along edges in surface with normal Z + integer(kind=4), parameter :: iExC=61 !components in cuts for Volumic probes + integer(kind=4), parameter :: iEyC=62 + integer(kind=4), parameter :: iEzC=63 + integer(kind=4), parameter :: iHxC=64 + integer(kind=4), parameter :: iHyC=65 + integer(kind=4), parameter :: iHzC=66 + integer(kind=4), parameter :: farfield=67 + integer(kind=4), parameter :: lineIntegral=68 + ! do not change + integer(kind=4), parameter :: iJx=10*iEx,iJy=10*iEy,iJz=10*iEz + integer(kind=4), parameter :: iQx=10000*iEx,iQy=10000*iEy,iQz=10000*iEz + integer(kind=4), parameter :: iVx=1000*iEx,iVy=1000*iEy,iVz=1000*iEz + integer(kind=4), parameter :: iBloqueJx=100*iEx,iBloqueJy=100*iEy,iBloqueJz=100*iEz + integer(kind=4), parameter :: iBloqueMx=100*iHx,iBloqueMy=100*iHy,iBloqueMz=100*iHz + ! + character(len=*), parameter :: SEPARADOR='______________' + integer(kind=4), parameter :: comi=1,fine=2, icoord=1,jcoord=2,kcoord=3 + + real(kind=RKIND), parameter :: EPSILON_VACUUM = & + 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12 + real(kind=RKIND), parameter :: MU_VACUUM = & + 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 + real(kind=rkind), parameter :: c_vacuum = 1.0_RKIND/sqrt(EPSILON_VACUUM*MU_VACUUM) + + real(kind=RKIND_tiempo) :: dt0 !aqui para OLDrlo accesible en resume pscale + + integer(kind=4), parameter :: FACE_X = 1 + integer(kind=4), parameter :: FACE_Y = 2 + integer(kind=4), parameter :: FACE_Z = 3 - REAL (KIND=RKIND_tiempo) :: dt0 !aqui para OLDrlo accesible en resume pscale - - integer(kind=4), parameter :: FACE_X = 1 - integer(kind=4), parameter :: FACE_Y = 2 - integer(kind=4), parameter :: FACE_Z = 3 - integer(kind=4), parameter :: EDGE_X = 1 integer(kind=4), parameter :: EDGE_Y = 2 integer(kind=4), parameter :: EDGE_Z = 3 - ! Source types. + !source types character(len=*), parameter :: F_SOURCE_VOLTAGE = 'VOLT' character(len=*), parameter :: F_SOURCE_CURRENT = 'CURR' - + #ifdef CompileWithReal4 - CHARACTER (LEN=*), PARAMETER :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 -#else -#ifdef CompileWithReal8 - CHARACTER (LEN=*), PARAMETER :: fmt='(12(e27.17e3))' !IEEE 754 single-precision 15 to 17 decimals -#else -#ifdef CompileWithReal16 - CHARACTER (LEN=*), PARAMETER :: fmt='(12(e46.36e3))' !IEEE 754 single-precision 33 to 36 decimals -#else !default - CHARACTER (LEN=*), PARAMETER :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 -#endif -#endif -#endif - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !solo tipos - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - type tagtype_t - CHARACTER (LEN=BUFSIZE), allocatable, dimension (:) :: tag - integer (Kind=4) :: numertags - end type - + character(len=*), parameter :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 +#else +#ifdef CompileWithReal8 + character(len=*), parameter :: fmt='(12(e27.17e3))' !IEEE 754 single-precision 15 to 17 decimals +#else +#ifdef CompileWithReal16 + character(len=*), parameter :: fmt='(12(e46.36e3))' !IEEE 754 single-precision 33 to 36 decimals +#else !default + character(len=*), parameter :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 +#endif +#endif +#endif + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !solo tipos + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + type tagtype_t + character(len=BUFSIZE), allocatable, dimension(:) :: tag + integer(Kind=4) :: numertags + end type + type coorsxyz_t - REAL (KIND=RKIND), pointer, dimension( : ) :: x,y,z + real(kind=RKIND), pointer, dimension( : ) :: x,y,z end type coorsxyz_t - ! + ! type coorsxyzP_t - type (coorsxyz_t), dimension(1:6) :: PhysCoor + type(coorsxyz_t), dimension(1:6) :: PhysCoor end type coorsxyzP_t - - TYPE MedioExtra_t - integer (kind=4) :: pml_size,index - real (kind=rkind) :: sigma,sigmam - logical :: exists - end type + + type MedioExtra_t + integer(kind=4) :: pml_size,index + real(kind=rkind) :: sigma,sigmam + logical :: exists + end type type logic_control_t - LOGICAL :: Wires , & - PMLbodies , & - MultiportS , & - AnisMultiportS , & - SGBCs , & - Lumpeds , & - EDispersives , & - MDispersives , & - PlaneWaveBoxes , & - Observation , & - FarFields , & - PMCBorders , & - PMLBorders , & - MurBorders , & - PECBorders , & - PeriodicBorders, & - Anisotropic , & - ThinSlot , & - NodalE , & - NodalH , & - MagneticMedia, PMLMagneticMedia, & - MTLNbundles, & - Conformals - contains - procedure :: reset => logic_reset - end type - - - - !computational limits - type Xlimit_t - integer (kind=4) :: XI,XE,NX - end type - type Ylimit_t - integer (kind=4) :: YI,YE,NY - end type - type Zlimit_t - integer (kind=4) :: ZI,ZE,NZ - end type - type limit_t - integer (kind=4) :: XI,XE,YI,YE,ZI,ZE,NX,NY,NZ - end type - type XYZlimit_t - integer (kind=4) :: XI,XE,YI,YE,ZI,ZE - end type - type XYZlimit_t_scaled - integer (kind=4) :: XI,XE,YI,YE,ZI,ZE - REAL (KIND=RKIND) :: xc,yc,zc - INTEGER (KIND=4) :: Or !to include possible orientations (nodal sources 180915) - end type - - type tagnumber_t - integer (KIND=IKINDMTAG) , allocatable , dimension(:,:,:) :: x, y, z - end type - - type taglist_t - type (tagnumber_t) :: edge, face - contains - private - procedure, public :: getFaceTag => taglist_getFaceTag - procedure, public :: getEdgeTag => taglist_getEdgeTag - end type - - ! - type bounds_t - type (limit_t) :: sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz - type (limit_t) :: Ex,Ey,Ez,Hx,Hy,Hz - type (limit_t) :: sweepEx,sweepEy,sweepEz,sweepHx,sweepHy,sweepHz - type (limit_t) :: sweepSINPMLEx,sweepSINPMLEy,sweepSINPMLEz,sweepSINPMLHx,sweepSINPMLHy,sweepSINPMLHz - type (Xlimit_t) :: dxe,dxh - type (Ylimit_t) :: dye,dyh - type (Zlimit_t) :: dze,dzh - end type - type :: PML_t - REAL (KIND=RKIND) :: orden(3,2) - REAL (KIND=RKIND) :: CoeffReflPML(3,2) !(icor : jcor : kcor,start : ende) - integer (kind=4) :: NumLayers(3,2) - end type - ! - - type :: fichevol_t - character (LEN=BUFSIZE) :: Name - integer (kind=4) :: NumSamples - REAL (KIND=RKIND) :: DeltaSamples - REAL (KIND=RKIND), dimension( : ), pointer :: Samples - end type - ! - - !wires - type :: fichevol_wires_t - character (LEN=BUFSIZE) :: Name - integer (kind=4) :: NumSamples - REAL (KIND=RKIND_wires) :: DeltaSamples - REAL (KIND=RKIND_wires), dimension( : ), pointer :: Samples - end type - type :: source_t - type (fichevol_wires_t) :: Fichero - REAL (KIND=RKIND_wires) :: Resistance - REAL (KIND=RKIND_wires) :: Multiplier - logical :: soft - integer (kind=4) :: i,j,k - end type - - type :: NodalSource_t - type (fichevol_t) :: Fichero - type (XYZlimit_t_scaled), pointer, dimension(:) :: punto - integer (kind=4) :: numpuntos - logical :: IsInitialValue - logical :: IsHard - logical :: IsElec - end type NodalSource_t - ! - type :: WireDispersiveParams_t - integer (kind=4) :: numPoles - Complex (KIND=CKIND), pointer, dimension(:) :: res, p - Complex (KIND=CKIND) :: d, e - end type - - type :: oriented_point_t - integer (kind=4) :: ori - integer (kind=4) :: i,j,k,origIndex,ilibre,jlibre,klibre,multiraboDE !si es multirabo de que indice lo es - logical :: Is_LeftEnd,Is_RightEnd,IsEnd_norLeft_norRight - logical :: repetido,multirabo !marca segmentos que aparecen repetidos en un mismo thin wire!los bundles deberan estar thin-wires distintos - logical :: orientadoalreves + LOGICAL :: Wires , & + PMLbodies , & + MultiportS , & + AnisMultiportS , & + SGBCs , & + Lumpeds , & + EDispersives , & + MDispersives , & + PlaneWaveBoxes , & + Observation , & + FarFields , & + PMCBorders , & + PMLBorders , & + MurBorders , & + PECBorders , & + PeriodicBorders, & + Anisotropic , & + ThinSlot , & + NodalE , & + NodalH , & + MagneticMedia, PMLMagneticMedia, & + MTLNbundles + contains + procedure :: reset => logic_reset + end type + + + + !computational limits + type Xlimit_t + integer(kind=4) :: XI,XE,NX + end type + type Ylimit_t + integer(kind=4) :: YI,YE,NY + end type + type Zlimit_t + integer(kind=4) :: ZI,ZE,NZ + end type + type limit_t + integer(kind=4) :: XI,XE,YI,YE,ZI,ZE,NX,NY,NZ + end type + type XYZlimit_t + integer(kind=4) :: XI,XE,YI,YE,ZI,ZE + end type + type XYZlimit_scaled_t + integer(kind=4) :: XI,XE,YI,YE,ZI,ZE + real(kind=RKIND) :: xc,yc,zc + integer(kind=4) :: Or !to include possible orientations (nodal sources 180915) + end type + + type tagnumber_t + integer(kind=IKINDMTAG) , allocatable , dimension(:,:,:) :: x, y, z + end type + + type taglist_t + type(tagnumber_t) :: edge, face + contains + private + procedure, public :: getFaceTag => taglist_getFaceTag + procedure, public :: getEdgeTag => taglist_getEdgeTag + end type + + ! + type bounds_t + type(limit_t) :: sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz + type(limit_t) :: Ex,Ey,Ez,Hx,Hy,Hz + type(limit_t) :: sweepEx,sweepEy,sweepEz,sweepHx,sweepHy,sweepHz + type(limit_t) :: sweepSINPMLEx,sweepSINPMLEy,sweepSINPMLEz,sweepSINPMLHx,sweepSINPMLHy,sweepSINPMLHz + type(Xlimit_t) :: dxe,dxh + type(Ylimit_t) :: dye,dyh + type(Zlimit_t) :: dze,dzh + end type + type :: PML_t + real(kind=RKIND) :: orden(3,2) + real(kind=RKIND) :: CoeffReflPML(3,2) !(icor : jcor : kcor,start : ende) + integer(kind=4) :: NumLayers(3,2) + end type + ! + + type :: fichevol_t + character(len=BUFSIZE) :: Name + integer(kind=4) :: NumSamples + real(kind=RKIND) :: DeltaSamples + real(kind=RKIND), dimension( : ), pointer :: Samples + end type + ! + + !wires + type :: fichevol_wires_t + character(len=BUFSIZE) :: Name + integer(kind=4) :: NumSamples + real(kind=RKIND_wires) :: DeltaSamples + real(kind=RKIND_wires), dimension( : ), pointer :: Samples + end type + type :: source_t + type(fichevol_wires_t) :: Fichero + real(kind=RKIND_wires) :: Resistance + real(kind=RKIND_wires) :: Multiplier + logical :: soft + integer(kind=4) :: i,j,k + end type + + type :: NodalSource_t + type(fichevol_t) :: Fichero + type(XYZlimit_scaled_t), pointer, dimension(:) :: punto + integer(kind=4) :: numpuntos + logical :: IsInitialValue + logical :: IsHard + logical :: IsElec + end type NodalSource_t + ! + type :: WireDispersiveParams_t + integer(kind=4) :: numPoles + complex(kind=CKIND), pointer, dimension(:) :: res, p + complex(kind=CKIND) :: d, e + end type + + type :: oriented_point_t + integer(kind=4) :: ori + integer(kind=4) :: i,j,k,origIndex,ilibre,jlibre,klibre,multiraboDE !si es multirabo de que indice lo es + logical :: Is_LeftEnd,Is_RightEnd,IsEnd_norLeft_norRight + logical :: repetido,multirabo !marca segmentos que aparecen repetidos en un mismo thin wire!los bundles deberan estar thin-wires distintos + logical :: orientadoalreves end type oriented_point_t -#ifdef CompileWithMTLN +#ifdef CompileWithMTLN type :: Multiwires_t end type #endif - - type :: Wires_t - REAL (KIND=RKIND_wires) :: Radius,R,L,C,P_R,P_L,P_C - REAL (KIND=RKIND_wires) :: Radius_devia,R_devia,L_devia,C_devia - type (WireDispersiveParams_t), allocatable, dimension(:) :: disp - integer (kind=4) :: numsegmentos,NUMVOLTAGESOURCES,NUMCURRENTSOURCES - type (oriented_point_t), pointer, dimension( : ) :: segm - type (source_t), pointer, dimension( : ) :: Vsource - type (source_t), pointer, dimension( : ) :: Isource - logical :: VsourceExists ,IsourceExists - logical :: HasParallel_LeftEnd ,HasParallel_RightEnd ,& - HasSeries_LeftEnd ,HasSeries_RightEnd,HasAbsorbing_LeftEnd,HasAbsorbing_RightEnd - REAL (KIND=RKIND_wires) :: Parallel_R_RightEnd,Parallel_R_LeftEnd - REAL (KIND=RKIND_wires) :: Series_R_RightEnd,Series_R_LeftEnd - REAL (KIND=RKIND_wires) :: Parallel_L_RightEnd,Parallel_L_LeftEnd - REAL (KIND=RKIND_wires) :: Series_L_RightEnd,Series_L_LeftEnd - REAL (KIND=RKIND_wires) :: Parallel_C_RightEnd,Parallel_C_LeftEnd - REAL (KIND=RKIND_wires) :: Series_C_RightEnd,Series_C_LeftEnd -! - REAL (KIND=RKIND_wires) :: Parallel_R_RightEnd_devia ,Parallel_R_LeftEnd_devia - REAL (KIND=RKIND_wires) :: Series_R_RightEnd_devia , Series_R_LeftEnd_devia - REAL (KIND=RKIND_wires) :: Parallel_L_RightEnd_devia ,Parallel_L_LeftEnd_devia - REAL (KIND=RKIND_wires) :: Series_L_RightEnd_devia , Series_L_LeftEnd_devia - REAL (KIND=RKIND_wires) :: Parallel_C_RightEnd_devia ,Parallel_C_LeftEnd_devia - REAL (KIND=RKIND_wires) :: Series_C_RightEnd_devia , Series_C_LeftEnd_devia - type (WireDispersiveParams_t), allocatable, dimension(:) :: disp_LeftEnd, disp_RightEnd - ! integer (kind=4) :: LextremoI,LextremoJ,LextremoK,RextremoI,RextremoJ,RextremoK !no ncesario: yo luego calculo bien los extremos - integer (kind=4) :: LeftEnd,RightEnd - end type Wires_t - - type :: SlantedNode_t - integer (kind=4) :: index - real (kind=RKIND_wires) :: x, y, z - logical :: VsourceExists, IsourceExists - type (source_t), pointer :: Vsource, Isource - end type SlantedNode_t - - type :: SlantedWires_t - REAL (KIND=RKIND_wires) :: radius,R,L,C,P_R,P_L,P_C - type (WireDispersiveParams_t), allocatable, dimension(:) :: disp - integer (kind=4) :: LeftEnd, RightEnd - integer (kind=4) :: NumNodes - type (SlantedNode_t), pointer, dimension(:) :: nodes - logical :: HasParallel_LeftEnd - REAL (KIND=RKIND_wires) :: Parallel_R_LeftEnd, Parallel_L_LeftEnd, Parallel_C_LeftEnd - logical :: HasParallel_RightEnd - REAL (KIND=RKIND_wires) :: Parallel_R_RightEnd, Parallel_L_RightEnd, Parallel_C_RightEnd - logical :: HasSeries_LeftEnd - REAL (KIND=RKIND_wires) :: Series_R_LeftEnd, Series_L_LeftEnd, Series_C_LeftEnd - logical :: HasSeries_RightEnd - REAL (KIND=RKIND_wires) :: Series_R_RightEnd, Series_L_RightEnd, Series_C_RightEnd - type (WireDispersiveParams_t), allocatable, dimension(:) :: disp_LeftEnd, disp_RightEnd - end type SlantedWires_t - TYPE :: Lumped_t - ! - integer (kind=4) :: Orient = 0 !orientation +iEx, -iEx,+iEy....... -!deprecado 201222 real (kind=RKIND_wires) :: epr,mur,sigma,sigmam - real (kind=RKIND_wires) :: R,L,C,DiodB,DiodIsat,Rtime_on,Rtime_off - logical :: resistor , inductor , capacitor , diodo - real (kind=RKIND_wires) ::R_devia,L_devia,C_devia - END TYPE Lumped_t -!!! - !end wires - TYPE :: PMLbody_t - integer (kind=4) :: orient = 0 !orientation +iEx, -iEx,+iEy.......el signo aqui es intranscendente - END TYPE PMLbody_t -!!! - TYPE :: Multiport_t - integer (kind=4) :: Multiportdir = 0 !orientation +iEx, -iEx,+iEy....... - character (LEN=BUFSIZE) :: multiportFileZ11,multiportFileZ22,multiportFileZ12,multiportFileZ21 - real (kind=rkind), dimension( : ), pointer :: epr,mur,sigma,sigmam,width - !_for_devia 090519 - real (kind=rkind), dimension( : ), pointer :: epr_devia,mur_devia,sigma_devia,sigmam_devia,width_devia - !!! -!!old pre 17/08/115: no es valido para mallados NO uniformes. Hay que hacerlo punto a punto -!!! real (kind=rkind) :: transversalSpaceDelta - integer (kind=4) :: numcapas - END TYPE Multiport_t - ! - TYPE :: AnisMultiport_t - integer (kind=4) :: Multiportdir = 0 !orientation +iEx, -iEx,+iEy....... - character (LEN=BUFSIZE) :: MultiportFileZ11,MultiportFileZ22, & - MultiportFileZ12,MultiportFileZ21 - real (kind=rkind), pointer, dimension( : ) :: epr,mur,sigma,sigmam,width - END TYPE AnisMultiport_t - ! - type planeonde_t - REAL (KIND=RKIND) :: INCERTMAX - REAL (KIND=RKIND), allocatable, dimension (:) :: px,py,pz,ex,ey,ez,incert - integer (kind=4) :: esqx1,esqy1,esqz1,esqx2,esqy2,esqz2 - type (fichevol_t) :: Fichero - integer (kind=4) :: nummodes - logical :: isRC - end type planeonde_t - ! - type :: Border_t - logical :: IsBackPEC , & - IsFrontPEC , & - IsLeftPEC , & - IsRightPEC , & - IsUpPEC , & - IsDownPEC , & - IsBackPMC , & - IsFrontPMC , & - IsLeftPMC , & - IsRightPMC , & - IsUpPMC , & - IsDownPMC , & - IsBackPML , & - IsFrontPML , & - IsLeftPML , & - IsRightPML , & - IsUpPML , & - IsDownPML , & - IsBackPeriodic , & - IsFrontPeriodic , & - IsLeftPeriodic , & - IsRightPeriodic , & - IsUpPeriodic , & - IsDownPeriodic, & - IsBackMUR , & - IsFrontMUR , & - IsLeftMUR , & - IsRightMUR , & - IsUpMUR , & - IsDownMUR - end type - ! - - type, public :: direction_t - integer (kind=4) :: x,y,z, orientation - contains - private - procedure :: direction_eq - generic, public :: operator(==) => direction_eq - end type - - type :: observable_t - integer (kind=4) :: XI,YI,ZI,XE,YE,ZE,What,Node !los valores finales XE,YE,ZE solo se precisan para las CurrentProbes - integer (kind=4) :: Xtrancos,Ytrancos,Ztrancos - type(direction_t), dimension(:), allocatable :: line - - end type observable_t - ! - type :: Obses_t - integer (kind=4) :: nP - type (observable_t), pointer, dimension ( : ) :: P - REAL (KIND=RKIND) :: InitialTime,FinalTime,TimeStep - REAL (KIND=RKIND) :: InitialFreq,FinalFreq,FreqStep - - REAL (KIND=RKIND) :: thetaStart,thetaStop,thetaStep - REAL (KIND=RKIND) :: phiStart,phiStop,phiStep - - character (LEN=BUFSIZE) :: outputrequest - character (LEN=BUFSIZE) :: FileNormalize - logical :: FreqDomain ,TimeDomain , Saveall, & - TransFer, Volumic,Done,Begun,Flushed - end type - - type SharedElement_t - integer (kind=4) :: i,j,k,field,PropMed,SharedMed,times !field(i,j,k)=PropMed shares ShareMed - end type - type Shared_t - integer (kind=4) :: Conta = 0, MaxConta = 10 - type (SharedElement_t), pointer, dimension(:) :: elem - end type - - - type :: DispersiveParams_t - integer (kind=4) :: NumPolRes11,NumPolRes12,NumPolRes13,NumPolRes22,NumPolRes23,NumPolRes33 - Complex (KIND=CKIND), pointer, dimension( : ) :: C11,A11,C12,A12,C13,A13,C22,A22,C23,A23,C33,A33 - REAL (KIND=RKIND) :: eps11,MU11,SIGMA11,SIGMAM11 - REAL (KIND=RKIND) :: eps12,MU12,SIGMA12,SIGMAM12 - REAL (KIND=RKIND) :: EPs13,MU13,SIGMA13,SIGMAM13 - REAL (KIND=RKIND) :: EPs22,MU22,SIGMA22,SIGMAM22 - REAL (KIND=RKIND) :: EPs23,MU23,SIGMA23,SIGMAM23 - REAL (KIND=RKIND) :: EPs33,MU33,SIGMA33,SIGMAM33 - end type - - Type :: Anisotropic_t - REAL (KIND=RKIND), DIMENSION(3,3) :: sigma,epr,mur,sigmaM - End type - - - type Exists_t - logical :: & - PML , & - PEC , & - ConformalPEC , & - PMC , & + + type :: Wires_t + real(kind=RKIND_wires) :: Radius,R,L,C,P_R,P_L,P_C + real(kind=RKIND_wires) :: Radius_devia,R_devia,L_devia,C_devia + type(WireDispersiveParams_t), allocatable, dimension(:) :: disp + integer(kind=4) :: numsegmentos,NUMVOLTAGESOURCES,NUMCURRENTSOURCES + type(oriented_point_t), pointer, dimension( : ) :: segm + type(source_t), pointer, dimension( : ) :: Vsource + type(source_t), pointer, dimension( : ) :: Isource + logical :: VsourceExists ,IsourceExists + logical :: HasParallel_LeftEnd ,HasParallel_RightEnd ,& + HasSeries_LeftEnd ,HasSeries_RightEnd,HasAbsorbing_LeftEnd,HasAbsorbing_RightEnd + real(kind=RKIND_wires) :: Parallel_R_RightEnd,Parallel_R_LeftEnd + real(kind=RKIND_wires) :: Series_R_RightEnd,Series_R_LeftEnd + real(kind=RKIND_wires) :: Parallel_L_RightEnd,Parallel_L_LeftEnd + real(kind=RKIND_wires) :: Series_L_RightEnd,Series_L_LeftEnd + real(kind=RKIND_wires) :: Parallel_C_RightEnd,Parallel_C_LeftEnd + real(kind=RKIND_wires) :: Series_C_RightEnd,Series_C_LeftEnd +! + real(kind=RKIND_wires) :: Parallel_R_RightEnd_devia ,Parallel_R_LeftEnd_devia + real(kind=RKIND_wires) :: Series_R_RightEnd_devia , Series_R_LeftEnd_devia + real(kind=RKIND_wires) :: Parallel_L_RightEnd_devia ,Parallel_L_LeftEnd_devia + real(kind=RKIND_wires) :: Series_L_RightEnd_devia , Series_L_LeftEnd_devia + real(kind=RKIND_wires) :: Parallel_C_RightEnd_devia ,Parallel_C_LeftEnd_devia + real(kind=RKIND_wires) :: Series_C_RightEnd_devia , Series_C_LeftEnd_devia + type(WireDispersiveParams_t), allocatable, dimension(:) :: disp_LeftEnd, disp_RightEnd + ! integer(kind=4) :: LextremoI,LextremoJ,LextremoK,RextremoI,RextremoJ,RextremoK !no ncesario: yo luego calculo bien los extremos + integer(kind=4) :: LeftEnd,RightEnd + end type Wires_t + + type :: SlantedNode_t + integer(kind=4) :: index + real(kind=RKIND_wires) :: x, y, z + logical :: VsourceExists, IsourceExists + type(source_t), pointer :: Vsource, Isource + end type SlantedNode_t + + type :: SlantedWires_t + real(kind=RKIND_wires) :: radius,R,L,C,P_R,P_L,P_C + type(WireDispersiveParams_t), allocatable, dimension(:) :: disp + integer(kind=4) :: LeftEnd, RightEnd + integer(kind=4) :: NumNodes + type(SlantedNode_t), pointer, dimension(:) :: nodes + logical :: HasParallel_LeftEnd + real(kind=RKIND_wires) :: Parallel_R_LeftEnd, Parallel_L_LeftEnd, Parallel_C_LeftEnd + logical :: HasParallel_RightEnd + real(kind=RKIND_wires) :: Parallel_R_RightEnd, Parallel_L_RightEnd, Parallel_C_RightEnd + logical :: HasSeries_LeftEnd + real(kind=RKIND_wires) :: Series_R_LeftEnd, Series_L_LeftEnd, Series_C_LeftEnd + logical :: HasSeries_RightEnd + real(kind=RKIND_wires) :: Series_R_RightEnd, Series_L_RightEnd, Series_C_RightEnd + type(WireDispersiveParams_t), allocatable, dimension(:) :: disp_LeftEnd, disp_RightEnd + end type SlantedWires_t + ! + type :: Lumped_t + integer(kind=4) :: Orient = 0 !orientation +iEx, -iEx,+iEy....... +!deprecado 201222 real(kind=RKIND_wires) :: epr,mur,sigma,sigmam + real(kind=RKIND_wires) :: R,L,C,DiodB,DiodIsat,Rtime_on,Rtime_off + logical :: resistor , inductor , capacitor , diodo + real(kind=RKIND_wires) ::R_devia,L_devia,C_devia + end type Lumped_t +!!! + !end wires + type :: PMLbody_t + integer(kind=4) :: orient = 0 !orientation +iEx, -iEx,+iEy.......el signo aqui es intranscendente + end type PMLbody_t +!!! + type :: Multiport_t + integer(kind=4) :: Multiportdir = 0 !orientation +iEx, -iEx,+iEy....... + character(len=BUFSIZE) :: multiportFileZ11,multiportFileZ22,multiportFileZ12,multiportFileZ21 + real(kind=rkind), dimension( : ), pointer :: epr,mur,sigma,sigmam,width + !_for_devia 090519 + real(kind=rkind), dimension( : ), pointer :: epr_devia,mur_devia,sigma_devia,sigmam_devia,width_devia + !!! +!!old pre 17/08/115: no es valido para mallados NO uniformes. Hay que hacerlo punto a punto +!!! real(kind=rkind) :: transversalSpaceDelta + integer(kind=4) :: numcapas + end type Multiport_t + ! + type :: AnisMultiport_t + integer(kind=4) :: Multiportdir = 0 !orientation +iEx, -iEx,+iEy....... + character(len=BUFSIZE) :: MultiportFileZ11,MultiportFileZ22, & + MultiportFileZ12,MultiportFileZ21 + real(kind=rkind), pointer, dimension( : ) :: epr,mur,sigma,sigmam,width + end type AnisMultiport_t + ! + type planeonde_t + real(kind=RKIND) :: INCERTMAX + real(kind=RKIND), allocatable, dimension(:) :: px,py,pz,ex,ey,ez,incert + integer(kind=4) :: esqx1,esqy1,esqz1,esqx2,esqy2,esqz2 + type(fichevol_t) :: Fichero + integer(kind=4) :: nummodes + logical :: isRC + end type planeonde_t + ! + type :: Border_t + logical :: IsBackPEC , & + IsFrontPEC , & + IsLeftPEC , & + IsRightPEC , & + IsUpPEC , & + IsDownPEC , & + IsBackPMC , & + IsFrontPMC , & + IsLeftPMC , & + IsRightPMC , & + IsUpPMC , & + IsDownPMC , & + IsBackPML , & + IsFrontPML , & + IsLeftPML , & + IsRightPML , & + IsUpPML , & + IsDownPML , & + IsBackPeriodic , & + IsFrontPeriodic , & + IsLeftPeriodic , & + IsRightPeriodic , & + IsUpPeriodic , & + IsDownPeriodic, & + IsBackMUR , & + IsFrontMUR , & + IsLeftMUR , & + IsRightMUR , & + IsUpMUR , & + IsDownMUR + end type + ! + + type, public :: direction_t + integer(kind=4) :: x,y,z, orientation + contains + private + procedure :: direction_eq + generic, public :: operator(==) => direction_eq + end type + + type :: observable_t + integer(kind=4) :: XI,YI,ZI,XE,YE,ZE,What,Node !los valores finales XE,YE,ZE solo se precisan para las CurrentProbes + integer(kind=4) :: Xtrancos,Ytrancos,Ztrancos + type(direction_t), dimension(:), allocatable :: line + + end type observable_t + ! + type :: Obses_t + integer(kind=4) :: nP + type(observable_t), pointer, dimension( : ) :: P + real(kind=RKIND) :: InitialTime,FinalTime,TimeStep + real(kind=RKIND) :: InitialFreq,FinalFreq,FreqStep + + real(kind=RKIND) :: thetaStart,thetaStop,thetaStep + real(kind=RKIND) :: phiStart,phiStop,phiStep + + character(len=BUFSIZE) :: outputrequest + character(len=BUFSIZE) :: FileNormalize + logical :: FreqDomain ,TimeDomain , Saveall, & + TransFer, Volumic,Done,Begun,Flushed + end type + + type SharedElement_t + integer(kind=4) :: i,j,k,field,PropMed,SharedMed,times !field(i,j,k)=PropMed shares ShareMed + end type + type Shared_t + integer(kind=4) :: Conta = 0, MaxConta = 10 + type(SharedElement_t), pointer, dimension(:) :: elem + end type + + + type :: DispersiveParams_t + integer(kind=4) :: NumPolRes11,NumPolRes12,NumPolRes13,NumPolRes22,NumPolRes23,NumPolRes33 + complex(kind=CKIND), pointer, dimension( : ) :: C11,A11,C12,A12,C13,A13,C22,A22,C23,A23,C33,A33 + real(kind=RKIND) :: eps11,MU11,SIGMA11,SIGMAM11 + real(kind=RKIND) :: eps12,MU12,SIGMA12,SIGMAM12 + real(kind=RKIND) :: EPs13,MU13,SIGMA13,SIGMAM13 + real(kind=RKIND) :: EPs22,MU22,SIGMA22,SIGMAM22 + real(kind=RKIND) :: EPs23,MU23,SIGMA23,SIGMAM23 + real(kind=RKIND) :: EPs33,MU33,SIGMA33,SIGMAM33 + end type + + Type :: Anisotropic_t + real(kind=RKIND), DIMENSION(3,3) :: sigma,epr,mur,sigmaM + End type + + + type Exists_t + logical :: & + PML , & + PEC , & + ConformalPEC , & + PMC , & ThinWire , & - Multiwire, & + Multiwire , & SlantedWire, & - EDispersive , & - MDispersive , & - EDispersiveAnis , & - MDispersiveAnis , & - ThinSlot , & - PMLbody , & - SGBC , & - SGBCDispersive , & - Lumped , & - Lossy, & - AnisMultiport , & - Multiport , & - MultiportPadding , & - Dielectric , & - Anisotropic , & - Volume , & - Line , & - Surface , & - Needed , & - Interfase,& - already_YEEadvanced_byconformal, & - split_and_useless - end type - - - - ! Conformal edge/face data is shared by FDETYPES and NFDETypes. Keep the - ! definitions in this foundational module so MediaData_t does not depend - ! on the module that already USEs FDETYPES. + EDispersive , & + MDispersive , & + EDispersiveAnis , & + MDispersiveAnis , & + ThinSlot , & + PMLbody , & + SGBC , & + SGBCDispersive , & + Lumped , & + Lossy, & + AnisMultiport , & + Multiport , & + MultiportPadding , & + Dielectric , & + Anisotropic , & + Volume , & + Line , & + Surface , & + Needed , & + Interfase,& + already_YEEadvanced_byconformal, & + split_and_useless + end type + + ! Conformal edge/face data is shared by FDETYPES and NFDETypes. Keep the + ! definitions in this foundational module so MediaData_t does not depend on + ! the module that already USEs FDETYPES. type :: conformal_field_t real(kind=rkind), pointer :: p => null() real(kind=rkind), allocatable :: owned @@ -623,21 +618,21 @@ module FDETYPES_m type :: conformal_feature_t real(kind=rkind) :: ratio - integer (kind=4) :: size + integer(kind=4) :: size end type type, public :: edge_t - integer (kind=4), dimension(3) :: cell + integer(kind=4), dimension(3) :: cell integer(kind=4) :: direction = -1 - real (kind=rkind) :: ratio = -1 - real (kind=rkind), dimension(2) :: material_coords + real(kind=rkind) :: ratio = -1 + real(kind=rkind), dimension(2) :: material_coords type(conformal_edge_fields_t) :: region_I_fields, region_II_fields end type type, public :: face_t - integer (kind=4), dimension(3) :: cell + integer(kind=4), dimension(3) :: cell integer(kind=4) :: direction = -1 - real (kind=rkind) :: ratio = -1 + real(kind=rkind) :: ratio = -1 type(conformal_face_fields_t) :: region_I_fields, region_II_fields end type @@ -650,345 +645,342 @@ module FDETYPES_m end type type, public :: ConformalMedia_t - integer (kind=4) :: n_edges_media = 0 - integer (kind=4) :: n_faces_media = 0 - type (conformal_face_media_t), dimension(:), pointer :: face_media => null() - type (conformal_edge_media_t), dimension(:), pointer :: edge_media => null() - real (kind=rkind) :: time_step_scale_factor = 1.0 - character(len=bufsize) :: tag - end type ConformalMedia_t - - type :: MediaData_t - REAL (KIND=RKIND) :: Priority,Epr,Sigma,Mur,SigmaM - logical :: sigmareasignado !solo afecta a un chequeo de errores en lumped 120123 - type (exists_t) :: Is - type (Wires_t) , dimension( : ), pointer :: Wire - type (SlantedWires_t) , dimension( : ), pointer :: SlantedWire - type (PMLbody_t) , dimension( : ), pointer :: PMLbody - type (Multiport_t) , dimension( : ), pointer :: Multiport - type (AnisMultiport_t) , dimension( : ), pointer :: AnisMultiport - type (DispersiveParams_t), dimension( : ), pointer :: EDispersive - type (DispersiveParams_t), dimension( : ), pointer :: MDispersive - type (Anisotropic_t) , dimension( : ), pointer :: Anisotropic - type (Lumped_t) , dimension( : ), pointer :: Lumped + integer(kind=4) :: n_edges_media = 0 + integer(kind=4) :: n_faces_media = 0 + type(conformal_face_media_t), dimension(:), pointer :: face_media => null() + type(conformal_edge_media_t), dimension(:), pointer :: edge_media => null() + real(kind=rkind) :: time_step_scale_factor = 1.0 + character(len=BUFSIZE) :: tag + end type + + + + type :: MediaData_t + real(kind=RKIND) :: Priority,Epr,Sigma,Mur,SigmaM + logical :: sigmareasignado !solo afecta a un chequeo de errores en lumped 120123 + type(exists_t) :: Is + type(Wires_t) , dimension( : ), pointer :: Wire + type(SlantedWires_t) , dimension( : ), pointer :: SlantedWire + type(PMLbody_t) , dimension( : ), pointer :: PMLbody + type(Multiport_t) , dimension( : ), pointer :: Multiport + type(AnisMultiport_t) , dimension( : ), pointer :: AnisMultiport + type(DispersiveParams_t), dimension( : ), pointer :: EDispersive + type(DispersiveParams_t), dimension( : ), pointer :: MDispersive + type(Anisotropic_t) , dimension( : ), pointer :: Anisotropic + type(Lumped_t) , dimension( : ), pointer :: Lumped #ifdef CompileWithMTLN - type(Multiwires_t) , dimension( : ), pointer :: Multiwire + type(Multiwires_t) , dimension( : ), pointer :: Multiwire #endif - ! type (conformal_feature_t), , dimension( : ), pointer :: Conformal - type (edge_t), dimension( : ), allocatable :: ConformalEdge - type (face_t), dimension( : ), allocatable :: ConformalFace - end type - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! This is the class which stores all the simulation data - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - type :: SGGFDTDINFO_t - REAL (KIND=RKIND_tiempo) , pointer, dimension ( : ) :: tiempo !para permit scaling - REAL (KIND=RKIND_tiempo) :: dt - character (len=BUFSIZE) :: extraswitches - !! - integer (kind=4) :: NumMedia,AllocMed - integer (kind=4) :: IniPMLMedia,EndPMLMedia - integer (kind=4) :: NumPlaneWaves,TimeSteps,InitialTimeStep - integer (kind=4) :: NumNodalSources - integer (kind=4) :: NumberRequest - !!! - REAL (KIND=RKIND) , pointer, dimension ( : ) :: LineX,LineY,LineZ - REAL (KIND=RKIND) , pointer, dimension ( : ) :: DX,DY,DZ - integer (kind=4) :: AllocDxI,AllocDyI,AllocDzI,AllocDxE,AllocDyE,AllocDzE - type (planeonde_t), pointer, dimension ( : ) :: PlaneWave - type (Border_t) :: Border - type (PML_t) :: PML - ! ! - type (Shared_t) :: Eshared !etangetial info - !only needed by Slots and processed by anisotropic - type (Shared_t) :: Hshared !hnormal info - type (XYZlimit_t), dimension (1:6) :: Alloc,Sweep,SINPMLSweep - type (MediaData_t), pointer, dimension ( : ) :: Med - type (NodalSource_t), dimension( : ), pointer :: NodalSource - type (obses_t) , pointer, dimension ( : ) :: Observation - ! - logical :: thereAreMagneticMedia - logical :: thereArePMLMagneticMedia - CHARACTER (LEN=BUFSIZE) :: nEntradaRoot - type (coorsxyzP_t) :: Punto - end type - - type media_matrices_t - integer (KIND=INTEGERSIZEOFMEDIAMATRICES) , allocatable , dimension(:,:,:) :: sggMiNo,sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz - integer (KIND=IKINDMTAG) , allocatable , dimension(:,:,:) :: sggMtag - end type - - - type :: constants_t - real(kind=rkind), pointer, dimension ( : ) :: g1,g2,gM1,gM2 - contains - procedure :: destroy => constants_destroy - end type - - - type nf2ff_t - logical :: tr,fr,iz,de,ab,ar - end type - - type :: perform_t - logical :: flushFields = .false. - logical :: flushData = .false. - logical :: unpack = .false. - logical :: postprocess = .false. - logical :: flushXdmf = .false. - logical :: flushVTK = .false. - contains - procedure :: isFlush - procedure :: reset => perform_reset - end type - - ! variables for timestepping solver control - type :: sim_control_t - logical :: simu_devia, resume,saveall,makeholes,& - connectendings,isolategroupgroups,createmap, & - groundwires,noSlantedcrecepelo, & - mibc,ADE,conformalskin,sgbc, sgbcDispersive, sgbccrank, & - NOcompomur,strictOLD,TAPARRABOS, & - noconformalmapvtk, experimentalVideal, & - forceresampled, mur_second,MurAfterPML, & - stableradholland,singlefilewrite,NF2FFDecim, & - fieldtotl,finishedwithsuccess, & - permitscaling,mtlnberenger,niapapostprocess, & - stochastic, verbose, dontwritevtk, & - use_mtln_wires, resume_fromold, vtkindex,createh5bin,wirecrank,fatalerror -#ifdef CompileWithConformal - logical :: input_conformal_flag -#endif - REAL (kind=8) :: time_desdelanzamiento - REAL (kind=RKIND) :: cfl, attfactorc,attfactorw, alphamaxpar, & - alphaOrden, kappamaxpar, mindistwires,sgbcFreq,sgbcresol, maxSourceValue - real (kind=rkind_wires) :: factorradius,factordelta - - character (len=BUFSIZE) :: nEntradaRoot, inductance_model,wiresflavor, nresumeable2 - CHARACTER (LEN=BUFSIZE) :: opcionestotales - - integer (kind=4) :: finaltimestep, flushsecondsFields,flushsecondsData, layoutnumber,& + type(edge_t), dimension(:), allocatable :: ConformalEdge + type(face_t), dimension(:), allocatable :: ConformalFace + end type + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! This is the class which stores all the simulation data + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + type :: SGGFDTDINFO_t + real(kind=RKIND_tiempo) , pointer, dimension( : ) :: tiempo !para permit scaling + real(kind=RKIND_tiempo) :: dt + character(len=BUFSIZE) :: extraswitches + !! + integer(kind=4) :: NumMedia,AllocMed + integer(kind=4) :: IniPMLMedia,EndPMLMedia + integer(kind=4) :: NumPlaneWaves,TimeSteps,InitialTimeStep + integer(kind=4) :: NumNodalSources + integer(kind=4) :: NumberRequest + !!! + real(kind=RKIND) , pointer, dimension( : ) :: LineX,LineY,LineZ + real(kind=RKIND) , pointer, dimension( : ) :: DX,DY,DZ + integer(kind=4) :: AllocDxI,AllocDyI,AllocDzI,AllocDxE,AllocDyE,AllocDzE + type(planeonde_t), pointer, dimension( : ) :: PlaneWave + type(Border_t) :: Border + type(PML_t) :: PML + ! ! + type(Shared_t) :: Eshared !etangetial info + !only needed by Slots and processed by anisotropic + type(Shared_t) :: Hshared !hnormal info + type(XYZlimit_t), dimension(1:6) :: Alloc,Sweep,SINPMLSweep + type(MediaData_t), pointer, dimension( : ) :: Med + type(NodalSource_t), dimension( : ), pointer :: NodalSource + type(obses_t) , pointer, dimension( : ) :: Observation + ! + logical :: thereAreMagneticMedia + logical :: thereArePMLMagneticMedia + character(len=BUFSIZE) :: nEntradaRoot + type(coorsxyzP_t) :: Punto + end type + + type media_matrices_t + integer(kind=INTEGERSIZEOFMEDIAMATRICES) , allocatable , dimension(:,:,:) :: sggMiNo,sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz + integer(kind=IKINDMTAG) , allocatable , dimension(:,:,:) :: sggMtag + end type + + + type :: constants_t + real(kind=rkind), pointer, dimension( : ) :: g1,g2,gM1,gM2 + contains + procedure :: destroy => constants_destroy + end type + + + type nf2ff_t + logical :: tr,fr,iz,de,ab,ar + end type + + type :: perform_t + logical :: flushFields = .false. + logical :: flushData = .false. + logical :: unpack = .false. + logical :: postprocess = .false. + logical :: flushXdmf = .false. + logical :: flushVTK = .false. + contains + procedure :: isFlush + procedure :: reset => perform_reset + end type + + ! variables for timestepping solver control + type :: sim_control_t + logical :: simu_devia, resume,saveall,makeholes,& + connectendings,isolategroupgroups,createmap, & + groundwires,noSlantedcrecepelo, & + mibc,ADE,conformalskin,sgbc, sgbcDispersive, sgbccrank, & + NOcompomur,strictOLD,TAPARRABOS, & + noconformalmapvtk, experimentalVideal, & + forceresampled, mur_second,MurAfterPML, & + stableradholland,singlefilewrite,NF2FFDecim, & + fieldtotl,finishedwithsuccess, & + permitscaling,mtlnberenger,niapapostprocess, & + stochastic, verbose, dontwritevtk, & + use_mtln_wires, resume_fromold, vtkindex,createh5bin,wirecrank,fatalerror + real(kind=8) :: time_desdelanzamiento + real(kind=RKIND) :: cfl, attfactorc,attfactorw, alphamaxpar, & + alphaOrden, kappamaxpar, mindistwires,sgbcFreq,sgbcresol, maxSourceValue + real(kind=rkind_wires) :: factorradius,factordelta + + character(len=BUFSIZE) :: nEntradaRoot, inductance_model,wiresflavor, nresumeable2 + character(len=BUFSIZE) :: opcionestotales + + integer(kind=4) :: finaltimestep, flushsecondsFields,flushsecondsData, layoutnumber,& mpidir, inductance_order, wirethickness, maxCPUtime, SGBCDepth, precision, num_procs - - TYPE (MedioExtra_t) :: MEDIOEXTRA - type (nf2ff_T) :: facesNF2FF - - end type sim_control_t - - !!!!!!!!VARIABLES GLOBALES - integer (kind=4), SAVE, PUBLIC :: prior_BV , & - prior_IB , & - prior_pmlbody, & - prior_AB , & - prior_FDB , & - prior_IS , & - prior_AS , & - prior_FDS , & - prior_IL , & - prior_AL , & - prior_FDL , & - prior_IP , & - prior_AP , & - prior_FDP , & - prior_PEC , & - prior_PMC , & - prior_TG , & - prior_CS , & - prior_TW - - !************************************************************************************************** - !************************************************************************************************** - !conformal existence flags ref: ##Confflag## - logical, SAVE, PUBLIC :: input_conformal_flag - !************************************************************************************************** - !************************************************************************************************** - -contains - - subroutine constants_destroy(this) - class(constants_t) :: this - deallocate (this%g1,this%g2,this%gm1,this%gm2) - end subroutine - - logical function isFlush(this) - class(perform_t) :: this - isFlush = this%flushDATA.or.this%flushFIELDS.or.this%postprocess.or.this%flushXdmf.or.this%flushVTK - end function - - subroutine perform_reset(this) - class(perform_t) :: this - this%flushFields = .false. - this%flushData = .false. - this%unpack = .false. - this%postprocess = .false. - this%flushXdmf = .false. - this%flushVTK = .false. - end subroutine - - subroutine logic_reset(this) + + type(MedioExtra_t) :: MEDIOEXTRA + type(nf2ff_T) :: facesNF2FF + + end type sim_control_t + + !!!!!!!!VARIABLES GLOBALES + integer(kind=4), SAVE, public :: prior_BV , & + prior_IB , & + prior_pmlbody, & + prior_AB , & + prior_FDB , & + prior_IS , & + prior_AS , & + prior_FDS , & + prior_IL , & + prior_AL , & + prior_FDL , & + prior_IP , & + prior_AP , & + prior_FDP , & + prior_PEC , & + prior_PMC , & + prior_TG , & + prior_CS , & + prior_TW + + !************************************************************************************************** + !************************************************************************************************** + !conformal existence flags ref: ##Confflag## + logical, SAVE, public :: input_conformal_flag + !************************************************************************************************** + !************************************************************************************************** + +contains + + subroutine constants_destroy(this) + class(constants_t) :: this + deallocate(this%g1,this%g2,this%gm1,this%gm2) + end subroutine + + logical function isFlush(this) + class(perform_t) :: this + isFlush = this%flushDATA.or.this%flushFIELDS.or.this%postprocess.or.this%flushXdmf.or.this%flushVTK + end function + + subroutine perform_reset(this) + class(perform_t) :: this + this%flushFields = .false. + this%flushData = .false. + this%unpack = .false. + this%postprocess = .false. + this%flushXdmf = .false. + this%flushVTK = .false. + end subroutine + + subroutine logic_reset(this) class(logic_control_t) :: this - this%Wires = .false. - this%PMLbodies = .false. - this%MultiportS = .false. - this%AnisMultiportS = .false. - this%SGBCs= .false. - this%Lumpeds= .false. - this%EDispersives = .false. - this%MDispersives = .false. - this%PlaneWaveBoxes = .false. - this%Observation = .false. - this%FarFields = .false. - this%PMCBorders = .false. - this%PMLBorders = .false. - this%MurBorders = .false. - this%PECBorders = .false. - this%Anisotropic = .false. - this%ThinSlot = .false. - this%NodalE = .false. - this%NodalH = .false. - this%PeriodicBorders = .false. - this%MagneticMedia = .false. - this%PMLMagneticMedia= .false. - this%MTLNbundles = .false. - this%Conformals = .false. - end subroutine - - subroutine setglobal(iu1,iu2) - integer (kind=4) :: iu1,iu2 - quienmpi=iu1 - tamaniompi=iu2 - return - end subroutine - - subroutine set_priorities(prioritizeCOMPOoverPEC,prioritizeISOTROPICBODYoverall,prioritizeTHINWIRE) - logical :: prioritizeCOMPOoverPEC,prioritizeISOTROPICBODYoverall,prioritizeTHINWIRE - !!movido aqui el sistema de prioridades para poder controlarlos con switches. util para siva 070815 (bug de PEC con prioridad sobre compo del siva - prior_BV =10 !background volume - prior_AB =30 !anisotropic body - prior_FDB =40 !Frequency dependent body - prior_IS =50 !Isotropic surface - prior_AS =60 !Anisotropic surface - prior_FDS =70 !Frequency dependent surface - prior_IL =90 !Isotropic line - prior_AL =100 !Anisotropic line - prior_FDL =110 !Frequency dependent line - prior_IP =120 !Isotropic point - prior_AP =130 !Anisotropic point - prior_FDP =140 !Frequency dependent point - prior_PEC =150 !Perfectly electric conducting body, surface, line, or point - prior_PMC =160 !Perfectly magnetic conducting body, surface, line, or point - prior_TG =155 !thin Slot has more priority than PEC - !!!!!se aniade la opcion -prioritizeCOMPOoverPEC para subir su prioridad y poder simular SIVA (sgg 070815) - if (prioritizeTHINWIRE) then - prior_TW = 1500 !cambiado a 231024 y puesto con maxima prioridad. es solo experimental y por visualizacion - else !opcion correcta. lo anterior es solo experimental y por visualizacion - prior_TW = 15 !prioridad del thin-wire por debajo de todos (excepto del background) - endif -! prior_pmlbody = prior_TW-1 !el hilo tiene prioridad sobre el pmlbody (prueba HOLD coax sgg 251019) - prior_pmlbody = prior_BV+1 !el pml body puede ser penetrado por todo 311019 sgg - !!!! - if (prioritizeCOMPOoverPEC) then !Composite surface - prior_CS=prior_PEC+2 - else - prior_CS=prior_PEC-2 !composites has lower than PEC to properly handle junctions PEC-composite !(ss's 210312 mail) - endif - if (prioritizeISOTROPICBODYoverall) then ! Isotropic body - prior_IB = 200 !SOLO PARA EL CASO DEL SIVA SACAR BOCADOS DE vacio - else - prior_IB = 20 !EL SUSUAL - endif - return - - - end subroutine set_priorities - - function taglist_getFaceTag(this, field, i, j, k) result(res) - class(taglist_t) :: this - integer (kind=IKINDMTAG) :: res - integer (kind = 4) :: field, i, j, k - select case(field) - case(iHx) - res = this%face%x(i, j, k) - case(iHy) - res = this%face%y(i, j, k) - case(iHz) - res = this%face%z(i, j, k) - end select - end function - - function taglist_getEdgeTag(this, field, i, j, k) result(res) - class(taglist_t) :: this - integer (kind=IKINDMTAG) :: res - integer (kind = 4) :: field, i, j, k - select case(field) - case(iEx) - res = this%edge%x(i, j, k) - case(iEy) - res = this%edge%y(i, j, k) - case(iEz) - res = this%edge%z(i, j, k) - end select - end function - - logical function direction_eq(a,b) - class(direction_t), intent(in) :: a,b - direction_eq = .true. - direction_eq = direction_eq .and. (a%x == b%x) - direction_eq = direction_eq .and. (a%y == b%y) - direction_eq = direction_eq .and. (a%z == b%z) - direction_eq = direction_eq .and. (a%orientation == b%orientation) - - end function + this%Wires = .false. + this%PMLbodies = .false. + this%MultiportS = .false. + this%AnisMultiportS = .false. + this%SGBCs= .false. + this%Lumpeds= .false. + this%EDispersives = .false. + this%MDispersives = .false. + this%PlaneWaveBoxes = .false. + this%Observation = .false. + this%FarFields = .false. + this%PMCBorders = .false. + this%PMLBorders = .false. + this%MurBorders = .false. + this%PECBorders = .false. + this%Anisotropic = .false. + this%ThinSlot = .false. + this%NodalE = .false. + this%NodalH = .false. + this%PeriodicBorders = .false. + this%MagneticMedia = .false. + this%PMLMagneticMedia= .false. + this%MTLNbundles = .false. + end subroutine + + subroutine setglobal(iu1,iu2) + integer(kind=4) :: iu1,iu2 + quienmpi=iu1 + tamaniompi=iu2 + return + end subroutine + + subroutine set_priorities(prioritizeCOMPOoverPEC,prioritizeISOTROPICBODYoverall,prioritizeTHINWIRE) + logical :: prioritizeCOMPOoverPEC,prioritizeISOTROPICBODYoverall,prioritizeTHINWIRE + !!movido aqui el sistema de prioridades para poder controlarlos con switches. util para siva 070815 (bug de PEC con prioridad sobre compo del siva + prior_BV =10 !background volume + prior_AB =30 !anisotropic body + prior_FDB =40 !Frequency dependent body + prior_IS =50 !Isotropic surface + prior_AS =60 !Anisotropic surface + prior_FDS =70 !Frequency dependent surface + prior_IL =90 !Isotropic line + prior_AL =100 !Anisotropic line + prior_FDL =110 !Frequency dependent line + prior_IP =120 !Isotropic point + prior_AP =130 !Anisotropic point + prior_FDP =140 !Frequency dependent point + prior_PEC =150 !Perfectly electric conducting body, surface, line, or point + prior_PMC =160 !Perfectly magnetic conducting body, surface, line, or point + prior_TG =155 !thin Slot has more priority than PEC + !!!!!se aniade la opcion -prioritizeCOMPOoverPEC para subir su prioridad y poder simular SIVA (sgg 070815) + if (prioritizeTHINWIRE) then + prior_TW = 1500 !cambiado a 231024 y puesto con maxima prioridad. es solo experimental y por visualizacion + else !opcion correcta. lo anterior es solo experimental y por visualizacion + prior_TW = 15 !prioridad del thin-wire por debajo de todos (excepto del background) + end if +! prior_pmlbody = prior_TW-1 !el hilo tiene prioridad sobre el pmlbody (prueba HOLD coax sgg 251019) + prior_pmlbody = prior_BV+1 !el pml body puede ser penetrado por todo 311019 sgg + !!!! + if (prioritizeCOMPOoverPEC) then !Composite surface + prior_CS=prior_PEC+2 + else + prior_CS=prior_PEC-2 !composites has lower than PEC to properly handle junctions PEC-composite !(ss's 210312 mail) + end if + if (prioritizeISOTROPICBODYoverall) then ! Isotropic body + prior_IB = 200 !SOLO PARA EL CASO DEL SIVA SACAR BOCADOS DE vacio + else + prior_IB = 20 !EL SUSUAL + end if + return + + + end subroutine set_priorities + + function taglist_getFaceTag(this, field, i, j, k) result(res) + class(taglist_t) :: this + integer(kind=IKINDMTAG) :: res + integer(kind = 4) :: field, i, j, k + select case(field) + case(iHx) + res = this%face%x(i, j, k) + case(iHy) + res = this%face%y(i, j, k) + case(iHz) + res = this%face%z(i, j, k) + end select + end function + + function taglist_getEdgeTag(this, field, i, j, k) result(res) + class(taglist_t) :: this + integer(kind=IKINDMTAG) :: res + integer(kind = 4) :: field, i, j, k + select case(field) + case(iEx) + res = this%edge%x(i, j, k) + case(iEy) + res = this%edge%y(i, j, k) + case(iEz) + res = this%edge%z(i, j, k) + end select + end function + + logical function direction_eq(a,b) + class(direction_t), intent(in) :: a,b + direction_eq = .true. + direction_eq = direction_eq .and. (a%x == b%x) + direction_eq = direction_eq .and. (a%y == b%y) + direction_eq = direction_eq .and. (a%z == b%z) + direction_eq = direction_eq .and. (a%orientation == b%orientation) + + end function end module FDETYPES_m - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! STRUCTURE OF SGG -! NumMedia : Number of different media -! NumPlaneWaves : Number of Plane Wave Boxes (only one currently allowed) -! TimeSteps : Number of simulation time steps -! InitialTimeStep : Initial time step (1 to start, otherwise read from file to resume a previous simulation) -! -! LineX( : ),LineY( : ),LineZ( : ) : Positions of the lines containing Ex, Ey, Ez ('discretization lines') -! PlaneWave : Plane Wave info -! px,py,pz : components of the incidence vector -! ex,ey,ez : amplitudes of the electric field (must be perpendicular to de incident vector) -! esqx1,esqy1,esqz1,esqx2,esqy2,esqz2 : discretization lines bounding the Huygens surface -! fichero : name of the field with the time profile of the transinet excitation -! (must be well sampled). -! Border : Limits of the compuational domain info -! IsBackPEC,IsFrontPEC,IsLeftPEC,IsRightPEC,IsUpPEC,IsDownPEC : Whether each limit is PEC, PMC or PML -! IsBackPMC,IsFrontPMC,IsLeftPMC,IsRightPMC,IsUpPMC,IsDownPMC -! IsBackPML,IsFrontPML,IsLeftPML,IsRightPML,IsUpPML,IsDownPML -! PML : PML info (meningless if Is...PEC or Is...PMC are set -! CoeffReflPML(3,2) : Refflection coeffients at the end of the PML at each -! termination ({1-x,2-y,3-z} : {1-start,2-end}) -! NumLayers(3,2) : Number of PML layers ({1-x,2-y,3-z} : {1-start,2-end}) -! -! M(1:6) : six matrices (one per field component) with the index of the medium present at each Yee location -! : plus 1 for the centroid of the cell -! XI,XE,YI,YE,ZI,ZE : Mediamatrix dimensions -! Mediamatrix( : , : , : : Index of the medium present at each Yee location -! -! Med : Info of each medium -! Epr(:),Sigma(:),Mur(:),SigmaM(:) : Relative permittivity, electric conductivity, -! Relative permeability, Magnetic Conductivity -! Priority(:) : To decide overlapping of media (meningless in the simulation, only needed during PREPROCESS) -! IsPML( : ) : If the medium is a PML (needed to calculate the especific PML updating coefficients) -! Wire( : ) : If the medium is a wire, this type contains its parameters -! -! TipoWire : Info on the wire parameters -! radius,R,L : radius, resistance per unit length, inductance per unit length -! Vsource,Isource : Info with the voltage/current source on the wire -! Exists : Wheter this wire is a source (a single wire, with a single segment) -! is needed for the source -! Fichero : name of the field with the time profile of the transinet excitation -! (must be well sampled). -! Multiport( : ) : If the medium is a Multiport, this type contains its parameters -! multiportFileZ11,multiportFileZ22,multiportFileZ12 : Files with the pole/residues info -! Observation : Observation info -! Size : How many observation points -! XI,YI,ZI : index of the voxel to be observed (a voxel is limited by 8 discretization lines. An average to find -! the magnitude at the center is used) -! What : What to observe, fields (Ex, Ey, Ez, Hx, Hy, Hz) or currents at wires (Jx,Jy,Jz) -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! STRUCTURE OF SGG +! NumMedia : Number of different media +! NumPlaneWaves : Number of Plane Wave Boxes (only one currently allowed) +! TimeSteps : Number of simulation time steps +! InitialTimeStep : Initial time step (1 to start, otherwise read from file to resume a previous simulation) +! +! LineX( : ),LineY( : ),LineZ( : ) : Positions of the lines containing Ex, Ey, Ez ('discretization lines') +! PlaneWave : Plane Wave info +! px,py,pz : components of the incidence vector +! ex,ey,ez : amplitudes of the electric field (must be perpendicular to de incident vector) +! esqx1,esqy1,esqz1,esqx2,esqy2,esqz2 : discretization lines bounding the Huygens surface +! fichero : name of the field with the time profile of the transinet excitation +! (must be well sampled). +! Border : Limits of the compuational domain info +! IsBackPEC,IsFrontPEC,IsLeftPEC,IsRightPEC,IsUpPEC,IsDownPEC : Whether each limit is PEC, PMC or PML +! IsBackPMC,IsFrontPMC,IsLeftPMC,IsRightPMC,IsUpPMC,IsDownPMC +! IsBackPML,IsFrontPML,IsLeftPML,IsRightPML,IsUpPML,IsDownPML +! PML : PML info (meningless if Is...PEC or Is...PMC are set +! CoeffReflPML(3,2) : Refflection coeffients at the end of the PML at each +! termination ({1-x,2-y,3-z} : {1-start,2-end}) +! NumLayers(3,2) : Number of PML layers ({1-x,2-y,3-z} : {1-start,2-end}) +! +! M(1:6) : six matrices (one per field component) with the index of the medium present at each Yee location +! : plus 1 for the centroid of the cell +! XI,XE,YI,YE,ZI,ZE : Mediamatrix dimensions +! Mediamatrix( : , : , : : Index of the medium present at each Yee location +! +! Med : Info of each medium +! Epr(:),Sigma(:),Mur(:),SigmaM(:) : Relative permittivity, electric conductivity, +! Relative permeability, Magnetic Conductivity +! Priority(:) : To decide overlapping of media (meningless in the simulation, only needed during PREPROCESS) +! IsPML( : ) : If the medium is a PML (needed to calculate the especific PML updating coefficients) +! Wire( : ) : If the medium is a wire, this type contains its parameters +! +! TipoWire : Info on the wire parameters +! radius,R,L : radius, resistance per unit length, inductance per unit length +! Vsource,Isource : Info with the voltage/current source on the wire +! Exists : Wheter this wire is a source (a single wire, with a single segment) +! is needed for the source +! Fichero : name of the field with the time profile of the transinet excitation +! (must be well sampled). +! Multiport( : ) : If the medium is a Multiport, this type contains its parameters +! multiportFileZ11,multiportFileZ22,multiportFileZ12 : Files with the pole/residues info +! Observation : Observation info +! Size : How many observation points +! XI,YI,ZI : index of the voxel to be observed (a voxel is limited by 8 discretization lines. An average to find +! the magnitude at the center is used) +! What : What to observe, fields (Ex, Ey, Ez, Hx, Hy, Hz) or currents at wires (Jx,Jy,Jz) +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 7890b4e86..971dd8a37 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -10,17 +10,17 @@ MODULE Preprocess_m #undef DetectAdj ! - USE Report_m - USE NFDETypes_m -#ifdef CompileWithMTLN - use mtln_types_m, only: cable_t, unshielded_multiwire_t -#endif + USE Report_m + USE NFDETypes_m +#ifdef CompileWithMTLN + use mtln_types_m, only: cable_t, unshielded_multiwire_t +#endif !healer sgg10 - USE CreateMatrices_m + USE CreateMatrices_m !typos que leo desde mi FDE - USE FDETYPES_m - USE DMMA_m - USE conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z + USE FDETYPES_m + USE DMMA_m + USE conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z IMPLICIT NONE !!!variables globales del modulo REAL (KIND=RKIND), save :: cluz,zvac @@ -47,7 +47,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN LOGICAL, INTENT (INout) :: mibc,SGBC,CLIPREGION,boundwireradius,SGBCDispersive,skindepthpre LOGICAL, INTENT (INout) :: createmapvtk TYPE (limit_t), DIMENSION (1:6) :: SINPML_fullsize, fullsize - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg character(len=BUFSIZE) :: extraswitches type(taglist_t) :: tag_numbers @@ -62,7 +62,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN CHARACTER (LEN=BUFSIZE) :: tag TYPE (XYZlimit_t) :: punto, BoundingBox, conf_bounding_box - TYPE (XYZlimit_t_scaled) :: punto_s + TYPE (XYZlimit_scaled_t) :: punto_s INTEGER (KIND=4) :: orientacion,orientacionL,orientacionR, direccion, contamedia,oldcontamedia, maxcontamedia, mincontamedia, inicontamedia, & i1, j1, field, k1, pecmedio, ii, medio1, medio2, sondas,CONTACURR,CONTAVOLT,I_,J_ ! @@ -106,7 +106,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes, conformal_surfaces real(kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios - type(side_tris_map_t), dimension(:), allocatable :: volume_side_maps, surface_side_maps + type(side_tris_map_t), dimension(:), allocatable :: volume_side_maps, surface_side_maps eps0=eps00; mu0=mu00; !chapuz para convertir la variables de paso en globales cluz=1.0_RKIND/sqrt(eps0*mu0) zvac=sqrt(mu0/eps0) @@ -142,16 +142,16 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN call buildConformalMedia(this%conformalRegs, conformal_volumes, conformal_surfaces) sgg%dt = changeTimeStepIfConformalNeeded(sgg%dt) - if (associated(this%conformalRegs%volumes)) then - volume_side_maps = buildSideMaps(this%conformalRegs%volumes) - else - allocate(volume_side_maps(0)) - end if - if (associated(this%conformalRegs%surfaces)) then - surface_side_maps = buildSideMaps(this%conformalRegs%surfaces) - else - allocate(surface_side_maps(0)) - end if + if (associated(this%conformalRegs%volumes)) then + volume_side_maps = buildSideMaps(this%conformalRegs%volumes) + else + allocate(volume_side_maps(0)) + end if + if (associated(this%conformalRegs%surfaces)) then + surface_side_maps = buildSideMaps(this%conformalRegs%surfaces) + else + allocate(surface_side_maps(0)) + end if ! Cuenta los medios !!!!!calcula tamanios @@ -206,21 +206,21 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN call getDifferentFaceRatios(face_ratios, conformal_surfaces) ! edge_ratios = getDifferentEdgeRatios(conformal_volumes) ! face_ratios = getDifferentFaceRatios(conformal_volumes) - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 -#ifdef CompileWithMTLN - contamedia = contamedia + this%mtln%n_unsh -#endif - ! Surface updates need media distinct from volume updates even when their - ! geometric ratios are equal. - if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - end if - - sgg%NumMedia = contamedia + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 +#ifdef CompileWithMTLN + contamedia = contamedia + this%mtln%n_unsh +#endif + ! Surface updates need media distinct from volume updates even when their + ! geometric ratios are equal. + if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + end if + + sgg%NumMedia = contamedia sgg%AllocMed = contamedia !reserva espacio ALLOCATE (sgg%Med(0:sgg%NumMedia)) @@ -467,10 +467,10 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%Med%Is%Lossy = .FALSE. sgg%Med%Is%multiport = .FALSE. sgg%Med%Is%multiportpadding = .FALSE. - sgg%Med%Is%AnisMultiport = .FALSE. - sgg%Med%Is%ThinWire = .FALSE. - sgg%Med%Is%Multiwire = .FALSE. - sgg%Med%Is%SlantedWire = .FALSE. + sgg%Med%Is%AnisMultiport = .FALSE. + sgg%Med%Is%ThinWire = .FALSE. + sgg%Med%Is%Multiwire = .FALSE. + sgg%Med%Is%SlantedWire = .FALSE. sgg%Med%Is%ThinSlot = .FALSE. sgg%Med%Is%PEC = .FALSE. sgg%Med%Is%ConformalPEC = .FALSE. @@ -2571,7 +2571,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN do j = 1, ubound(conformal_volumes,1) - call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, volume_side_maps(j), isVolume) + call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, volume_side_maps(j), isVolume) numertag = searchtag(tagtype,conformal_volumes(j)%tag) CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & @@ -2583,64 +2583,64 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do - if (ubound(conformal_volumes, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - end if + if (ubound(conformal_volumes, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + end if ! faces from V and S with same ratio are considered different media, bc they need to perform different operations - do j = 1, ubound(conformal_surfaces,1) - call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) - - end do - - if (ubound(conformal_surfaces, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - end if - -#ifdef CompileWithMTLN - block - class(cable_t), pointer :: ptr - do j = 1, this%mtln%n_sh + this%mtln%n_unsh - ptr => this%mtln%cables(j)%ptr - select type(ptr) - type is(unshielded_multiwire_t) - contamedia = contamedia + 1 - allocate(sgg%Med(contamedia)%multiwire(1)) - sgg%Med(contamedia)%Priority = prior_TW - sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr - sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma - sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur - sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM - sgg%Med(contamedia)%Is%Multiwire = .TRUE. - - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%mtln%cables(j)%ptr%tag) - do k = 1, ptr%n_segments - punto%xi = ptr%segments(k)%x - punto%xe = ptr%segments(k)%x - punto%yi = ptr%segments(k)%y - punto%ye = ptr%segments(k)%y - punto%zi = ptr%segments(k)%z - punto%ze = ptr%segments(k)%z - orientacion = ptr%segments(k)%orientation - call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - end do - end select - end do - end block -#endif - - !reporta el bounding box + do j = 1, ubound(conformal_surfaces,1) + call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) + + end do + + if (ubound(conformal_surfaces, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + end if + +#ifdef CompileWithMTLN + block + class(cable_t), pointer :: ptr + do j = 1, this%mtln%n_sh + this%mtln%n_unsh + ptr => this%mtln%cables(j)%ptr + select type(ptr) + type is(unshielded_multiwire_t) + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%multiwire(1)) + sgg%Med(contamedia)%Priority = prior_TW + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr + sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma + sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur + sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM + sgg%Med(contamedia)%Is%Multiwire = .TRUE. + + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%mtln%cables(j)%ptr%tag) + do k = 1, ptr%n_segments + punto%xi = ptr%segments(k)%x + punto%xe = ptr%segments(k)%x + punto%yi = ptr%segments(k)%y + punto%ye = ptr%segments(k)%y + punto%zi = ptr%segments(k)%z + punto%ze = ptr%segments(k)%z + orientacion = ptr%segments(k)%orientation + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + end select + end do + end block +#endif + + !reporta el bounding box #ifdef CompileWithMPI call MPI_BARRIER(MPI_COMM_WORLD,ierr) @@ -4731,11 +4731,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN endif MEDIOEXTRA%index=CONTAMEDIA endif - !!!!!!!!!!!!! - if (contamedia > sgg%AllocMed) then - call Readjust(sgg%AllocMed, sgg%Med, contamedia) - end if - sgg%NumMedia = contamedia + !!!!!!!!!!!!! + if (contamedia > sgg%AllocMed) then + call Readjust(sgg%AllocMed, sgg%Med, contamedia) + end if + sgg%NumMedia = contamedia !el medio 0 no precisa compresion @@ -4919,7 +4919,7 @@ function changeTimeStepIfConformalNeeded(sgg_dt) result(res) end function subroutine initConformalBoundingBox(sgg, bbox) - type(sggfdtdinfo_t), intent(in) :: sgg + type(sggfdtdinfo_t), intent(in) :: sgg type(XYZlimit_t), intent(inout) :: bbox bbox%XI = -sgg%Alloc(iHx)%XI bbox%XE = -sgg%Alloc(iHx)%XE @@ -4998,7 +4998,7 @@ subroutine getDifferentFaceRatios(ratios, conf_media) end subroutine subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map, type) - type(sggfdtdinfo_t), intent(inout) :: sgg + type(sggfdtdinfo_t), intent(inout) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios @@ -5040,22 +5040,22 @@ subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ra call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, type) num_media = contamedia + ubound(edge_ratios_no_zero,1) call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox, type) - if (type == isVolume) then - call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) - end if + if (type == isVolume) then + call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) + end if end subroutine subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios - integer (kind=4) :: face_media - integer (kind=4) :: cell(3) - integer (kind=4) :: previous_faces - type(face_t), dimension(:), allocatable :: combined_faces + integer (kind=4) :: face_media + integer (kind=4) :: cell(3) + integer (kind=4) :: previous_faces + type(face_t), dimension(:), allocatable :: combined_faces type(XYZlimit_t), intent(inout) :: bbox integer (kind=4), intent(in) :: type integer :: j, k @@ -5075,10 +5075,10 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ face_media = 0 end if - previous_faces = 0 - if (allocated(sgg%Med(face_media)%ConformalFace)) previous_faces = ubound(sgg%Med(face_media)%ConformalFace, 1) - allocate(combined_faces(previous_faces + conformal_volumes%face_media(j)%size)) - if (previous_faces > 0) combined_faces(1:previous_faces) = sgg%Med(face_media)%ConformalFace + previous_faces = 0 + if (allocated(sgg%Med(face_media)%ConformalFace)) previous_faces = ubound(sgg%Med(face_media)%ConformalFace, 1) + allocate(combined_faces(previous_faces + conformal_volumes%face_media(j)%size)) + if (previous_faces > 0) combined_faces(1:previous_faces) = sgg%Med(face_media)%ConformalFace do k = 1, conformal_volumes%face_media(j)%size cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) @@ -5098,11 +5098,11 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ media%sggMiHz(cell(1), cell(2), cell(3)) = face_media end select - combined_faces(previous_faces+k) = conformal_volumes%face_media(j)%faces(k) - - end do - call move_alloc(combined_faces, sgg%Med(face_media)%ConformalFace) - end do + combined_faces(previous_faces+k) = conformal_volumes%face_media(j)%faces(k) + + end do + call move_alloc(combined_faces, sgg%Med(face_media)%ConformalFace) + end do end subroutine @@ -5119,16 +5119,16 @@ function getEdgeNormalFromTriangles(triangles) result(res) end function subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, type) - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios - integer (kind=4) :: edge_media - integer (kind=4) :: cell(3) - integer (kind=4) :: previous_edges - type(edge_t), dimension(:), allocatable :: combined_edges + integer (kind=4) :: edge_media + integer (kind=4) :: cell(3) + integer (kind=4) :: previous_edges + type(edge_t), dimension(:), allocatable :: combined_edges type(XYZlimit_t), intent(inout) :: bbox integer (kind=4), intent(in) :: type ! integer(kind=4), dimension(4) :: key @@ -5151,10 +5151,10 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ edge_media = 0 end if - previous_edges = 0 - if (allocated(sgg%Med(edge_media)%ConformalEdge)) previous_edges = ubound(sgg%Med(edge_media)%ConformalEdge, 1) - allocate(combined_edges(previous_edges + conformal_volumes%edge_media(j)%size)) - if (previous_edges > 0) combined_edges(1:previous_edges) = sgg%Med(edge_media)%ConformalEdge + previous_edges = 0 + if (allocated(sgg%Med(edge_media)%ConformalEdge)) previous_edges = ubound(sgg%Med(edge_media)%ConformalEdge, 1) + allocate(combined_edges(previous_edges + conformal_volumes%edge_media(j)%size)) + if (previous_edges > 0) combined_edges(1:previous_edges) = sgg%Med(edge_media)%ConformalEdge do k = 1, conformal_volumes%edge_media(j)%size @@ -5176,16 +5176,16 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end select - combined_edges(previous_edges+k) = conformal_volumes%edge_media(j)%edges(k) - - - end do - call move_alloc(combined_edges, sgg%Med(edge_media)%ConformalEdge) - end do + combined_edges(previous_edges+k) = conformal_volumes%edge_media(j)%edges(k) + + + end do + call move_alloc(combined_edges, sgg%Med(edge_media)%ConformalEdge) + end do end subroutine subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media type(ConformalMedia_t), intent(in) :: conformal_volumes integer (kind=4), intent(in) :: num_media @@ -5892,7 +5892,7 @@ END SUBROUTINE read_geomData SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize, this,MurAfterPML,mur_exist) TYPE (limit_t), DIMENSION (1:6) :: fullsize, SINPML_fullsize - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type(Parseador_t), INTENT (IN) :: this INTEGER (KIND=4) :: tama, i, field,j,k @@ -6017,9 +6017,9 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize DEALLOCATE (lineasX, lineasY, lineasZ) !General Parameter sgg%InitialTimeStep = 0 - sgg%TimeSteps = this%general%nmax - sgg%dt = this%general%dt - !border + sgg%TimeSteps = this%general%nmax + sgg%dt = this%general%dt + !border !this%BORDER%PROPIEDADESPML(I)%ORDEN no lo considero porque en el interior de mi programa lo pongo (esta a 2 normalmente) sgg%Border%IsBackPEC = .FALSE. sgg%Border%IsFrontPEC = .FALSE. @@ -6413,7 +6413,7 @@ subroutine AssigLossyOrPECtoNodes(sgg,media,conf_conflicts,input_conformal_flag) #else subroutine AssigLossyOrPECtoNodes(sgg,media) #endif - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + type (SGGFDTDINFO_t), intent(INOUT) :: sgg type (media_matrices_t), intent(inout) :: media logical :: ispec, isSGBC, IsComposite, islossy, input_conformal_flag,NODALMENTEIGUALES,iguaSGM,iguaSIG,iguaMUR,iguaPEC,iguaLOS,iguaEPR,ISconformal @@ -7060,23 +7060,23 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) endif end do endif - end do - -#ifdef CompileWithMTLN - block - class(cable_t), pointer :: ptr - do i = 1, this%mtln%n_unsh + this%mtln%n_sh - ptr => this%mtln%cables(i)%ptr - select type(ptr) - type is(unshielded_multiwire_t) - numertag = numertag + 1 - if (precounting == 1) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag - end select - end do - end block -#endif - - tama = this%swires%n_sw + end do + +#ifdef CompileWithMTLN + block + class(cable_t), pointer :: ptr + do i = 1, this%mtln%n_unsh + this%mtln%n_sh + ptr => this%mtln%cables(i)%ptr + select type(ptr) + type is(unshielded_multiwire_t) + numertag = numertag + 1 + if (precounting == 1) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag + end select + end do + end block +#endif + + tama = this%swires%n_sw do i=1, tama numertag = numertag + 1 tama2=this%swires%SW(i)%n_swc From ebf316b8ce890570e8bd412204dfc6594389ad8c Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Wed, 19 Aug 2026 12:38:55 +0200 Subject: [PATCH 30/35] Reverting cosmetic changes. --- src_main_pub/healer.F90 | 2354 ++--- src_main_pub/nfde_types.F90 | 1164 +-- src_main_pub/preprocess_geom.F90 | 14898 ++++++++++++++--------------- 3 files changed, 9208 insertions(+), 9208 deletions(-) diff --git a/src_main_pub/healer.F90 b/src_main_pub/healer.F90 index f7ae1cef5..7284bf5d4 100755 --- a/src_main_pub/healer.F90 +++ b/src_main_pub/healer.F90 @@ -6,24 +6,24 @@ ! Also creates intermediate media for the boundaries ! between different media. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -MODULE CreateMatrices_m - USE Report_m - USE FDETYPES_m +module CreateMatrices_m + use Report_m + use FDETYPES_m ! - IMPLICIT NONE - PRIVATE + implicit none + private ! ! - TYPE crosscheck_t - INTEGER (KIND=4) :: actual, NewActual, NewActual2 - INTEGER (KIND=4), DIMENSION (1:4) :: tent - END TYPE + type crosscheck_t + integer(kind=4) :: actual, NewActual, NewActual2 + integer(kind=4), dimension(1:4) :: tent + end type !matriz para controlar lo punietereos indices de cadacomponente - INTEGER (KIND=4), DIMENSION (6, 3, 2), PARAMETER, PUBLIC :: & + integer(kind=4), dimension(6, 3, 2), parameter, public :: & & in = reshape ( (/ 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, & & 0, 1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 /), (/ 6, 3, 2 /)) ! - INTEGER (KIND=4), DIMENSION (6, 3, 2), PARAMETER, PUBLIC :: & + integer(kind=4), dimension(6, 3, 2), parameter, public :: & & on = reshape ( (/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & & 0, 0,-1, 0, 0, 0,-1,-1, 0,-1, 0,-1, 0,-1, 0, 0, & -1,-1,-1, 0 /), (/ 6, 3, 2 /)) @@ -33,27 +33,27 @@ MODULE CreateMatrices_m public CreateSurfaceSlotMM,CreateMagneticSurface public CreateConformalPECVolume ! - CONTAINS + contains - SUBROUTINE SortInitEndWithIncreasingOrder(p) + subroutine SortInitEndWithIncreasingOrder(p) type(XYZlimit_t), intent(inout) :: p - integer (kind=4) :: aux + integer(kind=4) :: aux if (p%XI > p%XE) then aux = p%XI p%XI = p%XE p%XE = aux - endif + end if if (p%YI > p%YE) then aux = p%YI p%YI = p%YE p%YE = aux - endif + end if if (p%ZI > p%ZE) then aux = p%ZI p%ZI = p%ZE p%ZE = aux - endif - END SUBROUTINE + end if + end subroutine ! Similar to CreateConformalPECVolume, but fills only the boundary? Inside (if closed surface) is vacuum/subtrate ! If open surface, only boundary has to be tagged @@ -66,8 +66,8 @@ SUBROUTINE SortInitEndWithIncreasingOrder(p) ! & NumMedia, BoundingBox,indicemedio) ! end subroutine - - SUBROUTINE CreateConformalPECVolume (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + + subroutine CreateConformalPECVolume (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & @@ -75,31 +75,31 @@ SUBROUTINE CreateConformalPECVolume (layoutnumber, Mtag, tags, numertag, MMiEx, & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & & NumMedia, BoundingBox,indicemedio) character(len=BUFSIZE) :: buff - TYPE (Shared_t) :: Eshared + type(Shared_t) :: Eshared - INTEGER (KIND=4) :: NumMedia - TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med + integer(kind=4) :: NumMedia + type(MediaData_t), dimension(0:NumMedia) :: med ! - TYPE (XYZlimit_t), INTENT(IN) :: BoundingBox + type(XYZlimit_t), intent(in) :: BoundingBox integer(kind=4), intent(in) :: indicemedio ! - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! type(taglist_t) :: tags - INTEGER (KIND=IKINDMTAG) numertag - INTEGER (KIND=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - ! - INTEGER (KIND=4) :: layoutnumber, i, j, k + integer(kind=IKINDMTAG) numertag + integer(kind=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + ! + integer(kind=4) :: layoutnumber, i, j, k ! faces that should be PEC, bc edges are all PEC do k = BoundingBox%zi, BoundingBox%ze+1 @@ -183,14 +183,14 @@ subroutine fillBoundaryFaceIfAllEdgesPEC(i,j,k,face) end subroutine logical function hasCrossedPEC(m1,m2,m3,m4) - integer (kind=INTEGERSIZEOFMEDIAMATRICES) :: m1,m2,m3,m4 + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: m1,m2,m3,m4 hasCrossedPEC = (med(m1)%Is%ConformalPEC .or. med(m1)%Is%PEC) .and. & (med(m2)%Is%ConformalPEC .or. med(m2)%Is%PEC) .and. & (med(m3)%Is%ConformalPEC .or. med(m3)%Is%PEC) .and. & (med(m4)%Is%ConformalPEC .or. med(m4)%Is%PEC) end function logical function hasCrossedPECOrConformalPEC(m1,m2,m3,m4) - integer (kind=INTEGERSIZEOFMEDIAMATRICES) :: m1,m2,m3,m4 + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: m1,m2,m3,m4 hasCrossedPECOrConformalPEC = (med(m1)%Is%ConformalPEC .or. med(m1)%Is%PEC) .or. & (med(m2)%Is%ConformalPEC .or. med(m2)%Is%PEC) .or. & (med(m3)%Is%ConformalPEC .or. med(m3)%Is%PEC) .or. & @@ -198,8 +198,8 @@ logical function hasCrossedPECOrConformalPEC(m1,m2,m3,m4) end function subroutine fillPECFaceInsideVolume(i, j, k, face) - integer (kind=4), intent(in) :: i, j, k, face - integer (kind=4) :: m1,m2,m3,m4, m + integer(kind=4), intent(in) :: i, j, k, face + integer(kind=4) :: m1,m2,m3,m4, m logical :: on_boundary select case (face) case(FACE_X) @@ -510,7 +510,7 @@ function countCrossesZ(i,j) result(res) ! Outputs : M(field)%Mediamatrix(i,j,k) = type of medium indicemedio set for all the fields at each voxel ! centered at i,j,k (usual convention) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE CreateVolumeMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + subroutine CreateVolumeMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & @@ -518,35 +518,35 @@ SUBROUTINE CreateVolumeMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMi & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & & NumMedia, Eshared, BoundingBox, point, indicemedio) character(len=BUFSIZE) :: buff - TYPE (Shared_t) :: Eshared + type(Shared_t) :: Eshared ! - INTEGER (KIND=4) :: NumMedia - TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med - INTEGER (KIND=4) :: medio + integer(kind=4) :: NumMedia + type(MediaData_t), dimension(0:NumMedia) :: med + integer(kind=4) :: medio ! - TYPE (XYZlimit_t) :: punto, puntoPlus1 - TYPE (XYZlimit_t), INTENT (INOUT) :: point - TYPE (XYZlimit_t), INTENT(IN) :: BoundingBox + type(XYZlimit_t) :: punto, puntoPlus1 + type(XYZlimit_t), intent(inout) :: point + type(XYZlimit_t), intent(in) :: BoundingBox ! - INTEGER (KIND=4) :: indicemedio + integer(kind=4) :: indicemedio ! - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! type(taglist_t) :: tags - INTEGER (KIND=IKINDMTAG) numertag - INTEGER (KIND=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=IKINDMTAG) numertag + integer(kind=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) ! - INTEGER (KIND=4) :: layoutnumber, i, j, k + integer(kind=4) :: layoutnumber, i, j, k ! med(indicemedio)%Is%Volume = .TRUE. ! @@ -564,23 +564,23 @@ SUBROUTINE CreateVolumeMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMi puntoPlus1%YE = Min (point%YE+1, Max(BoundingBox%YI, BoundingBox%YE)) puntoPlus1%ZE = Min (point%ZE+1, Max(BoundingBox%ZI, BoundingBox%ZE)) !!!only for volumes the centroid is assigned !eliminado 03/07/15 - !! DO k = punto%ZI, punto%ZE - !! DO j = punto%YI, punto%YE - !! DO i = punto%XI, punto%XE + !! do k = punto%ZI, punto%ZE + !! do j = punto%YI, punto%YE + !! do i = punto%XI, punto%XE !! medio = MMcen (i, j, k) - !! IF (med(indicemedio)%Priority >= med(medio)%Priority) THEN + !! if (med(indicemedio)%Priority >= med(medio)%Priority) then !! MMcen (i, j, k) = indicemedio - !! END IF - !! END DO - !! END DO - !! END DO + !! end if + !! end do + !! end do + !! end do !only take care of the boundaries for interfacing - DO k = punto%ZI, puntoPlus1%ZE - DO j = punto%YI, puntoPlus1%YE - DO i = punto%XI, punto%XE + do k = punto%ZI, puntoPlus1%ZE + do j = punto%YI, puntoPlus1%YE + do i = punto%XI, punto%XE medio = MMiEx (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%x(i,j,k) = 64*numertag @@ -589,110 +589,110 @@ SUBROUTINE CreateVolumeMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMi !solo se pone un tag si ya se habia puesto o si estaba si inicializar (cero) y se shifte 6 bits numerados del 0 (iex) al 5 (ihz) empezando por la derecha (lsb) !lo ponto siempre a .true. y quien llege se lo lleva machacando al que habia. los tags no solucionan el problema de determinar univocamente el medio de una celda !a menos que se definan 6 matrices de tags. esto es un niapa que solo sirve para filtrar celdas incluyendo fallos en celdas compartidas entre medios pero no es fiable para determinar medios en posiciones 161020 - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then !no lo detectare en volumenes porque podria llevar tiempos elevados en el preproceso !cuando se actualiza el numero de shared (sept'11) ! OnSurface = (k == punto%ZI).or.(k == puntoPlus1%ZE).or.(j == punto%YI).or.(j == puntoPlus1%YE) ! if (OnSurface) call AddToShared(iEx,i,j,k,indicemedio,medio,Eshared) - END IF -! END IF - END DO - END DO - END DO - ! - DO k = punto%ZI, puntoPlus1%ZE - DO j = punto%YI, punto%YE - DO i = punto%XI, puntoPlus1%XE + end if +! end if + end do + end do + end do + ! + do k = punto%ZI, puntoPlus1%ZE + do j = punto%YI, punto%YE + do i = punto%XI, puntoPlus1%XE medio = MMiEy (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then !no lo detectare en volumenes porque podria llevar tiempos elevados en el preproceso !cuando se actualiza el numero de shared (sept'11) ! OnSurface = (k == punto%ZI).or.(k == puntoPlus1%ZE).or.(i == punto%XI).or.(i == puntoPlus1%XE) ! if (OnSurface) call AddToShared(iEy,i,j,k,indicemedio,medio,Eshared) - END IF + end if - ! END IF - END DO - END DO - END DO - ! - DO k = punto%ZI, punto%ZE - DO j = punto%YI, puntoPlus1%YE - DO i = punto%XI, puntoPlus1%XE + ! end if + end do + end do + end do + ! + do k = punto%ZI, punto%ZE + do j = punto%YI, puntoPlus1%YE + do i = punto%XI, puntoPlus1%XE medio = MMiEz (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then !no lo detectare en volumenes porque podria llevar tiempos elevados en el preproceso !cuando se actualiza el numero de shared (sept'11) ! OnSurface = (i == punto%XI).or.(i == puntoPlus1%XE).or.(j == punto%YI).or.(j == puntoPlus1%YE) ! if (OnSurface) call AddToShared(iEz,i,j,k,indicemedio,medio,Eshared) - END IF -! END IF - END DO - END DO - END DO - ! - DO k = punto%ZI, punto%ZE - DO j = punto%YI, punto%YE - DO i = punto%XI, puntoPlus1%XE + end if +! end if + end do + end do + end do + ! + do k = punto%ZI, punto%ZE + do j = punto%YI, punto%YE + do i = punto%XI, puntoPlus1%XE medio = MMiHx (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,3); - END IF -! END IF - END DO - END DO - END DO - ! - DO k = punto%ZI, punto%ZE - DO j = punto%YI, puntoPlus1%YE - DO i = punto%XI, punto%XE + end if +! end if + end do + end do + end do + ! + do k = punto%ZI, punto%ZE + do j = punto%YI, puntoPlus1%YE + do i = punto%XI, punto%XE medio = MMiHy (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,4); - END IF - ! END IF - END DO - END DO - END DO - ! - DO k = punto%ZI, puntoPlus1%ZE - DO j = punto%YI, punto%YE - DO i = punto%XI, punto%XE + end if + ! end if + end do + end do + end do + ! + do k = punto%ZI, puntoPlus1%ZE + do j = punto%YI, punto%YE + do i = punto%XI, punto%XE medio = MMiHz (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,5); - END IF -! END IF - END DO - END DO - END DO - ! - RETURN - END SUBROUTINE + end if +! end if + end do + end do + end do + ! + return + end subroutine !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Routine : CreateSurfaceMM : Sets every field component of the lower/back/left surface of a voxel to the index of the medium ! Inputs : M(field)%Mediamatrix(i,j,k) : type of medium at each i,j,k, for each field @@ -702,7 +702,7 @@ SUBROUTINE CreateVolumeMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMi ! Outputs : M(field)%Mediamatrix(i,j,k) = type of medium indicemedio set for all the fields at each voxel centered at i,j,k ! (usual convention) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE CreateSurfaceMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + subroutine CreateSurfaceMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, & & Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, & & Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & @@ -712,33 +712,33 @@ SUBROUTINE CreateSurfaceMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MM & Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, & & med, NumMedia, Eshared, BoundingBox, point, orientacion, indicemedio) character(len=BUFSIZE) :: buff - INTEGER (KIND=4) :: NumMedia - TYPE (Shared_t) :: Eshared - TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med + integer(kind=4) :: NumMedia + type(Shared_t) :: Eshared + type(MediaData_t), dimension(0:NumMedia) :: med ! - TYPE (XYZlimit_t) :: punto, puntoPlus1,puntoBboxplus1 - TYPE (XYZlimit_t), INTENT (INOUT) :: point - TYPE (XYZlimit_t), INTENT(IN) :: BoundingBox + type(XYZlimit_t) :: punto, puntoPlus1,puntoBboxplus1 + type(XYZlimit_t), intent(inout) :: point + type(XYZlimit_t), intent(in) :: BoundingBox ! - INTEGER (KIND=4) :: indicemedio, orientacion - INTEGER (KIND=4) :: layoutnumber, i, j, k - INTEGER (KIND=4) :: medio + integer(kind=4) :: indicemedio, orientacion + integer(kind=4) :: layoutnumber, i, j, k + integer(kind=4) :: medio ! - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & & Alloc_iHz_XE, Alloc_iHz_YI , Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! type(taglist_t) :: tags - INTEGER (KIND=IKINDMTAG) numertag - INTEGER (KIND=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=IKINDMTAG) numertag + integer(kind=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) med(indicemedio)%Is%Surface = .TRUE. call SortInitEndWithIncreasingOrder(point) @@ -763,133 +763,133 @@ SUBROUTINE CreateSurfaceMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MM CASE (iEx) ! i=punto%XI ! if ((i <= max(BoundingBox%XI,BoundingBox%XE)).and.(i >= min(BoundingBox%XI,BoundingBox%XE))) then - DO i = punto%XI, puntoBboxplus1%XE - DO j = punto%YI, punto%YE - DO k = punto%ZI, puntoPlus1%ZE + do i = punto%XI, puntoBboxplus1%XE + do j = punto%YI, punto%YE + do k = punto%ZI, puntoPlus1%ZE medio = MMiEy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEy (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); tags%edge%y(i,j,k) = 64*numertag - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - DO j = punto%YI, puntoPlus1%YE - DO k = punto%ZI, punto%ZE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + do j = punto%YI, puntoPlus1%YE + do k = punto%ZI, punto%ZE medio = MMiEz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEz (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); tags%edge%z(i,j,k) = 64*numertag - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - DO j = punto%YI, punto%YE - DO k = punto%ZI, punto%ZE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + do j = punto%YI, punto%YE + do k = punto%ZI, punto%ZE medio = MMiHx (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) then +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHx (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,3); tags%face%x(i,j,k) = 64*numertag - endif -! END IF - END DO - END DO - END DO - ! endif + end if +! end if + end do + end do + end do + ! end if CASE (iEy) ! j=punto%YI ! if ((j <= max(BoundingBox%YI,BoundingBox%YE)).and.(j >= min(BoundingBox%YI,BoundingBox%YE))) then - DO j = punto%YI, puntoBboxplus1%YE - DO i = punto%XI, puntoPlus1%XE - DO k = punto%ZI, punto%ZE + do j = punto%YI, puntoBboxplus1%YE + do i = punto%XI, puntoPlus1%XE + do k = punto%ZI, punto%ZE medio = MMiEz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEz (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); tags%edge%z(i,j,k) = 64*numertag - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - DO i = punto%XI, punto%XE - DO k = punto%ZI, puntoPlus1%ZE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + do i = punto%XI, punto%XE + do k = punto%ZI, puntoPlus1%ZE medio = MMiEx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEx (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0); tags%edge%x(i,j,k) = 64*numertag - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - DO i = punto%XI, punto%XE - DO k = punto%ZI, punto%ZE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + do i = punto%XI, punto%XE + do k = punto%ZI, punto%ZE medio = MMiHy (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) then +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHy (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,4);; tags%face%y(i,j,k) = 64*numertag - endif -! END IF - END DO - END DO - END DO - ! endif + end if +! end if + end do + end do + end do + ! end if CASE (iEz) ! k=punto%ZI ! if ((k <= max(BoundingBox%ZI,BoundingBox%ZE)).and.(k >= min(BoundingBox%ZI,BoundingBox%ZE))) then - DO k = punto%ZI, puntoBboxplus1%ZE - DO i = punto%XI, punto%XE - DO j = punto%YI, puntoPlus1%YE + do k = punto%ZI, puntoBboxplus1%ZE + do i = punto%XI, punto%XE + do j = punto%YI, puntoPlus1%YE medio = MMiEx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEx (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0); tags%edge%x(i,j,k) = 64*numertag - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - DO i = punto%XI, puntoPlus1%XE - DO j = punto%YI, punto%YE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + do i = punto%XI, puntoPlus1%XE + do j = punto%YI, punto%YE medio = MMiEy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEy (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); tags%edge%y(i,j,k) = 64*numertag - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - DO i = punto%XI, punto%XE - DO j = punto%YI, punto%YE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + do i = punto%XI, punto%XE + do j = punto%YI, punto%YE medio = MMiHz (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) then +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHz (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,5); tags%face%z(i,j,k) = 64*numertag - endif -! END IF - END DO - END DO - END DO - ! endif - END SELECT - ! - RETURN - END SUBROUTINE + end if +! end if + end do + end do + end do + ! end if + end select + ! + return + end subroutine !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Routine : CreateLineMM : Sets every field component of the inner Y/Y/Z axis of a voxel to the index of the medium ! Inputs : M(field)%Mediamatrix(i,j,k) : type of medium at each i,j,k, for each field @@ -899,7 +899,7 @@ SUBROUTINE CreateSurfaceMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MM ! Outputs : M(field)%Mediamatrix(i,j,k) = type of medium indicemedio set for all the fields at each ! voxel centered at i,j,k (usual convention) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + subroutine CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & @@ -907,36 +907,36 @@ SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & & NumMedia, Eshared, BoundingBox, point, orientacion, indicemedio, isathinwire, verbose,numeroasignaciones) - TYPE (Shared_t) :: Eshared - INTEGER (KIND=4) :: NumMedia - TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med + type(Shared_t) :: Eshared + integer(kind=4) :: NumMedia + type(MediaData_t), dimension(0:NumMedia) :: med ! - TYPE (XYZlimit_t) :: punto - TYPE (XYZlimit_t), INTENT (INOUT) :: point - TYPE (XYZlimit_t), INTENT(IN) :: BoundingBox + type(XYZlimit_t) :: punto + type(XYZlimit_t), intent(inout) :: point + type(XYZlimit_t), intent(in) :: BoundingBox - INTEGER (KIND=4) :: indicemedio, orientacion,numeroasignaciones - LOGICAL, INTENT (IN) :: isathinwire, verbose - INTEGER (KIND=4) :: i, j, k, layoutnumber - INTEGER (KIND=4) :: medio + integer(kind=4) :: indicemedio, orientacion,numeroasignaciones + LOGICAL, intent(in) :: isathinwire, verbose + integer(kind=4) :: i, j, k, layoutnumber + integer(kind=4) :: medio ! - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! type(taglist_t) :: tags - INTEGER (KIND=IKINDMTAG) numertag - INTEGER (KIND=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - ! - CHARACTER (LEN=BUFSIZE) :: buff + integer(kind=IKINDMTAG) numertag + integer(kind=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + ! + character(len=BUFSIZE) :: buff med(indicemedio)%Is%Line = .TRUE. ! ! @@ -956,12 +956,12 @@ SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz ! k=punto%ZI ! if ((j <= max(BoundingBox%YI,BoundingBox%YE)).and.(j >= min(BoundingBox%YI,BoundingBox%YE)).and. & ! (k <= max(BoundingBox%ZI,BoundingBox%ZE)).and.(k >= min(BoundingBox%ZI,BoundingBox%ZE))) then - DO k = punto%ZI, punto%ZE - DO j = punto%YI, punto%YE - DO i = punto%XI, punto%XE + do k = punto%ZI, punto%ZE + do j = punto%YI, punto%YE + do i = punto%XI, punto%XE medio = MMiEx (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then numeroasignaciones=numeroasignaciones+1 if (med(indicemedio)%is%lumped) then if (numeroasignaciones==1) then !solo le echa el lumped a 1 segmento !esto es una peticion externa !ojo es agresivo. !solo se pone 1 segmento con la resistencia especificada. me doy cuenta en 040123 @@ -974,31 +974,31 @@ SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz Mtag(i,j,k)=64*numertag tags%edge%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0);; - endif + end if else MMiEx (i, j, k) = indicemedio; Mtag(i,j,k)=64*numertag tags%edge%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0); - endif - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - END DO - ! endif + end if + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + end do + ! end if CASE (iEy) ! i=punto%XI ! k=punto%ZI ! if ((i <= max(BoundingBox%XI,BoundingBox%XE)).and.(i >= min(BoundingBox%XI,BoundingBox%XE)).and. & ! (k <= max(BoundingBox%ZI,BoundingBox%ZE)).and.(k >= min(BoundingBox%ZI,BoundingBox%ZE))) then - DO k = punto%ZI, punto%ZE - DO j = punto%YI, punto%YE - DO i = punto%XI, punto%XE + do k = punto%ZI, punto%ZE + do j = punto%YI, punto%YE + do i = punto%XI, punto%XE medio = MMiEy (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then numeroasignaciones=numeroasignaciones+1 if (med(indicemedio)%is%lumped) then if (numeroasignaciones==1) then !solo le echa el lumped a 1 segmento @@ -1011,32 +1011,32 @@ SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz Mtag(i,j,k)=64*numertag tags%edge%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); - endif + end if else MMiEy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); - endif + end if - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - END DO - ! endif + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + end do + ! end if CASE (iEz) ! i=punto%XI ! j=punto%YI ! if ((i <= max(BoundingBox%XI,BoundingBox%XE)).and.(i >= min(BoundingBox%XI,BoundingBox%XE)).and. & ! (j <= max(BoundingBox%YI,BoundingBox%YE)).and.(j >= min(BoundingBox%YI,BoundingBox%YE))) then - DO k = punto%ZI, punto%ZE - DO j = punto%YI, punto%YE - DO i = punto%XI, punto%XE + do k = punto%ZI, punto%ZE + do j = punto%YI, punto%YE + do i = punto%XI, punto%XE medio = MMiEz (i, j, k) -! IF (medio /= 0) THEN !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN +! if (medio /= 0) then !ojo esto estaba antes de 031016 y daba maxima prioridad al medio 0 PEC. Ahora puedo tener medios con mas prioridad!!! !?!? cambio agresivo 031016!!! + if (med(indicemedio)%Priority > med(medio)%Priority) then numeroasignaciones=numeroasignaciones+1 if (med(indicemedio)%is%lumped) then if (numeroasignaciones==1) then !solo le echa el lumped a 1 segmento @@ -1049,26 +1049,26 @@ SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz Mtag(i,j,k)=64*numertag tags%edge%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2);; - endif + end if else MMiEz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); - endif + end if - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - CALL AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) - END IF + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + call AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) + end if - END DO - END DO - END DO - ! endif - END SELECT - ! - RETURN - END SUBROUTINE + end do + end do + end do + ! end if + end select + ! + return + end subroutine !Slot=special case of surface. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Routine : CreateSurfaceSlotMM : Sets every field component of the lower/back/left surface of a voxel to the index of @@ -1080,7 +1080,7 @@ SUBROUTINE CreateLineMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz ! Outputs : M(field)%Mediamatrix(i,j,k) = type of medium indicemedio set for all the fields at each voxel centered at i,j,k ! (usual convention) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE CreateSurfaceSlotMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + subroutine CreateSurfaceSlotMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & @@ -1088,34 +1088,34 @@ SUBROUTINE CreateSurfaceSlotMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & & NumMedia, Eshared, Hshared, BoundingBox, point, orientacion, direccion, indicemedio) character(len=BUFSIZE) :: buff - TYPE (Shared_t) :: Eshared, Hshared - INTEGER (KIND=4) :: NumMedia - TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med + type(Shared_t) :: Eshared, Hshared + integer(kind=4) :: NumMedia + type(MediaData_t), dimension(0:NumMedia) :: med ! - TYPE (XYZlimit_t) :: punto, puntoPlus1,puntoBboxplus1 - TYPE (XYZlimit_t), INTENT (INOUT) :: point - TYPE (XYZlimit_t), INTENT(IN) :: BoundingBox + type(XYZlimit_t) :: punto, puntoPlus1,puntoBboxplus1 + type(XYZlimit_t), intent(inout) :: point + type(XYZlimit_t), intent(in) :: BoundingBox ! - INTEGER (KIND=4) :: indicemedio, orientacion, direccion + integer(kind=4) :: indicemedio, orientacion, direccion ! - INTEGER (KIND=4) :: layoutnumber, i, j, k, offx, offy, offz - INTEGER (KIND=4) :: medio + integer(kind=4) :: layoutnumber, i, j, k, offx, offy, offz + integer(kind=4) :: medio ! - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! type(taglist_t) :: tags - INTEGER (KIND=IKINDMTAG) numertag - INTEGER (KIND=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=IKINDMTAG) numertag + integer(kind=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) med(indicemedio)%Is%Surface = .TRUE. ! call SortInitEndWithIncreasingOrder(point) @@ -1142,172 +1142,172 @@ SUBROUTINE CreateSurfaceSlotMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy offz = 0 SELECT CASE (Abs(orientacion)) CASE (iEx) - DO i = punto%XI, puntoBboxplus1%XE + do i = punto%XI, puntoBboxplus1%XE SELECT CASE (direccion) CASE (iEz) offx = 0 offy = 0 offz = 1 - DO j = punto%YI, punto%YE - DO k = punto%ZI, puntoPlus1%ZE + do j = punto%YI, punto%YE + do k = punto%ZI, puntoPlus1%ZE medio = MMiEy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do CASE (iEy) offx = 0 offy = 1 offz = 0 - DO j = punto%YI, puntoPlus1%YE - DO k = punto%ZI, punto%ZE + do j = punto%YI, puntoPlus1%YE + do k = punto%ZI, punto%ZE medio = MMiEz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - END SELECT - DO j = Max (punto%YI - offy, Min(BoundingBox%YI, BoundingBox%YE)), & + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + end select + do j = Max (punto%YI - offy, Min(BoundingBox%YI, BoundingBox%YE)), & & Min (punto%YE + offy, Max(BoundingBox%YI, BoundingBox%YE)-1) - DO k = Max (punto%ZI - offz, Min(BoundingBox%ZI, BoundingBox%ZE)), & + do k = Max (punto%ZI - offz, Min(BoundingBox%ZI, BoundingBox%ZE)), & & Min (punto%ZE + offz, Max(BoundingBox%ZI, BoundingBox%ZE)-1) medio = MMiHx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,3); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iHx, i, j, k, indicemedio, medio, Hshared) + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iHx, i, j, k, indicemedio, medio, Hshared) - END IF - END DO - END DO - END DO + end if + end do + end do + end do CASE (iEy) - DO j = punto%YI, puntoBboxplus1%YE + do j = punto%YI, puntoBboxplus1%YE SELECT CASE (direccion) CASE (iEx) offx = 1 offy = 0 offz = 0 - DO i = punto%XI, puntoPlus1%XE - DO k = punto%ZI, punto%ZE + do i = punto%XI, puntoPlus1%XE + do k = punto%ZI, punto%ZE medio = MMiEz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iEz, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do CASE (iEz) offx = 0 offy = 0 offz = 1 - DO i = punto%XI, punto%XE - DO k = punto%ZI, puntoPlus1%ZE + do i = punto%XI, punto%XE + do k = punto%ZI, puntoPlus1%ZE medio = MMiEx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - END SELECT - DO i = Max (punto%XI - offx, Min(BoundingBox%XI, BoundingBox%XE)), & + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + end select + do i = Max (punto%XI - offx, Min(BoundingBox%XI, BoundingBox%XE)), & & Min (punto%XE + offx, Max(BoundingBox%XI, BoundingBox%XE)-1) - DO k = Max (punto%ZI - offz, Min(BoundingBox%ZI, BoundingBox%ZE)), & + do k = Max (punto%ZI - offz, Min(BoundingBox%ZI, BoundingBox%ZE)), & & Min (punto%ZE + offz, Max(BoundingBox%ZI, BoundingBox%ZE)-1) medio = MMiHy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,4); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iHy, i, j, k, indicemedio, medio, Hshared) - END IF - END DO - END DO - END DO + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iHy, i, j, k, indicemedio, medio, Hshared) + end if + end do + end do + end do CASE (iEz) - DO k = punto%ZI, puntoBboxplus1%ZE + do k = punto%ZI, puntoBboxplus1%ZE SELECT CASE (direccion) CASE (iEy) offx = 0 offy = 1 offz = 0 - DO i = punto%XI, punto%XE - DO j = punto%YI, puntoPlus1%YE + do i = punto%XI, punto%XE + do j = punto%YI, puntoPlus1%YE medio = MMiEx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iEx, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do CASE (iEx) offx = 1 offy = 0 offz = 0 - DO i = punto%XI, puntoPlus1%XE - DO j = punto%YI, punto%YE + do i = punto%XI, puntoPlus1%XE + do j = punto%YI, punto%YE medio = MMiEy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) - END IF - END DO - END DO - END SELECT - DO i = Max (punto%XI - offx, Min(BoundingBox%XI, BoundingBox%XE)), & + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iEy, i, j, k, indicemedio, medio, Eshared) + end if + end do + end do + end select + do i = Max (punto%XI - offx, Min(BoundingBox%XI, BoundingBox%XE)), & & Min (punto%XE + offx, Max(BoundingBox%XI, BoundingBox%XE)-1) - DO j = Max (punto%YI - offy, Min(BoundingBox%YI, BoundingBox%YE)), & + do j = Max (punto%YI - offy, Min(BoundingBox%YI, BoundingBox%YE)), & & Min (punto%YE + offy, Max(BoundingBox%YI, BoundingBox%YE)-1) medio = MMiHz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,5); - ELSE IF ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) THEN - !CALL AddToShared (iHz, i, j, k, indicemedio, medio, Hshared) - END IF - END DO - END DO - END DO - END SELECT - ! - RETURN - END SUBROUTINE + ELSE if ((med(indicemedio)%Priority == med(medio)%Priority) .AND. (medio /= indicemedio)) then + !call AddToShared (iHz, i, j, k, indicemedio, medio, Hshared) + end if + end do + end do + end do + end select + ! + return + end subroutine !!!!special case of magneticsurface (for the multiport padding) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1319,7 +1319,7 @@ SUBROUTINE CreateSurfaceSlotMM (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy ! Outputs : M(field)%Mediamatrix(i,j,k) = type of medium indicemedio set for all the fields at each voxel centered at i,j,k ! (usual convention) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE CreateMagneticSurface(layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & + subroutine CreateMagneticSurface(layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & @@ -1327,33 +1327,33 @@ SUBROUTINE CreateMagneticSurface(layoutnumber, Mtag, tags, numertag, MMiEx, MMiE & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & & NumMedia, Eshared, BoundingBox, point, orientacion, indicemedio) character(len=BUFSIZE) :: buff - INTEGER (KIND=4) :: NumMedia - TYPE (Shared_t) :: Eshared - TYPE (MediaData_t), DIMENSION (0:NumMedia) :: med + integer(kind=4) :: NumMedia + type(Shared_t) :: Eshared + type(MediaData_t), dimension(0:NumMedia) :: med ! - TYPE (XYZlimit_t) :: punto, puntoPlus1 !,puntoBboxplus1 - TYPE (XYZlimit_t), INTENT (INOUT) :: point - TYPE (XYZlimit_t), INTENT(IN) :: BoundingBox + type(XYZlimit_t) :: punto, puntoPlus1 !,puntoBboxplus1 + type(XYZlimit_t), intent(inout) :: point + type(XYZlimit_t), intent(in) :: BoundingBox ! - INTEGER (KIND=4) :: indicemedio, orientacion - INTEGER (KIND=4) :: layoutnumber, i, j, k - INTEGER (KIND=4) :: medio + integer(kind=4) :: indicemedio, orientacion + integer(kind=4) :: layoutnumber, i, j, k + integer(kind=4) :: medio ! - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE ! type(taglist_t) :: tags - INTEGER (KIND=IKINDMTAG) numertag - INTEGER (KIND=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) - INTEGER (KIND=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=IKINDMTAG) numertag + integer(kind=IKINDMTAG ) :: Mtag (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEx (Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEy (Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiEz (Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHx (Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHy (Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE) + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: MMiHz (Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE) med(indicemedio)%Is%Surface = .TRUE. ! ! @@ -1378,119 +1378,119 @@ SUBROUTINE CreateMagneticSurface(layoutnumber, Mtag, tags, numertag, MMiEx, MMiE ! SELECT CASE (Abs(orientacion)) CASE (iEx) - DO i = punto%XI, punto%XE - DO j = punto%YI, puntoPlus1%YE - DO k = punto%ZI, punto%ZE + do i = punto%XI, punto%XE + do j = punto%YI, puntoPlus1%YE + do k = punto%ZI, punto%ZE medio = MMiHy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,4); - endif - END DO - END DO - DO j = punto%YI, punto%YE - DO k = punto%ZI, puntoPlus1%ZE + end if + end do + end do + do j = punto%YI, punto%YE + do k = punto%ZI, puntoPlus1%ZE medio = MMiHz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,5); - endif - END DO - END DO - DO j = punto%YI, puntoPlus1%YE - DO k = punto%ZI, puntoPlus1%ZE + end if + end do + end do + do j = punto%YI, puntoPlus1%YE + do k = punto%ZI, puntoPlus1%ZE medio = MMiEx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) then + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,0); - endif - END DO - END DO - END DO + end if + end do + end do + end do CASE (iEy) - DO j = punto%YI, punto%YE - DO i = punto%XI, punto%XE - DO k = punto%ZI, puntoPlus1%ZE + do j = punto%YI, punto%YE + do i = punto%XI, punto%XE + do k = punto%ZI, puntoPlus1%ZE medio = MMiHz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,5); - endif - END DO - END DO - DO i = punto%XI, puntoPlus1%XE - DO k = punto%ZI, punto%ZE + end if + end do + end do + do i = punto%XI, puntoPlus1%XE + do k = punto%ZI, punto%ZE medio = MMiHx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,3); - END IF - END DO - END DO - DO i = punto%XI, puntoPlus1%XE - DO k = punto%ZI, puntoPlus1%ZE + end if + end do + end do + do i = punto%XI, puntoPlus1%XE + do k = punto%ZI, puntoPlus1%ZE medio = MMiEy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) then + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,1); - endif - END DO - END DO - END DO + end if + end do + end do + end do ! CASE (iEz) - DO k = punto%ZI, punto%ZE - DO i = punto%XI, puntoPlus1%XE - DO j = punto%YI, punto%YE + do k = punto%ZI, punto%ZE + do i = punto%XI, puntoPlus1%XE + do j = punto%YI, punto%YE medio = MMiHx (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHx (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%x(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,3); - END IF - END DO - END DO - DO i = punto%XI, punto%XE - DO j = punto%YI, puntoPlus1%YE + end if + end do + end do + do i = punto%XI, punto%XE + do j = punto%YI, puntoPlus1%YE medio = MMiHy (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) THEN + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiHy (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%face%y(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,4); - END IF - END DO - END DO - DO i = punto%XI, puntoPlus1%XE - DO j = punto%YI, puntoPlus1%YE + end if + end do + end do + do i = punto%XI, puntoPlus1%XE + do j = punto%YI, puntoPlus1%YE medio = MMiEz (i, j, k) - IF (med(indicemedio)%Priority > med(medio)%Priority) then + if (med(indicemedio)%Priority > med(medio)%Priority) then MMiEz (i, j, k) = indicemedio Mtag(i,j,k)=64*numertag tags%edge%z(i,j,k) = 64*numertag ! if (.true..or.(Mtag(i,j,k)==0).or.(int(Mtag(i,j,k)/64) == numertag)) Mtag(i,j,k) = IBSET(64*numertag,2); - endif - END DO - END DO - END DO + end if + end do + end do + end do - END SELECT + end select ! - RETURN - END SUBROUTINE + return + end subroutine !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -1509,42 +1509,42 @@ SUBROUTINE CreateMagneticSurface(layoutnumber, Mtag, tags, numertag, MMiEx, MMiE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz, SINPML_fullsize, fullsize, BBox, med, NumMedia, Border, MEDIOEXTRA) ! - TYPE (limit_t), DIMENSION (1:6) :: SINPML_fullsize, fullsize + type(limit_t), dimension(1:6) :: SINPML_fullsize, fullsize !Inputs and Outputs - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - integer (KIND=INTEGERSIZEOFMEDIAMATRICES) :: & + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + integer(kind=INTEGERSIZEOFMEDIAMATRICES) :: & sggMiEx(sgg%Alloc(iEx)%XI : sgg%Alloc(iEx)%XE,sgg%Alloc(iEx)%YI : sgg%Alloc(iEx)%YE,sgg%Alloc(iEx)%ZI : sgg%Alloc(iEx)%ZE), & sggMiEy(sgg%Alloc(iEy)%XI : sgg%Alloc(iEy)%XE,sgg%Alloc(iEy)%YI : sgg%Alloc(iEy)%YE,sgg%Alloc(iEy)%ZI : sgg%Alloc(iEy)%ZE), & sggMiEz(sgg%Alloc(iEz)%XI : sgg%Alloc(iEz)%XE,sgg%Alloc(iEz)%YI : sgg%Alloc(iEz)%YE,sgg%Alloc(iEz)%ZI : sgg%Alloc(iEz)%ZE), & sggMiHx(sgg%Alloc(iHx)%XI : sgg%Alloc(iHx)%XE,sgg%Alloc(iHx)%YI : sgg%Alloc(iHx)%YE,sgg%Alloc(iHx)%ZI : sgg%Alloc(iHx)%ZE), & sggMiHy(sgg%Alloc(iHy)%XI : sgg%Alloc(iHy)%XE,sgg%Alloc(iHy)%YI : sgg%Alloc(iHy)%YE,sgg%Alloc(iHy)%ZI : sgg%Alloc(iHy)%ZE), & sggMiHz(sgg%Alloc(iHz)%XI : sgg%Alloc(iHz)%XE,sgg%Alloc(iHz)%YI : sgg%Alloc(iHz)%YE,sgg%Alloc(iHz)%ZI : sgg%Alloc(iHz)%ZE) - TYPE (XYZlimit_t) :: BoundingBox, BBox - TYPE (MediaData_t), POINTER, DIMENSION (:) :: med - INTEGER (KIND=4), INTENT (INOUT) :: NumMedia - TYPE (Border_t), INTENT (IN) :: Border - TYPE (MedioExtra_t), INTENT (IN) :: MEDIOEXTRA + type(XYZlimit_t) :: BoundingBox, BBox + type(MediaData_t), pointer, dimension(:) :: med + integer(kind=4), intent(inout) :: NumMedia + type(Border_t), intent(in) :: Border + type(MedioExtra_t), intent(in) :: MEDIOEXTRA ! Local stuff - INTEGER (KIND=4), POINTER, DIMENSION (:) :: tempo - TYPE (MediaData_t), POINTER, DIMENSION (:) :: NewMed + integer(kind=4), pointer, dimension(:) :: tempo + type(MediaData_t), pointer, dimension(:) :: NewMed INTEGER (KIND=4) :: layoutnumber, SIZE, field, medium, i, j, k, NuevoNumeroMediosConPML - INTEGER (KIND=4) :: oldNumMedia,oldmed - INTEGER (KIND=4), DIMENSION (1:6) :: XIPML, XEPML, YIPML, YEPML, ZIPML, ZEPML - REAL (KIND=RKIND) :: oldepr,oldmur,oldsigma,oldsigmam,newepr,newmur,newsigma,newsigmam + integer(kind=4) :: oldNumMedia,oldmed + integer(kind=4), dimension(1:6) :: XIPML, XEPML, YIPML, YEPML, ZIPML, ZEPML + real(kind=RKIND) :: oldepr,oldmur,oldsigma,oldsigmam,newepr,newmur,newsigma,newsigmam LOGICAL :: yapuesto !Increase mediamatrix with PML regions, and remove the minus sign from the mm matrix (this info is no longer needed) !FIRST CLIP THE MATRIX !readjust boundingbox for PML correct calculation ! - DO field = iEx, iHz + do field = iEx, iHz XIPML (field) = Max (BBox%XI, fullsize(iHx)%XI) XEPML (field) = Min (BBox%XE+on(field, icoord, fine), fullsize(iHx)%XE) YIPML (field) = Max (BBox%YI, fullsize(iHy)%YI) YEPML (field) = Min (BBox%YE+on(field, jcoord, fine), fullsize(iHy)%YE) ZIPML (field) = Max (BBox%ZI, fullsize(iHz)%ZI) ZEPML (field) = Min (BBox%ZE+on(field, kcoord, fine), fullsize(iHz)%ZE) - END DO + end do ! BoundingBox%XI = Max (BBox%XI, SINPML_fullsize(iHx)%XI) BoundingBox%XE = Min (BBox%XE, SINPML_fullsize(iHx)%XE) @@ -1556,621 +1556,621 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM ! temporarily assing minus sign to PML media ! corners are swept twice to assing the correct media (do not remove AbS!!) field = iEx - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) !!!!!!**Back - DO i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) + do i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) sggmiEx (i, j, k) = - Abs (sggmiEx(BoundingBox%XI+in(field, icoord, fine)+1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Front - DO i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) + do i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) sggmiEx (i, j, k) = - Abs (sggmiEx(BoundingBox%XE+in(field, icoord, comi)-1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do k = ZIPML (field), ZEPML (field) !!!!!!**Left - DO j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) + do j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) sggmiEx (i, j, k) = - Abs (sggmiEx(i, BoundingBox%YI+in(field, jcoord, fine)+1, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Right - DO j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) + do j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) sggmiEx (i, j, k) = - Abs (sggmiEx(i, BoundingBox%YE+in(field, jcoord, comi)-1, k)) - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners !!!!!!**Down - DO k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) + do k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) sggmiEx (i, j, k) = - Abs (sggmiEx(i, j, BoundingBox%ZI+in(field, kcoord, fine)+1)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Up - DO k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) + do k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) sggmiEx (i, j, k) = - Abs (sggmiEx(i, j, BoundingBox%ZE+in(field, kcoord, comi)-1)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! field = iEy - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) !!!!!!**Back - DO i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) + do i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) sggmiEy (i, j, k) = - Abs (sggmiEy(BoundingBox%XI+in(field, icoord, fine)+1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Front - DO i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) + do i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) sggmiEy (i, j, k) = - Abs (sggmiEy(BoundingBox%XE+in(field, icoord, comi)-1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do k = ZIPML (field), ZEPML (field) !!!!!!**Left - DO j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) + do j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) sggmiEy (i, j, k) = - Abs (sggmiEy(i, BoundingBox%YI+in(field, jcoord, fine)+1, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Right - DO j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) + do j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) sggmiEy (i, j, k) = - Abs (sggmiEy(i, BoundingBox%YE+in(field, jcoord, comi)-1, k)) - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners !!!!!!**Down - DO k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) + do k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) sggmiEy (i, j, k) = - Abs (sggmiEy(i, j, BoundingBox%ZI+in(field, kcoord, fine)+1)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Up - DO k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) + do k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) sggmiEy (i, j, k) = - Abs (sggmiEy(i, j, BoundingBox%ZE+in(field, kcoord, comi)-1)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! field = iEz - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) !!!!!!**Back - DO i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) + do i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) sggmiEz (i, j, k) = - Abs (sggmiEz(BoundingBox%XI+in(field, icoord, fine)+1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Front - DO i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) + do i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) sggmiEz (i, j, k) = - Abs (sggmiEz(BoundingBox%XE+in(field, icoord, comi)-1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do k = ZIPML (field), ZEPML (field) !!!!!!**Left - DO j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) + do j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) sggmiEz (i, j, k) = - Abs (sggmiEz(i, BoundingBox%YI+in(field, jcoord, fine)+1, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Right - DO j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) + do j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) sggmiEz (i, j, k) = - Abs (sggmiEz(i, BoundingBox%YE+in(field, jcoord, comi)-1, k)) - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners !!!!!!**Down - DO k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) + do k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) sggmiEz (i, j, k) = - Abs (sggmiEz(i, j, BoundingBox%ZI+in(field, kcoord, fine)+1)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Up - DO k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) + do k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) sggmiEz (i, j, k) = - Abs (sggmiEz(i, j, BoundingBox%ZE+in(field, kcoord, comi)-1)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! field = iHx - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) !!!!!!**Back - DO i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) + do i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) sggmiHx (i, j, k) = - Abs (sggmiHx(BoundingBox%XI+in(field, icoord, fine)+1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Front - DO i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) + do i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) sggmiHx (i, j, k) = - Abs (sggmiHx(BoundingBox%XE+in(field, icoord, comi)-1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do k = ZIPML (field), ZEPML (field) !!!!!!**Left - DO j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) + do j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) sggmiHx (i, j, k) = - Abs (sggmiHx(i, BoundingBox%YI+in(field, jcoord, fine)+1, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Right - DO j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) + do j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) sggmiHx (i, j, k) = - Abs (sggmiHx(i, BoundingBox%YE+in(field, jcoord, comi)-1, k)) - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners !!!!!!**Down - DO k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) + do k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) sggmiHx (i, j, k) = - Abs (sggmiHx(i, j, BoundingBox%ZI+in(field, kcoord, fine)+1)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Up - DO k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) + do k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) sggmiHx (i, j, k) = - Abs (sggmiHx(i, j, BoundingBox%ZE+in(field, kcoord, comi)-1)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! field = iHy - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) !!!!!!**Back - DO i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) + do i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) sggmiHy (i, j, k) = - Abs (sggmiHy(BoundingBox%XI+in(field, icoord, fine)+1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Front - DO i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) + do i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) sggmiHy (i, j, k) = - Abs (sggmiHy(BoundingBox%XE+in(field, icoord, comi)-1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do k = ZIPML (field), ZEPML (field) !!!!!!**Left - DO j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) + do j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) sggmiHy (i, j, k) = - Abs (sggmiHy(i, BoundingBox%YI+in(field, jcoord, fine)+1, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Right - DO j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) + do j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) sggmiHy (i, j, k) = - Abs (sggmiHy(i, BoundingBox%YE+in(field, jcoord, comi)-1, k)) - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners !!!!!!**Down - DO k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) + do k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) sggmiHy (i, j, k) = - Abs (sggmiHy(i, j, BoundingBox%ZI+in(field, kcoord, fine)+1)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Up - DO k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) + do k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) sggmiHy (i, j, k) = - Abs (sggmiHy(i, j, BoundingBox%ZE+in(field, kcoord, comi)-1)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! field = iHz - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) !!!!!!**Back - DO i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) + do i = XIPML (field), BoundingBox%XI + in (field, icoord, fine) sggmiHz (i, j, k) = - Abs (sggmiHz(BoundingBox%XI+in(field, icoord, fine)+1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Front - DO i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) + do i = BoundingBox%XE + in (field, icoord, comi), XEPML (field) sggmiHz (i, j, k) = - Abs (sggmiHz(BoundingBox%XE+in(field, icoord, comi)-1, j, k)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do k = ZIPML (field), ZEPML (field) !!!!!!**Left - DO j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) + do j = YIPML (field), BoundingBox%YI + in (field, jcoord, fine) sggmiHz (i, j, k) = - Abs (sggmiHz(i, BoundingBox%YI+in(field, jcoord, fine)+1, k)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Right - DO j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) + do j = BoundingBox%YE + in (field, jcoord, comi), YEPML (field) sggmiHz (i, j, k) = - Abs (sggmiHz(i, BoundingBox%YE+in(field, jcoord, comi)-1, k)) - END DO - END DO - END DO + end do + end do + end do ! - DO i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners - DO j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners + do i = XIPML (field), XEPML (field)!barre ahora el total, para incluir aristas y corners + do j = YIPML (field), YEPML (field)!barre ahora el total, para incluir aristas y corners !!!!!!**Down - DO k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) + do k = ZIPML (field), BoundingBox%ZI + in (field, kcoord, fine) sggmiHz (i, j, k) = - Abs (sggmiHz(i, j, BoundingBox%ZI+in(field, kcoord, fine)+1)) !para notar medio PML se le cambia el signo al medio - END DO + end do !!!!!!**Up - DO k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) + do k = BoundingBox%ZE + in (field, kcoord, comi), ZEPML (field) sggmiHz (i, j, k) = - Abs (sggmiHz(i, j, BoundingBox%ZE+in(field, kcoord, comi)-1)) !para notar medio PML se le cambia el signo al medio - END DO - END DO - END DO + end do + end do + end do !compact the info of PML media NuevoNumeroMediosConPML = NumMedia - ALLOCATE (tempo(0:NumMedia)) + allocate(tempo(0:NumMedia)) tempo = 0 !temporarily stores the index of the PML medium matching each original media field = iEx - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiEx (i, j, k) - IF (medium < 0) THEN - IF (tempo(Abs(medium)) == 0) THEN + if (medium < 0) then + if (tempo(Abs(medium)) == 0) then NuevoNumeroMediosConPML = NuevoNumeroMediosConPML + 1 tempo (Abs(medium)) = NuevoNumeroMediosConPML - END IF - END IF - END DO - END DO - END DO + end if + end if + end do + end do + end do field = iEy - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiEy (i, j, k) - IF (medium < 0) THEN - IF (tempo(Abs(medium)) == 0) THEN + if (medium < 0) then + if (tempo(Abs(medium)) == 0) then NuevoNumeroMediosConPML = NuevoNumeroMediosConPML + 1 tempo (Abs(medium)) = NuevoNumeroMediosConPML - END IF - END IF - END DO - END DO - END DO + end if + end if + end do + end do + end do field = iEz - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiEz (i, j, k) - IF (medium < 0) THEN - IF (tempo(Abs(medium)) == 0) THEN + if (medium < 0) then + if (tempo(Abs(medium)) == 0) then NuevoNumeroMediosConPML = NuevoNumeroMediosConPML + 1 tempo (Abs(medium)) = NuevoNumeroMediosConPML - END IF - END IF - END DO - END DO - END DO + end if + end if + end do + end do + end do field = iHx - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiHx (i, j, k) - IF (medium < 0) THEN - IF (tempo(Abs(medium)) == 0) THEN + if (medium < 0) then + if (tempo(Abs(medium)) == 0) then NuevoNumeroMediosConPML = NuevoNumeroMediosConPML + 1 tempo (Abs(medium)) = NuevoNumeroMediosConPML - END IF - END IF - END DO - END DO - END DO + end if + end if + end do + end do + end do field = iHy - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiHy (i, j, k) - IF (medium < 0) THEN - IF (tempo(Abs(medium)) == 0) THEN + if (medium < 0) then + if (tempo(Abs(medium)) == 0) then NuevoNumeroMediosConPML = NuevoNumeroMediosConPML + 1 tempo (Abs(medium)) = NuevoNumeroMediosConPML - END IF - END IF - END DO - END DO - END DO + end if + end if + end do + end do + end do field = iHz - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiHz (i, j, k) - IF (medium < 0) THEN - IF (tempo(Abs(medium)) == 0) THEN + if (medium < 0) then + if (tempo(Abs(medium)) == 0) then NuevoNumeroMediosConPML = NuevoNumeroMediosConPML + 1 tempo (Abs(medium)) = NuevoNumeroMediosConPML - END IF - END IF - END DO - END DO - END DO + end if + end if + end do + end do + end do ! - ALLOCATE (NewMed(NumMedia+1:NuevoNumeroMediosConPML)) + allocate(NewMed(NumMedia+1:NuevoNumeroMediosConPML)) !Reassing the PML media info with the compact indexes field = iEx - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiEx (i, j, k) - IF (medium < 0) THEN + if (medium < 0) then sggmiEx (i, j, k) = tempo (Abs(medium)) NewMed (tempo(Abs(medium))) = med (Abs(medium)) - END IF - END DO - END DO - END DO + end if + end do + end do + end do field = iEy - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiEy (i, j, k) - IF (medium < 0) THEN + if (medium < 0) then sggmiEy (i, j, k) = tempo (Abs(medium)) NewMed (tempo(Abs(medium))) = med (Abs(medium)) - END IF - END DO - END DO - END DO + end if + end do + end do + end do field = iEz - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiEz (i, j, k) - IF (medium < 0) THEN + if (medium < 0) then sggmiEz (i, j, k) = tempo (Abs(medium)) NewMed (tempo(Abs(medium))) = med (Abs(medium)) - END IF - END DO - END DO - END DO + end if + end do + end do + end do field = iHx - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiHx (i, j, k) - IF (medium < 0) THEN + if (medium < 0) then sggmiHx (i, j, k) = tempo (Abs(medium)) NewMed (tempo(Abs(medium))) = med (Abs(medium)) - END IF - END DO - END DO - END DO + end if + end do + end do + end do field = iHy - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiHy (i, j, k) - IF (medium < 0) THEN + if (medium < 0) then sggmiHy (i, j, k) = tempo (Abs(medium)) NewMed (tempo(Abs(medium))) = med (Abs(medium)) - END IF - END DO - END DO - END DO + end if + end do + end do + end do field = iHz - DO k = ZIPML (field), ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) medium = sggmiHz (i, j, k) - IF (medium < 0) THEN + if (medium < 0) then sggmiHz (i, j, k) = tempo (Abs(medium)) NewMed (tempo(Abs(medium))) = med (Abs(medium)) - END IF - END DO - END DO - END DO + end if + end do + end do + end do !Put PEC and the end if there exists PEC borders in the original problem !(PMC are handled with the image technique in the algorithm, no special index is used for PMC) !DETRAS Y DELANTE field = iEx !!!!!PEC solo en fields donde acabe la red !izda y dcha - IF ((Border%IsLeftPEC)) THEN + if ((Border%IsLeftPEC)) then j = YIPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEx (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsRightPEC)) THEN + if ((Border%IsRightPEC)) then j = YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEx (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! !Up y Down - IF ((Border%IsDownPEC)) THEN + if ((Border%IsDownPEC)) then k = ZIPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) sggmiEx (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsUpPEC)) THEN + if ((Border%IsUpPEC)) then k = ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) sggmiEx (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! field = iEy !!!!!PEC solo en fields donde acabe la red !front y back - IF ((Border%IsBackPEC)) THEN + if ((Border%IsBackPEC)) then i = XIPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEy (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsFrontPEC)) THEN + if ((Border%IsFrontPEC)) then i = XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEy (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! !Up y Down - IF ((Border%IsDownPEC)) THEN + if ((Border%IsDownPEC)) then k = ZIPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) sggmiEy (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsUpPEC)) THEN + if ((Border%IsUpPEC)) then k = ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) sggmiEy (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! field = iEz !!!!!PEC solo en fields donde acabe la red !front y back - IF ((Border%IsBackPEC)) THEN + if ((Border%IsBackPEC)) then i = XIPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEz (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsFrontPEC)) THEN + if ((Border%IsFrontPEC)) then i = XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEz (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if !izda y dcha - IF ((Border%IsLeftPEC)) THEN + if ((Border%IsLeftPEC)) then j = YIPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEz (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsRightPEC)) THEN + if ((Border%IsRightPEC)) then j = YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiEz (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! field = iHx !!!!!PEC solo en fields donde acabe la red !front y back - IF ((Border%IsBackPEC)) THEN + if ((Border%IsBackPEC)) then i = XIPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiHx (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsFrontPEC)) THEN + if ((Border%IsFrontPEC)) then i = XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiHx (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! field = iHy !!!!!PEC solo en fields donde acabe la red !izda y dcha - IF ((Border%IsLeftPEC)) THEN + if ((Border%IsLeftPEC)) then j = YIPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiHy (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsRightPEC)) THEN + if ((Border%IsRightPEC)) then j = YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) sggmiHy (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! field = iHz !!!!!PEC solo en fields donde acabe la red ! !Up y Down - IF ((Border%IsDownPEC)) THEN + if ((Border%IsDownPEC)) then k = ZIPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) sggmiHz (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if ! - IF ((Border%IsUpPEC)) THEN + if ((Border%IsUpPEC)) then k = ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) sggmiHz (i, j, k) = 0 - END DO - END DO - END IF + end do + end do + end if !!?!?!?MEDIOEXTRA ! !adjust constitutive parameters, matrices oldNumMedia = NumMedia !save it since the next subroutine overwrites it - CALL Readjust (NumMedia, med, NuevoNumeroMediosConPML) + call Readjust (NumMedia, med, NuevoNumeroMediosConPML) sgg%AllocMed=NumMedia !copy the new media med (1+oldNumMedia:NuevoNumeroMediosConPML) = NewMed (1+oldNumMedia:NuevoNumeroMediosConPML) @@ -2179,7 +2179,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM med(1+oldNumMedia:NuevoNumeroMediosConPML)%Is%SlantedWire = .FALSE. !put any wire touching the PML to non-wire though treat it with mur med(1+oldNumMedia:NuevoNumeroMediosConPML)%Is%Needed=.true. !sgg 220817 por defecto lo he puesto en readjust a false ! - DEALLOCATE (NewMed, tempo) + deallocate(NewMed, tempo) !solo lo creo para las tangenciales electricas if (MEDIOEXTRA%exists) then @@ -2188,10 +2188,10 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM ! field = iEx !izda y dcha - IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsLeftPML)) then + do j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEx (i, j, k) if (oldmed /= 0) then @@ -2208,26 +2208,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsRightPML)) then + do j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEx (i, j, k) if (oldmed /= 0) then @@ -2244,26 +2244,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! !Up y Down - IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsDownPML)) then + do k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiEx (i, j, k) if (oldmed /= 0) then @@ -2280,26 +2280,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsUpPML)) then + do k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiEx (i, j, k) if (oldmed /= 0) then @@ -2316,28 +2316,28 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! field = iEy !front y back - IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsBackPML)) then + do i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEy (i, j, k) if (oldmed /= 0) then @@ -2354,26 +2354,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsFrontPML)) then + do i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEy (i, j, k) if (oldmed /= 0) then @@ -2390,26 +2390,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! !Up y Down - IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsDownPML)) then + do k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiEy (i, j, k) if (oldmed /= 0) then @@ -2426,26 +2426,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsUpPML)) then + do k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiEy (i, j, k) if (oldmed /= 0) then @@ -2462,28 +2462,28 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! field = iEz !front y back - IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsBackPML)) then + do i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEz (i, j, k) if (oldmed /= 0) then @@ -2500,26 +2500,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsFrontPML)) then + do i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEz (i, j, k) if (oldmed /= 0) then @@ -2536,26 +2536,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if !izda y dcha - IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsLeftPML)) then + do j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEz (i, j, k) if (oldmed /= 0) then @@ -2572,26 +2572,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsRightPML)) then + do j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiEz (i, j, k) if (oldmed /= 0) then @@ -2608,21 +2608,21 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiEz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! !magneticos @@ -2630,10 +2630,10 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM ! field = iHx !izda y dcha - IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsLeftPML)) then + do j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHx (i, j, k) if (oldmed /= 0) then @@ -2650,26 +2650,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsRightPML)) then + do j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHx (i, j, k) if (oldmed /= 0) then @@ -2686,26 +2686,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! !Up y Down - IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsDownPML)) then + do k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiHx (i, j, k) if (oldmed /= 0) then @@ -2722,26 +2722,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsUpPML)) then + do k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiHx (i, j, k) if (oldmed /= 0) then @@ -2758,28 +2758,28 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHx (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! field = iHy !front y back - IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsBackPML)) then + do i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHy (i, j, k) if (oldmed /= 0) then @@ -2796,26 +2796,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsFrontPML)) then + do i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHy (i, j, k) if (oldmed /= 0) then @@ -2832,26 +2832,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! !Up y Down - IF ((Border%IsDownPML)) THEN - DO k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsDownPML)) then + do k = ZIPML (field),ZIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiHy (i, j, k) if (oldmed /= 0) then @@ -2868,26 +2868,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsUpPML)) THEN - DO k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) - DO j = YIPML (field), YEPML (field) - DO i = XIPML (field), XEPML (field) + if ((Border%IsUpPML)) then + do k = ZEPML (field)- MEDIOEXTRA%pml_size,ZEPML (field) + do j = YIPML (field), YEPML (field) + do i = XIPML (field), XEPML (field) ! oldmed =sggmiHy (i, j, k) if (oldmed /= 0) then @@ -2904,28 +2904,28 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHy (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! field = iHz !front y back - IF ((Border%IsBackPML)) THEN - DO i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsBackPML)) then + do i = XIPML (field),XIPML (field)+ MEDIOEXTRA%pml_size + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHz (i, j, k) if (oldmed /= 0) then @@ -2942,26 +2942,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsFrontPML)) THEN - DO i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) - DO j = YIPML (field), YEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsFrontPML)) then + do i = XEPML (field)- MEDIOEXTRA%pml_size,XEPML (field) + do j = YIPML (field), YEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHz (i, j, k) if (oldmed /= 0) then @@ -2978,26 +2978,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if !izda y dcha - IF ((Border%IsLeftPML)) THEN - DO j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsLeftPML)) then + do j = YIPML (field),YIPML (field)+ MEDIOEXTRA%pml_size + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHz (i, j, k) if (oldmed /= 0) then @@ -3014,26 +3014,26 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - IF ((Border%IsRightPML)) THEN - DO j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) - DO i = XIPML (field), XEPML (field) - DO k = ZIPML (field), ZEPML (field) + if ((Border%IsRightPML)) then + do j = YEPML (field)- MEDIOEXTRA%pml_size,YEPML (field) + do i = XIPML (field), XEPML (field) + do k = ZIPML (field), ZEPML (field) ! oldmed =sggmiHz (i, j, k) if (oldmed /= 0) then @@ -3050,25 +3050,25 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') - endif + end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr sgg%Med(MEDIOEXTRA%index)%mur = oldmur sgg%Med(MEDIOEXTRA%index)%sigma = oldsigma + MEDIOEXTRA%sigma sgg%Med(MEDIOEXTRA%index)%sigmam = oldsigmam + MEDIOEXTRA%sigmam - endif + end if ! sggmiHz (i, j, k) = MEDIOEXTRA%index yapuesto=.true. - endif - END DO - END DO - END DO - END IF + end if + end do + end do + end do + end if ! - endif !del medioextra%exists - RETURN - END SUBROUTINE + end if !del medioextra%exists + return + end subroutine !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Routine : Readjust : ............ ! Inputs : NumMedia = Previous number of media @@ -3079,27 +3079,27 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM ! Med%Epr,Med%Mur,Med%Sigma,Med%SigmaM = New Matrices with average and PML constitutive parameters of new media ! Med%Wire,Med%multiport = Same as input but resized accordingly to take into account the increment in NumMedia !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE Readjust (NumMedia, med, NewNumMedia) + subroutine Readjust (NumMedia, med, NewNumMedia) !Inputs and Outputs - TYPE (MediaData_t), POINTER, DIMENSION (:) :: med - TYPE (MediaData_t), POINTER, DIMENSION (:) :: dummyMed - INTEGER (KIND=4), INTENT (INOUT) :: NumMedia - INTEGER (KIND=4), INTENT (IN) :: NewNumMedia - INTEGER (KIND=4) :: i - ! - ALLOCATE (dummyMed(0:NewNumMedia)) - DO i = 0, Min (NumMedia, NewNumMedia) + type(MediaData_t), pointer, dimension(:) :: med + type(MediaData_t), pointer, dimension(:) :: dummyMed + integer(kind=4), intent(inout) :: NumMedia + integer(kind=4), intent(in) :: NewNumMedia + integer(kind=4) :: i + ! + allocate(dummyMed(0:NewNumMedia)) + do i = 0, Min (NumMedia, NewNumMedia) dummyMed (i) = med (i) - END DO + end do ! - DEALLOCATE (med) - ALLOCATE (med(0:NewNumMedia)) - DO i = 0, NewNumMedia + deallocate(med) + allocate(med(0:NewNumMedia)) + do i = 0, NewNumMedia med (i) = dummyMed (i) - END DO + end do ! - DEALLOCATE (dummyMed) - DO i = 1 + NumMedia, NewNumMedia + deallocate(dummyMed) + do i = 1 + NumMedia, NewNumMedia med(i)%Priority = prior_BV !background med(i)%epr=-1.0_RKIND med(i)%MUr=-1.0_RKIND @@ -3133,25 +3133,25 @@ SUBROUTINE Readjust (NumMedia, med, NewNumMedia) med(i)%Is%Interfase = .FALSE. Med(i)%Is%already_YEEadvanced_byconformal = .FALSE. Med(i)%Is%split_and_useless = .FALSE. - END DO + end do !Update the final number of media NumMedia = NewNumMedia ! - END SUBROUTINE + end subroutine - SUBROUTINE AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) - TYPE (SharedElement_t), POINTER, DIMENSION (:) :: temp - TYPE (Shared_t), INTENT (INOUT) :: Shared - INTEGER (KIND=4), INTENT (IN) :: campo, i1, j1, k1, Sharedmed, ProPmed - INTEGER (KIND=4) :: conta, n + subroutine AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) + type(SharedElement_t), pointer, dimension(:) :: temp + type(Shared_t), intent(inout) :: Shared + integer(kind=4), intent(in) :: campo, i1, j1, k1, Sharedmed, ProPmed + integer(kind=4) :: conta, n ! Shared%conta = Shared%conta + 1 conta = Shared%conta ! - IF (conta > Shared%MaxConta) THEN + if (conta > Shared%MaxConta) then !create space on the fly - ALLOCATE (temp(1:conta-1)) - DO n = 1, conta - 1 + allocate(temp(1:conta-1)) + do n = 1, conta - 1 temp(n)%Sharedmed = Shared%elem(n)%Sharedmed temp(n)%ProPmed = Shared%elem(n)%ProPmed temp(n)%field = Shared%elem(n)%field @@ -3159,11 +3159,11 @@ SUBROUTINE AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) temp(n)%j = Shared%elem(n)%j temp(n)%k = Shared%elem(n)%k temp(n)%times = Shared%elem(n)%times - END DO - DEALLOCATE (Shared%elem) + end do + deallocate(Shared%elem) Shared%MaxConta = 2*Shared%MaxConta !!! 040717se atrancaba aqui. Ahora allocateo al doble. Antes era + 10000 - ALLOCATE (Shared%elem(1:Shared%MaxConta)) - DO n = 1, conta - 1 + allocate(Shared%elem(1:Shared%MaxConta)) + do n = 1, conta - 1 Shared%elem(n)%Sharedmed = temp(n)%Sharedmed Shared%elem(n)%ProPmed = temp(n)%ProPmed Shared%elem(n)%field = temp(n)%field @@ -3171,11 +3171,11 @@ SUBROUTINE AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) Shared%elem(n)%j = temp(n)%j Shared%elem(n)%k = temp(n)%k Shared%elem(n)%times = temp(n)%times - END DO - DEALLOCATE (temp) - END IF + end do + deallocate(temp) + end if ! - IF (conta == 1) allocate (Shared%elem(1:Shared%MaxConta)) + if (conta == 1) allocate (Shared%elem(1:Shared%MaxConta)) Shared%elem(conta)%Sharedmed = Sharedmed Shared%elem(conta)%ProPmed = ProPmed Shared%elem(conta)%field = campo @@ -3183,8 +3183,8 @@ SUBROUTINE AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) Shared%elem(conta)%j = j1 Shared%elem(conta)%k = k1 Shared%elem(conta)%times = 2 !it appears two times at least !later updated in preporcess - RETURN + return ! - END SUBROUTINE + end subroutine ! END MODULE CreateMatrices_m diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index 35be186a6..a0fe8aa14 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -1,69 +1,69 @@ -MODULE NFDETypes_m +module NFDETypes_m ! - USE FDETYPES_m + use FDETYPES_m #ifdef CompileWithMTLN USE mtln_types_m, ONLY: mtln_t #endif - USE conformal_types_m + use conformal_types_m ! - IMPLICIT NONE - INTEGER (KIND=4), PARAMETER :: RK = RKIND + implicit none + integer(kind=4), parameter :: RK = RKIND !------------------------------------------------------------------------------ ! CONSTANTS FOR THE PARSER !------------------------------------------------------------------------------ ! global variable stochastic ! MATERIALS - REAL (KIND=RK), PARAMETER :: SIGMA_PEC = 1e19_RK - REAL (KIND=RK), PARAMETER :: SIGMA_PMC = 1e19_RK + real(kind=RK), parameter :: SIGMA_PEC = 1e19_RK + real(kind=RK), parameter :: SIGMA_PMC = 1e19_RK ! PROBES !!!! - INTEGER (KIND=4), PARAMETER :: NP_T1_PLAIN = 0 - INTEGER (KIND=4), PARAMETER :: NP_T1_AMBOS = 2 - INTEGER (KIND=4), PARAMETER :: NP_T2_TIME = 0 - INTEGER (KIND=4), PARAMETER :: NP_T2_FREQ = 1 - INTEGER (KIND=4), PARAMETER :: NP_T2_TRANSFER = 2 - INTEGER (KIND=4), PARAMETER :: NP_T2_TIMEFREQ = 3 - INTEGER (KIND=4), PARAMETER :: NP_T2_TIMETRANSF = 4 - INTEGER (KIND=4), PARAMETER :: NP_T2_FREQTRANSF = 5 - INTEGER (KIND=4), PARAMETER :: NP_T2_TIMEFRECTRANSF = 6 - INTEGER (KIND=4), PARAMETER :: NP_COR_EX = 0 - INTEGER (KIND=4), PARAMETER :: NP_COR_EY = 1 - INTEGER (KIND=4), PARAMETER :: NP_COR_EZ = 2 - INTEGER (KIND=4), PARAMETER :: NP_COR_HX = 3 - INTEGER (KIND=4), PARAMETER :: NP_COR_HY = 4 - INTEGER (KIND=4), PARAMETER :: NP_COR_HZ = 5 - INTEGER (KIND=4), PARAMETER :: NP_COR_WIRECURRENT = 6 - INTEGER (KIND=4), PARAMETER :: NP_COR_DDP = 7 - INTEGER (KIND=4), PARAMETER :: NP_COR_LINE = 8 - INTEGER (KIND=4), PARAMETER :: NP_COR_CHARGE = 9 - LOGICAL, PARAMETER :: BcELECT = .TRUE. - LOGICAL, PARAMETER :: BcMAGNE = .FALSE. + integer(kind=4), parameter :: NP_T1_PLAIN = 0 + integer(kind=4), parameter :: NP_T1_AMBOS = 2 + integer(kind=4), parameter :: NP_T2_TIME = 0 + integer(kind=4), parameter :: NP_T2_FREQ = 1 + integer(kind=4), parameter :: NP_T2_TRANSFER = 2 + integer(kind=4), parameter :: NP_T2_TIMEFREQ = 3 + integer(kind=4), parameter :: NP_T2_TIMETRANSF = 4 + integer(kind=4), parameter :: NP_T2_FREQTRANSF = 5 + integer(kind=4), parameter :: NP_T2_TIMEFRECTRANSF = 6 + integer(kind=4), parameter :: NP_COR_EX = 0 + integer(kind=4), parameter :: NP_COR_EY = 1 + integer(kind=4), parameter :: NP_COR_EZ = 2 + integer(kind=4), parameter :: NP_COR_HX = 3 + integer(kind=4), parameter :: NP_COR_HY = 4 + integer(kind=4), parameter :: NP_COR_HZ = 5 + integer(kind=4), parameter :: NP_COR_WIRECURRENT = 6 + integer(kind=4), parameter :: NP_COR_DDP = 7 + integer(kind=4), parameter :: NP_COR_LINE = 8 + integer(kind=4), parameter :: NP_COR_CHARGE = 9 + LOGICAL, parameter :: BcELECT = .TRUE. + LOGICAL, parameter :: BcMAGNE = .FALSE. ! THIN WIRES - INTEGER (KIND=4), PARAMETER :: MATERIAL_CONS = 0 - INTEGER (KIND=4), PARAMETER :: MATERIAL_absorbing = 100 - INTEGER (KIND=4), PARAMETER :: Parallel_CONS = 1 - INTEGER (KIND=4), PARAMETER :: SERIES_CONS = 2 - INTEGER (KIND=4), PARAMETER :: DISPERSIVE_CONS = 3 + integer(kind=4), parameter :: MATERIAL_CONS = 0 + integer(kind=4), parameter :: MATERIAL_absorbing = 100 + integer(kind=4), parameter :: Parallel_CONS = 1 + integer(kind=4), parameter :: SERIES_CONS = 2 + integer(kind=4), parameter :: DISPERSIVE_CONS = 3 ! BORDERS - INTEGER (KIND=4), PARAMETER :: F_PEC = 1 - INTEGER (KIND=4), PARAMETER :: F_PMC = 2 - INTEGER (KIND=4), PARAMETER :: F_PER = 4 - INTEGER (KIND=4), PARAMETER :: F_MUR = 7 - INTEGER (KIND=4), PARAMETER :: F_PML = 9 - INTEGER (KIND=4), PARAMETER :: F_XL = 1 - INTEGER (KIND=4), PARAMETER :: F_XU = 2 - INTEGER (KIND=4), PARAMETER :: F_YL = 3 - INTEGER (KIND=4), PARAMETER :: F_YU = 4 - INTEGER (KIND=4), PARAMETER :: F_ZL = 5 - INTEGER (KIND=4), PARAMETER :: F_ZU = 6 - INTEGER (KIND=4), PARAMETER :: F_TIMEFRECTRANSF = 0 + integer(kind=4), parameter :: F_PEC = 1 + integer(kind=4), parameter :: F_PMC = 2 + integer(kind=4), parameter :: F_PER = 4 + integer(kind=4), parameter :: F_MUR = 7 + integer(kind=4), parameter :: F_PML = 9 + integer(kind=4), parameter :: F_XL = 1 + integer(kind=4), parameter :: F_XU = 2 + integer(kind=4), parameter :: F_YL = 3 + integer(kind=4), parameter :: F_YU = 4 + integer(kind=4), parameter :: F_ZL = 5 + integer(kind=4), parameter :: F_ZU = 6 + integer(kind=4), parameter :: F_TIMEFRECTRANSF = 0 ! rlc y diodos - INTEGER (KIND=4), PARAMETER :: inductor = 20 - INTEGER (KIND=4), PARAMETER :: capacitor = 21 - INTEGER (KIND=4), PARAMETER :: resistor = 22 - INTEGER (KIND=4), PARAMETER :: diodo = 23 - INTEGER (KIND=4), PARAMETER :: Dielectric = 24 - INTEGER (KIND=4), PARAMETER :: PMLbody = 25 + integer(kind=4), parameter :: inductor = 20 + integer(kind=4), parameter :: capacitor = 21 + integer(kind=4), parameter :: resistor = 22 + integer(kind=4), parameter :: diodo = 23 + integer(kind=4), parameter :: Dielectric = 24 + integer(kind=4), parameter :: PMLbody = 25 ! conformal INTEGER (KIND=4), PARAMETER :: isVolume = 1 INTEGER (KIND=4), PARAMETER :: isSurface = 2 @@ -74,51 +74,51 @@ MODULE NFDETypes_m !------------------------------------------------------------------------------ ! Basic cordinate type for two points and orientation !------------------------------------------------------------------------------ - TYPE, PUBLIC :: coords_t - INTEGER (KIND=4) :: Xi = - 1 - INTEGER (KIND=4) :: Xe = - 1 - INTEGER (KIND=4) :: Yi = - 1 - INTEGER (KIND=4) :: Ye = - 1 - INTEGER (KIND=4) :: Zi = - 1 - INTEGER (KIND=4) :: Ze = - 1 - INTEGER (KIND=4) :: Xtrancos = 1 - INTEGER (KIND=4) :: Ytrancos = 1 - INTEGER (KIND=4) :: Ztrancos = 1 - INTEGER (KIND=4) :: Or = 0 !f1eld orientation - CHARACTER (LEN=BUFSIZE) :: tag - END TYPE coords_t - TYPE, PUBLIC :: coords_scaled_t - INTEGER (KIND=4) :: Xi = - 1 - INTEGER (KIND=4) :: Xe = - 1 - INTEGER (KIND=4) :: Yi = - 1 - INTEGER (KIND=4) :: Ye = - 1 - INTEGER (KIND=4) :: Zi = - 1 - INTEGER (KIND=4) :: Ze = - 1 - REAL (KIND=RK) :: xc = 0.0_RKIND - REAL (KIND=RK) :: yc = 0.0_RKIND - REAL (KIND=RK) :: zc = 0.0_RKIND - INTEGER (KIND=4) :: Or = 0 !field orientation nuevo 2015 - CHARACTER (LEN=BUFSIZE) :: tag - END TYPE coords_scaled_t + type, public :: coords_t + integer(kind=4) :: Xi = - 1 + integer(kind=4) :: Xe = - 1 + integer(kind=4) :: Yi = - 1 + integer(kind=4) :: Ye = - 1 + integer(kind=4) :: Zi = - 1 + integer(kind=4) :: Ze = - 1 + integer(kind=4) :: Xtrancos = 1 + integer(kind=4) :: Ytrancos = 1 + integer(kind=4) :: Ztrancos = 1 + integer(kind=4) :: Or = 0 !f1eld orientation + character(len=BUFSIZE) :: tag + end type coords_t + type, public :: coords_scaled_t + integer(kind=4) :: Xi = - 1 + integer(kind=4) :: Xe = - 1 + integer(kind=4) :: Yi = - 1 + integer(kind=4) :: Ye = - 1 + integer(kind=4) :: Zi = - 1 + integer(kind=4) :: Ze = - 1 + real(kind=RK) :: xc = 0.0_RKIND + real(kind=RK) :: yc = 0.0_RKIND + real(kind=RK) :: zc = 0.0_RKIND + integer(kind=4) :: Or = 0 !field orientation nuevo 2015 + character(len=BUFSIZE) :: tag + end type coords_scaled_t !-----------------> Material_t Types !------------------------------------------------------------------------------ ! Basic constants for materials !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Material_t - REAL (KIND=RK) :: eps = 0.0_RKIND - REAL (KIND=RK) :: mu = 0.0_RKIND - REAL (KIND=RK) :: sigma = 0.0_RKIND - REAL (KIND=RK) :: sigmam = 0.0_RKIND - INTEGER (KIND=4) :: id = 0 - END TYPE Material_t + type, public :: Material_t + real(kind=RK) :: eps = 0.0_RKIND + real(kind=RK) :: mu = 0.0_RKIND + real(kind=RK) :: sigma = 0.0_RKIND + real(kind=RK) :: sigmam = 0.0_RKIND + integer(kind=4) :: id = 0 + end type Material_t !------------------------------------------------------------------------------ ! New Class which is a collection of different materials !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Materials_t - INTEGER (KIND=4) :: n_Mats = 0 - INTEGER (KIND=4) :: n_Mats_max = 0 - TYPE (Material_t), DIMENSION (:), POINTER :: Mats => NULL () - END TYPE Materials_t + type, public :: Materials_t + integer(kind=4) :: n_Mats = 0 + integer(kind=4) :: n_Mats_max = 0 + type(Material_t), dimension(:), pointer :: Mats => NULL () + end type Materials_t !------------------------------------------------------------------------------ ! Identifies conformal PEC "media" @@ -139,589 +139,589 @@ MODULE NFDETypes_m ! Locates all the different PEC media found !------------------------------------------------------------------------------ - TYPE, PUBLIC :: PECRegions_t - INTEGER (KIND=4) :: nVols = 0 - INTEGER (KIND=4) :: nSurfs = 0 - INTEGER (KIND=4) :: nLins = 0 - INTEGER (KIND=4) :: nVols_max = 0 - INTEGER (KIND=4) :: nSurfs_max = 0 - INTEGER (KIND=4) :: nLins_max = 0 - TYPE (coords_t), DIMENSION (:), POINTER :: Vols => NULL () - TYPE (coords_t), DIMENSION (:), POINTER :: Surfs => NULL () - TYPE (coords_t), DIMENSION (:), POINTER :: Lins => NULL () - END TYPE PECRegions_t + type, public :: PECRegions_t + integer(kind=4) :: nVols = 0 + integer(kind=4) :: nSurfs = 0 + integer(kind=4) :: nLins = 0 + integer(kind=4) :: nVols_max = 0 + integer(kind=4) :: nSurfs_max = 0 + integer(kind=4) :: nLins_max = 0 + type(coords_t), dimension(:), pointer :: Vols => NULL () + type(coords_t), dimension(:), pointer :: Surfs => NULL () + type(coords_t), dimension(:), pointer :: Lins => NULL () + end type PECRegions_t !------------------------------------------------------------------------------ ! Defines a Non Metal Body !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Dielectric_t - TYPE (coords_t), DIMENSION (:), POINTER :: c1P => NULL () - TYPE (coords_t), DIMENSION (:), POINTER :: c2P => NULL () - REAL (KIND=RK) :: sigma = 0.0_RKIND - REAL (KIND=RK) :: eps = 0.0_RKIND - REAL (KIND=RK) :: mu = 0.0_RKIND - REAL (KIND=RK) :: sigmam = 0.0_RKIND - INTEGER (KIND=4) :: n_C1P = 0 - INTEGER (KIND=4) :: n_C2P = 0 + type, public :: Dielectric_t + type(coords_t), dimension(:), pointer :: c1P => NULL () + type(coords_t), dimension(:), pointer :: c2P => NULL () + real(kind=RK) :: sigma = 0.0_RKIND + real(kind=RK) :: eps = 0.0_RKIND + real(kind=RK) :: mu = 0.0_RKIND + real(kind=RK) :: sigmam = 0.0_RKIND + integer(kind=4) :: n_C1P = 0 + integer(kind=4) :: n_C2P = 0 !!! Lumped vars. - REAL (KIND=RK) :: Rtime_on = 0.0_RKIND, Rtime_off = 0.0_RKIND - REAL (KIND=RK) :: R = 0.0_RKIND - REAL (KIND=RK) :: L = 0.0_RKIND - REAL (KIND=RK) :: C = 0.0_RKIND + real(kind=RK) :: Rtime_on = 0.0_RKIND, Rtime_off = 0.0_RKIND + real(kind=RK) :: R = 0.0_RKIND + real(kind=RK) :: L = 0.0_RKIND + real(kind=RK) :: C = 0.0_RKIND !!! Stoch vars. - REAL (KIND=RK) :: R_devia = 0.0_RKIND - REAL (KIND=RK) :: L_devia = 0.0_RKIND - REAL (KIND=RK) :: C_devia = 0.0_RKIND + real(kind=RK) :: R_devia = 0.0_RKIND + real(kind=RK) :: L_devia = 0.0_RKIND + real(kind=RK) :: C_devia = 0.0_RKIND ! - REAL (KIND=RK) :: DiodB = 0.0_RKIND - REAL (KIND=RK) :: DiodIsat = 0.0_RKIND - INTEGER (KIND=4) :: DiodOri = 0 + real(kind=RK) :: DiodB = 0.0_RKIND + real(kind=RK) :: DiodIsat = 0.0_RKIND + integer(kind=4) :: DiodOri = 0 !!! Berenger's waveports - INTEGER (KIND=4) :: orient = 0 + integer(kind=4) :: orient = 0 !!!!!!!!! logical :: resistor=.false. , inductor=.false. , capacitor=.false. , diodo=.false. , plain=.false. , PMLbody=.false. - END TYPE Dielectric_t + end type Dielectric_t !------------------------------------------------------------------------------ ! Locates all the different Non Metal Media found !------------------------------------------------------------------------------ - TYPE, PUBLIC :: DielectricRegions_t - TYPE (Dielectric_t), DIMENSION (:), POINTER :: Vols => NULL () - TYPE (Dielectric_t), DIMENSION (:), POINTER :: Surfs => NULL () - TYPE (Dielectric_t), DIMENSION (:), POINTER :: Lins => NULL () - INTEGER (KIND=4) :: nVols = 0 - INTEGER (KIND=4) :: nSurfs = 0 - INTEGER (KIND=4) :: nLins = 0 - INTEGER (KIND=4) :: nVols_max = 0 - INTEGER (KIND=4) :: nSurfs_max = 0 - INTEGER (KIND=4) :: nLins_max = 0 - INTEGER (KIND=4) :: n_C1P_max = 0 - INTEGER (KIND=4) :: n_C2P_max = 0 - END TYPE DielectricRegions_t - !------------------------------------------------------------------------------ - ! TYPE that defines the information of a frequency depENDent material, + type, public :: DielectricRegions_t + type(Dielectric_t), dimension(:), pointer :: Vols => NULL () + type(Dielectric_t), dimension(:), pointer :: Surfs => NULL () + type(Dielectric_t), dimension(:), pointer :: Lins => NULL () + integer(kind=4) :: nVols = 0 + integer(kind=4) :: nSurfs = 0 + integer(kind=4) :: nLins = 0 + integer(kind=4) :: nVols_max = 0 + integer(kind=4) :: nSurfs_max = 0 + integer(kind=4) :: nLins_max = 0 + integer(kind=4) :: n_C1P_max = 0 + integer(kind=4) :: n_C2P_max = 0 + end type DielectricRegions_t + !------------------------------------------------------------------------------ + ! type that defines the information of a frequency depENDent material, ! it inherits from the material class and it adds the possible values needed ! in the frequency depENDent section of the !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FreqDepenMaterial_t - COMPLEX, DIMENSION (:), POINTER :: a11 => NULL () - COMPLEX, DIMENSION (:), POINTER :: b11 => NULL () - COMPLEX, DIMENSION (:), POINTER :: am11 => NULL () - COMPLEX, DIMENSION (:), POINTER :: bm11 => NULL () - COMPLEX, DIMENSION (:), POINTER :: a12 => NULL () - COMPLEX, DIMENSION (:), POINTER :: b12 => NULL () - COMPLEX, DIMENSION (:), POINTER :: am12 => NULL () - COMPLEX, DIMENSION (:), POINTER :: bm12 => NULL () - COMPLEX, DIMENSION (:), POINTER :: a13 => NULL () - COMPLEX, DIMENSION (:), POINTER :: b13 => NULL () - COMPLEX, DIMENSION (:), POINTER :: am13 => NULL () - COMPLEX, DIMENSION (:), POINTER :: bm13 => NULL () - COMPLEX, DIMENSION (:), POINTER :: a22 => NULL () - COMPLEX, DIMENSION (:), POINTER :: b22 => NULL () - COMPLEX, DIMENSION (:), POINTER :: am22 => NULL () - COMPLEX, DIMENSION (:), POINTER :: bm22 => NULL () - COMPLEX, DIMENSION (:), POINTER :: a23 => NULL () - COMPLEX, DIMENSION (:), POINTER :: b23 => NULL () - COMPLEX, DIMENSION (:), POINTER :: am23 => NULL () - COMPLEX, DIMENSION (:), POINTER :: bm23 => NULL () - COMPLEX, DIMENSION (:), POINTER :: a33 => NULL () - COMPLEX, DIMENSION (:), POINTER :: b33 => NULL () - COMPLEX, DIMENSION (:), POINTER :: am33 => NULL () - COMPLEX, DIMENSION (:), POINTER :: bm33 => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: alpha => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: beta => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: gamma => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: alpham => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: betam => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: gammam => NULL () - TYPE (coords_t), DIMENSION (:), POINTER :: c => NULL () - REAL (KIND=RK) :: eps11 = 0.0_RKIND , eps12 = 0.0_RKIND , eps13 = 0.0_RKIND , eps22 = 0.0_RKIND , eps23 = 0.0_RKIND , eps33 = 0.0_RKIND - REAL (KIND=RK) :: mu11 = 0.0_RKIND , mu12 = 0.0_RKIND , mu13 = 0.0_RKIND , mu22 = 0.0_RKIND , mu23 = 0.0_RKIND , mu33 = 0.0_RKIND - REAL (KIND=RK) :: sigma11 = 0.0_RKIND , sigma12 = 0.0_RKIND , sigma13 = 0.0_RKIND , sigma22 = 0.0_RKIND , sigma23 = 0.0_RKIND , sigma33 = 0.0_RKIND - REAL (KIND=RK) :: sigmam11 = 0.0_RKIND , sigmam12 = 0.0_RKIND , sigmam13 = 0.0_RKIND , sigmam22 = 0.0_RKIND , sigmam23 = 0.0_RKIND , sigmam33 = 0.0_RKIND - INTEGER (KIND=4) :: K11 = 0 - INTEGER (KIND=4) :: Km11 = 0 - INTEGER (KIND=4) :: K12 = 0 - INTEGER (KIND=4) :: Km12 = 0 - INTEGER (KIND=4) :: K13 = 0 - INTEGER (KIND=4) :: Km13 = 0 - INTEGER (KIND=4) :: K22 = 0 - INTEGER (KIND=4) :: Km22 = 0 - INTEGER (KIND=4) :: K23 = 0 - INTEGER (KIND=4) :: Km23 = 0 - INTEGER (KIND=4) :: K33 = 0 - INTEGER (KIND=4) :: Km33 = 0 - INTEGER (KIND=4) :: L = 0 - INTEGER (KIND=4) :: Lm = 0 - INTEGER (KIND=4) :: n_c = 0 - CHARACTER (LEN=BUFSIZE) :: files = ' ' !2015 si esta presente lee los polos/residuos desde fichero - END TYPE FreqDepenMaterial_t - !------------------------------------------------------------------------------ - ! TYPE that defines the list of frequency depedent materials - !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FreqDepenMaterials_t - TYPE (FreqDepenMaterial_t), DIMENSION (:), POINTER :: Vols => NULL () - TYPE (FreqDepenMaterial_t), DIMENSION (:), POINTER :: Surfs => NULL () - TYPE (FreqDepenMaterial_t), DIMENSION (:), POINTER :: Lins => NULL () - INTEGER (KIND=4) :: nVols = 0 - INTEGER (KIND=4) :: nSurfs = 0 - INTEGER (KIND=4) :: nLins = 0 - INTEGER (KIND=4) :: nVols_max = 0 - INTEGER (KIND=4) :: nSurfs_max = 0 - INTEGER (KIND=4) :: nLins_max = 0 - INTEGER (KIND=4) :: n_c_max = 0 !cota superior - END TYPE FreqDepenMaterials_t + type, public :: FreqDepenMaterial_t + complex, dimension(:), pointer :: a11 => NULL () + complex, dimension(:), pointer :: b11 => NULL () + complex, dimension(:), pointer :: am11 => NULL () + complex, dimension(:), pointer :: bm11 => NULL () + complex, dimension(:), pointer :: a12 => NULL () + complex, dimension(:), pointer :: b12 => NULL () + complex, dimension(:), pointer :: am12 => NULL () + complex, dimension(:), pointer :: bm12 => NULL () + complex, dimension(:), pointer :: a13 => NULL () + complex, dimension(:), pointer :: b13 => NULL () + complex, dimension(:), pointer :: am13 => NULL () + complex, dimension(:), pointer :: bm13 => NULL () + complex, dimension(:), pointer :: a22 => NULL () + complex, dimension(:), pointer :: b22 => NULL () + complex, dimension(:), pointer :: am22 => NULL () + complex, dimension(:), pointer :: bm22 => NULL () + complex, dimension(:), pointer :: a23 => NULL () + complex, dimension(:), pointer :: b23 => NULL () + complex, dimension(:), pointer :: am23 => NULL () + complex, dimension(:), pointer :: bm23 => NULL () + complex, dimension(:), pointer :: a33 => NULL () + complex, dimension(:), pointer :: b33 => NULL () + complex, dimension(:), pointer :: am33 => NULL () + complex, dimension(:), pointer :: bm33 => NULL () + real(kind=RK), dimension(:), pointer :: alpha => NULL () + real(kind=RK), dimension(:), pointer :: beta => NULL () + real(kind=RK), dimension(:), pointer :: gamma => NULL () + real(kind=RK), dimension(:), pointer :: alpham => NULL () + real(kind=RK), dimension(:), pointer :: betam => NULL () + real(kind=RK), dimension(:), pointer :: gammam => NULL () + type(coords_t), dimension(:), pointer :: c => NULL () + real(kind=RK) :: eps11 = 0.0_RKIND , eps12 = 0.0_RKIND , eps13 = 0.0_RKIND , eps22 = 0.0_RKIND , eps23 = 0.0_RKIND , eps33 = 0.0_RKIND + real(kind=RK) :: mu11 = 0.0_RKIND , mu12 = 0.0_RKIND , mu13 = 0.0_RKIND , mu22 = 0.0_RKIND , mu23 = 0.0_RKIND , mu33 = 0.0_RKIND + real(kind=RK) :: sigma11 = 0.0_RKIND , sigma12 = 0.0_RKIND , sigma13 = 0.0_RKIND , sigma22 = 0.0_RKIND , sigma23 = 0.0_RKIND , sigma33 = 0.0_RKIND + real(kind=RK) :: sigmam11 = 0.0_RKIND , sigmam12 = 0.0_RKIND , sigmam13 = 0.0_RKIND , sigmam22 = 0.0_RKIND , sigmam23 = 0.0_RKIND , sigmam33 = 0.0_RKIND + integer(kind=4) :: K11 = 0 + integer(kind=4) :: Km11 = 0 + integer(kind=4) :: K12 = 0 + integer(kind=4) :: Km12 = 0 + integer(kind=4) :: K13 = 0 + integer(kind=4) :: Km13 = 0 + integer(kind=4) :: K22 = 0 + integer(kind=4) :: Km22 = 0 + integer(kind=4) :: K23 = 0 + integer(kind=4) :: Km23 = 0 + integer(kind=4) :: K33 = 0 + integer(kind=4) :: Km33 = 0 + integer(kind=4) :: L = 0 + integer(kind=4) :: Lm = 0 + integer(kind=4) :: n_c = 0 + character(len=BUFSIZE) :: files = ' ' !2015 si esta presente lee los polos/residuos desde fichero + end type FreqDepenMaterial_t + !------------------------------------------------------------------------------ + ! type that defines the list of frequency depedent materials + !------------------------------------------------------------------------------ + type, public :: FreqDepenMaterials_t + type(FreqDepenMaterial_t), dimension(:), pointer :: Vols => NULL () + type(FreqDepenMaterial_t), dimension(:), pointer :: Surfs => NULL () + type(FreqDepenMaterial_t), dimension(:), pointer :: Lins => NULL () + integer(kind=4) :: nVols = 0 + integer(kind=4) :: nSurfs = 0 + integer(kind=4) :: nLins = 0 + integer(kind=4) :: nVols_max = 0 + integer(kind=4) :: nSurfs_max = 0 + integer(kind=4) :: nLins_max = 0 + integer(kind=4) :: n_c_max = 0 !cota superior + end type FreqDepenMaterials_t !------------------------------------------------------------------------------ ! Type for the ANISOTROPIC body, surface and lines since they will contain ! the same information !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ANISOTROPICbody_t - TYPE (coords_t), DIMENSION (:), POINTER :: c1P => NULL () - TYPE (coords_t), DIMENSION (:), POINTER :: c2P => NULL () - REAL (KIND=RK), DIMENSION (3, 3) :: sigma, eps, mu, sigmam - INTEGER (KIND=4) :: n_C1P = 0 - INTEGER (KIND=4) :: n_C2P = 0 - END TYPE ANISOTROPICbody_t + type, public :: ANISOTROPICbody_t + type(coords_t), dimension(:), pointer :: c1P => NULL () + type(coords_t), dimension(:), pointer :: c2P => NULL () + real(kind=RK), dimension(3, 3) :: sigma, eps, mu, sigmam + integer(kind=4) :: n_C1P = 0 + integer(kind=4) :: n_C2P = 0 + end type ANISOTROPICbody_t !------------------------------------------------------------------------------ ! Type that contains the elements found in the nfde File !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ANISOTROPICelements_t - TYPE (ANISOTROPICbody_t), DIMENSION (:), POINTER :: Vols => NULL () - TYPE (ANISOTROPICbody_t), DIMENSION (:), POINTER :: Surfs => NULL () - TYPE (ANISOTROPICbody_t), DIMENSION (:), POINTER :: Lins => NULL () - INTEGER (KIND=4) :: nVols = 0 - INTEGER (KIND=4) :: nSurfs = 0 - INTEGER (KIND=4) :: nLins = 0 - INTEGER (KIND=4) :: nVols_max = 0 - INTEGER (KIND=4) :: nSurfs_max = 0 - INTEGER (KIND=4) :: nLins_max = 0 - INTEGER (KIND=4) :: n_C1P_max = 0 !cota superior de c1p y c2p en vols,sufs,lins - INTEGER (KIND=4) :: n_C2P_max = 0 - END TYPE ANISOTROPICelements_t + type, public :: ANISOTROPICelements_t + type(ANISOTROPICbody_t), dimension(:), pointer :: Vols => NULL () + type(ANISOTROPICbody_t), dimension(:), pointer :: Surfs => NULL () + type(ANISOTROPICbody_t), dimension(:), pointer :: Lins => NULL () + integer(kind=4) :: nVols = 0 + integer(kind=4) :: nSurfs = 0 + integer(kind=4) :: nLins = 0 + integer(kind=4) :: nVols_max = 0 + integer(kind=4) :: nSurfs_max = 0 + integer(kind=4) :: nLins_max = 0 + integer(kind=4) :: n_C1P_max = 0 !cota superior de c1p y c2p en vols,sufs,lins + integer(kind=4) :: n_C2P_max = 0 + end type ANISOTROPICelements_t !------------------------------------------------------------------------------ ! Defines a Comp Surface !------------------------------------------------------------------------------ - TYPE, PUBLIC :: LossyThinSurface_t - TYPE (coords_t), DIMENSION (:), POINTER :: c => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: sigma - REAL (KIND=RK), DIMENSION (:), POINTER :: eps - REAL (KIND=RK), DIMENSION (:), POINTER :: mu - REAL (KIND=RK), DIMENSION (:), POINTER :: sigmam - REAL (KIND=RK), DIMENSION (:), POINTER :: thk + type, public :: LossyThinSurface_t + type(coords_t), dimension(:), pointer :: c => NULL () + real(kind=RK), dimension(:), pointer :: sigma + real(kind=RK), dimension(:), pointer :: eps + real(kind=RK), dimension(:), pointer :: mu + real(kind=RK), dimension(:), pointer :: sigmam + real(kind=RK), dimension(:), pointer :: thk !for_devia - REAL (KIND=RK), DIMENSION (:), POINTER :: sigma_devia - REAL (KIND=RK), DIMENSION (:), POINTER :: eps_devia - REAL (KIND=RK), DIMENSION (:), POINTER :: mu_devia - REAL (KIND=RK), DIMENSION (:), POINTER :: sigmam_devia - REAL (KIND=RK), DIMENSION (:), POINTER :: thk_devia + real(kind=RK), dimension(:), pointer :: sigma_devia + real(kind=RK), dimension(:), pointer :: eps_devia + real(kind=RK), dimension(:), pointer :: mu_devia + real(kind=RK), dimension(:), pointer :: sigmam_devia + real(kind=RK), dimension(:), pointer :: thk_devia ! - INTEGER (KIND=4) :: nc = 0 - CHARACTER (LEN=BUFSIZE) :: files = ' ' - INTEGER (KIND=4) :: numcapas - END TYPE LossyThinSurface_t + integer(kind=4) :: nc = 0 + character(len=BUFSIZE) :: files = ' ' + integer(kind=4) :: numcapas + end type LossyThinSurface_t !------------------------------------------------------------------------------ ! Locates all the different Comp media found !------------------------------------------------------------------------------ - TYPE, PUBLIC :: LossyThinSurfaces_t - TYPE (LossyThinSurface_t), DIMENSION (:), POINTER :: cs => NULL () - INTEGER (KIND=4) :: length = 0 - INTEGER (KIND=4) :: length_max = 0 + type, public :: LossyThinSurfaces_t + type(LossyThinSurface_t), dimension(:), pointer :: cs => NULL () + integer(kind=4) :: length = 0 + integer(kind=4) :: length_max = 0 INTEGER (KIND=4) :: nC_max = 0 !cota de todos los nc de LossyThinSurface_t - END TYPE LossyThinSurfaces_t + end type LossyThinSurfaces_t !------------------------------------------------------------------------------ ! Component for Thin Wires there is a list of this inside the component ! that defines the whole Thin Wire Reference !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ThinWireComp_t - CHARACTER (LEN=BUFSIZE) :: srctype, srcfile - INTEGER (KIND=4) :: i = - 1 - INTEGER (KIND=4) :: j = - 1 - INTEGER (KIND=4) :: K = - 1 - INTEGER (KIND=4) :: nd = - 1 - INTEGER (KIND=4) :: d = - 1 - REAL (KIND=RK) :: m = 0.0_RKIND - CHARACTER (LEN=BUFSIZE) :: tag - END TYPE ThinWireComp_t + type, public :: ThinWireComp_t + character(len=BUFSIZE) :: srctype, srcfile + integer(kind=4) :: i = - 1 + integer(kind=4) :: j = - 1 + integer(kind=4) :: K = - 1 + integer(kind=4) :: nd = - 1 + integer(kind=4) :: d = - 1 + real(kind=RK) :: m = 0.0_RKIND + character(len=BUFSIZE) :: tag + end type ThinWireComp_t !------------------------------------------------------------------------------ ! ThinWire_t component that defines the overall properties of the definition ! of ThinWires_t !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ThinWire_t - TYPE (ThinWireComp_t), DIMENSION (:), POINTER :: twc => NULL () - REAL (KIND=RK) :: rad = 0 , rad_devia = 0 + type, public :: ThinWire_t + type(ThinWireComp_t), dimension(:), pointer :: twc => NULL () + real(kind=RK) :: rad = 0 , rad_devia = 0 LOGICAL :: disp = .false. - CHARACTER (LEN=BUFSIZE) :: dispfile - REAL (KIND=RK) :: res = 0 , res_devia = 0 - REAL (KIND=RK) :: ind = 0 , ind_devia = 0 - REAL (KIND=RK) :: cap = 0 , cap_devia = 0 - REAL (KIND=RK) :: P_res = 0 - REAL (KIND=RK) :: P_ind = 0 - REAL (KIND=RK) :: P_cap = 0 - CHARACTER (LEN=BUFSIZE) :: dispfile_LeftEnd - REAL (KIND=RK) :: R_LeftEnd = 0 , R_LeftEnd_devia = 0 - REAL (KIND=RK) :: L_LeftEnd = 0 , L_LeftEnd_devia = 0 - REAL (KIND=RK) :: C_LeftEnd = 0 , C_LeftEnd_devia = 0 - CHARACTER (LEN=BUFSIZE) :: dispfile_RightEnd - REAL (KIND=RK) :: R_RightEnd = 0 , R_RightEnd_devia = 0 - REAL (KIND=RK) :: L_RightEnd = 0 , L_RightEnd_devia = 0 - REAL (KIND=RK) :: C_RightEnd = 0 , C_RightEnd_devia = 0 - INTEGER (KIND=4) :: LeftEnd = 0 - INTEGER (KIND=4) :: RightEnd = 0 + character(len=BUFSIZE) :: dispfile + real(kind=RK) :: res = 0 , res_devia = 0 + real(kind=RK) :: ind = 0 , ind_devia = 0 + real(kind=RK) :: cap = 0 , cap_devia = 0 + real(kind=RK) :: P_res = 0 + real(kind=RK) :: P_ind = 0 + real(kind=RK) :: P_cap = 0 + character(len=BUFSIZE) :: dispfile_LeftEnd + real(kind=RK) :: R_LeftEnd = 0 , R_LeftEnd_devia = 0 + real(kind=RK) :: L_LeftEnd = 0 , L_LeftEnd_devia = 0 + real(kind=RK) :: C_LeftEnd = 0 , C_LeftEnd_devia = 0 + character(len=BUFSIZE) :: dispfile_RightEnd + real(kind=RK) :: R_RightEnd = 0 , R_RightEnd_devia = 0 + real(kind=RK) :: L_RightEnd = 0 , L_RightEnd_devia = 0 + real(kind=RK) :: C_RightEnd = 0 , C_RightEnd_devia = 0 + integer(kind=4) :: LeftEnd = 0 + integer(kind=4) :: RightEnd = 0 ! Components - INTEGER (KIND=4) :: tl = 0 - INTEGER (KIND=4) :: tr = 0 - INTEGER (KIND=4) :: n_twc = 0 - INTEGER (KIND=4) :: n_twc_max = 0 - END TYPE ThinWire_t + integer(kind=4) :: tl = 0 + integer(kind=4) :: tr = 0 + integer(kind=4) :: n_twc = 0 + integer(kind=4) :: n_twc_max = 0 + end type ThinWire_t !------------------------------------------------------------------------------ ! List of the different thin wires that were found in the file !------------------------------------------------------------------------------ - TYPE, PUBLIC :: ThinWires_t - TYPE (ThinWire_t), DIMENSION (:), POINTER :: tw => NULL () - INTEGER (KIND=4) :: n_tw = 0 - INTEGER (KIND=4) :: n_tw_max = 0 - END TYPE ThinWires_t + type, public :: ThinWires_t + type(ThinWire_t), dimension(:), pointer :: tw => NULL () + integer(kind=4) :: n_tw = 0 + integer(kind=4) :: n_tw_max = 0 + end type ThinWires_t !------------------------------------------------------------------------------ ! Component for Slanted Wires there is a list of this inside the component ! that defines the whole Slanted Wire Reference !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SlantedWireComp_t - CHARACTER (LEN=BUFSIZE) :: srctype, srcfile - REAL (KIND=RK) :: x = - 1.0_RKIND - REAL (KIND=RK) :: y = - 1.0_RKIND - REAL (KIND=RK) :: z = - 1.0_RKIND - INTEGER (KIND=4) :: nd = - 1 - REAL (KIND=RK) :: m = 0.0_RKIND - CHARACTER (LEN=BUFSIZE) :: tag - END TYPE SlantedWireComp_t + type, public :: SlantedWireComp_t + character(len=BUFSIZE) :: srctype, srcfile + real(kind=RK) :: x = - 1.0_RKIND + real(kind=RK) :: y = - 1.0_RKIND + real(kind=RK) :: z = - 1.0_RKIND + integer(kind=4) :: nd = - 1 + real(kind=RK) :: m = 0.0_RKIND + character(len=BUFSIZE) :: tag + end type SlantedWireComp_t !------------------------------------------------------------------------------ ! ThinWire_t component that defines the overall properties of the definition ! of ThinWires_t !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SlantedWire_t - TYPE (SlantedWireComp_t), DIMENSION (:), POINTER :: swc => NULL () - REAL (KIND=RK) :: rad = 0 + type, public :: SlantedWire_t + type(SlantedWireComp_t), dimension(:), pointer :: swc => NULL () + real(kind=RK) :: rad = 0 LOGICAL :: disp = .false. - CHARACTER (LEN=BUFSIZE) :: dispfile - REAL (KIND=RK) :: res = 0 - REAL (KIND=RK) :: ind = 0 - REAL (KIND=RK) :: cap = 0 - REAL (KIND=RK) :: P_res = 0 - REAL (KIND=RK) :: P_ind = 0 - REAL (KIND=RK) :: P_cap = 0 - CHARACTER (LEN=BUFSIZE) :: dispfile_LeftEnd - REAL (KIND=RK) :: R_LeftEnd = 0 - REAL (KIND=RK) :: L_LeftEnd = 0 - REAL (KIND=RK) :: C_LeftEnd = 0 - CHARACTER (LEN=BUFSIZE) :: dispfile_RightEnd - REAL (KIND=RK) :: R_RightEnd = 0 - REAL (KIND=RK) :: L_RightEnd = 0 - REAL (KIND=RK) :: C_RightEnd = 0 - INTEGER (KIND=4) :: LeftEnd = 0 - INTEGER (KIND=4) :: RightEnd = 0 + character(len=BUFSIZE) :: dispfile + real(kind=RK) :: res = 0 + real(kind=RK) :: ind = 0 + real(kind=RK) :: cap = 0 + real(kind=RK) :: P_res = 0 + real(kind=RK) :: P_ind = 0 + real(kind=RK) :: P_cap = 0 + character(len=BUFSIZE) :: dispfile_LeftEnd + real(kind=RK) :: R_LeftEnd = 0 + real(kind=RK) :: L_LeftEnd = 0 + real(kind=RK) :: C_LeftEnd = 0 + character(len=BUFSIZE) :: dispfile_RightEnd + real(kind=RK) :: R_RightEnd = 0 + real(kind=RK) :: L_RightEnd = 0 + real(kind=RK) :: C_RightEnd = 0 + integer(kind=4) :: LeftEnd = 0 + integer(kind=4) :: RightEnd = 0 ! Components - INTEGER (KIND=4) :: tl = 0 - INTEGER (KIND=4) :: tr = 0 - INTEGER (KIND=4) :: n_swc = 0 - INTEGER (KIND=4) :: n_swc_max = 0 - END TYPE SlantedWire_t + integer(kind=4) :: tl = 0 + integer(kind=4) :: tr = 0 + integer(kind=4) :: n_swc = 0 + integer(kind=4) :: n_swc_max = 0 + end type SlantedWire_t !------------------------------------------------------------------------------ ! List of the different thin wires that were found in the file !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SlantedWiresInfo_t - TYPE (SlantedWire_t), DIMENSION (:), POINTER :: sw => NULL () - INTEGER (KIND=4) :: n_sw = 0 - INTEGER (KIND=4) :: n_sw_max = 0 + type, public :: SlantedWiresInfo_t + type(SlantedWire_t), dimension(:), pointer :: sw => NULL () + integer(kind=4) :: n_sw = 0 + integer(kind=4) :: n_sw_max = 0 END TYPE SlantedWiresInfo_t !-------------------------------------------------------------------------- ! Component for Thin Slots there is a list of this inside the component ! that defines the whole Thin Slot Reference !-------------------------------------------------------------------------- - TYPE, PUBLIC :: ThinSlotComp_t - INTEGER (KIND=4) :: i = 0 - INTEGER (KIND=4) :: j = 0 - INTEGER (KIND=4) :: K = 0 - INTEGER (KIND=4) :: node = 0 - INTEGER (KIND=4) :: dir = - 1 - INTEGER (KIND=4) :: Or = - 1 - CHARACTER (LEN=BUFSIZE) :: tag - END TYPE ThinSlotComp_t + type, public :: ThinSlotComp_t + integer(kind=4) :: i = 0 + integer(kind=4) :: j = 0 + integer(kind=4) :: K = 0 + integer(kind=4) :: node = 0 + integer(kind=4) :: dir = - 1 + integer(kind=4) :: Or = - 1 + character(len=BUFSIZE) :: tag + end type ThinSlotComp_t !-------------------------------------------------------------------------- ! ThinSlot_t component that defines the overall properties of the definition ! of ThinSlots_t in ORIGINAL !-------------------------------------------------------------------------- - TYPE, PUBLIC :: ThinSlot_t - TYPE (ThinSlotComp_t), DIMENSION (:), POINTER :: tgc => NULL () - REAL (KIND=RK) :: width = 0 - INTEGER (KIND=4) :: n_tgc = 0 - INTEGER (KIND=4) :: n_tgc_max = 0 - END TYPE ThinSlot_t + type, public :: ThinSlot_t + type(ThinSlotComp_t), dimension(:), pointer :: tgc => NULL () + real(kind=RK) :: width = 0 + integer(kind=4) :: n_tgc = 0 + integer(kind=4) :: n_tgc_max = 0 + end type ThinSlot_t !-------------------------------------------------------------------------- ! List of the different thin Slots that were found in the file !-------------------------------------------------------------------------- - TYPE, PUBLIC :: ThinSlots_t - TYPE (ThinSlot_t), DIMENSION (:), POINTER :: tg => NULL () - INTEGER (KIND=4) :: n_tg = 0 - INTEGER (KIND=4) :: n_tg_max = 0 - END TYPE ThinSlots_t + type, public :: ThinSlots_t + type(ThinSlot_t), dimension(:), pointer :: tg => NULL () + integer(kind=4) :: n_tg = 0 + integer(kind=4) :: n_tg_max = 0 + end type ThinSlots_t !-----------------> Border Types !------------------------------------------------------------------------------ ! PML Border Type !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FronteraPML_t - REAL (KIND=RK) :: orden = 2.0_RK - REAL (KIND=RK) :: refl = 1e-3_RK - INTEGER (KIND=4) :: numCapas = 8 - END TYPE FronteraPML_t + type, public :: FronteraPML_t + real(kind=RK) :: orden = 2.0_RK + real(kind=RK) :: refl = 1e-3_RK + integer(kind=4) :: numCapas = 8 + end type FronteraPML_t !------------------------------------------------------------------------------ ! Tipo de la frontera !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Frontera_t - INTEGER (KIND=4), DIMENSION (6) :: tipoFrontera - TYPE (FronteraPML_t), DIMENSION (6) :: propiedadesPML - END TYPE Frontera_t + type, public :: Frontera_t + integer(kind=4), dimension(6) :: tipoFrontera + type(FronteraPML_t), dimension(6) :: propiedadesPML + end type Frontera_t !-----------------> Probe Types !------------------------------------------------------------------------------ - ! TYPE to define the new probe object which contains the TYPE of calculation - ! the TYPE of analysis, time and frequency step and the filename where + ! type to define the new probe object which contains the type of calculation + ! the type of analysis, time and frequency step and the filename where ! it should be saved !------------------------------------------------------------------------------ - TYPE, PUBLIC :: MasSonda_t - CHARACTER (LEN=BUFSIZE) :: filename - TYPE (coords_t), DIMENSION (:), POINTER :: cordinates => NULL () - REAL (KIND=RK) :: tstart, tstop, tstep - REAL (KIND=RK) :: fstart, fstop, fstep - INTEGER (KIND=4) :: type1, type2 - INTEGER (KIND=4) :: len_cor = 0 - CHARACTER (LEN=BUFSIZE) :: outputrequest - END TYPE MasSonda_t - !------------------------------------------------------------------------------ - ! TYPE that defines a list of probes to be appended and accesed - !------------------------------------------------------------------------------ - TYPE, PUBLIC :: MasSondas_t - TYPE (MasSonda_t), DIMENSION (:), POINTER :: collection => NULL () - INTEGER (KIND=4) :: length = 0 - INTEGER (KIND=4) :: length_max = 0 - INTEGER (KIND=4) :: len_cor_max = 0 !cota - END TYPE MasSondas_t - !------------------------------------------------------------------------------ - ! This TYPE contains the basic information in nearly all the different PROBES - !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Sonda_t - CHARACTER (LEN=BUFSIZE) :: grname - INTEGER (KIND=4), DIMENSION (:), POINTER :: i => NULL () - INTEGER (KIND=4), DIMENSION (:), POINTER :: j => NULL () - INTEGER (KIND=4), DIMENSION (:), POINTER :: K => NULL () - INTEGER (KIND=4), DIMENSION (:), POINTER :: node => NULL () - INTEGER (KIND=4) :: n_cord = 0 - INTEGER (KIND=4) :: n_cord_max = 0 - REAL (KIND=RK) :: tstart, tstop, tstep - CHARACTER (LEN=BUFSIZE) :: outputrequest + type, public :: MasSonda_t + character(len=BUFSIZE) :: filename + type(coords_t), dimension(:), pointer :: cordinates => NULL () + real(kind=RK) :: tstart, tstop, tstep + real(kind=RK) :: fstart, fstop, fstep + integer(kind=4) :: type1, type2 + integer(kind=4) :: len_cor = 0 + character(len=BUFSIZE) :: outputrequest + end type MasSonda_t + !------------------------------------------------------------------------------ + ! type that defines a list of probes to be appended and accesed + !------------------------------------------------------------------------------ + type, public :: MasSondas_t + type(MasSonda_t), dimension(:), pointer :: collection => NULL () + integer(kind=4) :: length = 0 + integer(kind=4) :: length_max = 0 + integer(kind=4) :: len_cor_max = 0 !cota + end type MasSondas_t + !------------------------------------------------------------------------------ + ! This type contains the basic information in nearly all the different PROBES + !------------------------------------------------------------------------------ + type, public :: Sonda_t + character(len=BUFSIZE) :: grname + integer(kind=4), dimension(:), pointer :: i => NULL () + integer(kind=4), dimension(:), pointer :: j => NULL () + integer(kind=4), dimension(:), pointer :: K => NULL () + integer(kind=4), dimension(:), pointer :: node => NULL () + integer(kind=4) :: n_cord = 0 + integer(kind=4) :: n_cord_max = 0 + real(kind=RK) :: tstart, tstop, tstep + character(len=BUFSIZE) :: outputrequest !por si se precisa para el Far Field - REAL (KIND=RK) :: fstart, fstop, fstep - REAL (KIND=RK) :: phistart, phistop, phistep - REAL (KIND=RK) :: thetastart, thetastop, thetastep - CHARACTER (LEN=BUFSIZE) :: FileNormalize - END TYPE Sonda_t + real(kind=RK) :: fstart, fstop, fstep + real(kind=RK) :: phistart, phistop, phistep + real(kind=RK) :: thetastart, thetastop, thetastep + character(len=BUFSIZE) :: FileNormalize + end type Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the electric far field + ! type for the electric far field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: FarField_Sonda_t - TYPE (Sonda_t) :: probe - END TYPE FarField_Sonda_t + type, public :: FarField_Sonda_t + type(Sonda_t) :: probe + end type FarField_Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the electric field + ! type for the electric field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Electric_Sonda_t - TYPE (Sonda_t) :: probe - END TYPE Electric_Sonda_t + type, public :: Electric_Sonda_t + type(Sonda_t) :: probe + end type Electric_Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the magnetic field + ! type for the magnetic field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Magnetic_Sonda_t - TYPE (Sonda_t) :: probe - END TYPE Magnetic_Sonda_t + type, public :: Magnetic_Sonda_t + type(Sonda_t) :: probe + end type Magnetic_Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the normal electric field + ! type for the normal electric field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: NormalElectric_Sonda_t - TYPE (Sonda_t) :: probe - INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () - INTEGER (KIND=4) :: n_nml = 0 - INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE NormalElectric_Sonda_t + type, public :: NormalElectric_Sonda_t + type(Sonda_t) :: probe + integer(kind=4), dimension(:), pointer :: nml => NULL () + integer(kind=4) :: n_nml = 0 + integer(kind=4) :: n_nml_max = 0 + end type NormalElectric_Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the normal magnetic field + ! type for the normal magnetic field !------------------------------------------------------------------------------ - TYPE, PUBLIC :: NormalMagnetic_Sonda_t - TYPE (Sonda_t) :: probe - INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () - INTEGER (KIND=4) :: n_nml = 0 - INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE NormalMagnetic_Sonda_t + type, public :: NormalMagnetic_Sonda_t + type(Sonda_t) :: probe + integer(kind=4), dimension(:), pointer :: nml => NULL () + integer(kind=4) :: n_nml = 0 + integer(kind=4) :: n_nml_max = 0 + end type NormalMagnetic_Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the electric surface current density + ! type for the electric surface current density !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SurfaceElectricCurrent_Sonda_t - TYPE (Sonda_t) :: probe - INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () - INTEGER (KIND=4) :: n_nml = 0 - INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE SurfaceElectricCurrent_Sonda_t + type, public :: SurfaceElectricCurrent_Sonda_t + type(Sonda_t) :: probe + integer(kind=4), dimension(:), pointer :: nml => NULL () + integer(kind=4) :: n_nml = 0 + integer(kind=4) :: n_nml_max = 0 + end type SurfaceElectricCurrent_Sonda_t !------------------------------------------------------------------------------ - ! TYPE for the magnetic surface current density + ! type for the magnetic surface current density !------------------------------------------------------------------------------ - TYPE, PUBLIC :: SurfaceMagneticCurrent_Sonda_t - TYPE (Sonda_t) :: probe - INTEGER (KIND=4), DIMENSION (:), POINTER :: nml => NULL () - INTEGER (KIND=4) :: n_nml = 0 - INTEGER (KIND=4) :: n_nml_max = 0 - END TYPE SurfaceMagneticCurrent_Sonda_t + type, public :: SurfaceMagneticCurrent_Sonda_t + type(Sonda_t) :: probe + integer(kind=4), dimension(:), pointer :: nml => NULL () + integer(kind=4) :: n_nml = 0 + integer(kind=4) :: n_nml_max = 0 + end type SurfaceMagneticCurrent_Sonda_t !------------------------------------------------------------------------------ ! Abstract class which performs the dynamic dispatching !------------------------------------------------------------------------------ - TYPE, PUBLIC :: abstractSonda_t - INTEGER (KIND=4) :: n_FarField = 0 - INTEGER (KIND=4) :: n_Electric = 0 - INTEGER (KIND=4) :: n_Magnetic = 0 - INTEGER (KIND=4) :: n_NormalElectric = 0 - INTEGER (KIND=4) :: n_NormalMagnetic = 0 - INTEGER (KIND=4) :: n_SurfaceElectricCurrent = 0 - INTEGER (KIND=4) :: n_SurfaceMagneticCurrent = 0 + type, public :: abstractSonda_t + integer(kind=4) :: n_FarField = 0 + integer(kind=4) :: n_Electric = 0 + integer(kind=4) :: n_Magnetic = 0 + integer(kind=4) :: n_NormalElectric = 0 + integer(kind=4) :: n_NormalMagnetic = 0 + integer(kind=4) :: n_SurfaceElectricCurrent = 0 + integer(kind=4) :: n_SurfaceMagneticCurrent = 0 ! - INTEGER (KIND=4) :: n_FarField_max = 0 - INTEGER (KIND=4) :: n_Electric_max = 0 - INTEGER (KIND=4) :: n_Magnetic_max = 0 - INTEGER (KIND=4) :: n_NormalElectric_max = 0 - INTEGER (KIND=4) :: n_NormalMagnetic_max = 0 - INTEGER (KIND=4) :: n_SurfaceElectricCurrent_max = 0 - INTEGER (KIND=4) :: n_SurfaceMagneticCurrent_max = 0 - TYPE (FarField_Sonda_t), DIMENSION (:), POINTER :: FarField => NULL () - TYPE (Electric_Sonda_t), DIMENSION (:), POINTER :: Electric => NULL () - TYPE (Magnetic_Sonda_t), DIMENSION (:), POINTER :: Magnetic => NULL () - TYPE (NormalElectric_Sonda_t), DIMENSION (:), POINTER :: NormalElectric => NULL () - TYPE (NormalMagnetic_Sonda_t), DIMENSION (:), POINTER :: NormalMagnetic => NULL () - TYPE (SurfaceElectricCurrent_Sonda_t), DIMENSION (:), POINTER :: SurfaceElectricCurrent => NULL () - TYPE (SurfaceMagneticCurrent_Sonda_t), DIMENSION (:), POINTER :: SurfaceMagneticCurrent => NULL () - END TYPE abstractSonda_t + integer(kind=4) :: n_FarField_max = 0 + integer(kind=4) :: n_Electric_max = 0 + integer(kind=4) :: n_Magnetic_max = 0 + integer(kind=4) :: n_NormalElectric_max = 0 + integer(kind=4) :: n_NormalMagnetic_max = 0 + integer(kind=4) :: n_SurfaceElectricCurrent_max = 0 + integer(kind=4) :: n_SurfaceMagneticCurrent_max = 0 + type(FarField_Sonda_t), dimension(:), pointer :: FarField => NULL () + type(Electric_Sonda_t), dimension(:), pointer :: Electric => NULL () + type(Magnetic_Sonda_t), dimension(:), pointer :: Magnetic => NULL () + type(NormalElectric_Sonda_t), dimension(:), pointer :: NormalElectric => NULL () + type(NormalMagnetic_Sonda_t), dimension(:), pointer :: NormalMagnetic => NULL () + type(SurfaceElectricCurrent_Sonda_t), dimension(:), pointer :: SurfaceElectricCurrent => NULL () + type(SurfaceMagneticCurrent_Sonda_t), dimension(:), pointer :: SurfaceMagneticCurrent => NULL () + end type abstractSonda_t !------------------------------------------------------------------------------ ! Class to account as a list for all the probes ! that might be required during the parsing process !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Sondas_t - TYPE (abstractSonda_t), DIMENSION (:), POINTER :: probes => NULL () - INTEGER (KIND=4) :: n_probes = 0 - INTEGER (KIND=4) :: n_probes_max = 0 - END TYPE Sondas_t - !------------------------------------------------------------------------------ - ! Object TYPE defined for the Bloque current probe - !------------------------------------------------------------------------------ - TYPE, PUBLIC :: BloqueProbe_t - REAL (KIND=RK) :: tstart, tstop, tstep - REAL (KIND=RK) :: fstart, fstop, fstep - CHARACTER (LEN=BUFSIZE) :: FileNormalize - INTEGER (KIND=4) :: type2 - INTEGER (KIND=4) :: i1, i2, j1, j2, k1, k2, skip - INTEGER (KIND=4) :: nml + type, public :: Sondas_t + type(abstractSonda_t), dimension(:), pointer :: probes => NULL () + integer(kind=4) :: n_probes = 0 + integer(kind=4) :: n_probes_max = 0 + end type Sondas_t + !------------------------------------------------------------------------------ + ! Object type defined for the Bloque current probe + !------------------------------------------------------------------------------ + type, public :: BloqueProbe_t + real(kind=RK) :: tstart, tstop, tstep + real(kind=RK) :: fstart, fstop, fstep + character(len=BUFSIZE) :: FileNormalize + integer(kind=4) :: type2 + integer(kind=4) :: i1, i2, j1, j2, k1, k2, skip + integer(kind=4) :: nml LOGICAL :: t - CHARACTER (LEN=BUFSIZE) :: outputrequest - CHARACTER (LEN=BUFSIZE) :: tag - END TYPE BloqueProbe_t + character(len=BUFSIZE) :: outputrequest + character(len=BUFSIZE) :: tag + end type BloqueProbe_t ! Object made for the collection of defined Bloque probes - TYPE, PUBLIC :: BloqueProbes_t - TYPE (BloqueProbe_t), DIMENSION (:), POINTER :: bp => NULL () - INTEGER (KIND=4) :: n_bp = 0 - INTEGER (KIND=4) :: n_bp_max = 0 - END TYPE BloqueProbes_t + type, public :: BloqueProbes_t + type(BloqueProbe_t), dimension(:), pointer :: bp => NULL () + integer(kind=4) :: n_bp = 0 + integer(kind=4) :: n_bp_max = 0 + end type BloqueProbes_t !------------------------------------------------------------------------------ - ! Object TYPE defined for the Volumic probes + ! Object type defined for the Volumic probes !------------------------------------------------------------------------------ - TYPE, PUBLIC :: VolProbe_t - TYPE (coords_t), DIMENSION (:), POINTER :: cordinates => NULL () - REAL (KIND=RK) :: tstart, tstop, tstep - CHARACTER (LEN=BUFSIZE) :: outputrequest - INTEGER (KIND=4) :: len_cor = 0 + type, public :: VolProbe_t + type(coords_t), dimension(:), pointer :: cordinates => NULL () + real(kind=RK) :: tstart, tstop, tstep + character(len=BUFSIZE) :: outputrequest + integer(kind=4) :: len_cor = 0 !para freq domain - REAL (KIND=RK) :: fstart, fstop, fstep - INTEGER (KIND=4) :: type2 - CHARACTER (LEN=BUFSIZE) :: filename - END TYPE VolProbe_t + real(kind=RK) :: fstart, fstop, fstep + integer(kind=4) :: type2 + character(len=BUFSIZE) :: filename + end type VolProbe_t ! Object made for the collection of defined Volumic probes - TYPE, PUBLIC :: VolProbes_t - TYPE (VolProbe_t), DIMENSION (:), POINTER :: collection => NULL () - INTEGER (KIND=4) :: length = 0 - INTEGER (KIND=4) :: length_max = 0 - INTEGER (KIND=4) :: len_cor_max = 0 !cota - END TYPE VolProbes_t + type, public :: VolProbes_t + type(VolProbe_t), dimension(:), pointer :: collection => NULL () + integer(kind=4) :: length = 0 + integer(kind=4) :: length_max = 0 + integer(kind=4) :: len_cor_max = 0 !cota + end type VolProbes_t !-----------------> Source Types !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Box_t - CHARACTER (LEN=BUFSIZE) :: nombre_fichero - INTEGER (KIND=4), DIMENSION (3) :: coor1, coor2 - END TYPE Box_t + type, public :: Box_t + character(len=BUFSIZE) :: nombre_fichero + integer(kind=4), dimension(3) :: coor1, coor2 + end type Box_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Boxes_t - TYPE (Box_t), DIMENSION (:), POINTER :: Vols => NULL () - INTEGER (KIND=4) :: nVols = 0 - INTEGER (KIND=4) :: nVols_max = 0 - END TYPE Boxes_t + type, public :: Boxes_t + type(Box_t), dimension(:), pointer :: Vols => NULL () + integer(kind=4) :: nVols = 0 + integer(kind=4) :: nVols_max = 0 + end type Boxes_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: PlaneWave_t - CHARACTER (LEN=BUFSIZE) :: nombre_fichero - CHARACTER (LEN=BUFSIZE) :: atributo - INTEGER (KIND=4), DIMENSION (3) :: coor1, coor2 - REAL (KIND=RK) :: theta, phi, alpha, beta + type, public :: PlaneWave_t + character(len=BUFSIZE) :: nombre_fichero + character(len=BUFSIZE) :: atributo + integer(kind=4), dimension(3) :: coor1, coor2 + real(kind=RK) :: theta, phi, alpha, beta logical :: isRC !for reververation chambers - REAL (KIND=RK) :: INCERTMAX - INTEGER (KIND=4) :: numModes !for reververation chambers - END TYPE PlaneWave_t + real(kind=RK) :: INCERTMAX + integer(kind=4) :: numModes !for reververation chambers + end type PlaneWave_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE, PUBLIC :: PlaneWaves_t - TYPE (PlaneWave_t), DIMENSION (:), POINTER :: collection => NULL () - INTEGER (KIND=4) :: nc = 0 - INTEGER (KIND=4) :: nC_max = 0 - END TYPE PlaneWaves_t + type, public :: PlaneWaves_t + type(PlaneWave_t), dimension(:), pointer :: collection => NULL () + integer(kind=4) :: nc = 0 + integer(kind=4) :: nC_max = 0 + end type PlaneWaves_t !------------------------------------------------------------------------------ ! Definicin de los tipos current density que existirn en el ficero ! nfde !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Curr_Field_Src_t - TYPE (coords_scaled_t), DIMENSION (:), POINTER :: c1P => NULL () - TYPE (coords_scaled_t), DIMENSION (:), POINTER :: c2P => NULL () - CHARACTER (LEN=BUFSIZE) :: nombre - INTEGER (KIND=4) :: n_C1P = 0 - INTEGER (KIND=4) :: n_C2P = 0 + type, public :: Curr_Field_Src_t + type(coords_scaled_t), dimension(:), pointer :: c1P => NULL () + type(coords_scaled_t), dimension(:), pointer :: c2P => NULL () + character(len=BUFSIZE) :: nombre + integer(kind=4) :: n_C1P = 0 + integer(kind=4) :: n_C2P = 0 LOGICAL :: isElec, isHard, isInitialValue - END TYPE Curr_Field_Src_t + end type Curr_Field_Src_t !------------------------------------------------------------------------------ ! Definicin de las Nodal Source global !------------------------------------------------------------------------------ - TYPE, PUBLIC :: NodSource_t - TYPE (Curr_Field_Src_t), DIMENSION (:), POINTER :: NodalSource => NULL () - INTEGER (KIND=4) :: n_nodSrc = 0 - INTEGER (KIND=4) :: n_nodSrc_max = 0 - INTEGER (KIND=4) :: n_C1P_max = 0 - INTEGER (KIND=4) :: n_C2P_max = 0 - END TYPE NodSource_t + type, public :: NodSource_t + type(Curr_Field_Src_t), dimension(:), pointer :: NodalSource => NULL () + integer(kind=4) :: n_nodSrc = 0 + integer(kind=4) :: n_nodSrc_max = 0 + integer(kind=4) :: n_C1P_max = 0 + integer(kind=4) :: n_C2P_max = 0 + end type NodSource_t !-----------------> General Types !------------------------------------------------------------------------------ ! Matrix attributes. ! Total[XYZ] -> Is the cell number for each axis. !------------------------------------------------------------------------------ - TYPE, PUBLIC :: MatrizMedios_t - INTEGER (KIND=4) :: totalX, totalY, totalZ - END TYPE MatrizMedios_t + type, public :: MatrizMedios_t + integer(kind=4) :: totalX, totalY, totalZ + end type MatrizMedios_t !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ - TYPE NFDEGeneral_t - REAL (KIND=RK) :: dt - INTEGER (KIND=4) :: nmax + type NFDEGeneral_t + real(kind=RK) :: dt + integer(kind=4) :: nmax LOGICAL :: mtlnProblem - END TYPE NFDEGeneral_t + end type NFDEGeneral_t !------------------------------------------------------------------------------ ! Definition of the type. Three vectors are defined, for each axis X,Y,Z. If ! their size is equal to 1 then there is a constant increment. If it is not @@ -734,75 +734,75 @@ MODULE NFDETypes_m !! MatrizMedios_t type and for each vector position the increment for those !! Cells !------------------------------------------------------------------------------ - TYPE Desplazamiento_t - REAL (KIND=RK), DIMENSION (:), POINTER :: desX => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: desY => NULL () - REAL (KIND=RK), DIMENSION (:), POINTER :: desZ => NULL () - INTEGER (KIND=4) :: nX = 0, mx1 = 0, mx2 = 0 !2012 - INTEGER (KIND=4) :: nY = 0, my1 = 0, my2 = 0 !2012 - INTEGER (KIND=4) :: nZ = 0, mz1 = 0, mz2 = 0 !2012 - real (KIND=RK) ::originx= 0.0_RKIND !2012 - real (KIND=RK) ::originy= 0.0_RKIND !2012 - real (KIND=RK) ::originz= 0.0_RKIND !2012 - END TYPE Desplazamiento_t + type Desplazamiento_t + real(kind=RK), dimension(:), pointer :: desX => NULL () + real(kind=RK), dimension(:), pointer :: desY => NULL () + real(kind=RK), dimension(:), pointer :: desZ => NULL () + integer(kind=4) :: nX = 0, mx1 = 0, mx2 = 0 !2012 + integer(kind=4) :: nY = 0, my1 = 0, my2 = 0 !2012 + integer(kind=4) :: nZ = 0, mz1 = 0, mz2 = 0 !2012 + real(kind=RK) ::originx= 0.0_RKIND !2012 + real(kind=RK) ::originy= 0.0_RKIND !2012 + real(kind=RK) ::originz= 0.0_RKIND !2012 + end type Desplazamiento_t !-----------------> Program Types !------------------------------------------------------------------------------ ! Parameters needed for the parser !------------------------------------------------------------------------------ - TYPE, PUBLIC :: Parseador_t - character (len=BUFSIZE) :: switches=' ' + type, public :: Parseador_t + character(len=BUFSIZE) :: switches=' ' ! Basics - TYPE (NFDEGeneral_t), POINTER :: general => NULL () - TYPE (MatrizMedios_t), POINTER :: matriz => NULL () - TYPE (Desplazamiento_t), POINTER :: despl => NULL () - TYPE (Frontera_t), POINTER :: front => NULL () + type(NFDEGeneral_t), pointer :: general => NULL () + type(MatrizMedios_t), pointer :: matriz => NULL () + type(Desplazamiento_t), pointer :: despl => NULL () + type(Frontera_t), pointer :: front => NULL () ! Materials_t - TYPE (Materials_t), POINTER :: Mats => NULL () - TYPE (PECRegions_t), POINTER :: pecRegs => NULL () - TYPE (PECRegions_t), POINTER :: pmcRegs => NULL () - TYPE (DielectricRegions_t), POINTER :: DielRegs => NULL () - TYPE (LossyThinSurfaces_t), POINTER :: LossyThinSurfs => NULL () - TYPE (FreqDepenMaterials_t), POINTER :: frqDepMats => NULL () - TYPE (ANISOTROPICelements_t), POINTER :: aniMats => NULL () + type(Materials_t), pointer :: Mats => NULL () + type(PECRegions_t), pointer :: pecRegs => NULL () + type(PECRegions_t), pointer :: pmcRegs => NULL () + type(DielectricRegions_t), pointer :: DielRegs => NULL () + type(LossyThinSurfaces_t), pointer :: LossyThinSurfs => NULL () + type(FreqDepenMaterials_t), pointer :: frqDepMats => NULL () + type(ANISOTROPICelements_t), pointer :: aniMats => NULL () ! Sources - TYPE (Boxes_t), POINTER :: boxSrc => NULL () - TYPE (PlaneWaves_t), POINTER :: plnSrc => NULL () - TYPE (NodSource_t), POINTER :: nodSrc => NULL () + type(Boxes_t), pointer :: boxSrc => NULL () + type(PlaneWaves_t), pointer :: plnSrc => NULL () + type(NodSource_t), pointer :: nodSrc => NULL () ! Probes - TYPE (Sondas_t), POINTER :: oldSONDA => NULL () - TYPE (MasSondas_t), POINTER :: Sonda => NULL () - TYPE (BloqueProbes_t), POINTER :: BloquePrb => NULL () - TYPE (VolProbes_t), POINTER :: VolPrb => NULL () + type(Sondas_t), pointer :: oldSONDA => NULL () + type(MasSondas_t), pointer :: Sonda => NULL () + type(BloqueProbes_t), pointer :: BloquePrb => NULL () + type(VolProbes_t), pointer :: VolPrb => NULL () ! Thin Elements - TYPE (ThinWires_t), POINTER :: tWires => NULL () - TYPE (SlantedWiresInfo_t), POINTER :: sWires => NULL () - TYPE (ThinSlots_t), POINTER :: tSlots => NULL () + type(ThinWires_t), pointer :: tWires => NULL () + type(SlantedWiresInfo_t), pointer :: sWires => NULL () + type(ThinSlots_t), pointer :: tSlots => NULL () ! Conformal - TYPE(ConformalPECRegions_t), pointer :: conformalRegs => NULL() + type(ConformalPECRegions_t), pointer :: conformalRegs => NULL() #ifdef CompileWithMTLN - TYPE (mtln_t), POINTER :: mtln => NULL () + type(mtln_t), pointer :: mtln => NULL () #endif - END TYPE Parseador_t + end type Parseador_t !---> definicion de tipos - TYPE, PUBLIC :: t_linea_t - INTEGER (KIND=4) :: LEN - CHARACTER (LEN=BUFSIZE) :: dato - END TYPE t_linea_t + type, public :: t_linea_t + integer(kind=4) :: LEN + character(len=BUFSIZE) :: dato + end type t_linea_t !---> - TYPE, PUBLIC :: t_NFDE_FILE_t + type, public :: t_NFDE_FILE_t INTEGER (KIND=4) mpidir !x=1,y=2,z=3 - INTEGER (KIND=8) :: targ + integer(kind=8) :: targ !---> - INTEGER (KIND=8) :: numero - TYPE (t_linea_t), DIMENSION (:), POINTER :: lineas + integer(kind=8) :: numero + type(t_linea_t), dimension(:), pointer :: lineas logical :: thereare_stoch - END TYPE t_NFDE_FILE_t + end type t_NFDE_FILE_t !---> contains -END MODULE NFDETypes_m +end module NFDETypes_m diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 971dd8a37..1a75f188a 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -1,7449 +1,7449 @@ - - -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! This module defines a class to deal with the transfering information -! from the parser to a class where it can be stored into memory and -! used in any further development of the FDTD simulation -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!!!!!!!!!#define DetectAdj : call the calculus of -!!!!!!!!! since the routine is not deeply tested) -MODULE Preprocess_m -#undef DetectAdj - ! - USE Report_m - USE NFDETypes_m -#ifdef CompileWithMTLN - use mtln_types_m, only: cable_t, unshielded_multiwire_t -#endif - !healer sgg10 - USE CreateMatrices_m - !typos que leo desde mi FDE - USE FDETYPES_m - USE DMMA_m - USE conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z - IMPLICIT NONE -!!!variables globales del modulo - REAL (KIND=RKIND), save :: cluz,zvac - REAL (KIND=RKIND), save :: eps0,mu0 -!!! - PRIVATE - ! - public read_geomData, read_limits_nogeom,AssigLossyOrPECtoNodes,searchtag - public checkDielectricTagForDuplicate, checkAnimatedTagForDuplicate, checkLossyTagForDuplicate - ! -CONTAINS - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SINPML_fullsize, fullsize, this, & - groundwires,attfactor,mibc,SGBC,SGBCDispersive,MEDIOEXTRA,maxSourceValue,skindepthpre,createmapvtk,input_conformal_flag,CLIPREGION,boundwireradius,maxwireradius,updateshared,run_with_dmma, & - eps00,mu00,simu_devia,hay_slanted_wires,verbose,ignoresamplingerrors,tagtype,wiresflavor) - type(media_matrices_t), intent(inout) :: media - logical :: simu_devia,verbose,hay_slanted_wires - REAL (KIND=RKIND) :: eps00,mu00 - - TYPE (MedioExtra_t), INTENT (INout) :: MEDIOEXTRA - ! - CHARACTER (LEN=BUFSIZE), intent(in) :: wiresflavor - logical, intent (in) :: updateshared,run_with_dmma,ignoresamplingerrors - LOGICAL, INTENT (INout) :: mibc,SGBC,CLIPREGION,boundwireradius,SGBCDispersive,skindepthpre - LOGICAL, INTENT (INout) :: createmapvtk - TYPE (limit_t), DIMENSION (1:6) :: SINPML_fullsize, fullsize - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - character(len=BUFSIZE) :: extraswitches - - type(taglist_t) :: tag_numbers - type(Parseador_t), INTENT (INOUT) :: this - INTEGER (KIND=4) :: tama, tama2, tama3, tama4, tama5, tama6, i, j, k, tipotemp, tamaSonda, & - & tamaoldSONDA, tamaBloquePrb, tamaScrPrb,pozi,tama2bis,numeroasignaciones,ci - CHARACTER (LEN=*), INTENT (IN) :: fichin - ! - CHARACTER (LEN=BUFSIZE) :: probenumber - REAL (KIND=RKIND) :: ex, ey, ez, px, py, pz, amplitud,attfactor,maxSourceValue,minSpaceStep,maxwireradius - - CHARACTER (LEN=BUFSIZE) :: tag - - TYPE (XYZlimit_t) :: punto, BoundingBox, conf_bounding_box - TYPE (XYZlimit_scaled_t) :: punto_s - INTEGER (KIND=4) :: orientacion,orientacionL,orientacionR, direccion, contamedia,oldcontamedia, maxcontamedia, mincontamedia, inicontamedia, & - i1, j1, field, k1, pecmedio, ii, medio1, medio2, sondas,CONTACURR,CONTAVOLT,I_,J_ - ! - LOGICAL :: isathinwire, VALIDO, existia,medioespecial,input_conformal_flag,nodo_cazado - LOGICAL :: errnofile,errnofile1,errnofile2,errnofile3,errnofile4 - REAL (KIND=RKIND) :: tiempo1, tiempo2, field1, field2,rdummy - INTEGER (KIND=4) :: nsurfs, numus, layoutnumber, size,OrigIndex,numminus - REAL (KIND=RKIND) :: delta,del,sig_max - INTEGER (KIND=4), DIMENSION (:), ALLOCATABLE :: contapuntos - INTEGER (KIND=4) :: conta1, conta2, MEDIO,imenos1,jmenos1,kmenos1,o,p,puntoxi,puntoyi,puntozi, & - bboxwirXI,dummy_bboxwirXI,bboxwirYI,dummy_bboxwirYI,bboxwirzI,dummy_bboxwirzI, & - bboxwirXE,dummy_bboxwirXE,bboxwirYE,dummy_bboxwirYE,bboxwirZE,dummy_bboxwirZE,IERR - INTEGER (KIND=8) :: memo - CHARACTER (LEN=BUFSIZE) :: MultiportFile,MultiportFile2 - CHARACTER (LEN=BUFSIZE) :: buff - REAL (KIND=RKIND), allocatable, dimension (:) :: dummy_px,dummy_py,dummy_pz,dummy_ex,dummy_ey,dummy_ez,dummy_INCERT - ! - CHARACTER (LEN=BUFSIZE) :: whoami - character (LEN=BUFSIZE) :: whoamishort - character (LEN=BUFSIZE) :: ext,extpoint - character (LEN=BUFSIZE) :: chari,charj,chark,chari2,charj2,chark2 - ! - logical :: paraerrhilo,groundwires,islossy,DENTRO - REAL (KIND=RKIND) :: width, dir (1:3), epr1, mur1 - LOGICAL :: oriX, oriY, oriZ, oriX2, oriY2, oriZ2, oriX3, oriY3, oriZ3, iguales - LOGICAL :: oriX4, oriY4, oriZ4 - REAL (KIND=RKIND), DIMENSION (3, 3) :: EprSlot, MurSlot - INTEGER (KIND=4) :: indicemedio - INTEGER (KIND=4) :: i11, j11 - ! - type (tagtype_t) :: tagtype - type(FreqDepenMaterial_t), POINTER :: fdgeom - ! - INTEGER (KIND=4) :: numertag - INTEGER (KIND=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & - & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & - & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & - & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & - & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE - ! - ! - type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes, conformal_surfaces - real(kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios - type(side_tris_map_t), dimension(:), allocatable :: volume_side_maps, surface_side_maps - eps0=eps00; mu0=mu00; !chapuz para convertir la variables de paso en globales - cluz=1.0_RKIND/sqrt(eps0*mu0) - zvac=sqrt(mu0/eps0) -! - call cuentatags(this,tagtype,layoutnumber,fichin) -! - delta=-1 !para que no se queje gfortran de variables sin inicializar - - sgg%thereAreMagneticMedia=.true. !caso mas general - sgg%thereArePMLMagneticMedia=.true. !caso mas general - !antes de hacer nada preprocesa si es preciso y no allocatear nada - !09/07/13 !los SGBCs con skindepth se deben preprocesar - if (skindepthpre) then - if (layoutnumber == 0) then - call print11(layoutnumber,'Preprocessing SGBC materials to include skin-depth effects....') - call prepro_skindepth(this,fichin) - call print11(layoutnumber,'Finished preprocessing for skin-depth.') - endif -#ifdef CompileWithMPI - call MPI_Barrier(MPI_COMM_WORLD,ierr) -#endif - return - endif - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - - WRITE (whoami, '(a,i5,a,i5,a)') '(', layoutnumber + 1, '/', size, ') ' - write(whoamishort,'(i5)') layoutnumber+1 - !create space for the etangential shared info - sgg%EShared%Conta = 0 - sgg%EShared%MaxConta = 10 - ALLOCATE (sgg%EShared%elem(1:sgg%EShared%MaxConta)) - - call buildConformalMedia(this%conformalRegs, conformal_volumes, conformal_surfaces) - sgg%dt = changeTimeStepIfConformalNeeded(sgg%dt) - if (associated(this%conformalRegs%volumes)) then - volume_side_maps = buildSideMaps(this%conformalRegs%volumes) - else - allocate(volume_side_maps(0)) - end if - if (associated(this%conformalRegs%surfaces)) then - surface_side_maps = buildSideMaps(this%conformalRegs%surfaces) - else - allocate(surface_side_maps(0)) - end if - - ! Cuenta los medios - !!!!!calcula tamanios - !reserva espacio - !el medio 0 se reserva para PEC - !regiones PEC - !el medio 1 se reserva para sustrato y saltamos - contamedia = 1 - IF ((this%pmcregs%nvols)+(this%pmcregs%nsurfs)+(this%pmcregs%nLINS) /= 0) THEN - !los PMC empiezan en 2 - contamedia = 2 - !fin regions PMC - END IF - !materialList - !NonMetalREgions and frequencydependent media - !Anisotropic - ! - contamedia = contamedia + (this%DielRegs%nvols) + (this%DielRegs%nsurfs) + (this%DielRegs%nLINS) + this%FRQDEPMATS%nvols + & - & this%FRQDEPMATS%nsurfs + this%FRQDEPMATS%nLINS + (this%ANIMATS%nvols+this%ANIMATS%nsurfs+this%ANIMATS%nLINS) - !Multiports - !worst case 6 orientations per surface plus the the lossy padding - contamedia = contamedia + this%LossyThinSurfs%length * 7 - !wires - !nueva formulacion que almacena also the lenghts - contamedia = contamedia + this%twires%n_tw - contamedia = contamedia + this%swires%n_sw - !echo por demas, habria que precontar pero es complicado porque depende del procesamiento - !thin Slots - - if (run_with_dmma) then - DO j = 1, this%tSlots%n_tg - contamedia = contamedia + this%tSlots%Tg(j)%N_tgc - END DO - endif - - !end thin Slots - !PARA LA CAPA EXTRA 2013 - if (medioextra%exists) then - CONTAMEDIA = CONTAMEDIA+1 - MEDIOEXTRA%index=CONTAMEDIA - endif - !para modulos que necesiten senialar con already_YEEadvanced_byconformal y split_and_useless (eg. conformal) - !se crea siempre por defecto - contamedia = contamedia+2 !para acomodar los no_use no_use_notouch - !!!!!!!!!!!!! - contamedia = contamedia +1 !para acomodar los nodal sources como caso especial de linea vacia - - - call getDifferentEdgeRatios(edge_ratios, conformal_volumes) - call getDifferentEdgeRatios(edge_ratios, conformal_surfaces) - call getDifferentFaceRatios(face_ratios, conformal_volumes) - call getDifferentFaceRatios(face_ratios, conformal_surfaces) - ! edge_ratios = getDifferentEdgeRatios(conformal_volumes) - ! face_ratios = getDifferentFaceRatios(conformal_volumes) - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 -#ifdef CompileWithMTLN - contamedia = contamedia + this%mtln%n_unsh -#endif - ! Surface updates need media distinct from volume updates even when their - ! geometric ratios are equal. - if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 - end if - - sgg%NumMedia = contamedia - sgg%AllocMed = contamedia - !reserva espacio - ALLOCATE (sgg%Med(0:sgg%NumMedia)) - !comienzo barrido resto : medios y observaciones - BoundingBox%XI = sgg%Alloc(iHx)%XI - BoundingBox%XE = sgg%Alloc(iHx)%XE - BoundingBox%YI = sgg%Alloc(iHy)%YI - BoundingBox%YE = sgg%Alloc(iHy)%YE - BoundingBox%ZI = sgg%Alloc(iHz)%ZI - BoundingBox%ZE = sgg%Alloc(iHz)%ZE - ! - Alloc_iEx_XI = sgg%Alloc(iEx)%XI - Alloc_iEx_XE = sgg%Alloc(iEx)%XE - Alloc_iEx_YI = sgg%Alloc(iEx)%YI - Alloc_iEx_YE = sgg%Alloc(iEx)%YE - Alloc_iEx_ZI = sgg%Alloc(iEx)%ZI - Alloc_iEx_ZE = sgg%Alloc(iEx)%ZE - Alloc_iEy_XI = sgg%Alloc(iEy)%XI - Alloc_iEy_XE = sgg%Alloc(iEy)%XE - Alloc_iEy_YI = sgg%Alloc(iEy)%YI - Alloc_iEy_YE = sgg%Alloc(iEy)%YE - Alloc_iEy_ZI = sgg%Alloc(iEy)%ZI - Alloc_iEy_ZE = sgg%Alloc(iEy)%ZE - Alloc_iEz_XI = sgg%Alloc(iEz)%XI - Alloc_iEz_XE = sgg%Alloc(iEz)%XE - Alloc_iEz_YI = sgg%Alloc(iEz)%YI - Alloc_iEz_YE = sgg%Alloc(iEz)%YE - Alloc_iEz_ZI = sgg%Alloc(iEz)%ZI - Alloc_iEz_ZE = sgg%Alloc(iEz)%ZE - Alloc_iHx_XI = sgg%Alloc(iHx)%XI - Alloc_iHx_XE = sgg%Alloc(iHx)%XE - Alloc_iHx_YI = sgg%Alloc(iHx)%YI - Alloc_iHx_YE = sgg%Alloc(iHx)%YE - Alloc_iHx_ZI = sgg%Alloc(iHx)%ZI - Alloc_iHx_ZE = sgg%Alloc(iHx)%ZE - Alloc_iHy_XI = sgg%Alloc(iHy)%XI - Alloc_iHy_XE = sgg%Alloc(iHy)%XE - Alloc_iHy_YI = sgg%Alloc(iHy)%YI - Alloc_iHy_YE = sgg%Alloc(iHy)%YE - Alloc_iHy_ZI = sgg%Alloc(iHy)%ZI - Alloc_iHy_ZE = sgg%Alloc(iHy)%ZE - Alloc_iHz_XI = sgg%Alloc(iHz)%XI - Alloc_iHz_XE = sgg%Alloc(iHz)%XE - Alloc_iHz_YI = sgg%Alloc(iHz)%YI - Alloc_iHz_YE = sgg%Alloc(iHz)%YE - Alloc_iHz_ZI = sgg%Alloc(iHz)%ZI - Alloc_iHz_ZE = sgg%Alloc(iHz)%ZE - ! - ! - field = 1 - ! - numertag = 0 - ALLOCATE (media%sggMtag(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) - ALLOCATE (media%sggMiNo(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) - - ALLOCATE (tag_numbers%edge%x(Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE)) - ALLOCATE (tag_numbers%edge%y(Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE)) - ALLOCATE (tag_numbers%edge%z(Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE)) - ALLOCATE (tag_numbers%face%x(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE)) - ALLOCATE (tag_numbers%face%y(Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE)) - ALLOCATE (tag_numbers%face%z(Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) - - !!!nodos materiales: se precisan para el conformal !sgg310715 - ALLOCATE (media%sggMiEx(Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE)) - ALLOCATE (media%sggMiEy(Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE)) - ALLOCATE (media%sggMiEz(Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE)) - ALLOCATE (media%sggMiHx(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE)) - ALLOCATE (media%sggMiHy(Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE)) - ALLOCATE (media%sggMiHz(Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) - - - !el tag esta voided porque luego el numero va con el del tag - media%sggMtag (:, :, :) = 0 !LO VOIDEO A 0 EN VEZ DE A -1 PORQUE EL TAG 0 NO VA A EXISTIR NUNCA 141020 - tag_numbers%edge%x(:,:,:) = 0 - tag_numbers%edge%y(:,:,:) = 0 - tag_numbers%edge%z(:,:,:) = 0 - tag_numbers%face%x(:,:,:) = 0 - tag_numbers%face%y(:,:,:) = 0 - tag_numbers%face%z(:,:,:) = 0 - !todo sustrato por defecto - media%sggMiNo (:, :, :) = 1 - media%sggMiEx (:, :, :) = 1 - media%sggMiEy (:, :, :) = 1 - media%sggMiEz (:, :, :) = 1 - media%sggMiHx (:, :, :) = 1 - media%sggMiHy (:, :, :) = 1 - media%sggMiHz (:, :, :) = 1 - - - !planeWaves - ! - tama = (this%plnSrc%nc) -!!! WRITE (buff,*) 'More than 1 Huygens box unsupported' -!!! IF (tama > 1) CALL STOPONERROR(layoutnumber,size,buff) - !LO PONGO A MANO ojo - amplitud = 1.0_RKIND - sgg%NumPlaneWaves = tama - ALLOCATE (sgg%PlaneWave(1:sgg%NumPlaneWaves)) - DO i = 1, sgg%NumPlaneWaves - punto%XI = Min (this%plnSrc%collection(i)%coor1(1), this%plnSrc%collection(i)%coor2(1)) - punto%XE = Max (this%plnSrc%collection(i)%coor1(1), this%plnSrc%collection(i)%coor2(1)) - punto%YI = Min (this%plnSrc%collection(i)%coor1(2), this%plnSrc%collection(i)%coor2(2)) - punto%YE = Max (this%plnSrc%collection(i)%coor1(2), this%plnSrc%collection(i)%coor2(2)) - punto%ZI = Min (this%plnSrc%collection(i)%coor1(3), this%plnSrc%collection(i)%coor2(3)) - punto%ZE = Max (this%plnSrc%collection(i)%coor1(3), this%plnSrc%collection(i)%coor2(3)) - !just for the sake of peace of my mind - !readjust Huygens surface CLEARLY in/out in case of coincidente - IF ((punto%XI == SINPML_fullsize(iHx)%XI)) THEN - punto%XI = SINPML_fullsize(iHx)%XI - 5 - END IF - IF ((punto%XE == SINPML_fullsize(iHx)%XE)) THEN - punto%XE = SINPML_fullsize(iHx)%XE + 5 - END IF - IF ((punto%YI == SINPML_fullsize(iHy)%YI)) THEN - punto%YI = SINPML_fullsize(iHy)%YI - 5 - END IF - IF ((punto%YE == SINPML_fullsize(iHy)%YE)) THEN - punto%YE = SINPML_fullsize(iHy)%YE + 5 - END IF - IF ((punto%ZI == SINPML_fullsize(iHz)%ZI)) THEN - punto%ZI = SINPML_fullsize(iHz)%ZI - 5 - END IF - IF ((punto%ZE == SINPML_fullsize(iHz)%ZE)) THEN - punto%ZE = SINPML_fullsize(iHz)%ZE + 5 - END IF - ! - sgg%PlaneWave(i)%isRC = this%plnSrc%collection(i)%isRC - sgg%PlaneWave(i)%numModes= this%plnSrc%collection(i)%numModes - sgg%PlaneWave(i)%incertmax= this%plnSrc%collection(i)%incertmax - if (sgg%PlaneWave(i)%isRC) then - allocate (sgg%PlaneWave(i)%px(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%py(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%pz(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%ex(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%ey(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%ez(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%INCERT(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_px(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_py(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_pz(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_ex(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_ey(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_ez(1:sgg%PlaneWave(i)%numModes)) - allocate (dummy_INCERT(1:sgg%PlaneWave(i)%numModes)) - sgg%PlaneWave(i)%px=0.0 - sgg%PlaneWave(i)%py=0.0 - sgg%PlaneWave(i)%pz=0.0 - sgg%PlaneWave(i)%ex=0.0 - sgg%PlaneWave(i)%ey=0.0 - sgg%PlaneWave(i)%ez=0.0 - sgg%PlaneWave(i)%INCERT=0.0 - if (layoutnumber==0) call populatePlaneWaveRC(sgg%PlaneWave(i),simu_devia) !only the master populates -#ifdef CompileWithMPI - call MPI_BARRIER(MPI_COMM_WORLD,ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%px, dummy_px, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%py, dummy_py, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%pz, dummy_pz, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%ex, dummy_ex, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%ey, dummy_ey, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%ez, dummy_ez, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( sgg%PlaneWave(i)%INCERT, dummy_INCERT, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) - call MPI_BARRIER(MPI_COMM_WORLD,ierr) - sgg%PlaneWave(i)%px=dummy_px - sgg%PlaneWave(i)%py=dummy_py - sgg%PlaneWave(i)%pz=dummy_pz - sgg%PlaneWave(i)%ex=dummy_ex - sgg%PlaneWave(i)%ey=dummy_ey - sgg%PlaneWave(i)%ez=dummy_ez - sgg%PlaneWave(i)%INCERT=dummy_INCERT -#endif - deallocate (dummy_px) - deallocate (dummy_py) - deallocate (dummy_pz) - deallocate (dummy_ex) - deallocate (dummy_ey) - deallocate (dummy_ez) - deallocate (dummy_INCERT) - else - sgg%PlaneWave(i)%numModes=1 - allocate (sgg%PlaneWave(i)%px(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%py(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%pz(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%ex(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%ey(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%ez(1:sgg%PlaneWave(i)%numModes)) - allocate (sgg%PlaneWave(i)%INCERT(1:sgg%PlaneWave(i)%numModes)) - ! - ez = amplitud * Cos (this%plnSrc%collection(i)%alpha) - ey = amplitud * Sin (this%plnSrc%collection(i)%alpha) * Sin (this%plnSrc%collection(i)%beta) - ex = amplitud * Sin (this%plnSrc%collection(i)%alpha) * Cos (this%plnSrc%collection(i)%beta) - pz = Cos (this%plnSrc%collection(i)%theta) - py = Sin (this%plnSrc%collection(i)%theta) * Sin (this%plnSrc%collection(i)%phi) - px = Sin (this%plnSrc%collection(i)%theta) * Cos (this%plnSrc%collection(i)%phi) - !ojo con estos redondeos. - !!!IF (Abs(ex/amplitud) < 1e-4) ex = 0.0_RKIND - !!!IF (Abs(ey/amplitud) < 1e-4) ey = 0.0_RKIND - !!!IF (Abs(ez/amplitud) < 1e-4) ez = 0.0_RKIND - !!!IF (Abs(px) < 1e-4) px = 0.0_RKIND - !!!IF (Abs(py) < 1e-4) py = 0.0_RKIND - !!!IF (Abs(pz) < 1e-4) pz = 0.0_RKIND - IF (Abs(px*ex+py*ey+pz*ez) >= 1e-4) THEN - WRITE (buff,*) 'NO TEM PLANEWAVE',ex,ey,ez,px,py,pz,(px*ex+py*ey+pz*ez),this%plnSrc%collection(i)%alpha, & - this%plnSrc%collection(i)%beta,this%plnSrc%collection(i)%theta,this%plnSrc%collection(i)%phi - CALL STOPONERROR(layoutnumber,size,buff) - END IF - ! - sgg%PlaneWave(i)%px(1) = px - sgg%PlaneWave(i)%py(1) = py - sgg%PlaneWave(i)%pz(1) = pz - sgg%PlaneWave(i)%ex(1) = ex - sgg%PlaneWave(i)%ey(1) = ey - sgg%PlaneWave(i)%ez(1) = ez - sgg%PlaneWave(i)%INCERT(1)=0.0_RKIND - endif - sgg%PlaneWave(i)%fichero%name = trim (adjustl(this%plnSrc%collection(i)%nombre_fichero)) - sgg%PlaneWave(i)%esqx1 = Min (punto%XI, punto%XE) - sgg%PlaneWave(i)%esqy1 = Min (punto%YI, punto%YE) - sgg%PlaneWave(i)%esqz1 = Min (punto%ZI, punto%ZE) - sgg%PlaneWave(i)%esqx2 = Max (punto%XI, punto%XE) - sgg%PlaneWave(i)%esqy2 = Max (punto%YI, punto%YE) - sgg%PlaneWave(i)%esqz2 = Max (punto%ZI, punto%ZE) - END DO - !Media parsing - !Default - !background - sgg%Med%Priority = prior_BV - sgg%Med%Epr = 1.0 - sgg%Med%Sigma = 0.0 - sgg%Med%Sigmareasignado = .false. !solo afecta a un chequeo de errores en lumped 120123 - sgg%Med%Mur = 1.0 - sgg%Med%SigmaM = 0.0 - sgg%Med%Is%Interfase = .FALSE. - sgg%Med%Is%PMLbody = .false. - sgg%Med%Is%Needed = .TRUE. - sgg%Med%Is%Anisotropic = .FALSE. - sgg%Med%Is%Dielectric = .FALSE. - sgg%Med%Is%EDispersive = .FALSE. - sgg%Med%Is%EDispersiveAnis = .FALSE. - sgg%Med%Is%MDispersive = .FALSE. - sgg%Med%Is%MDispersiveAnis = .FALSE. - sgg%Med%Is%Lumped = .FALSE. - sgg%Med%Is%SGBC = .FALSE. - sgg%Med%Is%SGBCDispersive = .FALSE. - sgg%Med%Is%Lossy = .FALSE. - sgg%Med%Is%multiport = .FALSE. - sgg%Med%Is%multiportpadding = .FALSE. - sgg%Med%Is%AnisMultiport = .FALSE. - sgg%Med%Is%ThinWire = .FALSE. - sgg%Med%Is%Multiwire = .FALSE. - sgg%Med%Is%SlantedWire = .FALSE. - sgg%Med%Is%ThinSlot = .FALSE. - sgg%Med%Is%PEC = .FALSE. - sgg%Med%Is%ConformalPEC = .FALSE. - sgg%Med%Is%PMC = .FALSE. - sgg%Med%Is%PML = .FALSE. - sgg%Med%Is%Volume = .FALSE. - sgg%Med%Is%Surface = .FALSE. - sgg%Med%Is%Line = .FALSE. - sgg%Med%Is%already_YEEadvanced_byconformal = .FALSE. - sgg%Med%Is%split_and_useless = .FALSE. - !ojo tocar tambien en el readjust de healing si se crean nuevos flags - ! - !medio PEC y PML es intrascendente si es surface o volume - !son los de prioridad mas alta y siempre contienen a sus campos tangenciales electricos - !Background only differences from default are needed - sgg%Med(1)%Priority = prior_BV - sgg%Med(1)%Epr = this%mats%mats(1)%eps / Eps0 - sgg%Med(1)%Sigma = this%mats%mats(1)%Sigma - sgg%Med(1)%Mur = this%mats%mats(1)%mu / Mu0 - sgg%Med(1)%SigmaM = this%mats%mats(1)%SigmaM - sgg%Med(1)%Is%Dielectric = .false. !considero el vacio como NO dielectrico '251114 - sgg%Med(1)%Is%Volume = .false. !considero el vacio como no volumic false '251114 - ! - sgg%Med(0)%Is%PEC = .TRUE. - sgg%Med(0)%Is%Needed = .TRUE. - sgg%Med(0)%Priority = prior_PEC - sgg%Med(0)%Epr = this%mats%mats(1)%eps / Eps0 - sgg%Med(0)%Sigma = 1.0e29_RKIND - sgg%Med(0)%Mur = this%mats%mats(1)%mu / Mu0 - sgg%Med(0)%SigmaM = 0.0_RKIND - !CAPA EXTRA - !Background only differences from default are needed - - if (medioextra%exists) then - !!!!estimate in terms of percentage of the maximum PML conductivity the conductivity of the extra medium - !!!This info is available from read_limits_nogeom - !the calculus is taken from borderscpml.F90 - sig_max=0.0_RKIND - do o=1,3 - do p=1,2 - if ((o == 1).and.(p == 1)) del=sgg%dx(SINPML_fullsize(iHx)%XI) - if ((o == 1).and.(p == 2)) del=sgg%dx(SINPML_fullsize(iHx)%XE-1) - if ((o == 2).and.(p == 1)) del=sgg%dy(SINPML_fullsize(iHy)%YI) - if ((o == 2).and.(p == 2)) del=sgg%dy(SINPML_fullsize(iHy)%YE-1) - if ((o == 3).and.(p == 1)) del=sgg%dz(SINPML_fullsize(iHz)%ZI) - if ((o == 3).and.(p == 2)) del=sgg%dz(SINPML_fullsize(iHz)%ZE-1) - if (sgg%PML%NumLayers(o,p) /= 0) then - if ((sgg%PML%NumLayers(o,p) == 10).or.(sgg%PML%NumLayers(o,p) == 5)) then - sig_max = max( sig_max , 0.8*(sgg%PML%orden(o,p)+1)/(zvac*del)) - else - if (sgg%PML%CoeffReflPML(o,p)==1.0_RKIND) then - !realmente en el borderscpml - !sig_max(sig_max,-((log( 0.99999d0 )*(sgg%PML%orden(o,p)+1))/ & - ! (2.0_RKIND *sqrt(Mu0/eps0)*sgg%PML%NumLayers(o,p)*del))) - !trampa para que entonces tome la conductividad autentica que se especifique y poder anular las PML y solo dejar capa fisica !!?!? - sig_max = 1.0_RKIND - else - sig_max = max(sig_max,-((log( sgg%PML%CoeffReflPML(o,p) )*(sgg%PML%orden(o,p)+1))/ & - (2.0_RKIND *sqrt(Mu0/eps0)*sgg%PML%NumLayers(o,p)*del))) - endif - endif - endif - end do - end do - MEDIOEXTRA%sigma = MEDIOEXTRA%sigma * sig_max !la especificacion se da en terminos de tanto por uno en la linea de comandos - ! - sgg%Med(MEDIOEXTRA%index)%Epr = this%mats%mats(1)%eps / Eps0 !luego se machaca este valor - sgg%Med(MEDIOEXTRA%index)%Sigma = MEDIOEXTRA%sigma !luego se machaca este valor - sgg%Med(MEDIOEXTRA%index)%Mur = this%mats%mats(1)%mu / Mu0 !luego se machaca este valor - sgg%Med(MEDIOEXTRA%index)%SigmaM = 0.0_RKIND !solo lo creo para las tangenciales electricas - sgg%Med(MEDIOEXTRA%index)%Priority = prior_PEC - sgg%Med(MEDIOEXTRA%index)%Is%Dielectric = .TRUE. - sgg%Med(MEDIOEXTRA%index)%Is%Volume = .TRUE. - sgg%Med(MEDIOEXTRA%index)%Is%PML = .TRUE. - endif - ! - !barre los medios - !Primero todos los pec - !PECRegions - !volumenes - !el medio 0 se reserva para PEC - !regiones PEC - ! - IF ((this%pecregs%nvols)+(this%pecregs%nsurfs)+(this%pecregs%nLINS) /= 0) THEN - pecmedio = 0 - tama = (this%pecregs%nvols) - !BODYes - DO i = 1, tama - punto%XI = this%pecregs%vols(i)%XI - punto%XE = this%pecregs%vols(i)%XE - punto%YI = this%pecregs%vols(i)%YI - punto%YE = this%pecregs%vols(i)%YE - punto%ZI = this%pecregs%vols(i)%ZI - punto%ZE = this%pecregs%vols(i)%ZE - numertag = searchtag(tagtype,this%pecregs%vols(i)%tag ) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, pecmedio) - END DO - !SURFs - tama = (this%pecregs%nsurfs) - DO i = 1, tama - punto%XI = this%pecregs%surfs(i)%XI - punto%XE = this%pecregs%surfs(i)%XE - punto%YI = this%pecregs%surfs(i)%YI - punto%YE = this%pecregs%surfs(i)%YE - punto%ZI = this%pecregs%surfs(i)%ZI - punto%ZE = this%pecregs%surfs(i)%ZE - orientacion = this%pecregs%surfs(i)%or - numertag = searchtag(tagtype,this%pecregs%surfs(i)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - & Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, & - & Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & - & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, & - & Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, & - & Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, & - & Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, & - & sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, pecmedio) - END DO - !LINs - tama = (this%pecregs%nLINS) - DO i = 1, tama - punto%XI = this%pecregs%lins(i)%XI - punto%XE = this%pecregs%lins(i)%XE - punto%YI = this%pecregs%lins(i)%YI - punto%YE = this%pecregs%lins(i)%YE - punto%ZI = this%pecregs%lins(i)%ZI - punto%ZE = this%pecregs%lins(i)%ZE - orientacion = this%pecregs%lins(i)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%pecregs%lins(i)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & pecmedio, isathinwire, verbose,numeroasignaciones) - END DO - !regiones PEC - END IF - - !el medio 1 se reserva para sustrato y saltamos - contamedia = 1 - - !para el conformal !debe ser tipicamente contamedia =1+1=2 pq el 0 es pec y el 1 es vacio. Ojo cambiado de sitio el PMC porque podia hacer que fuesen 3 y 4. 130220!!! y puede haber error pq por ahi se comprueba el 2 y el 3 - contamedia = contamedia + 1 - sgg%Med(contamedia)%Is%already_YEEadvanced_byconformal = .TRUE. - !debe ser contamedia =2+1=3 - contamedia = contamedia + 1 - sgg%Med(contamedia)%Is%split_and_useless = .TRUE. - -!!!!cambiado aqui 130220 - - !materialList - !regiones PMC - IF ((this%pmcregs%nvols)+(this%pmcregs%nsurfs)+(this%pmcregs%nLINS) /= 0) THEN - !los PMC de existir tienen todos indice 2 - contamedia =contamedia+1 !!!!contamedia = 2 !!!ufff. cambiado a 130220 por posible bug con conformal si algun dia habia regiones PMC - sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr - sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur - sgg%Med(contamedia)%Sigma = 0.0_RKIND - sgg%Med(contamedia)%SigmaM = 1.0e29_RKIND - sgg%Med(contamedia)%Priority = prior_PMC - sgg%Med(contamedia)%Is%PMC = .TRUE. - !BODYes - tama = (this%pmcregs%nvols) - DO i = 1, tama - punto%XI = this%pmcregs%vols(i)%XI - punto%XE = this%pmcregs%vols(i)%XE - punto%YI = this%pmcregs%vols(i)%YI - punto%YE = this%pmcregs%vols(i)%YE - punto%ZI = this%pmcregs%vols(i)%ZI - punto%ZE = this%pmcregs%vols(i)%ZE - ! - ! - numertag = searchtag(tagtype,this%pmcregs%vols(i)%tag) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) - END DO - !SURFs - tama = (this%pmcregs%nsurfs) - DO i = 1, tama - punto%XI = this%pmcregs%surfs(i)%XI - punto%XE = this%pmcregs%surfs(i)%XE - punto%YI = this%pmcregs%surfs(i)%YI - punto%YE = this%pmcregs%surfs(i)%YE - punto%ZI = this%pmcregs%surfs(i)%ZI - punto%ZE = this%pmcregs%surfs(i)%ZE - orientacion = this%pmcregs%surfs(i)%or - numertag = searchtag(tagtype,this%pmcregs%surfs(i)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - !LINs - tama = (this%pmcregs%nLINS) - DO i = 1, tama - punto%XI = this%pmcregs%lins(i)%XI - punto%XE = this%pmcregs%lins(i)%XE - punto%YI = this%pmcregs%lins(i)%YI - punto%YE = this%pmcregs%lins(i)%YE - punto%ZI = this%pmcregs%lins(i)%ZI - punto%ZE = this%pmcregs%lins(i)%ZE - orientacion = this%pmcregs%lins(i)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%pmcregs%lins(i)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - ! - END DO - !fin regions PMC - END IF -!!!!fin cambiado 130220 - - !NonMetalREgions - !BODYes - tama = (this%DielRegs%nvols) - DO i = 1, tama - contamedia = contamedia + 1 - sgg%Med(contamedia)%Is%Dielectric = .TRUE. - sgg%Med(contamedia)%Priority = prior_IB - sgg%Med(contamedia)%Epr = this%DielRegs%vols(i)%eps / Eps0 - sgg%Med(contamedia)%Sigma = this%DielRegs%vols(i)%Sigma - sgg%Med(contamedia)%Mur = this%DielRegs%vols(i)%mu / Mu0 - sgg%Med(contamedia)%SigmaM = this%DielRegs%vols(i)%SigmaM -!!!!pmlbody - if (this%DielRegs%vols(i)%PMLbody) then - sgg%Med(contamedia)%Priority = prior_pmlbody !machaca con una prioridad superior a la de thin wires y backgroud !prueba HOLD 251019 coax - sgg%Med(contamedia)%Is%PMLbody = .true. - ALLOCATE (sgg%Med(contamedia)%PMLbody(1)) - sgg%Med(contamedia)%PMLbody(1)%orient = this%DielRegs%vols(i)%orient - endif -!!!!! - tama2 = (this%DielRegs%vols(i)%n_c2P) - DO j = 1, tama2 - IF ((J==1).and.(this%DielRegs%vols(i)%PMLbody)) sgg%Med(contamedia)%PMLbody(1)%orient = this%DielRegs%vols(i)%c2P(j)%OR !ES IGUAL PARA TODOS - punto%XI = this%DielRegs%vols(i)%c2P(j)%XI - punto%XE = this%DielRegs%vols(i)%c2P(j)%XE - punto%YI = this%DielRegs%vols(i)%c2P(j)%YI - punto%YE = this%DielRegs%vols(i)%c2P(j)%YE - punto%ZI = this%DielRegs%vols(i)%c2P(j)%ZI - punto%ZE = this%DielRegs%vols(i)%c2P(j)%ZE - numertag = searchtag(tagtype,this%DielRegs%vols(i)%c2P(j)%tag) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) - END DO - tama3 = (this%DielRegs%vols(i)%n_c1P) - DO j = 1, tama3 - IF ((J==1).and.(this%DielRegs%vols(i)%PMLbody)) sgg%Med(contamedia)%PMLbody(1)%orient = this%DielRegs%vols(i)%c1P(j)%OR !ES IGUAL PARA TODOS - punto%XI = this%DielRegs%vols(i)%c1P(j)%XI - punto%XE = this%DielRegs%vols(i)%c1P(j)%XI - punto%YI = this%DielRegs%vols(i)%c1P(j)%YI - punto%YE = this%DielRegs%vols(i)%c1P(j)%YI - punto%ZI = this%DielRegs%vols(i)%c1P(j)%ZI - punto%ZE = this%DielRegs%vols(i)%c1P(j)%ZI - ! - numertag = searchtag(tagtype,this%DielRegs%vols(i)%c1P(j)%tag) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) - END DO - END DO - !SURFs - tama = (this%DielRegs%nsurfs) - DO i = 1, tama - contamedia = contamedia + 1 - sgg%Med(contamedia)%Is%Dielectric = .TRUE. - sgg%Med(contamedia)%Priority = prior_IS - sgg%Med(contamedia)%Epr = this%DielRegs%surfs(i)%eps / Eps0 - sgg%Med(contamedia)%Sigma = this%DielRegs%surfs(i)%Sigma - sgg%Med(contamedia)%Mur = this%DielRegs%surfs(i)%mu / Mu0 - sgg%Med(contamedia)%SigmaM = this%DielRegs%surfs(i)%SigmaM - tama2 = (this%DielRegs%surfs(i)%n_c2P) - DO j = 1, tama2 - punto%XI = this%DielRegs%surfs(i)%c2P(j)%XI - punto%XE = this%DielRegs%surfs(i)%c2P(j)%XE - punto%YI = this%DielRegs%surfs(i)%c2P(j)%YI - punto%YE = this%DielRegs%surfs(i)%c2P(j)%YE - punto%ZI = this%DielRegs%surfs(i)%c2P(j)%ZI - punto%ZE = this%DielRegs%surfs(i)%c2P(j)%ZE - orientacion = this%DielRegs%surfs(i)%c2P(j)%or - numertag = searchtag(tagtype,this%DielRegs%surfs(i)%c2P(j)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - tama3 = (this%DielRegs%surfs(i)%n_c1P) - - DO j = 1, tama3 - punto%XI = this%DielRegs%surfs(i)%c1P(j)%XI - punto%XE = this%DielRegs%surfs(i)%c1P(j)%XI - punto%YI = this%DielRegs%surfs(i)%c1P(j)%YI - punto%YE = this%DielRegs%surfs(i)%c1P(j)%YI - punto%ZI = this%DielRegs%surfs(i)%c1P(j)%ZI - punto%ZE = this%DielRegs%surfs(i)%c1P(j)%ZI - orientacion = this%DielRegs%surfs(i)%c1P(j)%or - numertag = searchtag(tagtype,this%DielRegs%surfs(i)%c1P(j)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - END DO - !LINs - tama = (this%DielRegs%nLINS) - DO i = 1, tama - numeroasignaciones=0 !solo lo usa lumped para echarselo al primer y el resto ponerlo a PEC - contamedia = contamedia + 1 - sgg%Med(contamedia)%Is%Dielectric = .TRUE. - sgg%Med(contamedia)%Priority = prior_IL - sgg%Med(contamedia)%Epr = this%DielRegs%lins(i)%eps / Eps0 - sgg%Med(contamedia)%Sigma = this%DielRegs%lins(i)%Sigma - sgg%Med(contamedia)%Mur = this%DielRegs%lins(i)%mu / Mu0 - sgg%Med(contamedia)%SigmaM = this%DielRegs%lins(i)%SigmaM -!!!!lumped - if (this%DielRegs%lins(i)%resistor) then - sgg%Med(contamedia)%Is%Lumped = .true. - sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug - ALLOCATE (sgg%Med(contamedia)%lumped(1)) - sgg%Med(contamedia)%lumped(1)%resistor =.true. - sgg%Med(contamedia)%lumped(1)%inductor =.false. - sgg%Med(contamedia)%lumped(1)%capacitor=.false. - sgg%Med(contamedia)%lumped(1)%diodo =.false. - sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R - sgg%Med(contamedia)%lumped(1)%L = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%C = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%R_devia = this%DielRegs%lins(i)%R_devia - sgg%Med(contamedia)%lumped(1)%L_devia = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%C_devia = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%Rtime_on = this%DielRegs%lins(i)%Rtime_on - sgg%Med(contamedia)%lumped(1)%Rtime_off = this%DielRegs%lins(i)%Rtime_off - sgg%Med(contamedia)%lumped(1)%DiodB = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%DiodIsat = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri - elseif (this%DielRegs%lins(i)%inductor) then - sgg%Med(contamedia)%Is%Lumped = .true. - sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug - ALLOCATE (sgg%Med(contamedia)%lumped(1)) - sgg%Med(contamedia)%lumped(1)%resistor =.false. - sgg%Med(contamedia)%lumped(1)%inductor =.true. - sgg%Med(contamedia)%lumped(1)%capacitor=.false. - sgg%Med(contamedia)%lumped(1)%diodo =.false. - sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R - sgg%Med(contamedia)%lumped(1)%L = this%DielRegs%lins(i)%L - sgg%Med(contamedia)%lumped(1)%C = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%R_devia = this%DielRegs%lins(i)%R_devia - sgg%Med(contamedia)%lumped(1)%L_devia = this%DielRegs%lins(i)%L_devia - sgg%Med(contamedia)%lumped(1)%C_devia = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%Rtime_on = 0.0 !irrelevant - sgg%Med(contamedia)%lumped(1)%Rtime_off = 0.0 !irrelevant - sgg%Med(contamedia)%lumped(1)%DiodB = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%DiodIsat = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri - elseif (this%DielRegs%lins(i)%capacitor) then - sgg%Med(contamedia)%Is%Lumped = .true. - sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug - ALLOCATE (sgg%Med(contamedia)%lumped(1)) - sgg%Med(contamedia)%lumped(1)%resistor =.false. - sgg%Med(contamedia)%lumped(1)%inductor =.false. - sgg%Med(contamedia)%lumped(1)%capacitor=.true. - sgg%Med(contamedia)%lumped(1)%diodo =.false. - sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R - sgg%Med(contamedia)%lumped(1)%L = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%C = this%DielRegs%lins(i)%C - sgg%Med(contamedia)%lumped(1)%R_devia = this%DielRegs%lins(i)%R_devia - sgg%Med(contamedia)%lumped(1)%L_devia = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%C_devia = this%DielRegs%lins(i)%C_devia - sgg%Med(contamedia)%lumped(1)%Rtime_on = 0.0 !irrelevant - sgg%Med(contamedia)%lumped(1)%Rtime_off = 0.0 !irrelevant - sgg%Med(contamedia)%lumped(1)%DiodB = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%DiodIsat = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri - elseif (this%DielRegs%lins(i)%diodo) then -!!!27/08/15 diodos aun no soportados - WRITE (buff, '(a)') 'Lumped Diodes currently unsupported. .' - CALL STOPONERROR(layoutnumber,size,buff) -!!! - sgg%Med(contamedia)%Is%Lumped = .true. - sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug - ALLOCATE (sgg%Med(contamedia)%lumped(1)) - sgg%Med(contamedia)%lumped(1)%resistor =.false. - sgg%Med(contamedia)%lumped(1)%inductor =.false. - sgg%Med(contamedia)%lumped(1)%capacitor=.false. - sgg%Med(contamedia)%lumped(1)%diodo =.true. - sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R - sgg%Med(contamedia)%lumped(1)%Rtime_on = 0.0 !irrelevant - sgg%Med(contamedia)%lumped(1)%Rtime_off = 0.0 !irrelevant - sgg%Med(contamedia)%lumped(1)%L = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%C = 0.0_RKIND - sgg%Med(contamedia)%lumped(1)%DiodB = this%DielRegs%lins(i)%DiodB - sgg%Med(contamedia)%lumped(1)%DiodIsat = this%DielRegs%lins(i)%DiodIsat - sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri - else - sgg%Med(contamedia)%Is%Lumped = .false. - if (.not. this%DielRegs%lins(i)%plain) then - WRITE (buff, '(a)') 'Buggy error 1 in preprocess lumped. .' - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif -!!!fin lumped - tama2 = (this%DielRegs%lins(i)%n_c2P) - DO j = 1, tama2 - punto%XI = this%DielRegs%lins(i)%c2P(j)%XI - punto%XE = this%DielRegs%lins(i)%c2P(j)%XE - punto%YI = this%DielRegs%lins(i)%c2P(j)%YI - punto%YE = this%DielRegs%lins(i)%c2P(j)%YE - punto%ZI = this%DielRegs%lins(i)%c2P(j)%ZI - punto%ZE = this%DielRegs%lins(i)%c2P(j)%ZE - orientacion = this%DielRegs%lins(i)%c2P(j)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%DielRegs%lins(i)%c2P(j)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - END DO - tama3 = (this%DielRegs%lins(i)%n_c1P) - DO j = 1, tama3 - punto%XI = this%DielRegs%lins(i)%c1P(j)%XI - punto%XE = this%DielRegs%lins(i)%c1P(j)%XI - punto%YI = this%DielRegs%lins(i)%c1P(j)%YI - punto%YE = this%DielRegs%lins(i)%c1P(j)%YI - punto%ZI = this%DielRegs%lins(i)%c1P(j)%ZI - punto%ZE = this%DielRegs%lins(i)%c1P(j)%ZI - orientacion = this%DielRegs%lins(i)%c1P(j)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%DielRegs%lins(i)%c1P(j)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - END DO - END DO - - - !Anisotropic materials - !materialList - !BODYes - tama = (this%ANIMATS%nvols) - DO i = 1, tama - contamedia = contamedia + 1 - ALLOCATE (sgg%Med(contamedia)%Anisotropic(1)) - sgg%Med(contamedia)%Is%Anisotropic = .TRUE. - sgg%Med(contamedia)%Priority = prior_AB - sgg%Med(contamedia)%Anisotropic(1)%Epr = this%ANIMATS%vols(i)%eps / Eps0 - sgg%Med(contamedia)%Anisotropic(1)%Sigma = this%ANIMATS%vols(i)%Sigma - sgg%Med(contamedia)%Anisotropic(1)%Mur = this%ANIMATS%vols(i)%mu / Mu0 - sgg%Med(contamedia)%Anisotropic(1)%SigmaM = this%ANIMATS%vols(i)%SigmaM - tama2 = (this%ANIMATS%vols(i)%n_c2P) - DO j = 1, tama2 - punto%XI = this%ANIMATS%vols(i)%c2P(j)%XI - punto%XE = this%ANIMATS%vols(i)%c2P(j)%XE - punto%YI = this%ANIMATS%vols(i)%c2P(j)%YI - punto%YE = this%ANIMATS%vols(i)%c2P(j)%YE - punto%ZI = this%ANIMATS%vols(i)%c2P(j)%ZI - punto%ZE = this%ANIMATS%vols(i)%c2P(j)%ZE - numertag = searchtag(tagtype,this%ANIMATS%vols(i)%c2P(j)%tag) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) - END DO - tama3 = (this%ANIMATS%vols(i)%n_c1P) - DO j = 1, tama3 - punto%XI = this%ANIMATS%vols(i)%c1P(j)%XI - punto%XE = this%ANIMATS%vols(i)%c1P(j)%XI - punto%YI = this%ANIMATS%vols(i)%c1P(j)%YI - punto%YE = this%ANIMATS%vols(i)%c1P(j)%YI - punto%ZI = this%ANIMATS%vols(i)%c1P(j)%ZI - punto%ZE = this%ANIMATS%vols(i)%c1P(j)%ZI - ! - numertag = searchtag(tagtype,this%ANIMATS%vols(i)%c1P(j)%tag) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) - END DO - END DO - !SURFs - tama = (this%ANIMATS%nsurfs) - DO i = 1, tama - contamedia = contamedia + 1 - ALLOCATE (sgg%Med(contamedia)%Anisotropic(1)) - sgg%Med(contamedia)%Is%Anisotropic = .TRUE. - sgg%Med(contamedia)%Priority = prior_IS - sgg%Med(contamedia)%Anisotropic(1)%Epr = this%ANIMATS%surfs(i)%eps / Eps0 - sgg%Med(contamedia)%Anisotropic(1)%Sigma = this%ANIMATS%surfs(i)%Sigma - sgg%Med(contamedia)%Anisotropic(1)%Mur = this%ANIMATS%surfs(i)%mu / Mu0 - sgg%Med(contamedia)%Anisotropic(1)%SigmaM = this%ANIMATS%surfs(i)%SigmaM - tama2 = (this%ANIMATS%surfs(i)%n_c2P) - DO j = 1, tama2 - punto%XI = this%ANIMATS%surfs(i)%c2P(j)%XI - punto%XE = this%ANIMATS%surfs(i)%c2P(j)%XE - punto%YI = this%ANIMATS%surfs(i)%c2P(j)%YI - punto%YE = this%ANIMATS%surfs(i)%c2P(j)%YE - punto%ZI = this%ANIMATS%surfs(i)%c2P(j)%ZI - punto%ZE = this%ANIMATS%surfs(i)%c2P(j)%ZE - orientacion = this%ANIMATS%surfs(i)%c2P(j)%or - numertag = searchtag(tagtype,this%ANIMATS%surfs(i)%c2P(j)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - tama3 = (this%ANIMATS%surfs(i)%n_c1P) - DO j = 1, tama3 - punto%XI = this%ANIMATS%surfs(i)%c1P(j)%XI - punto%XE = this%ANIMATS%surfs(i)%c1P(j)%XI - punto%YI = this%ANIMATS%surfs(i)%c1P(j)%YI - punto%YE = this%ANIMATS%surfs(i)%c1P(j)%YI - punto%ZI = this%ANIMATS%surfs(i)%c1P(j)%ZI - punto%ZE = this%ANIMATS%surfs(i)%c1P(j)%ZI - orientacion = this%ANIMATS%surfs(i)%c1P(j)%or - numertag = searchtag(tagtype,this%ANIMATS%surfs(i)%c1P(j)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - END DO - !LINs - tama = (this%ANIMATS%nLINS) - DO i = 1, tama - contamedia = contamedia + 1 - ALLOCATE (sgg%Med(contamedia)%Anisotropic(1)) - sgg%Med(contamedia)%Is%Anisotropic = .TRUE. - sgg%Med(contamedia)%Priority = prior_IL - sgg%Med(contamedia)%Anisotropic(1)%Epr = this%ANIMATS%lins(i)%eps / Eps0 - sgg%Med(contamedia)%Anisotropic(1)%Sigma = this%ANIMATS%lins(i)%Sigma - sgg%Med(contamedia)%Anisotropic(1)%Mur = this%ANIMATS%lins(i)%mu / Mu0 - sgg%Med(contamedia)%Anisotropic(1)%SigmaM = this%ANIMATS%lins(i)%SigmaM - tama2 = (this%ANIMATS%lins(i)%n_c2P) - DO j = 1, tama2 - punto%XI = this%ANIMATS%lins(i)%c2P(j)%XI - punto%XE = this%ANIMATS%lins(i)%c2P(j)%XE - punto%YI = this%ANIMATS%lins(i)%c2P(j)%YI - punto%YE = this%ANIMATS%lins(i)%c2P(j)%YE - punto%ZI = this%ANIMATS%lins(i)%c2P(j)%ZI - punto%ZE = this%ANIMATS%lins(i)%c2P(j)%ZE - orientacion = this%ANIMATS%lins(i)%c2P(j)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%ANIMATS%lins(i)%c2P(j)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - END DO - tama3 = (this%ANIMATS%lins(i)%n_c1P) - DO j = 1, tama3 - punto%XI = this%ANIMATS%lins(i)%c1P(j)%XI - punto%XE = this%ANIMATS%lins(i)%c1P(j)%XI - punto%YI = this%ANIMATS%lins(i)%c1P(j)%YI - punto%YE = this%ANIMATS%lins(i)%c1P(j)%YI - punto%ZI = this%ANIMATS%lins(i)%c1P(j)%ZI - punto%ZE = this%ANIMATS%lins(i)%c1P(j)%ZI - orientacion = this%ANIMATS%lins(i)%c1P(j)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%ANIMATS%lins(i)%c1P(j)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - END DO - END DO - !frequency dependent materials - !bodies - ! - tama = this%FRQDEPMATS%nvols - DO i = 1, tama - contamedia = contamedia + 1 - NULLIFY(fdgeom) - fdgeom=>this%FRQDEPMATS%vols(i) - call asignadisper(fdgeom) - !geometry - !!!!!!!!! - - tama2 = this%FRQDEPMATS%vols(i)%n_C - DO j = 1, tama2 - punto%XI = this%FRQDEPMATS%vols(i)%C(j)%XI - punto%XE = this%FRQDEPMATS%vols(i)%C(j)%XE - punto%YI = this%FRQDEPMATS%vols(i)%C(j)%YI - punto%YE = this%FRQDEPMATS%vols(i)%C(j)%YE - punto%ZI = this%FRQDEPMATS%vols(i)%C(j)%ZI - punto%ZE = this%FRQDEPMATS%vols(i)%C(j)%ZE - numertag = searchtag(tagtype,this%FRQDEPMATS%vols(i)%C(j)%tag) - CALL CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) - END DO - END DO - - - !SURFs - tama = this%FRQDEPMATS%nsurfs - DO i = 1, tama - contamedia = contamedia + 1 - NULLIFY(fdgeom) - fdgeom=>this%FRQDEPMATS%surfs(i) - call asignadisper(fdgeom) - - tama2 = this%FRQDEPMATS%surfs(i)%n_C - DO j = 1, tama2 - punto%XI = this%FRQDEPMATS%surfs(i)%C(j)%XI - punto%XE = this%FRQDEPMATS%surfs(i)%C(j)%XE - punto%YI = this%FRQDEPMATS%surfs(i)%C(j)%YI - punto%YE = this%FRQDEPMATS%surfs(i)%C(j)%YE - punto%ZI = this%FRQDEPMATS%surfs(i)%C(j)%ZI - punto%ZE = this%FRQDEPMATS%surfs(i)%C(j)%ZE - orientacion = this%FRQDEPMATS%surfs(i)%C(j)%or - numertag = searchtag(tagtype,this%FRQDEPMATS%surfs(i)%C(j)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - END DO - !LINs - tama = this%FRQDEPMATS%nLINS - DO i = 1, tama - contamedia = contamedia + 1 - NULLIFY(fdgeom) - fdgeom=>this%FRQDEPMATS%lins(i) - call asignadisper(fdgeom) - - tama2 = this%FRQDEPMATS%lins(i)%n_C - DO j = 1, tama2 - punto%XI = this%FRQDEPMATS%lins(i)%C(j)%XI - punto%XE = this%FRQDEPMATS%lins(i)%C(j)%XE - punto%YI = this%FRQDEPMATS%lins(i)%C(j)%YI - punto%YE = this%FRQDEPMATS%lins(i)%C(j)%YE - punto%ZI = this%FRQDEPMATS%lins(i)%C(j)%ZI - punto%ZE = this%FRQDEPMATS%lins(i)%C(j)%ZE - orientacion = this%FRQDEPMATS%lins(i)%C(j)%or - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%FRQDEPMATS%lins(i)%C(j)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - END DO - END DO - ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !ISOTROPIC Multiports - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - inicontamedia = contamedia + 1 - maxcontamedia = contamedia - tama = this%LossyThinSurfs%length - DO j = 1, tama - !carbon Multiports a guevo - if (this%LossyThinSurfs%cs(j)%numcapas==0) then - this%LossyThinSurfs%cs(j)%numcapas=1 - allocate(this%LossyThinSurfs%cs(j)%SigmaM(1)) - allocate(this%LossyThinSurfs%cs(j)%Sigma(1)) - allocate(this%LossyThinSurfs%cs(j)%EPS(1)) - allocate(this%LossyThinSurfs%cs(j)%MU(1)) - allocate(this%LossyThinSurfs%cs(j)%thk(1)) - - !_for_devia 090519 - allocate(this%LossyThinSurfs%cs(j)%SigmaM_devia(1)) - allocate(this%LossyThinSurfs%cs(j)%Sigma_devia(1)) - allocate(this%LossyThinSurfs%cs(j)%EPS_devia(1)) - allocate(this%LossyThinSurfs%cs(j)%MU_devia(1)) - allocate(this%LossyThinSurfs%cs(j)%thk_devia(1)) - !!! - - this%LossyThinSurfs%cs(J)%SigmaM(1)=0.0_RKIND !TRUCO PARA QUE CUANDO NO TENGA CAPAS (LECTURA DESDE FICHERO DE POLOS /RESIDUOS) NO PETE - this%LossyThinSurfs%cs(J)%Sigma(1)=0.0_RKIND - this%LossyThinSurfs%cs(J)%EPS(1)=EPS0 - this%LossyThinSurfs%cs(J)%MU(1)=MU0 - this%LossyThinSurfs%cs(J)%thk(1)=-1.0 - - !_for_devia 090519 - this%LossyThinSurfs%cs(J)%SigmaM_devia(1)=0.0_RKIND - this%LossyThinSurfs%cs(J)%Sigma_devia(1)=0.0_RKIND - this%LossyThinSurfs%cs(J)%EPS_devia(1)=0.0_RKIND - this%LossyThinSurfs%cs(J)%MU_devia(1)=0.0_RKIND - this%LossyThinSurfs%cs(J)%thk_devia(1)=0.0_RKIND - !!! - !!!comentado el 120219 pq no se lleva bien con Semba !no entiendo ahora el comentario de malonyedispersive!!!120219 - !!! WRITE (buff, '(a)') 'pre1_Error: SGBC materials must have at least one layyer even in dummy for malonyedispersive' - !!! CALL WarnErrReport (buff,.true.) - ENDIF - - - IF (abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) <= 1.0e-2_RKIND ) THEN !!!ojoooo a 210319 manda guevos que tengamos que estar con el flag de la conductidad magnetica para llamar a SGBC todavia en 2015!!! - this%LossyThinSurfs%cs(j)%SigmaM = 0.0_RKIND - if (.not.mibc) then - !if (this%LossyThinSurfs%cs(j)%numcapas >1) then - ! WRITE (buff, '(a)') 'pre1_Warning: SGBC materials are just averaged for multilayered structures.'// & - ! ' Use preferably -mibc instead.' - ! CALL WarnErrReport (buff) - !endif - SGBC=.true. !si la conductividad es 0.0_RKIND (o casi) utiliza directamente SGBC - mibc=.false. - endif - endif - IF (this%LossyThinSurfs%cs(j)%SigmaM(1) >= 0.0_RKIND) THEN - !SURFs (siempre son surfs) - ! - tama2 = this%LossyThinSurfs%cs(j)%nc - mincontamedia = maxcontamedia + 1 - MultiportFile = trim (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' - DO i = 1, tama2 - orientacion = this%LossyThinSurfs%cs(j)%C(i)%or - punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI - punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XE - punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI - punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YE - punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI - punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZE - existia = .FALSE. - doexis: DO k = inicontamedia, maxcontamedia - IF (trim(adjustl(sgg%Med(k)%multiport(1)%multiportFileZ11)) == trim(adjustl(MultiportFile))) THEN - IF (sgg%Med(k)%multiport(1)%Multiportdir == orientacion) THEN - contamedia = k - existia = .TRUE. - EXIT doexis - END IF - END IF - END DO doexis - - IF ( .NOT. existia) THEN - maxcontamedia = maxcontamedia + 1 - contamedia = maxcontamedia - ALLOCATE (sgg%Med(contamedia)%multiport(1)) - ! - if ((this%LossyThinSurfs%cs(j)%numcapas >1).and.SGBCDispersive) then - WRITE (buff, *) 'ERROR in SGBCs Number of layers >1 still unsupported for SGBCDispersive. ' - CALL StopOnError (0,0,buff) - endif - ! - allocate(sgg%Med(contamedia)%Multiport(1)%epr(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%mur(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%sigma(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%sigmam(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%width(1:this%LossyThinSurfs%cs(j)%numcapas)) - !_for_devia 090519 - allocate(sgg%Med(contamedia)%Multiport(1)%epr_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%mur_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%sigma_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%sigmaM_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & - sgg%Med(contamedia)%Multiport(1)%width_devia(1:this%LossyThinSurfs%cs(j)%numcapas)) - !!! - puntoXI = Max (punto%XI, Min(BoundingBox%XI, BoundingBox%XE)) - puntoYI = Max (punto%YI, Min(BoundingBox%YI, BoundingBox%YE)) - puntoZI = Max (punto%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) - - !!!!!!!!estaba antes maaaal. bug 140815verano - if(.not.((puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE))) then - puntoXI= sgg%allocDxI - WRITE (buff, *) 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)',puntoXI,puntoYI,puntoZI,sgg%allocDxI,sgg%allocDyI,sgg%allocDzI - CALL WarnErrReport (buff,.TRUE.) - endif - if(.not.((puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE))) then - puntoYI= sgg%allocDyI - WRITE (buff, *) 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)',puntoXI,puntoYI,puntoZI,sgg%allocDxI,sgg%allocDyI,sgg%allocDzI - CALL WarnErrReport (buff,.TRUE.) - endif - if(.not.((puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE))) then - puntoZI= sgg%allocDzI - WRITE (buff, *) 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)',puntoXI,puntoYI,puntoZI,sgg%allocDxI,sgg%allocDyI,sgg%allocDzI - CALL WarnErrReport (buff,.TRUE.) - endif - dentro = (puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE).and. & - (puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE).and. & - (puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE) - delta=-1.0_RKIND - IF (DENTRO) THEN - select case (abs(this%LossyThinSurfs%cs(j)%C(i)%or)) - case (iEx) - delta=(sgg%DX(puntoXI)+sgg%DX(puntoXI-1))/2.0_RKIND - case (iEy) - delta=(sgg%DY(puntoYI)+sgg%Dy(puntoYI-1))/2.0_RKIND - case (iEz) - delta=(sgg%DZ(puntoZI)+sgg%Dz(puntoZI-1))/2.0_RKIND - case default - WRITE (buff, '(a)') 'Buggy error 1 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) - end select - ELSE - WRITE (buff, '(a)') 'Buggy error 2 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) - ENDIF - sgg%Med(contamedia)%Multiport(1)%numcapas = this%LossyThinSurfs%cs(j)%numcapas - !el especificado - sgg%Med(contamedia)%Multiport(1)%Multiportdir = this%LossyThinSurfs%cs(j)%C(i)%or - do I_=1,sgg%Med(contamedia)%Multiport(1)%numcapas - if (sgg%Med(contamedia)%Multiport(1)%Multiportdir>0) then - j_=i_ - else - j_=sgg%Med(contamedia)%Multiport(1)%numcapas-i_+1 !dale la vuelta (medios no simetricos) !0121 - endif - sgg%Med(contamedia)%Multiport(1)%epr (j_) = this%LossyThinSurfs%cs(j)%eps (i_) / Eps0 - sgg%Med(contamedia)%Multiport(1)%mur (j_) = this%LossyThinSurfs%cs(j)%mu (i_) / mu0 - sgg%Med(contamedia)%Multiport(1)%sigma (j_) = this%LossyThinSurfs%cs(j)%Sigma (i_) - sgg%Med(contamedia)%Multiport(1)%sigmam (j_) = abs(this%LossyThinSurfs%cs(j)%Sigmam (i_) ) - sgg%Med(contamedia)%Multiport(1)%width (j_) = this%LossyThinSurfs%cs(j)%thk (i_) - - !_for_devia 090519 - sgg%Med(contamedia)%Multiport(1)%epr_devia (j_) = this%LossyThinSurfs%cs(j)%eps_devia (i_) / Eps0 - sgg%Med(contamedia)%Multiport(1)%mur_devia (j_) = this%LossyThinSurfs%cs(j)%MU_devia (i_) / mu0 - sgg%Med(contamedia)%Multiport(1)%sigma_devia (j_) = this%LossyThinSurfs%cs(j)%Sigma_devia (i_) - sgg%Med(contamedia)%Multiport(1)%sigmaM_devia(j_) = abs(this%LossyThinSurfs%cs(j)%SigmaM_devia (i_) ) - sgg%Med(contamedia)%Multiport(1)%width_devia (j_) = this%LossyThinSurfs%cs(j)%thk_devia (i_) - end do - - rdummy=maxval(abs(this%LossyThinSurfs%cs(j)%MU_devia))+maxval(abs(this%LossyThinSurfs%cs(j)%SigmaM_devia)) - if (rdummy>1.0e-15_RKIND) then - WRITE (buff, '(a)') 'Non null deviations found in sigmam or mu in composites. Still unsupported.' - CALL STOPONERROR(layoutnumber,size,buff) - endif - - !!! - - -!!old pre 17/07/15 -!!! sgg%Med(contamedia)%Multiport(1)%transversalSpaceDelta=delta - sgg%Med(contamedia)%Priority = prior_CS - sgg%Med(contamedia)%Epr = this%LossyThinSurfs%cs(j)%eps(1) / Eps0 - sgg%Med(contamedia)%Sigma =this%LossyThinSurfs%cs(j)%Sigma(1) - sgg%Med(contamedia)%Mur = this%LossyThinSurfs%cs(j)%mu(1) / Mu0 - sgg%Med(contamedia)%SigmaM = abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) !may be negative - if (mibc) then - sgg%Med(contamedia)%Is%multiport = .TRUE. - sgg%Med(contamedia)%Is%Lossy = .true. - elseif (SGBC) then - sgg%Med(contamedia)%Is%SGBC = .TRUE. - sgg%Med(contamedia)%Is%Lossy = .true. - if (SGBCDispersive) sgg%Med(contamedia)%Is%SGBCDispersive = .TRUE. - else - WRITE (buff, '(a)') 'Some -mibc -sgbc switch should be used for Composites.' - CALL STOPONERROR(layoutnumber,size,buff) - endif - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - - sgg%Med(contamedia)%multiport(1)%multiportFileZ11 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' - sgg%Med(contamedia)%multiport(1)%multiportFileZ22 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z22.txt' - sgg%Med(contamedia)%multiport(1)%multiportFileZ12 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' - sgg%Med(contamedia)%multiport(1)%multiportFileZ21 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' - ! -!! - if (mibc) then !se trataran con MIBC !!!151161 - sgg%Med(contamedia)%Is%SGBC = .false. - sgg%Med(contamedia)%Is%SGBCDispersive = .false. - sgg%Med(contamedia)%Is%Lossy = .true. - - errnofile1=.false. - errnofile2=.false. - errnofile3=.false. - errnofile4=.false. - pozi=index(sgg%Med(contamedia)%Multiport(1)%multiportFileZ11,'_z11.txt') - multiportfile2=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ11(1:pozi-1))) - INQUIRE (file=trim(adjustl(multiportfile2)), EXIST=errnofile1) - INQUIRE (file=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ11)), EXIST=errnofile2) - INQUIRE (file=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ12)), EXIST=errnofile3) - INQUIRE (file=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ22)), EXIST=errnofile4) - - if (.not.(errnofile1.or.(errnofile2.and.errnofile3.and.errnofile4))) then - buff='Neither New nor Old style mibc FILE '//trim(adjustl(multiportfile2))//' EXISTS.' - CALL WarnErrReport (buff,.TRUE.) - endif - endif - - !!!!!!!!end 09/07/13 - ! - ! - END IF - ! - ! - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - END IF - !Multiports - END DO - contamedia = maxcontamedia - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !end ISOTROPIC multiports - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! - ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !ANISOTROPIC Multiports - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - inicontamedia = contamedia + 1 - maxcontamedia = contamedia - tama = this%LossyThinSurfs%length - DO j = 1, tama - !carbon Multiports a guevo - IF (this%LossyThinSurfs%cs(j)%SigmaM(1) < 0.0_RKIND) THEN - !SURFs (siempre son surfs) - tama2 = this%LossyThinSurfs%cs(j)%nc - mincontamedia = maxcontamedia + 1 - MultiportFile = trim (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' - DO i = 1, tama2 - orientacion = this%LossyThinSurfs%cs(j)%C(i)%or - punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI - punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XE - punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI - punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YE - punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI - punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZE - existia = .FALSE. - doexis2: DO k = inicontamedia, maxcontamedia - IF (trim(adjustl(sgg%Med(k)%AnisMultiport(1)%multiportFileZ11)) == trim(adjustl(MultiportFile))) THEN - IF (sgg%Med(k)%AnisMultiport(1)%Multiportdir == orientacion) THEN - contamedia = k - existia = .TRUE. - EXIT doexis2 - END IF - END IF - END DO doexis2 - IF ( .NOT. existia) THEN - maxcontamedia = maxcontamedia + 1 - contamedia = maxcontamedia - ALLOCATE (sgg%Med(contamedia)%AnisMultiport(1)) - ! - ! - - if (this%LossyThinSurfs%cs(j)%numcapas >1) then - WRITE (buff, '(a)') 'pre1_ERROR: Anisotropic multiport materials unsupported for multilayered structures.' - CALL WarnErrReport (buff,.TRUE.) - endif - puntoXI = Max (punto%XI, Min(BoundingBox%XI, BoundingBox%XE)) !copiado de healer - puntoYI = Max (punto%YI, Min(BoundingBox%YI, BoundingBox%YE)) - puntoZI = Max (punto%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) - - - !!!!!!!!estaba antes maaaal. bug 140815verano - if(.not.((puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE))) puntoXI= sgg%allocDxI - if(.not.((puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE))) puntoYI= sgg%allocDyI - if(.not.((puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE))) puntoZI= sgg%allocDzI - WRITE (buff, '(a)') 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)' - CALL WarnErrReport (buff,.TRUE.) - - dentro = (puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE).and. & - (puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE).and. & - (puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE) - delta=-1.0_RKIND - IF (DENTRO) THEN - select case (abs(this%LossyThinSurfs%cs(j)%C(i)%or)) - case (iEx) - delta=(sgg%DX(puntoXI)+sgg%DX(puntoXI-1))/2.0_RKIND - case (iEy) - delta=(sgg%DY(puntoYI)+sgg%Dy(puntoYI-1))/2.0_RKIND - case (iEz) - delta=(sgg%DZ(puntoZI)+sgg%Dz(puntoZI-1))/2.0_RKIND - case default - WRITE (buff, '(a)') 'Buggy error 1 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) - end select - ELSE - WRITE (buff, '(a)') 'Buggy error 2 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) - ENDIF - sgg%Med(contamedia)%AnisMultiport(1)%Multiportdir = this%LossyThinSurfs%cs(j)%C(i)%or - sgg%Med(contamedia)%AnisMultiport(1)%epr = this%LossyThinSurfs%cs(j)%eps / Eps0 - sgg%Med(contamedia)%AnisMultiport(1)%mur = this%LossyThinSurfs%cs(j)%mu / mu0 - sgg%Med(contamedia)%AnisMultiport(1)%sigma = this%LossyThinSurfs%cs(j)%Sigma - sgg%Med(contamedia)%AnisMultiport(1)%sigmam = abs(this%LossyThinSurfs%cs(j)%Sigmam) - sgg%Med(contamedia)%AnisMultiport(1)%width = this%LossyThinSurfs%cs(j)%thk - sgg%Med(contamedia)%Priority = prior_CS - sgg%Med(contamedia)%Epr =this%LossyThinSurfs%cs(j)%eps(1) / Eps0 - sgg%Med(contamedia)%Sigma =this%LossyThinSurfs%cs(j)%Sigma(1) - sgg%Med(contamedia)%Mur = this%LossyThinSurfs%cs(j)%mu(1) / Mu0 - sgg%Med(contamedia)%SigmaM = abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) !may be negative - ! - if (mibc) then - sgg%Med(contamedia)%Is%Anismultiport = .TRUE. - sgg%Med(contamedia)%Is%Lossy = .TRUE. - else - WRITE (buff, '(a)') 'Some -mibc -sgbc switch should be used for Anisotropic Composites.' - CALL STOPONERROR(layoutnumber,size,buff) - endif - - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - - sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ11 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' - sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ22 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z22.txt' - sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ12 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' - sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ21 = trim & - & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' - ! - END IF - ! - ! - ! - ! - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - END DO - END IF - !Multiports - END DO - contamedia = maxcontamedia - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !end ANISOTROPIC multiports - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !Multiports lossy padding - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - if (abs(attfactor-1.0_RKIND) > 1.0e-12_RKIND) then - tama = this%LossyThinSurfs%length - DO j = 1, tama - tama2 = this%LossyThinSurfs%cs(j)%nc - contamedia = contamedia + 1 - DO i = 1, tama2 - orientacion = this%LossyThinSurfs%cs(j)%C(i)%or - !ES UN free-space multiportpadding CON LA PRIORIDAD DE UN MULTIPORT con conductividad magnetica que luego se desanulara - sgg%Med(contamedia)%Priority = prior_CS - sgg%Med(contamedia)%Is%multiport = .FALSE. - sgg%Med(contamedia)%Is%ANISmultiport = .FALSE. - sgg%Med(contamedia)%Is%MultiportPadding = .TRUE. - sgg%Med(contamedia)%Is%Lossy = .TRUE. - sgg%Med(contamedia)%Is%Dielectric = .False. - sgg%Med(contamedia)%Epr = 1.0_RKIND !this%LossyThinSurfs%cs(j)%eps / Eps0 - sgg%Med(contamedia)%Sigma = 0.0_RKIND !abs(this%LossyThinSurfs%cs(j)%Sigma) !may be negative - sgg%Med(contamedia)%Mur = 1.0_RKIND !this%LossyThinSurfs%cs(j)%mu / Mu0 - sgg%Med(contamedia)%Is%Dielectric = .TRUE. - !provisionalmente (luego se retocara con el sigmam correcto) - sgg%Med(contamedia)%SigmaM = 0.0_RKIND !abs(this%LossyThinSurfs%cs(j)%Sigma) !may be negative - - punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI - punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XE - punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI - punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YE - punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI - punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZE - !! - - SELECT CASE (Abs(orientacion)) - CASE (iEx) - punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI - punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XI - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & - media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, & - Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, & - Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, & - Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, & - Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, & - sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia) - punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI-1 - punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XI-1 - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & - media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & - Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & - Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & - Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & - Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & - BoundingBox, punto, orientacion, & - & contamedia) - CASE (iEy) - punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI - punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YI - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & - media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & - Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & - Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & - Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & - Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & - BoundingBox, punto, orientacion, & - & contamedia) - punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI-1 - punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YI-1 - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & - media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & - Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & - Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & - Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & - Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & - BoundingBox, punto, orientacion, & - & contamedia) - CASE (iEz) - punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI - punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZI - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & - media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & - Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & - Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & - Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & - Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & - BoundingBox, punto, orientacion, & - & contamedia) - punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI-1 - punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZI-1 - numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) - CALL CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & - media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, & - Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & - Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & - Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & - Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & - Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & - BoundingBox, punto, orientacion, & - & contamedia) - end select - end do - end do - endif - ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !wires - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - oldcontamedia = contamedIA - tama = this%twires%n_tw - DO j = 1, tama - contamedia = contamedia + 1 - ALLOCATE (sgg%Med(contamedia)%wire(1)) - sgg%Med(contamedia)%Priority = prior_TW - - ! - !background - ! - sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr - sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma - sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur - sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM - sgg%Med(contamedia)%Is%ThinWire = .TRUE. - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - sgg%Med(contamedia)%wire(1)%radius = this%twires%TW(j)%RAD - sgg%Med(contamedia)%wire(1)%radius_devia = this%twires%TW(j)%RAD_devia - if (boundwireradius) then - if (sgg%Med(contamedia)%wire(1)%radius > maxwireradius) sgg%Med(contamedia)%wire(1)%radius=maxwireradius - endif - sgg%Med(contamedia)%wire(1)%R = this%twires%TW(j)%RES - sgg%Med(contamedia)%wire(1)%l = this%twires%TW(j)%IND - sgg%Med(contamedia)%wire(1)%C = this%twires%TW(j)%CAP - sgg%Med(contamedia)%wire(1)%P_R = this%twires%TW(j)%P_RES - sgg%Med(contamedia)%wire(1)%P_l = this%twires%TW(j)%P_IND - - sgg%Med(contamedia)%wire(1)%P_C = this%twires%TW(j)%P_CAP - if (this%twires%TW(j)%disp) then - allocate (sgg%Med(contamedia)%wire(1)%disp(1)) - call asignawiredisper(sgg%Med(contamedia)%wire(1)%disp(1), & - this%twires%TW(j)%dispfile) - end if - sgg%Med(contamedia)%wire(1)%LeftEnd = this%twires%TW(j)%LeftEnd - sgg%Med(contamedia)%wire(1)%RightEnd = this%twires%TW(j)%RightEnd - sgg%Med(contamedia)%wire(1)%VsourceExists = .FALSE. - sgg%Med(contamedia)%wire(1)%IsourceExists = .FALSE. - ! - sgg%Med(contamedia)%wire(1)%HasAbsorbing_RightEnd = .FALSE. - sgg%Med(contamedia)%wire(1)%HasAbsorbing_LeftEnd = .FALSE. - sgg%Med(contamedia)%wire(1)%HasParallel_RightEnd = .FALSE. - sgg%Med(contamedia)%wire(1)%HasParallel_LeftEnd = .FALSE. - sgg%Med(contamedia)%wire(1)%HasSeries_RightEnd = .FALSE. - sgg%Med(contamedia)%wire(1)%HasSeries_LeftEnd = .FALSE. - sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_R_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_L_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_C_RightEnd = 2.0e7_RKIND !en corto 14/2/14 - sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd = 2.0e7_RKIND !en corto 14/2/14 -!stoch - sgg%Med(contamedia)%wire(1)%R_devia = this%twires%TW(j)%RES_devia - sgg%Med(contamedia)%wire(1)%l_devia = this%twires%TW(j)%IND_devia - sgg%Med(contamedia)%wire(1)%C_devia = this%twires%TW(j)%CAP_devia - - sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_R_RightEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_L_RightEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_C_RightEnd_devia = 0.0_RKIND - sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia = 0.0_RKIND -!fin stoch - ! - IF (this%twires%TW(j)%TL ==MATERIAL_absorbing) then - sgg%Med(contamedia)%wire(1)%HasAbsorbing_LeftEnd = .TRUE. - elseIF (this%twires%TW(j)%TL == Parallel_CONS) THEN - sgg%Med(contamedia)%wire(1)%HasParallel_LeftEnd = .TRUE. - sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd = this%twires%TW(j)%R_LeftEnd - sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd = this%twires%TW(j)%L_LeftEnd - sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd = this%twires%TW(j)%C_LeftEnd -! - sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd_devia = this%twires%TW(j)%R_LeftEnd_devia - sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd_devia = this%twires%TW(j)%L_LeftEnd_devia - sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd_devia = this%twires%TW(j)%C_LeftEnd_devia - - ELSE IF (this%twires%TW(j)%TL == SERIES_CONS) THEN - sgg%Med(contamedia)%wire(1)%HasSeries_LeftEnd = .TRUE. - sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd = this%twires%TW(j)%R_LeftEnd - sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd = this%twires%TW(j)%L_LeftEnd - sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd = this%twires%TW(j)%C_LeftEnd -! - sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd_devia = this%twires%TW(j)%R_LeftEnd_devia - sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd_devia = this%twires%TW(j)%L_LeftEnd_devia - sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia = this%twires%TW(j)%C_LeftEnd_devia - ELSE IF (this%twires%TW(j)%TL == DISPERSIVE_CONS) THEN - allocate (sgg%Med(contamedia)%wire(1)%disp_LeftEnd(1)) - call asignawiredisper(sgg%Med(contamedia)%wire(1)%disp_LeftEnd(1), & - this%twires%TW(j)%dispfile_LeftEnd) - END IF - ! - - IF (this%twires%TW(j)%TR ==MATERIAL_absorbing) then - sgg%Med(contamedia)%wire(1)%HasAbsorbing_RightEnd = .TRUE. - elseIF (this%twires%TW(j)%TR == Parallel_CONS) THEN - sgg%Med(contamedia)%wire(1)%HasParallel_RightEnd = .TRUE. - sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd = this%twires%TW(j)%R_RightEnd - sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd = this%twires%TW(j)%L_RightEnd - sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd = this%twires%TW(j)%C_RightEnd -! - sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd_devia = this%twires%TW(j)%R_RightEnd_devia - sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd_devia = this%twires%TW(j)%L_RightEnd_devia - sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd_devia = this%twires%TW(j)%C_RightEnd_devia - ELSE IF (this%twires%TW(j)%TR == SERIES_CONS) THEN - sgg%Med(contamedia)%wire(1)%HasSeries_RightEnd = .TRUE. - sgg%Med(contamedia)%wire(1)%Series_R_RightEnd = this%twires%TW(j)%R_RightEnd - sgg%Med(contamedia)%wire(1)%Series_L_RightEnd = this%twires%TW(j)%L_RightEnd - sgg%Med(contamedia)%wire(1)%Series_C_RightEnd = this%twires%TW(j)%C_RightEnd -! - sgg%Med(contamedia)%wire(1)%Series_R_RightEnd_devia = this%twires%TW(j)%R_RightEnd_devia - sgg%Med(contamedia)%wire(1)%Series_L_RightEnd_devia = this%twires%TW(j)%L_RightEnd_devia - sgg%Med(contamedia)%wire(1)%Series_C_RightEnd_devia = this%twires%TW(j)%C_RightEnd_devia - - ELSE IF (this%twires%TW(j)%TR == DISPERSIVE_CONS) THEN - allocate (sgg%Med(contamedia)%wire(1)%disp_RightEnd(1)) - call asignawiredisper(sgg%Med(contamedia)%wire(1)%disp_RightEnd(1), & - this%twires%TW(j)%dispfile_RightEnd) - END IF - -!stoch - rdummy=abs(sgg%Med(contamedia)%wire(1)%radius_devia) & - +abs(sgg%Med(contamedia)%wire(1)%l_devia) & - +abs(sgg%Med(contamedia)%wire(1)%C_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Series_L_RightEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Series_C_RightEnd_devia) & - +abs(sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia) - if (rdummy>1.0e-15_RKIND) then - WRITE (buff, '(a)') 'Non null deviations found in L, C or radius in wires stoch. Still unsupported.' - CALL STOPONERROR(layoutnumber,size,buff) - endif -!fin stoch - ! - !esto se soportaba desde versiones antiguas (hilos de un solo segmento. Por error se descomento en la R2417 cuando se trabajo en lo del strictnfde tras vuelta de madrid - !vuelvo a comentarlo porque si que tenemos la capacidad de hilos de un solo segmento - ! - ! tama2 = this%twires%TW(j)%N_TWC - ! if (tama2 == 1) then - ! call stoponerror(layoutnumber,size,'A WIRE must have at least two segments') - ! endif - ! - !esto no es ya necesario porque lo calculo yo luego en el wires - !!record the LeftEnd and RightEnd coordinates (first and last points) - !! - ! sgg%Med(contamedia)%wire(1)%LextremoI = this%twires%TW(j)%TWC(1)%i - ! sgg%Med(contamedia)%wire(1)%LextremoJ = this%twires%TW(j)%TWC(1)%j - ! sgg%Med(contamedia)%wire(1)%LextremoK = this%twires%TW(j)%TWC(1)%k - ! orientacionL = this%twires%TW(j)%TWC(1)%D - ! sgg%Med(contamedia)%wire(1)%RextremoI = this%twires%TW(j)%TWC(tama2)%i - ! sgg%Med(contamedia)%wire(1)%RextremoJ = this%twires%TW(j)%TWC(tama2)%j - ! sgg%Med(contamedia)%wire(1)%RextremoK = this%twires%TW(j)%TWC(tama2)%k - ! orientacionR = this%twires%TW(j)%TWC(tama2)%D - ! ! - !!correct each ending - ! numminus=0 - ! DO i = 2, tama2-1 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente - ! punto%XI = this%twires%TW(j)%TWC(i)%i - ! punto%YI = this%twires%TW(j)%TWC(i)%j - ! punto%ZI = this%twires%TW(j)%TWC(i)%k - ! orientacion = this%twires%TW(j)%TWC(i)%D - ! select case (orientacion) - ! case (iEx) - ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%LextremoJ).and. & - ! (punto%ZI == sgg%Med(contamedia)%wire(1)%LextremoK)) then - ! if ((orientacion /= orientacionL).and.(punto%XI == sgg%Med(contamedia)%wire(1)%LextremoI)) numminus=numminus +1 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente - ! if (punto%XI+1 == sgg%Med(contamedia)%wire(1)%LextremoI) numminus =numminus +1 - ! endif - ! case (iEy) - ! if ( (punto%XI == sgg%Med(contamedia)%wire(1)%LextremoI).and. & - ! (punto%ZI == sgg%Med(contamedia)%wire(1)%LextremoK)) then - ! if ((orientacion /= orientacionL).and.(punto%YI == sgg%Med(contamedia)%wire(1)%LextremoJ)) numminus=numminus +1 - ! if (punto%YI+1 == sgg%Med(contamedia)%wire(1)%LextremoJ) numminus =numminus +1 - ! endif - ! case (iEz) - ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%LextremoJ).and. & - ! (punto%XI == sgg%Med(contamedia)%wire(1)%LextremoI)) then - ! if ((orientacion /= orientacionL).and.(punto%ZI == sgg%Med(contamedia)%wire(1)%LextremoK)) numminus=numminus +1 - ! if (punto%ZI+1 == sgg%Med(contamedia)%wire(1)%LextremoK) numminus =numminus +1 - ! endif - ! end select - ! - ! END DO - ! if (numminus >= 1) then !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente - ! select case (this%twires%TW(j)%TWC(1)%D) - ! case (iEx) !si son iguales a 2 es cerrado - ! sgg%Med(contamedia)%wire(1)%LextremoI = sgg%Med(contamedia)%wire(1)%LextremoI + 1 - ! case (iEy) - ! sgg%Med(contamedia)%wire(1)%LextremoJ = sgg%Med(contamedia)%wire(1)%LextremoJ + 1 - ! case (iEz) - ! sgg%Med(contamedia)%wire(1)%LextremoK = sgg%Med(contamedia)%wire(1)%LextremoK + 1 - ! end select - ! endif - ! ! - !!correct each ending - ! numminus=0 - ! DO i = 2, tama2-1 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente - ! punto%XI = this%twires%TW(j)%TWC(i)%i - ! punto%YI = this%twires%TW(j)%TWC(i)%j - ! punto%ZI = this%twires%TW(j)%TWC(i)%k - ! orientacion = this%twires%TW(j)%TWC(i)%D - ! select case (orientacion) - ! case (iEx) - ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%RextremoJ).and. & - ! (punto%ZI == sgg%Med(contamedia)%wire(1)%RextremoK)) then - ! if ((orientacion /= orientacionR).and.(punto%XI == sgg%Med(contamedia)%wire(1)%RextremoI)) numminus=numminus +1 - ! if (punto%XI+1 == sgg%Med(contamedia)%wire(1)%RextremoI) numminus =numminus +1 - ! endif - ! case (iEy) - ! if ( (punto%XI == sgg%Med(contamedia)%wire(1)%RextremoI).and. & - ! (punto%ZI == sgg%Med(contamedia)%wire(1)%RextremoK)) then - ! if ((orientacion /= orientacionR).and.(punto%YI == sgg%Med(contamedia)%wire(1)%RextremoJ)) numminus=numminus +1 - ! if (punto%YI+1 == sgg%Med(contamedia)%wire(1)%RextremoJ) numminus =numminus +1 - ! endif - ! case (iEz) - ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%RextremoJ).and. & - ! (punto%XI == sgg%Med(contamedia)%wire(1)%RextremoI)) then - ! if ((orientacion /= orientacionR).and.(punto%ZI == sgg%Med(contamedia)%wire(1)%RextremoK)) numminus=numminus +1 - ! if (punto%ZI+1 == sgg%Med(contamedia)%wire(1)%RextremoK) numminus =numminus +1 - ! endif - ! end select - ! END DO - ! if ((numminus >= 1).or.(tama2 == 1)) then !bug ca295 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente - ! select case (this%twires%TW(j)%TWC(tama2)%D) - ! case (iEx) - ! sgg%Med(contamedia)%wire(1)%RextremoI = sgg%Med(contamedia)%wire(1)%RextremoI + 1 - !!si son iguales a 2 es cerrado - ! case (iEy) - ! sgg%Med(contamedia)%wire(1)%RextremoJ = sgg%Med(contamedia)%wire(1)%RextremoJ + 1 - ! case (iEz) - ! sgg%Med(contamedia)%wire(1)%RextremoK = sgg%Med(contamedia)%wire(1)%RextremoK + 1 - ! end select - ! endif - end do !del tama - - - !preanalisis de hilos embeddeds en materiales antes de asignarlos - tama = this%twires%n_tw - paraerrhilo=.false. - do j1=1, tama - tama2 = this%twires%TW(j1)%N_TWC - DO i1 = 1, tama2 - i=this%twires%TW(j1)%TWC(i1)%i - j=this%twires%TW(j1)%TWC(i1)%j - k=this%twires%TW(j1)%TWC(i1)%k - orientacion = this%twires%TW(j1)%TWC(i1)%D - OrigIndex= this%twires%TW(j1)%TWC(i1)%nd - IF ((i >= BoundingBox%XI) .AND. (i < BoundingBox%XE) .AND. & - & (j >= BoundingBox%YI) .AND. (j < BoundingBox%YE) .AND. & - & (k >= BoundingBox%ZI) .AND. (k < BoundingBox%ZE)) THEN - if (i > BoundingBox%XI) then - imenos1=i-1 - else - imenos1=i - endif - if (j > BoundingBox%YI) then - jmenos1=j-1 - else - jmenos1=j - endif - if (k > BoundingBox%ZI) then - kmenos1=k-1 - else - kmenos1=k - endif - select case (orientacion) - case (iEx) - if ((media%sggMiEx(i,j,k) ==0).or.(sgg%med(media%sggMiEx(i,j,k) )%is%pec)) then - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' embedded within PEC' - if (verbose) CALL WarnErrReport (buff) - elseif (media%sggMiEx(i,j,k) /= 1) then - islossy = (sgg%Med(media%sggMiEx(i,j,k))%Sigma /= 0.0_RKIND) - if (islossy) then - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k, & - ' embedded within LOSSY medium ', & - media%sggMiEx(i,j,k) - else - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' embedded within medium ', & - media%sggMiEx(i,j,k) - endif - if (verbose) CALL WarnErrReport (buff) - endif - if ((((media%sggMiEy(i ,j,k) ==0).or.(sgg%med(media%sggMiEy(i ,j,k) )%is%pec)).or. & - ((media%sggMiEz(i ,j,k) ==0).or.(sgg%med(media%sggMiEz(i ,j,k) )%is%pec)).or. & - ((media%sggMiEy(i ,jmenos1,k) ==0).or.(sgg%med(media%sggMiEy(i ,jmenos1,k) )%is%pec)).or. & - ((media%sggMiEz(i ,j,kmenos1) ==0).or.(sgg%med(media%sggMiEz(i ,j,kmenos1) )%is%pec))).and. & - & ((media%sggMiEx(i ,j,k) /=0).and.(.not.(sgg%med(media%sggMiEx(i ,j,k) )%is%pec)))) then - if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of x-WIRE at ',OrigIndex, i, j, k, & - ' touching PEC' - if (verbose) CALL WarnErrReport (buff) - else - continue - !WRITE (buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k,' touching PEC' - !if (verbose) CALL WarnErrReport (buff) - endif - elseif ((((media%sggMiEy(i+1,j,k) ==0).or.(sgg%med(media%sggMiEy(i+1,j,k) )%is%pec)).or.& - ((media%sggMiEz(i+1,j,k) ==0).or.(sgg%med(media%sggMiEz(i+1,j,k) )%is%pec)).or. & - ((media%sggMiEy(i+1,jmenos1,k) ==0).or.(sgg%med(media%sggMiEy(i+1,jmenos1,k) )%is%pec)).or. & - ((media%sggMiEz(i+1,j,kmenos1) ==0).or.(sgg%med(media%sggMiEz(i+1,j,kmenos1) )%is%pec))).and. & - & ((media%sggMiEx(i ,j,k) /=0).and.(.not.(sgg%med(media%sggMiEx(i ,j,k) )%is%pec)))) then - if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of x-WIRE at ',OrigIndex, i+1, j, k, & - ' touching PEC' - if (verbose) CALL WarnErrReport (buff) - else - continue - !WRITE (buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i+1, j, k,' touching PEC' - !if (verbose) CALL WarnErrReport (buff) - endif - elseif (((media%sggMiEy(i ,j,k) /= 1)).and. & - (media%sggMiEx(i ,j,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEy(i,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEz(i ,j,k) /= 1)).and. & - (media%sggMiEx(i ,j,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEz(i,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEy(i+1,j,k) /= 1)).and. & - (media%sggMiEx(i ,j,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i+1, j, k,' touching medium ', & - & media%sggMiEy(i+1,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEz(i+1,j,k) /= 1)).and. & - (media%sggMiEx(i ,j,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i+1, j, k,' touching medium ', & - & media%sggMiEz(i+1,j,k) - if (verbose) CALL WarnErrReport (buff) - endif - case (iEy) - if ((media%sggMiEy(i,j,k) ==0).or.(sgg%med(media%sggMiEy(i,j,k) )%is%pec)) then - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' embedded within PEC' - if (verbose) CALL WarnErrReport (buff) - elseif (media%sggMiEy(i,j,k) /= 1) then - islossy = (sgg%Med(media%sggMiEy(i,j,k))%Sigma /= 0.0_RKIND) - if (islossy) then - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: Y-WIRE at ',OrigIndex, i, j, k,' embedded within LOSSY medium ', & - media%sggMiEY(i,j,k) - else - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' embedded within medium ', & - media%sggMiEy(i,j,k) - ENDIF - if (verbose) CALL WarnErrReport (buff) - endif - if ((((media%sggMiEx(i,j ,k) ==0).or.(sgg%med(media%sggMiEx(i,j ,k) )%is%pec)).or. & - ((media%sggMiEz(i,j,k ) ==0).or.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec)).or. & - ((media%sggMiEx(imenos1,j ,k) ==0).or.(sgg%med(media%sggMiEx(imenos1,j ,k) )%is%pec)).or. & - ((media%sggMiEz(i,j,kmenos1 ) ==0).or.(sgg%med(media%sggMiEz(i,j,kmenos1 ) )%is%pec))).and. & - & ((media%sggMiEy(i,j ,k) /=0).and.(.not.(sgg%med(media%sggMiEy(i,j ,k) )%is%pec)))) then - if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of y-WIRE at ',OrigIndex, i, j, k, & - ' touching PEC' - if (verbose) CALL WarnErrReport (buff) - else - continue - !WRITE (buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k,' touching PEC' - !if (verbose) CALL WarnErrReport (buff) - endif - elseif ((((media%sggMiEx(i,j+1,k) ==0).or.(sgg%med(media%sggMiEx(i,j+1,k) )%is%pec)).or. & - ((media%sggMiEz(i,j+1,k) ==0).or.(sgg%med(media%sggMiEz(i,j+1,k) )%is%pec)).or. & - ((media%sggMiEx(imenos1,j+1,k) ==0).or.(sgg%med(media%sggMiEx(imenos1,j+1,k) )%is%pec)).or. & - ((media%sggMiEz(i,j+1,kmenos1) ==0).or.(sgg%med(media%sggMiEz(i,j+1,kmenos1) )%is%pec))).and. & - & ((media%sggMiEy(i,j ,k) /=0).and.(.not.(sgg%med(media%sggMiEy(i,j ,k) )%is%pec)))) then - if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of y-WIRE at ',OrigIndex, i, j+1, k, & - ' touching PEC' - if (verbose) CALL WarnErrReport (buff) - else - continue - !WRITE (buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j+1, k,' touching PEC' - !if (verbose) CALL WarnErrReport (buff) - endif - elseif (((media%sggMiEx(i,j ,k) /= 1)).and. & - & (media%sggMiEy(i,j ,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEx(i,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEz(i,j ,k) /= 1)).and. & - & (media%sggMiEy(i,j ,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEz(i,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEx(i,j+1,k) /= 1)).and. & - & (media%sggMiEy(i,j ,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j+1, k,' touching medium ', & - & media%sggMiEx(i,j+1,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEz(i,j+1,k) /= 1)).and. & - & (media%sggMiEy(i,j ,k) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j+1, k,' touching medium ', & - & media%sggMiEz(i,j+1,k) - if (verbose) CALL WarnErrReport (buff) - endif - case (iEz) - if ((media%sggMiEz(i,j,k) ==0).or.(sgg%med(media%sggMiEz(i,j,k) )%is%pec)) then - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' embedded within PEC' - if (verbose) CALL WarnErrReport (buff) - elseif (media%sggMiEz(i,j,k) /= 1) then - islossy = (sgg%Med(media%sggMiEz(i,j,k))%Sigma /= 0.0_RKIND) - if (islossy) then - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: Y-WIRE at ',OrigIndex, i, j, k, & - ' embedded within LOSSY medium ', & - media%sggMiEz(i,j,k) - else - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' embedded within medium ', & - media%sggMiEz(i,j,k) - ENDIF - if (verbose) CALL WarnErrReport (buff) - endif - if ((((media%sggMiEx(i,j,k ) ==0).or.(sgg%med(media%sggMiEx(i,j,k ) )%is%pec)).or. & - ((media%sggMiEy(i,j,k ) ==0).or.(sgg%med(media%sggMiEy(i,j,k ) )%is%pec)).or. & - ((media%sggMiEx(imenos1,j,k ) ==0).or.(sgg%med(media%sggMiEx(imenos1,j,k ) )%is%pec)).or. & - ((media%sggMiEy(i,jmenos1,k ) ==0).or.(sgg%med(media%sggMiEy(i,jmenos1,k ) )%is%pec))).and. & - & ((media%sggMiEz(i,j,k ) /=0).and.(.not.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec)))) then - if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of z-WIRE at ',OrigIndex, i, j, k, & - ' touching PEC' - if (verbose) CALL WarnErrReport (buff) - else - continue - !WRITE (buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k,' touching PEC' - !if (verbose) CALL WarnErrReport (buff) - endif - elseif ((((media%sggMiEx(i,j ,k+1) ==0).or.(sgg%med(media%sggMiEx(i,j ,k+1) )%is%pec)).or. & - ((media%sggMiEy(i,j ,k+1) ==0).or.(sgg%med(media%sggMiEy(i,j ,k+1) )%is%pec)).or. & - & ((media%sggMiEx(imenos1,j,k+1) ==0).or.(sgg%med(media%sggMiEx(imenos1,j,k+1) )%is%pec)).or. & - ((media%sggMiEy(i,jmenos1,k+1) ==0).or.(sgg%med(media%sggMiEy(i,jmenos1,k+1) )%is%pec))).and. & - & (((media%sggMiEz(i,j,k ) /=0).and.(.not.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec))).or.(.not.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec)))) then - if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar - paraerrhilo=.true. - WRITE (buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of z-WIRE at ',OrigIndex, i, j, k+1, & - ' touching PEC' - if (verbose) CALL WarnErrReport (buff) - else - continue - !WRITE (buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k+1,' touching PEC' - !if (verbose) CALL WarnErrReport (buff) - endif - elseif (((media%sggMiEx(i,j,k ) /= 1)).and. & - & (media%sggMiEz(i,j,k ) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEx(i,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEy(i,j,k ) /= 1)).and. & - & (media%sggMiEz(i,j,k ) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEy(i,j,k) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEy(i,j,k+1) /= 1)).and. & - & (media%sggMiEz(i,j,k ) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEy(i,j,k+1) - if (verbose) CALL WarnErrReport (buff) - elseif (((media%sggMiEx(i,j,k+1) /= 1)).and. & - & (media%sggMiEz(i,j,k ) == 1)) then - WRITE (buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & - & media%sggMiEx(i,j,k+1) - if (verbose) CALL WarnErrReport (buff) - endif - end select - endif - end do - end do - !lo dejo que siga !luego el wires parara - !if (paraerrhilo.and.(.not.groundwires)) then - ! buff='Revise WIRE intersections!' - ! call STOPONERROR(layoutnumber,size,buff) - !endif - !end preanalisis - !perform the assignments - bboxwirxi= 2**20 - bboxwirxe=-(2**20) - bboxwirYi= 2**20 - bboxwirYe=-(2**20) - bboxwirZi= 2**20 - bboxwirZe=-(2**20) - contamedia = oldcontamedia - tama = this%twires%n_tw - DO j = 1, tama - contamedia = contamedia + 1 - tama2 = this%twires%TW(j)%N_TWC - TAMA2BIS=0 - DO i = 1, tama2 - punto%XI = this%twires%TW(j)%TWC(i)%i - punto%XE = this%twires%TW(j)%TWC(i)%i - punto%YI = this%twires%TW(j)%TWC(i)%j - punto%YE = this%twires%TW(j)%TWC(i)%j - punto%ZI = this%twires%TW(j)%TWC(i)%k - punto%ZE = this%twires%TW(j)%TWC(i)%k - !!!!!!!!!los clipeo agresivamente si lo lanzo con -CLIPREGION para que no me den problema 06/07/15 (solo sirve para debugeo y con el -wiresflavor holland (old)) - if (((punto%XI-2 > SINPML_fullsize(iHx)%XI).and.(punto%XI+2 < SINPML_fullsize(iHx)%XE).and. & - (punto%YI-2 > SINPML_fullsize(iHy)%YI).and.(punto%YI+2 < SINPML_fullsize(iHy)%YE).and. & - (punto%ZI-2 > SINPML_fullsize(iHz)%ZI).and.(punto%zI+2 < SINPML_fullsize(iHz)%ZE).and. & - (punto%XE-2 > SINPML_fullsize(iHx)%XI).and.(punto%Xe+2 < SINPML_fullsize(iHx)%XE).and. & - (punto%YE-2 > SINPML_fullsize(iHy)%YI).and.(punto%Ye+2 < SINPML_fullsize(iHy)%YE).and. & - (punto%ZE-2 > SINPML_fullsize(iHz)%ZI).and.(punto%Ze+2 < SINPML_fullsize(iHz)%ZE)).or.(.not.CLIPREGION)) TAMA2BIS=TAMA2bis+1 - end do - ! - ALLOCATE (sgg%Med(contamedia)%wire(1)%segm(1:TAMA2BIS)) - sgg%Med(contamedia)%wire(1)%numsegmentos = TAMA2BIS - ALLOCATE (sgg%Med(contamedia)%wire(1)%VSource(1:TAMA2BIS)) - ALLOCATE (sgg%Med(contamedia)%wire(1)%ISource(1:TAMA2BIS)) - CONTAVOLT=0 - CONTACURR=0 - - TAMA2BIS=0 - hilosbarre: DO i = 1, tama2 - punto%XI = this%twires%TW(j)%TWC(i)%i - punto%XE = this%twires%TW(j)%TWC(i)%i - punto%YI = this%twires%TW(j)%TWC(i)%j - punto%YE = this%twires%TW(j)%TWC(i)%j - punto%ZI = this%twires%TW(j)%TWC(i)%k - punto%ZE = this%twires%TW(j)%TWC(i)%k -!!!sgg250418 -!!!bug 2018 -!!bug que aparece cuando en hilos de dos segmentos con ambos identicos. Lo que hago es clipearlo directamente. - if ((i==2).and.(tama2==2)) then - if (((this%twires%TW(j)%TWC(i)%i).eq.(this%twires%TW(j)%TWC(i-1)%i)).and. & - ((this%twires%TW(j)%TWC(i)%j).eq.(this%twires%TW(j)%TWC(i-1)%j)).and. & - ((this%twires%TW(j)%TWC(i)%k).eq.(this%twires%TW(j)%TWC(i-1)%k)).and. & - ((this%twires%TW(j)%TWC(i)%D).eq.(this%twires%TW(j)%TWC(i-1)%D))) then - sgg%Med(contamedia)%wire(1)%numsegmentos = 1 - WRITE (buff, '(a,1i7,a)') 'pre1_SEVEREWARNING: removing a repeteated segment from a 2-segment wire. Index= ',this%twires%TW(j)%TWC(i)%nd,'. Double check that no wire probes was attached to it' - CALL WarnErrReport (buff) - exit hilosbarre - endif - endif -!!!fin 250418 - - !!!!!!!!!los clipeo agresivamente si lo lanzo con -CLIPREGION para que no me den problema 06/07/15 (solo sirve para debugeo y con el -wiresflavor holland (old)) - if (.not. & - (((punto%XI-2 > SINPML_fullsize(iHx)%XI).and.(punto%XI+2 < SINPML_fullsize(iHx)%XE).and. & - (punto%YI-2 > SINPML_fullsize(iHy)%YI).and.(punto%YI+2 < SINPML_fullsize(iHy)%YE).and. & - (punto%ZI-2 > SINPML_fullsize(iHz)%ZI).and.(punto%zI+2 < SINPML_fullsize(iHz)%ZE).and. & - (punto%XE-2 > SINPML_fullsize(iHx)%XI).and.(punto%Xe+2 < SINPML_fullsize(iHx)%XE).and. & - (punto%YE-2 > SINPML_fullsize(iHy)%YI).and.(punto%Ye+2 < SINPML_fullsize(iHy)%YE).and. & - (punto%ZE-2 > SINPML_fullsize(iHz)%ZI).and.(punto%Ze+2 < SINPML_fullsize(iHz)%ZE)).or.(.not.CLIPREGION)) ) CYCLE hilosbarre - - TAMA2BIS=TAMA2BIS+1 - orientacion = this%twires%TW(j)%TWC(i)%D - origindex= this%twires%TW(j)%TWC(i)%nd - ! - ! - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%i = punto%XI - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%j = punto%YI - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%k = punto%ZI - - !!!2014 para informacion bbox hilos - if (punto%XI < bboxwirxi) bboxwirXI=punto%XI - if (punto%XE > bboxwirxE) bboxwirXE=punto%XE - if (punto%YI < bboxwirYi) bboxwirYI=punto%YI - if (punto%YE > bboxwirYE) bboxwirYE=punto%YE - if (punto%ZI < bboxwirZi) bboxwirZI=punto%ZI - if (punto%ZE > bboxwirZE) bboxwirZE=punto%ZE - !!!!!! - - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%ori = orientacion - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%origindex = origindex - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_LeftEnd = .false. - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_RightEnd = .false. - sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%repetido = .false. !luego el preprocesador del wires cambia esto - if (i==1) sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_LeftEnd = .true. - if (i==tama2) sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_RightEnd = .true. - ! - isathinwire = .TRUE. - numertag = searchtag(tagtype,this%twires%TW(j)%TWC(i)%tag) - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'VOLT') .OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'CURR').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTVOLT').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTCURR').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDVOLT').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDCURR')) THEN - !!!!!!!!!!!!! - IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'VOLT').OR. & - (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTVOLT')) THEN - CONTAVOLT=CONTAVOLT+1 - sgg%Med(contamedia)%wire(1)%VsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%SOFT=.TRUE. - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 0.0_RKIND - !not provided by .nfde but supported by the simulation though untested - ! - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%i = this%twires%TW(j)%TWC(i)%i - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%j = this%twires%TW(j)%TWC(i)%j - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%k = this%twires%TW(j)%TWC(i)%k - ELSE IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'CURR').OR. & - (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDCURR')) THEN - CONTAVOLT=CONTAVOLT+1 - CALL WarnErrReport (buff) - ! CALL STOPONERROR(layoutnumber,size,buff) - sgg%Med(contamedia)%wire(1)%VsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%SOFT=.FALSE. !230323 FUENTES DURAS Y FALSAS SGG - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 0.0_RKIND - !not provided by .nfde but supported by the simulation though untested - ! - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%i = this%twires%TW(j)%TWC(i)%i - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%j = this%twires%TW(j)%TWC(i)%j - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%k = this%twires%TW(j)%TWC(i)%k - ELSEIF (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDVOLT') THEN - CONTACURR=CONTACURR+1 - sgg%Med(contamedia)%wire(1)%IsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%SOFT=.FALSE. !230323 FUENTES DURAS Y FALSAS SGG - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Resistance = 0.0_RKIND - !not provided by .nfde but supported by the simulation though untested - ! - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%i = this%twires%TW(j)%TWC(i)%i - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%j = this%twires%TW(j)%TWC(i)%j - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%k = this%twires%TW(j)%TWC(i)%k - ELSE IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTCURR')) THEN - CONTACURR=CONTACURR+1 - CALL WarnErrReport (buff) - ! CALL STOPONERROR(layoutnumber,size,buff) - sgg%Med(contamedia)%wire(1)%IsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%SOFT=.true. !230323 FUENTES DURAS Y FALSAS SGG - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Resistance = 0.0_RKIND - !not provided by .nfde but supported by the simulation though untested - ! - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%i = this%twires%TW(j)%TWC(i)%i - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%j = this%twires%TW(j)%TWC(i)%j - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%k = this%twires%TW(j)%TWC(i)%k - END IF - ELSEIF (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) /= 'None') THEN - write(buff,*) 'WRONG type of wire source '//trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) - call stoponerror (layoutnumber,size,buff) - END IF - END DO hilosbarre - sgg%Med(contamedia)%wire(1)%NUMVOLTAGESOURCES=CONTAVOLT - sgg%Med(contamedia)%wire(1)%NUMCURRENTSOURCES=CONTACURR - !wires - END DO - -!!!ahora slanted - - if (this%swires%n_sw /=0) then - hay_slanted_wires=.true. - else - hay_slanted_wires=.false. - endif - - !SLANTED WIRES - do j = 1,this%swires%n_sw - contamedia = contamedia + 1 - ALLOCATE (sgg%Med(contamedia)%SlantedWire(1)) - - sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr - sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma - sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur - sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM - sgg%Med(contamedia)%Is%SlantedWire = .TRUE. - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - sgg%Med(contamedia)%SlantedWire(1)%radius = this%swires%SW(j)%RAD - if (boundwireradius) then - if (sgg%Med(contamedia)%SlantedWire(1)%radius > maxwireradius) sgg%Med(contamedia)%SlantedWire(1)%radius=maxwireradius - endif - sgg%Med(contamedia)%SlantedWire(1)%R = this%swires%SW(j)%res - sgg%Med(contamedia)%SlantedWire(1)%L = this%swires%SW(j)%ind - sgg%Med(contamedia)%SlantedWire(1)%C = this%swires%SW(j)%cap - sgg%Med(contamedia)%SlantedWire(1)%P_R = this%swires%SW(j)%P_res - sgg%Med(contamedia)%SlantedWire(1)%P_L = this%swires%SW(j)%P_ind - sgg%Med(contamedia)%SlantedWire(1)%P_C = this%swires%SW(j)%P_cap - - if (this%swires%SW(j)%disp) then - allocate (sgg%Med(contamedia)%SlantedWire(1)%disp(1)) - call asignawiredisper(sgg%Med(contamedia)%SlantedWire(1)%disp(1), & - this%swires%SW(j)%dispfile) - end if - - sgg%Med(contamedia)%SlantedWire(1)%LeftEnd = this%swires%SW(j)%LeftEnd - sgg%Med(contamedia)%SlantedWire(1)%RightEnd = this%swires%SW(j)%RightEnd - - sgg%Med(contamedia)%SlantedWire(1)%HasParallel_LeftEnd = .FALSE. - sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%HasParallel_RightEnd = .FALSE. - sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%HasSeries_LeftEnd = .FALSE. - sgg%Med(contamedia)%SlantedWire(1)%Series_R_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Series_L_LeftEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Series_C_LeftEnd = 2.0e7_RKIND !en corto 14/2/14 - sgg%Med(contamedia)%SlantedWire(1)%HasSeries_RightEnd = .FALSE. - sgg%Med(contamedia)%SlantedWire(1)%Series_R_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Series_L_RightEnd = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%Series_C_RightEnd = 2.0e7_RKIND !en corto 14/2/14 - - IF (this%swires%sw(j)%TL == Parallel_CONS) THEN - sgg%Med(contamedia)%SlantedWire(1)%HasParallel_LeftEnd = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_LeftEnd = this%swires%sw(j)%R_LeftEnd - sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_LeftEnd = this%swires%sw(j)%L_LeftEnd - sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_LeftEnd = this%swires%sw(j)%C_LeftEnd - ELSE IF (this%swires%sw(j)%TL == SERIES_CONS) THEN - sgg%Med(contamedia)%SlantedWire(1)%HasSeries_LeftEnd = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%Series_R_LeftEnd = this%swires%sw(j)%R_LeftEnd - sgg%Med(contamedia)%SlantedWire(1)%Series_L_LeftEnd = this%swires%sw(j)%L_LeftEnd - sgg%Med(contamedia)%SlantedWire(1)%Series_C_LeftEnd = this%swires%sw(j)%C_LeftEnd - ELSE IF (this%swires%SW(j)%TL == DISPERSIVE_CONS) THEN - allocate (sgg%Med(contamedia)%SlantedWire(1)%disp_LeftEnd(1)) - call asignawiredisper(sgg%Med(contamedia)%SlantedWire(1)%disp_LeftEnd(1), & - this%swires%SW(j)%dispfile_LeftEnd) - END IF - IF (this%swires%sw(j)%TR == Parallel_CONS) THEN - sgg%Med(contamedia)%SlantedWire(1)%HasParallel_RightEnd = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_RightEnd = this%swires%sw(j)%R_RightEnd - sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_RightEnd = this%swires%sw(j)%L_RightEnd - sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_RightEnd = this%swires%sw(j)%C_RightEnd - ELSE IF (this%swires%sw(j)%TR == SERIES_CONS) THEN - sgg%Med(contamedia)%SlantedWire(1)%HasSeries_RightEnd = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%Series_R_RightEnd = this%swires%sw(j)%R_RightEnd - sgg%Med(contamedia)%SlantedWire(1)%Series_L_RightEnd = this%swires%sw(j)%L_RightEnd - sgg%Med(contamedia)%SlantedWire(1)%Series_C_RightEnd = this%swires%sw(j)%C_RightEnd - ELSE IF (this%swires%SW(j)%TR == DISPERSIVE_CONS) THEN - allocate (sgg%Med(contamedia)%SlantedWire(1)%disp_RightEnd(1)) - call asignawiredisper(sgg%Med(contamedia)%SlantedWire(1)%disp_RightEnd(1), & - this%swires%SW(j)%dispfile_RightEnd) - END IF - - sgg%Med(contamedia)%SlantedWire(1)%numNodes = this%swires%SW(j)%n_swc - allocate(sgg%Med(contamedia)%SlantedWire(1)%nodes(1:this%swires%SW(j)%n_swc)) - do i = 1,this%swires%SW(j)%n_swc - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .FALSE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .FALSE. - nullify(sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource, & - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) - - - !!!2019 clipeo 2 celdas antes - if (CLIPREGION) then - if ((this%swires%SW(j)%swc(i)%x >= SINPML_Fullsize(iHx)%XE-2)) this%swires%SW(j)%swc(i)%x=SINPML_Fullsize(iHx)%XE-2 - if ((this%swires%SW(j)%swc(i)%x <= SINPML_Fullsize(iHx)%XI+2)) this%swires%SW(j)%swc(i)%x=SINPML_Fullsize(iHx)%XI+2 - if ((this%swires%SW(j)%swc(i)%y >= SINPML_Fullsize(iHy)%YE-2)) this%swires%SW(j)%swc(i)%y=SINPML_Fullsize(iHy)%YE-2 - if ((this%swires%SW(j)%swc(i)%y <= SINPML_Fullsize(iHy)%YI+2)) this%swires%SW(j)%swc(i)%y=SINPML_Fullsize(iHy)%YI+2 - if ((this%swires%SW(j)%swc(i)%z >= SINPML_Fullsize(iHz)%ZE-2)) this%swires%SW(j)%swc(i)%z=SINPML_Fullsize(iHz)%ZE-2 - if ((this%swires%SW(j)%swc(i)%z <= SINPML_Fullsize(iHz)%ZI+2)) this%swires%SW(j)%swc(i)%z=SINPML_Fullsize(iHz)%ZI+2 - endif - - !fin clipeo - - - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%index = this%swires%SW(j)%swc(i)%nd - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%x = this%swires%SW(j)%swc(i)%x - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%y = this%swires%SW(j)%swc(i)%y - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%z = this%swires%SW(j)%swc(i)%z - numertag = searchtag(tagtype,this%swires%SW(j)%swc(i)%tag) - - - !!!2019 para informacion bbox hilos - !!!!!!2020 retocado - if ( int(this%swires%SW(j)%swc(i)%x) < bboxwirxi) bboxwirXI=int(this%swires%SW(j)%swc(i)%x) - if ( int(this%swires%SW(j)%swc(i)%x)+1 > bboxwirxE) bboxwirXE=int(this%swires%SW(j)%swc(i)%x)+1 - if ( int(this%swires%SW(j)%swc(i)%y) < bboxwirYi) bboxwirYI=int(this%swires%SW(j)%swc(i)%y) - if ( int(this%swires%SW(j)%swc(i)%y)+1 > bboxwirYE) bboxwirYE=int(this%swires%SW(j)%swc(i)%y)+1 - if ( int(this%swires%SW(j)%swc(i)%z) < bboxwirZi) bboxwirZI=int(this%swires%SW(j)%swc(i)%z) - if ( int(this%swires%SW(j)%swc(i)%z)+1 > bboxwirZE) bboxwirZE=int(this%swires%SW(j)%swc(i)%z)+1 - !!!!!! - - - IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'VOLT').or. & - (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'SOFTVOLT')) THEN - allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource) - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%SOFT=.TRUE. !fuentes duras sgg 230323. default blandas - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%Multiplier = this%swires%SW(j)%swc(i)%m - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%Resistance = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - ELSE IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'CURR').OR. & - (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'HARDCURR')) THEN !EQUIVALENTES A IMPLEMENTAR UNA DE voltage - allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource) - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%SOFT=.FALSE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%Multiplier = this%swires%SW(j)%swc(i)%m - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%Resistance = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - ELSEIF (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'HARDVOLT') THEN !EQUIVALENTES A IMPLEMENTAR UNA DE Corriente - allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%SOFT=.FALSE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%Multiplier = this%swires%SW(j)%swc(i)%m - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%Resistance = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - ELSE IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'SOFTCURR')) THEN - allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%SOFT=.TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%Multiplier = this%swires%SW(j)%swc(i)%m - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%Resistance = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - elseIF (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) /= 'None') THEN - write(buff,*) 'WRONG type of wire source '//trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) - call stoponerror (layoutnumber,size,buff) - END IF - end do - end do - !END SLANTED WIRES - - do j = 1, ubound(conformal_volumes,1) - - call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, volume_side_maps(j), isVolume) - numertag = searchtag(tagtype,conformal_volumes(j)%tag) - CALL CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, conf_bounding_box, 0) - - end do - - if (ubound(conformal_volumes, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - end if - ! faces from V and S with same ratio are considered different media, bc they need to perform different operations - do j = 1, ubound(conformal_surfaces,1) - call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) - - end do - - if (ubound(conformal_surfaces, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - end if - -#ifdef CompileWithMTLN - block - class(cable_t), pointer :: ptr - do j = 1, this%mtln%n_sh + this%mtln%n_unsh - ptr => this%mtln%cables(j)%ptr - select type(ptr) - type is(unshielded_multiwire_t) - contamedia = contamedia + 1 - allocate(sgg%Med(contamedia)%multiwire(1)) - sgg%Med(contamedia)%Priority = prior_TW - sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr - sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma - sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur - sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM - sgg%Med(contamedia)%Is%Multiwire = .TRUE. - - isathinwire = .FALSE. - numertag = searchtag(tagtype,this%mtln%cables(j)%ptr%tag) - do k = 1, ptr%n_segments - punto%xi = ptr%segments(k)%x - punto%xe = ptr%segments(k)%x - punto%yi = ptr%segments(k)%y - punto%ye = ptr%segments(k)%y - punto%zi = ptr%segments(k)%z - punto%ze = ptr%segments(k)%z - orientacion = ptr%segments(k)%orientation - call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - & contamedia, isathinwire,verbose,numeroasignaciones) - end do - end select - end do - end block -#endif - - !reporta el bounding box - -#ifdef CompileWithMPI - call MPI_BARRIER(MPI_COMM_WORLD,ierr) - call MPI_AllReduce( bboxwirXI, dummy_bboxwirXI, 1_4, MPI_INTEGER, MPI_MIN, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( bboxwirYI, dummy_bboxwirYI, 1_4, MPI_INTEGER, MPI_MIN, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( bboxwirZI, dummy_bboxwirzI, 1_4, MPI_INTEGER, MPI_MIN, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( bboxwirXE, dummy_bboxwirXE, 1_4, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( bboxwirYE, dummy_bboxwirYE, 1_4, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, ierr) - call MPI_AllReduce( bboxwirZE, dummy_bboxwirZE, 1_4, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, ierr) - call MPI_BARRIER(MPI_COMM_WORLD,ierr) - bboxwirXI=dummy_bboxwirXI - bboxwirYI=dummy_bboxwirYI - bboxwirzI=dummy_bboxwirzI - bboxwirXE=dummy_bboxwirXE - bboxwirYE=dummy_bboxwirYE - bboxwirZE=dummy_bboxwirZE -#endif - WRITE (buff, '(a, 6I12)') 'pre1_INFO: Bounding Box for WIREs min_x,min_y,min_z, MAX_x,MAX_y,MAX_z',bboxwirXI,bboxwirYI,bboxwirZI,bboxwirXE,bboxwirYE,bboxwirZE - if (((bboxwirXI<2**20).or.(bboxwirYI<2**20).or.(bboxwirZI<2**20).or.(bboxwirXE>-(2**20)).or.(bboxwirYE>-(2**20)).or.(bboxwirZE>-(2**20))).or.(VERBOSE)) then - CALL WarnErrReport (buff) - ENDIF - !FIN WIRES - - if (run_with_dmma) then - !always at the end since the orientation is found from the PEC one - !thin Slots - !the embedding material properties are also if also needed - tama = this%tSlots%n_tg - ! - DO j = 1, tama - ! - ! - tama2 = this%tSlots%Tg(j)%N_tgc - DO i = 1, tama2 - !del Slot - direccion = this%tSlots%Tg(j)%TgC(i)%dir - i1 = this%tSlots%Tg(j)%TgC(i)%i - j1 = this%tSlots%Tg(j)%TgC(i)%j - k1 = this%tSlots%Tg(j)%TgC(i)%k - ORIX=.FALSE. ; ORIY=.FALSE. ; ORIZ=.FALSE. ; - ORIX2=.FALSE. ; ORIY2=.FALSE. ; ORIZ2=.FALSE. ; - ORIX3=.FALSE. ; ORIY3=.FALSE. ; ORIZ3=.FALSE. ; - ORIX4=.FALSE. ; ORIY4=.FALSE. ; ORIZ4=.FALSE. ; - ! - IF ((i1 >= BoundingBox%XI) .AND. (i1 < BoundingBox%XE) .AND. & - & (j1 >= BoundingBox%YI) .AND. (j1 < BoundingBox%YE) .AND. & - & (k1 >= BoundingBox%ZI) .AND. (k1 < BoundingBox%ZE)) THEN - !encuentra la orientacion del plano PEC que contiene al Slot - oriX = (direccion == iEy) .AND. & - & (((media%sggMiHx(i1, j1, k1) ==0).or.(sgg%med(media%sggMiHx(i1, j1, k1) )%is%pec)) .OR. & - & (sgg%Med(media%sggMiHx(i1, j1, k1))%Is%ThinSlot)) !& - !& .AND. (((sggmiHz(i1, j1, k1) /=0).and.(.not.(sgg%med(sggmiHz(i1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHz(i1, j1,k1))%Is%ThinSlot)) - - oriX4 =(direccion == iEz) .AND. & - & ((( media%sggMiHx(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHx(i1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHx(i1, j1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHy(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHy(i1, j1, k1))%Is%ThinSlot)) - - oriY = (direccion == iEx) .AND. & - & ((( media%sggMiHy(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHy(i1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHy(i1, j1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHz(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHz(i1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHz(i1, j1, k1))%Is%ThinSlot)) - - oriY4 =(direccion == iEz) .AND. & - & ((( media%sggMiHy(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHy(i1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHy(i1, j1, k1))%Is%ThinSlot)) !& - !& .AND.((( sggmiHx(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHx(i1, j1, k1))%Is%ThinSlot)) - - oriZ = (direccion == iEx) .AND. & - & ((( media%sggMiHz(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHz(i1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHz(i1, j1, k1))%Is%ThinSlot)) !& - !& ((( sggmiHy(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1, k1) )%is%pec))) .AND. & - !& (.NOT. sgg%Med(sggmiHy(i1, j1, k1))%Is%ThinSlot)) - - oriZ4 = (direccion == iEy) .AND. & - & ((( media%sggMiHz(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHz(i1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHz(i1, j1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHx(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHx(i1, j1, k1))%Is%ThinSlot)) - - !encuentra la orientacion del plano PEC que contiene al Slot (considera los vecinos) - oriX2 = (direccion == iEy) .AND. & - & ((( media%sggMiHx(i1, j1, k1-1) ==0).or.(sgg%med( media%sggMiHx(i1, j1, k1-1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHx(i1, j1, k1-1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHz(i1, j1, k1-1) /=0).and.(.not.(sgg%med( sggmiHz(i1, j1, k1-1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHz(i1, j1, k1-1))%Is%ThinSlot)) - - oriX3 = (direccion == iEz) .AND. & - & ((( media%sggMiHx(i1, j1-1, k1) ==0).or.(sgg%med( media%sggMiHx(i1, j1-1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHx(i1, j1-1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHy(i1, j1-1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1-1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHy(i1, j1-1, k1))%Is%ThinSlot)) - - oriY2 = (direccion == iEx) .AND. & - & ((( media%sggMiHy(i1, j1, k1-1) ==0).or.(sgg%med( media%sggMiHy(i1, j1, k1-1) )%is%pec)) .OR. & - & (sgg%Med( media%sggMiHy(i1, j1, k1-1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHz(i1, j1, k1-1) /=0).and.(.not.(sgg%med( sggmiHz(i1, j1, k1-1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHz(i1, j1, k1-1))%Is%ThinSlot)) - - oriY3 = (direccion == iEz) .AND. & - & ((( media%sggMiHy(i1-1, j1, k1) ==0).or.(sgg%med( media%sggMiHy(i1-1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHy(i1-1, j1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHx(i1-1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1-1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHx(i1-1, j1, k1))%Is%ThinSlot)) - - oriZ2 = (direccion == iEx) .AND. & - & ((( media%sggMiHz(i1, j1-1, k1) ==0).or.(sgg%med( media%sggMiHz(i1, j1-1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHz(i1, j1-1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHy(i1, j1-1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1-1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHy(i1, j1-1, k1))%Is%ThinSlot)) - - - oriZ3 = (direccion == iEy) .AND. & - & ((( media%sggMiHz(i1-1, j1, k1) ==0).or.(sgg%med( media%sggMiHz(i1-1, j1, k1) )%is%pec)) .OR. & - & ( sgg%Med(media%sggMiHz(i1-1, j1, k1))%Is%ThinSlot)) !& - !& .AND. ((( sggmiHx(i1-1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1-1, j1, k1) )%is%pec))) .AND. & - !& ( .NOT. sgg%Med(sggmiHx(i1-1, j1, k1))%Is%ThinSlot)) - - IF (oriX.or.oriX4) THEN - orientacion = iEx - ELSE IF (oriY.or.oriY4) THEN - orientacion = iEy - ELSE IF (oriZ.or.oriZ4) THEN - orientacion = iEz - !vecinos - else IF (oriX2) THEN - orientacion = iEx - k1 = k1-1 - ELSE IF (oriY2) THEN - orientacion = iEy - k1 = k1-1 - ELSE IF (oriZ2) THEN - orientacion = iEz - j1 = j1-1 - !vecinos - else IF (oriX3) THEN - orientacion = iEx - j1 = j1-1 - ELSE IF (oriY3) THEN - orientacion = iEy - i1 = i1-1 - ELSE IF (oriZ3) THEN - orientacion = iEz - i1 = i1-1 - ELSE - write(buff,*) 'Cannot determine ortientation of the PEC plane with the Slot',i1, j1, k1, direccion - call stoponerror (layoutnumber,size,buff) - !ojo con el nfde no se puede hacer Slots en escalera porque no se puede determinar la orientacion de los planos - !en los tramos comunes. Por tanto No he podido testear los shared electricos anisotropos. solo los magneticos - END IF - - this%tSlots%Tg(j)%TgC(i)%or = orientacion - medio2=-1 - medio1=-1 - SELECT CASE (Abs(orientacion)) - CASE (iEx) - medio1 = media%sggMiHx(i1,j1,k1) !!!sggmcen (i1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix !puede que me haya cargado los thin-slots en materialescon esto 03/07/15 - IF (i1 > BoundingBox%XI) then - medio2 = media%sggMiHx(i1-1,j1,k1) !!!sggmcen (i1-1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix - else - medio2=medio1 - endif - CASE (iEy) - medio1 = media%sggMiHy(i1,j1,k1) !!!sggmcen (i1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix - IF (j1 > BoundingBox%YI) then - medio2 = media%sggMiHy(i1,j1-1,k1) !!!sggmcen (i1, j1-1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix - else - medio2=medio1 - endif - CASE (iEz) - medio1 = media%sggMiHz(i1,j1,k1) !!!sggmcen (i1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix - IF (k1 > BoundingBox%ZI) then - medio2 = media%sggMiHz(i1,j1,k1-1) !!! sggmcen (i1, j1, k1-1) !tocaco 03/07/15 para lo eliminar lo de los media matrix - else - medio2=medio1 - endif - END SELECT - - IF ( ((sgg%Med(medio1)%Is%Dielectric).or.(sgg%Med(medio1)%Is%Thinslot).or.(sgg%Med(medio1)%Is%Pec).or.(medio1 ==1 )).and. & - ((sgg%Med(medio2)%Is%Dielectric).or.(sgg%Med(medio2)%Is%Thinslot).or.(sgg%Med(medio2)%Is%Pec).or.(medio2 ==1 )) ) THEN - !average adjacent media - ! - epr1 = 0.5_RKIND * (sgg%Med(medio1)%Epr+sgg%Med(medio2)%Epr) - mur1 = 0.5_RKIND * (sgg%Med(medio1)%Mur+sgg%Med(medio2)%Mur) - ELSE - write(buff,*) 'Media around the Slot are not plain media: ', medio1, medio2 - CALL STOPONERROR(layoutnumber,size,buff) - END IF - width = this%tSlots%Tg(j)%width - IF (sgg%NumPlaneWaves == 1) THEN - !ojo no me gusta pq no es general - !assume the incident plane wave if there are planewaves - ! - dir (1) = px - dir (2) = py - dir (3) = pz - ELSE - !assume normal incidence - ! - SELECT CASE (Abs(orientacion)) - CASE (iEx) - dir (1) = 1.0_RKIND - dir (2) = 0.0_RKIND - dir (3) = 0.0_RKIND - CASE (iEy) - dir (1) = 0.0_RKIND - dir (2) = 1.0_RKIND - dir (3) = 0.0_RKIND - CASE (iEz) - dir (1) = 0.0_RKIND - dir (2) = 0.0_RKIND - dir (3) = 1.0_RKIND - END SELECT - END IF - CALL dmma_thin_Slot (sgg%dx(i1), sgg%dy(j1), sgg%dz(k1), dir, & - & orientacion, direccion, width, epr1, mur1, EprSlot, MurSlot,eps0,mu0) - ! y tocar el precounting if so - !chequear que son distintos para incrementar contamedia - ! - indicemedio = contamedia + 1 - buscaiguales: DO ii = 1, contamedia - IF (sgg%Med(ii)%Is%ThinSlot) THEN - iguales = .TRUE. - DO j11 = 1, 3 - DO i11 = 1, 3 - iguales = iguales .AND. (sgg%Med(ii)%Anisotropic(1)%Epr(i11, j11) == EprSlot(i11, j11)) .AND. & - & (sgg%Med(ii)%Anisotropic(1)%Mur(i11, j11) == MurSlot(i11, j11)) - END DO - END DO - IF (iguales) THEN - indicemedio = ii - EXIT buscaiguales - END IF - END IF - END DO buscaiguales - IF (indicemedio == contamedia+1) THEN - contamedia = indicemedio - ALLOCATE (sgg%Med(contamedia)%Anisotropic(1)) - sgg%Med(contamedia)%Anisotropic(1)%Epr = EprSlot - sgg%Med(contamedia)%Anisotropic(1)%Mur = MurSlot - !lossless - sgg%Med(contamedia)%Anisotropic(1)%Sigma = 0.0_RKIND - sgg%Med(contamedia)%Anisotropic(1)%SigmaM = 0.0_RKIND - ! - sgg%Med(contamedia)%Epr = epr1 - sgg%Med(contamedia)%Mur = mur1 - sgg%Med(contamedia)%Sigma = 0.0_RKIND - sgg%Med(contamedia)%SigmaM = 0.0_RKIND - sgg%Med(contamedia)%Is%Anisotropic = .TRUE. - !just for signaling - sgg%Med(contamedia)%Is%ThinSlot = .TRUE. - sgg%Med(contamedia)%Priority = prior_TG - END IF - ! - ! - !record coordinates - ! - punto%XI = i1 - punto%XE = i1 - punto%YI = j1 - punto%YE = j1 - punto%ZI = k1 - punto%ZE = k1 - numertag = searchtag(tagtype,this%tSlots%Tg(j)%TgC(i)%tag) - CALL CreateSurfaceSlotMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz,& - media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI,& - Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, & - Alloc_iEy_YI,& - Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, & - Alloc_iEz_ZI,& - Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, & - Alloc_iHy_XI,& - Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, & - Alloc_iHz_YI,& - Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, sgg%HShared, BoundingBox, & - punto, orientacion, direccion, indicemedio) - !del if esta dentro del bounding box - END IF - END DO - !thin Slots - END DO - ! - endif !del run_with_dmma - - !debe ir al final para respetar el tipo de medio que haya SI SE TRATASE COMO A UN MEDIO - !nodalsource - !precounting - tama = this%nodsrc%n_nodSrc - !at most - ALLOCATE (contapuntos(tama*(this%nodsrc%n_C2p_max+this%nodsrc%n_C1p_max))) - contapuntos = 0 - conta1 = 0 - DO i = 1, tama - conta2 = 0 - tama2 = this%nodsrc%NodalSource(i)%n_c1P - tama3 = this%nodsrc%NodalSource(i)%n_c2P - DO ii = 1, tama2 - punto_s%or = this%nodsrc%NodalSource(i)%c1P(ii)%or - punto_s%XI = this%nodsrc%NodalSource(i)%c1P(ii)%XI - punto_s%XE = this%nodsrc%NodalSource(i)%c1P(ii)%XE - punto_s%YI = this%nodsrc%NodalSource(i)%c1P(ii)%YI - punto_s%YE = this%nodsrc%NodalSource(i)%c1P(ii)%YE - punto_s%ZI = this%nodsrc%NodalSource(i)%c1P(ii)%ZI - punto_s%ZE = this%nodsrc%NodalSource(i)%c1P(ii)%ZE - IF ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) THEN - conta2 = conta2 + 1 - END IF - END DO - ! - ! - DO ii = 1, tama3 - punto_s%or = this%nodsrc%NodalSource(i)%c2P(ii)%or - punto_s%XI = this%nodsrc%NodalSource(i)%c2P(ii)%XI - punto_s%XE = this%nodsrc%NodalSource(i)%c2P(ii)%XE - punto_s%YI = this%nodsrc%NodalSource(i)%c2P(ii)%YI - punto_s%YE = this%nodsrc%NodalSource(i)%c2P(ii)%YE - punto_s%ZI = this%nodsrc%NodalSource(i)%c2P(ii)%ZI - punto_s%ZE = this%nodsrc%NodalSource(i)%c2P(ii)%ZE - IF ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) THEN - conta2 = conta2 + 1 - END IF - END DO - IF (conta2 /= 0) THEN - conta1 = conta1 + 1 - contapuntos (conta1) = conta2 - END IF - END DO - sgg%NumNodalSources = conta1 - ALLOCATE (sgg%NodalSource(conta1)) - if (sgg%NumNodalSources /=0) contamedia =contamedia+1 - ! - conta1 = 0 - DO i = 1, tama - IF (contapuntos(i) /= 0) THEN - conta1 = conta1 + 1 - sgg%NodalSource(conta1)%numpuntos = contapuntos (conta1) - ALLOCATE (sgg%NodalSource(conta1)%punto(contapuntos(conta1))) - !initialization - do ii=1,contapuntos(conta1) - sgg%NodalSource(conta1)%punto(ii)%or = 0 - sgg%NodalSource(conta1)%punto(ii)%xc = 0.0_RKIND - sgg%NodalSource(conta1)%punto(ii)%yc = 0.0_RKIND - sgg%NodalSource(conta1)%punto(ii)%zc = 0.0_RKIND - sgg%NodalSource(conta1)%punto(ii)%XI = -1 - sgg%NodalSource(conta1)%punto(ii)%XE = -1 - sgg%NodalSource(conta1)%punto(ii)%YI = -1 - sgg%NodalSource(conta1)%punto(ii)%YE = -1 - sgg%NodalSource(conta1)%punto(ii)%ZI = -1 - sgg%NodalSource(conta1)%punto(ii)%ZE = -1 - end do - endif - END DO - !asignacion - conta1 = 0 - DO i = 1, tama - conta2 = 0 - IF (contapuntos(i) /= 0) then - conta1 = conta1 + 1 - ! - sgg%NodalSource(conta1)%fichero%name = trim (adjustl(this%nodsrc%NodalSource(i)%nombre)) - sgg%NodalSource(conta1)%isElec = this%nodsrc%NodalSource(i)%isElec - sgg%NodalSource(conta1)%IsHard = this%nodsrc%NodalSource(i)%isHard - sgg%NodalSource(conta1)%IsInitialValue = this%nodsrc%NodalSource(i)%IsInitialValue - endif - ! - tama2 = this%nodsrc%NodalSource(i)%n_c1P - tama3 = this%nodsrc%NodalSource(i)%n_c2P - DO ii = 1, tama2 - !!correct bounding box - punto_s%or = this%nodsrc%NodalSource(i)%c1P(ii)%or - punto_s%xc = this%nodsrc%NodalSource(i)%c1P(ii)%xc - punto_s%yc = this%nodsrc%NodalSource(i)%c1P(ii)%yc - punto_s%zc = this%nodsrc%NodalSource(i)%c1P(ii)%zc - ! - punto_s%XI = Max (this%nodsrc%NodalSource(i)%c1P(ii)%XI, Min(BoundingBox%XI, BoundingBox%XE)) - punto_s%YI = Max (this%nodsrc%NodalSource(i)%c1P(ii)%YI, Min(BoundingBox%YI, BoundingBox%YE)) - punto_s%ZI = Max (this%nodsrc%NodalSource(i)%c1P(ii)%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) - ! - punto_s%XE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%XE, Max(BoundingBox%XI, BoundingBox%XE)) - punto_s%YE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%YE, Max(BoundingBox%YI, BoundingBox%YE)) - IF ((punto_s%zc /= 0).and.(this%nodsrc%NodalSource(i)%isElec)) then !only in case of Ez - punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE-1)) - else - punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE )) - endif - ! - ! - DO k1 = punto_s%ZI, punto_s%ZE - DO j1 = punto_s%YI, punto_s%YE - DO i1 = punto_s%XI, punto_s%XE - IF (punto_s%xc /= 0) THEN - !bug OLD 181214 sl_4_20mm_gli.nfde. Fuente nodal electrica embebida en pec y nodal magnetica en pmc se ignoraran sean hard or soft - MEDIO = media%sggMiEx (i1, j1, k1) - valido=.true. - !IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - ! & (sgg%Med(MEDIO)%Is%MDispersive) - !ELSE - ! VALIDO = .TRUE. - !END IF - IF (this%nodsrc%NodalSource(i)%isElec) THEN - VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) - END IF - write (buff,*) 'WARNING: Ex Nodal source on PEC media will be ignored (', i1, j1, k1,')' - IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - ! - ! COMENTADO 250816 PQ DA UN ERROR JUISTO CUANDO CAE LA FUENTE EN UN CORTE MPI. HABRIA QU TOCA LA CASUISTICA DE punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE )) PERO NO LO HE QUERIDO HACER - !!!MEDIO = sggmiHx (i1, j1, k1) - !!!valido=.true. - !!!!IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - !!!! & (sgg%Med(MEDIO)%Is%MDispersive) - !!!!ELSE - !!!! VALIDO = .TRUE. - !!!!END IF - !!!IF ( .NOT. this%nodsrc%NodalSource(i)%isElec) THEN - !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) - !!!END IF - !!!write (buff,*) 'WARNING: Hx Nodal source on PMC media will be ignored (', i1, j1, k1,')' - !!!IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - END IF - ! - ! - IF (punto_s%yc /= 0) THEN - MEDIO = media%sggMiEy (i1, j1, k1) - valido=.true. - !IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - ! & (sgg%Med(MEDIO)%Is%MDispersive) - !ELSE - ! VALIDO = .TRUE. - !END IF - IF (this%nodsrc%NodalSource(i)%isElec) THEN - VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) - END IF - write (buff,*) 'WARNING: Ey Nodal source on PMC media will be ignored (', i1, j1, k1,')' - IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - ! - ! - !!!MEDIO = sggmiHy (i1, j1, k1) - !!!valido=.true. - !!!!IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - !!!! & (sgg%Med(MEDIO)%Is%MDispersive) - !!!!ELSE - !!!! VALIDO = .TRUE. - !!!!END IF - !!!IF ( .NOT. this%nodsrc%NodalSource(i)%isElec) THEN - !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) - !!!END IF - !!!write (buff,*) 'WARNING: Hy Nodal source on PMC media will be ignored (', i1, j1, k1,')' - !!!IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - END IF - ! - ! - IF (punto_s%zc /= 0) THEN - MEDIO = media%sggMiEz (i1, j1, k1) - valido=.true. - !IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - ! & (sgg%Med(MEDIO)%Is%MDispersive) - !ELSE - ! VALIDO = .TRUE. - !END IF - IF (this%nodsrc%NodalSource(i)%isElec) THEN - VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) - END IF - write (buff,*) 'WARNING: Ez Nodal source on PMC media will be ignored (', i1, j1, k1,')' - IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - ! - ! - !!!MEDIO = sggmiHz (i1, j1, k1) - !!!valido=.true. - !!!!IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - !!!! & (sgg%Med(MEDIO)%Is%MDispersive) - !!!!ELSE - !!!! VALIDO = .TRUE. - !!!!END IF - !!!IF ( .NOT. this%nodsrc%NodalSource(i)%isElec) THEN - !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) - !!!END IF - !!!write (buff,*) 'WARNING: Hz Nodal source on PMC media will be ignored (', i1, j1, k1,')' - !!!IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - END IF - END DO - END DO - END DO - ! - ! - IF ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) THEN - conta2 = conta2 + 1 - sgg%NodalSource(conta1)%punto(conta2)%or = punto_s%or - sgg%NodalSource(conta1)%punto(conta2)%xc = punto_s%xc - sgg%NodalSource(conta1)%punto(conta2)%yc = punto_s%yc - sgg%NodalSource(conta1)%punto(conta2)%zc = punto_s%zc - sgg%NodalSource(conta1)%punto(conta2)%XI = punto_s%XI - sgg%NodalSource(conta1)%punto(conta2)%XE = punto_s%XE - sgg%NodalSource(conta1)%punto(conta2)%YI = punto_s%YI - sgg%NodalSource(conta1)%punto(conta2)%YE = punto_s%YE - sgg%NodalSource(conta1)%punto(conta2)%ZI = punto_s%ZI - sgg%NodalSource(conta1)%punto(conta2)%ZE = punto_s%ZE - !PARA ACOMODAR LAS NODAL SOURCE COMO MEDIOS LINE Y PODER VISUALIZAR SONDAS 010824 - sgg%Med(contamedia)%Is%Dielectric = .TRUE. - sgg%Med(contamedia)%Is%LINE = .TRUE. - sgg%Med(contamedia)%Priority = prior_IL - sgg%Med(contamedia)%Epr = 1.0 - sgg%Med(contamedia)%Sigma = 0. - sgg%Med(contamedia)%Mur = 1.0 - sgg%Med(contamedia)%SigmaM = 0. - punto%XI = punto_s%XI - punto%XE = punto_s%XE - punto%YI = punto_s%YI - punto%YE = punto_s%YE - punto%ZI = punto_s%ZI - punto%ZE = punto_s%ZE - orientacion = punto_s%or - isathinwire = .FALSE. - numertag = 37 - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - contamedia, isathinwire,verbose,numeroasignaciones) - END IF - sgg%NodalSource(conta1)%numpuntos = conta2 !update with the correct value - END DO - ! - ! - DO ii = 1, tama3 - punto_s%or = this%nodsrc%NodalSource(i)%c2P(ii)%or - punto_s%XI = this%nodsrc%NodalSource(i)%c2P(ii)%XI - punto_s%XE = this%nodsrc%NodalSource(i)%c2P(ii)%XE - punto_s%YI = this%nodsrc%NodalSource(i)%c2P(ii)%YI - punto_s%YE = this%nodsrc%NodalSource(i)%c2P(ii)%YE - punto_s%ZI = this%nodsrc%NodalSource(i)%c2P(ii)%ZI - punto_s%ZE = this%nodsrc%NodalSource(i)%c2P(ii)%ZE - punto_s%xc = this%nodsrc%NodalSource(i)%c2P(ii)%xc - punto_s%yc = this%nodsrc%NodalSource(i)%c2P(ii)%yc - punto_s%zc = this%nodsrc%NodalSource(i)%c2P(ii)%zc - !!correct bounding box - punto_s%XI = Max (this%nodsrc%NodalSource(i)%c2p(ii)%XI, Min(BoundingBox%XI, BoundingBox%XE)) - punto_s%YI = Max (this%nodsrc%NodalSource(i)%c2p(ii)%YI, Min(BoundingBox%YI, BoundingBox%YE)) - punto_s%ZI = Max (this%nodsrc%NodalSource(i)%c2p(ii)%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) - ! - punto_s%XE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%XE, Max(BoundingBox%XI, BoundingBox%XE)) - punto_s%YE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%YE, Max(BoundingBox%YI, BoundingBox%YE)) - IF ((punto_s%zc /= 0).and.(this%nodsrc%NodalSource(i)%isElec)) then !only in case of Ez - punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE-1)) - else - punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE )) - endif - ! - punto_s%or = this%nodsrc%NodalSource(i)%c2p(ii)%or - punto_s%xc = this%nodsrc%NodalSource(i)%c2p(ii)%xc - punto_s%yc = this%nodsrc%NodalSource(i)%c2p(ii)%yc - punto_s%zc = this%nodsrc%NodalSource(i)%c2p(ii)%zc - ! - ! - DO k1 = punto_s%ZI, punto_s%ZE - DO j1 = punto_s%YI, punto_s%YE - DO i1 = punto_s%XI, punto_s%XE - IF (punto_s%xc /= 0) THEN - MEDIO = media%sggMiEx (i1, j1, k1) - valido=.true. - !IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - ! & (sgg%Med(MEDIO)%Is%MDispersive) - !ELSE - ! VALIDO = .TRUE. - !END IF - IF (this%nodsrc%NodalSource(i)%isElec) THEN - VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) - END IF - write (buff,*) 'WARNING: Ex Nodal source on PEC media will be ignored (', i1, j1, k1,')' - IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - ! - ! - ! - !!!MEDIO = sggmiHx (i1, j1, k1) - !!!valido=.true. - !!!!IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - !!!! & (sgg%Med(MEDIO)%Is%MDispersive) - !!!!ELSE - !!!! VALIDO = .TRUE. - !!!!END IF - !!!IF ( .NOT. this%nodsrc%NodalSource(i)%isElec) THEN - !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) - !!!END IF - !!!write (buff,*) 'WARNING: Hx Nodal source on PMC media will be ignored (', i1, j1, k1,')' - !!!IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - END IF - ! - ! - IF (punto_s%yc /= 0) THEN - MEDIO = media%sggMiEy (i1, j1, k1) - valido=.true. - !IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - ! & (sgg%Med(MEDIO)%Is%MDispersive) - !ELSE - ! VALIDO = .TRUE. - !END IF - IF (this%nodsrc%NodalSource(i)%isElec) THEN - VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) - END IF - write (buff,*) 'WARNING: Ey Nodal source on PMC media will be ignored (', i1, j1, k1,')' - IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - ! - ! - !!!MEDIO = sggmiHy (i1, j1, k1) - !!!valido=.true. - !!!!IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - !!!! & (sgg%Med(MEDIO)%Is%MDispersive) - !!!!ELSE - !!!! VALIDO = .TRUE. - !!!!END IF - !!!IF ( .NOT. this%nodsrc%NodalSource(i)%isElec) THEN - !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) - !!!END IF - !!!write (buff,*) 'WARNING: Hy Nodal source on PMC media will be ignored (', i1, j1, k1,')' - !!!IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - END IF - ! - ! - IF (punto_s%zc /= 0) THEN - MEDIO = media%sggMiEz (i1, j1, k1) - valido=.true. - !IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - ! & (sgg%Med(MEDIO)%Is%MDispersive) - !ELSE - ! VALIDO = .TRUE. - !END IF - IF (this%nodsrc%NodalSource(i)%isElec) THEN - VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) - END IF - write (buff,*) 'WARNING: Ez Nodal source on PMC media will be ignored (', i1, j1, k1,')' - IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - ! - ! - !!!MEDIO = sggmiHz (i1, j1, k1) - !!!valido=.true. - !!!!IF ( .NOT. this%nodsrc%NodalSource(i)%isHard) THEN - !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & - !!!! & (sgg%Med(MEDIO)%Is%MDispersive) - !!!!ELSE - !!!! VALIDO = .TRUE. - !!!!END IF - !!!IF ( .NOT. this%nodsrc%NodalSource(i)%isElec) THEN - !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) - !!!END IF - !!!write (buff,*) 'WARNING: Hz Nodal source on PMC media will be ignored (', i1, j1, k1,')' - !!!IF ( .NOT. VALIDO) CALL WarnErrReport (buff) - END IF - END DO - END DO - END DO - ! - ! - IF ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) THEN - conta2 = conta2 + 1 - sgg%NodalSource(conta1)%punto(conta2)%or = punto_s%or - sgg%NodalSource(conta1)%punto(conta2)%xc = punto_s%xc - sgg%NodalSource(conta1)%punto(conta2)%yc = punto_s%yc - sgg%NodalSource(conta1)%punto(conta2)%zc = punto_s%zc - sgg%NodalSource(conta1)%punto(conta2)%XI = punto_s%XI - sgg%NodalSource(conta1)%punto(conta2)%XE = punto_s%XE - sgg%NodalSource(conta1)%punto(conta2)%YI = punto_s%YI - sgg%NodalSource(conta1)%punto(conta2)%YE = punto_s%YE - sgg%NodalSource(conta1)%punto(conta2)%ZI = punto_s%ZI - sgg%NodalSource(conta1)%punto(conta2)%ZE = punto_s%ZE - !PARA ACOMODAR LAS NODAL SOURCE COMO MEDIOS LINE Y PODER VISUALIZAR SONDAS 010824 - sgg%Med(contamedia)%Is%Dielectric = .TRUE. - sgg%Med(contamedia)%Is%LINE = .TRUE. - sgg%Med(contamedia)%Priority = prior_IL - sgg%Med(contamedia)%Epr = 1.0 - sgg%Med(contamedia)%Sigma = 0. - sgg%Med(contamedia)%Mur = 1.0 - sgg%Med(contamedia)%SigmaM = 0. - punto%XI = punto_s%XI - punto%XE = punto_s%XE - punto%YI = punto_s%YI - punto%YE = punto_s%YE - punto%ZI = punto_s%ZI - punto%ZE = punto_s%ZE - orientacion = punto_s%or - isathinwire = .FALSE. - numertag = 37 - CALL CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & - media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & - Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & - Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & - Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & - Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & - Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & - contamedia, isathinwire,verbose,numeroasignaciones) - END IF - sgg%NodalSource(conta1)%numpuntos = conta2 !update with the correct value - END DO - END DO - ! - IF (allocated(contapuntos)) deallocate (contapuntos) - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!PROBES - !!!!!!!!!!!!!!!!!!!!!PROBES - !!!!!!!!!!!!!!!!!!!!!PROBES - !!!!!!!!!!!!!!!!!!!!!PROBES - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PRIMERO LAS CUENTO - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MasSondas fields - ! - tamaScrPrb = this%VolPrb%length - if (createmapvtk) tamaScrPrb=tamaScrPrb+1 - tamaScrPrb = (tamaScrPrb)*3 !!!210618 allocateo el triple por si las volumicas son de tipo tifr mezcladas - tamaSonda = this%Sonda%length - tamaoldSONDA = this%oldSONDA%n_probes - tamaBloquePrb = this%BloquePRB%N_BP - !probes totales - sgg%NumberRequest = (tamaSonda) + (tamaoldSONDA) + (tamaBloquePrb) + (tamaScrPrb) - ALLOCATE (sgg%observation(1:sgg%NumberRequest)) - !inicializacion - sgg%observation(1:sgg%NumberRequest)%nP =-1 - sgg%observation(1:sgg%NumberRequest)%InitialTime =-1 - sgg%observation(1:sgg%NumberRequest)%FinalTime =-1 - sgg%observation(1:sgg%NumberRequest)%TimeStep =-1 - sgg%observation(1:sgg%NumberRequest)%InitialFreq =-1.0_RKIND - sgg%observation(1:sgg%NumberRequest)%FinalFreq =-1.0_RKIND - sgg%observation(1:sgg%NumberRequest)%FreqStep =-1.0_RKIND - sgg%observation(1:sgg%NumberRequest)%outputrequest =' ' - sgg%observation(1:sgg%NumberRequest)%FileNormalize =' ' - sgg%observation(1:sgg%NumberRequest)%FreqDomain =.false. - sgg%observation(1:sgg%NumberRequest)%TimeDomain =.false. - sgg%observation(1:sgg%NumberRequest)%Saveall =.false. - sgg%observation(1:sgg%NumberRequest)%TRANSFER =.false. - sgg%observation(1:sgg%NumberRequest)%Volumic =.false. - - ! - !ahora las cuento por bloques - ! - DO i = 1, tamaSonda - ii = i - sgg%observation(ii)%nP = 0 - tama2 = (this%Sonda%collection(i)%len_cor) - DO j = 1, tama2 - tipotemp = this%Sonda%collection(i)%cordinates(j)%or - punto%XI = this%Sonda%collection(i)%cordinates(j)%XI - punto%YI = this%Sonda%collection(i)%cordinates(j)%YI - punto%ZI = this%Sonda%collection(i)%cordinates(j)%ZI - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE) .AND. & - & ((tipotemp == NP_COR_EX) .OR. (tipotemp == NP_COR_EY) .OR. (tipotemp == NP_COR_EZ) .OR. & - & (tipotemp == NP_COR_HX) .OR. (tipotemp == NP_COR_HY) .OR. (tipotemp == NP_COR_HZ))) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - ELSE IF (tipotemp == NP_COR_WIRECURRENT .or. tipotemp == NP_COR_CHARGE) THEN - nodo_cazado=.false. - loop_busqueda1: DO j1 = 1, this%twires%n_tw - DO i1 = 1, this%twires%TW(j1)%N_TWC - !nodo cazado - IF (this%twires%TW(j1)%TWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) THEN - punto%XI = this%twires%TW(j1)%TWC(i1)%i - punto%YI = this%twires%TW(j1)%TWC(i1)%j - punto%ZI = this%twires%TW(j1)%TWC(i1)%k - nodo_cazado=.true. - ! - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE).AND.(punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - ! - SELECT CASE (this%twires%TW(j1)%TWC(i1)%D) - CASE (iEx, iEy, iEz) - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - END SELECT - EXIT loop_busqueda1 - END IF - END IF - END DO - END DO loop_busqueda1 - !si no lo ha cazado... probamos SLANTED - IF (.not.nodo_cazado) then - loop_busqueda2: DO j1 = 1, this%swires%n_sw - DO i1 = 1, this%swires%SW(j1)%N_SWC - !nodo cazado - IF (this%swires%SW(j1)%SWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) THEN - punto%XI = floor(this%swires%SW(j1)%SWC(i1)%x) - punto%YI = floor(this%swires%SW(j1)%SWC(i1)%y) - punto%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) - nodo_cazado=.true. - ! - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE).AND.(punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - ! - EXIT loop_busqueda2 - END IF - END IF - END DO - END DO loop_busqueda2 - END IF - !si no lo ha cazado - IF (.not.nodo_cazado) then - write(buff,'(a,i9)') 'Current probe not found in WIRE segment ',this%Sonda%collection(i)%cordinates(j)%XI - call StopOnError(layoutnumber,size,buff) - endif - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_DDP) THEN - if (run_with_dmma) then - nodo_cazado=.false. - do_loop_busquedatg1: DO j1 = 1, this%tSlots%n_tg - DO i1 = 1, this%tSlots%Tg(j1)%N_tgc - !nodo cazado - IF (this%tSlots%Tg(j1)%TgC(i1)%node == this%Sonda%collection(i)%cordinates(j)%XI) THEN - punto%XI = this%tSlots%Tg(j1)%TgC(i1)%i - punto%YI = this%tSlots%Tg(j1)%TgC(i1)%j - punto%ZI = this%tSlots%Tg(j1)%TgC(i1)%k - nodo_cazado=.true. - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - EXIT do_loop_busquedatg1 - END IF - END IF - END DO - END DO do_loop_busquedatg1 - !si no lo ha cazado - IF (.not.nodo_cazado) then - write(buff,'(a,i9)') 'Voltage probe not found ',this%Sonda%collection(i)%cordinates(j)%XI - call StopOnError(layoutnumber,size,buff) - endif - else - write(buff,'(a,i9)') 'ERROR: Voltage probe in gaps only available under -dmma flag ' - call StopOnError(layoutnumber,size,buff) - endif !del run_with_dmma - else if (abs(tipotemp) == NP_COR_LINE) then - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - END IF - END DO - END DO - - !Sondas - ! - DO i = 1, tamaoldSONDA - !acumulador - ii = i + tamaSonda - !far fields (no es time domain pero una forma especial de ellos) - tama2 = (this%oldSONDA%probes(i)%n_FarField) - if (tama2 > 1) then - buff='Only one Far Field probe allowed' - CALL STOPONERROR(layoutnumber,size,buff) - endif - if (tama2 > 0) sgg%observation(ii)%nP = 1 !un punto para todo el farfield (es simbolico) - !electric FIELDS - tama2 = (this%oldSONDA%probes(i)%n_Electric) - DO j = 1, tama2 - tama3 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - tama4 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - tama5 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - tama6 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - buff='TAMANIOS DE PROBES EH RAROS' - IF ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) - DO k = 1, tama3 - punto%XI = this%oldSONDA%probes(i)%Electric(j)%probe%i(k) - punto%YI = this%oldSONDA%probes(i)%Electric(j)%probe%j(k) - punto%ZI = this%oldSONDA%probes(i)%Electric(j)%probe%k(k) - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 3 - END IF - END DO - END DO - !MAGNETIC FIELDS - tama2 = (this%oldSONDA%probes(i)%n_Magnetic) - DO j = 1, tama2 - tama3 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) - tama4 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) - tama5 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) - tama6 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) - buff='pre1_ERROR: TAMANIOS DE PROBES EH RAROS' - IF ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) - DO k = 1, tama3 - punto%XI = this%oldSONDA%probes(i)%Magnetic(j)%probe%i(k) - punto%YI = this%oldSONDA%probes(i)%Magnetic(j)%probe%j(k) - punto%ZI = this%oldSONDA%probes(i)%Magnetic(j)%probe%k(k) - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 3 - END IF - END DO - END DO - END DO - !Bloque Current Probes - ! - DO i = 1, tamaBloquePrb - ii = i + tamaSonda + tamaoldSONDA - sgg%observation(ii)%nP = 0 - punto%XI = this%BloquePRB%BP(i)%i1 - punto%YI = this%BloquePRB%BP(i)%j1 - punto%ZI = this%BloquePRB%BP(i)%k1 - punto%XE = this%BloquePRB%BP(i)%I2 - punto%YE = this%BloquePRB%BP(i)%J2 - punto%ZE = this%BloquePRB%BP(i)%K2 - !!! - IF (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. ((punto%YI >= BoundingBox%YI).OR. (punto%YI <= BoundingBox%YE)) .AND. & - ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. ((punto%XE >= BoundingBox%XI).OR. (punto%XE <= BoundingBox%XE)) .AND. & - ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. ((punto%ZE >= BoundingBox%ZI).OR. (punto%ZE <= BoundingBox%ZE))) THEN - SELECT CASE (this%BloquePRB%BP(i)%NML) - CASE (iEx) - DO k = this%BloquePRB%BP(i)%i1, this%BloquePRB%BP(i)%I2, this%BloquePRB%BP(i)%skip - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - END DO - CASE (iEy) - DO k = this%BloquePRB%BP(i)%j1, this%BloquePRB%BP(i)%J2, this%BloquePRB%BP(i)%skip - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - END DO - CASE (iEz) - DO k = this%BloquePRB%BP(i)%k1, this%BloquePRB%BP(i)%K2, this%BloquePRB%BP(i)%skip - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - END DO - END SELECT - END IF - !DEL TAMA DEL Bloque CURRENT PROBES - END DO - - !Volumic probes (similar to MasSondas PERO CON PUNTOS FINALES COMO LAS Bloque PROBES) - !ahora las cuento por bloques - DO i = 1, tamaScrPrb/3 !!!210618 En realidad hay un tercio - ii = i + tamaSonda + tamaoldSONDA + tamaBloquePrb - sgg%observation(ii)%nP = 0 - ! crea una sonda vtk vacion con el instante incial 0 a efectos de mapa - if (createmapvtk.and.(i==tamaScrPrb/3)) then !!!210618 En realidad hay un tercio - tama2=1 - DO j = 1, tama2 - tipotemp = mapvtk - punto%XI = SINPML_fullsize(iHx)%XI !!! +1 !ojo si se cambia aqui tambien mas abajo !le quito 1 para que con condiciones PEC no las pinte !habria que manejar el dibujo de las condiciones aparte - punto%YI = SINPML_fullsize(iHy)%YI !!! +1 - punto%ZI = SINPML_fullsize(iHz)%ZI !!! +1 - punto%XE = SINPML_fullsize(iHx)%XE !!! -1 - punto%YE = SINPML_fullsize(iHy)%YE !!! -1 - punto%ZE = SINPML_fullsize(iHz)%ZE !!! -1 -!!! print *,layoutnumber,punto%XI,punto%YI,punto%ZI,punto%XE,punto%YE,punto%ZE - IF (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. & - & ((punto%YI >= BoundingBox%YI) .OR. (punto%YI <= BoundingBox%YE)) .AND. & - & ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & - & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. & - & ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. & - & ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) THEN -!!! print *,'----Dentro->',layoutnumber,punto%XI,punto%YI,punto%ZI,punto%XE,punto%YE,punto%ZE - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - ENDIF - end do - else - tama2 = (this%VolPrb%collection(i)%len_cor) - DO j = 1, tama2 - tipotemp = this%VolPrb%collection(i)%cordinates(j)%or - punto%XI = this%VolPrb%collection(i)%cordinates(j)%XI - punto%YI = this%VolPrb%collection(i)%cordinates(j)%YI - punto%ZI = this%VolPrb%collection(i)%cordinates(j)%ZI - punto%XE = this%VolPrb%collection(i)%cordinates(j)%XE - punto%YE = this%VolPrb%collection(i)%cordinates(j)%YE - punto%ZE = this%VolPrb%collection(i)%cordinates(j)%ZE - - IF (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. ((punto%YI >= BoundingBox%YI) .OR. & - & (punto%YI <= BoundingBox%YE)) .AND. ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & - & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. ((punto%YE >= BoundingBox%YI) .OR. & - & (punto%YE <= BoundingBox%YE)) .AND. ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) THEN - - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - ENDIF - END DO - endif - END DO - ! si se lanza con -mapvtk se crea una slice probe para ver la estructura - - !Ahora creo los puntos de observacion - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - sondas = 0 - DO ii = 1, sgg%NumberRequest - sondas = sondas + sgg%observation(ii)%nP - END DO - ! - IF (sondas > Maxprobes) THEN - WRITE (buff,*) 'Too many probes= ', sondas, 'Either or reduce the number of probes below ', & - & Maxprobes - CALL STOPONERROR(layoutnumber,size,buff) - END IF - IF (sondas > 1024) THEN - WRITE (buff,*) 'Number of probes ', & - & ' is over 1024. UNIX limit is typically 1024'// & - ' Check! It will crash if ulimit -n is not set > ', sondas - call WarnErrReport(buff) - END IF - - !luego chequeo las memoria de las sondas si se van de memoria en observation.f90 - ! IF (sondas*BuffObse*4 > MaxMemoryProbes) THEN - ! WRITE (buff,*) 'Too much memory for the probes= ', sondas * BuffObse * 4, 'Probes= ', sondas, & - ! & 'Either reduce the number o& - ! &f probes or recompile decreasing BuffObse ', BuffObse, 'or increasing ', MaxMemoryProbes - ! CALL STOPONERROR(layoutnumber,size,buff) - ! END IF - ! - IF (sgg%NumberRequest /= 0) THEN - !alocateo - DO ii = 1, sgg%NumberRequest - ALLOCATE (sgg%observation(ii)%P(1:sgg%observation(ii)%nP)) - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing !bug peligroso 2012 - sgg%observation(ii)%TimeDomain = .false. - sgg%observation(ii)%FreqDomain = .FALSE. - sgg%observation(ii)%TRANSFER = .FALSE. - sgg%observation(ii)%Volumic = .FALSE. - sgg%observation(ii)%FileNormalize=' ' - !trancos - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Xtrancos = 1 !default - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ytrancos = 1 !default - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ztrancos = 1 !default - !fin trancos - !al final debe quedar igual - !lo reseteo porque lo reutilizo de contador - sgg%observation(ii)%nP=0 !reset it - ! - END DO - DO i = 1, tamaSonda - ii = i - tama2 = (this%Sonda%collection(i)%len_cor) - ! - SELECT CASE (this%Sonda%collection(i)%type2) - CASE (NP_T2_time) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .FALSE. - sgg%observation(ii)%TRANSFER = .FALSE. - CASE (NP_T2_FREQ) - !I will output everything in time and transform it later - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_TRANSFER) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - buff='Transfer function only in Frequency Domain' - !! CALL STOPONERROR(layoutnumber,size,buff) - CASE (NP_T2_TIMEFREQ ) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_TIMETRANSF) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_FREQTRANSF) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_TIMEFRECTRANSF) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - END SELECT - !repair info - ! - IF (sgg%observation(ii)%FreqDomain) THEN - !save everything for later transform - sgg%observation(ii)%Saveall = .TRUE. - END IF - IF ((this%Sonda%collection(i)%type1 == NP_T1_AMBOS)) THEN - sgg%observation(ii)%Saveall = .TRUE. - sgg%observation(ii)%TimeDomain = .TRUE. - ELSE - continue - END IF - ! - WRITE (probenumber, '(i7)') ii - ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & - ! trim(adjustl(this%Sonda%collection(i)%outputrequest)) - sgg%observation(ii)%outputrequest = trim (adjustl(this%Sonda%collection(i)%outputrequest)) - sgg%observation(ii)%InitialTime = this%Sonda%collection(i)%tstart - sgg%observation(ii)%FinalTime = this%Sonda%collection(i)%tstop - sgg%observation(ii)%TimeStep = this%Sonda%collection(i)%tstep - IF ((sgg%observation(ii)%FinalTime= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEx - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_EY) THEN - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEy - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_EZ) THEN - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEz - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_HX) THEN - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHx - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_HY) THEN - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHy - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_HZ) THEN - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHz - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT .or. & - this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) THEN - nodo_cazado=.false. - do_loop_busqueda: DO j1 = 1, this%twires%n_tw - DO i1 = 1, this%twires%TW(j1)%N_TWC - !nodo cazado - IF (this%twires%TW(j1)%TWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) THEN - nodo_cazado=.true. - punto%XI = this%twires%TW(j1)%TWC(i1)%i - punto%YI = this%twires%TW(j1)%TWC(i1)%j - punto%ZI = this%twires%TW(j1)%TWC(i1)%k - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. & - & (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - SELECT CASE (this%twires%TW(j1)%TWC(i1)%D) - CASE (iEx) - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%twires%TW(j1)%TWC(i1)%nd - sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI - sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI - sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJx - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQx - end if - - !se nota con un indice distinto - ! - CASE (iEy) - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%twires%TW(j1)%TWC(i1)%nd - sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI - sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI - sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJy - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQy - end if - CASE (iEz) - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%twires%TW(j1)%TWC(i1)%nd - sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI - sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI - sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJz - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQz - end if - END SELECT - EXIT do_loop_busqueda - END IF - END IF - END DO - END DO do_loop_busqueda - IF (.not.nodo_cazado) THEN - do_loop_busqueda3: DO j1 = 1, this%swires%n_sw - DO i1 = 1, this%swires%SW(j1)%N_SWC - IF (this%swires%SW(j1)%SWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) THEN - nodo_cazado=.true. - punto%XI = floor(this%swires%SW(j1)%SWC(i1)%x) - punto%YI = floor(this%swires%SW(j1)%SWC(i1)%y) - punto%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. & - & (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%swires%SW(j1)%SWC(i1)%nd - sgg%observation(i)%P(sgg%observation(i)%nP)%XI = floor(this%swires%SW(j1)%SWC(i1)%x) - sgg%observation(i)%P(sgg%observation(i)%nP)%YI = floor(this%swires%SW(j1)%SWC(i1)%y) - sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJx - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQx - end if - EXIT do_loop_busqueda3 - END IF - END IF - END DO - END DO do_loop_busqueda3 - END IF - ELSE IF (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_DDP) THEN - do_loop_busquedatg: DO j1 = 1, this%tSlots%n_tg - DO i1 = 1, this%tSlots%Tg(j1)%N_tgc - !nodo cazado - IF (this%tSlots%Tg(j1)%TgC(i1)%node == this%Sonda%collection(i)%cordinates(j)%XI) THEN - punto%XI = this%tSlots%Tg(j1)%TgC(i1)%i - punto%YI = this%tSlots%Tg(j1)%TgC(i1)%j - punto%ZI = this%tSlots%Tg(j1)%TgC(i1)%k - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. & - & (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%tSlots%Tg(j1)%TgC(i1)%node - sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI - sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI - sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - direccion = this%tSlots%Tg(j1)%TgC(i1)%dir - SELECT CASE (this%tSlots%Tg(j1)%TgC(i1)%or) - CASE (iEx) - SELECT CASE (direccion) - CASE (iEz) - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVy - CASE (iEy) - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVz - END SELECT - CASE (iEy) - SELECT CASE (direccion) - CASE (iEx) - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVz - CASE (iEz) - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVx - END SELECT - CASE (iEz) - SELECT CASE (direccion) - CASE (iEy) - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVx - CASE (iEx) - sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVy - END SELECT - END SELECT - EXIT do_loop_busquedatg - END IF - END IF - END DO - END DO do_loop_busquedatg - else if (abs(this%Sonda%collection(i)%cordinates(j)%or) == NP_COR_LINE) then - block - integer (kind=4) :: line_size, obs_size, idx - !intrinsic size function coopted by size global variable... - line_size = ubound(this%Sonda%collection(i)%cordinates,1)-lbound(this%Sonda%collection(i)%cordinates,1)+1 - sgg%observation(i)%nP = sgg%observation(i)%nP + 1 - obs_size = sgg%observation(i)%nP - allocate(sgg%observation(i)%P(obs_size)%line(line_size)) - sgg%observation(i)%P(obs_size)%What = lineIntegral - do idx = 1, line_size - sgg%observation(i)%P(obs_size)%line(idx)%x = this%Sonda%collection(i)%cordinates(idx)%Xi - sgg%observation(i)%P(obs_size)%line(idx)%y = this%Sonda%collection(i)%cordinates(idx)%Yi - sgg%observation(i)%P(obs_size)%line(idx)%z = this%Sonda%collection(i)%cordinates(idx)%Zi - if (this%Sonda%collection(i)%cordinates(idx)%Xe /= -1) then - sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(1, this%Sonda%collection(i)%cordinates(idx)%or) - else if (this%Sonda%collection(i)%cordinates(idx)%Ye /= -1) then - sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(2, this%Sonda%collection(i)%cordinates(idx)%or) - else if (this%Sonda%collection(i)%cordinates(idx)%Ze /= -1) then - sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(3, this%Sonda%collection(i)%cordinates(idx)%or) - end if - end do - sgg%observation(i)%P(obs_size)%XI = sgg%observation(i)%P(obs_size)%line(1)%x - sgg%observation(i)%P(obs_size)%YI = sgg%observation(i)%P(obs_size)%line(1)%y - sgg%observation(i)%P(obs_size)%ZI = sgg%observation(i)%P(obs_size)%line(1)%z - end block - END IF - END DO - END DO - ! - !Sondas propiamente dichas - ! - DO i = 1, tamaoldSONDA - ii = i + tamaSonda - !only the MasSondas accept the freqdomain - sgg%observation(ii)%TimeDomain = .TRUE. !NO CONSIDERO EL FARFIELD FREQDOMAIN PQ LA TRATO BIEN COMO TIMEDOMAIN Y NO QUIERO JODERLA !26/02/14 - sgg%observation(ii)%FreqDomain = .FALSE. - sgg%observation(ii)%TRANSFER = .FALSE. - !farfields (no es time domain pero una forma especial de ellos) - tama2 = (this%oldSONDA%probes(i)%n_FarField) - WRITE (buff,*) 'More than 1 Far Field box unsupported' - IF (tama2 > 1) CALL STOPONERROR(layoutnumber,size,buff) - ! - DO j = 1, tama2 - tama3 = (this%oldSONDA%probes(i)%FarField(j)%probe%n_cord) - buff='FAR FIELD PROBE REQUIRES TWO COORDINATES FOR THE BOX' - IF (tama3 /= 2) CALL STOPONERROR(layoutnumber,size,buff) - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - punto%XI = this%oldSONDA%probes(i)%FarField(j)%probe%i(1) - punto%YI = this%oldSONDA%probes(i)%FarField(j)%probe%j(1) - punto%ZI = this%oldSONDA%probes(i)%FarField(j)%probe%k(1) - punto%XE = this%oldSONDA%probes(i)%FarField(j)%probe%i(2) - punto%YE = this%oldSONDA%probes(i)%FarField(j)%probe%j(2) - punto%ZE = this%oldSONDA%probes(i)%FarField(j)%probe%k(2) - ! - sgg%observation(ii)%P(1)%XI = punto%XI - sgg%observation(ii)%P(1)%YI = punto%YI - sgg%observation(ii)%P(1)%ZI = punto%ZI - sgg%observation(ii)%P(1)%XE = punto%XE - sgg%observation(ii)%P(1)%YE = punto%YE - sgg%observation(ii)%P(1)%ZE = punto%ZE - sgg%observation(ii)%P(1)%what = farfield - ! - !no se clipea porque se manejan como ondas planas - ! - sgg%observation(ii)%InitialFreq =this%oldSONDA%probes(i)%FarField(j)%probe%fstart - sgg%observation(ii)%FinalFreq =this%oldSONDA%probes(i)%FarField(j)%probe%fstop - sgg%observation(ii)%FreqStep =this%oldSONDA%probes(i)%FarField(j)%probe%fstep - ! - sgg%observation(ii)%thetaStart =this%oldSONDA%probes(i)%FarField(j)%probe%thetaStart - sgg%observation(ii)%thetaStop =this%oldSONDA%probes(i)%FarField(j)%probe%thetaStop - sgg%observation(ii)%thetaStep =this%oldSONDA%probes(i)%FarField(j)%probe%thetaStep - ! - sgg%observation(ii)%phiStart =this%oldSONDA%probes(i)%FarField(j)%probe%phiStart - sgg%observation(ii)%phiStop =this%oldSONDA%probes(i)%FarField(j)%probe%phiStop - sgg%observation(ii)%phiStep =this%oldSONDA%probes(i)%FarField(j)%probe%phiStep - sgg%observation(ii)%FileNormalize =this%oldSONDA%probes(i)%FarField(j)%probe%FileNormalize - - sgg%observation(ii)%outputrequest=trim(adjustl(this%oldSONDA%probes(i)%FarField(j)%probe%outputrequest)) - - IF ((sgg%observation(ii)%InitialFreq < 0.).or. & - (sgg%observation(ii)%FinalFreq <= 1e-9).or. & - (sgg%observation(ii)%FreqStep <= 1e-9)) then - WRITE (buff,*) 'ERROR: Some incorrect frequency domain parameters (initial,final,step) ',sgg%observation(ii)%InitialFreq,sgg%observation(ii)%FinalFreq,sgg%observation(ii)%FreqStep - if (sgg%observation(ii)%FreqDomain) CALL STOPONERROR(layoutnumber,size,buff) - ENDIF - ! - - END DO - !electric FIELDS - tama2 = (this%oldSONDA%probes(i)%n_Electric) - DO j = 1, tama2 - tama3 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - tama4 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - tama5 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - tama6 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) - buff='TAMANIOS DE PROBES EH RAROS' - IF ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) - WRITE (probenumber, '(i7)') ii - DO k = 1, tama3 - punto%XI = this%oldSONDA%probes(i)%Electric(j)%probe%i(k) - punto%YI = this%oldSONDA%probes(i)%Electric(j)%probe%j(k) - punto%ZI = this%oldSONDA%probes(i)%Electric(j)%probe%k(k) - IF ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEx - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEy - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEz - ! - ! - sgg%observation(ii)%InitialTime = this%oldSONDA%probes(i)%Electric(j)%probe%tstart - sgg%observation(ii)%FinalTime = this%oldSONDA%probes(i)%Electric(j)%probe%tstop - sgg%observation(ii)%TimeStep = this%oldSONDA%probes(i)%Electric(j)%probe%tstep - IF ((sgg%observation(ii)%FinalTime= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & - & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) THEN - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHx - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHy - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHz - ! - ! - sgg%observation(ii)%InitialTime = this%oldSONDA%probes(i)%Magnetic(j)%probe%tstart - sgg%observation(ii)%FinalTime = this%oldSONDA%probes(i)%Magnetic(j)%probe%tstop - sgg%observation(ii)%TimeStep = this%oldSONDA%probes(i)%Magnetic(j)%probe%tstep - - IF ((sgg%observation(ii)%FinalTime= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. ((punto%YI >= BoundingBox%YI) .OR. & - & (punto%YI <= BoundingBox%YE)) .AND. ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & - & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. ((punto%YE >= BoundingBox%YI) .OR. & - & (punto%YE <= BoundingBox%YE)) .AND. ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) THEN - ! - !!!ANIADIDO 15/07/15 PARA COMPATIBILIDD NEW PROBE EN FRECUENCIA - SELECT CASE (this%BloquePRB%BP(i)%type2) - CASE (NP_T2_time) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .FALSE. - sgg%observation(ii)%TRANSFER = .FALSE. - CASE (NP_T2_FREQ) - !I will output everything in time and transform it later - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_TRANSFER) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - buff='Transfer function only in Frequency Domain' - !! CALL STOPONERROR(layoutnumber,size,buff) - CASE (NP_T2_TIMEFREQ ) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_TIMETRANSF) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_FREQTRANSF) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') - CASE (NP_T2_TIMEFRECTRANSF) - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .TRUE. - sgg%observation(ii)%TRANSFER = .TRUE. - END SELECT - !repair info - ! - IF (sgg%observation(ii)%FreqDomain) THEN - !save everything for later transform - sgg%observation(ii)%Saveall = .TRUE. - END IF - !!! END IF - ! - WRITE (probenumber, '(i7)') ii - ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & - ! trim(adjustl(this%BloquePRB%BP(i)%outputrequest)) - sgg%observation(ii)%outputrequest = trim (adjustl(this%BloquePRB%BP(i)%outputrequest)) - sgg%observation(ii)%InitialTime = this%BloquePRB%BP(i)%tstart - sgg%observation(ii)%FinalTime = this%BloquePRB%BP(i)%tstop - sgg%observation(ii)%TimeStep = this%BloquePRB%BP(i)%tstep - IF ((sgg%observation(ii)%FinalTime1 ) THEN - WRITE (buff,*) 'Only 1 Volumic probe allown per section' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - DO j = 1, tama2 - !I clip these probes to allow out-of-the box snapshot probes !ojo si se cambia aqui tambien mas arriba - tipotemp = mapvtk - punto%XI = SINPML_fullsize(iHx)%XI !!! +1 - punto%YI = SINPML_fullsize(iHy)%YI !!! +1 - punto%ZI = SINPML_fullsize(iHz)%ZI !!! +1 - punto%XE = SINPML_fullsize(iHx)%XE !!! -1 - punto%YE = SINPML_fullsize(iHy)%YE !!! -1 - punto%ZE = SINPML_fullsize(iHz)%ZE !!! -1 - - memo=memo+(punto%XE-punto%XI+1)*(punto%YE-punto%YI+1)*(punto%ZE-punto%ZI+1) - - IF (( (punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. & - & ((punto%YI >= BoundingBox%YI) .OR. (punto%YI <= BoundingBox%YE)) .AND. & - & ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & - & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. & - & ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. & - & ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) THEN - - ! - WRITE (probenumber, '(i7)') ii - ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & - ! trim(adjustl(this%BloquePrb%BP(i)%outputrequest)) - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XE = punto%XE - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YE = punto%YE - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZE = punto%ZE - sgg%observation(ii)%P(sgg%observation(ii)%nP)%what = tipotemp - ENDIF - END DO -!!!!210618 tambien se crrean extras dummy para los vtk - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - if (associated(this%VolPrb%collection).and.(tamaScrPrb/=0).and.(i<=this%VolPrb%length)) then !280618 & 220319 - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - else - sgg%observation( tamaScrPrb/3+ii)%outputrequest=' ' !es un dummy mapvtk sin nombre 280618 - endif - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. - if (associated(this%VolPrb%collection).and.(tamaScrPrb/=0).and.(i<=this%VolPrb%length)) then !280618 & 220319 - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - else - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=' ' !es un dummy mapvtk sin nombre 280618 - endif - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing - -!!!210618 triplica info sondas de frequencia - sgg%observation(tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic - sgg%observation(tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime - sgg%observation(tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime - sgg%observation(tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep - sgg%observation(tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq - sgg%observation(tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq - sgg%observation(tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep - sgg%observation(tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE - ! - !trancos - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Xtrancos = 1 !default - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ytrancos = 1 !default - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ztrancos = 1 !default - !fin trancos - - !!!!!!!!!!!!!!!!!! - sgg%observation(2*tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic - sgg%observation(2*tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime - sgg%observation(2*tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime - sgg%observation(2*tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep - sgg%observation(2*tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq - sgg%observation(2*tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq - sgg%observation(2*tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep - sgg%observation(2*tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE - ! - !trancos - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Xtrancos = 1 !default - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ytrancos = 1 !default - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ztrancos = 1 !default - !fin trancos - - else !del mapvtk -!!!210618 - sgg%observation(ii)%Volumic = .true. - sgg%observation(ii)%InitialTime = this%VolPrb%collection(i)%tstart - sgg%observation(ii)%FinalTime = this%VolPrb%collection(i)%tstop - sgg%observation(ii)%TimeStep = this%VolPrb%collection(i)%tstep - sgg%observation(ii)%outputrequest = trim (adjustl( this%VolPrb%collection(i)%outputrequest)) - sgg%observation(ii)%InitialFreq = this%VolPrb%collection(i)%fstart - sgg%observation(ii)%FinalFreq = this%VolPrb%collection(i)%fstop - sgg%observation(ii)%FreqStep = this%VolPrb%collection(i)%fstep - sgg%observation(ii)%FileNormalize = trim (adjustl(this%VolPrb%collection(i)%filename)) - sgg%observation(ii)%nP = 0 - tama2 = (this%VolPrb%collection(i)%len_cor) - IF (tama2 >1 ) THEN - WRITE (buff,*) 'Only 1 Volumic probe allown per section' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - DO j = 1, tama2 - !I clip these probes to allow out-of-the box snapshot probes - tipotemp = this%VolPrb%collection(i)%cordinates(j)%or - punto%XI = max(this%VolPrb%collection(i)%cordinates(j)%XI,SINPML_fullsize(iEx)%XI) - punto%YI = max(this%VolPrb%collection(i)%cordinates(j)%YI,SINPML_fullsize(iEy)%YI) - punto%ZI = max(this%VolPrb%collection(i)%cordinates(j)%ZI,SINPML_fullsize(iEz)%ZI) - punto%XE = min(this%VolPrb%collection(i)%cordinates(j)%XE,SINPML_fullsize(iEx)%XE) - punto%YE = min(this%VolPrb%collection(i)%cordinates(j)%YE,SINPML_fullsize(iEy)%YE) - punto%ZE = min(this%VolPrb%collection(i)%cordinates(j)%ZE,SINPML_fullsize(iEz)%ZE) - memo=memo+(punto%XE-punto%XI+1)*(punto%YE-punto%YI+1)*(punto%ZE-punto%ZI+1) - - IF (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. & - & ((punto%YI >= BoundingBox%YI) .OR. (punto%YI <= BoundingBox%YE)) .AND. & - & ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & - & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. & - & ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. & - & ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) THEN - - ! - WRITE (probenumber, '(i7)') ii - ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & - ! trim(adjustl(this%BloquePrb%BP(i)%outputrequest)) - ! - sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI - sgg%observation(ii)%P(sgg%observation(ii)%nP)%XE = punto%XE - sgg%observation(ii)%P(sgg%observation(ii)%nP)%YE = punto%YE - sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZE = punto%ZE - !trancos - sgg%observation(ii)%P(sgg%observation(ii)%nP)%Xtrancos = this%VolPrb%collection(i)%cordinates(sgg%observation(ii)%nP)%Xtrancos - sgg%observation(ii)%P(sgg%observation(ii)%nP)%Ytrancos = this%VolPrb%collection(i)%cordinates(sgg%observation(ii)%nP)%Ytrancos - sgg%observation(ii)%P(sgg%observation(ii)%nP)%Ztrancos = this%VolPrb%collection(i)%cordinates(sgg%observation(ii)%nP)%Ztrancos - !fin trancos - - ENDIF - END DO -! - SELECT CASE (this%VolPrb%collection(i)%type2) - CASE (NP_T2_time) - - sgg%observation(ii)%TimeDomain = .TRUE. - sgg%observation(ii)%FreqDomain = .FALSE. - sgg%observation(ii)%TRANSFER = .FALSE. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing -! - CASE (NP_T2_FREQ) - !I will TRANSFORM ON THE FLY - sgg%observation(ii)%TimeDomain = .false. - sgg%observation(ii)%FreqDomain = .false. - sgg%observation(ii)%TRANSFER = .false. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing !el nothing debe predominar -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing -! - CASE (NP_T2_TRANSFER) - !I will TRANSFORM ON THE FLY - sgg%observation(ii)%TimeDomain = .false. - sgg%observation(ii)%FreqDomain = .false. - sgg%observation(ii)%TRANSFER = .false. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing !el nothing predomina sobre los true anteriores -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp - CASE (NP_T2_TIMEFREQ ) - sgg%observation(ii)%TimeDomain = .true. - sgg%observation(ii)%FreqDomain = .false. - sgg%observation(ii)%TRANSFER = .false. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp !el nothing predomina sobre los true anteriores -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing - CASE (NP_T2_TIMETRANSF) - sgg%observation(ii)%TimeDomain = .true. - sgg%observation(ii)%FreqDomain = .false. - sgg%observation(ii)%TRANSFER = .false. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp !el nothing predomina sobre los true anteriores -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp - CASE (NP_T2_FREQTRANSF) - sgg%observation(ii)%TimeDomain = .false. - sgg%observation(ii)%FreqDomain = .false. - sgg%observation(ii)%TRANSFER = .false. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp -! - CASE (NP_T2_TIMEFRECTRANSF) - sgg%observation(ii)%TimeDomain = .true. - sgg%observation(ii)%FreqDomain = .false. - sgg%observation(ii)%TRANSFER = .false. - sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp -! - sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. - sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. - sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' - sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) - sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp -! - sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. - sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. - sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. - sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' - sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np - ALLOCATE (sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp -! - END SELECT -!!!210618 triplica info sondas de frequencia - sgg%observation(tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic - sgg%observation(tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime - sgg%observation(tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime - sgg%observation(tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep - sgg%observation(tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq - sgg%observation(tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq - sgg%observation(tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep - sgg%observation(tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE - !trancos - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Xtrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Xtrancos - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ytrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ytrancos - sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ztrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ztrancos - !fin trancos - !!!!!!!!!!!!!!!!!! - sgg%observation(2*tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic - sgg%observation(2*tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime - sgg%observation(2*tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime - sgg%observation(2*tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep - sgg%observation(2*tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq - sgg%observation(2*tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq - sgg%observation(2*tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep - sgg%observation(2*tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE - !trancos - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Xtrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Xtrancos - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ytrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ytrancos - sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ztrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ztrancos - !fin trancos - -!!!210618 -!!!find 210618 - endif - !DE LAS VolumicPROBLES - END DO -!!!210618 - DO i = tamaScrPrb/3+1,tamaScrPrb - ii = i + tamaSonda + tamaoldSONDA + tamaBloquePrb !Bug 040718 - if (sgg%observation(ii)%nP /=1) then -!para 040718 - WRITE (buff,*) '----> Volumic probe ii. np=',sgg%observation(ii)%nP - CALL print11 (layoutnumber, buff) - WRITE (buff,*) '----> Volumic probe ii. outputrequest=',trim(adjustl(sgg%observation(ii)%outputrequest)) - CALL print11 (layoutnumber, buff) -!fin para debugear - WRITE (buff,*) 'Buggy error in Volumic probes. np/=1. , np=',sgg%observation(ii)%nP - CALL STOPONERROR(layoutnumber,size,buff) - endif - end do -!!!find 210618 - - !luego chequeo las sondas si se van de memoria en observation.f90 - ! IF ((memo+sondas)*BuffObse*4 > MaxMemoryProbes) THEN - ! WRITE (buff,*) 'Too much memory for the probes= ', (memo+sondas)*BuffObse*4, 'Probes= ', (memo+sondas), & - ! & 'Either reduce the number of probes or recompile decreasing BuffObse ', BuffObse, 'or increasing ', MaxMemoryProbes - ! CALL STOPONERROR(layoutnumber,size,buff) - ! END IF - - !del if sgg%numberrequest - END IF - !las lineas goto 8 que sigue la comento a 27/10/14 porque "creo" que la informacion de shared es necesaria actualizarse - !este bug aparece en bug_OLD221014_a400m_skindepth en Modelo.nfde - !!!goto 8 !!!!? - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !Update the number of the shared fields - if (updateshared) then !!aqui se pierde mucho tiempo aniadido flag -noshared para evitarlo 040717 - WRITE (buff,*) 'INIT UPDATING SHARED INFO. This process may take time!' - CALL print11 (layoutnumber, buff) - WRITE (buff,*) 'Launch with -noshared to skip this process (just relevant for structured NIBC CFCs and Anisot.)' - CALL print11 (layoutnumber, buff) - DO i1 = 1, sgg%EShared%conta - DO j1 = i1 + 1, sgg%EShared%conta - IF ((sgg%Med(sgg%EShared%elem(i1)%SharedMed)%Priority == sgg%Med(sgg%EShared%elem(j1)%SharedMed)%Priority) .AND. & - & (sgg%EShared%elem(i1)%field == sgg%EShared%elem(j1)%field) .AND. (sgg%EShared%elem(i1)%i == sgg%EShared%elem(j1)%i) & - & .AND. (sgg%EShared%elem(i1)%j == sgg%EShared%elem(j1)%j) .AND. (sgg%EShared%elem(i1)%k == sgg%EShared%elem(j1)%k)) & - & THEN - sgg%EShared%elem(i1)%times = sgg%EShared%elem(i1)%times + 1 - sgg%EShared%elem(j1)%times = sgg%EShared%elem(j1)%times + 1 - !!!!!!!! write (17,*) i1,j1,sgg%EShared%elem(j1)%times,sgg%Med(sgg%EShared%elem(j1)%SharedMed)%Priority - if (sgg%EShared%elem(j1)%times > 4) then - write(buff,'(a,4i5)') 'WARNING: More than 4 media try to occupy ', sgg%EShared%elem(j1)%field,sgg%EShared%elem(j1)%i, & - sgg%EShared%elem(j1)%j, sgg%EShared%elem(j1)%k - if ( ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%thinwire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%thinwire)).and. & - ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%SlantedWire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%SlantedWire)).or.verbose) CALL WarnErrReport (buff) - endif - END IF - END DO - END DO - !Update the number of the shared fields - DO i1 = 1, sgg%HShared%conta - DO j1 = i1 + 1, sgg%HShared%conta - IF ((sgg%Med(sgg%HShared%elem(i1)%SharedMed)%Priority == sgg%Med(sgg%HShared%elem(j1)%SharedMed)%Priority) .AND. & - & (sgg%HShared%elem(i1)%field == sgg%HShared%elem(j1)%field) .AND. (sgg%HShared%elem(i1)%i == sgg%HShared%elem(j1)%i) & - & .AND. (sgg%HShared%elem(i1)%j == sgg%HShared%elem(j1)%j) .AND. (sgg%HShared%elem(i1)%k == sgg%HShared%elem(j1)%k)) & - & THEN - sgg%HShared%elem(i1)%times = sgg%HShared%elem(i1)%times + 1 - sgg%HShared%elem(j1)%times = sgg%HShared%elem(j1)%times + 1 - if (sgg%HShared%elem(j1)%times > 4) then - write(buff,'(a,4i5)') 'WARNING: More than 4 media try to occupy ', sgg%hShared%elem(j1)%field,sgg%HShared%elem(j1)%i, & - sgg%HShared%elem(j1)%j, sgg%HShared%elem(j1)%k - if ( ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%thinwire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%thinwire)).and. & - ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%SlantedWire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%SlantedWire)).or.verbose) CALL WarnErrReport (buff) - endif - END IF - END DO - END DO - !end shared -8 continue - WRITE (buff,*) '[OK] END UPDATING SHARED INFO' - CALL print11 (layoutnumber, buff) - end if !del updateshared - - !PARA LA CAPA EXTRA 2013 - if (medioextra%exists) then - CONTAMEDIA = CONTAMEDIA+1 - if (MEDIOEXTRA%index /= contamedia) then !should be already done earlier - CALL STOPONERROR(layoutnumber,size,'Bug in media count. ') - endif - MEDIOEXTRA%index=CONTAMEDIA - endif - !!!!!!!!!!!!! - if (contamedia > sgg%AllocMed) then - call Readjust(sgg%AllocMed, sgg%Med, contamedia) - end if - sgg%NumMedia = contamedia - !el medio 0 no precisa compresion - - - IF ((CLIPREGION)) THEN !ALLOW four cells OF AIR CELLS TO CLIP LARGE PROBLES WITH NO PROBLEMS WITH BOUNDARIES solo sin MPI - do field=1,6 - DO K= sgg%Alloc(field)%ZI , sgg%Alloc(field)%ZE - DO J= sgg%Alloc(field)%YI , sgg%Alloc(field)%YE - DO I= sgg%Alloc(field)%XI , sgg%Alloc(field)%XE - if ( (i>=sinpml_FULLSIZE(field)%XI) .AND.(i<=sinpml_FULLSIZE(field)%XI+4).OR. & - (i>=sinpml_FULLSIZE(field)%XE-4).AND.(i<=sinpml_FULLSIZE(field)%XE ).OR. & - (J>=sinpml_FULLSIZE(field)%YI) .AND.(j<=sinpml_FULLSIZE(field)%YI+4).OR. & - (J>=sinpml_FULLSIZE(field)%YE-4).AND.(j<=sinpml_FULLSIZE(field)%YE ).OR. & - (K>=sinpml_FULLSIZE(field)%ZI) .AND.(K<=sinpml_FULLSIZE(field)%ZI+4).OR. & - (K>=sinpml_FULLSIZE(field)%ZE-4).AND.(K<=sinpml_FULLSIZE(field)%ZE )) THEN - select case (field) - case (iEx) - media%sggMIEX(I,J,K)=1 - case (iEy) - media%sggMIEY(I,J,K)=1 - case (iEz) - media%sggMIEZ(I,J,K)=1 - case (iHx) - media%sggMiHX(I,J,K)=1 - case (iHy) - media%sggMiHY(I,J,K)=1 - case (iHz) - media%sggMiHZ(I,J,K)=1 - end select - ENDIF - END DO - END DO - END DO - end do !del field - endif !del CLIPREGION - - !!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!fin clipeado - !!!!!!!!!!!!!!!!!!!!!!!!!!!! - CALL CreatePMLmatrix (layoutnumber, SIZE,sgg,media%sggMiEx,media%sggMiEy,media%sggMiEz,media%sggMiHx,media%sggMiHy,media%sggMiHz, SINPML_fullsize, fullsize, BoundingBox, sgg%Med, sgg%NumMedia, sgg%Border,MEDIOEXTRA) - sgg%EndPMLMedia = sgg%NumMedia - - ! -#ifdef CompileWithInt1 - IF (sgg%NumMedia > 127) THEN - CLOSE (14) - IF (sgg%NumMedia > 32767) THEN - buff='Number of media>32767. Recompile with #define CompileWithInt4' - CALL STOPONERROR(layoutnumber,size,buff) - ELSE - buff='Number of media>127. Recompile with #define CompileWithInt2' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - END IF -#endif -#ifdef CompileWithInt2 - IF (sgg%NumMedia > 32767) THEN - CLOSE (14) - buff='Number of media>32767. Recompile with #define CompileWithInt4' - CALL STOPONERROR(layoutnumber,size,buff) - END IF -#endif -#ifdef CompileWithInt4 - IF (sgg%NumMedia > 2.0e9) THEN - CLOSE (14) - buff='Number of media>2^31-1. Cannot continue. ' - CALL STOPONERROR(layoutnumber,size,buff) - END IF -#endif - !read the source files - ! - call read_TIMEFRECTRANSFsourcefiles(simu_devia) - ! - DO ii = 1, tamaSonda - !Read the time normalization file - ! - IF (sgg%observation(ii)%TRANSFER) THEN - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%observation(ii)%FileNormalize)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%observation(ii)%FileNormalize))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - END IF - ! - END DO -!!!!ajusta el flag lossy de los medios (261115) !aunque ya esta hecho por ahi arriba, lo rehago aqui -!!!!Ojo con que el usuario siempre ponga conductividad en !!compo para que esto no reviente -!!!mamma mia. comentado lo siguiente a 120123 para que las puestas a lossy thin wire conectado con resistor sean correctas. bug test_GGGbugresis_wire_stoch_foragasconbug - !!!DO i = 1, sgg%NumMedia - !!! if ( (.not.(sgg%med(i)%is%PEC)).and.(sgg%med(i)%sigma >= 1e-4) ) then - !!! sgg%med(i)%is%lossy = .true. - !!! else - !!! sgg%med(i)%is%lossy = .false. - !!! endif - !!!end do - !!!fin 120123 -!!!!!! - !!!!!!!!!!do a final check if magnetic media are present - !sgg jun'12 dejarlo siempre a .true. pq es lo mas seguro - !sgg%thereAreMagneticMedia=.false. - !sgg%thereArePMLMagneticMedia=.false. - !medioespecial = .false. - !do ii=1,sgg%NumMedia - ! buff='PEC media can only have index 0' - ! IF (sgg%Med(ii)%Is%PEC.or.sgg%Med(ii)%Is%Lumped) call STOPONERROR(layoutnumber,size,buff) - ! medioespecial =medioespecial .or. & - ! sgg%Med(ii)%Is%EDispersive .or. & - ! sgg%Med(ii)%Is%multiport .or. & - ! sgg%Med(ii)%Is%AnisMultiport .or. & - ! sgg%Med(ii)%Is%Anisotropic .or. & - ! sgg%Med(ii)%Is%ThinSlot .or. & - ! sgg%Med(ii)%Is%MDispersive - !end do - !if (.not.medioespecial) then - ! do ii=1,sgg%NumMedia - ! if ((SGG%Med(ii)%mur >1.001).or.(SGG%Med(ii)%mur <0.999).or. & - ! (abs(SGG%Med(ii)%sigmam) >1.0e-3_RKIND0)) then - ! if (.not. sgg%Med(ii)%Is%PML ) then - ! sgg%thereAreMagneticMedia=.true. - ! else - ! sgg%thereArePMLMagneticMedia=.true. - ! endif - ! endif - ! end do - !else - sgg%thereAreMagneticMedia=.true. - sgg%thereArePMLMagneticMedia=.true. - !endif - !!!!!!!!!!!!!!!!!!!!!!!!!!!!! - RETURN - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - contains - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - - function computeConformalTimeFactor(volumes, surfaces) result(res) - type(ConformalMedia_t), allocatable, dimension(:), intent(in) :: volumes, surfaces - real(kind=rkind) :: res - integer :: t - res = 1.0 - do t = 1, ubound(volumes,1) - if (volumes(t)%time_step_scale_factor < res) then - res = volumes(t)%time_step_scale_factor - end if - end do - do t = 1, ubound(surfaces,1) - if (surfaces(t)%time_step_scale_factor < res) then - res = surfaces(t)%time_step_scale_factor - end if - end do - end function - - function changeTimeStepIfConformalNeeded(sgg_dt) result(res) - real(kind=RKIND_tiempo), intent(in) :: sgg_dt - real(kind=RKIND_tiempo) :: yee_dt, time_scale_factor - real(kind=RKIND_tiempo) :: res - time_scale_factor = computeConformalTimeFactor(conformal_volumes, conformal_surfaces) - yee_dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & - ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & - ((1.0_RKIND / minval(sgg%DZ))**2.0_RKIND )))) - if (sgg_dt > yee_dt*time_scale_factor) then - write(*,*) '-- Conformal geometry requires a time step change' - write(*,*) 'Previous time step: ', sgg_dt - res = yee_dt*time_scale_factor - write(*,*) 'New time step: ', res - else - res = sgg_dt - end if - - end function - - subroutine initConformalBoundingBox(sgg, bbox) - type(sggfdtdinfo_t), intent(in) :: sgg - type(XYZlimit_t), intent(inout) :: bbox - bbox%XI = -sgg%Alloc(iHx)%XI - bbox%XE = -sgg%Alloc(iHx)%XE - bbox%YI = -sgg%Alloc(iHy)%YI - bbox%YE = -sgg%Alloc(iHy)%YE - bbox%ZI = -sgg%Alloc(iHz)%ZI - bbox%ZE = -sgg%Alloc(iHz)%ZE - end subroutine - - subroutine getDifferentEdgeRatios(ratios, conf_media) - real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media - integer :: i, j, k - real (kind=rkind), dimension(:), allocatable :: aux - logical :: isNew - if (.not. allocated(ratios)) allocate(ratios(0)) - do i = 1, ubound(conf_media,1) - do j = 1, ubound(conf_media(i)%edge_media,1) - isNew = .true. - do k = 1, ubound(ratios,1) - if (eq_ratio(ratios(k), conf_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. - end do - if (isNew) then - block - if (ubound(ratios,1) == 0) then - deallocate(ratios) - allocate(ratios(1)) - ratios(1) = conf_media(i)%edge_media(j)%ratio - else - if (allocated(aux)) deallocate(aux) - allocate(aux(ubound(ratios,1) + 1)) - aux(1:ubound(ratios,1)) = ratios - aux(ubound(ratios,1) + 1) = conf_media(i)%edge_media(j)%ratio - deallocate(ratios) - allocate(ratios(ubound(aux,1))) - ratios = aux - end if - end block - end if - end do - end do - end subroutine - subroutine getDifferentFaceRatios(ratios, conf_media) - real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media - integer :: i, j, k - real (kind=rkind), dimension(:), allocatable :: aux - logical :: isNew - if (.not. allocated(ratios)) allocate(ratios(0)) - do i = 1, ubound(conf_media,1) - do j = 1, ubound(conf_media(i)%face_media,1) - - isNew = .true. - do k = 1, ubound(ratios,1) - if (eq_ratio(ratios(k), conf_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. - end do - if (isNew) then - block - if (ubound(ratios,1) == 0) then - deallocate(ratios) - allocate(ratios(1)) - ratios(1) = conf_media(i)%face_media(j)%ratio - else - if (allocated(aux)) deallocate(aux) - allocate(aux(ubound(ratios,1) + 1)) - aux(1:ubound(ratios,1)) = ratios - aux(ubound(ratios,1) + 1) = conf_media(i)%face_media(j)%ratio - deallocate(ratios) - allocate(ratios(ubound(aux,1))) - ratios = aux - end if - end block - end if - end do - end do - end subroutine - - subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map, type) - type(sggfdtdinfo_t), intent(inout) :: sgg - type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes - real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios - real(kind=rkind), dimension(:), allocatable :: edge_ratios_no_zero, face_ratios_no_zero - integer (kind=4), intent(in) :: contamedia - integer (kind=4) :: num_media - type(XYZlimit_t), intent(inout) :: bbox - type(side_tris_map_t), intent(in) :: side_map - integer (kind=4) :: type - integer :: i, j - call initConformalBoundingBox(sgg,bbox) - - if (findloc(edge_ratios, 0.0, 1) /= 0) then - allocate(edge_ratios_no_zero(ubound(edge_ratios,1) - 1)) - k = 0 - do j = 1, ubound(edge_ratios,1) - if (edge_ratios(j) /= 0) then - k = k + 1 - edge_ratios_no_zero(k) = edge_ratios(j) - end if - end do - else - edge_ratios_no_zero = edge_ratios - end if - - if (findloc(face_ratios, 0.0, 1) /= 0) then - allocate(face_ratios_no_zero(ubound(face_ratios,1) - 1)) - k = 0 - do j = 1, ubound(face_ratios,1) - if (face_ratios(j) /= 0) then - k = k + 1 - face_ratios_no_zero(k) = face_ratios(j) - end if - end do - else - face_ratios_no_zero = face_ratios - end if - num_media = contamedia - call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, type) - num_media = contamedia + ubound(edge_ratios_no_zero,1) - call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox, type) - if (type == isVolume) then - call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) - end if - end subroutine - - subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes - integer (kind=4), intent(in) :: num_media - real (kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios - - integer (kind=4) :: face_media - integer (kind=4) :: cell(3) - integer (kind=4) :: previous_faces - type(face_t), dimension(:), allocatable :: combined_faces - type(XYZlimit_t), intent(inout) :: bbox - integer (kind=4), intent(in) :: type - integer :: j, k - do j = 1, conformal_volumes%n_faces_media - if (conformal_volumes%face_media(j)%ratio /= 0) then - face_media = num_media + findloc(face_ratios, conformal_volumes%face_media(j)%ratio, 1) - sgg%Med(face_media)%Is%ConformalPEC = .TRUE. - sgg%Med(face_media)%Is%Needed = .TRUE. - if (type == isVolume) sgg%Med(face_media)%Is%Volume = .TRUE. - if (type == isSurface) sgg%Med(face_media)%Is%Surface = .TRUE. - sgg%Med(face_media)%Priority = prior_PEC - sgg%Med(face_media)%Epr = this%mats%mats(1)%eps / Eps0 - sgg%Med(face_media)%Sigma = 1.0e29_RKIND - sgg%Med(face_media)%Mur = conformal_volumes%face_media(j)%ratio * this%mats%mats(1)%mu / Mu0 - sgg%Med(face_media)%SigmaM = 0.0_RKIND - else - face_media = 0 - end if - - previous_faces = 0 - if (allocated(sgg%Med(face_media)%ConformalFace)) previous_faces = ubound(sgg%Med(face_media)%ConformalFace, 1) - allocate(combined_faces(previous_faces + conformal_volumes%face_media(j)%size)) - if (previous_faces > 0) combined_faces(1:previous_faces) = sgg%Med(face_media)%ConformalFace - - do k = 1, conformal_volumes%face_media(j)%size - cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) - if (cell(1) < bbox%xi) bbox%xi = cell(1) - if (cell(1) > bbox%xe) bbox%xe = cell(1) - if (cell(2) < bbox%yi) bbox%yi = cell(2) - if (cell(2) > bbox%ye) bbox%ye = cell(2) - if (cell(3) < bbox%zi) bbox%zi = cell(3) - if (cell(3) > bbox%ze) bbox%ze = cell(3) - - select case(conformal_volumes%face_media(j)%faces(k)%direction) - case(F_X) - media%sggMiHx(cell(1), cell(2), cell(3)) = face_media - case(F_Y) - media%sggMiHy(cell(1), cell(2), cell(3)) = face_media - case(F_Z) - media%sggMiHz(cell(1), cell(2), cell(3)) = face_media - end select - - combined_faces(previous_faces+k) = conformal_volumes%face_media(j)%faces(k) - - end do - call move_alloc(combined_faces, sgg%Med(face_media)%ConformalFace) - end do - end subroutine - - - - function getEdgeNormalFromTriangles(triangles) result(res) - type(triangle_t), dimension(:), allocatable :: triangles - real, dimension(3) :: res - integer :: i - res(:) = 0.0 - do i = 1, ubound(triangles, 1) - res = res + triangles(i)%getNormal() - end do - res = res/ubound(triangles,1) - end function - - subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, type) - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes - integer (kind=4), intent(in) :: num_media - - real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios - integer (kind=4) :: edge_media - integer (kind=4) :: cell(3) - integer (kind=4) :: previous_edges - type(edge_t), dimension(:), allocatable :: combined_edges - type(XYZlimit_t), intent(inout) :: bbox - integer (kind=4), intent(in) :: type - ! integer(kind=4), dimension(4) :: key - integer :: j, k - real, dimension(3) :: normal - - do j = 1, conformal_volumes%n_edges_media - if (conformal_volumes%edge_media(j)%ratio /= 0) then - edge_media = num_media + findloc(edge_ratios, conformal_volumes%edge_media(j)%ratio,1) - sgg%Med(edge_media)%Is%ConformalPEC = .TRUE. - sgg%Med(edge_media)%Is%Needed = .TRUE. - if (type == isVolume) sgg%Med(edge_media)%Is%Volume = .TRUE. - if (type == isSurface) sgg%Med(edge_media)%Is%Surface = .TRUE. - sgg%Med(edge_media)%Priority = prior_PEC - sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_volumes%edge_media(j)%ratio ) / Eps0 - sgg%Med(edge_media)%Sigma = 1.0e29_RKIND - sgg%Med(edge_media)%Mur = this%mats%mats(1)%mu / Mu0 - sgg%Med(edge_media)%SigmaM = 0.0_RKIND - else - edge_media = 0 - end if - - previous_edges = 0 - if (allocated(sgg%Med(edge_media)%ConformalEdge)) previous_edges = ubound(sgg%Med(edge_media)%ConformalEdge, 1) - allocate(combined_edges(previous_edges + conformal_volumes%edge_media(j)%size)) - if (previous_edges > 0) combined_edges(1:previous_edges) = sgg%Med(edge_media)%ConformalEdge - - - do k = 1, conformal_volumes%edge_media(j)%size - cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) - - if (cell(1) < bbox%xi) bbox%xi = cell(1) - if (cell(1) > bbox%xe) bbox%xe = cell(1) - if (cell(2) < bbox%yi) bbox%yi = cell(2) - if (cell(2) > bbox%ye) bbox%ye = cell(2) - if (cell(3) < bbox%zi) bbox%zi = cell(3) - if (cell(3) > bbox%ze) bbox%ze = cell(3) - - select case(conformal_volumes%edge_media(j)%edges(k)%direction) - case(E_X) - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - case(E_Y) - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - case(E_Z) - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - end select - - combined_edges(previous_edges+k) = conformal_volumes%edge_media(j)%edges(k) - - - end do - call move_alloc(combined_edges, sgg%Med(edge_media)%ConformalEdge) - end do - end subroutine - - subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes - integer (kind=4), intent(in) :: num_media - - real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios - integer (kind=4) :: edge_media - integer (kind=4) :: cell(3) - type(XYZlimit_t), intent(inout) :: bbox - type(side_tris_map_t), intent(in) :: side_map - type(triangle_t), dimension(:), allocatable :: tris - integer(kind=4), dimension(4) :: key - integer :: j, k - real, dimension(3) :: normal - - do j = 1, conformal_volumes%n_edges_media - if (conformal_volumes%edge_media(j)%ratio == 0) then - edge_media = 0 - do k = 1, conformal_volumes%edge_media(j)%size - cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) - key(1:3) = cell - - select case(conformal_volumes%edge_media(j)%edges(k)%direction) - case(E_X) - key(4) = E_X - if (side_map%hasKey(key)) then - tris = side_map%getTrianglesFromSide(key) - normal = getEdgeNormalFromTriangles(tris) - if (normal(2) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHz(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2)+1, cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then - media%sggMiHz(cell(1), cell(2)-1, cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2)-1, cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2)-1, cell(3)) = edge_media - media%sggMiEy(cell(1)+1, cell(2)-1, cell(3)) = edge_media - end if - - if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)+1) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1)+1, cell(2), cell(3)) = edge_media - - else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then - media%sggMiHy(cell(1), cell(2), cell(3)-1) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)-1) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)-1) = edge_media - media%sggMiEz(cell(1)+1, cell(2), cell(3)-1) = edge_media - - end if - end if - case(E_Y) - key(4) = E_Y - if (edge_media == 0 .and. side_map%hasKey(key)) then - tris = side_map%getTrianglesFromSide(key) - normal = getEdgeNormalFromTriangles(tris) - if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)+1) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1), cell(2)+1, cell(3)) = edge_media - else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then - media%sggMiHx(cell(1), cell(2), cell(3)-1) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)-1) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)-1) = edge_media - media%sggMiEz(cell(1), cell(2)+1, cell(3)-1) = edge_media - end if - - if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHz(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2)+1, cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHz(cell(1)-1, cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1)-1, cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1)-1, cell(2)+1, cell(3)) = edge_media - media%sggMiEy(cell(1)-1, cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - end if - end if - case(E_Z) - key(4) = E_Z - if (edge_media == 0 .and. side_map%hasKey(key)) then - tris = side_map%getTrianglesFromSide(key) - normal = getEdgeNormalFromTriangles(tris) - if (normal(2) < 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2), cell(3)+1) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1), cell(2)+1, cell(3)) = edge_media - else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then - media%sggMiHx(cell(1), cell(2)-1, cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2)-1, cell(3)) = edge_media - media%sggMiEy(cell(1), cell(2)-1, cell(3)+1) = edge_media - media%sggMiEz(cell(1), cell(2)-1, cell(3)) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - end if - if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHy(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1), cell(2), cell(3)+1) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then - media%sggMiHy(cell(1)-1, cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1)-1, cell(2), cell(3)) = edge_media - media%sggMiEx(cell(1)-1, cell(2), cell(3)+1) = edge_media - media%sggMiEz(cell(1)-1, cell(2), cell(3)) = edge_media - media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media - end if - end if - end select - end do - end if - end do - end subroutine - - subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) - logical :: simu_devia - real (kind=RKIND) :: deviafactor_Multiplier,unillo,tiempoant - if (simu_devia) then - deviafactor_Multiplier=1.0_RKIND !correccion de 160619. gestiono la iluminacion o no con la variable simu_devia, para que postprocese bien los ficheros devia_ !deprecar deviafactor_Multiplier algun dia - ELSE - deviafactor_Multiplier=1.0_RKIND - ENDIF -!!!! SOURCES IN WIRES - maxSourceValue=0.0_RKIND - minSpaceStep=min(min(minval(sgg%dx),minval(sgg%dy)),minval(sgg%dz)) - DO i = 1, sgg%NumMedia - IF (sgg%Med(i)%Is%ThinWire) THEN - IF (sgg%Med(i)%wire(1)%VsourceExists) THEN - DO CONTAVOLT=1,sgg%Med(i)%wire(1)%NUMVOLTAGESOURCES - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - OPEN (15, file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)),action='read') - READ (15,*) tiempo1, field1 - READ (15,*) tiempo2, field2 - sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%deltaSamples = tiempo2 - tiempo1 - nsurfs = 3 - !problemas con multivac - ! while (.not.eof(15)) - DO - READ (15,*, end=77) tiempo1, field1 - if (field1/minspacestep > maxSourceValue) maxSourceValue=field1/minspacestep - nsurfs = nsurfs + 1 - END DO -77 CONTINUE - CLOSE (15) - numus = nsurfs - 2 - sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NumSamples = numus - ALLOCATE (sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(0:numus)) - OPEN (15, file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)),action='read') - DO k = 0, numus - tiempoant=tiempo1 - READ (15,*) tiempo1, sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(k) - sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(k) = sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(k) * & - & sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%Multiplier * & - deviafactor_Multiplier - !!evitar sampleos no uniformes - if ((k>1).and.(k1.0_RKIND/0.9)) then - if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo - buff=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' - if (.not.ignoresamplingerrors) then - CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif - endif - endif - END DO - CLOSE (15) - sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NumSamples = numus - END DO - END IF - END IF - IF (sgg%Med(i)%Is%ThinWire) THEN - IF (sgg%Med(i)%wire(1)%IsourceExists) THEN - DO CONTACURR=1,sgg%Med(i)%wire(1)%NUMCURRENTSOURCES - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - OPEN (15, file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)),action='read') - READ (15,*) tiempo1, field1 - READ (15,*) tiempo2, field2 - sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%deltaSamples = tiempo2 - tiempo1 - nsurfs = 3 - !problemas con multivac - ! while (.not.eof(15)) - DO - READ (15,*, end=79) tiempo1, field1 - if (field1/minspacestep**2.0_RKIND > maxSourceValue) maxSourceValue=field1/minspacestep**2.0_RKIND !aqui no tengo feeling, pero estas fuentes no se usan !!? repensar - nsurfs = nsurfs + 1 - END DO -79 CONTINUE - CLOSE (15) - numus = nsurfs - 2 - sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NumSamples = numus - ALLOCATE (sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(0:numus)) - OPEN (15, file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)),action='read') - DO k = 0, numus - tiempoant=tiempo1 - READ (15,*) tiempo1, sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(k) - sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(k) = sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(k) * & - & sgg%Med(i)%wire(1)%ISource(CONTACURR)%Multiplier * & - deviafactor_Multiplier - !!evitar sampleos no uniformes - if ((k>1).and.(k1.0_RKIND/0.9)) then - if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo - buff=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' - if (.not.ignoresamplingerrors) then - CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif - endif - endif - !! - END DO - CLOSE (15) - sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NumSamples = numus - END DO - END IF - END IF - ! - IF (sgg%Med(i)%Is%SlantedWire) THEN - DO j = 1,sgg%Med(i)%SlantedWire(1)%numNodes - IF (sgg%Med(i)%SlantedWire(1)%nodes(j)%VsourceExists) then - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - OPEN (15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)),action='read') - READ (15,*) tiempo1, field1 - READ (15,*) tiempo2, field2 - sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%deltaSamples = tiempo2 - tiempo1 - nsurfs = 3 - !problemas con multivac - ! while (.not.eof(15)) - DO - READ (15,*, end=179) tiempo1, field1 - if (field1/minspacestep > maxSourceValue) maxSourceValue=field1/minspacestep - nsurfs = nsurfs + 1 - END DO -179 CONTINUE - CLOSE (15) - numus = nsurfs - 2 - sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NumSamples = numus - ALLOCATE (sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(0:numus)) - OPEN (15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)),action='read') - DO k = 0, numus - tiempoant=tiempo1 - READ (15,*) tiempo1, sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(k) - sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(k) = sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(k) * & - sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%Multiplier * & - deviafactor_Multiplier - !!evitar sampleos no uniformes - if ((k>1).and.(k1.0_RKIND/0.9)) then - if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo - buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' - if (.not.ignoresamplingerrors) then - CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif - endif - endif - !! - END DO - CLOSE (15) - sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NumSamples = numus - END IF - IF (sgg%Med(i)%SlantedWire(1)%nodes(j)%IsourceExists) then - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - OPEN (15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)),action='read') - READ (15,*) tiempo1, field1 - READ (15,*) tiempo2, field2 - sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%deltaSamples = tiempo2 - tiempo1 - nsurfs = 3 - !problemas con multivac - ! while (.not.eof(15)) - DO - READ (15,*, end=279) tiempo1, field1 - if (field1/minspacestep**2.0_RKIND > maxSourceValue) maxSourceValue=field1/minspacestep**2.0_RKIND !aqui no tengo feeling, pero estas fuentes no se usan !!? repensar - nsurfs = nsurfs + 1 - END DO -279 CONTINUE - CLOSE (15) - numus = nsurfs - 2 - sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NumSamples = numus - ALLOCATE (sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(0:numus)) - OPEN (15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)),action='read') - DO k = 0, numus - tiempoant=tiempo1 - READ (15,*) tiempo1, sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(k) - sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(k) = sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(k) * & - sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%Multiplier * & - deviafactor_Multiplier - !!evitar sampleos no uniformes - if ((k>1).and.(k1.0_RKIND/0.9)) then - if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo - buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' - if (.not.ignoresamplingerrors) then - CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif - endif - endif - !! - END DO - CLOSE (15) - sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NumSamples = numus - END IF - END DO - END IF - END DO - !nodal sources - DO j = 1, sgg%NumNodalSources - !Read the time evolution file - ! - if (.not.sgg%NodalSource(j)%IsInitialValue) then - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%NodalSource(j)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - OPEN (15, file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)),action='read') - READ (15,*) tiempo1, field1 - READ (15,*) tiempo2, field2 - sgg%NodalSource(j)%fichero%deltaSamples = tiempo2 - tiempo1 - nsurfs = 3 - DO - READ (15,*, end=78) tiempo1, field1 - if (sgg%NodalSource(j)%isElec) then - if (field1 > maxSourceValue) maxSourceValue=field1 - else - if (field1*zvac > maxSourceValue) maxSourceValue=field1*zvac - endif - nsurfs = nsurfs + 1 - END DO -78 CONTINUE - CLOSE (15) - numus = nsurfs - 2 - ALLOCATE (sgg%NodalSource(j)%fichero%Samples(0:numus)) - OPEN (15, file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)),action='read') - DO k = 0, numus - tiempoant=tiempo1 - READ (15,*) tiempo1, sgg%NodalSource(j)%fichero%Samples(k) - sgg%NodalSource(j)%fichero%Samples(k) = sgg%NodalSource(j)%fichero%Samples(k) * deviafactor_Multiplier - !!evitar sampleos no uniformes - if ((k>1).and.(k1.0_RKIND/0.9)) then - if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo - buff=trim(adjustl(sgg%NodalSource(j)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' - if (.not.ignoresamplingerrors) then - CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif - endif - endif - !! - END DO - CLOSE (15) - sgg%NodalSource(j)%fichero%NumSamples = numus - else !es un initialvalue que no precisa fichero. incializar trivialmente - numus = 0 - sgg%NodalSource(j)%fichero%deltaSamples = 1.0_RKIND !must be non-null - ALLOCATE (sgg%NodalSource(j)%fichero%Samples(0:numus)) - DO k = 0, numus - sgg%NodalSource(j)%fichero%Samples(k) = 1.0_RKIND * deviafactor_Multiplier - END DO - sgg%NodalSource(j)%fichero%NumSamples = numus - endif - END DO - !Plane wave sources - DO j = 1, sgg%NumPlaneWaves - !Read the time evolution file - ! - errnofile = .FALSE. - INQUIRE (file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)), EXIST=errnofile) - IF ( .NOT. errnofile) THEN - buff=trim(adjustl(sgg%PlaneWave(j)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - OPEN (15, file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)),action='read') - READ (15,*) tiempo1, field1 - READ (15,*) tiempo2, field2 - sgg%PlaneWave(j)%fichero%deltaSamples = tiempo2 - tiempo1 - nsurfs = 3 - DO - READ (15,*, end=98) tiempo1, field1 - if (field1 > maxSourceValue) maxSourceValue=field1 - nsurfs = nsurfs + 1 - END DO -98 CONTINUE - CLOSE (15) - numus = nsurfs - 2 - ALLOCATE (sgg%PlaneWave(j)%fichero%Samples(0:numus)) - OPEN (15, file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)),action='read') - DO k = 0, numus - tiempoant=tiempo1 - READ (15,*) tiempo1, sgg%PlaneWave(j)%fichero%Samples(k) - sgg%PlaneWave(j)%fichero%Samples(k) = sgg%PlaneWave(j)%fichero%Samples(k) * deviafactor_Multiplier - !!evitar sampleos no uniformes - if ((k>1).and.(k1.0_RKIND/0.9)) then - if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo - buff=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' - if (.not.ignoresamplingerrors) then - CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) - endif - endif - endif - endif - !! - END DO - CLOSE (15) - sgg%PlaneWave(j)%fichero%NumSamples = numus - END DO - return - end subroutine read_TIMEFRECTRANSFsourcefiles - -!!!!!!!!!!!!!!!!! -!!!!!!!!!!!!!!!!! - - - subroutine asignawiredisper(disp, file) - type (WireDispersiveParams_t), intent(inout) :: disp - CHARACTER (LEN=BUFSIZE), intent(in) :: file - - integer (kind=4) :: i, numPoles - real (kind=RKIND) :: valreal, valimag - - open (1712, file=file, action='READ') - read (1712, *) numPoles - - disp%NumPoles = numPoles - ALLOCATE (disp%res(1:numPoles)) - ALLOCATE (disp%p (1:numPoles)) - do i = 1, numPoles - read (1712, *) valreal, valimag - disp%res(i) = CMPLX(valreal, valimag, CKIND) - end do - do i = 1, numPoles - read (1712, *) valreal, valimag - disp%p(i) = CMPLX(valreal, valimag, CKIND) - end do - read (1712, *) valreal, valimag - disp%d = CMPLX(valreal, valimag, CKIND) - read (1712, *) valreal, valimag - disp%e = CMPLX(valreal, valimag, CKIND) - - return - end subroutine asignawiredisper - - subroutine asignadisper(fdgeom) - type(FreqDepenMaterial_t), POINTER :: fdgeom - - IF (fdgeom%l+fdgeom%LM /=0 ) THEN - BUFF='ERROR: SECOND ORDER DISPERSIVE MEDIA UNSUPPORTED. TRANSLATE THEM TO FIRST ORDER ()' - CALL WarnErrReport (buff,.TRUE.) - endif - ! - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)) - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)) - sgg%Med(contamedia)%Priority = prior_FDB - sgg%Med(contamedia)%Epr = fdgeom%eps11 / Eps0 - sgg%Med(contamedia)%Sigma = fdgeom%Sigma11 - sgg%Med(contamedia)%Mur = fdgeom%mu11 / Mu0 - sgg%Med(contamedia)%SigmaM = fdgeom%SigmaM11 - !electric dispersion - sgg%Med(contamedia)%Edispersive(1)%eps11= fdgeom%eps11 - sgg%Med(contamedia)%Edispersive(1)%eps12= fdgeom%eps12 - sgg%Med(contamedia)%Edispersive(1)%eps13= fdgeom%eps13 - sgg%Med(contamedia)%Edispersive(1)%eps22= fdgeom%eps22 - sgg%Med(contamedia)%Edispersive(1)%eps23= fdgeom%eps23 - sgg%Med(contamedia)%Edispersive(1)%eps33= fdgeom%eps33 - - sgg%Med(contamedia)%Edispersive(1)%mu11= fdgeom%MU11 - sgg%Med(contamedia)%Edispersive(1)%mu12= fdgeom%MU12 - sgg%Med(contamedia)%Edispersive(1)%mu13= fdgeom%MU13 - sgg%Med(contamedia)%Edispersive(1)%mu22= fdgeom%MU22 - sgg%Med(contamedia)%Edispersive(1)%mu23= fdgeom%MU23 - sgg%Med(contamedia)%Edispersive(1)%mu33= fdgeom%MU33 - - sgg%Med(contamedia)%EDispersive(1)%SIGMA11= fdgeom%SIGMA11 - sgg%Med(contamedia)%EDispersive(1)%SIGMA12= fdgeom%SIGMA12 - sgg%Med(contamedia)%EDispersive(1)%SIGMA13= fdgeom%SIGMA13 - sgg%Med(contamedia)%EDispersive(1)%SIGMA22= fdgeom%SIGMA22 - sgg%Med(contamedia)%EDispersive(1)%SIGMA23= fdgeom%SIGMA23 - sgg%Med(contamedia)%EDispersive(1)%SIGMA33= fdgeom%SIGMA33 - - sgg%Med(contamedia)%EDispersive(1)%SIGMAM11=fdgeom%SIGMAM11 - sgg%Med(contamedia)%EDispersive(1)%SIGMAM12=fdgeom%SIGMAM12 - sgg%Med(contamedia)%EDispersive(1)%SIGMAM13=fdgeom%SIGMAM13 - sgg%Med(contamedia)%EDispersive(1)%SIGMAM22=fdgeom%SIGMAM22 - sgg%Med(contamedia)%EDispersive(1)%SIGMAM23=fdgeom%SIGMAM23 - sgg%Med(contamedia)%EDispersive(1)%SIGMAM33=fdgeom%SIGMAM33 - - sgg%Med(contamedia)%Mdispersive(1)%eps11= sgg%Med(contamedia)%Edispersive(1)%eps11 - sgg%Med(contamedia)%Mdispersive(1)%eps12= sgg%Med(contamedia)%Edispersive(1)%eps12 - sgg%Med(contamedia)%Mdispersive(1)%eps13= sgg%Med(contamedia)%Edispersive(1)%eps13 - sgg%Med(contamedia)%Mdispersive(1)%eps22= sgg%Med(contamedia)%Edispersive(1)%eps22 - sgg%Med(contamedia)%Mdispersive(1)%eps23= sgg%Med(contamedia)%Edispersive(1)%eps23 - sgg%Med(contamedia)%Mdispersive(1)%eps33= sgg%Med(contamedia)%Edispersive(1)%eps33 - - sgg%Med(contamedia)%Mdispersive(1)%mu11= sgg%Med(contamedia)%Edispersive(1)%mu11 - sgg%Med(contamedia)%Mdispersive(1)%mu12= sgg%Med(contamedia)%Edispersive(1)%mu12 - sgg%Med(contamedia)%Mdispersive(1)%mu13= sgg%Med(contamedia)%Edispersive(1)%mu13 - sgg%Med(contamedia)%Mdispersive(1)%mu22= sgg%Med(contamedia)%Edispersive(1)%mu22 - sgg%Med(contamedia)%Mdispersive(1)%mu23= sgg%Med(contamedia)%Edispersive(1)%mu23 - sgg%Med(contamedia)%Mdispersive(1)%mu33= sgg%Med(contamedia)%Edispersive(1)%mu33 - - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA11= sgg%Med(contamedia)%EDispersive(1)%SIGMA11 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA12= sgg%Med(contamedia)%EDispersive(1)%SIGMA12 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA13= sgg%Med(contamedia)%EDispersive(1)%SIGMA13 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA22= sgg%Med(contamedia)%EDispersive(1)%SIGMA22 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA23= sgg%Med(contamedia)%EDispersive(1)%SIGMA23 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA33= sgg%Med(contamedia)%EDispersive(1)%SIGMA33 - - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM11= sgg%Med(contamedia)%EDispersive(1)%SIGMAM11 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM12= sgg%Med(contamedia)%EDispersive(1)%SIGMAM12 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM13= sgg%Med(contamedia)%EDispersive(1)%SIGMAM13 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM22= sgg%Med(contamedia)%EDispersive(1)%SIGMAM22 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM23= sgg%Med(contamedia)%EDispersive(1)%SIGMAM23 - sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM33= sgg%Med(contamedia)%EDispersive(1)%SIGMAM33 - ! - !los de primer orden solo. Los de segundo no juegan - sgg%Med(contamedia)%EDispersive(1)%NumPolRes11 = fdgeom%k11 !+ fdgeom%l - sgg%Med(contamedia)%EDispersive(1)%NumPolRes12 = fdgeom%k12 - sgg%Med(contamedia)%EDispersive(1)%NumPolRes13 = fdgeom%k13 - sgg%Med(contamedia)%EDispersive(1)%NumPolRes22 = fdgeom%k22 - sgg%Med(contamedia)%EDispersive(1)%NumPolRes23 = fdgeom%k23 - sgg%Med(contamedia)%EDispersive(1)%NumPolRes33 = fdgeom%k33 - !magnetic - sgg%Med(contamedia)%MDispersive(1)%NumPolRes11 = fdgeom%KM11 ! + fdgeom%LM - sgg%Med(contamedia)%MDispersive(1)%NumPolRes12 = fdgeom%KM12 - sgg%Med(contamedia)%MDispersive(1)%NumPolRes13 = fdgeom%KM13 - sgg%Med(contamedia)%MDispersive(1)%NumPolRes22 = fdgeom%KM22 - sgg%Med(contamedia)%MDispersive(1)%NumPolRes23 = fdgeom%KM23 - sgg%Med(contamedia)%MDispersive(1)%NumPolRes33 = fdgeom%KM33 - ! - IF (sgg%Med(contamedia)%EDispersive(1)%NumPolRes11 /= 0) THEN - sgg%Med(contamedia)%Is%EDispersive = .TRUE. - sgg%Med(contamedia)%Is%EDispersiveANIS = .FALSE. - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - END IF - IF (sgg%Med(contamedia)%EDispersive(1)%NumPolRes12+sgg%Med(contamedia)%EDispersive(1)%NumPolRes13+ & - sgg%Med(contamedia)%EDispersive(1)%NumPolRes22+sgg%Med(contamedia)%EDispersive(1)%NumPolRes23+ & - sgg%Med(contamedia)%EDispersive(1)%NumPolRes33 /= 0) THEN - sgg%Med(contamedia)%Is%EDispersive = .TRUE. - sgg%Med(contamedia)%Is%EDispersiveAnis = .TRUE. - print *, "Error: anisotropic dispersive unsupported" - stop - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - END IF - IF (sgg%Med(contamedia)%MDispersive(1)%NumPolRes11 /= 0) THEN - sgg%Med(contamedia)%Is%MDispersive = .TRUE. - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - END IF - IF (sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes12+sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes13+ & - sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes22+sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes23+ & - sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes33 /= 0) THEN - sgg%Med(contamedia)%Is%MDISPERSIVE = .TRUE. - sgg%Med(contamedia)%Is%MDISPERSIVEAnis = .TRUE. - print *, "Error: anisotropic dispersive unsupported" - stop - sgg%Med(contamedia)%Is%Dielectric = .FALSE. - END IF - !!!! - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)%C11(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes11), & - & sgg%Med(contamedia)%EDispersive(1)%a11(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes11)) - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)%C12(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes12), & - & sgg%Med(contamedia)%EDispersive(1)%a12(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes12)) - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)%C13(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes13), & - & sgg%Med(contamedia)%EDispersive(1)%a13(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes13)) - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)%C22(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes22), & - & sgg%Med(contamedia)%EDispersive(1)%a22(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes22)) - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)%C23(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes23), & - & sgg%Med(contamedia)%EDispersive(1)%a23(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes23)) - ALLOCATE (sgg%Med(contamedia)%EDispersive(1)%C33(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes33), & - & sgg%Med(contamedia)%EDispersive(1)%a33(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes33)) - ! - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)%C11(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes11), & - & sgg%Med(contamedia)%MDispersive(1)%a11(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes11)) - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)%C12(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes12), & - & sgg%Med(contamedia)%MDispersive(1)%a12(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes12)) - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)%C13(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes13), & - & sgg%Med(contamedia)%MDispersive(1)%a13(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes13)) - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)%C22(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes22), & - & sgg%Med(contamedia)%MDispersive(1)%a22(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes22)) - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)%C23(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes23), & - & sgg%Med(contamedia)%MDispersive(1)%a23(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes23)) - ALLOCATE (sgg%Med(contamedia)%MDispersive(1)%C33(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes33), & - & sgg%Med(contamedia)%MDispersive(1)%a33(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes33)) - ! - DO k1 = 1, (fdgeom%k11) - sgg%Med(contamedia)%EDispersive(1)%C11(k1) = (fdgeom%a11(k1)) - sgg%Med(contamedia)%EDispersive(1)%a11(k1) = (-fdgeom%b11(k1)) !el polo de ORIGINAL esta cambiado de signo - END DO - DO k1 = 1, (fdgeom%k12) - sgg%Med(contamedia)%EDispersive(1)%C12(k1) = (fdgeom%a12(k1)) - sgg%Med(contamedia)%EDispersive(1)%a12(k1) = (-fdgeom%b12(k1)) - END DO - DO k1 = 1, (fdgeom%k13) - sgg%Med(contamedia)%EDispersive(1)%C13(k1) = (fdgeom%a13(k1)) - sgg%Med(contamedia)%EDispersive(1)%a13(k1) = (-fdgeom%b13(k1)) - END DO - DO k1 = 1, (fdgeom%k22) - sgg%Med(contamedia)%EDispersive(1)%C22(k1) = (fdgeom%a22(k1)) - sgg%Med(contamedia)%EDispersive(1)%a22(k1) = (-fdgeom%b22(k1)) - END DO - DO k1 = 1, (fdgeom%k23) - sgg%Med(contamedia)%EDispersive(1)%C23(k1) = (fdgeom%a23(k1)) - sgg%Med(contamedia)%EDispersive(1)%a23(k1) = (-fdgeom%b23(k1)) - END DO - DO k1 = 1, (fdgeom%k33) - sgg%Med(contamedia)%EDispersive(1)%C33(k1) = (fdgeom%a33(k1)) - sgg%Med(contamedia)%EDispersive(1)%a33(k1) = (-fdgeom%b33(k1)) - END DO - ! - DO k1 = 1, (fdgeom%KM11) - sgg%Med(contamedia)%MDispersive(1)%C11(k1) = (fdgeom%aM11(k1)) - sgg%Med(contamedia)%MDispersive(1)%a11(k1) = (-fdgeom%bM11(k1)) - END DO - DO k1 = 1, (fdgeom%KM12) - sgg%Med(contamedia)%MDispersive(1)%C12(k1) = (fdgeom%aM12(k1)) - sgg%Med(contamedia)%MDispersive(1)%a12(k1) = (-fdgeom%bM12(k1)) - END DO - DO k1 = 1, (fdgeom%KM13) - sgg%Med(contamedia)%MDispersive(1)%C13(k1) = (fdgeom%aM13(k1)) - sgg%Med(contamedia)%MDispersive(1)%a13(k1) = (-fdgeom%bM13(k1)) - END DO - DO k1 = 1, (fdgeom%KM22) - sgg%Med(contamedia)%MDispersive(1)%C22(k1) = (fdgeom%aM22(k1)) - sgg%Med(contamedia)%MDispersive(1)%a22(k1) = (-fdgeom%bM22(k1)) - END DO - DO k1 = 1, (fdgeom%KM23) - sgg%Med(contamedia)%MDispersive(1)%C23(k1) = (fdgeom%aM23(k1)) - sgg%Med(contamedia)%MDispersive(1)%a23(k1) = (-fdgeom%bM23(k1)) - END DO - DO k1 = 1, (fdgeom%KM33) - sgg%Med(contamedia)%MDispersive(1)%C33(k1) = (fdgeom%aM33(k1)) - sgg%Med(contamedia)%MDispersive(1)%a33(k1) = (-fdgeom%bM33(k1)) - END DO - - return - - end subroutine asignadisper - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - - END SUBROUTINE read_geomData - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize, this,MurAfterPML,mur_exist) - TYPE (limit_t), DIMENSION (1:6) :: fullsize, SINPML_fullsize - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - - type(Parseador_t), INTENT (IN) :: this - INTEGER (KIND=4) :: tama, i, field,j,k - character(len=BUFSIZE) :: buff - logical MurAfterPML,mur_exist - integer (kind=4), intent(in) :: layoutnumber,size - REAL (KIND=RKIND), POINTER, DIMENSION (:) :: DummyD - REAL (KIND=RKIND) :: delta - ! - REAL (KIND=RKIND), POINTER, DIMENSION (:) :: lineasX, lineasY, lineasZ - ! - ALLOCATE (sgg%dx(this%despl%mx1:this%despl%mx2-1), sgg%dy(this%despl%my1:this%despl%my2-1), & - & sgg%dz(this%despl%mz1:this%despl%mz2-1)) - !displacement - !materialMatrix - tama = (this%despl%nx) - IF (tama == 1) THEN - DO i = this%despl%mx1, this%despl%mx2 - 1 - sgg%dx (i) = this%despl%desx(1) - END DO - ELSE - IF (tama /= this%despl%mx2-this%despl%mx1) THEN - buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - DO i = this%despl%mx1, this%despl%mx2 - 1 - sgg%dx (i) = this%despl%desx(i) - END DO - END IF - ! - ! - tama = (this%despl%nY) - IF (tama == 1) THEN - DO i = this%despl%my1, this%despl%my2 - 1 - sgg%dy (i) = this%despl%desY(1) - END DO - ELSE - IF (tama /= this%despl%my2-this%despl%my1) THEN - buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - DO i = this%despl%my1, this%despl%my2 - 1 - sgg%dy (i) = this%despl%desY(i) - END DO - END IF - ! - ! - tama = (this%despl%nZ) - IF (tama == 1) THEN - DO i = this%despl%mz1, this%despl%mz2 - 1 - sgg%dz (i) = this%despl%desZ(1) - END DO - ELSE - IF (tama /= this%despl%mz2-this%despl%mz1) THEN - buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - DO i = this%despl%mz1, this%despl%mz2 - 1 - sgg%dz (i) = this%despl%desZ(i) - END DO - END IF - !DISCRETIZATION LINES - !displacement - !materialMatrix - tama = (this%despl%nx) - ALLOCATE (lineasX(this%despl%mx1:this%despl%mx2)) - lineasX (this%despl%mx1) = this%despl%originX + this%despl%mx1 * this%despl%desx(1) - IF (tama == 1) THEN - DO i = this%despl%mx1, this%despl%mx2 - 1 - lineasX (i+1) = this%despl%desx(1) * (i-this%despl%mx1+1) + lineasX (this%despl%mx1) - END DO - ELSE - IF (tama /= this%despl%mx2-this%despl%mx1) THEN - buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) - END IF - DO i = this%despl%mx1, this%despl%mx2 - 1 - lineasX (i+1) = this%despl%desx(i) + lineasX (i) - END DO - END IF - !Y - tama = (this%despl%nY) - ALLOCATE (lineasY(this%despl%my1:this%despl%my2)) - lineasY (this%despl%my1) = this%despl%originy+this%despl%my1*this%despl%desY(1) - IF (tama == 1) THEN - DO i = this%despl%my1, this%despl%my2 - 1 - lineasY (i+1) = this%despl%desY(1) * (i-this%despl%my1+1) + lineasY (this%despl%my1) - END DO - ELSE - IF (tama /= this%despl%my2-this%despl%my1) then - buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) - endif - DO i = this%despl%my1, this%despl%my2 - 1 - lineasY (i+1) = this%despl%desY(i) + lineasY (i) - END DO - END IF - !Z - tama = (this%despl%nZ) - ALLOCATE (lineasZ(this%despl%mz1:this%despl%mz2)) - lineasZ (this%despl%mz1) = this%despl%originZ+this%despl%mz1*this%despl%desZ(1) - IF (tama == 1) THEN - DO i = this%despl%mz1, this%despl%mz2 - 1 - lineasZ (i+1) = this%despl%desZ(1) * (i-this%despl%mz1+1) + lineasZ (this%despl%mz1) - END DO - ELSE - IF (tama /= this%despl%mz2-this%despl%mz1) then - buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) - endif - DO i = this%despl%mz1, this%despl%mz2 - 1 - lineasZ (i+1) = this%despl%desZ(i) + lineasZ (i) - END DO - END IF - ! - ALLOCATE (sgg%LineX(this%despl%mx1:this%despl%mx2), sgg%LineY(this%despl%my1:this%despl%my2), & - & sgg%LineZ(this%despl%mz1:this%despl%mz2)) - ! - sgg%LineX (this%despl%mx1:this%despl%mx2) = lineasX - sgg%LineY (this%despl%my1:this%despl%my2) = lineasY - sgg%LineZ (this%despl%mz1:this%despl%mz2) = lineasZ - DEALLOCATE (lineasX, lineasY, lineasZ) - !General Parameter - sgg%InitialTimeStep = 0 - sgg%TimeSteps = this%general%nmax - sgg%dt = this%general%dt - !border - !this%BORDER%PROPIEDADESPML(I)%ORDEN no lo considero porque en el interior de mi programa lo pongo (esta a 2 normalmente) - sgg%Border%IsBackPEC = .FALSE. - sgg%Border%IsFrontPEC = .FALSE. - sgg%Border%IsLeftPEC = .FALSE. - sgg%Border%IsRightPEC = .FALSE. - sgg%Border%IsUpPEC = .FALSE. - sgg%Border%IsDownPEC = .FALSE. - sgg%Border%IsBackPMC = .FALSE. - sgg%Border%IsFrontPMC = .FALSE. - sgg%Border%IsLeftPMC = .FALSE. - sgg%Border%IsRightPMC = .FALSE. - sgg%Border%IsUpPMC = .FALSE. - sgg%Border%IsDownPMC = .FALSE. - sgg%Border%IsBackPML = .FALSE. - sgg%Border%IsFrontPML = .FALSE. - sgg%Border%IsLeftPML = .FALSE. - sgg%Border%IsRightPML = .FALSE. - sgg%Border%IsUpPML = .FALSE. - sgg%Border%IsDownPML = .FALSE. - sgg%Border%IsBackPeriodic = .FALSE. - sgg%Border%IsFrontPeriodic = .FALSE. - sgg%Border%IsLeftPeriodic = .FALSE. - sgg%Border%IsRightPeriodic = .FALSE. - sgg%Border%IsUpPeriodic = .FALSE. - sgg%Border%IsDownPeriodic = .FALSE. - sgg%Border%IsBackMUR = .FALSE. - sgg%Border%IsFrontMUR = .FALSE. - sgg%Border%IsLeftMUR = .FALSE. - sgg%Border%IsRightMUR = .FALSE. - sgg%Border%IsUpMUR = .FALSE. - sgg%Border%IsDownMUR = .FALSE. - sgg%PML%NumLayers = 0 - DO i = 1, 6 - IF (this%front%tipofrontera(i) == F_PML) THEN - SELECT CASE (i) - !xmin - CASE (1) - sgg%Border%IsBackPML = .TRUE. - sgg%PML%NumLayers (icoord, comi) = this%front%PROPIEDADESPML(i)%NUMCAPAS - sgg%PML%CoeffReflPML (icoord, comi) = this%front%PROPIEDADESPML(i)%REFL - if (sgg%PML%CoeffReflPML (icoord, comi)>=1.0_RKIND) sgg%PML%CoeffReflPML(icoord, comi)=0.99999d0 - sgg%PML%orden (icoord, comi) = this%front%PROPIEDADESPML(i)%orden - !xmax - CASE (2) - sgg%Border%IsFrontPML = .TRUE. - sgg%PML%NumLayers (icoord, fine) = this%front%PROPIEDADESPML(i)%NUMCAPAS - sgg%PML%CoeffReflPML (icoord, fine) = this%front%PROPIEDADESPML(i)%REFL - if (sgg%PML%CoeffReflPML (icoord, fine)>=1.0_RKIND) sgg%PML%CoeffReflPML(icoord, fine)=0.99999d0 - sgg%PML%orden (icoord, fine) = this%front%PROPIEDADESPML(i)%orden - !ymin - CASE (3) - sgg%Border%IsLeftPML = .TRUE. - sgg%PML%NumLayers (jcoord, comi) = this%front%PROPIEDADESPML(i)%NUMCAPAS - sgg%PML%CoeffReflPML (jcoord, comi) = this%front%PROPIEDADESPML(i)%REFL - if (sgg%PML%CoeffReflPML (jcoord, comi)>=1.0_RKIND) sgg%PML%CoeffReflPML(jcoord, comi)=0.99999d0 - sgg%PML%orden (jcoord, comi) = this%front%PROPIEDADESPML(i)%orden - !ymax - CASE (4) - sgg%Border%IsRightPML = .TRUE. - sgg%PML%NumLayers (jcoord, fine) = this%front%PROPIEDADESPML(i)%NUMCAPAS - sgg%PML%CoeffReflPML (jcoord, fine) = this%front%PROPIEDADESPML(i)%REFL - if (sgg%PML%CoeffReflPML (jcoord, fine)>=1.0_RKIND) sgg%PML%CoeffReflPML(jcoord, fine)=0.99999d0 - sgg%PML%orden (jcoord, fine) = this%front%PROPIEDADESPML(i)%orden - !zmin - CASE (5) - sgg%Border%IsDownPML = .TRUE. - sgg%PML%NumLayers (kcoord, comi) = this%front%PROPIEDADESPML(i)%NUMCAPAS - sgg%PML%CoeffReflPML (kcoord, comi) = this%front%PROPIEDADESPML(i)%REFL - if (sgg%PML%CoeffReflPML (kcoord, comi)>=1.0_RKIND) sgg%PML%CoeffReflPML(kcoord, comi)=0.99999d0 - sgg%PML%orden (kcoord, comi) = this%front%PROPIEDADESPML(i)%orden - !zmax - CASE (6) - sgg%Border%IsUpPML = .TRUE. - sgg%PML%NumLayers (kcoord, fine) = this%front%PROPIEDADESPML(i)%NUMCAPAS - sgg%PML%CoeffReflPML (kcoord, fine) = this%front%PROPIEDADESPML(i)%REFL - if (sgg%PML%CoeffReflPML (kcoord, fine)>=1.0_RKIND) sgg%PML%CoeffReflPML(kcoord, fine)=0.99999d0 - sgg%PML%orden (kcoord, fine) = this%front%PROPIEDADESPML(i)%orden - END SELECT - elseIF (this%front%tipofrontera(i) == F_MUR) THEN - mur_exist=.true. - SELECT CASE (i) - !xmin - CASE (1) - sgg%Border%IsBackMUR = .TRUE. - !xmax - CASE (2) - sgg%Border%IsFrontMUR = .TRUE. - !ymin - CASE (3) - sgg%Border%IsLeftMUR = .TRUE. - !ymax - CASE (4) - sgg%Border%IsRightMUR = .TRUE. - !zmin - CASE (5) - sgg%Border%IsDownMUR = .TRUE. - !zmax - CASE (6) - sgg%Border%IsUpMUR = .TRUE. - END SELECT - ELSE IF (this%front%tipofrontera(i) == F_PEC) THEN - SELECT CASE (i) - !xmin - CASE (1) - sgg%Border%IsBackPEC = .TRUE. - !xmax - CASE (2) - sgg%Border%IsFrontPEC = .TRUE. - !ymin - CASE (3) - sgg%Border%IsLeftPEC = .TRUE. - !ymax - CASE (4) - sgg%Border%IsRightPEC = .TRUE. - !zmin - CASE (5) - sgg%Border%IsDownPEC = .TRUE. - !zmax - CASE (6) - sgg%Border%IsUpPEC = .TRUE. - END SELECT - ELSE IF (this%front%tipofrontera(i) == F_PMC) THEN - SELECT CASE (i) - !xmin - CASE (1) - sgg%Border%IsBackPMC = .TRUE. - !xmax - CASE (2) - sgg%Border%IsFrontPMC = .TRUE. - !ymin - CASE (3) - sgg%Border%IsLeftPMC = .TRUE. - !ymax - CASE (4) - sgg%Border%IsRightPMC = .TRUE. - !zmin - CASE (5) - sgg%Border%IsDownPMC = .TRUE. - !zmax - CASE (6) - sgg%Border%IsUpPMC = .TRUE. - END SELECT - ELSE IF (this%front%tipofrontera(i) == F_Per) THEN - SELECT CASE (i) - !xmin - CASE (1) - sgg%Border%IsBackPeriodic = .TRUE. - !xmax - CASE (2) - sgg%Border%IsFrontPeriodic = .TRUE. - !ymin - CASE (3) - sgg%Border%IsLeftPeriodic = .TRUE. - !ymax - CASE (4) - sgg%Border%IsRightPeriodic = .TRUE. - !zmin - CASE (5) - sgg%Border%IsDownPeriodic = .TRUE. - !zmax - CASE (6) - sgg%Border%IsUpPeriodic = .TRUE. - END SELECT - END IF - END DO - !assign limits - DO field = iEx, iHz - SINPML_fullsize(field)%XI = this%despl%mx1 - SINPML_fullsize(field)%YI = this%despl%my1 - SINPML_fullsize(field)%ZI = this%despl%mz1 - SINPML_fullsize(field)%XE = this%despl%mx2 - SINPML_fullsize(field)%YE = this%despl%my2 - SINPML_fullsize(field)%ZE = this%despl%mz2 - END DO - !adjust the endings - SINPML_fullsize(iEx)%XE = SINPML_fullsize(iEx)%XE - 1 - SINPML_fullsize(iEy)%YE = SINPML_fullsize(iEy)%YE - 1 - SINPML_fullsize(iEz)%ZE = SINPML_fullsize(iEz)%ZE - 1 - ! - ! - SINPML_fullsize(iHx)%YE = SINPML_fullsize(iHx)%YE - 1 - SINPML_fullsize(iHx)%ZE = SINPML_fullsize(iHx)%ZE - 1 - SINPML_fullsize(iHy)%ZE = SINPML_fullsize(iHy)%ZE - 1 - SINPML_fullsize(iHy)%XE = SINPML_fullsize(iHy)%XE - 1 - SINPML_fullsize(iHz)%XE = SINPML_fullsize(iHz)%XE - 1 - SINPML_fullsize(iHz)%YE = SINPML_fullsize(iHz)%YE - 1 - ! - DO field = iEx, iHz - fullsize(field)%XI = SINPML_fullsize(field)%XI - sgg%PML%NumLayers(icoord, comi) - fullsize(field)%YI = SINPML_fullsize(field)%YI - sgg%PML%NumLayers(jcoord, comi) - fullsize(field)%ZI = SINPML_fullsize(field)%ZI - sgg%PML%NumLayers(kcoord, comi) - fullsize(field)%XE = SINPML_fullsize(field)%XE + sgg%PML%NumLayers(icoord, fine) - fullsize(field)%YE = SINPML_fullsize(field)%YE + sgg%PML%NumLayers(jcoord, fine) - fullsize(field)%ZE = SINPML_fullsize(field)%ZE + sgg%PML%NumLayers(kcoord, fine) - END DO - ! - !readjust mur boundaries if necessary - - sgg%Border%IsBackMUR = (sgg%Border%IsBackMUR ).or.(sgg%Border%IsBackPML .and. MurAfterPML) - sgg%Border%IsFrontMUR = (sgg%Border%IsFrontMUR ).or.(sgg%Border%IsFrontPML .and. MurAfterPML) - sgg%Border%IsLeftMUR = (sgg%Border%IsLeftMUR ).or.(sgg%Border%IsLeftPML .and. MurAfterPML) - sgg%Border%IsRightMUR = (sgg%Border%IsRightMUR ).or.(sgg%Border%IsRightPML .and. MurAfterPML) - sgg%Border%IsUpMUR = (sgg%Border%IsUpMUR ).or.(sgg%Border%IsUpPML .and. MurAfterPML) - sgg%Border%IsDownMUR = (sgg%Border%IsDownMUR ).or.(sgg%Border%IsDownPML .and. MurAfterPML) - - - !readjust space steps accordingly 140815 para que esten bien allocateados los dx - ! Discretization Lines Matrix Resizing to accomodate PML regions - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ALLOCATE (DummyD(SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE-1)) - DummyD = sgg%dx - DEALLOCATE (sgg%dx) - ! - - sgg%allocDxI=-sgg%PML%NumLayers(1, 1)+SINPML_fullsize(iHx)%XI-1-1 - sgg%allocDxE= SINPML_fullsize(iHx)%XE+sgg%PML%NumLayers(1, 2)+1+1 - ALLOCATE (sgg%dx(sgg%allocDxI:sgg%allocDxE)) - ! - sgg%dx (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE-1) = DummyD (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE-1) - DEALLOCATE (DummyD) - ! - ALLOCATE (DummyD(SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE-1)) - DummyD = sgg%dy - DEALLOCATE (sgg%dy) - ! - sgg%allocDyI=-sgg%PML%NumLayers(2, 1)+SINPML_fullsize(iHy)%YI-1-1 - sgg%allocDyE= SINPML_fullsize(iHy)%YE+sgg%PML%NumLayers(2, 2)+1+1 - ALLOCATE (sgg%dy(sgg%allocDyI:sgg%allocDyE)) - ! - sgg%dy (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE-1) = DummyD (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE-1) - DEALLOCATE (DummyD) - ! - ALLOCATE (DummyD(SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE-1)) - DummyD = sgg%dz - DEALLOCATE (sgg%dz) - ! - sgg%allocDzI=-sgg%PML%NumLayers(3, 1)+SINPML_fullsize(iHz)%ZI-1-1 - sgg%allocDzE= SINPML_fullsize(iHz)%ZE+sgg%PML%NumLayers(3, 2)+1+1 - ALLOCATE (sgg%dz(sgg%allocDzI:sgg%allocDzE)) - sgg%dz (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE-1) = DummyD (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE-1) - DEALLOCATE (DummyD) - ! - delta = sgg%dx (SINPML_fullsize(iHx)%XI) - DO i = SINPML_fullsize(iHx)%XI - 1, SINPML_fullsize(iHx)%XI - 1 - sgg%PML%NumLayers(1, 1) - 1, - 1 - sgg%dx (i) = delta - END DO - delta = sgg%dx (SINPML_fullsize(iHx)%XE-1) - DO i = SINPML_fullsize(iHx)%XE, SINPML_fullsize(iHx)%XE + sgg%PML%NumLayers(1, 2) + 1 + 1 - sgg%dx (i) = delta - END DO - ! - delta = sgg%dy (SINPML_fullsize(iHy)%YI) - DO j = SINPML_fullsize(iHy)%YI - 1, SINPML_fullsize(iHy)%YI - 1 - sgg%PML%NumLayers(2, 1) - 1, - 1 - sgg%dy (j) = delta - END DO - ! - delta = sgg%dy (SINPML_fullsize(iHy)%YE-1) - DO j = SINPML_fullsize(iHy)%YE, SINPML_fullsize(iHy)%YE + sgg%PML%NumLayers(2, 2) + 1 + 1 - sgg%dy (j) = delta - END DO - ! - delta = sgg%dz (SINPML_fullsize(iHz)%ZI) - DO k = SINPML_fullsize(iHz)%ZI - 1, SINPML_fullsize(iHz)%ZI - 1 - sgg%PML%NumLayers(3, 1) - 1, - 1 - sgg%dz (k) = delta - END DO - ! - delta = sgg%dz (SINPML_fullsize(iHz)%ZE-1) - DO k = SINPML_fullsize(iHz)%ZE, SINPML_fullsize(iHz)%ZE + sgg%PML%NumLayers(3, 2) + 1 + 1 - sgg%dz (k) = delta - END DO - !DISCRETIZATION LINES (TO BE DEPRECATED IN A NEAR FUTURE, ONLY NEEDED BY THE PLANEWAVE CORNER ROUTINE) - ! - ALLOCATE (DummyD(SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE)) - DummyD = sgg%LineX - DEALLOCATE (sgg%LineX) - ALLOCATE (sgg%LineX(-sgg%PML%NumLayers(1, 1)+SINPML_fullsize(iHx)%XI-1:SINPML_fullsize(iHx)%XE+sgg%PML%NumLayers(1, 2)+1)) - sgg%LineX (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE) = DummyD (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE) - DEALLOCATE (DummyD) - ! - ALLOCATE (DummyD(SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE)) - DummyD = sgg%LineY - DEALLOCATE (sgg%LineY) - ALLOCATE (sgg%LineY(-sgg%PML%NumLayers(2, 1)+SINPML_fullsize(iHy)%YI-1:SINPML_fullsize(iHy)%YE+sgg%PML%NumLayers(2, 2)+1)) - sgg%LineY (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE) = DummyD (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE) - DEALLOCATE (DummyD) - ! - ALLOCATE (DummyD(SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE)) - DummyD = sgg%LineZ - DEALLOCATE (sgg%LineZ) - ALLOCATE (sgg%LineZ(-sgg%PML%NumLayers(3, 1)+SINPML_fullsize(iHz)%ZI-1:SINPML_fullsize(iHz)%ZE+sgg%PML%NumLayers(3, 2)+1)) - sgg%LineZ (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE) = DummyD (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE) - DEALLOCATE (DummyD) - ! - delta = sgg%LineX (SINPML_fullsize(iHx)%XI+1) - sgg%LineX(SINPML_fullsize(iHx)%XI) - DO i = SINPML_fullsize(iHx)%XI - 1, SINPML_fullsize(iHx)%XI - 1 - sgg%PML%NumLayers(1, 1), - 1 - sgg%LineX (i) = sgg%LineX(i+1) - delta - END DO - delta = sgg%LineX (SINPML_fullsize(iHx)%XE) - sgg%LineX(SINPML_fullsize(iHx)%XE-1) - DO i = SINPML_fullsize(iHx)%XE + 1, SINPML_fullsize(iHx)%XE + sgg%PML%NumLayers(1, 2) + 1 - sgg%LineX (i) = sgg%LineX(i-1) + delta - END DO - ! - delta = sgg%LineY (SINPML_fullsize(iHy)%YI+1) - sgg%LineY(SINPML_fullsize(iHy)%YI) - DO j = SINPML_fullsize(iHy)%YI - 1, SINPML_fullsize(iHy)%YI - 1 - sgg%PML%NumLayers(2, 1), - 1 - sgg%LineY (j) = sgg%LineY(j+1) - delta - END DO - ! - delta = sgg%LineY (SINPML_fullsize(iHy)%YE) - sgg%LineY(SINPML_fullsize(iHy)%YE-1) - DO j = SINPML_fullsize(iHy)%YE + 1, SINPML_fullsize(iHy)%YE + sgg%PML%NumLayers(2, 2) + 1 - sgg%LineY (j) = sgg%LineY(j-1) + delta - END DO - ! - delta = sgg%LineZ (SINPML_fullsize(iHz)%ZI+1) - sgg%LineZ(SINPML_fullsize(iHz)%ZI) - DO k = SINPML_fullsize(iHz)%ZI - 1, SINPML_fullsize(iHz)%ZI - 1 - sgg%PML%NumLayers(3, 1), - 1 - sgg%LineZ (k) = sgg%LineZ(k+1) - delta - END DO - ! - delta = sgg%LineZ (SINPML_fullsize(iHz)%ZE) - sgg%LineZ(SINPML_fullsize(iHz)%ZE-1) - DO k = SINPML_fullsize(iHz)%ZE + 1, SINPML_fullsize(iHz)%ZE + sgg%PML%NumLayers(3, 2) + 1 - sgg%LineZ (k) = sgg%LineZ(k-1) + delta - END DO - !2012 - !update actual number of media - !!!!!!! - - !! DO i = SINPML_fullsize(iHx)%XI - 1, SINPML_fullsize(iHx)%XE + sgg%PML%NumLayers(1, 2) + 1 - !! write (6678,*) 'lineX ',i, sgg%LineX (i) - !! END DO - !!! - !! DO j = SINPML_fullsize(iHy)%YI - 1, SINPML_fullsize(iHy)%YE + sgg%PML%NumLayers(2, 2) + 1 - !! write (6678,*) 'lineY ',j,sgg%LineY (j) - !! END DO - !!! - !! DO k = SINPML_fullsize(iHz)%ZI - 1, SINPML_fullsize(iHz)%ZE + sgg%PML%NumLayers(3, 2) + 1 - !! write (6678,*) 'lineZ ',k,sgg%LineZ (k) - !! END DO - - - RETURN - ! - END SUBROUTINE - ! - - - - !!!!!!!!!!!!!!!!PREPROCESADOR PARA SKIN-DEPTH 09/07/13 - subroutine prepro_skindepth(this,fichin) - integer pozi,tama,j,k - character (LEN=BUFSIZE) :: multiportFile - type(Parseador_t), INTENT (IN) :: this - CHARACTER (LEN=*), INTENT (IN) :: fichin - character (LEN=BUFSIZE) :: restocadena - integer :: my_iostat - - open (unit=7533,file='UGRskindepthmatlab.layers') - close(7533,status='delete') - my_iostat=0 -9306 if(my_iostat /= 0) write(*,fmt='(a)',advance='no'), '.' !!if(my_iostat /= 0) print '(i5,a1,i4,2x,a)',9306,'.',quienmpi,'UGRskindepthmatlab.layers' - open (unit=7533,file='UGRskindepthmatlab.layers',err=9306,iostat=my_iostat,status='new',action='write') - - tama = this%LossyThinSurfs%length - DO j = 1, tama - IF (abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) <= 1.0e-2_RKIND ) THEN !SGBCs que hay que sustituir - multiportFile = trim(adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' - ! - !09/07/13 !los SGBCs con skindepth se deben preprocesar - - !crea el fichero de entrada para usar con el compilado de Matlab - pozi=index(multiportFile,'_z11.txt') - write(7533,'(a)') trim(adjustl(multiportFile(1:pozi-1))) - write(7533,*) 'layers ',this%LossyThinSurfs%cs(j)%numcapas - do k=1,this%LossyThinSurfs%cs(j)%numcapas - write(7533,*) 'eps ',k,this%LossyThinSurfs%cs(j)%eps(k) - write(7533,*) 'mu ',k,this%LossyThinSurfs%cs(j)%mu(k) - write(7533,*) 'sigma ',k,this%LossyThinSurfs%cs(j)%sigma(k) - write(7533,*) 'thickness ',k,this%LossyThinSurfs%cs(j)%thk(k) - end do - write(7533,*) 'fmin ',10**4 - write(7533,*) 'fmax ',10**9 - write(7533,*) 'order ',24 - ENDIF - END DO - close(7533) - RETURN - - end subroutine !prepro_skindepth - !!!!!!!!end 09/07/13 - -#ifdef CompileWithConformal - subroutine AssigLossyOrPECtoNodes(sgg,media,conf_conflicts,input_conformal_flag) -#else - subroutine AssigLossyOrPECtoNodes(sgg,media) -#endif - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - type (media_matrices_t), intent(inout) :: media - - logical :: ispec, isSGBC, IsComposite, islossy, input_conformal_flag,NODALMENTEIGUALES,iguaSGM,iguaSIG,iguaMUR,iguaPEC,iguaLOS,iguaEPR,ISconformal - REAL (KIND=RKIND) :: sigt,epst,SIGMA,SIGMAM,EPR,MUR - integer (KIND=4) i,j,k,n,kmenos1,jmenos1,imenos1,med(0:5),r,imed,i1 - character(len=BUFSIZE) :: buff - -#ifdef CompileWithConformal - type (conf_conflicts_t), pointer :: conf_conflicts - type(conf_node_t), dimension (:), pointer :: conf_busy_node - integer (KIND=confIKIND) :: dims - logical :: mediois1,mediois2,mediois3 - integer (KIND=INTEGERSIZEOFMEDIAMATRICES) :: medio1,medio2,medio3 -#endif - - - !!!lo dejo aqui para en un futuro hacerlo crecer y asignar la informacion de nodo con su tipo de material correctamente - !!copiado de la casuistica de wires !310715 !no esta anulado alli, pero cuando se haga crecer habra que aumenta el sgg%med para acomodar a los nuevos materiales nodales.... - - do k= sgg%Alloc(iEz)%ZI , sgg%Alloc(iEz)%ZE - do j= sgg%Alloc(iEy)%YI , sgg%Alloc(iEy)%YE - do i= sgg%Alloc(iEx)%XI , sgg%Alloc(iEx)%XE - imenos1= i-1 - jmenos1= j-1 - kmenos1= k-1 - if (i-1 < sgg%alloc(iEx)%XI) imenos1=i - if (j-1 < sgg%alloc(iEy)%YI) jmenos1=j - if (k-1 < sgg%alloc(iEz)%ZI) kmenos1=k - - med(0) = media%sggMiEx(i , j , k ) - med(1) = media%sggMiEx(imenos1 , j , k ) - med(2) = media%sggMiEy(i , j , k ) - med(3) = media%sggMiEy(i , jmenos1 , k ) - med(4) = media%sggMiEz(i , j , k ) - med(5) = media%sggMiEz(i , j , kmenos1 ) - sigma = 0.0_RKIND - sigmam = 0.0_RKIND - epr = 0.0_RKIND - mur = 0.0_RKIND - ISPEC =.FALSE. - ISLOSSY =.FALSE. - do i1=0,5 - imed=med(i1) - sigma = max(sigma, sgg%Med(imed)%sigma) - sigmam = max(sigmam, sgg%Med(imed)%sigmam) - epr = epr + sgg%Med(imed)%epr / 6.0_RKIND - mur = mur + sgg%Med(imed)%mur /6.0_RKIND - if ((sgg%med(imed)%is%PEC).or.(imed==0)) isPEC = .true. - end do - if ( (.not.isPEC).and.(sigma >= 1e-4) ) then - islossy = .true. - else - islossy = .false. - endif - ! CREAR NUEVO MEDIO y asignarle sus propiedades de acuerdo a sus adyacencias - IF (.not.(sgg%med(med(0))%is%PML.OR.sgg%med(med(1))%is%PML.OR.sgg%med(med(2))%is%PML.OR.sgg%med(med(3))%is%PML.OR.sgg%med(med(4))%is%PML.OR.sgg%med(med(5))%is%PML)) THEN - IF ((MED(0)/=MED(1)).OR.(MED(1)/=MED(2)).OR.(MED(2)/=MED(3)).OR.(MED(3)/=MED(4)).OR.(MED(4)/=MED(5)).OR.(MED(5)/=MED(0))) THEN - NODALMENTEIGUALES=.FALSE. - busqueda: DO I1=0,SGG%NUMMEDIA -!cambios 230817 bug milano borja en rutina iguales - iguaSGM=IGUALES(SGG%MED(I1)%SIGMAM,SIGMAM) - iguaSIG=IGUALES(SGG%MED(I1)%SIGMA,SIGMA) !sgg230817 al poner sigma 1e29 y pec ademas, la rutina de iguales fallaba - iguaEPR=IGUALES(SGG%MED(I1)%EPR,EPR) - iguaMUR=IGUALES(SGG%MED(I1)%MUR,MUR) - iguaPEC=(SGG%MED(I1)%iS%PEC.eqv.ISPEC) - iguaLOS=(SGG%MED(I1)%iS%LOSSY.eqv.ISLOSSY) - ISconformal=((SGG%MED(I1)%iS%already_YEEadvanced_byconformal).or.(SGG%MED(I1)%is%split_and_useless)) - NODALMENTEIGUALES=NODALMENTEIGUALES.OR.(((iguaSGM.and.iguaSIG.and.iguaEPR.and.iguaMUR.and.iguaLOS).OR.iguaPEC).and.(.not.ISconformal)) - if (nodalmenteiguales) exit busqueda - END DO busqueda - IF (.NOT.NODALMENTEIGUALES) THEN - IF (SGG%NUMMEDIA+1 > SGG%ALLOCmed) then - call READJUST(SGG%ALLOCmed,sgg%med,2*SGG%ALLOCmed) !LO HAgo REallocatando al doble. gENERO NUEVO PARAMETRO sgg%ALLOCmed. Pero esto es un guirigay.... 261115 - endif - SGG%NUMMEDIA=SGG%NUMMEDIA+1 - media%sggMiNo(i,j,k)=SGG%NUMMEDIA - r=media%sggMiNo(i,j,k) - sgg%med(r)%sigma =sigma - sgg%med(r)%sigmam=sigmam - sgg%med(r)%epr =epr - sgg%med(r)%mur =mur - sgg%med(r)%is%PEC = ISPEC !ojo con estos medios que el sistema de prioridades ya no les afecta porque esta rutina va despues del preprocess 03116 - sgg%med(r)%is%LOSSY = ISLOSSY - sgg%med(r)%is%needed = .true. !sgg 220817 por defecto lo he puesto en readjust a false -!write(113,*) '.NOT.NODALMENTEIGUALES--> ',i,j,k,' - ',med(0),med(1),med(2),med(3),med(4),med(5),' - ',SGG%NUMMEDIA - ELSE - media%sggMiNo(i,j,k)=i1 !PUEDE QUE NO SEAN IGUALES PERO NODALMENTE LO SON (SOLO A EFECTOS DE SIGMA,EPR,SIGMAM,MUR,ISLOSSY,ISPEC - !bug 060417 debo ponerlo al medio que ha encontrado igual (i1) y estaba a med(0)!!!! -!write(114,*) '.YES.NODALMENTEIGUALES--> ',i,j,k,' - ',med(0),med(1),med(2),med(3),med(4),med(5),' - ',SGG%NUMMEDIA - ENDIF - else - media%sggMiNo(i,j,k)=MED(0) !todos iguales - endif - endif !del no es pml - !!!!aqui habra luego que ir creando y almacenando lo nuevos tipos de medio nodales en funcion de los sigt y epst para que wires use directamente esa info - end do - end do - end do - -!CORRIGE AHORA CON LA INFO CONFORMAL (HABIA UN BUG 211116 PQ EL NODALMENTE IGUALES LO MACHACABA SI ESTO SE HACIA ANTES) -#ifdef CompileWithConformal - if(input_conformal_flag)then - dims =conf_conflicts%conf_busy_nodesGroup%dims - conf_busy_node=> conf_conflicts%conf_busy_nodesGroup%conf_busy_node - do n=1,dims - i=conf_busy_node(n)%i - j=conf_busy_node(n)%j - k=conf_busy_node(n)%k - if (conf_busy_node(n)%ispec) then - media%sggMiNo(i,j,k)=0 - endif - end do - !!!conf_busy_node(n)%i = 0 - !!!conf_busy_node(n)%j = 0 - !!!conf_busy_node(n)%k = 0 - !!!conf_busy_node(n)%isfree = .true. - !!!conf_busy_node(n)%ispec = .false. - !!!conf_busy_node(n)%sigmaEquiv = 0.0_RKIND - !!!conf_busy_node(n)%epsilonRelEquiv = 1.0_RKIND - !!!conf_busy_node(n)%muRelEquiv = 1.0_RKIND - -!!! Movido a cada wires.F90. Aqui me parece inreportable y peligroso -!!!!pedazo de niapa para poner los sggmiNo conformal a voltage nulo y que Dios reparta suerte 130220 -!!! !barro el interior, por eso el shifing k,x - j,z - i,y -!!! Do k=sgg%alloc(iHx)%ZI , sgg%alloc(iHx)%ZE -!!! Do j=sgg%alloc(iHz)%YI , sgg%alloc(iHz)%YE -!!! Do i=sgg%alloc(iHy)%XI , sgg%alloc(iHy)%XE -!!! medio1 =sggMiEx(i,j,k) -!!! medio2 =sggMiEy(i,j,k) -!!! medio3 =sggMiEz(i,j,k) -!!! mediois1= sgg%med(medio1)%is%already_YEEadvanced_byconformal .or. sgg%med(medio1)%is%split_and_useless -!!! mediois2= sgg%med(medio2)%is%already_YEEadvanced_byconformal .or. sgg%med(medio2)%is%split_and_useless -!!! mediois3= sgg%med(medio3)%is%already_YEEadvanced_byconformal .or. sgg%med(medio3)%is%split_and_useless -!!! if (mediois1.or.mediois2.or.mediois3) then -!!! sggMiNo(i,j,k)=0 !ojo !esto no sirve para contactos conformal SGBC-wires, solo para conformal PEC-wires -!!! endif -!!! End do -!!! End do -!!! End do -!!!!fin pedado de niapa - - - endif -#endif - - return - end subroutine AssigLossyOrPECtoNodes - - LOGICAL FUNCTION IGUALES(A,B) RESULT(IGUAL) - REAL (KIND=RKIND) :: A,B,ERR - igual=.false. - IF (abs(A+B)>1e-20 ) THEN - ERR=2.0_RKIND*ABS((A-B)/(A+B)) - if (err <1e-2_RKIND) igual=.true. !en tanto por ciento me apanio con un 1 por ciento - ELSE - ERR=ABS(A-B) - if (err <1e-20_RKIND) igual=.true. !en valor absoluto para valores casi nulos le pido que el error sea casi nulo - ENDIF - RETURN - END FUNCTION IGUALES - - - subroutine populatePlaneWaveRC(Planewave,simu_devia) - type (planeonde_t) :: PlaneWave - integer :: kkk - real (kind=8) :: theta, phi, alpha,beta,alpha1,alpha2,amplitud,FACTOR - complex :: beta1,beta2 - logical :: primeravez,simu_devia - CHARACTER (LEN=BUFSIZE) :: buff -!integer :: values(1:8), k -!integer, dimension(:), allocatable :: seed -!real(8) :: r -!call date_and_time(values=values) -!call random_seed(size=k) -!allocate(seed(1:k)) -!seed(:) = values(8) -!call random_seed(put=seed) - - call random_seed() - - amplitud=1.0 - do kkk=1,PlaneWave%numModes -1 continue !punto de retorno si hay algun error de redondeo !vivan los gotos !!!! - primeravez=.true. - theta=0.; phi=0.; - do while(((2.0_RKIND *pi*sin(theta) < phi)).or.primeravez) !moglie - primeravez=.false. - CALL RANDOM_NUMBER(theta) - theta=pi*theta - CALL RANDOM_NUMBER(phi) - phi=2.0_RKIND *pi*phi - end do !moglie - phi=phi/sin(theta) !moglie -!ahora la polarizacion -!!!! si los hago asi hay apegotonamiento en los polos 281115 pero con los beta tampoco me sale. Seguir pensando y hacerlo con poincare algun dia 281115 -!generado con ortogonalidad_teM_parafuentesRC.nb -!ojo que el atan de fortran y de mathematica estan invertidos!!!! -2 continue - CALL RANDOM_NUMBER(beta) - beta=2.0_RKIND *pi*beta - alpha1=atan2( Cos(theta)/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0),-((Cos(beta - phi)*Sin(theta))/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0))) - alpha2=atan2(-(Cos(theta)/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0)), (Cos(beta - phi)*Sin(theta))/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0)) - if ((alpha1 <= pi).and.(alpha1 >= 0.0)) then - alpha=alpha1 - elseif ((alpha2 <= pi).and.(alpha2 >= 0.0)) then - alpha=alpha2 - else - goto 2 - ! WRITE (buff,*) 'Error generando direcciones aleatorias para RC planewaves. ' - ! CALL STOPONERROR(0,0,buff) - endif - !!! beta1=atan2(-2.0*1.0/Tan(alpha)*1.0/Tan(theta)*Sin(phi) + Sqrt(2.0)*1.0/Tan(phi)*1.0/Sin(alpha)**2.0*1.0/Sin(theta)**2.0*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0)), & - !!! -(1.0/Sin(alpha)*1.0/Sin(theta)*(2.0*Cos(alpha)*Cos(phi)*Cos(theta) + Sqrt(2.0)*1.0/Sin(alpha)*1.0/Sin(theta)*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0))))) - !!! beta2=atan2(-(1.0/Sin(alpha)*1.0/Sin(theta)*(2.0*Cos(alpha)*Cos(theta)*Sin(phi) + Sqrt(2.0)*1.0/Tan(phi)*1.0/Sin(alpha)*1.0/Sin(theta)*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0)))), & - !!! -2.0*Cos(phi)*1.0/Tan(alpha)*1.0/Tan(theta) + Sqrt(2.0)*1.0/Sin(alpha)**2.0*1.0/Sin(theta)**2.0*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0))) - - -!!!ahora la incertumbre en la posicion - CALL RANDOM_NUMBER(factor) - planewave%INCERT(kkk)=planewave%incertMax*factor -!!! - ! - planewave%px(kkk) = Sin (theta) * Cos (phi) - planewave%py(kkk) = Sin (theta) * Sin (phi) - planewave%pz(kkk) = Cos (theta) - planewave%ex(kkk) = amplitud * Sin (alpha) * Cos (beta) - planewave%ey(kkk) = amplitud * Sin (alpha) * Sin (beta) - planewave%ez(kkk) = amplitud * Cos (alpha) - !ojo con estos redondeos. - !!!IF (Abs(planewave%ex(KKK)/amplitud) < 1e-4) planewave%ex(KKK) = 0.0_RKIND - !!!IF (Abs(planewave%ey(KKK)/amplitud) < 1e-4) planewave%ey(KKK) = 0.0_RKIND - !!!IF (Abs(planewave%ez(KKK)/amplitud) < 1e-4) planewave%ez(KKK) = 0.0_RKIND - !!!IF (Abs(planewave%px(KKK)) < 1e-4) planewave%px(KKK) = 0.0_RKIND - !!!IF (Abs(planewave%py(KKK)) < 1e-4) planewave%py(KKK) = 0.0_RKIND - !!!IF (Abs(planewave%pz(KKK)) < 1e-4) planewave%pz(KKK) = 0.0_RKIND - IF (abs(planewave%px(KKK)**2.+planewave%py(KKK)**2.+planewave%pz(KKK)**2.-1.)>1e-4) THEN -!!! WRITE (buff,*) 'NO TEM PLANEWAVE in RC routine' - goto 1 !CALL STOPONERROR(0,0,buff) - END IF - IF (abs(planewave%ex(KKK)**2.+planewave%ey(KKK)**2.+planewave%ez(KKK)**2.-amplitud**2.)>1e-4) THEN -!!! WRITE (buff,*) 'NO TEM PLANEWAVE in RC routine' - goto 1 !CALL STOPONERROR(0,0,buff) - END IF - IF (Abs(planewave%px(KKK)*planewave%ex(KKK)+planewave%py(KKK)*planewave%ey(KKK)+planewave%pz(KKK)*planewave%ez(KKK)) >= 1e-4) THEN -!!! WRITE (buff,*) 'NO TEM PLANEWAVE in RC routine' - goto 1 !CALL STOPONERROR(0,0,buff) - END IF -!!! write (777,'(i5,12e19.9e3)') kkk,theta, phi, alpha, beta,factor - end do - - open(888,file='rc_EP.dat', FORM='formatted') - do - read (888,'(i5,12e19.9e3)',end=888,err=888) kkk, planewave%px(kkk),planewave%py(kkk),planewave%pz(kkk), & - planewave%ex(kkk),planewave%ey(kkk),planewave%ez(kkk), planewave%INCERT(kkk) - end do -888 continue - close(888) - - if (.not.simu_devia) then !solo lo escribe el principal - open(888,file='rc_EP.dat', FORM='formatted') - do kkk=1,PlaneWave%numModes - write (888,'(i5,12e19.9e3)') kkk, planewave%px(kkk),planewave%py(kkk),planewave%pz(kkk), & - planewave%ex(kkk),planewave%ey(kkk),planewave%ez(kkk),planewave%INCERT(kkk) - end do - close(888) - endif - - end subroutine populatePlaneWaveRC - -!!!! subroutine init_random_seed() -!!!! use iso_fortran_env, only: int64 -!!!! implicit none -!!!! integer, allocatable :: seed(:) -!!!! integer :: i, n, un, istat, dt(8), pid -!!!! integer(int64) :: t -!!!! -!!!! call random_seed(size = n) -!!!! allocate(seed(n)) -!!!! ! First try if the OS provides a random number generator -!!!! open(newunit=un, file="/dev/urandom", access="stream", & -!!!! form="unformatted", action="read", status="old", iostat=istat) -!!!! if (istat == 0) then -!!!! read(un) seed -!!!! close(un) -!!!! else -!!!! ! Fallback to XOR:ing the current time and pid. The PID is -!!!! ! useful in case one launches multiple instances of the same -!!!! ! program in Parallel. -!!!! call system_clock(t) -!!!! if (t == 0) then -!!!! call date_and_time(values=dt) -!!!! t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 & -!!!! + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 & -!!!! + dt(3) * 24_int64 * 60 * 60 * 1000 & -!!!! + dt(5) * 60 * 60 * 1000 & -!!!! + dt(6) * 60 * 1000 + dt(7) * 1000 & -!!!! + dt(8) -!!!! end if -!!!! pid = getpid() -!!!! t = ieor(t, int(pid, kind(t))) -!!!! do i = 1, n -!!!! seed(i) = lcg(t) -!!!! end do -!!!! end if -!!!! call random_seed(put=seed) -!!!! contains -!!!! ! This simple PRNG might not be good enough for real work, but is -!!!! ! sufficient for seeding a better PRNG. -!!!! function lcg(s) -!!!! integer :: lcg -!!!! integer(int64) :: s -!!!! if (s == 0) then -!!!! s = 104729 -!!!! else -!!!! s = mod(s, 4294967296_int64) -!!!! end if -!!!! s = mod(s * 279470273_int64, 4294967291_int64) -!!!! lcg = int(mod(s, int(huge(0), int64)), kind(0)) -!!!! end function lcg -!!!! end subroutine init_random_seed - - subroutine cuentatags(this,tagtype,layoutnumber,fichin) - - CHARACTER (LEN=*), INTENT (IN) :: fichin - INTEGER (KIND=4), INTENT (IN) :: layoutnumber - - type(Parseador_t), INTENT (INOUT) :: this - LOGICAL :: foundDuplicate - integer (Kind=4) :: numertag, i,j, k, m, tama,tama2,tama3,tama2p,tama3p,precounting,acum,thefileno - CHARACTER(LEN=BUFSIZE) :: tagToCheck - type (tagtype_t) :: tagtype - - !!!ojoo -!!!!return !ojooo - - do precounting=0,1 - numertag=0 - ! - tama = (this%pecregs%nvols) - DO i = 1, tama - numertag = numertag + 1; - if ((i>1)) then - if ((this%pecregs%vols(i)%tag == this%pecregs%vols(i-1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - if (precounting==1) tagtype%tag(numertag) = this%pecregs%vols(i)%tag - end do - tama = (this%pecregs%nsurfs) - DO i = 1, tama - numertag = numertag + 1; - if ((i>1)) then - if ((this%pecregs%surfs(i)%tag == this%pecregs%surfs(i-1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - if (precounting==1) tagtype%tag(numertag) = this%pecregs%surfs(i)%tag - end do - tama = (this%pecregs%nLINS) - DO i = 1, tama - numertag = numertag + 1; - if ((i>1)) then - if ((this%pecregs%lins(i)%tag == this%pecregs%lins(i-1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - if (precounting==1) tagtype%tag(numertag) = this%pecregs%lins(i)%tag - enddo - ! - tama = (this%pmcregs%nvols) - DO i = 1, tama - numertag = numertag + 1; - if ((i>1)) then - if ((this%pmcregs%vols(i)%tag == this%pmcregs%vols(i-1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - if (precounting==1) tagtype%tag(numertag) = this%pmcregs%vols(i)%tag - end do - tama = (this%pmcregs%nsurfs) - DO i = 1, tama - numertag = numertag + 1; - if ((i>1)) then - if ((this%pmcregs%surfs(i)%tag == this%pmcregs%surfs(i-1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - if (precounting==1) tagtype%tag(numertag) = this%pmcregs%surfs(i)%tag - end do - tama = (this%pmcregs%nLINS) - DO i = 1, tama - numertag = numertag + 1; - if ((i>1)) then - if ((this%pmcregs%lins(i)%tag == this%pmcregs%lins(i-1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - if (precounting==1) tagtype%tag(numertag) = this%pmcregs%lins(i)%tag - enddo - ! - ! - ! - - tama = (this%DielRegs%nvols) - DO i = 1, tama - tama2 = (this%DielRegs%vols(i)%n_c1P) - tama3 = (this%DielRegs%vols(i)%n_c2P) - - if ((tama2 == 0) .and. (tama3==0)) then - print *,'Bug in Dielectric Tags. Missing coordinates' - stop - end if - - ! Check c1P coordinates - call checkDielectricComponentTags(this%DielRegs%vols(i), this%DielRegs%vols(1:i-1), i-1, & - 'c1P', numertag, tagtype, precounting, & - 'Bug in Dielectric Volume Tags') - - ! Check c2P coordinates - call checkDielectricComponentTags(this%DielRegs%vols(i), this%DielRegs%vols(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Dielectric Volume Tags') - end do - - ! Similar for surfaces - tama = (this%DielRegs%nSurfs) - DO i = 1, tama - tama2 = (this%DielRegs%surfs(i)%n_c1P) - tama3 = (this%DielRegs%surfs(i)%n_c2P) - - if ((tama2 == 0) .and. (tama3==0)) then - print *,'Bug in Dielectric Tags. Missing coordinates' - stop - end if - - ! Check c1P coordinates - call checkDielectricComponentTags(this%DielRegs%surfs(i), this%DielRegs%surfs(1:i-1), i-1, & - 'c1P', numertag, tagtype, precounting, & - 'Bug in Dielectric Surface Tags') - - ! Check c2P coordinates - call checkDielectricComponentTags(this%DielRegs%surfs(i), this%DielRegs%surfs(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Dielectric Surface Tags') - end do - - ! Similar for surfaces - tama = (this%DielRegs%nLins) - DO i = 1, tama - tama2 = (this%DielRegs%Lins(i)%n_c1P) - tama3 = (this%DielRegs%Lins(i)%n_c2P) - - if ((tama2 == 0) .and. (tama3==0)) then - print *,'Bug in Dielectric Tags. Missing coordinates' - stop - end if - - ! Check c1P coordinates - call checkDielectricComponentTags(this%DielRegs%lins(i), this%DielRegs%lins(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Dielectric Surface Tags') - - ! Check c2P coordinates - call checkDielectricComponentTags(this%DielRegs%lins(i), this%DielRegs%lins(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Dielectric Surface Tags') - end do -! - tama = (this%animats%nvols) - DO i = 1, tama - tama2 = (this%DielRegs%vols(i)%n_c1P) - tama3 = (this%DielRegs%vols(i)%n_c2P) - - if ((tama2 == 0) .and. (tama3==0)) then - print *,'Bug in Animat Tags. Missing coordinates' - stop - end if - - ! Check c1P coordinates - call checkAnimatedComponentTags(this%aniMats%vols(i), this%aniMats%vols(1:i-1), i-1, & - 'c1P', numertag, tagtype, precounting, & - 'Bug in Animat Volume Tags') - - ! Check c2P coordinates - call checkAnimatedComponentTags(this%aniMats%vols(i), this%aniMats%vols(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Animat Volume Tags') - end do - ! - tama = (this%animats%nSurfs) - DO i = 1, tama - tama2 = (this%DielRegs%Surfs(i)%n_c1P) - tama3 = (this%DielRegs%Surfs(i)%n_c2P) - - if ((tama2 == 0) .and. (tama3==0)) then - print *,'Bug in Animat Tags. Missing coordinates' - stop - end if - - ! Check c1P coordinates - call checkAnimatedComponentTags(this%aniMats%Surfs(i), this%aniMats%Surfs(1:i-1), i-1, & - 'c1P', numertag, tagtype, precounting, & - 'Bug in Animat Surface Tags') - - ! Check c2P coordinates - call checkAnimatedComponentTags(this%aniMats%Surfs(i), this%aniMats%Surfs(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Animat Surface Tags') - end do - ! - tama = (this%animats%nLins) - DO i = 1, tama - tama2 = (this%DielRegs%Lins(i)%n_c1P) - tama3 = (this%DielRegs%Lins(i)%n_c2P) - - if ((tama2 == 0) .and. (tama3==0)) then - print *,'Bug in Animat Tags. Missing coordinates' - stop - end if - - ! Check c1P coordinates - call checkAnimatedComponentTags(this%aniMats%Lins(i), this%aniMats%Lins(1:i-1), i-1, & - 'c1P', numertag, tagtype, precounting, & - 'Bug in Animat Line Tags') - - ! Check c2P coordinates - call checkAnimatedComponentTags(this%aniMats%Lins(i), this%aniMats%Lins(1:i-1), i-1, & - 'c2P', numertag, tagtype, precounting, & - 'Bug in Animat Line Tags') - end do -! -! -! - tama = (this%frqdepmats%nvols) - DO i = 1, tama - numertag = numertag + 1; - tama2 = (this%frqdepmats%vols(i)%n_c) - if (tama2/=0) then - if ((i>1)) then - if ((this%frqdepmats%vols(i)%c(1)%tag == this%frqdepmats%vols(i-1)%c(1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - endif - if (precounting==1) then - if (tama2/=0) then - tagtype%tag(numertag) = this%frqdepmats%vols(i)%c(1)%tag - else - print *,'bug in tags. ' - stop - endif - DO j = 1, tama2 - if (trim(adjustl(this%frqdepmats%vols(i)%c(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then - print *,'bug in tags. ' - stop - endif - end do - endif - end do - ! - tama = (this%frqdepmats%nsurfs) - DO i = 1, tama - numertag = numertag + 1; - tama2 = (this%frqdepmats%surfs(i)%n_c) - if (tama2/=0) then - if ((i>1)) then - if ((this%frqdepmats%surfs(i)%c(1)%tag == this%frqdepmats%surfs(i-1)%c(1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - endif - if (precounting==1) then - if (tama2/=0) then - tagtype%tag(numertag) = this%frqdepmats%surfs(i)%c(1)%tag - else - print *,'bug in tags. ' - stop - endif - DO j = 1, tama2 - if (trim(adjustl(this%frqdepmats%surfs(i)%c(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then - print *,'bug in tags. ' - stop - endif - end do - endif - end do - ! - tama = (this%frqdepmats%nlins) - DO i = 1, tama - numertag = numertag + 1; - tama2 = (this%frqdepmats%lins(i)%n_c) - if (tama2/=0) then - if ((i>1)) then - if ((this%frqdepmats%lins(i)%c(1)%tag == this%frqdepmats%lins(i-1)%c(1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - endif - if (precounting==1) then - if (tama2/=0) then - tagtype%tag(numertag) = this%LossyThinSurfs%cs(i)%C(1)%tag - else - print *,'bug in tags. ' - stop - endif - DO j = 1, tama2 - if (trim(adjustl(this%frqdepmats%lins(i)%c(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then - print *,'bug in tags. ' - stop - endif - end do - endif - end do -!!! - tama = this%LossyThinSurfs%length - DO i = 1, tama - call checkLossyTags(this%LossyThinSurfs%cs(i), & - this%LossyThinSurfs%cs(1:i-1), & - i-1, numertag, tagtype, precounting) - END DO - - tama = this%twires%n_tw - do i=1, tama - numertag = numertag + 1 - tama2 = this%twires%TW(i)%N_TWC - if (tama2/=0) then - if ((i>1)) then - if ((this%twires%TW(i)%TWC(1)%tag == this%twires%TW(i-1)%TWC(1)%tag )) then !do not increase - numertag=numertag-1 - endif - endif - endif - if (precounting==1) then - if (tama2/=0) then - tagtype%tag(numertag) = this%twires%TW(i)%TWC(1)%tag - else - print *,'bug in tags. ' - stop - endif - DO j = 1, tama2 - if (trim(adjustl(this%twires%TW(i)%TWC(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then - print *,'bug in tags. ' - stop - endif - end do - endif - end do - -#ifdef CompileWithMTLN - block - class(cable_t), pointer :: ptr - do i = 1, this%mtln%n_unsh + this%mtln%n_sh - ptr => this%mtln%cables(i)%ptr - select type(ptr) - type is(unshielded_multiwire_t) - numertag = numertag + 1 - if (precounting == 1) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag - end select - end do - end block -#endif - - tama = this%swires%n_sw - do i=1, tama - numertag = numertag + 1 - tama2=this%swires%SW(i)%n_swc - if (tama2/=0) then - if ((i>1)) then - if ((this%swires%SW(i)%swc(1)%tag == this%swires%SW(i-1)%swc(1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - endif - if (precounting==1) then - if (tama2/=0) then - tagtype%tag(numertag) = this%swires%SW(i)%swc(1)%tag - else - print *,'bug in tags. ' - stop - endif - do j = 1,tama2 - if (trim(adjustl(this%swires%SW(i)%swc(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then - print *,'bug in tags. ' - stop - endif - end do - endif - end do - - tama = this%tSlots%n_tg - DO i = 1, tama - numertag = numertag + 1 - tama2 = this%tSlots%Tg(i)%N_tgc - if (tama2/=0) then - if ((i>1)) then - if ((this%tSlots%Tg(i)%TgC(1)%tag == this%tSlots%Tg(i-1)%TgC(1)%tag)) then !do not increase - numertag=numertag-1 - endif - endif - endif - if (precounting==1) then - if (tama2/=0) then - tagtype%tag(numertag) = this%tSlots%Tg(i)%TgC(1)%tag - else - print *,'bug in tags. ' - stop - endif - DO j = 1, tama2 - if (trim(adjustl(this%tSlots%Tg(i)%TgC(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then - print *,'bug in tags. ' - stop - endif - end do - endif - end do - - if (associated(this%conformalRegs%volumes)) then - numertag = numertag + 1 - if (precounting == 1) tagtype%tag(numertag) = this%conformalRegs%volumes(1)%tag - end if - if (associated(this%conformalRegs%surfaces)) then - numertag = numertag + 1 - if (precounting == 1) tagtype%tag(numertag) = this%conformalRegs%surfaces(1)%tag - end if -!!!!!!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!! - !!!!!!!!!!!!!!!!!!!!! - if (precounting==0) then - tagtype%numertags = numertag - allocate(tagtype%tag(1:numertag+1)) !uno mas para luego jugar - tagtype%tag='' - else !elimina repetidos - do i=1,numertag - do j=i+1,numertag - if ((trim(adjustl(tagtype%tag(i)))==trim(adjustl(tagtype%tag(j))))) then - tagtype%tag(j)='' - endif - end do - end do - i=1 - acum=0 - do while ((i<=numertag).and.(acum<=numertag+1)) - if (trim(adjustl(tagtype%tag(i)))=='') then - tagtype%tag(i:numertag)=tagtype%tag(i+1:numertag+1) - acum=acum+1 - else - i=i+1 - endif - end do - numertag=i-1 - tagtype%numertags = numertag - endif - end do !del precounting - - - return - end subroutine cuentatags - - - subroutine checkDielectricComponentTags (component, prev_components, n_prev, coord_type, numertag, tagtype, precounting, error_msg) - type(Dielectric_t), intent(in) :: component ! Current component - type(Dielectric_t), intent(in) :: prev_components(:) ! Array of previous components - integer, intent(in) :: n_prev ! Number of previous components - character(len=*), intent(in) :: coord_type ! 'c1P' or 'c2P' - integer, intent(inout) :: numertag - type(tagtype_t), intent(inout) :: tagtype - integer, intent(in) :: precounting - character(len=*), intent(in) :: error_msg - - integer :: j, tama2 - - if (coord_type == 'c1P') then - tama2 = component%n_c1P - else - tama2 = component%n_c2P - end if - - check_tags: do j = 1, tama2 - numertag = numertag + 1 - call checkDielectricTagForDuplicate(component, prev_components, n_prev, j, coord_type, numertag, tagtype, precounting, error_msg) - end do check_tags - end subroutine - - subroutine checkDielectricTagForDuplicate(component, prev_components, n_prev, idx, coord_type, numertag, tagtype, precounting, error_msg) - type(Dielectric_t), intent(in) :: component - type(Dielectric_t), intent(in) :: prev_components(:) - integer, intent(in) :: n_prev - integer, intent(in) :: idx - character(len=*), intent(in) :: coord_type - integer, intent(inout) :: numertag - type(tagtype_t), intent(inout) :: tagtype - integer, intent(in) :: precounting - character(len=*), intent(in) :: error_msg - - logical :: foundDuplicate - character(len=BUFSIZE) :: tagToCheck - integer :: k, m - - if (coord_type == 'c1P') then - tagToCheck = trim(adjustl(component%c1P(idx)%tag)) - else - tagToCheck = trim(adjustl(component%c2P(idx)%tag)) - end if - - foundDuplicate = .false. - - if (idx > 1) then - check_current: do k = 1, idx-1 - if (coord_type == 'c1P') then - if (tagToCheck == trim(adjustl(component%c1P(k)%tag))) then - foundDuplicate = .true. - exit check_current - end if - else - if (tagToCheck == trim(adjustl(component%c2P(k)%tag))) then - foundDuplicate = .true. - exit check_current - end if - end if - end do check_current - end if - - if (.not. foundDuplicate) then - check_previous: do m = 1, n_prev - if (prev_components(m)%n_c1P > 0) then - do k = 1, prev_components(m)%n_c1P - if (tagToCheck == trim(adjustl(prev_components(m)%c1P(k)%tag))) then - print *, error_msg - print *, 'Duplicate tag found:', tagToCheck - stop - end if - end do - end if - - if (prev_components(m)%n_c2P > 0) then - do k = 1, prev_components(m)%n_c2P - if (tagToCheck == trim(adjustl(prev_components(m)%c2P(k)%tag))) then - print *, error_msg - print *, 'Duplicate tag found:', tagToCheck - stop - end if - end do - end if - end do check_previous - end if - - if (foundDuplicate) then - numertag = numertag - 1 - else if (precounting == 1) then - tagtype%tag(numertag) = tagToCheck - end if - end subroutine - - - subroutine checkAnimatedComponentTags (component, prev_components, n_prev, coord_type, numertag, tagtype, precounting, error_msg) - type(ANISOTROPICbody_t), intent(in) :: component ! Current component - type(ANISOTROPICbody_t), intent(in) :: prev_components(:) ! Array of previous components - integer, intent(in) :: n_prev ! Number of previous components - character(len=*), intent(in) :: coord_type ! 'c1P' or 'c2P' - integer, intent(inout) :: numertag - type(tagtype_t), intent(inout) :: tagtype - integer, intent(in) :: precounting - character(len=*), intent(in) :: error_msg - - integer :: j, tama2 - - if (coord_type == 'c1P') then - tama2 = component%n_c1P - else - tama2 = component%n_c2P - end if - - check_tags: do j = 1, tama2 - numertag = numertag + 1 - call checkAnimatedTagForDuplicate(component, prev_components, n_prev, j, coord_type, numertag, tagtype, precounting, error_msg) - end do check_tags - end subroutine - - subroutine checkAnimatedTagForDuplicate(component, prev_components, n_prev, idx, coord_type, numertag, tagtype, precounting, error_msg) - type(ANISOTROPICbody_t), intent(in) :: component - type(ANISOTROPICbody_t), intent(in) :: prev_components(:) - integer, intent(in) :: n_prev - integer, intent(in) :: idx - character(len=*), intent(in) :: coord_type - integer, intent(inout) :: numertag - type(tagtype_t), intent(inout) :: tagtype - integer, intent(in) :: precounting - character(len=*), intent(in) :: error_msg - - logical :: foundDuplicate - character(len=BUFSIZE) :: tagToCheck - integer :: k, m - - if (coord_type == 'c1P') then - tagToCheck = trim(adjustl(component%c1P(idx)%tag)) - else - tagToCheck = trim(adjustl(component%c2P(idx)%tag)) - end if - - foundDuplicate = .false. - - if (idx > 1) then - check_current: do k = 1, idx-1 - if (coord_type == 'c1P') then - if (tagToCheck == trim(adjustl(component%c1P(k)%tag))) then - foundDuplicate = .true. - exit check_current - end if - else - if (tagToCheck == trim(adjustl(component%c2P(k)%tag))) then - foundDuplicate = .true. - exit check_current - end if - end if - end do check_current - end if - - if (.not. foundDuplicate) then - check_previous: do m = 1, n_prev - if (prev_components(m)%n_c1P > 0) then - do k = 1, prev_components(m)%n_c1P - if (tagToCheck == trim(adjustl(prev_components(m)%c1P(k)%tag))) then - print *, error_msg - print *, 'Duplicate tag found:', tagToCheck - stop - end if - end do - end if - - if (prev_components(m)%n_c2P > 0) then - do k = 1, prev_components(m)%n_c2P - if (tagToCheck == trim(adjustl(prev_components(m)%c2P(k)%tag))) then - print *, error_msg - print *, 'Duplicate tag found:', tagToCheck - stop - end if - end do - end if - end do check_previous - end if - - if (foundDuplicate) then - numertag = numertag - 1 - else if (precounting == 1) then - tagtype%tag(numertag) = tagToCheck - end if - end subroutine - - subroutine checkLossyTags(component, prev_components, n_prev, numertag, tagtype, precounting) - type(LossyThinSurface_t), intent(in) :: component - type(LossyThinSurface_t), intent(in) :: prev_components(:) - integer, intent(in) :: n_prev - integer, intent(inout) :: numertag - type(tagtype_t), intent(inout) :: tagtype - integer, intent(in) :: precounting - - integer :: j - - if (component%nc == 0) then - print *, 'Bug in LossyThinSurf Tags. Missing coordinates' - stop - end if - - check_tags: do j = 1, component%nc - numertag = numertag + 1 - call checkLossyTagForDuplicate(component, prev_components, n_prev, j, numertag, tagtype, precounting) - end do check_tags - end subroutine - - subroutine checkLossyTagForDuplicate(component, prev_components, n_prev, idx, numertag, tagtype, precounting) - type(LossyThinSurface_t), intent(in) :: component - type(LossyThinSurface_t), intent(in) :: prev_components(:) - integer, intent(in) :: n_prev - integer, intent(in) :: idx - integer, intent(inout) :: numertag - type(tagtype_t), intent(inout) :: tagtype - integer, intent(in) :: precounting - - logical :: foundDuplicate - character(len=BUFSIZE) :: tagToCheck - integer :: k, m - - tagToCheck = trim(adjustl(component%C(idx)%tag)) - foundDuplicate = .false. - - if (idx > 1) then - check_current: do k = 1, idx-1 - if (tagToCheck == trim(adjustl(component%C(k)%tag))) then - foundDuplicate = .true. - exit check_current - end if - end do check_current - end if - - if ((.not. foundDuplicate) .and. (n_prev > 0)) then - check_previous: do m = 1, n_prev - if (prev_components(m)%nc > 0) then - do k = 1, prev_components(m)%nc - if (tagToCheck == trim(adjustl(prev_components(m)%C(k)%tag))) then - foundDuplicate = .true. - end if - end do - end if - end do check_previous - end if - - if (foundDuplicate) then - numertag = numertag - 1 - else if (precounting == 1) then - tagtype%tag(numertag) = tagToCheck - end if - end subroutine - - - function searchtag(tagtype,tag) result(numertag) - - - character(len=*), intent(in) :: tag - integer(Kind=4) :: i,numertag - type(tagtype_t), intent(in) :: tagtype - - numertag=-1 - busca: do i=1,tagtype%numertags - if (trim(adjustl(tagtype%tag(i)))==trim(adjustl(tag))) then - numertag=i - exit busca - endif - end do busca - return - end function searchtag - - -END MODULE Preprocess_m + + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! This module defines a class to deal with the transfering information +! from the parser to a class where it can be stored into memory and +! used in any further development of the FDTD simulation +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!#define DetectAdj : call the calculus of +!!!!!!!!! since the routine is not deeply tested) +module Preprocess_m +#undef DetectAdj + ! + use Report_m + use NFDETypes_m +#ifdef CompileWithMTLN + use mtln_types_m, only: cable_t, unshielded_multiwire_t +#endif + !healer sgg10 + use CreateMatrices_m + !typos que leo desde mi FDE + use FDETYPES_m + use DMMA_m + use conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z + implicit none +!!!variables globales del modulo + real(kind=RKIND), save :: cluz,zvac + real(kind=RKIND), save :: eps0,mu0 +!!! + private + ! + public read_geomData, read_limits_nogeom,AssigLossyOrPECtoNodes,searchtag + public checkDielectricTagForDuplicate, checkAnimatedTagForDuplicate, checkLossyTagForDuplicate + ! +contains + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SINPML_fullsize, fullsize, this, & + groundwires,attfactor,mibc,SGBC,SGBCDispersive,MEDIOEXTRA,maxSourceValue,skindepthpre,createmapvtk,input_conformal_flag,CLIPREGION,boundwireradius,maxwireradius,updateshared,run_with_dmma, & + eps00,mu00,simu_devia,hay_slanted_wires,verbose,ignoresamplingerrors,tagtype,wiresflavor) + type(media_matrices_t), intent(inout) :: media + logical :: simu_devia,verbose,hay_slanted_wires + real(kind=RKIND) :: eps00,mu00 + + type(MedioExtra_t), INTENT (INout) :: MEDIOEXTRA + ! + character(len=BUFSIZE), intent(in) :: wiresflavor + logical, intent(in) :: updateshared,run_with_dmma,ignoresamplingerrors + LOGICAL, INTENT (INout) :: mibc,SGBC,CLIPREGION,boundwireradius,SGBCDispersive,skindepthpre + LOGICAL, INTENT (INout) :: createmapvtk + type(limit_t), dimension(1:6) :: SINPML_fullsize, fullsize + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + character(len=BUFSIZE) :: extraswitches + + type(taglist_t) :: tag_numbers + type(Parseador_t), intent(inout) :: this + integer(kind=4) :: tama, tama2, tama3, tama4, tama5, tama6, i, j, k, tipotemp, tamaSonda, & + & tamaoldSONDA, tamaBloquePrb, tamaScrPrb,pozi,tama2bis,numeroasignaciones,ci + character(len=*), intent(in) :: fichin + ! + character(len=BUFSIZE) :: probenumber + real(kind=RKIND) :: ex, ey, ez, px, py, pz, amplitud,attfactor,maxSourceValue,minSpaceStep,maxwireradius + + character(len=BUFSIZE) :: tag + + type(XYZlimit_t) :: punto, BoundingBox, conf_bounding_box + type(xyzlimit_scaled_t) :: punto_s + integer(kind=4) :: orientacion,orientacionL,orientacionR, direccion, contamedia,oldcontamedia, maxcontamedia, mincontamedia, inicontamedia, & + i1, j1, field, k1, pecmedio, ii, medio1, medio2, sondas,CONTACURR,CONTAVOLT,I_,J_ + ! + LOGICAL :: isathinwire, VALIDO, existia,medioespecial,input_conformal_flag,nodo_cazado + LOGICAL :: errnofile,errnofile1,errnofile2,errnofile3,errnofile4 + real(kind=RKIND) :: tiempo1, tiempo2, field1, field2,rdummy + INTEGER (KIND=4) :: nsurfs, numus, layoutnumber, size,OrigIndex,numminus + real(kind=RKIND) :: delta,del,sig_max + integer(kind=4), dimension(:), ALLOCATABLE :: contapuntos + integer(kind=4) :: conta1, conta2, MEDIO,imenos1,jmenos1,kmenos1,o,p,puntoxi,puntoyi,puntozi, & + bboxwirXI,dummy_bboxwirXI,bboxwirYI,dummy_bboxwirYI,bboxwirzI,dummy_bboxwirzI, & + bboxwirXE,dummy_bboxwirXE,bboxwirYE,dummy_bboxwirYE,bboxwirZE,dummy_bboxwirZE,IERR + integer(kind=8) :: memo + character(len=BUFSIZE) :: MultiportFile,MultiportFile2 + character(len=BUFSIZE) :: buff + real(kind=RKIND), allocatable, dimension(:) :: dummy_px,dummy_py,dummy_pz,dummy_ex,dummy_ey,dummy_ez,dummy_INCERT + ! + character(len=BUFSIZE) :: whoami + character(len=BUFSIZE) :: whoamishort + character(len=BUFSIZE) :: ext,extpoint + character(len=BUFSIZE) :: chari,charj,chark,chari2,charj2,chark2 + ! + logical :: paraerrhilo,groundwires,islossy,DENTRO + real(kind=RKIND) :: width, dir (1:3), epr1, mur1 + LOGICAL :: oriX, oriY, oriZ, oriX2, oriY2, oriZ2, oriX3, oriY3, oriZ3, iguales + LOGICAL :: oriX4, oriY4, oriZ4 + real(kind=RKIND), dimension(3, 3) :: EprSlot, MurSlot + integer(kind=4) :: indicemedio + integer(kind=4) :: i11, j11 + ! + type(tagtype_t) :: tagtype + type(FreqDepenMaterial_t), pointer :: fdgeom + ! + integer(kind=4) :: numertag + integer(kind=4) :: Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + & Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & + & Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & + & Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & + & Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE + ! + ! + type(ConformalMedia_t), dimension(:), allocatable :: conformal_volumes, conformal_surfaces + real(kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios + type(side_tris_map_t), dimension(:), allocatable :: volume_side_maps, surface_side_maps + eps0=eps00; mu0=mu00; !chapuz para convertir la variables de paso en globales + cluz=1.0_RKIND/sqrt(eps0*mu0) + zvac=sqrt(mu0/eps0) +! + call cuentatags(this,tagtype,layoutnumber,fichin) +! + delta=-1 !para que no se queje gfortran de variables sin inicializar + + sgg%thereAreMagneticMedia=.true. !caso mas general + sgg%thereArePMLMagneticMedia=.true. !caso mas general + !antes de hacer nada preprocesa si es preciso y no allocatear nada + !09/07/13 !los SGBCs con skindepth se deben preprocesar + if (skindepthpre) then + if (layoutnumber == 0) then + call print11(layoutnumber,'Preprocessing SGBC materials to include skin-depth effects....') + call prepro_skindepth(this,fichin) + call print11(layoutnumber,'Finished preprocessing for skin-depth.') + end if +#ifdef CompileWithMPI + call MPI_Barrier(MPI_COMM_WORLD,ierr) +#endif + return + end if + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + WRITE (whoami, '(a,i5,a,i5,a)') '(', layoutnumber + 1, '/', size, ') ' + write(whoamishort,'(i5)') layoutnumber+1 + !create space for the etangential shared info + sgg%EShared%Conta = 0 + sgg%EShared%MaxConta = 10 + allocate(sgg%EShared%elem(1:sgg%EShared%MaxConta)) + + call buildConformalMedia(this%conformalRegs, conformal_volumes, conformal_surfaces) + sgg%dt = changeTimeStepIfConformalNeeded(sgg%dt) + if (associated(this%conformalRegs%volumes)) then + volume_side_maps = buildSideMaps(this%conformalRegs%volumes) + else + allocate(volume_side_maps(0)) + end if + if (associated(this%conformalRegs%surfaces)) then + surface_side_maps = buildSideMaps(this%conformalRegs%surfaces) + else + allocate(surface_side_maps(0)) + end if + + ! Cuenta los medios + !!!!!calcula tamanios + !reserva espacio + !el medio 0 se reserva para PEC + !regiones PEC + !el medio 1 se reserva para sustrato y saltamos + contamedia = 1 + if ((this%pmcregs%nvols)+(this%pmcregs%nsurfs)+(this%pmcregs%nLINS) /= 0) then + !los PMC empiezan en 2 + contamedia = 2 + !fin regions PMC + end if + !materialList + !NonMetalREgions and frequencydependent media + !Anisotropic + ! + contamedia = contamedia + (this%DielRegs%nvols) + (this%DielRegs%nsurfs) + (this%DielRegs%nLINS) + this%FRQDEPMATS%nvols + & + & this%FRQDEPMATS%nsurfs + this%FRQDEPMATS%nLINS + (this%ANIMATS%nvols+this%ANIMATS%nsurfs+this%ANIMATS%nLINS) + !Multiports + !worst case 6 orientations per surface plus the the lossy padding + contamedia = contamedia + this%LossyThinSurfs%length * 7 + !wires + !nueva formulacion que almacena also the lenghts + contamedia = contamedia + this%twires%n_tw + contamedia = contamedia + this%swires%n_sw + !echo por demas, habria que precontar pero es complicado porque depende del procesamiento + !thin Slots + + if (run_with_dmma) then + do j = 1, this%tSlots%n_tg + contamedia = contamedia + this%tSlots%Tg(j)%N_tgc + end do + end if + + !end thin Slots + !PARA LA CAPA EXTRA 2013 + if (medioextra%exists) then + CONTAMEDIA = CONTAMEDIA+1 + MEDIOEXTRA%index=CONTAMEDIA + end if + !para modulos que necesiten senialar con already_YEEadvanced_byconformal y split_and_useless (eg. conformal) + !se crea siempre por defecto + contamedia = contamedia+2 !para acomodar los no_use no_use_notouch + !!!!!!!!!!!!! + contamedia = contamedia +1 !para acomodar los nodal sources como caso especial de linea vacia + + + call getDifferentEdgeRatios(edge_ratios, conformal_volumes) + call getDifferentEdgeRatios(edge_ratios, conformal_surfaces) + call getDifferentFaceRatios(face_ratios, conformal_volumes) + call getDifferentFaceRatios(face_ratios, conformal_surfaces) + ! edge_ratios = getDifferentEdgeRatios(conformal_volumes) + ! face_ratios = getDifferentFaceRatios(conformal_volumes) + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 +#ifdef CompileWithMTLN + contamedia = contamedia + this%mtln%n_unsh +#endif + ! Surface updates need media distinct from volume updates even when their + ! geometric ratios are equal. + if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + end if + + sgg%NumMedia = contamedia + sgg%AllocMed = contamedia + !reserva espacio + allocate(sgg%Med(0:sgg%NumMedia)) + !comienzo barrido resto : medios y observaciones + BoundingBox%XI = sgg%Alloc(iHx)%XI + BoundingBox%XE = sgg%Alloc(iHx)%XE + BoundingBox%YI = sgg%Alloc(iHy)%YI + BoundingBox%YE = sgg%Alloc(iHy)%YE + BoundingBox%ZI = sgg%Alloc(iHz)%ZI + BoundingBox%ZE = sgg%Alloc(iHz)%ZE + ! + Alloc_iEx_XI = sgg%Alloc(iEx)%XI + Alloc_iEx_XE = sgg%Alloc(iEx)%XE + Alloc_iEx_YI = sgg%Alloc(iEx)%YI + Alloc_iEx_YE = sgg%Alloc(iEx)%YE + Alloc_iEx_ZI = sgg%Alloc(iEx)%ZI + Alloc_iEx_ZE = sgg%Alloc(iEx)%ZE + Alloc_iEy_XI = sgg%Alloc(iEy)%XI + Alloc_iEy_XE = sgg%Alloc(iEy)%XE + Alloc_iEy_YI = sgg%Alloc(iEy)%YI + Alloc_iEy_YE = sgg%Alloc(iEy)%YE + Alloc_iEy_ZI = sgg%Alloc(iEy)%ZI + Alloc_iEy_ZE = sgg%Alloc(iEy)%ZE + Alloc_iEz_XI = sgg%Alloc(iEz)%XI + Alloc_iEz_XE = sgg%Alloc(iEz)%XE + Alloc_iEz_YI = sgg%Alloc(iEz)%YI + Alloc_iEz_YE = sgg%Alloc(iEz)%YE + Alloc_iEz_ZI = sgg%Alloc(iEz)%ZI + Alloc_iEz_ZE = sgg%Alloc(iEz)%ZE + Alloc_iHx_XI = sgg%Alloc(iHx)%XI + Alloc_iHx_XE = sgg%Alloc(iHx)%XE + Alloc_iHx_YI = sgg%Alloc(iHx)%YI + Alloc_iHx_YE = sgg%Alloc(iHx)%YE + Alloc_iHx_ZI = sgg%Alloc(iHx)%ZI + Alloc_iHx_ZE = sgg%Alloc(iHx)%ZE + Alloc_iHy_XI = sgg%Alloc(iHy)%XI + Alloc_iHy_XE = sgg%Alloc(iHy)%XE + Alloc_iHy_YI = sgg%Alloc(iHy)%YI + Alloc_iHy_YE = sgg%Alloc(iHy)%YE + Alloc_iHy_ZI = sgg%Alloc(iHy)%ZI + Alloc_iHy_ZE = sgg%Alloc(iHy)%ZE + Alloc_iHz_XI = sgg%Alloc(iHz)%XI + Alloc_iHz_XE = sgg%Alloc(iHz)%XE + Alloc_iHz_YI = sgg%Alloc(iHz)%YI + Alloc_iHz_YE = sgg%Alloc(iHz)%YE + Alloc_iHz_ZI = sgg%Alloc(iHz)%ZI + Alloc_iHz_ZE = sgg%Alloc(iHz)%ZE + ! + ! + field = 1 + ! + numertag = 0 + allocate(media%sggMtag(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) + allocate(media%sggMiNo(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) + + allocate(tag_numbers%edge%x(Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE)) + allocate(tag_numbers%edge%y(Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE)) + allocate(tag_numbers%edge%z(Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE)) + allocate(tag_numbers%face%x(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE)) + allocate(tag_numbers%face%y(Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE)) + allocate(tag_numbers%face%z(Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) + + !!!nodos materiales: se precisan para el conformal !sgg310715 + allocate(media%sggMiEx(Alloc_iEx_XI:Alloc_iEx_XE, Alloc_iEx_YI:Alloc_iEx_YE, Alloc_iEx_ZI:Alloc_iEx_ZE)) + allocate(media%sggMiEy(Alloc_iEy_XI:Alloc_iEy_XE, Alloc_iEy_YI:Alloc_iEy_YE, Alloc_iEy_ZI:Alloc_iEy_ZE)) + allocate(media%sggMiEz(Alloc_iEz_XI:Alloc_iEz_XE, Alloc_iEz_YI:Alloc_iEz_YE, Alloc_iEz_ZI:Alloc_iEz_ZE)) + allocate(media%sggMiHx(Alloc_iHx_XI:Alloc_iHx_XE, Alloc_iHx_YI:Alloc_iHx_YE, Alloc_iHx_ZI:Alloc_iHx_ZE)) + allocate(media%sggMiHy(Alloc_iHy_XI:Alloc_iHy_XE, Alloc_iHy_YI:Alloc_iHy_YE, Alloc_iHy_ZI:Alloc_iHy_ZE)) + allocate(media%sggMiHz(Alloc_iHz_XI:Alloc_iHz_XE, Alloc_iHz_YI:Alloc_iHz_YE, Alloc_iHz_ZI:Alloc_iHz_ZE)) + + + !el tag esta voided porque luego el numero va con el del tag + media%sggMtag (:, :, :) = 0 !LO VOIDEO A 0 EN VEZ DE A -1 PORQUE EL TAG 0 NO VA A EXISTIR NUNCA 141020 + tag_numbers%edge%x(:,:,:) = 0 + tag_numbers%edge%y(:,:,:) = 0 + tag_numbers%edge%z(:,:,:) = 0 + tag_numbers%face%x(:,:,:) = 0 + tag_numbers%face%y(:,:,:) = 0 + tag_numbers%face%z(:,:,:) = 0 + !todo sustrato por defecto + media%sggMiNo (:, :, :) = 1 + media%sggMiEx (:, :, :) = 1 + media%sggMiEy (:, :, :) = 1 + media%sggMiEz (:, :, :) = 1 + media%sggMiHx (:, :, :) = 1 + media%sggMiHy (:, :, :) = 1 + media%sggMiHz (:, :, :) = 1 + + + !planeWaves + ! + tama = (this%plnSrc%nc) +!!! write(buff,*) 'More than 1 Huygens box unsupported' +!!! IF (tama > 1) CALL STOPONERROR(layoutnumber,size,buff) + !LO PONGO A MANO ojo + amplitud = 1.0_RKIND + sgg%NumPlaneWaves = tama + allocate(sgg%PlaneWave(1:sgg%NumPlaneWaves)) + do i = 1, sgg%NumPlaneWaves + punto%XI = Min (this%plnSrc%collection(i)%coor1(1), this%plnSrc%collection(i)%coor2(1)) + punto%XE = Max (this%plnSrc%collection(i)%coor1(1), this%plnSrc%collection(i)%coor2(1)) + punto%YI = Min (this%plnSrc%collection(i)%coor1(2), this%plnSrc%collection(i)%coor2(2)) + punto%YE = Max (this%plnSrc%collection(i)%coor1(2), this%plnSrc%collection(i)%coor2(2)) + punto%ZI = Min (this%plnSrc%collection(i)%coor1(3), this%plnSrc%collection(i)%coor2(3)) + punto%ZE = Max (this%plnSrc%collection(i)%coor1(3), this%plnSrc%collection(i)%coor2(3)) + !just for the sake of peace of my mind + !readjust Huygens surface CLEARLY in/out in case of coincidente + if ((punto%XI == SINPML_fullsize(iHx)%XI)) then + punto%XI = SINPML_fullsize(iHx)%XI - 5 + end if + if ((punto%XE == SINPML_fullsize(iHx)%XE)) then + punto%XE = SINPML_fullsize(iHx)%XE + 5 + end if + if ((punto%YI == SINPML_fullsize(iHy)%YI)) then + punto%YI = SINPML_fullsize(iHy)%YI - 5 + end if + if ((punto%YE == SINPML_fullsize(iHy)%YE)) then + punto%YE = SINPML_fullsize(iHy)%YE + 5 + end if + if ((punto%ZI == SINPML_fullsize(iHz)%ZI)) then + punto%ZI = SINPML_fullsize(iHz)%ZI - 5 + end if + if ((punto%ZE == SINPML_fullsize(iHz)%ZE)) then + punto%ZE = SINPML_fullsize(iHz)%ZE + 5 + end if + ! + sgg%PlaneWave(i)%isRC = this%plnSrc%collection(i)%isRC + sgg%PlaneWave(i)%numModes= this%plnSrc%collection(i)%numModes + sgg%PlaneWave(i)%incertmax= this%plnSrc%collection(i)%incertmax + if (sgg%PlaneWave(i)%isRC) then + allocate (sgg%PlaneWave(i)%px(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%py(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%pz(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%ex(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%ey(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%ez(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%INCERT(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_px(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_py(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_pz(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_ex(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_ey(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_ez(1:sgg%PlaneWave(i)%numModes)) + allocate (dummy_INCERT(1:sgg%PlaneWave(i)%numModes)) + sgg%PlaneWave(i)%px=0.0 + sgg%PlaneWave(i)%py=0.0 + sgg%PlaneWave(i)%pz=0.0 + sgg%PlaneWave(i)%ex=0.0 + sgg%PlaneWave(i)%ey=0.0 + sgg%PlaneWave(i)%ez=0.0 + sgg%PlaneWave(i)%INCERT=0.0 + if (layoutnumber==0) call populatePlaneWaveRC(sgg%PlaneWave(i),simu_devia) !only the master populates +#ifdef CompileWithMPI + call MPI_BARRIER(MPI_COMM_WORLD,ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%px, dummy_px, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%py, dummy_py, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%pz, dummy_pz, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%ex, dummy_ex, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%ey, dummy_ey, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%ez, dummy_ez, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( sgg%PlaneWave(i)%INCERT, dummy_INCERT, sgg%PlaneWave(i)%numModes, REALSIZE, MPI_SUM, MPI_COMM_WORLD, ierr) + call MPI_BARRIER(MPI_COMM_WORLD,ierr) + sgg%PlaneWave(i)%px=dummy_px + sgg%PlaneWave(i)%py=dummy_py + sgg%PlaneWave(i)%pz=dummy_pz + sgg%PlaneWave(i)%ex=dummy_ex + sgg%PlaneWave(i)%ey=dummy_ey + sgg%PlaneWave(i)%ez=dummy_ez + sgg%PlaneWave(i)%INCERT=dummy_INCERT +#endif + deallocate(dummy_px) + deallocate(dummy_py) + deallocate(dummy_pz) + deallocate(dummy_ex) + deallocate(dummy_ey) + deallocate(dummy_ez) + deallocate(dummy_INCERT) + else + sgg%PlaneWave(i)%numModes=1 + allocate (sgg%PlaneWave(i)%px(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%py(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%pz(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%ex(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%ey(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%ez(1:sgg%PlaneWave(i)%numModes)) + allocate (sgg%PlaneWave(i)%INCERT(1:sgg%PlaneWave(i)%numModes)) + ! + ez = amplitud * Cos (this%plnSrc%collection(i)%alpha) + ey = amplitud * Sin (this%plnSrc%collection(i)%alpha) * Sin (this%plnSrc%collection(i)%beta) + ex = amplitud * Sin (this%plnSrc%collection(i)%alpha) * Cos (this%plnSrc%collection(i)%beta) + pz = Cos (this%plnSrc%collection(i)%theta) + py = Sin (this%plnSrc%collection(i)%theta) * Sin (this%plnSrc%collection(i)%phi) + px = Sin (this%plnSrc%collection(i)%theta) * Cos (this%plnSrc%collection(i)%phi) + !ojo con estos redondeos. + !!!if (Abs(ex/amplitud) < 1e-4) ex = 0.0_RKIND + !!!if (Abs(ey/amplitud) < 1e-4) ey = 0.0_RKIND + !!!if (Abs(ez/amplitud) < 1e-4) ez = 0.0_RKIND + !!!if (Abs(px) < 1e-4) px = 0.0_RKIND + !!!if (Abs(py) < 1e-4) py = 0.0_RKIND + !!!if (Abs(pz) < 1e-4) pz = 0.0_RKIND + if (Abs(px*ex+py*ey+pz*ez) >= 1e-4) then + write(buff,*) 'NO TEM PLANEWAVE',ex,ey,ez,px,py,pz,(px*ex+py*ey+pz*ez),this%plnSrc%collection(i)%alpha, & + this%plnSrc%collection(i)%beta,this%plnSrc%collection(i)%theta,this%plnSrc%collection(i)%phi + CALL STOPONERROR(layoutnumber,size,buff) + end if + ! + sgg%PlaneWave(i)%px(1) = px + sgg%PlaneWave(i)%py(1) = py + sgg%PlaneWave(i)%pz(1) = pz + sgg%PlaneWave(i)%ex(1) = ex + sgg%PlaneWave(i)%ey(1) = ey + sgg%PlaneWave(i)%ez(1) = ez + sgg%PlaneWave(i)%INCERT(1)=0.0_RKIND + end if + sgg%PlaneWave(i)%fichero%name = trim (adjustl(this%plnSrc%collection(i)%nombre_fichero)) + sgg%PlaneWave(i)%esqx1 = Min (punto%XI, punto%XE) + sgg%PlaneWave(i)%esqy1 = Min (punto%YI, punto%YE) + sgg%PlaneWave(i)%esqz1 = Min (punto%ZI, punto%ZE) + sgg%PlaneWave(i)%esqx2 = Max (punto%XI, punto%XE) + sgg%PlaneWave(i)%esqy2 = Max (punto%YI, punto%YE) + sgg%PlaneWave(i)%esqz2 = Max (punto%ZI, punto%ZE) + end do + !Media parsing + !Default + !background + sgg%Med%Priority = prior_BV + sgg%Med%Epr = 1.0 + sgg%Med%Sigma = 0.0 + sgg%Med%Sigmareasignado = .false. !solo afecta a un chequeo de errores en lumped 120123 + sgg%Med%Mur = 1.0 + sgg%Med%SigmaM = 0.0 + sgg%Med%Is%Interfase = .FALSE. + sgg%Med%Is%PMLbody = .false. + sgg%Med%Is%Needed = .TRUE. + sgg%Med%Is%Anisotropic = .FALSE. + sgg%Med%Is%Dielectric = .FALSE. + sgg%Med%Is%EDispersive = .FALSE. + sgg%Med%Is%EDispersiveAnis = .FALSE. + sgg%Med%Is%MDispersive = .FALSE. + sgg%Med%Is%MDispersiveAnis = .FALSE. + sgg%Med%Is%Lumped = .FALSE. + sgg%Med%Is%SGBC = .FALSE. + sgg%Med%Is%SGBCDispersive = .FALSE. + sgg%Med%Is%Lossy = .FALSE. + sgg%Med%Is%multiport = .FALSE. + sgg%Med%Is%multiportpadding = .FALSE. + sgg%Med%Is%AnisMultiport = .FALSE. + sgg%Med%Is%ThinWire = .FALSE. + sgg%Med%Is%Multiwire = .FALSE. + sgg%Med%Is%SlantedWire = .FALSE. + sgg%Med%Is%ThinSlot = .FALSE. + sgg%Med%Is%PEC = .FALSE. + sgg%Med%Is%ConformalPEC = .FALSE. + sgg%Med%Is%PMC = .FALSE. + sgg%Med%Is%PML = .FALSE. + sgg%Med%Is%Volume = .FALSE. + sgg%Med%Is%Surface = .FALSE. + sgg%Med%Is%Line = .FALSE. + sgg%Med%Is%already_YEEadvanced_byconformal = .FALSE. + sgg%Med%Is%split_and_useless = .FALSE. + !ojo tocar tambien en el readjust de healing si se crean nuevos flags + ! + !medio PEC y PML es intrascendente si es surface o volume + !son los de prioridad mas alta y siempre contienen a sus campos tangenciales electricos + !Background only differences from default are needed + sgg%Med(1)%Priority = prior_BV + sgg%Med(1)%Epr = this%mats%mats(1)%eps / Eps0 + sgg%Med(1)%Sigma = this%mats%mats(1)%Sigma + sgg%Med(1)%Mur = this%mats%mats(1)%mu / Mu0 + sgg%Med(1)%SigmaM = this%mats%mats(1)%SigmaM + sgg%Med(1)%Is%Dielectric = .false. !considero el vacio como NO dielectrico '251114 + sgg%Med(1)%Is%Volume = .false. !considero el vacio como no volumic false '251114 + ! + sgg%Med(0)%Is%PEC = .TRUE. + sgg%Med(0)%Is%Needed = .TRUE. + sgg%Med(0)%Priority = prior_PEC + sgg%Med(0)%Epr = this%mats%mats(1)%eps / Eps0 + sgg%Med(0)%Sigma = 1.0e29_RKIND + sgg%Med(0)%Mur = this%mats%mats(1)%mu / Mu0 + sgg%Med(0)%SigmaM = 0.0_RKIND + !CAPA EXTRA + !Background only differences from default are needed + + if (medioextra%exists) then + !!!!estimate in terms of percentage of the maximum PML conductivity the conductivity of the extra medium + !!!This info is available from read_limits_nogeom + !the calculus is taken from borderscpml.F90 + sig_max=0.0_RKIND + do o=1,3 + do p=1,2 + if ((o == 1).and.(p == 1)) del=sgg%dx(SINPML_fullsize(iHx)%XI) + if ((o == 1).and.(p == 2)) del=sgg%dx(SINPML_fullsize(iHx)%XE-1) + if ((o == 2).and.(p == 1)) del=sgg%dy(SINPML_fullsize(iHy)%YI) + if ((o == 2).and.(p == 2)) del=sgg%dy(SINPML_fullsize(iHy)%YE-1) + if ((o == 3).and.(p == 1)) del=sgg%dz(SINPML_fullsize(iHz)%ZI) + if ((o == 3).and.(p == 2)) del=sgg%dz(SINPML_fullsize(iHz)%ZE-1) + if (sgg%PML%NumLayers(o,p) /= 0) then + if ((sgg%PML%NumLayers(o,p) == 10).or.(sgg%PML%NumLayers(o,p) == 5)) then + sig_max = max( sig_max , 0.8*(sgg%PML%orden(o,p)+1)/(zvac*del)) + else + if (sgg%PML%CoeffReflPML(o,p)==1.0_RKIND) then + !realmente en el borderscpml + !sig_max(sig_max,-((log( 0.99999d0 )*(sgg%PML%orden(o,p)+1))/ & + ! (2.0_RKIND *sqrt(Mu0/eps0)*sgg%PML%NumLayers(o,p)*del))) + !trampa para que entonces tome la conductividad autentica que se especifique y poder anular las PML y solo dejar capa fisica !!?!? + sig_max = 1.0_RKIND + else + sig_max = max(sig_max,-((log( sgg%PML%CoeffReflPML(o,p) )*(sgg%PML%orden(o,p)+1))/ & + (2.0_RKIND *sqrt(Mu0/eps0)*sgg%PML%NumLayers(o,p)*del))) + end if + end if + end if + end do + end do + MEDIOEXTRA%sigma = MEDIOEXTRA%sigma * sig_max !la especificacion se da en terminos de tanto por uno en la linea de comandos + ! + sgg%Med(MEDIOEXTRA%index)%Epr = this%mats%mats(1)%eps / Eps0 !luego se machaca este valor + sgg%Med(MEDIOEXTRA%index)%Sigma = MEDIOEXTRA%sigma !luego se machaca este valor + sgg%Med(MEDIOEXTRA%index)%Mur = this%mats%mats(1)%mu / Mu0 !luego se machaca este valor + sgg%Med(MEDIOEXTRA%index)%SigmaM = 0.0_RKIND !solo lo creo para las tangenciales electricas + sgg%Med(MEDIOEXTRA%index)%Priority = prior_PEC + sgg%Med(MEDIOEXTRA%index)%Is%Dielectric = .TRUE. + sgg%Med(MEDIOEXTRA%index)%Is%Volume = .TRUE. + sgg%Med(MEDIOEXTRA%index)%Is%PML = .TRUE. + end if + ! + !barre los medios + !Primero todos los pec + !PECRegions + !volumenes + !el medio 0 se reserva para PEC + !regiones PEC + ! + if ((this%pecregs%nvols)+(this%pecregs%nsurfs)+(this%pecregs%nLINS) /= 0) then + pecmedio = 0 + tama = (this%pecregs%nvols) + !BODYes + do i = 1, tama + punto%XI = this%pecregs%vols(i)%XI + punto%XE = this%pecregs%vols(i)%XE + punto%YI = this%pecregs%vols(i)%YI + punto%YE = this%pecregs%vols(i)%YE + punto%ZI = this%pecregs%vols(i)%ZI + punto%ZE = this%pecregs%vols(i)%ZE + numertag = searchtag(tagtype,this%pecregs%vols(i)%tag ) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, pecmedio) + end do + !SURFs + tama = (this%pecregs%nsurfs) + do i = 1, tama + punto%XI = this%pecregs%surfs(i)%XI + punto%XE = this%pecregs%surfs(i)%XE + punto%YI = this%pecregs%surfs(i)%YI + punto%YE = this%pecregs%surfs(i)%YE + punto%ZI = this%pecregs%surfs(i)%ZI + punto%ZE = this%pecregs%surfs(i)%ZE + orientacion = this%pecregs%surfs(i)%or + numertag = searchtag(tagtype,this%pecregs%surfs(i)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + & Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, & + & Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & + & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, & + & Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, & + & Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, & + & Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, & + & sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, pecmedio) + end do + !LINs + tama = (this%pecregs%nLINS) + do i = 1, tama + punto%XI = this%pecregs%lins(i)%XI + punto%XE = this%pecregs%lins(i)%XE + punto%YI = this%pecregs%lins(i)%YI + punto%YE = this%pecregs%lins(i)%YE + punto%ZI = this%pecregs%lins(i)%ZI + punto%ZE = this%pecregs%lins(i)%ZE + orientacion = this%pecregs%lins(i)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%pecregs%lins(i)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & pecmedio, isathinwire, verbose,numeroasignaciones) + end do + !regiones PEC + end if + + !el medio 1 se reserva para sustrato y saltamos + contamedia = 1 + + !para el conformal !debe ser tipicamente contamedia =1+1=2 pq el 0 es pec y el 1 es vacio. Ojo cambiado de sitio el PMC porque podia hacer que fuesen 3 y 4. 130220!!! y puede haber error pq por ahi se comprueba el 2 y el 3 + contamedia = contamedia + 1 + sgg%Med(contamedia)%Is%already_YEEadvanced_byconformal = .TRUE. + !debe ser contamedia =2+1=3 + contamedia = contamedia + 1 + sgg%Med(contamedia)%Is%split_and_useless = .TRUE. + +!!!!cambiado aqui 130220 + + !materialList + !regiones PMC + if ((this%pmcregs%nvols)+(this%pmcregs%nsurfs)+(this%pmcregs%nLINS) /= 0) then + !los PMC de existir tienen todos indice 2 + contamedia =contamedia+1 !!!!contamedia = 2 !!!ufff. cambiado a 130220 por posible bug con conformal si algun dia habia regiones PMC + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr + sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur + sgg%Med(contamedia)%Sigma = 0.0_RKIND + sgg%Med(contamedia)%SigmaM = 1.0e29_RKIND + sgg%Med(contamedia)%Priority = prior_PMC + sgg%Med(contamedia)%Is%PMC = .TRUE. + !BODYes + tama = (this%pmcregs%nvols) + do i = 1, tama + punto%XI = this%pmcregs%vols(i)%XI + punto%XE = this%pmcregs%vols(i)%XE + punto%YI = this%pmcregs%vols(i)%YI + punto%YE = this%pmcregs%vols(i)%YE + punto%ZI = this%pmcregs%vols(i)%ZI + punto%ZE = this%pmcregs%vols(i)%ZE + ! + ! + numertag = searchtag(tagtype,this%pmcregs%vols(i)%tag) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) + end do + !SURFs + tama = (this%pmcregs%nsurfs) + do i = 1, tama + punto%XI = this%pmcregs%surfs(i)%XI + punto%XE = this%pmcregs%surfs(i)%XE + punto%YI = this%pmcregs%surfs(i)%YI + punto%YE = this%pmcregs%surfs(i)%YE + punto%ZI = this%pmcregs%surfs(i)%ZI + punto%ZE = this%pmcregs%surfs(i)%ZE + orientacion = this%pmcregs%surfs(i)%or + numertag = searchtag(tagtype,this%pmcregs%surfs(i)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + !LINs + tama = (this%pmcregs%nLINS) + do i = 1, tama + punto%XI = this%pmcregs%lins(i)%XI + punto%XE = this%pmcregs%lins(i)%XE + punto%YI = this%pmcregs%lins(i)%YI + punto%YE = this%pmcregs%lins(i)%YE + punto%ZI = this%pmcregs%lins(i)%ZI + punto%ZE = this%pmcregs%lins(i)%ZE + orientacion = this%pmcregs%lins(i)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%pmcregs%lins(i)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + ! + end do + !fin regions PMC + end if +!!!!fin cambiado 130220 + + !NonMetalREgions + !BODYes + tama = (this%DielRegs%nvols) + do i = 1, tama + contamedia = contamedia + 1 + sgg%Med(contamedia)%Is%Dielectric = .TRUE. + sgg%Med(contamedia)%Priority = prior_IB + sgg%Med(contamedia)%Epr = this%DielRegs%vols(i)%eps / Eps0 + sgg%Med(contamedia)%Sigma = this%DielRegs%vols(i)%Sigma + sgg%Med(contamedia)%Mur = this%DielRegs%vols(i)%mu / Mu0 + sgg%Med(contamedia)%SigmaM = this%DielRegs%vols(i)%SigmaM +!!!!pmlbody + if (this%DielRegs%vols(i)%PMLbody) then + sgg%Med(contamedia)%Priority = prior_pmlbody !machaca con una prioridad superior a la de thin wires y backgroud !prueba HOLD 251019 coax + sgg%Med(contamedia)%Is%PMLbody = .true. + allocate(sgg%Med(contamedia)%PMLbody(1)) + sgg%Med(contamedia)%PMLbody(1)%orient = this%DielRegs%vols(i)%orient + end if +!!!!! + tama2 = (this%DielRegs%vols(i)%n_c2P) + do j = 1, tama2 + if ((J==1).and.(this%DielRegs%vols(i)%PMLbody)) sgg%Med(contamedia)%PMLbody(1)%orient = this%DielRegs%vols(i)%c2P(j)%OR !ES IGUAL PARA TODOS + punto%XI = this%DielRegs%vols(i)%c2P(j)%XI + punto%XE = this%DielRegs%vols(i)%c2P(j)%XE + punto%YI = this%DielRegs%vols(i)%c2P(j)%YI + punto%YE = this%DielRegs%vols(i)%c2P(j)%YE + punto%ZI = this%DielRegs%vols(i)%c2P(j)%ZI + punto%ZE = this%DielRegs%vols(i)%c2P(j)%ZE + numertag = searchtag(tagtype,this%DielRegs%vols(i)%c2P(j)%tag) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) + end do + tama3 = (this%DielRegs%vols(i)%n_c1P) + do j = 1, tama3 + if ((J==1).and.(this%DielRegs%vols(i)%PMLbody)) sgg%Med(contamedia)%PMLbody(1)%orient = this%DielRegs%vols(i)%c1P(j)%OR !ES IGUAL PARA TODOS + punto%XI = this%DielRegs%vols(i)%c1P(j)%XI + punto%XE = this%DielRegs%vols(i)%c1P(j)%XI + punto%YI = this%DielRegs%vols(i)%c1P(j)%YI + punto%YE = this%DielRegs%vols(i)%c1P(j)%YI + punto%ZI = this%DielRegs%vols(i)%c1P(j)%ZI + punto%ZE = this%DielRegs%vols(i)%c1P(j)%ZI + ! + numertag = searchtag(tagtype,this%DielRegs%vols(i)%c1P(j)%tag) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) + end do + end do + !SURFs + tama = (this%DielRegs%nsurfs) + do i = 1, tama + contamedia = contamedia + 1 + sgg%Med(contamedia)%Is%Dielectric = .TRUE. + sgg%Med(contamedia)%Priority = prior_IS + sgg%Med(contamedia)%Epr = this%DielRegs%surfs(i)%eps / Eps0 + sgg%Med(contamedia)%Sigma = this%DielRegs%surfs(i)%Sigma + sgg%Med(contamedia)%Mur = this%DielRegs%surfs(i)%mu / Mu0 + sgg%Med(contamedia)%SigmaM = this%DielRegs%surfs(i)%SigmaM + tama2 = (this%DielRegs%surfs(i)%n_c2P) + do j = 1, tama2 + punto%XI = this%DielRegs%surfs(i)%c2P(j)%XI + punto%XE = this%DielRegs%surfs(i)%c2P(j)%XE + punto%YI = this%DielRegs%surfs(i)%c2P(j)%YI + punto%YE = this%DielRegs%surfs(i)%c2P(j)%YE + punto%ZI = this%DielRegs%surfs(i)%c2P(j)%ZI + punto%ZE = this%DielRegs%surfs(i)%c2P(j)%ZE + orientacion = this%DielRegs%surfs(i)%c2P(j)%or + numertag = searchtag(tagtype,this%DielRegs%surfs(i)%c2P(j)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + tama3 = (this%DielRegs%surfs(i)%n_c1P) + + do j = 1, tama3 + punto%XI = this%DielRegs%surfs(i)%c1P(j)%XI + punto%XE = this%DielRegs%surfs(i)%c1P(j)%XI + punto%YI = this%DielRegs%surfs(i)%c1P(j)%YI + punto%YE = this%DielRegs%surfs(i)%c1P(j)%YI + punto%ZI = this%DielRegs%surfs(i)%c1P(j)%ZI + punto%ZE = this%DielRegs%surfs(i)%c1P(j)%ZI + orientacion = this%DielRegs%surfs(i)%c1P(j)%or + numertag = searchtag(tagtype,this%DielRegs%surfs(i)%c1P(j)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + end do + !LINs + tama = (this%DielRegs%nLINS) + do i = 1, tama + numeroasignaciones=0 !solo lo usa lumped para echarselo al primer y el resto ponerlo a PEC + contamedia = contamedia + 1 + sgg%Med(contamedia)%Is%Dielectric = .TRUE. + sgg%Med(contamedia)%Priority = prior_IL + sgg%Med(contamedia)%Epr = this%DielRegs%lins(i)%eps / Eps0 + sgg%Med(contamedia)%Sigma = this%DielRegs%lins(i)%Sigma + sgg%Med(contamedia)%Mur = this%DielRegs%lins(i)%mu / Mu0 + sgg%Med(contamedia)%SigmaM = this%DielRegs%lins(i)%SigmaM +!!!!lumped + if (this%DielRegs%lins(i)%resistor) then + sgg%Med(contamedia)%Is%Lumped = .true. + sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug + allocate(sgg%Med(contamedia)%lumped(1)) + sgg%Med(contamedia)%lumped(1)%resistor =.true. + sgg%Med(contamedia)%lumped(1)%inductor =.false. + sgg%Med(contamedia)%lumped(1)%capacitor=.false. + sgg%Med(contamedia)%lumped(1)%diodo =.false. + sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R + sgg%Med(contamedia)%lumped(1)%L = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%C = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%R_devia = this%DielRegs%lins(i)%R_devia + sgg%Med(contamedia)%lumped(1)%L_devia = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%C_devia = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%Rtime_on = this%DielRegs%lins(i)%Rtime_on + sgg%Med(contamedia)%lumped(1)%Rtime_off = this%DielRegs%lins(i)%Rtime_off + sgg%Med(contamedia)%lumped(1)%DiodB = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%DiodIsat = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri + elseif (this%DielRegs%lins(i)%inductor) then + sgg%Med(contamedia)%Is%Lumped = .true. + sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug + allocate(sgg%Med(contamedia)%lumped(1)) + sgg%Med(contamedia)%lumped(1)%resistor =.false. + sgg%Med(contamedia)%lumped(1)%inductor =.true. + sgg%Med(contamedia)%lumped(1)%capacitor=.false. + sgg%Med(contamedia)%lumped(1)%diodo =.false. + sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R + sgg%Med(contamedia)%lumped(1)%L = this%DielRegs%lins(i)%L + sgg%Med(contamedia)%lumped(1)%C = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%R_devia = this%DielRegs%lins(i)%R_devia + sgg%Med(contamedia)%lumped(1)%L_devia = this%DielRegs%lins(i)%L_devia + sgg%Med(contamedia)%lumped(1)%C_devia = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%Rtime_on = 0.0 !irrelevant + sgg%Med(contamedia)%lumped(1)%Rtime_off = 0.0 !irrelevant + sgg%Med(contamedia)%lumped(1)%DiodB = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%DiodIsat = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri + elseif (this%DielRegs%lins(i)%capacitor) then + sgg%Med(contamedia)%Is%Lumped = .true. + sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug + allocate(sgg%Med(contamedia)%lumped(1)) + sgg%Med(contamedia)%lumped(1)%resistor =.false. + sgg%Med(contamedia)%lumped(1)%inductor =.false. + sgg%Med(contamedia)%lumped(1)%capacitor=.true. + sgg%Med(contamedia)%lumped(1)%diodo =.false. + sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R + sgg%Med(contamedia)%lumped(1)%L = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%C = this%DielRegs%lins(i)%C + sgg%Med(contamedia)%lumped(1)%R_devia = this%DielRegs%lins(i)%R_devia + sgg%Med(contamedia)%lumped(1)%L_devia = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%C_devia = this%DielRegs%lins(i)%C_devia + sgg%Med(contamedia)%lumped(1)%Rtime_on = 0.0 !irrelevant + sgg%Med(contamedia)%lumped(1)%Rtime_off = 0.0 !irrelevant + sgg%Med(contamedia)%lumped(1)%DiodB = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%DiodIsat = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri + elseif (this%DielRegs%lins(i)%diodo) then +!!!27/08/15 diodos aun no soportados + write(buff, '(a)') 'Lumped Diodes currently unsupported. .' + CALL STOPONERROR(layoutnumber,size,buff) +!!! + sgg%Med(contamedia)%Is%Lumped = .true. + sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug + allocate(sgg%Med(contamedia)%lumped(1)) + sgg%Med(contamedia)%lumped(1)%resistor =.false. + sgg%Med(contamedia)%lumped(1)%inductor =.false. + sgg%Med(contamedia)%lumped(1)%capacitor=.false. + sgg%Med(contamedia)%lumped(1)%diodo =.true. + sgg%Med(contamedia)%lumped(1)%R = this%DielRegs%lins(i)%R + sgg%Med(contamedia)%lumped(1)%Rtime_on = 0.0 !irrelevant + sgg%Med(contamedia)%lumped(1)%Rtime_off = 0.0 !irrelevant + sgg%Med(contamedia)%lumped(1)%L = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%C = 0.0_RKIND + sgg%Med(contamedia)%lumped(1)%DiodB = this%DielRegs%lins(i)%DiodB + sgg%Med(contamedia)%lumped(1)%DiodIsat = this%DielRegs%lins(i)%DiodIsat + sgg%Med(contamedia)%lumped(1)%orient = this%DielRegs%lins(i)%DiodOri + else + sgg%Med(contamedia)%Is%Lumped = .false. + if (.not. this%DielRegs%lins(i)%plain) then + write(buff, '(a)') 'Buggy error 1 in preprocess lumped. .' + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if +!!!fin lumped + tama2 = (this%DielRegs%lins(i)%n_c2P) + do j = 1, tama2 + punto%XI = this%DielRegs%lins(i)%c2P(j)%XI + punto%XE = this%DielRegs%lins(i)%c2P(j)%XE + punto%YI = this%DielRegs%lins(i)%c2P(j)%YI + punto%YE = this%DielRegs%lins(i)%c2P(j)%YE + punto%ZI = this%DielRegs%lins(i)%c2P(j)%ZI + punto%ZE = this%DielRegs%lins(i)%c2P(j)%ZE + orientacion = this%DielRegs%lins(i)%c2P(j)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%DielRegs%lins(i)%c2P(j)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + tama3 = (this%DielRegs%lins(i)%n_c1P) + do j = 1, tama3 + punto%XI = this%DielRegs%lins(i)%c1P(j)%XI + punto%XE = this%DielRegs%lins(i)%c1P(j)%XI + punto%YI = this%DielRegs%lins(i)%c1P(j)%YI + punto%YE = this%DielRegs%lins(i)%c1P(j)%YI + punto%ZI = this%DielRegs%lins(i)%c1P(j)%ZI + punto%ZE = this%DielRegs%lins(i)%c1P(j)%ZI + orientacion = this%DielRegs%lins(i)%c1P(j)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%DielRegs%lins(i)%c1P(j)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + end do + + + !Anisotropic materials + !materialList + !BODYes + tama = (this%ANIMATS%nvols) + do i = 1, tama + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%Anisotropic(1)) + sgg%Med(contamedia)%Is%Anisotropic = .TRUE. + sgg%Med(contamedia)%Priority = prior_AB + sgg%Med(contamedia)%Anisotropic(1)%Epr = this%ANIMATS%vols(i)%eps / Eps0 + sgg%Med(contamedia)%Anisotropic(1)%Sigma = this%ANIMATS%vols(i)%Sigma + sgg%Med(contamedia)%Anisotropic(1)%Mur = this%ANIMATS%vols(i)%mu / Mu0 + sgg%Med(contamedia)%Anisotropic(1)%SigmaM = this%ANIMATS%vols(i)%SigmaM + tama2 = (this%ANIMATS%vols(i)%n_c2P) + do j = 1, tama2 + punto%XI = this%ANIMATS%vols(i)%c2P(j)%XI + punto%XE = this%ANIMATS%vols(i)%c2P(j)%XE + punto%YI = this%ANIMATS%vols(i)%c2P(j)%YI + punto%YE = this%ANIMATS%vols(i)%c2P(j)%YE + punto%ZI = this%ANIMATS%vols(i)%c2P(j)%ZI + punto%ZE = this%ANIMATS%vols(i)%c2P(j)%ZE + numertag = searchtag(tagtype,this%ANIMATS%vols(i)%c2P(j)%tag) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) + end do + tama3 = (this%ANIMATS%vols(i)%n_c1P) + do j = 1, tama3 + punto%XI = this%ANIMATS%vols(i)%c1P(j)%XI + punto%XE = this%ANIMATS%vols(i)%c1P(j)%XI + punto%YI = this%ANIMATS%vols(i)%c1P(j)%YI + punto%YE = this%ANIMATS%vols(i)%c1P(j)%YI + punto%ZI = this%ANIMATS%vols(i)%c1P(j)%ZI + punto%ZE = this%ANIMATS%vols(i)%c1P(j)%ZI + ! + numertag = searchtag(tagtype,this%ANIMATS%vols(i)%c1P(j)%tag) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) + end do + end do + !SURFs + tama = (this%ANIMATS%nsurfs) + do i = 1, tama + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%Anisotropic(1)) + sgg%Med(contamedia)%Is%Anisotropic = .TRUE. + sgg%Med(contamedia)%Priority = prior_IS + sgg%Med(contamedia)%Anisotropic(1)%Epr = this%ANIMATS%surfs(i)%eps / Eps0 + sgg%Med(contamedia)%Anisotropic(1)%Sigma = this%ANIMATS%surfs(i)%Sigma + sgg%Med(contamedia)%Anisotropic(1)%Mur = this%ANIMATS%surfs(i)%mu / Mu0 + sgg%Med(contamedia)%Anisotropic(1)%SigmaM = this%ANIMATS%surfs(i)%SigmaM + tama2 = (this%ANIMATS%surfs(i)%n_c2P) + do j = 1, tama2 + punto%XI = this%ANIMATS%surfs(i)%c2P(j)%XI + punto%XE = this%ANIMATS%surfs(i)%c2P(j)%XE + punto%YI = this%ANIMATS%surfs(i)%c2P(j)%YI + punto%YE = this%ANIMATS%surfs(i)%c2P(j)%YE + punto%ZI = this%ANIMATS%surfs(i)%c2P(j)%ZI + punto%ZE = this%ANIMATS%surfs(i)%c2P(j)%ZE + orientacion = this%ANIMATS%surfs(i)%c2P(j)%or + numertag = searchtag(tagtype,this%ANIMATS%surfs(i)%c2P(j)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + tama3 = (this%ANIMATS%surfs(i)%n_c1P) + do j = 1, tama3 + punto%XI = this%ANIMATS%surfs(i)%c1P(j)%XI + punto%XE = this%ANIMATS%surfs(i)%c1P(j)%XI + punto%YI = this%ANIMATS%surfs(i)%c1P(j)%YI + punto%YE = this%ANIMATS%surfs(i)%c1P(j)%YI + punto%ZI = this%ANIMATS%surfs(i)%c1P(j)%ZI + punto%ZE = this%ANIMATS%surfs(i)%c1P(j)%ZI + orientacion = this%ANIMATS%surfs(i)%c1P(j)%or + numertag = searchtag(tagtype,this%ANIMATS%surfs(i)%c1P(j)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + end do + !LINs + tama = (this%ANIMATS%nLINS) + do i = 1, tama + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%Anisotropic(1)) + sgg%Med(contamedia)%Is%Anisotropic = .TRUE. + sgg%Med(contamedia)%Priority = prior_IL + sgg%Med(contamedia)%Anisotropic(1)%Epr = this%ANIMATS%lins(i)%eps / Eps0 + sgg%Med(contamedia)%Anisotropic(1)%Sigma = this%ANIMATS%lins(i)%Sigma + sgg%Med(contamedia)%Anisotropic(1)%Mur = this%ANIMATS%lins(i)%mu / Mu0 + sgg%Med(contamedia)%Anisotropic(1)%SigmaM = this%ANIMATS%lins(i)%SigmaM + tama2 = (this%ANIMATS%lins(i)%n_c2P) + do j = 1, tama2 + punto%XI = this%ANIMATS%lins(i)%c2P(j)%XI + punto%XE = this%ANIMATS%lins(i)%c2P(j)%XE + punto%YI = this%ANIMATS%lins(i)%c2P(j)%YI + punto%YE = this%ANIMATS%lins(i)%c2P(j)%YE + punto%ZI = this%ANIMATS%lins(i)%c2P(j)%ZI + punto%ZE = this%ANIMATS%lins(i)%c2P(j)%ZE + orientacion = this%ANIMATS%lins(i)%c2P(j)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%ANIMATS%lins(i)%c2P(j)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + tama3 = (this%ANIMATS%lins(i)%n_c1P) + do j = 1, tama3 + punto%XI = this%ANIMATS%lins(i)%c1P(j)%XI + punto%XE = this%ANIMATS%lins(i)%c1P(j)%XI + punto%YI = this%ANIMATS%lins(i)%c1P(j)%YI + punto%YE = this%ANIMATS%lins(i)%c1P(j)%YI + punto%ZI = this%ANIMATS%lins(i)%c1P(j)%ZI + punto%ZE = this%ANIMATS%lins(i)%c1P(j)%ZI + orientacion = this%ANIMATS%lins(i)%c1P(j)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%ANIMATS%lins(i)%c1P(j)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + end do + !frequency dependent materials + !bodies + ! + tama = this%FRQDEPMATS%nvols + do i = 1, tama + contamedia = contamedia + 1 + NULLIFY(fdgeom) + fdgeom=>this%FRQDEPMATS%vols(i) + call asignadisper(fdgeom) + !geometry + !!!!!!!!! + + tama2 = this%FRQDEPMATS%vols(i)%n_C + do j = 1, tama2 + punto%XI = this%FRQDEPMATS%vols(i)%C(j)%XI + punto%XE = this%FRQDEPMATS%vols(i)%C(j)%XE + punto%YI = this%FRQDEPMATS%vols(i)%C(j)%YI + punto%YE = this%FRQDEPMATS%vols(i)%C(j)%YE + punto%ZI = this%FRQDEPMATS%vols(i)%C(j)%ZI + punto%ZE = this%FRQDEPMATS%vols(i)%C(j)%ZE + numertag = searchtag(tagtype,this%FRQDEPMATS%vols(i)%C(j)%tag) + call CreateVolumeMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, contamedia) + end do + end do + + + !SURFs + tama = this%FRQDEPMATS%nsurfs + do i = 1, tama + contamedia = contamedia + 1 + NULLIFY(fdgeom) + fdgeom=>this%FRQDEPMATS%surfs(i) + call asignadisper(fdgeom) + + tama2 = this%FRQDEPMATS%surfs(i)%n_C + do j = 1, tama2 + punto%XI = this%FRQDEPMATS%surfs(i)%C(j)%XI + punto%XE = this%FRQDEPMATS%surfs(i)%C(j)%XE + punto%YI = this%FRQDEPMATS%surfs(i)%C(j)%YI + punto%YE = this%FRQDEPMATS%surfs(i)%C(j)%YE + punto%ZI = this%FRQDEPMATS%surfs(i)%C(j)%ZI + punto%ZE = this%FRQDEPMATS%surfs(i)%C(j)%ZE + orientacion = this%FRQDEPMATS%surfs(i)%C(j)%or + numertag = searchtag(tagtype,this%FRQDEPMATS%surfs(i)%C(j)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + end do + !LINs + tama = this%FRQDEPMATS%nLINS + do i = 1, tama + contamedia = contamedia + 1 + NULLIFY(fdgeom) + fdgeom=>this%FRQDEPMATS%lins(i) + call asignadisper(fdgeom) + + tama2 = this%FRQDEPMATS%lins(i)%n_C + do j = 1, tama2 + punto%XI = this%FRQDEPMATS%lins(i)%C(j)%XI + punto%XE = this%FRQDEPMATS%lins(i)%C(j)%XE + punto%YI = this%FRQDEPMATS%lins(i)%C(j)%YI + punto%YE = this%FRQDEPMATS%lins(i)%C(j)%YE + punto%ZI = this%FRQDEPMATS%lins(i)%C(j)%ZI + punto%ZE = this%FRQDEPMATS%lins(i)%C(j)%ZE + orientacion = this%FRQDEPMATS%lins(i)%C(j)%or + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%FRQDEPMATS%lins(i)%C(j)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + end do + ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !ISOTROPIC Multiports + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + inicontamedia = contamedia + 1 + maxcontamedia = contamedia + tama = this%LossyThinSurfs%length + do j = 1, tama + !carbon Multiports a guevo + if (this%LossyThinSurfs%cs(j)%numcapas==0) then + this%LossyThinSurfs%cs(j)%numcapas=1 + allocate(this%LossyThinSurfs%cs(j)%SigmaM(1)) + allocate(this%LossyThinSurfs%cs(j)%Sigma(1)) + allocate(this%LossyThinSurfs%cs(j)%EPS(1)) + allocate(this%LossyThinSurfs%cs(j)%MU(1)) + allocate(this%LossyThinSurfs%cs(j)%thk(1)) + + !_for_devia 090519 + allocate(this%LossyThinSurfs%cs(j)%SigmaM_devia(1)) + allocate(this%LossyThinSurfs%cs(j)%Sigma_devia(1)) + allocate(this%LossyThinSurfs%cs(j)%EPS_devia(1)) + allocate(this%LossyThinSurfs%cs(j)%MU_devia(1)) + allocate(this%LossyThinSurfs%cs(j)%thk_devia(1)) + !!! + + this%LossyThinSurfs%cs(J)%SigmaM(1)=0.0_RKIND !TRUCO PARA QUE CUANDO NO TENGA CAPAS (LECTURA DESDE FICHERO DE POLOS /RESIDUOS) NO PETE + this%LossyThinSurfs%cs(J)%Sigma(1)=0.0_RKIND + this%LossyThinSurfs%cs(J)%EPS(1)=EPS0 + this%LossyThinSurfs%cs(J)%MU(1)=MU0 + this%LossyThinSurfs%cs(J)%thk(1)=-1.0 + + !_for_devia 090519 + this%LossyThinSurfs%cs(J)%SigmaM_devia(1)=0.0_RKIND + this%LossyThinSurfs%cs(J)%Sigma_devia(1)=0.0_RKIND + this%LossyThinSurfs%cs(J)%EPS_devia(1)=0.0_RKIND + this%LossyThinSurfs%cs(J)%MU_devia(1)=0.0_RKIND + this%LossyThinSurfs%cs(J)%thk_devia(1)=0.0_RKIND + !!! + !!!comentado el 120219 pq no se lleva bien con Semba !no entiendo ahora el comentario de malonyedispersive!!!120219 + !!! write(buff, '(a)') 'pre1_Error: SGBC materials must have at least one layyer even in dummy for malonyedispersive' + !!! call WarnErrReport (buff,.true.) + end if + + + if (abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) <= 1.0e-2_RKIND ) then !!!ojoooo a 210319 manda guevos que tengamos que estar con el flag de la conductidad magnetica para llamar a SGBC todavia en 2015!!! + this%LossyThinSurfs%cs(j)%SigmaM = 0.0_RKIND + if (.not.mibc) then + !if (this%LossyThinSurfs%cs(j)%numcapas >1) then + ! write(buff, '(a)') 'pre1_Warning: SGBC materials are just averaged for multilayered structures.'// & + ! ' Use preferably -mibc instead.' + ! call WarnErrReport (buff) + !end if + SGBC=.true. !si la conductividad es 0.0_RKIND (o casi) utiliza directamente SGBC + mibc=.false. + end if + end if + if (this%LossyThinSurfs%cs(j)%SigmaM(1) >= 0.0_RKIND) then + !SURFs (siempre son surfs) + ! + tama2 = this%LossyThinSurfs%cs(j)%nc + mincontamedia = maxcontamedia + 1 + MultiportFile = trim (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' + do i = 1, tama2 + orientacion = this%LossyThinSurfs%cs(j)%C(i)%or + punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI + punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XE + punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI + punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YE + punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI + punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZE + existia = .FALSE. + doexis: do k = inicontamedia, maxcontamedia + if (trim(adjustl(sgg%Med(k)%multiport(1)%multiportFileZ11)) == trim(adjustl(MultiportFile))) then + if (sgg%Med(k)%multiport(1)%Multiportdir == orientacion) then + contamedia = k + existia = .TRUE. + EXIT doexis + end if + end if + end do doexis + + if ( .NOT. existia) then + maxcontamedia = maxcontamedia + 1 + contamedia = maxcontamedia + allocate(sgg%Med(contamedia)%multiport(1)) + ! + if ((this%LossyThinSurfs%cs(j)%numcapas >1).and.SGBCDispersive) then + write(buff, *) 'ERROR in SGBCs Number of layers >1 still unsupported for SGBCDispersive. ' + call StopOnError (0,0,buff) + end if + ! + allocate(sgg%Med(contamedia)%Multiport(1)%epr(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%mur(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%sigma(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%sigmam(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%width(1:this%LossyThinSurfs%cs(j)%numcapas)) + !_for_devia 090519 + allocate(sgg%Med(contamedia)%Multiport(1)%epr_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%mur_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%sigma_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%sigmaM_devia(1:this%LossyThinSurfs%cs(j)%numcapas), & + sgg%Med(contamedia)%Multiport(1)%width_devia(1:this%LossyThinSurfs%cs(j)%numcapas)) + !!! + puntoXI = Max (punto%XI, Min(BoundingBox%XI, BoundingBox%XE)) + puntoYI = Max (punto%YI, Min(BoundingBox%YI, BoundingBox%YE)) + puntoZI = Max (punto%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) + + !!!!!!!!estaba antes maaaal. bug 140815verano + if(.not.((puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE))) then + puntoXI= sgg%allocDxI + write(buff, *) 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)',puntoXI,puntoYI,puntoZI,sgg%allocDxI,sgg%allocDyI,sgg%allocDzI + call WarnErrReport (buff,.TRUE.) + end if + if(.not.((puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE))) then + puntoYI= sgg%allocDyI + write(buff, *) 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)',puntoXI,puntoYI,puntoZI,sgg%allocDxI,sgg%allocDyI,sgg%allocDzI + call WarnErrReport (buff,.TRUE.) + end if + if(.not.((puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE))) then + puntoZI= sgg%allocDzI + write(buff, *) 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)',puntoXI,puntoYI,puntoZI,sgg%allocDxI,sgg%allocDyI,sgg%allocDzI + call WarnErrReport (buff,.TRUE.) + end if + dentro = (puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE).and. & + (puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE).and. & + (puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE) + delta=-1.0_RKIND + if (DENTRO) then + select case (abs(this%LossyThinSurfs%cs(j)%C(i)%or)) + case (iEx) + delta=(sgg%DX(puntoXI)+sgg%DX(puntoXI-1))/2.0_RKIND + case (iEy) + delta=(sgg%DY(puntoYI)+sgg%Dy(puntoYI-1))/2.0_RKIND + case (iEz) + delta=(sgg%DZ(puntoZI)+sgg%Dz(puntoZI-1))/2.0_RKIND + case default + write(buff, '(a)') 'Buggy error 1 in preprocess composites. .' + CALL STOPONERROR(layoutnumber,size,buff) + end select + ELSE + write(buff, '(a)') 'Buggy error 2 in preprocess composites. .' + CALL STOPONERROR(layoutnumber,size,buff) + end if + sgg%Med(contamedia)%Multiport(1)%numcapas = this%LossyThinSurfs%cs(j)%numcapas + !el especificado + sgg%Med(contamedia)%Multiport(1)%Multiportdir = this%LossyThinSurfs%cs(j)%C(i)%or + do I_=1,sgg%Med(contamedia)%Multiport(1)%numcapas + if (sgg%Med(contamedia)%Multiport(1)%Multiportdir>0) then + j_=i_ + else + j_=sgg%Med(contamedia)%Multiport(1)%numcapas-i_+1 !dale la vuelta (medios no simetricos) !0121 + end if + sgg%Med(contamedia)%Multiport(1)%epr (j_) = this%LossyThinSurfs%cs(j)%eps (i_) / Eps0 + sgg%Med(contamedia)%Multiport(1)%mur (j_) = this%LossyThinSurfs%cs(j)%mu (i_) / mu0 + sgg%Med(contamedia)%Multiport(1)%sigma (j_) = this%LossyThinSurfs%cs(j)%Sigma (i_) + sgg%Med(contamedia)%Multiport(1)%sigmam (j_) = abs(this%LossyThinSurfs%cs(j)%Sigmam (i_) ) + sgg%Med(contamedia)%Multiport(1)%width (j_) = this%LossyThinSurfs%cs(j)%thk (i_) + + !_for_devia 090519 + sgg%Med(contamedia)%Multiport(1)%epr_devia (j_) = this%LossyThinSurfs%cs(j)%eps_devia (i_) / Eps0 + sgg%Med(contamedia)%Multiport(1)%mur_devia (j_) = this%LossyThinSurfs%cs(j)%MU_devia (i_) / mu0 + sgg%Med(contamedia)%Multiport(1)%sigma_devia (j_) = this%LossyThinSurfs%cs(j)%Sigma_devia (i_) + sgg%Med(contamedia)%Multiport(1)%sigmaM_devia(j_) = abs(this%LossyThinSurfs%cs(j)%SigmaM_devia (i_) ) + sgg%Med(contamedia)%Multiport(1)%width_devia (j_) = this%LossyThinSurfs%cs(j)%thk_devia (i_) + end do + + rdummy=maxval(abs(this%LossyThinSurfs%cs(j)%MU_devia))+maxval(abs(this%LossyThinSurfs%cs(j)%SigmaM_devia)) + if (rdummy>1.0e-15_RKIND) then + write(buff, '(a)') 'Non null deviations found in sigmam or mu in composites. Still unsupported.' + CALL STOPONERROR(layoutnumber,size,buff) + end if + + !!! + + +!!old pre 17/07/15 +!!! sgg%Med(contamedia)%Multiport(1)%transversalSpaceDelta=delta + sgg%Med(contamedia)%Priority = prior_CS + sgg%Med(contamedia)%Epr = this%LossyThinSurfs%cs(j)%eps(1) / Eps0 + sgg%Med(contamedia)%Sigma =this%LossyThinSurfs%cs(j)%Sigma(1) + sgg%Med(contamedia)%Mur = this%LossyThinSurfs%cs(j)%mu(1) / Mu0 + sgg%Med(contamedia)%SigmaM = abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) !may be negative + if (mibc) then + sgg%Med(contamedia)%Is%multiport = .TRUE. + sgg%Med(contamedia)%Is%Lossy = .true. + elseif (SGBC) then + sgg%Med(contamedia)%Is%SGBC = .TRUE. + sgg%Med(contamedia)%Is%Lossy = .true. + if (SGBCDispersive) sgg%Med(contamedia)%Is%SGBCDispersive = .TRUE. + else + write(buff, '(a)') 'Some -mibc -sgbc switch should be used for Composites.' + CALL STOPONERROR(layoutnumber,size,buff) + end if + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + + sgg%Med(contamedia)%multiport(1)%multiportFileZ11 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' + sgg%Med(contamedia)%multiport(1)%multiportFileZ22 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z22.txt' + sgg%Med(contamedia)%multiport(1)%multiportFileZ12 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' + sgg%Med(contamedia)%multiport(1)%multiportFileZ21 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' + ! +!! + if (mibc) then !se trataran con MIBC !!!151161 + sgg%Med(contamedia)%Is%SGBC = .false. + sgg%Med(contamedia)%Is%SGBCDispersive = .false. + sgg%Med(contamedia)%Is%Lossy = .true. + + errnofile1=.false. + errnofile2=.false. + errnofile3=.false. + errnofile4=.false. + pozi=index(sgg%Med(contamedia)%Multiport(1)%multiportFileZ11,'_z11.txt') + multiportfile2=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ11(1:pozi-1))) + inquire(file=trim(adjustl(multiportfile2)), EXIST=errnofile1) + inquire(file=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ11)), EXIST=errnofile2) + inquire(file=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ12)), EXIST=errnofile3) + inquire(file=trim(adjustl(sgg%Med(contamedia)%Multiport(1)%multiportFileZ22)), EXIST=errnofile4) + + if (.not.(errnofile1.or.(errnofile2.and.errnofile3.and.errnofile4))) then + buff='Neither New nor Old style mibc FILE '//trim(adjustl(multiportfile2))//' EXISTS.' + call WarnErrReport (buff,.TRUE.) + end if + end if + + !!!!!!!!end 09/07/13 + ! + ! + end if + ! + ! + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + end if + !Multiports + end do + contamedia = maxcontamedia + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !end ISOTROPIC multiports + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ! + ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !ANISOTROPIC Multiports + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + inicontamedia = contamedia + 1 + maxcontamedia = contamedia + tama = this%LossyThinSurfs%length + do j = 1, tama + !carbon Multiports a guevo + if (this%LossyThinSurfs%cs(j)%SigmaM(1) < 0.0_RKIND) then + !SURFs (siempre son surfs) + tama2 = this%LossyThinSurfs%cs(j)%nc + mincontamedia = maxcontamedia + 1 + MultiportFile = trim (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' + do i = 1, tama2 + orientacion = this%LossyThinSurfs%cs(j)%C(i)%or + punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI + punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XE + punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI + punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YE + punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI + punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZE + existia = .FALSE. + doexis2: do k = inicontamedia, maxcontamedia + if (trim(adjustl(sgg%Med(k)%AnisMultiport(1)%multiportFileZ11)) == trim(adjustl(MultiportFile))) then + if (sgg%Med(k)%AnisMultiport(1)%Multiportdir == orientacion) then + contamedia = k + existia = .TRUE. + EXIT doexis2 + end if + end if + end do doexis2 + if ( .NOT. existia) then + maxcontamedia = maxcontamedia + 1 + contamedia = maxcontamedia + allocate(sgg%Med(contamedia)%AnisMultiport(1)) + ! + ! + + if (this%LossyThinSurfs%cs(j)%numcapas >1) then + write(buff, '(a)') 'pre1_ERROR: Anisotropic multiport materials unsupported for multilayered structures.' + call WarnErrReport (buff,.TRUE.) + end if + puntoXI = Max (punto%XI, Min(BoundingBox%XI, BoundingBox%XE)) !copiado de healer + puntoYI = Max (punto%YI, Min(BoundingBox%YI, BoundingBox%YE)) + puntoZI = Max (punto%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) + + + !!!!!!!!estaba antes maaaal. bug 140815verano + if(.not.((puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE))) puntoXI= sgg%allocDxI + if(.not.((puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE))) puntoYI= sgg%allocDyI + if(.not.((puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE))) puntoZI= sgg%allocDzI + write(buff, '(a)') 'ERROR: precompo 2: Readjusting composite init point. Only ignore if parts of the geometry fall out of the the domain deliberately (only if manual clipping)' + call WarnErrReport (buff,.TRUE.) + + dentro = (puntoXI>=sgg%allocDxI).and.(puntoXI<=sgg%allocDxE).and. & + (puntoYI>=sgg%allocDyI).and.(puntoYI<=sgg%allocDyE).and. & + (puntoZI>=sgg%allocDzI).and.(puntoZI<=sgg%allocDzE) + delta=-1.0_RKIND + if (DENTRO) then + select case (abs(this%LossyThinSurfs%cs(j)%C(i)%or)) + case (iEx) + delta=(sgg%DX(puntoXI)+sgg%DX(puntoXI-1))/2.0_RKIND + case (iEy) + delta=(sgg%DY(puntoYI)+sgg%Dy(puntoYI-1))/2.0_RKIND + case (iEz) + delta=(sgg%DZ(puntoZI)+sgg%Dz(puntoZI-1))/2.0_RKIND + case default + write(buff, '(a)') 'Buggy error 1 in preprocess composites. .' + CALL STOPONERROR(layoutnumber,size,buff) + end select + ELSE + write(buff, '(a)') 'Buggy error 2 in preprocess composites. .' + CALL STOPONERROR(layoutnumber,size,buff) + end if + sgg%Med(contamedia)%AnisMultiport(1)%Multiportdir = this%LossyThinSurfs%cs(j)%C(i)%or + sgg%Med(contamedia)%AnisMultiport(1)%epr = this%LossyThinSurfs%cs(j)%eps / Eps0 + sgg%Med(contamedia)%AnisMultiport(1)%mur = this%LossyThinSurfs%cs(j)%mu / mu0 + sgg%Med(contamedia)%AnisMultiport(1)%sigma = this%LossyThinSurfs%cs(j)%Sigma + sgg%Med(contamedia)%AnisMultiport(1)%sigmam = abs(this%LossyThinSurfs%cs(j)%Sigmam) + sgg%Med(contamedia)%AnisMultiport(1)%width = this%LossyThinSurfs%cs(j)%thk + sgg%Med(contamedia)%Priority = prior_CS + sgg%Med(contamedia)%Epr =this%LossyThinSurfs%cs(j)%eps(1) / Eps0 + sgg%Med(contamedia)%Sigma =this%LossyThinSurfs%cs(j)%Sigma(1) + sgg%Med(contamedia)%Mur = this%LossyThinSurfs%cs(j)%mu(1) / Mu0 + sgg%Med(contamedia)%SigmaM = abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) !may be negative + ! + if (mibc) then + sgg%Med(contamedia)%Is%Anismultiport = .TRUE. + sgg%Med(contamedia)%Is%Lossy = .TRUE. + else + write(buff, '(a)') 'Some -mibc -sgbc switch should be used for Anisotropic Composites.' + CALL STOPONERROR(layoutnumber,size,buff) + end if + + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + + sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ11 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' + sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ22 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z22.txt' + sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ12 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' + sgg%Med(contamedia)%AnisMultiport(1)%multiportFileZ21 = trim & + & (adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z12.txt' + ! + end if + ! + ! + ! + ! + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateSurfaceMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + end do + end if + !Multiports + end do + contamedia = maxcontamedia + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !end ANISOTROPIC multiports + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !Multiports lossy padding + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + if (abs(attfactor-1.0_RKIND) > 1.0e-12_RKIND) then + tama = this%LossyThinSurfs%length + do j = 1, tama + tama2 = this%LossyThinSurfs%cs(j)%nc + contamedia = contamedia + 1 + do i = 1, tama2 + orientacion = this%LossyThinSurfs%cs(j)%C(i)%or + !ES UN free-space multiportpadding CON LA PRIORIDAD DE UN MULTIPORT con conductividad magnetica que luego se desanulara + sgg%Med(contamedia)%Priority = prior_CS + sgg%Med(contamedia)%Is%multiport = .FALSE. + sgg%Med(contamedia)%Is%ANISmultiport = .FALSE. + sgg%Med(contamedia)%Is%MultiportPadding = .TRUE. + sgg%Med(contamedia)%Is%Lossy = .TRUE. + sgg%Med(contamedia)%Is%Dielectric = .False. + sgg%Med(contamedia)%Epr = 1.0_RKIND !this%LossyThinSurfs%cs(j)%eps / Eps0 + sgg%Med(contamedia)%Sigma = 0.0_RKIND !abs(this%LossyThinSurfs%cs(j)%Sigma) !may be negative + sgg%Med(contamedia)%Mur = 1.0_RKIND !this%LossyThinSurfs%cs(j)%mu / Mu0 + sgg%Med(contamedia)%Is%Dielectric = .TRUE. + !provisionalmente (luego se retocara con el sigmam correcto) + sgg%Med(contamedia)%SigmaM = 0.0_RKIND !abs(this%LossyThinSurfs%cs(j)%Sigma) !may be negative + + punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI + punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XE + punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI + punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YE + punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI + punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZE + !! + + SELECT CASE (Abs(orientacion)) + CASE (iEx) + punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI + punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XI + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & + media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, & + Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, & + Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, & + Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, & + Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, & + sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia) + punto%XI = this%LossyThinSurfs%cs(j)%C(i)%XI-1 + punto%XE = this%LossyThinSurfs%cs(j)%C(i)%XI-1 + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & + media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & + Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & + Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & + Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & + BoundingBox, punto, orientacion, & + & contamedia) + CASE (iEy) + punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI + punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YI + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & + media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & + Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & + Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & + Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & + BoundingBox, punto, orientacion, & + & contamedia) + punto%YI = this%LossyThinSurfs%cs(j)%C(i)%YI-1 + punto%YE = this%LossyThinSurfs%cs(j)%C(i)%YI-1 + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & + media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & + Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & + Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & + Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & + BoundingBox, punto, orientacion, & + & contamedia) + CASE (iEz) + punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI + punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZI + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & + media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & + Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & + Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & + Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & + BoundingBox, punto, orientacion, & + & contamedia) + punto%ZI = this%LossyThinSurfs%cs(j)%C(i)%ZI-1 + punto%ZE = this%LossyThinSurfs%cs(j)%C(i)%ZI-1 + numertag = searchtag(tagtype,this%LossyThinSurfs%cs(j)%C(i)%tag) + call CreateMagneticSurface (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, & + media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, & + Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, & + Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, & + Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, & + Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, & + Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, & + BoundingBox, punto, orientacion, & + & contamedia) + end select + end do + end do + end if + ! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !wires + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + oldcontamedia = contamedIA + tama = this%twires%n_tw + do j = 1, tama + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%wire(1)) + sgg%Med(contamedia)%Priority = prior_TW + + ! + !background + ! + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr + sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma + sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur + sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM + sgg%Med(contamedia)%Is%ThinWire = .TRUE. + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + sgg%Med(contamedia)%wire(1)%radius = this%twires%TW(j)%RAD + sgg%Med(contamedia)%wire(1)%radius_devia = this%twires%TW(j)%RAD_devia + if (boundwireradius) then + if (sgg%Med(contamedia)%wire(1)%radius > maxwireradius) sgg%Med(contamedia)%wire(1)%radius=maxwireradius + end if + sgg%Med(contamedia)%wire(1)%R = this%twires%TW(j)%RES + sgg%Med(contamedia)%wire(1)%l = this%twires%TW(j)%IND + sgg%Med(contamedia)%wire(1)%C = this%twires%TW(j)%CAP + sgg%Med(contamedia)%wire(1)%P_R = this%twires%TW(j)%P_RES + sgg%Med(contamedia)%wire(1)%P_l = this%twires%TW(j)%P_IND + + sgg%Med(contamedia)%wire(1)%P_C = this%twires%TW(j)%P_CAP + if (this%twires%TW(j)%disp) then + allocate (sgg%Med(contamedia)%wire(1)%disp(1)) + call asignawiredisper(sgg%Med(contamedia)%wire(1)%disp(1), & + this%twires%TW(j)%dispfile) + end if + sgg%Med(contamedia)%wire(1)%LeftEnd = this%twires%TW(j)%LeftEnd + sgg%Med(contamedia)%wire(1)%RightEnd = this%twires%TW(j)%RightEnd + sgg%Med(contamedia)%wire(1)%VsourceExists = .FALSE. + sgg%Med(contamedia)%wire(1)%IsourceExists = .FALSE. + ! + sgg%Med(contamedia)%wire(1)%HasAbsorbing_RightEnd = .FALSE. + sgg%Med(contamedia)%wire(1)%HasAbsorbing_LeftEnd = .FALSE. + sgg%Med(contamedia)%wire(1)%HasParallel_RightEnd = .FALSE. + sgg%Med(contamedia)%wire(1)%HasParallel_LeftEnd = .FALSE. + sgg%Med(contamedia)%wire(1)%HasSeries_RightEnd = .FALSE. + sgg%Med(contamedia)%wire(1)%HasSeries_LeftEnd = .FALSE. + sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_R_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_L_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_C_RightEnd = 2.0e7_RKIND !en corto 14/2/14 + sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd = 2.0e7_RKIND !en corto 14/2/14 +!stoch + sgg%Med(contamedia)%wire(1)%R_devia = this%twires%TW(j)%RES_devia + sgg%Med(contamedia)%wire(1)%l_devia = this%twires%TW(j)%IND_devia + sgg%Med(contamedia)%wire(1)%C_devia = this%twires%TW(j)%CAP_devia + + sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_R_RightEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_L_RightEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_C_RightEnd_devia = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia = 0.0_RKIND +!fin stoch + ! + if (this%twires%TW(j)%TL ==MATERIAL_absorbing) then + sgg%Med(contamedia)%wire(1)%HasAbsorbing_LeftEnd = .TRUE. + elseIF (this%twires%TW(j)%TL == Parallel_CONS) then + sgg%Med(contamedia)%wire(1)%HasParallel_LeftEnd = .TRUE. + sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd = this%twires%TW(j)%R_LeftEnd + sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd = this%twires%TW(j)%L_LeftEnd + sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd = this%twires%TW(j)%C_LeftEnd +! + sgg%Med(contamedia)%wire(1)%Parallel_R_LeftEnd_devia = this%twires%TW(j)%R_LeftEnd_devia + sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd_devia = this%twires%TW(j)%L_LeftEnd_devia + sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd_devia = this%twires%TW(j)%C_LeftEnd_devia + + ELSE if (this%twires%TW(j)%TL == SERIES_CONS) then + sgg%Med(contamedia)%wire(1)%HasSeries_LeftEnd = .TRUE. + sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd = this%twires%TW(j)%R_LeftEnd + sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd = this%twires%TW(j)%L_LeftEnd + sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd = this%twires%TW(j)%C_LeftEnd +! + sgg%Med(contamedia)%wire(1)%Series_R_LeftEnd_devia = this%twires%TW(j)%R_LeftEnd_devia + sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd_devia = this%twires%TW(j)%L_LeftEnd_devia + sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia = this%twires%TW(j)%C_LeftEnd_devia + ELSE if (this%twires%TW(j)%TL == DISPERSIVE_CONS) then + allocate (sgg%Med(contamedia)%wire(1)%disp_LeftEnd(1)) + call asignawiredisper(sgg%Med(contamedia)%wire(1)%disp_LeftEnd(1), & + this%twires%TW(j)%dispfile_LeftEnd) + end if + ! + + if (this%twires%TW(j)%TR ==MATERIAL_absorbing) then + sgg%Med(contamedia)%wire(1)%HasAbsorbing_RightEnd = .TRUE. + elseIF (this%twires%TW(j)%TR == Parallel_CONS) then + sgg%Med(contamedia)%wire(1)%HasParallel_RightEnd = .TRUE. + sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd = this%twires%TW(j)%R_RightEnd + sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd = this%twires%TW(j)%L_RightEnd + sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd = this%twires%TW(j)%C_RightEnd +! + sgg%Med(contamedia)%wire(1)%Parallel_R_RightEnd_devia = this%twires%TW(j)%R_RightEnd_devia + sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd_devia = this%twires%TW(j)%L_RightEnd_devia + sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd_devia = this%twires%TW(j)%C_RightEnd_devia + ELSE if (this%twires%TW(j)%TR == SERIES_CONS) then + sgg%Med(contamedia)%wire(1)%HasSeries_RightEnd = .TRUE. + sgg%Med(contamedia)%wire(1)%Series_R_RightEnd = this%twires%TW(j)%R_RightEnd + sgg%Med(contamedia)%wire(1)%Series_L_RightEnd = this%twires%TW(j)%L_RightEnd + sgg%Med(contamedia)%wire(1)%Series_C_RightEnd = this%twires%TW(j)%C_RightEnd +! + sgg%Med(contamedia)%wire(1)%Series_R_RightEnd_devia = this%twires%TW(j)%R_RightEnd_devia + sgg%Med(contamedia)%wire(1)%Series_L_RightEnd_devia = this%twires%TW(j)%L_RightEnd_devia + sgg%Med(contamedia)%wire(1)%Series_C_RightEnd_devia = this%twires%TW(j)%C_RightEnd_devia + + ELSE if (this%twires%TW(j)%TR == DISPERSIVE_CONS) then + allocate (sgg%Med(contamedia)%wire(1)%disp_RightEnd(1)) + call asignawiredisper(sgg%Med(contamedia)%wire(1)%disp_RightEnd(1), & + this%twires%TW(j)%dispfile_RightEnd) + end if + +!stoch + rdummy=abs(sgg%Med(contamedia)%wire(1)%radius_devia) & + +abs(sgg%Med(contamedia)%wire(1)%l_devia) & + +abs(sgg%Med(contamedia)%wire(1)%C_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Parallel_L_RightEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Parallel_L_LeftEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Parallel_C_RightEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Parallel_C_LeftEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Series_L_RightEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Series_L_LeftEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Series_C_RightEnd_devia) & + +abs(sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia) + if (rdummy>1.0e-15_RKIND) then + write(buff, '(a)') 'Non null deviations found in L, C or radius in wires stoch. Still unsupported.' + CALL STOPONERROR(layoutnumber,size,buff) + end if +!fin stoch + ! + !esto se soportaba desde versiones antiguas (hilos de un solo segmento. Por error se descomento en la R2417 cuando se trabajo en lo del strictnfde tras vuelta de madrid + !vuelvo a comentarlo porque si que tenemos la capacidad de hilos de un solo segmento + ! + ! tama2 = this%twires%TW(j)%N_TWC + ! if (tama2 == 1) then + ! call stoponerror(layoutnumber,size,'A WIRE must have at least two segments') + ! end if + ! + !esto no es ya necesario porque lo calculo yo luego en el wires + !!record the LeftEnd and RightEnd coordinates (first and last points) + !! + ! sgg%Med(contamedia)%wire(1)%LextremoI = this%twires%TW(j)%TWC(1)%i + ! sgg%Med(contamedia)%wire(1)%LextremoJ = this%twires%TW(j)%TWC(1)%j + ! sgg%Med(contamedia)%wire(1)%LextremoK = this%twires%TW(j)%TWC(1)%k + ! orientacionL = this%twires%TW(j)%TWC(1)%D + ! sgg%Med(contamedia)%wire(1)%RextremoI = this%twires%TW(j)%TWC(tama2)%i + ! sgg%Med(contamedia)%wire(1)%RextremoJ = this%twires%TW(j)%TWC(tama2)%j + ! sgg%Med(contamedia)%wire(1)%RextremoK = this%twires%TW(j)%TWC(tama2)%k + ! orientacionR = this%twires%TW(j)%TWC(tama2)%D + ! ! + !!correct each ending + ! numminus=0 + ! do i = 2, tama2-1 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente + ! punto%XI = this%twires%TW(j)%TWC(i)%i + ! punto%YI = this%twires%TW(j)%TWC(i)%j + ! punto%ZI = this%twires%TW(j)%TWC(i)%k + ! orientacion = this%twires%TW(j)%TWC(i)%D + ! select case (orientacion) + ! case (iEx) + ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%LextremoJ).and. & + ! (punto%ZI == sgg%Med(contamedia)%wire(1)%LextremoK)) then + ! if ((orientacion /= orientacionL).and.(punto%XI == sgg%Med(contamedia)%wire(1)%LextremoI)) numminus=numminus +1 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente + ! if (punto%XI+1 == sgg%Med(contamedia)%wire(1)%LextremoI) numminus =numminus +1 + ! end if + ! case (iEy) + ! if ( (punto%XI == sgg%Med(contamedia)%wire(1)%LextremoI).and. & + ! (punto%ZI == sgg%Med(contamedia)%wire(1)%LextremoK)) then + ! if ((orientacion /= orientacionL).and.(punto%YI == sgg%Med(contamedia)%wire(1)%LextremoJ)) numminus=numminus +1 + ! if (punto%YI+1 == sgg%Med(contamedia)%wire(1)%LextremoJ) numminus =numminus +1 + ! end if + ! case (iEz) + ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%LextremoJ).and. & + ! (punto%XI == sgg%Med(contamedia)%wire(1)%LextremoI)) then + ! if ((orientacion /= orientacionL).and.(punto%ZI == sgg%Med(contamedia)%wire(1)%LextremoK)) numminus=numminus +1 + ! if (punto%ZI+1 == sgg%Med(contamedia)%wire(1)%LextremoK) numminus =numminus +1 + ! end if + ! end select + ! + ! end do + ! if (numminus >= 1) then !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente + ! select case (this%twires%TW(j)%TWC(1)%D) + ! case (iEx) !si son iguales a 2 es cerrado + ! sgg%Med(contamedia)%wire(1)%LextremoI = sgg%Med(contamedia)%wire(1)%LextremoI + 1 + ! case (iEy) + ! sgg%Med(contamedia)%wire(1)%LextremoJ = sgg%Med(contamedia)%wire(1)%LextremoJ + 1 + ! case (iEz) + ! sgg%Med(contamedia)%wire(1)%LextremoK = sgg%Med(contamedia)%wire(1)%LextremoK + 1 + ! end select + ! end if + ! ! + !!correct each ending + ! numminus=0 + ! do i = 2, tama2-1 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente + ! punto%XI = this%twires%TW(j)%TWC(i)%i + ! punto%YI = this%twires%TW(j)%TWC(i)%j + ! punto%ZI = this%twires%TW(j)%TWC(i)%k + ! orientacion = this%twires%TW(j)%TWC(i)%D + ! select case (orientacion) + ! case (iEx) + ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%RextremoJ).and. & + ! (punto%ZI == sgg%Med(contamedia)%wire(1)%RextremoK)) then + ! if ((orientacion /= orientacionR).and.(punto%XI == sgg%Med(contamedia)%wire(1)%RextremoI)) numminus=numminus +1 + ! if (punto%XI+1 == sgg%Med(contamedia)%wire(1)%RextremoI) numminus =numminus +1 + ! end if + ! case (iEy) + ! if ( (punto%XI == sgg%Med(contamedia)%wire(1)%RextremoI).and. & + ! (punto%ZI == sgg%Med(contamedia)%wire(1)%RextremoK)) then + ! if ((orientacion /= orientacionR).and.(punto%YI == sgg%Med(contamedia)%wire(1)%RextremoJ)) numminus=numminus +1 + ! if (punto%YI+1 == sgg%Med(contamedia)%wire(1)%RextremoJ) numminus =numminus +1 + ! end if + ! case (iEz) + ! if ( (punto%YI == sgg%Med(contamedia)%wire(1)%RextremoJ).and. & + ! (punto%XI == sgg%Med(contamedia)%wire(1)%RextremoI)) then + ! if ((orientacion /= orientacionR).and.(punto%ZI == sgg%Med(contamedia)%wire(1)%RextremoK)) numminus=numminus +1 + ! if (punto%ZI+1 == sgg%Med(contamedia)%wire(1)%RextremoK) numminus =numminus +1 + ! end if + ! end select + ! end do + ! if ((numminus >= 1).or.(tama2 == 1)) then !bug ca295 !bug OLD 12/09/13 Model_unidos.nfde segmentos finales duplicados internamente + ! select case (this%twires%TW(j)%TWC(tama2)%D) + ! case (iEx) + ! sgg%Med(contamedia)%wire(1)%RextremoI = sgg%Med(contamedia)%wire(1)%RextremoI + 1 + !!si son iguales a 2 es cerrado + ! case (iEy) + ! sgg%Med(contamedia)%wire(1)%RextremoJ = sgg%Med(contamedia)%wire(1)%RextremoJ + 1 + ! case (iEz) + ! sgg%Med(contamedia)%wire(1)%RextremoK = sgg%Med(contamedia)%wire(1)%RextremoK + 1 + ! end select + ! end if + end do !del tama + + + !preanalisis de hilos embeddeds en materiales antes de asignarlos + tama = this%twires%n_tw + paraerrhilo=.false. + do j1=1, tama + tama2 = this%twires%TW(j1)%N_TWC + do i1 = 1, tama2 + i=this%twires%TW(j1)%TWC(i1)%i + j=this%twires%TW(j1)%TWC(i1)%j + k=this%twires%TW(j1)%TWC(i1)%k + orientacion = this%twires%TW(j1)%TWC(i1)%D + OrigIndex= this%twires%TW(j1)%TWC(i1)%nd + if ((i >= BoundingBox%XI) .AND. (i < BoundingBox%XE) .AND. & + & (j >= BoundingBox%YI) .AND. (j < BoundingBox%YE) .AND. & + & (k >= BoundingBox%ZI) .AND. (k < BoundingBox%ZE)) then + if (i > BoundingBox%XI) then + imenos1=i-1 + else + imenos1=i + end if + if (j > BoundingBox%YI) then + jmenos1=j-1 + else + jmenos1=j + end if + if (k > BoundingBox%ZI) then + kmenos1=k-1 + else + kmenos1=k + end if + select case (orientacion) + case (iEx) + if ((media%sggMiEx(i,j,k) ==0).or.(sgg%med(media%sggMiEx(i,j,k) )%is%pec)) then + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' embedded within PEC' + if (verbose) call WarnErrReport (buff) + elseif (media%sggMiEx(i,j,k) /= 1) then + islossy = (sgg%Med(media%sggMiEx(i,j,k))%Sigma /= 0.0_RKIND) + if (islossy) then + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k, & + ' embedded within LOSSY medium ', & + media%sggMiEx(i,j,k) + else + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' embedded within medium ', & + media%sggMiEx(i,j,k) + end if + if (verbose) call WarnErrReport (buff) + end if + if ((((media%sggMiEy(i ,j,k) ==0).or.(sgg%med(media%sggMiEy(i ,j,k) )%is%pec)).or. & + ((media%sggMiEz(i ,j,k) ==0).or.(sgg%med(media%sggMiEz(i ,j,k) )%is%pec)).or. & + ((media%sggMiEy(i ,jmenos1,k) ==0).or.(sgg%med(media%sggMiEy(i ,jmenos1,k) )%is%pec)).or. & + ((media%sggMiEz(i ,j,kmenos1) ==0).or.(sgg%med(media%sggMiEz(i ,j,kmenos1) )%is%pec))).and. & + & ((media%sggMiEx(i ,j,k) /=0).and.(.not.(sgg%med(media%sggMiEx(i ,j,k) )%is%pec)))) then + if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of x-WIRE at ',OrigIndex, i, j, k, & + ' touching PEC' + if (verbose) call WarnErrReport (buff) + else + continue + !write(buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k,' touching PEC' + !if (verbose) call WarnErrReport (buff) + end if + elseif ((((media%sggMiEy(i+1,j,k) ==0).or.(sgg%med(media%sggMiEy(i+1,j,k) )%is%pec)).or.& + ((media%sggMiEz(i+1,j,k) ==0).or.(sgg%med(media%sggMiEz(i+1,j,k) )%is%pec)).or. & + ((media%sggMiEy(i+1,jmenos1,k) ==0).or.(sgg%med(media%sggMiEy(i+1,jmenos1,k) )%is%pec)).or. & + ((media%sggMiEz(i+1,j,kmenos1) ==0).or.(sgg%med(media%sggMiEz(i+1,j,kmenos1) )%is%pec))).and. & + & ((media%sggMiEx(i ,j,k) /=0).and.(.not.(sgg%med(media%sggMiEx(i ,j,k) )%is%pec)))) then + if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of x-WIRE at ',OrigIndex, i+1, j, k, & + ' touching PEC' + if (verbose) call WarnErrReport (buff) + else + continue + !write(buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i+1, j, k,' touching PEC' + !if (verbose) call WarnErrReport (buff) + end if + elseif (((media%sggMiEy(i ,j,k) /= 1)).and. & + (media%sggMiEx(i ,j,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEy(i,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEz(i ,j,k) /= 1)).and. & + (media%sggMiEx(i ,j,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEz(i,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEy(i+1,j,k) /= 1)).and. & + (media%sggMiEx(i ,j,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i+1, j, k,' touching medium ', & + & media%sggMiEy(i+1,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEz(i+1,j,k) /= 1)).and. & + (media%sggMiEx(i ,j,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: x-WIRE at ',OrigIndex, i+1, j, k,' touching medium ', & + & media%sggMiEz(i+1,j,k) + if (verbose) call WarnErrReport (buff) + end if + case (iEy) + if ((media%sggMiEy(i,j,k) ==0).or.(sgg%med(media%sggMiEy(i,j,k) )%is%pec)) then + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' embedded within PEC' + if (verbose) call WarnErrReport (buff) + elseif (media%sggMiEy(i,j,k) /= 1) then + islossy = (sgg%Med(media%sggMiEy(i,j,k))%Sigma /= 0.0_RKIND) + if (islossy) then + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: Y-WIRE at ',OrigIndex, i, j, k,' embedded within LOSSY medium ', & + media%sggMiEY(i,j,k) + else + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' embedded within medium ', & + media%sggMiEy(i,j,k) + end if + if (verbose) call WarnErrReport (buff) + end if + if ((((media%sggMiEx(i,j ,k) ==0).or.(sgg%med(media%sggMiEx(i,j ,k) )%is%pec)).or. & + ((media%sggMiEz(i,j,k ) ==0).or.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec)).or. & + ((media%sggMiEx(imenos1,j ,k) ==0).or.(sgg%med(media%sggMiEx(imenos1,j ,k) )%is%pec)).or. & + ((media%sggMiEz(i,j,kmenos1 ) ==0).or.(sgg%med(media%sggMiEz(i,j,kmenos1 ) )%is%pec))).and. & + & ((media%sggMiEy(i,j ,k) /=0).and.(.not.(sgg%med(media%sggMiEy(i,j ,k) )%is%pec)))) then + if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of y-WIRE at ',OrigIndex, i, j, k, & + ' touching PEC' + if (verbose) call WarnErrReport (buff) + else + continue + !write(buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k,' touching PEC' + !if (verbose) call WarnErrReport (buff) + end if + elseif ((((media%sggMiEx(i,j+1,k) ==0).or.(sgg%med(media%sggMiEx(i,j+1,k) )%is%pec)).or. & + ((media%sggMiEz(i,j+1,k) ==0).or.(sgg%med(media%sggMiEz(i,j+1,k) )%is%pec)).or. & + ((media%sggMiEx(imenos1,j+1,k) ==0).or.(sgg%med(media%sggMiEx(imenos1,j+1,k) )%is%pec)).or. & + ((media%sggMiEz(i,j+1,kmenos1) ==0).or.(sgg%med(media%sggMiEz(i,j+1,kmenos1) )%is%pec))).and. & + & ((media%sggMiEy(i,j ,k) /=0).and.(.not.(sgg%med(media%sggMiEy(i,j ,k) )%is%pec)))) then + if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of y-WIRE at ',OrigIndex, i, j+1, k, & + ' touching PEC' + if (verbose) call WarnErrReport (buff) + else + continue + !write(buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j+1, k,' touching PEC' + !if (verbose) call WarnErrReport (buff) + end if + elseif (((media%sggMiEx(i,j ,k) /= 1)).and. & + & (media%sggMiEy(i,j ,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEx(i,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEz(i,j ,k) /= 1)).and. & + & (media%sggMiEy(i,j ,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEz(i,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEx(i,j+1,k) /= 1)).and. & + & (media%sggMiEy(i,j ,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j+1, k,' touching medium ', & + & media%sggMiEx(i,j+1,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEz(i,j+1,k) /= 1)).and. & + & (media%sggMiEy(i,j ,k) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: y-WIRE at ',OrigIndex, i, j+1, k,' touching medium ', & + & media%sggMiEz(i,j+1,k) + if (verbose) call WarnErrReport (buff) + end if + case (iEz) + if ((media%sggMiEz(i,j,k) ==0).or.(sgg%med(media%sggMiEz(i,j,k) )%is%pec)) then + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' embedded within PEC' + if (verbose) call WarnErrReport (buff) + elseif (media%sggMiEz(i,j,k) /= 1) then + islossy = (sgg%Med(media%sggMiEz(i,j,k))%Sigma /= 0.0_RKIND) + if (islossy) then + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: Y-WIRE at ',OrigIndex, i, j, k, & + ' embedded within LOSSY medium ', & + media%sggMiEz(i,j,k) + else + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' embedded within medium ', & + media%sggMiEz(i,j,k) + end if + if (verbose) call WarnErrReport (buff) + end if + if ((((media%sggMiEx(i,j,k ) ==0).or.(sgg%med(media%sggMiEx(i,j,k ) )%is%pec)).or. & + ((media%sggMiEy(i,j,k ) ==0).or.(sgg%med(media%sggMiEy(i,j,k ) )%is%pec)).or. & + ((media%sggMiEx(imenos1,j,k ) ==0).or.(sgg%med(media%sggMiEx(imenos1,j,k ) )%is%pec)).or. & + ((media%sggMiEy(i,jmenos1,k ) ==0).or.(sgg%med(media%sggMiEy(i,jmenos1,k ) )%is%pec))).and. & + & ((media%sggMiEz(i,j,k ) /=0).and.(.not.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec)))) then + if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of z-WIRE at ',OrigIndex, i, j, k, & + ' touching PEC' + if (verbose) call WarnErrReport (buff) + else + continue + !write(buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k,' touching PEC' + !if (verbose) call WarnErrReport (buff) + end if + elseif ((((media%sggMiEx(i,j ,k+1) ==0).or.(sgg%med(media%sggMiEx(i,j ,k+1) )%is%pec)).or. & + ((media%sggMiEy(i,j ,k+1) ==0).or.(sgg%med(media%sggMiEy(i,j ,k+1) )%is%pec)).or. & + & ((media%sggMiEx(imenos1,j,k+1) ==0).or.(sgg%med(media%sggMiEx(imenos1,j,k+1) )%is%pec)).or. & + ((media%sggMiEy(i,jmenos1,k+1) ==0).or.(sgg%med(media%sggMiEy(i,jmenos1,k+1) )%is%pec))).and. & + & (((media%sggMiEz(i,j,k ) /=0).and.(.not.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec))).or.(.not.(sgg%med(media%sggMiEz(i,j,k ) )%is%pec)))) then + if ((i1 /= 1) .and. (i1 /= tama2)) then !solo en LeftEnd y RightEnd pueden tocar + paraerrhilo=.true. + write(buff, '(a,i7,3i5,a)') 'pre1_WARNING: intermediate node of z-WIRE at ',OrigIndex, i, j, k+1, & + ' touching PEC' + if (verbose) call WarnErrReport (buff) + else + continue + !write(buff, '(a,i7,3i5,a)') 'A node of terminal x-WIRE at ',OrigIndex, i, j, k+1,' touching PEC' + !if (verbose) call WarnErrReport (buff) + end if + elseif (((media%sggMiEx(i,j,k ) /= 1)).and. & + & (media%sggMiEz(i,j,k ) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEx(i,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEy(i,j,k ) /= 1)).and. & + & (media%sggMiEz(i,j,k ) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEy(i,j,k) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEy(i,j,k+1) /= 1)).and. & + & (media%sggMiEz(i,j,k ) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEy(i,j,k+1) + if (verbose) call WarnErrReport (buff) + elseif (((media%sggMiEx(i,j,k+1) /= 1)).and. & + & (media%sggMiEz(i,j,k ) == 1)) then + write(buff, '(a,i7,3i5,a,i5)') 'pre1_WARNING: z-WIRE at ',OrigIndex, i, j, k,' touching medium ', & + & media%sggMiEx(i,j,k+1) + if (verbose) call WarnErrReport (buff) + end if + end select + end if + end do + end do + !lo dejo que siga !luego el wires parara + !if (paraerrhilo.and.(.not.groundwires)) then + ! buff='Revise WIRE intersections!' + ! call STOPONERROR(layoutnumber,size,buff) + !end if + !end preanalisis + !perform the assignments + bboxwirxi= 2**20 + bboxwirxe=-(2**20) + bboxwirYi= 2**20 + bboxwirYe=-(2**20) + bboxwirZi= 2**20 + bboxwirZe=-(2**20) + contamedia = oldcontamedia + tama = this%twires%n_tw + do j = 1, tama + contamedia = contamedia + 1 + tama2 = this%twires%TW(j)%N_TWC + TAMA2BIS=0 + do i = 1, tama2 + punto%XI = this%twires%TW(j)%TWC(i)%i + punto%XE = this%twires%TW(j)%TWC(i)%i + punto%YI = this%twires%TW(j)%TWC(i)%j + punto%YE = this%twires%TW(j)%TWC(i)%j + punto%ZI = this%twires%TW(j)%TWC(i)%k + punto%ZE = this%twires%TW(j)%TWC(i)%k + !!!!!!!!!los clipeo agresivamente si lo lanzo con -CLIPREGION para que no me den problema 06/07/15 (solo sirve para debugeo y con el -wiresflavor holland (old)) + if (((punto%XI-2 > SINPML_fullsize(iHx)%XI).and.(punto%XI+2 < SINPML_fullsize(iHx)%XE).and. & + (punto%YI-2 > SINPML_fullsize(iHy)%YI).and.(punto%YI+2 < SINPML_fullsize(iHy)%YE).and. & + (punto%ZI-2 > SINPML_fullsize(iHz)%ZI).and.(punto%zI+2 < SINPML_fullsize(iHz)%ZE).and. & + (punto%XE-2 > SINPML_fullsize(iHx)%XI).and.(punto%Xe+2 < SINPML_fullsize(iHx)%XE).and. & + (punto%YE-2 > SINPML_fullsize(iHy)%YI).and.(punto%Ye+2 < SINPML_fullsize(iHy)%YE).and. & + (punto%ZE-2 > SINPML_fullsize(iHz)%ZI).and.(punto%Ze+2 < SINPML_fullsize(iHz)%ZE)).or.(.not.CLIPREGION)) TAMA2BIS=TAMA2bis+1 + end do + ! + allocate(sgg%Med(contamedia)%wire(1)%segm(1:TAMA2BIS)) + sgg%Med(contamedia)%wire(1)%numsegmentos = TAMA2BIS + allocate(sgg%Med(contamedia)%wire(1)%VSource(1:TAMA2BIS)) + allocate(sgg%Med(contamedia)%wire(1)%ISource(1:TAMA2BIS)) + CONTAVOLT=0 + CONTACURR=0 + + TAMA2BIS=0 + hilosbarre: do i = 1, tama2 + punto%XI = this%twires%TW(j)%TWC(i)%i + punto%XE = this%twires%TW(j)%TWC(i)%i + punto%YI = this%twires%TW(j)%TWC(i)%j + punto%YE = this%twires%TW(j)%TWC(i)%j + punto%ZI = this%twires%TW(j)%TWC(i)%k + punto%ZE = this%twires%TW(j)%TWC(i)%k +!!!sgg250418 +!!!bug 2018 +!!bug que aparece cuando en hilos de dos segmentos con ambos identicos. Lo que hago es clipearlo directamente. + if ((i==2).and.(tama2==2)) then + if (((this%twires%TW(j)%TWC(i)%i).eq.(this%twires%TW(j)%TWC(i-1)%i)).and. & + ((this%twires%TW(j)%TWC(i)%j).eq.(this%twires%TW(j)%TWC(i-1)%j)).and. & + ((this%twires%TW(j)%TWC(i)%k).eq.(this%twires%TW(j)%TWC(i-1)%k)).and. & + ((this%twires%TW(j)%TWC(i)%D).eq.(this%twires%TW(j)%TWC(i-1)%D))) then + sgg%Med(contamedia)%wire(1)%numsegmentos = 1 + write(buff, '(a,1i7,a)') 'pre1_SEVEREWARNING: removing a repeteated segment from a 2-segment wire. Index= ',this%twires%TW(j)%TWC(i)%nd,'. Double check that no wire probes was attached to it' + call WarnErrReport (buff) + exit hilosbarre + end if + end if +!!!fin 250418 + + !!!!!!!!!los clipeo agresivamente si lo lanzo con -CLIPREGION para que no me den problema 06/07/15 (solo sirve para debugeo y con el -wiresflavor holland (old)) + if (.not. & + (((punto%XI-2 > SINPML_fullsize(iHx)%XI).and.(punto%XI+2 < SINPML_fullsize(iHx)%XE).and. & + (punto%YI-2 > SINPML_fullsize(iHy)%YI).and.(punto%YI+2 < SINPML_fullsize(iHy)%YE).and. & + (punto%ZI-2 > SINPML_fullsize(iHz)%ZI).and.(punto%zI+2 < SINPML_fullsize(iHz)%ZE).and. & + (punto%XE-2 > SINPML_fullsize(iHx)%XI).and.(punto%Xe+2 < SINPML_fullsize(iHx)%XE).and. & + (punto%YE-2 > SINPML_fullsize(iHy)%YI).and.(punto%Ye+2 < SINPML_fullsize(iHy)%YE).and. & + (punto%ZE-2 > SINPML_fullsize(iHz)%ZI).and.(punto%Ze+2 < SINPML_fullsize(iHz)%ZE)).or.(.not.CLIPREGION)) ) CYCLE hilosbarre + + TAMA2BIS=TAMA2BIS+1 + orientacion = this%twires%TW(j)%TWC(i)%D + origindex= this%twires%TW(j)%TWC(i)%nd + ! + ! + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%i = punto%XI + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%j = punto%YI + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%k = punto%ZI + + !!!2014 para informacion bbox hilos + if (punto%XI < bboxwirxi) bboxwirXI=punto%XI + if (punto%XE > bboxwirxE) bboxwirXE=punto%XE + if (punto%YI < bboxwirYi) bboxwirYI=punto%YI + if (punto%YE > bboxwirYE) bboxwirYE=punto%YE + if (punto%ZI < bboxwirZi) bboxwirZI=punto%ZI + if (punto%ZE > bboxwirZE) bboxwirZE=punto%ZE + !!!!!! + + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%ori = orientacion + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%origindex = origindex + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_LeftEnd = .false. + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_RightEnd = .false. + sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%repetido = .false. !luego el preprocesador del wires cambia esto + if (i==1) sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_LeftEnd = .true. + if (i==tama2) sgg%Med(contamedia)%wire(1)%SEGM(TAMA2BIS)%Is_RightEnd = .true. + ! + isathinwire = .TRUE. + numertag = searchtag(tagtype,this%twires%TW(j)%TWC(i)%tag) + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'VOLT') .OR. & + & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'CURR').OR. & + & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTVOLT').OR. & + & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTCURR').OR. & + & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDVOLT').OR. & + & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDCURR')) THEN + !!!!!!!!!!!!! + IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'VOLT').OR. & + (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTVOLT')) THEN + CONTAVOLT=CONTAVOLT+1 + sgg%Med(contamedia)%wire(1)%VsourceExists = .TRUE. + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%SOFT=.TRUE. + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = this%twires%TW(j)%TWC(i)%m + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 0.0_RKIND + !not provided by .nfde but supported by the simulation though untested + ! + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%i = this%twires%TW(j)%TWC(i)%i + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%j = this%twires%TW(j)%TWC(i)%j + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%k = this%twires%TW(j)%TWC(i)%k + ELSE IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'CURR').OR. & + (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDCURR')) THEN + CONTAVOLT=CONTAVOLT+1 + CALL WarnErrReport (buff) + ! CALL STOPONERROR(layoutnumber,size,buff) + sgg%Med(contamedia)%wire(1)%VsourceExists = .TRUE. + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%SOFT=.FALSE. !230323 FUENTES DURAS Y FALSAS SGG + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = this%twires%TW(j)%TWC(i)%m + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 0.0_RKIND + !not provided by .nfde but supported by the simulation though untested + ! + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%i = this%twires%TW(j)%TWC(i)%i + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%j = this%twires%TW(j)%TWC(i)%j + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%k = this%twires%TW(j)%TWC(i)%k + ELSEIF (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDVOLT') THEN + CONTACURR=CONTACURR+1 + sgg%Med(contamedia)%wire(1)%IsourceExists = .TRUE. + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%SOFT=.FALSE. !230323 FUENTES DURAS Y FALSAS SGG + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Multiplier = this%twires%TW(j)%TWC(i)%m + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Resistance = 0.0_RKIND + !not provided by .nfde but supported by the simulation though untested + ! + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%i = this%twires%TW(j)%TWC(i)%i + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%j = this%twires%TW(j)%TWC(i)%j + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%k = this%twires%TW(j)%TWC(i)%k + ELSE IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTCURR')) THEN + CONTACURR=CONTACURR+1 + CALL WarnErrReport (buff) + ! CALL STOPONERROR(layoutnumber,size,buff) + sgg%Med(contamedia)%wire(1)%IsourceExists = .TRUE. + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%SOFT=.true. !230323 FUENTES DURAS Y FALSAS SGG + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Multiplier = this%twires%TW(j)%TWC(i)%m + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Resistance = 0.0_RKIND + !not provided by .nfde but supported by the simulation though untested + ! + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%i = this%twires%TW(j)%TWC(i)%i + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%j = this%twires%TW(j)%TWC(i)%j + sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%k = this%twires%TW(j)%TWC(i)%k + end if + ELSEIF (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) /= 'None') then + write(buff,*) 'WRONG type of wire source '//trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) + call stoponerror (layoutnumber,size,buff) + end if + end do hilosbarre + sgg%Med(contamedia)%wire(1)%NUMVOLTAGESOURCES=CONTAVOLT + sgg%Med(contamedia)%wire(1)%NUMCURRENTSOURCES=CONTACURR + !wires + end do + +!!!ahora slanted + + if (this%swires%n_sw /=0) then + hay_slanted_wires=.true. + else + hay_slanted_wires=.false. + end if + + !SLANTED WIRES + do j = 1,this%swires%n_sw + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%SlantedWire(1)) + + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr + sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma + sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur + sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM + sgg%Med(contamedia)%Is%SlantedWire = .TRUE. + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + sgg%Med(contamedia)%SlantedWire(1)%radius = this%swires%SW(j)%RAD + if (boundwireradius) then + if (sgg%Med(contamedia)%SlantedWire(1)%radius > maxwireradius) sgg%Med(contamedia)%SlantedWire(1)%radius=maxwireradius + end if + sgg%Med(contamedia)%SlantedWire(1)%R = this%swires%SW(j)%res + sgg%Med(contamedia)%SlantedWire(1)%L = this%swires%SW(j)%ind + sgg%Med(contamedia)%SlantedWire(1)%C = this%swires%SW(j)%cap + sgg%Med(contamedia)%SlantedWire(1)%P_R = this%swires%SW(j)%P_res + sgg%Med(contamedia)%SlantedWire(1)%P_L = this%swires%SW(j)%P_ind + sgg%Med(contamedia)%SlantedWire(1)%P_C = this%swires%SW(j)%P_cap + + if (this%swires%SW(j)%disp) then + allocate (sgg%Med(contamedia)%SlantedWire(1)%disp(1)) + call asignawiredisper(sgg%Med(contamedia)%SlantedWire(1)%disp(1), & + this%swires%SW(j)%dispfile) + end if + + sgg%Med(contamedia)%SlantedWire(1)%LeftEnd = this%swires%SW(j)%LeftEnd + sgg%Med(contamedia)%SlantedWire(1)%RightEnd = this%swires%SW(j)%RightEnd + + sgg%Med(contamedia)%SlantedWire(1)%HasParallel_LeftEnd = .FALSE. + sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%HasParallel_RightEnd = .FALSE. + sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%HasSeries_LeftEnd = .FALSE. + sgg%Med(contamedia)%SlantedWire(1)%Series_R_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Series_L_LeftEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Series_C_LeftEnd = 2.0e7_RKIND !en corto 14/2/14 + sgg%Med(contamedia)%SlantedWire(1)%HasSeries_RightEnd = .FALSE. + sgg%Med(contamedia)%SlantedWire(1)%Series_R_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Series_L_RightEnd = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%Series_C_RightEnd = 2.0e7_RKIND !en corto 14/2/14 + + if (this%swires%sw(j)%TL == Parallel_CONS) then + sgg%Med(contamedia)%SlantedWire(1)%HasParallel_LeftEnd = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_LeftEnd = this%swires%sw(j)%R_LeftEnd + sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_LeftEnd = this%swires%sw(j)%L_LeftEnd + sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_LeftEnd = this%swires%sw(j)%C_LeftEnd + ELSE if (this%swires%sw(j)%TL == SERIES_CONS) then + sgg%Med(contamedia)%SlantedWire(1)%HasSeries_LeftEnd = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%Series_R_LeftEnd = this%swires%sw(j)%R_LeftEnd + sgg%Med(contamedia)%SlantedWire(1)%Series_L_LeftEnd = this%swires%sw(j)%L_LeftEnd + sgg%Med(contamedia)%SlantedWire(1)%Series_C_LeftEnd = this%swires%sw(j)%C_LeftEnd + ELSE if (this%swires%SW(j)%TL == DISPERSIVE_CONS) then + allocate (sgg%Med(contamedia)%SlantedWire(1)%disp_LeftEnd(1)) + call asignawiredisper(sgg%Med(contamedia)%SlantedWire(1)%disp_LeftEnd(1), & + this%swires%SW(j)%dispfile_LeftEnd) + end if + if (this%swires%sw(j)%TR == Parallel_CONS) then + sgg%Med(contamedia)%SlantedWire(1)%HasParallel_RightEnd = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%Parallel_R_RightEnd = this%swires%sw(j)%R_RightEnd + sgg%Med(contamedia)%SlantedWire(1)%Parallel_L_RightEnd = this%swires%sw(j)%L_RightEnd + sgg%Med(contamedia)%SlantedWire(1)%Parallel_C_RightEnd = this%swires%sw(j)%C_RightEnd + ELSE if (this%swires%sw(j)%TR == SERIES_CONS) then + sgg%Med(contamedia)%SlantedWire(1)%HasSeries_RightEnd = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%Series_R_RightEnd = this%swires%sw(j)%R_RightEnd + sgg%Med(contamedia)%SlantedWire(1)%Series_L_RightEnd = this%swires%sw(j)%L_RightEnd + sgg%Med(contamedia)%SlantedWire(1)%Series_C_RightEnd = this%swires%sw(j)%C_RightEnd + ELSE if (this%swires%SW(j)%TR == DISPERSIVE_CONS) then + allocate (sgg%Med(contamedia)%SlantedWire(1)%disp_RightEnd(1)) + call asignawiredisper(sgg%Med(contamedia)%SlantedWire(1)%disp_RightEnd(1), & + this%swires%SW(j)%dispfile_RightEnd) + end if + + sgg%Med(contamedia)%SlantedWire(1)%numNodes = this%swires%SW(j)%n_swc + allocate(sgg%Med(contamedia)%SlantedWire(1)%nodes(1:this%swires%SW(j)%n_swc)) + do i = 1,this%swires%SW(j)%n_swc + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .FALSE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .FALSE. + nullify(sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource, & + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) + + + !!!2019 clipeo 2 celdas antes + if (CLIPREGION) then + if ((this%swires%SW(j)%swc(i)%x >= SINPML_Fullsize(iHx)%XE-2)) this%swires%SW(j)%swc(i)%x=SINPML_Fullsize(iHx)%XE-2 + if ((this%swires%SW(j)%swc(i)%x <= SINPML_Fullsize(iHx)%XI+2)) this%swires%SW(j)%swc(i)%x=SINPML_Fullsize(iHx)%XI+2 + if ((this%swires%SW(j)%swc(i)%y >= SINPML_Fullsize(iHy)%YE-2)) this%swires%SW(j)%swc(i)%y=SINPML_Fullsize(iHy)%YE-2 + if ((this%swires%SW(j)%swc(i)%y <= SINPML_Fullsize(iHy)%YI+2)) this%swires%SW(j)%swc(i)%y=SINPML_Fullsize(iHy)%YI+2 + if ((this%swires%SW(j)%swc(i)%z >= SINPML_Fullsize(iHz)%ZE-2)) this%swires%SW(j)%swc(i)%z=SINPML_Fullsize(iHz)%ZE-2 + if ((this%swires%SW(j)%swc(i)%z <= SINPML_Fullsize(iHz)%ZI+2)) this%swires%SW(j)%swc(i)%z=SINPML_Fullsize(iHz)%ZI+2 + end if + + !fin clipeo + + + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%index = this%swires%SW(j)%swc(i)%nd + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%x = this%swires%SW(j)%swc(i)%x + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%y = this%swires%SW(j)%swc(i)%y + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%z = this%swires%SW(j)%swc(i)%z + numertag = searchtag(tagtype,this%swires%SW(j)%swc(i)%tag) + + + !!!2019 para informacion bbox hilos + !!!!!!2020 retocado + if ( int(this%swires%SW(j)%swc(i)%x) < bboxwirxi) bboxwirXI=int(this%swires%SW(j)%swc(i)%x) + if ( int(this%swires%SW(j)%swc(i)%x)+1 > bboxwirxE) bboxwirXE=int(this%swires%SW(j)%swc(i)%x)+1 + if ( int(this%swires%SW(j)%swc(i)%y) < bboxwirYi) bboxwirYI=int(this%swires%SW(j)%swc(i)%y) + if ( int(this%swires%SW(j)%swc(i)%y)+1 > bboxwirYE) bboxwirYE=int(this%swires%SW(j)%swc(i)%y)+1 + if ( int(this%swires%SW(j)%swc(i)%z) < bboxwirZi) bboxwirZI=int(this%swires%SW(j)%swc(i)%z) + if ( int(this%swires%SW(j)%swc(i)%z)+1 > bboxwirZE) bboxwirZE=int(this%swires%SW(j)%swc(i)%z)+1 + !!!!!! + + + IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'VOLT').or. & + (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'SOFTVOLT')) THEN + allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource) + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%SOFT=.TRUE. !fuentes duras sgg 230323. default blandas + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%Multiplier = this%swires%SW(j)%swc(i)%m + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%Resistance = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) + ELSE IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'CURR').OR. & + (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'HARDCURR')) THEN !EQUIVALENTES A IMPLEMENTAR UNA DE voltage + allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource) + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%SOFT=.FALSE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%Multiplier = this%swires%SW(j)%swc(i)%m + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%Resistance = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) + ELSEIF (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'HARDVOLT') THEN !EQUIVALENTES A IMPLEMENTAR UNA DE Corriente + allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%SOFT=.FALSE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%Multiplier = this%swires%SW(j)%swc(i)%m + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%Resistance = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) + ELSE IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'SOFTCURR')) THEN + allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .TRUE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%SOFT=.TRUE. + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%Multiplier = this%swires%SW(j)%swc(i)%m + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%Resistance = 0.0_RKIND + sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) + elseIF (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) /= 'None') then + write(buff,*) 'WRONG type of wire source '//trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) + call stoponerror (layoutnumber,size,buff) + end if + end do + end do + !END SLANTED WIRES + + do j = 1, ubound(conformal_volumes,1) + + call addConformalMedia(sgg, media, conformal_volumes(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, volume_side_maps(j), isVolume) + numertag = searchtag(tagtype,conformal_volumes(j)%tag) + call CreateConformalPECVolume (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, conf_bounding_box, 0) + + end do + + if (ubound(conformal_volumes, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + end if + ! faces from V and S with same ratio are considered different media, bc they need to perform different operations + do j = 1, ubound(conformal_surfaces,1) + call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) + + end do + + if (ubound(conformal_surfaces, 1) > 0) then + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + end if + +#ifdef CompileWithMTLN + block + class(cable_t), pointer :: ptr + do j = 1, this%mtln%n_sh + this%mtln%n_unsh + ptr => this%mtln%cables(j)%ptr + select type(ptr) + type is(unshielded_multiwire_t) + contamedia = contamedia + 1 + allocate(sgg%Med(contamedia)%multiwire(1)) + sgg%Med(contamedia)%Priority = prior_TW + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr + sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma + sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur + sgg%Med(contamedia)%SigmaM = sgg%Med(1)%SigmaM + sgg%Med(contamedia)%Is%Multiwire = .TRUE. + + isathinwire = .FALSE. + numertag = searchtag(tagtype,this%mtln%cables(j)%ptr%tag) + do k = 1, ptr%n_segments + punto%xi = ptr%segments(k)%x + punto%xe = ptr%segments(k)%x + punto%yi = ptr%segments(k)%y + punto%ye = ptr%segments(k)%y + punto%zi = ptr%segments(k)%z + punto%ze = ptr%segments(k)%z + orientacion = ptr%segments(k)%orientation + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + & media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + & Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + & Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + & Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + & contamedia, isathinwire,verbose,numeroasignaciones) + end do + end select + end do + end block +#endif + + !reporta el bounding box + +#ifdef CompileWithMPI + call MPI_BARRIER(MPI_COMM_WORLD,ierr) + call MPI_AllReduce( bboxwirXI, dummy_bboxwirXI, 1_4, MPI_INTEGER, MPI_MIN, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( bboxwirYI, dummy_bboxwirYI, 1_4, MPI_INTEGER, MPI_MIN, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( bboxwirZI, dummy_bboxwirzI, 1_4, MPI_INTEGER, MPI_MIN, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( bboxwirXE, dummy_bboxwirXE, 1_4, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( bboxwirYE, dummy_bboxwirYE, 1_4, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, ierr) + call MPI_AllReduce( bboxwirZE, dummy_bboxwirZE, 1_4, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, ierr) + call MPI_BARRIER(MPI_COMM_WORLD,ierr) + bboxwirXI=dummy_bboxwirXI + bboxwirYI=dummy_bboxwirYI + bboxwirzI=dummy_bboxwirzI + bboxwirXE=dummy_bboxwirXE + bboxwirYE=dummy_bboxwirYE + bboxwirZE=dummy_bboxwirZE +#endif + write(buff, '(a, 6I12)') 'pre1_INFO: Bounding Box for WIREs min_x,min_y,min_z, MAX_x,MAX_y,MAX_z',bboxwirXI,bboxwirYI,bboxwirZI,bboxwirXE,bboxwirYE,bboxwirZE + if (((bboxwirXI<2**20).or.(bboxwirYI<2**20).or.(bboxwirZI<2**20).or.(bboxwirXE>-(2**20)).or.(bboxwirYE>-(2**20)).or.(bboxwirZE>-(2**20))).or.(VERBOSE)) then + call WarnErrReport (buff) + end if + !FIN WIRES + + if (run_with_dmma) then + !always at the end since the orientation is found from the PEC one + !thin Slots + !the embedding material properties are also if also needed + tama = this%tSlots%n_tg + ! + do j = 1, tama + ! + ! + tama2 = this%tSlots%Tg(j)%N_tgc + do i = 1, tama2 + !del Slot + direccion = this%tSlots%Tg(j)%TgC(i)%dir + i1 = this%tSlots%Tg(j)%TgC(i)%i + j1 = this%tSlots%Tg(j)%TgC(i)%j + k1 = this%tSlots%Tg(j)%TgC(i)%k + ORIX=.FALSE. ; ORIY=.FALSE. ; ORIZ=.FALSE. ; + ORIX2=.FALSE. ; ORIY2=.FALSE. ; ORIZ2=.FALSE. ; + ORIX3=.FALSE. ; ORIY3=.FALSE. ; ORIZ3=.FALSE. ; + ORIX4=.FALSE. ; ORIY4=.FALSE. ; ORIZ4=.FALSE. ; + ! + if ((i1 >= BoundingBox%XI) .AND. (i1 < BoundingBox%XE) .AND. & + & (j1 >= BoundingBox%YI) .AND. (j1 < BoundingBox%YE) .AND. & + & (k1 >= BoundingBox%ZI) .AND. (k1 < BoundingBox%ZE)) then + !encuentra la orientacion del plano PEC que contiene al Slot + oriX = (direccion == iEy) .AND. & + & (((media%sggMiHx(i1, j1, k1) ==0).or.(sgg%med(media%sggMiHx(i1, j1, k1) )%is%pec)) .OR. & + & (sgg%Med(media%sggMiHx(i1, j1, k1))%Is%ThinSlot)) !& + !& .AND. (((sggmiHz(i1, j1, k1) /=0).and.(.not.(sgg%med(sggmiHz(i1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHz(i1, j1,k1))%Is%ThinSlot)) + + oriX4 =(direccion == iEz) .AND. & + & ((( media%sggMiHx(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHx(i1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHx(i1, j1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHy(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHy(i1, j1, k1))%Is%ThinSlot)) + + oriY = (direccion == iEx) .AND. & + & ((( media%sggMiHy(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHy(i1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHy(i1, j1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHz(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHz(i1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHz(i1, j1, k1))%Is%ThinSlot)) + + oriY4 =(direccion == iEz) .AND. & + & ((( media%sggMiHy(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHy(i1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHy(i1, j1, k1))%Is%ThinSlot)) !& + !& .AND.((( sggmiHx(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHx(i1, j1, k1))%Is%ThinSlot)) + + oriZ = (direccion == iEx) .AND. & + & ((( media%sggMiHz(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHz(i1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHz(i1, j1, k1))%Is%ThinSlot)) !& + !& ((( sggmiHy(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1, k1) )%is%pec))) .AND. & + !& (.NOT. sgg%Med(sggmiHy(i1, j1, k1))%Is%ThinSlot)) + + oriZ4 = (direccion == iEy) .AND. & + & ((( media%sggMiHz(i1, j1, k1) ==0).or.(sgg%med( media%sggMiHz(i1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHz(i1, j1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHx(i1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHx(i1, j1, k1))%Is%ThinSlot)) + + !encuentra la orientacion del plano PEC que contiene al Slot (considera los vecinos) + oriX2 = (direccion == iEy) .AND. & + & ((( media%sggMiHx(i1, j1, k1-1) ==0).or.(sgg%med( media%sggMiHx(i1, j1, k1-1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHx(i1, j1, k1-1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHz(i1, j1, k1-1) /=0).and.(.not.(sgg%med( sggmiHz(i1, j1, k1-1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHz(i1, j1, k1-1))%Is%ThinSlot)) + + oriX3 = (direccion == iEz) .AND. & + & ((( media%sggMiHx(i1, j1-1, k1) ==0).or.(sgg%med( media%sggMiHx(i1, j1-1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHx(i1, j1-1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHy(i1, j1-1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1-1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHy(i1, j1-1, k1))%Is%ThinSlot)) + + oriY2 = (direccion == iEx) .AND. & + & ((( media%sggMiHy(i1, j1, k1-1) ==0).or.(sgg%med( media%sggMiHy(i1, j1, k1-1) )%is%pec)) .OR. & + & (sgg%Med( media%sggMiHy(i1, j1, k1-1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHz(i1, j1, k1-1) /=0).and.(.not.(sgg%med( sggmiHz(i1, j1, k1-1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHz(i1, j1, k1-1))%Is%ThinSlot)) + + oriY3 = (direccion == iEz) .AND. & + & ((( media%sggMiHy(i1-1, j1, k1) ==0).or.(sgg%med( media%sggMiHy(i1-1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHy(i1-1, j1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHx(i1-1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1-1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHx(i1-1, j1, k1))%Is%ThinSlot)) + + oriZ2 = (direccion == iEx) .AND. & + & ((( media%sggMiHz(i1, j1-1, k1) ==0).or.(sgg%med( media%sggMiHz(i1, j1-1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHz(i1, j1-1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHy(i1, j1-1, k1) /=0).and.(.not.(sgg%med( sggmiHy(i1, j1-1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHy(i1, j1-1, k1))%Is%ThinSlot)) + + + oriZ3 = (direccion == iEy) .AND. & + & ((( media%sggMiHz(i1-1, j1, k1) ==0).or.(sgg%med( media%sggMiHz(i1-1, j1, k1) )%is%pec)) .OR. & + & ( sgg%Med(media%sggMiHz(i1-1, j1, k1))%Is%ThinSlot)) !& + !& .AND. ((( sggmiHx(i1-1, j1, k1) /=0).and.(.not.(sgg%med( sggmiHx(i1-1, j1, k1) )%is%pec))) .AND. & + !& ( .NOT. sgg%Med(sggmiHx(i1-1, j1, k1))%Is%ThinSlot)) + + if (oriX.or.oriX4) then + orientacion = iEx + ELSE if (oriY.or.oriY4) then + orientacion = iEy + ELSE if (oriZ.or.oriZ4) then + orientacion = iEz + !vecinos + else if (oriX2) then + orientacion = iEx + k1 = k1-1 + ELSE if (oriY2) then + orientacion = iEy + k1 = k1-1 + ELSE if (oriZ2) then + orientacion = iEz + j1 = j1-1 + !vecinos + else if (oriX3) then + orientacion = iEx + j1 = j1-1 + ELSE if (oriY3) then + orientacion = iEy + i1 = i1-1 + ELSE if (oriZ3) then + orientacion = iEz + i1 = i1-1 + ELSE + write(buff,*) 'Cannot determine ortientation of the PEC plane with the Slot',i1, j1, k1, direccion + call stoponerror (layoutnumber,size,buff) + !ojo con el nfde no se puede hacer Slots en escalera porque no se puede determinar la orientacion de los planos + !en los tramos comunes. Por tanto No he podido testear los shared electricos anisotropos. solo los magneticos + end if + + this%tSlots%Tg(j)%TgC(i)%or = orientacion + medio2=-1 + medio1=-1 + SELECT CASE (Abs(orientacion)) + CASE (iEx) + medio1 = media%sggMiHx(i1,j1,k1) !!!sggmcen (i1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix !puede que me haya cargado los thin-slots en materialescon esto 03/07/15 + if (i1 > BoundingBox%XI) then + medio2 = media%sggMiHx(i1-1,j1,k1) !!!sggmcen (i1-1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix + else + medio2=medio1 + end if + CASE (iEy) + medio1 = media%sggMiHy(i1,j1,k1) !!!sggmcen (i1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix + if (j1 > BoundingBox%YI) then + medio2 = media%sggMiHy(i1,j1-1,k1) !!!sggmcen (i1, j1-1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix + else + medio2=medio1 + end if + CASE (iEz) + medio1 = media%sggMiHz(i1,j1,k1) !!!sggmcen (i1, j1, k1) !tocaco 03/07/15 para lo eliminar lo de los media matrix + if (k1 > BoundingBox%ZI) then + medio2 = media%sggMiHz(i1,j1,k1-1) !!! sggmcen (i1, j1, k1-1) !tocaco 03/07/15 para lo eliminar lo de los media matrix + else + medio2=medio1 + end if + end select + + if ( ((sgg%Med(medio1)%Is%Dielectric).or.(sgg%Med(medio1)%Is%Thinslot).or.(sgg%Med(medio1)%Is%Pec).or.(medio1 ==1 )).and. & + ((sgg%Med(medio2)%Is%Dielectric).or.(sgg%Med(medio2)%Is%Thinslot).or.(sgg%Med(medio2)%Is%Pec).or.(medio2 ==1 )) ) then + !average adjacent media + ! + epr1 = 0.5_RKIND * (sgg%Med(medio1)%Epr+sgg%Med(medio2)%Epr) + mur1 = 0.5_RKIND * (sgg%Med(medio1)%Mur+sgg%Med(medio2)%Mur) + ELSE + write(buff,*) 'Media around the Slot are not plain media: ', medio1, medio2 + CALL STOPONERROR(layoutnumber,size,buff) + end if + width = this%tSlots%Tg(j)%width + if (sgg%NumPlaneWaves == 1) then + !ojo no me gusta pq no es general + !assume the incident plane wave if there are planewaves + ! + dir (1) = px + dir (2) = py + dir (3) = pz + ELSE + !assume normal incidence + ! + SELECT CASE (Abs(orientacion)) + CASE (iEx) + dir (1) = 1.0_RKIND + dir (2) = 0.0_RKIND + dir (3) = 0.0_RKIND + CASE (iEy) + dir (1) = 0.0_RKIND + dir (2) = 1.0_RKIND + dir (3) = 0.0_RKIND + CASE (iEz) + dir (1) = 0.0_RKIND + dir (2) = 0.0_RKIND + dir (3) = 1.0_RKIND + end select + end if + call dmma_thin_Slot (sgg%dx(i1), sgg%dy(j1), sgg%dz(k1), dir, & + & orientacion, direccion, width, epr1, mur1, EprSlot, MurSlot,eps0,mu0) + ! y tocar el precounting if so + !chequear que son distintos para incrementar contamedia + ! + indicemedio = contamedia + 1 + buscaiguales: do ii = 1, contamedia + if (sgg%Med(ii)%Is%ThinSlot) then + iguales = .TRUE. + do j11 = 1, 3 + do i11 = 1, 3 + iguales = iguales .AND. (sgg%Med(ii)%Anisotropic(1)%Epr(i11, j11) == EprSlot(i11, j11)) .AND. & + & (sgg%Med(ii)%Anisotropic(1)%Mur(i11, j11) == MurSlot(i11, j11)) + end do + end do + if (iguales) then + indicemedio = ii + EXIT buscaiguales + end if + end if + end do buscaiguales + if (indicemedio == contamedia+1) then + contamedia = indicemedio + allocate(sgg%Med(contamedia)%Anisotropic(1)) + sgg%Med(contamedia)%Anisotropic(1)%Epr = EprSlot + sgg%Med(contamedia)%Anisotropic(1)%Mur = MurSlot + !lossless + sgg%Med(contamedia)%Anisotropic(1)%Sigma = 0.0_RKIND + sgg%Med(contamedia)%Anisotropic(1)%SigmaM = 0.0_RKIND + ! + sgg%Med(contamedia)%Epr = epr1 + sgg%Med(contamedia)%Mur = mur1 + sgg%Med(contamedia)%Sigma = 0.0_RKIND + sgg%Med(contamedia)%SigmaM = 0.0_RKIND + sgg%Med(contamedia)%Is%Anisotropic = .TRUE. + !just for signaling + sgg%Med(contamedia)%Is%ThinSlot = .TRUE. + sgg%Med(contamedia)%Priority = prior_TG + end if + ! + ! + !record coordinates + ! + punto%XI = i1 + punto%XE = i1 + punto%YI = j1 + punto%YE = j1 + punto%ZI = k1 + punto%ZE = k1 + numertag = searchtag(tagtype,this%tSlots%Tg(j)%TgC(i)%tag) + call CreateSurfaceSlotMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz,& + media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI,& + Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, & + Alloc_iEy_YI,& + Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, & + Alloc_iEz_ZI,& + Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, & + Alloc_iHy_XI,& + Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, & + Alloc_iHz_YI,& + Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, sgg%HShared, BoundingBox, & + punto, orientacion, direccion, indicemedio) + !del if esta dentro del bounding box + end if + end do + !thin Slots + end do + ! + end if !del run_with_dmma + + !debe ir al final para respetar el tipo de medio que haya SI SE TRATASE COMO A UN MEDIO + !nodalsource + !precounting + tama = this%nodsrc%n_nodSrc + !at most + allocate(contapuntos(tama*(this%nodsrc%n_C2p_max+this%nodsrc%n_C1p_max))) + contapuntos = 0 + conta1 = 0 + do i = 1, tama + conta2 = 0 + tama2 = this%nodsrc%NodalSource(i)%n_c1P + tama3 = this%nodsrc%NodalSource(i)%n_c2P + do ii = 1, tama2 + punto_s%or = this%nodsrc%NodalSource(i)%c1P(ii)%or + punto_s%XI = this%nodsrc%NodalSource(i)%c1P(ii)%XI + punto_s%XE = this%nodsrc%NodalSource(i)%c1P(ii)%XE + punto_s%YI = this%nodsrc%NodalSource(i)%c1P(ii)%YI + punto_s%YE = this%nodsrc%NodalSource(i)%c1P(ii)%YE + punto_s%ZI = this%nodsrc%NodalSource(i)%c1P(ii)%ZI + punto_s%ZE = this%nodsrc%NodalSource(i)%c1P(ii)%ZE + if ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) then + conta2 = conta2 + 1 + end if + end do + ! + ! + do ii = 1, tama3 + punto_s%or = this%nodsrc%NodalSource(i)%c2P(ii)%or + punto_s%XI = this%nodsrc%NodalSource(i)%c2P(ii)%XI + punto_s%XE = this%nodsrc%NodalSource(i)%c2P(ii)%XE + punto_s%YI = this%nodsrc%NodalSource(i)%c2P(ii)%YI + punto_s%YE = this%nodsrc%NodalSource(i)%c2P(ii)%YE + punto_s%ZI = this%nodsrc%NodalSource(i)%c2P(ii)%ZI + punto_s%ZE = this%nodsrc%NodalSource(i)%c2P(ii)%ZE + if ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) then + conta2 = conta2 + 1 + end if + end do + if (conta2 /= 0) then + conta1 = conta1 + 1 + contapuntos (conta1) = conta2 + end if + end do + sgg%NumNodalSources = conta1 + allocate(sgg%NodalSource(conta1)) + if (sgg%NumNodalSources /=0) contamedia =contamedia+1 + ! + conta1 = 0 + do i = 1, tama + if (contapuntos(i) /= 0) then + conta1 = conta1 + 1 + sgg%NodalSource(conta1)%numpuntos = contapuntos (conta1) + allocate(sgg%NodalSource(conta1)%punto(contapuntos(conta1))) + !initialization + do ii=1,contapuntos(conta1) + sgg%NodalSource(conta1)%punto(ii)%or = 0 + sgg%NodalSource(conta1)%punto(ii)%xc = 0.0_RKIND + sgg%NodalSource(conta1)%punto(ii)%yc = 0.0_RKIND + sgg%NodalSource(conta1)%punto(ii)%zc = 0.0_RKIND + sgg%NodalSource(conta1)%punto(ii)%XI = -1 + sgg%NodalSource(conta1)%punto(ii)%XE = -1 + sgg%NodalSource(conta1)%punto(ii)%YI = -1 + sgg%NodalSource(conta1)%punto(ii)%YE = -1 + sgg%NodalSource(conta1)%punto(ii)%ZI = -1 + sgg%NodalSource(conta1)%punto(ii)%ZE = -1 + end do + end if + end do + !asignacion + conta1 = 0 + do i = 1, tama + conta2 = 0 + if (contapuntos(i) /= 0) then + conta1 = conta1 + 1 + ! + sgg%NodalSource(conta1)%fichero%name = trim (adjustl(this%nodsrc%NodalSource(i)%nombre)) + sgg%NodalSource(conta1)%isElec = this%nodsrc%NodalSource(i)%isElec + sgg%NodalSource(conta1)%IsHard = this%nodsrc%NodalSource(i)%isHard + sgg%NodalSource(conta1)%IsInitialValue = this%nodsrc%NodalSource(i)%IsInitialValue + end if + ! + tama2 = this%nodsrc%NodalSource(i)%n_c1P + tama3 = this%nodsrc%NodalSource(i)%n_c2P + do ii = 1, tama2 + !!correct bounding box + punto_s%or = this%nodsrc%NodalSource(i)%c1P(ii)%or + punto_s%xc = this%nodsrc%NodalSource(i)%c1P(ii)%xc + punto_s%yc = this%nodsrc%NodalSource(i)%c1P(ii)%yc + punto_s%zc = this%nodsrc%NodalSource(i)%c1P(ii)%zc + ! + punto_s%XI = Max (this%nodsrc%NodalSource(i)%c1P(ii)%XI, Min(BoundingBox%XI, BoundingBox%XE)) + punto_s%YI = Max (this%nodsrc%NodalSource(i)%c1P(ii)%YI, Min(BoundingBox%YI, BoundingBox%YE)) + punto_s%ZI = Max (this%nodsrc%NodalSource(i)%c1P(ii)%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) + ! + punto_s%XE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%XE, Max(BoundingBox%XI, BoundingBox%XE)) + punto_s%YE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%YE, Max(BoundingBox%YI, BoundingBox%YE)) + if ((punto_s%zc /= 0).and.(this%nodsrc%NodalSource(i)%isElec)) then !only in case of Ez + punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE-1)) + else + punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE )) + end if + ! + ! + do k1 = punto_s%ZI, punto_s%ZE + do j1 = punto_s%YI, punto_s%YE + do i1 = punto_s%XI, punto_s%XE + if (punto_s%xc /= 0) then + !bug OLD 181214 sl_4_20mm_gli.nfde. Fuente nodal electrica embebida en pec y nodal magnetica en pmc se ignoraran sean hard or soft + MEDIO = media%sggMiEx (i1, j1, k1) + valido=.true. + !if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + ! & (sgg%Med(MEDIO)%Is%MDispersive) + !ELSE + ! VALIDO = .TRUE. + !end if + if (this%nodsrc%NodalSource(i)%isElec) then + VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) + end if + write (buff,*) 'WARNING: Ex Nodal source on PEC media will be ignored (', i1, j1, k1,')' + if ( .NOT. VALIDO) call WarnErrReport (buff) + ! + ! COMENTADO 250816 PQ DA UN ERROR JUISTO CUANDO CAE LA FUENTE EN UN CORTE MPI. HABRIA QU TOCA LA CASUISTICA DE punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c1P(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE )) PERO NO LO HE QUERIDO HACER + !!!MEDIO = sggmiHx (i1, j1, k1) + !!!valido=.true. + !!!!if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + !!!! & (sgg%Med(MEDIO)%Is%MDispersive) + !!!!ELSE + !!!! VALIDO = .TRUE. + !!!!end if + !!!if ( .NOT. this%nodsrc%NodalSource(i)%isElec) then + !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) + !!!end if + !!!write (buff,*) 'WARNING: Hx Nodal source on PMC media will be ignored (', i1, j1, k1,')' + !!!if ( .NOT. VALIDO) call WarnErrReport (buff) + end if + ! + ! + if (punto_s%yc /= 0) then + MEDIO = media%sggMiEy (i1, j1, k1) + valido=.true. + !if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + ! & (sgg%Med(MEDIO)%Is%MDispersive) + !ELSE + ! VALIDO = .TRUE. + !end if + if (this%nodsrc%NodalSource(i)%isElec) then + VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) + end if + write (buff,*) 'WARNING: Ey Nodal source on PMC media will be ignored (', i1, j1, k1,')' + if ( .NOT. VALIDO) call WarnErrReport (buff) + ! + ! + !!!MEDIO = sggmiHy (i1, j1, k1) + !!!valido=.true. + !!!!if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + !!!! & (sgg%Med(MEDIO)%Is%MDispersive) + !!!!ELSE + !!!! VALIDO = .TRUE. + !!!!end if + !!!if ( .NOT. this%nodsrc%NodalSource(i)%isElec) then + !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) + !!!end if + !!!write (buff,*) 'WARNING: Hy Nodal source on PMC media will be ignored (', i1, j1, k1,')' + !!!if ( .NOT. VALIDO) call WarnErrReport (buff) + end if + ! + ! + if (punto_s%zc /= 0) then + MEDIO = media%sggMiEz (i1, j1, k1) + valido=.true. + !if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + ! & (sgg%Med(MEDIO)%Is%MDispersive) + !ELSE + ! VALIDO = .TRUE. + !end if + if (this%nodsrc%NodalSource(i)%isElec) then + VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) + end if + write (buff,*) 'WARNING: Ez Nodal source on PMC media will be ignored (', i1, j1, k1,')' + if ( .NOT. VALIDO) call WarnErrReport (buff) + ! + ! + !!!MEDIO = sggmiHz (i1, j1, k1) + !!!valido=.true. + !!!!if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + !!!! & (sgg%Med(MEDIO)%Is%MDispersive) + !!!!ELSE + !!!! VALIDO = .TRUE. + !!!!end if + !!!if ( .NOT. this%nodsrc%NodalSource(i)%isElec) then + !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) + !!!end if + !!!write (buff,*) 'WARNING: Hz Nodal source on PMC media will be ignored (', i1, j1, k1,')' + !!!if ( .NOT. VALIDO) call WarnErrReport (buff) + end if + end do + end do + end do + ! + ! + if ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) then + conta2 = conta2 + 1 + sgg%NodalSource(conta1)%punto(conta2)%or = punto_s%or + sgg%NodalSource(conta1)%punto(conta2)%xc = punto_s%xc + sgg%NodalSource(conta1)%punto(conta2)%yc = punto_s%yc + sgg%NodalSource(conta1)%punto(conta2)%zc = punto_s%zc + sgg%NodalSource(conta1)%punto(conta2)%XI = punto_s%XI + sgg%NodalSource(conta1)%punto(conta2)%XE = punto_s%XE + sgg%NodalSource(conta1)%punto(conta2)%YI = punto_s%YI + sgg%NodalSource(conta1)%punto(conta2)%YE = punto_s%YE + sgg%NodalSource(conta1)%punto(conta2)%ZI = punto_s%ZI + sgg%NodalSource(conta1)%punto(conta2)%ZE = punto_s%ZE + !PARA ACOMODAR LAS NODAL SOURCE COMO MEDIOS LINE Y PODER VISUALIZAR SONDAS 010824 + sgg%Med(contamedia)%Is%Dielectric = .TRUE. + sgg%Med(contamedia)%Is%LINE = .TRUE. + sgg%Med(contamedia)%Priority = prior_IL + sgg%Med(contamedia)%Epr = 1.0 + sgg%Med(contamedia)%Sigma = 0. + sgg%Med(contamedia)%Mur = 1.0 + sgg%Med(contamedia)%SigmaM = 0. + punto%XI = punto_s%XI + punto%XE = punto_s%XE + punto%YI = punto_s%YI + punto%YE = punto_s%YE + punto%ZI = punto_s%ZI + punto%ZE = punto_s%ZE + orientacion = punto_s%or + isathinwire = .FALSE. + numertag = 37 + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + contamedia, isathinwire,verbose,numeroasignaciones) + end if + sgg%NodalSource(conta1)%numpuntos = conta2 !update with the correct value + end do + ! + ! + do ii = 1, tama3 + punto_s%or = this%nodsrc%NodalSource(i)%c2P(ii)%or + punto_s%XI = this%nodsrc%NodalSource(i)%c2P(ii)%XI + punto_s%XE = this%nodsrc%NodalSource(i)%c2P(ii)%XE + punto_s%YI = this%nodsrc%NodalSource(i)%c2P(ii)%YI + punto_s%YE = this%nodsrc%NodalSource(i)%c2P(ii)%YE + punto_s%ZI = this%nodsrc%NodalSource(i)%c2P(ii)%ZI + punto_s%ZE = this%nodsrc%NodalSource(i)%c2P(ii)%ZE + punto_s%xc = this%nodsrc%NodalSource(i)%c2P(ii)%xc + punto_s%yc = this%nodsrc%NodalSource(i)%c2P(ii)%yc + punto_s%zc = this%nodsrc%NodalSource(i)%c2P(ii)%zc + !!correct bounding box + punto_s%XI = Max (this%nodsrc%NodalSource(i)%c2p(ii)%XI, Min(BoundingBox%XI, BoundingBox%XE)) + punto_s%YI = Max (this%nodsrc%NodalSource(i)%c2p(ii)%YI, Min(BoundingBox%YI, BoundingBox%YE)) + punto_s%ZI = Max (this%nodsrc%NodalSource(i)%c2p(ii)%ZI, Min(BoundingBox%ZI, BoundingBox%ZE)) + ! + punto_s%XE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%XE, Max(BoundingBox%XI, BoundingBox%XE)) + punto_s%YE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%YE, Max(BoundingBox%YI, BoundingBox%YE)) + if ((punto_s%zc /= 0).and.(this%nodsrc%NodalSource(i)%isElec)) then !only in case of Ez + punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE-1)) + else + punto_s%ZE = Min (this%nodsrc%NodalSource(i)%c2p(ii)%ZE, Max(BoundingBox%ZI, BoundingBox%ZE )) + end if + ! + punto_s%or = this%nodsrc%NodalSource(i)%c2p(ii)%or + punto_s%xc = this%nodsrc%NodalSource(i)%c2p(ii)%xc + punto_s%yc = this%nodsrc%NodalSource(i)%c2p(ii)%yc + punto_s%zc = this%nodsrc%NodalSource(i)%c2p(ii)%zc + ! + ! + do k1 = punto_s%ZI, punto_s%ZE + do j1 = punto_s%YI, punto_s%YE + do i1 = punto_s%XI, punto_s%XE + if (punto_s%xc /= 0) then + MEDIO = media%sggMiEx (i1, j1, k1) + valido=.true. + !if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + ! & (sgg%Med(MEDIO)%Is%MDispersive) + !ELSE + ! VALIDO = .TRUE. + !end if + if (this%nodsrc%NodalSource(i)%isElec) then + VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) + end if + write (buff,*) 'WARNING: Ex Nodal source on PEC media will be ignored (', i1, j1, k1,')' + if ( .NOT. VALIDO) call WarnErrReport (buff) + ! + ! + ! + !!!MEDIO = sggmiHx (i1, j1, k1) + !!!valido=.true. + !!!!if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + !!!! & (sgg%Med(MEDIO)%Is%MDispersive) + !!!!ELSE + !!!! VALIDO = .TRUE. + !!!!end if + !!!if ( .NOT. this%nodsrc%NodalSource(i)%isElec) then + !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) + !!!end if + !!!write (buff,*) 'WARNING: Hx Nodal source on PMC media will be ignored (', i1, j1, k1,')' + !!!if ( .NOT. VALIDO) call WarnErrReport (buff) + end if + ! + ! + if (punto_s%yc /= 0) then + MEDIO = media%sggMiEy (i1, j1, k1) + valido=.true. + !if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + ! & (sgg%Med(MEDIO)%Is%MDispersive) + !ELSE + ! VALIDO = .TRUE. + !end if + if (this%nodsrc%NodalSource(i)%isElec) then + VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) + end if + write (buff,*) 'WARNING: Ey Nodal source on PMC media will be ignored (', i1, j1, k1,')' + if ( .NOT. VALIDO) call WarnErrReport (buff) + ! + ! + !!!MEDIO = sggmiHy (i1, j1, k1) + !!!valido=.true. + !!!!if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + !!!! & (sgg%Med(MEDIO)%Is%MDispersive) + !!!!ELSE + !!!! VALIDO = .TRUE. + !!!!end if + !!!if ( .NOT. this%nodsrc%NodalSource(i)%isElec) then + !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) + !!!end if + !!!write (buff,*) 'WARNING: Hy Nodal source on PMC media will be ignored (', i1, j1, k1,')' + !!!if ( .NOT. VALIDO) call WarnErrReport (buff) + end if + ! + ! + if (punto_s%zc /= 0) then + MEDIO = media%sggMiEz (i1, j1, k1) + valido=.true. + !if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + ! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + ! & (sgg%Med(MEDIO)%Is%MDispersive) + !ELSE + ! VALIDO = .TRUE. + !end if + if (this%nodsrc%NodalSource(i)%isElec) then + VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PEC) + end if + write (buff,*) 'WARNING: Ez Nodal source on PMC media will be ignored (', i1, j1, k1,')' + if ( .NOT. VALIDO) call WarnErrReport (buff) + ! + ! + !!!MEDIO = sggmiHz (i1, j1, k1) + !!!valido=.true. + !!!!if ( .NOT. this%nodsrc%NodalSource(i)%isHard) then + !!!! VALIDO = (sgg%Med(MEDIO)%Is%Dielectric) .OR. (sgg%Med(MEDIO)%Is%EDispersive) .OR. & + !!!! & (sgg%Med(MEDIO)%Is%MDispersive) + !!!!ELSE + !!!! VALIDO = .TRUE. + !!!!end if + !!!if ( .NOT. this%nodsrc%NodalSource(i)%isElec) then + !!! VALIDO = VALIDO .AND. ( .NOT. sgg%Med(MEDIO)%Is%PMC) + !!!end if + !!!write (buff,*) 'WARNING: Hz Nodal source on PMC media will be ignored (', i1, j1, k1,')' + !!!if ( .NOT. VALIDO) call WarnErrReport (buff) + end if + end do + end do + end do + ! + ! + if ((punto_s%XI <= punto_s%XE) .AND. (punto_s%YI <= punto_s%YE) .AND. (punto_s%ZI <= punto_s%ZE)) then + conta2 = conta2 + 1 + sgg%NodalSource(conta1)%punto(conta2)%or = punto_s%or + sgg%NodalSource(conta1)%punto(conta2)%xc = punto_s%xc + sgg%NodalSource(conta1)%punto(conta2)%yc = punto_s%yc + sgg%NodalSource(conta1)%punto(conta2)%zc = punto_s%zc + sgg%NodalSource(conta1)%punto(conta2)%XI = punto_s%XI + sgg%NodalSource(conta1)%punto(conta2)%XE = punto_s%XE + sgg%NodalSource(conta1)%punto(conta2)%YI = punto_s%YI + sgg%NodalSource(conta1)%punto(conta2)%YE = punto_s%YE + sgg%NodalSource(conta1)%punto(conta2)%ZI = punto_s%ZI + sgg%NodalSource(conta1)%punto(conta2)%ZE = punto_s%ZE + !PARA ACOMODAR LAS NODAL SOURCE COMO MEDIOS LINE Y PODER VISUALIZAR SONDAS 010824 + sgg%Med(contamedia)%Is%Dielectric = .TRUE. + sgg%Med(contamedia)%Is%LINE = .TRUE. + sgg%Med(contamedia)%Priority = prior_IL + sgg%Med(contamedia)%Epr = 1.0 + sgg%Med(contamedia)%Sigma = 0. + sgg%Med(contamedia)%Mur = 1.0 + sgg%Med(contamedia)%SigmaM = 0. + punto%XI = punto_s%XI + punto%XE = punto_s%XE + punto%YI = punto_s%YI + punto%YE = punto_s%YE + punto%ZI = punto_s%ZI + punto%ZE = punto_s%ZE + orientacion = punto_s%or + isathinwire = .FALSE. + numertag = 37 + call CreateLineMM (layoutnumber, media%sggMtag, tag_numbers, numertag, media%sggMiEx, media%sggMiEy, media%sggMiEz, & + media%sggMiHx, media%sggMiHy, media%sggMiHz, Alloc_iEx_XI, & + Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, & + Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, & + Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, & + Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & + Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & + contamedia, isathinwire,verbose,numeroasignaciones) + end if + sgg%NodalSource(conta1)%numpuntos = conta2 !update with the correct value + end do + end do + ! + if (allocated(contapuntos)) deallocate(contapuntos) + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!PROBES + !!!!!!!!!!!!!!!!!!!!!PROBES + !!!!!!!!!!!!!!!!!!!!!PROBES + !!!!!!!!!!!!!!!!!!!!!PROBES + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PRIMERO LAS CUENTO + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!MasSondas fields + ! + tamaScrPrb = this%VolPrb%length + if (createmapvtk) tamaScrPrb=tamaScrPrb+1 + tamaScrPrb = (tamaScrPrb)*3 !!!210618 allocateo el triple por si las volumicas son de tipo tifr mezcladas + tamaSonda = this%Sonda%length + tamaoldSONDA = this%oldSONDA%n_probes + tamaBloquePrb = this%BloquePRB%N_BP + !probes totales + sgg%NumberRequest = (tamaSonda) + (tamaoldSONDA) + (tamaBloquePrb) + (tamaScrPrb) + allocate(sgg%observation(1:sgg%NumberRequest)) + !inicializacion + sgg%observation(1:sgg%NumberRequest)%nP =-1 + sgg%observation(1:sgg%NumberRequest)%InitialTime =-1 + sgg%observation(1:sgg%NumberRequest)%FinalTime =-1 + sgg%observation(1:sgg%NumberRequest)%TimeStep =-1 + sgg%observation(1:sgg%NumberRequest)%InitialFreq =-1.0_RKIND + sgg%observation(1:sgg%NumberRequest)%FinalFreq =-1.0_RKIND + sgg%observation(1:sgg%NumberRequest)%FreqStep =-1.0_RKIND + sgg%observation(1:sgg%NumberRequest)%outputrequest =' ' + sgg%observation(1:sgg%NumberRequest)%FileNormalize =' ' + sgg%observation(1:sgg%NumberRequest)%FreqDomain =.false. + sgg%observation(1:sgg%NumberRequest)%TimeDomain =.false. + sgg%observation(1:sgg%NumberRequest)%Saveall =.false. + sgg%observation(1:sgg%NumberRequest)%TRANSFER =.false. + sgg%observation(1:sgg%NumberRequest)%Volumic =.false. + + ! + !ahora las cuento por bloques + ! + do i = 1, tamaSonda + ii = i + sgg%observation(ii)%nP = 0 + tama2 = (this%Sonda%collection(i)%len_cor) + do j = 1, tama2 + tipotemp = this%Sonda%collection(i)%cordinates(j)%or + punto%XI = this%Sonda%collection(i)%cordinates(j)%XI + punto%YI = this%Sonda%collection(i)%cordinates(j)%YI + punto%ZI = this%Sonda%collection(i)%cordinates(j)%ZI + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE) .AND. & + & ((tipotemp == NP_COR_EX) .OR. (tipotemp == NP_COR_EY) .OR. (tipotemp == NP_COR_EZ) .OR. & + & (tipotemp == NP_COR_HX) .OR. (tipotemp == NP_COR_HY) .OR. (tipotemp == NP_COR_HZ))) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + ELSE if (tipotemp == NP_COR_WIRECURRENT .or. tipotemp == NP_COR_CHARGE) then + nodo_cazado=.false. + loop_busqueda1: do j1 = 1, this%twires%n_tw + do i1 = 1, this%twires%TW(j1)%N_TWC + !nodo cazado + if (this%twires%TW(j1)%TWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) then + punto%XI = this%twires%TW(j1)%TWC(i1)%i + punto%YI = this%twires%TW(j1)%TWC(i1)%j + punto%ZI = this%twires%TW(j1)%TWC(i1)%k + nodo_cazado=.true. + ! + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE).AND.(punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + ! + SELECT CASE (this%twires%TW(j1)%TWC(i1)%D) + CASE (iEx, iEy, iEz) + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end select + EXIT loop_busqueda1 + end if + end if + end do + end do loop_busqueda1 + !si no lo ha cazado... probamos SLANTED + if (.not.nodo_cazado) then + loop_busqueda2: do j1 = 1, this%swires%n_sw + do i1 = 1, this%swires%SW(j1)%N_SWC + !nodo cazado + if (this%swires%SW(j1)%SWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) then + punto%XI = floor(this%swires%SW(j1)%SWC(i1)%x) + punto%YI = floor(this%swires%SW(j1)%SWC(i1)%y) + punto%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) + nodo_cazado=.true. + ! + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE).AND.(punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + ! + EXIT loop_busqueda2 + end if + end if + end do + end do loop_busqueda2 + end if + !si no lo ha cazado + if (.not.nodo_cazado) then + write(buff,'(a,i9)') 'Current probe not found in WIRE segment ',this%Sonda%collection(i)%cordinates(j)%XI + call StopOnError(layoutnumber,size,buff) + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_DDP) then + if (run_with_dmma) then + nodo_cazado=.false. + do_loop_busquedatg1: do j1 = 1, this%tSlots%n_tg + do i1 = 1, this%tSlots%Tg(j1)%N_tgc + !nodo cazado + if (this%tSlots%Tg(j1)%TgC(i1)%node == this%Sonda%collection(i)%cordinates(j)%XI) then + punto%XI = this%tSlots%Tg(j1)%TgC(i1)%i + punto%YI = this%tSlots%Tg(j1)%TgC(i1)%j + punto%ZI = this%tSlots%Tg(j1)%TgC(i1)%k + nodo_cazado=.true. + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + EXIT do_loop_busquedatg1 + end if + end if + end do + end do do_loop_busquedatg1 + !si no lo ha cazado + if (.not.nodo_cazado) then + write(buff,'(a,i9)') 'Voltage probe not found ',this%Sonda%collection(i)%cordinates(j)%XI + call StopOnError(layoutnumber,size,buff) + end if + else + write(buff,'(a,i9)') 'ERROR: Voltage probe in gaps only available under -dmma flag ' + call StopOnError(layoutnumber,size,buff) + end if !del run_with_dmma + else if (abs(tipotemp) == NP_COR_LINE) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end if + end do + end do + + !Sondas + ! + do i = 1, tamaoldSONDA + !acumulador + ii = i + tamaSonda + !far fields (no es time domain pero una forma especial de ellos) + tama2 = (this%oldSONDA%probes(i)%n_FarField) + if (tama2 > 1) then + buff='Only one Far Field probe allowed' + CALL STOPONERROR(layoutnumber,size,buff) + end if + if (tama2 > 0) sgg%observation(ii)%nP = 1 !un punto para todo el farfield (es simbolico) + !electric FIELDS + tama2 = (this%oldSONDA%probes(i)%n_Electric) + do j = 1, tama2 + tama3 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + tama4 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + tama5 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + tama6 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + buff='TAMANIOS DE PROBES EH RAROS' + if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & + & CALL STOPONERROR(layoutnumber,size,buff) + do k = 1, tama3 + punto%XI = this%oldSONDA%probes(i)%Electric(j)%probe%i(k) + punto%YI = this%oldSONDA%probes(i)%Electric(j)%probe%j(k) + punto%ZI = this%oldSONDA%probes(i)%Electric(j)%probe%k(k) + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 3 + end if + end do + end do + !MAGNETIC FIELDS + tama2 = (this%oldSONDA%probes(i)%n_Magnetic) + do j = 1, tama2 + tama3 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) + tama4 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) + tama5 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) + tama6 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) + buff='pre1_ERROR: TAMANIOS DE PROBES EH RAROS' + if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & + & CALL STOPONERROR(layoutnumber,size,buff) + do k = 1, tama3 + punto%XI = this%oldSONDA%probes(i)%Magnetic(j)%probe%i(k) + punto%YI = this%oldSONDA%probes(i)%Magnetic(j)%probe%j(k) + punto%ZI = this%oldSONDA%probes(i)%Magnetic(j)%probe%k(k) + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 3 + end if + end do + end do + end do + !Bloque Current Probes + ! + do i = 1, tamaBloquePrb + ii = i + tamaSonda + tamaoldSONDA + sgg%observation(ii)%nP = 0 + punto%XI = this%BloquePRB%BP(i)%i1 + punto%YI = this%BloquePRB%BP(i)%j1 + punto%ZI = this%BloquePRB%BP(i)%k1 + punto%XE = this%BloquePRB%BP(i)%I2 + punto%YE = this%BloquePRB%BP(i)%J2 + punto%ZE = this%BloquePRB%BP(i)%K2 + !!! + if (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. ((punto%YI >= BoundingBox%YI).OR. (punto%YI <= BoundingBox%YE)) .AND. & + ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. ((punto%XE >= BoundingBox%XI).OR. (punto%XE <= BoundingBox%XE)) .AND. & + ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. ((punto%ZE >= BoundingBox%ZI).OR. (punto%ZE <= BoundingBox%ZE))) then + SELECT CASE (this%BloquePRB%BP(i)%NML) + CASE (iEx) + do k = this%BloquePRB%BP(i)%i1, this%BloquePRB%BP(i)%I2, this%BloquePRB%BP(i)%skip + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end do + CASE (iEy) + do k = this%BloquePRB%BP(i)%j1, this%BloquePRB%BP(i)%J2, this%BloquePRB%BP(i)%skip + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end do + CASE (iEz) + do k = this%BloquePRB%BP(i)%k1, this%BloquePRB%BP(i)%K2, this%BloquePRB%BP(i)%skip + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end do + end select + end if + !DEL TAMA DEL Bloque CURRENT PROBES + end do + + !Volumic probes (similar to MasSondas PERO CON PUNTOS FINALES COMO LAS Bloque PROBES) + !ahora las cuento por bloques + do i = 1, tamaScrPrb/3 !!!210618 En realidad hay un tercio + ii = i + tamaSonda + tamaoldSONDA + tamaBloquePrb + sgg%observation(ii)%nP = 0 + ! crea una sonda vtk vacion con el instante incial 0 a efectos de mapa + if (createmapvtk.and.(i==tamaScrPrb/3)) then !!!210618 En realidad hay un tercio + tama2=1 + do j = 1, tama2 + tipotemp = mapvtk + punto%XI = SINPML_fullsize(iHx)%XI !!! +1 !ojo si se cambia aqui tambien mas abajo !le quito 1 para que con condiciones PEC no las pinte !habria que manejar el dibujo de las condiciones aparte + punto%YI = SINPML_fullsize(iHy)%YI !!! +1 + punto%ZI = SINPML_fullsize(iHz)%ZI !!! +1 + punto%XE = SINPML_fullsize(iHx)%XE !!! -1 + punto%YE = SINPML_fullsize(iHy)%YE !!! -1 + punto%ZE = SINPML_fullsize(iHz)%ZE !!! -1 +!!! print *,layoutnumber,punto%XI,punto%YI,punto%ZI,punto%XE,punto%YE,punto%ZE + if (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. & + & ((punto%YI >= BoundingBox%YI) .OR. (punto%YI <= BoundingBox%YE)) .AND. & + & ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & + & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. & + & ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. & + & ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) then +!!! print *,'----Dentro->',layoutnumber,punto%XI,punto%YI,punto%ZI,punto%XE,punto%YE,punto%ZE + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end if + end do + else + tama2 = (this%VolPrb%collection(i)%len_cor) + do j = 1, tama2 + tipotemp = this%VolPrb%collection(i)%cordinates(j)%or + punto%XI = this%VolPrb%collection(i)%cordinates(j)%XI + punto%YI = this%VolPrb%collection(i)%cordinates(j)%YI + punto%ZI = this%VolPrb%collection(i)%cordinates(j)%ZI + punto%XE = this%VolPrb%collection(i)%cordinates(j)%XE + punto%YE = this%VolPrb%collection(i)%cordinates(j)%YE + punto%ZE = this%VolPrb%collection(i)%cordinates(j)%ZE + + if (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. ((punto%YI >= BoundingBox%YI) .OR. & + & (punto%YI <= BoundingBox%YE)) .AND. ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & + & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. ((punto%YE >= BoundingBox%YI) .OR. & + & (punto%YE <= BoundingBox%YE)) .AND. ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) then + + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + end if + end do + end if + end do + ! si se lanza con -mapvtk se crea una slice probe para ver la estructura + + !Ahora creo los puntos de observacion + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + sondas = 0 + do ii = 1, sgg%NumberRequest + sondas = sondas + sgg%observation(ii)%nP + end do + ! + if (sondas > Maxprobes) then + write(buff,*) 'Too many probes= ', sondas, 'Either or reduce the number of probes below ', & + & Maxprobes + CALL STOPONERROR(layoutnumber,size,buff) + end if + if (sondas > 1024) then + write(buff,*) 'Number of probes ', & + & ' is over 1024. UNIX limit is typically 1024'// & + ' Check! It will crash if ulimit -n is not set > ', sondas + call WarnErrReport(buff) + end if + + !luego chequeo las memoria de las sondas si se van de memoria en observation.f90 + ! if (sondas*BuffObse*4 > MaxMemoryProbes) then + ! write(buff,*) 'Too much memory for the probes= ', sondas * BuffObse * 4, 'Probes= ', sondas, & + ! & 'Either reduce the number o& + ! &f probes or recompile decreasing BuffObse ', BuffObse, 'or increasing ', MaxMemoryProbes + ! CALL STOPONERROR(layoutnumber,size,buff) + ! end if + ! + if (sgg%NumberRequest /= 0) then + !alocateo + do ii = 1, sgg%NumberRequest + allocate(sgg%observation(ii)%P(1:sgg%observation(ii)%nP)) + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing !bug peligroso 2012 + sgg%observation(ii)%TimeDomain = .false. + sgg%observation(ii)%FreqDomain = .FALSE. + sgg%observation(ii)%TRANSFER = .FALSE. + sgg%observation(ii)%Volumic = .FALSE. + sgg%observation(ii)%FileNormalize=' ' + !trancos + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Xtrancos = 1 !default + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ytrancos = 1 !default + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ztrancos = 1 !default + !fin trancos + !al final debe quedar igual + !lo reseteo porque lo reutilizo de contador + sgg%observation(ii)%nP=0 !reset it + ! + end do + do i = 1, tamaSonda + ii = i + tama2 = (this%Sonda%collection(i)%len_cor) + ! + SELECT CASE (this%Sonda%collection(i)%type2) + CASE (NP_T2_time) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .FALSE. + sgg%observation(ii)%TRANSFER = .FALSE. + CASE (NP_T2_FREQ) + !I will output everything in time and transform it later + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .FALSE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_TRANSFER) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + buff='Transfer function only in Frequency Domain' + !! CALL STOPONERROR(layoutnumber,size,buff) + CASE (NP_T2_TIMEFREQ ) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .FALSE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_TIMETRANSF) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_FREQTRANSF) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_TIMEFRECTRANSF) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + end select + !repair info + ! + if (sgg%observation(ii)%FreqDomain) then + !save everything for later transform + sgg%observation(ii)%Saveall = .TRUE. + end if + if ((this%Sonda%collection(i)%type1 == NP_T1_AMBOS)) then + sgg%observation(ii)%Saveall = .TRUE. + sgg%observation(ii)%TimeDomain = .TRUE. + ELSE + continue + end if + ! + write(probenumber, '(i7)') ii + ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & + ! trim(adjustl(this%Sonda%collection(i)%outputrequest)) + sgg%observation(ii)%outputrequest = trim (adjustl(this%Sonda%collection(i)%outputrequest)) + sgg%observation(ii)%InitialTime = this%Sonda%collection(i)%tstart + sgg%observation(ii)%FinalTime = this%Sonda%collection(i)%tstop + sgg%observation(ii)%TimeStep = this%Sonda%collection(i)%tstep + if ((sgg%observation(ii)%FinalTime= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEx + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_EY) then + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEy + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_EZ) then + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEz + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_HX) then + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHx + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_HY) then + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHy + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_HZ) then + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHz + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT .or. & + this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + nodo_cazado=.false. + do_loop_busqueda: do j1 = 1, this%twires%n_tw + do i1 = 1, this%twires%TW(j1)%N_TWC + !nodo cazado + if (this%twires%TW(j1)%TWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) then + nodo_cazado=.true. + punto%XI = this%twires%TW(j1)%TWC(i1)%i + punto%YI = this%twires%TW(j1)%TWC(i1)%j + punto%ZI = this%twires%TW(j1)%TWC(i1)%k + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. & + & (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + SELECT CASE (this%twires%TW(j1)%TWC(i1)%D) + CASE (iEx) + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%twires%TW(j1)%TWC(i1)%nd + sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI + sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI + sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJx + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQx + end if + + !se nota con un indice distinto + ! + CASE (iEy) + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%twires%TW(j1)%TWC(i1)%nd + sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI + sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI + sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJy + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQy + end if + CASE (iEz) + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%twires%TW(j1)%TWC(i1)%nd + sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI + sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI + sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJz + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQz + end if + end select + EXIT do_loop_busqueda + end if + end if + end do + end do do_loop_busqueda + if (.not.nodo_cazado) then + do_loop_busqueda3: do j1 = 1, this%swires%n_sw + do i1 = 1, this%swires%SW(j1)%N_SWC + if (this%swires%SW(j1)%SWC(i1)%nd == this%Sonda%collection(i)%cordinates(j)%XI) then + nodo_cazado=.true. + punto%XI = floor(this%swires%SW(j1)%SWC(i1)%x) + punto%YI = floor(this%swires%SW(j1)%SWC(i1)%y) + punto%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. & + & (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%swires%SW(j1)%SWC(i1)%nd + sgg%observation(i)%P(sgg%observation(i)%nP)%XI = floor(this%swires%SW(j1)%SWC(i1)%x) + sgg%observation(i)%P(sgg%observation(i)%nP)%YI = floor(this%swires%SW(j1)%SWC(i1)%y) + sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJx + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQx + end if + EXIT do_loop_busqueda3 + end if + end if + end do + end do do_loop_busqueda3 + end if + ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_DDP) then + do_loop_busquedatg: do j1 = 1, this%tSlots%n_tg + do i1 = 1, this%tSlots%Tg(j1)%N_tgc + !nodo cazado + if (this%tSlots%Tg(j1)%TgC(i1)%node == this%Sonda%collection(i)%cordinates(j)%XI) then + punto%XI = this%tSlots%Tg(j1)%TgC(i1)%i + punto%YI = this%tSlots%Tg(j1)%TgC(i1)%j + punto%ZI = this%tSlots%Tg(j1)%TgC(i1)%k + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. & + & (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + sgg%observation(i)%P(sgg%observation(i)%nP)%node = this%tSlots%Tg(j1)%TgC(i1)%node + sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI + sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI + sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI + direccion = this%tSlots%Tg(j1)%TgC(i1)%dir + SELECT CASE (this%tSlots%Tg(j1)%TgC(i1)%or) + CASE (iEx) + SELECT CASE (direccion) + CASE (iEz) + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVy + CASE (iEy) + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVz + end select + CASE (iEy) + SELECT CASE (direccion) + CASE (iEx) + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVz + CASE (iEz) + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVx + end select + CASE (iEz) + SELECT CASE (direccion) + CASE (iEy) + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVx + CASE (iEx) + sgg%observation(i)%P(sgg%observation(i)%nP)%What = iVy + end select + end select + EXIT do_loop_busquedatg + end if + end if + end do + end do do_loop_busquedatg + else if (abs(this%Sonda%collection(i)%cordinates(j)%or) == NP_COR_LINE) then + block + integer(kind=4) :: line_size, obs_size, idx + !intrinsic size function coopted by size global variable... + line_size = ubound(this%Sonda%collection(i)%cordinates,1)-lbound(this%Sonda%collection(i)%cordinates,1)+1 + sgg%observation(i)%nP = sgg%observation(i)%nP + 1 + obs_size = sgg%observation(i)%nP + allocate(sgg%observation(i)%P(obs_size)%line(line_size)) + sgg%observation(i)%P(obs_size)%What = lineIntegral + do idx = 1, line_size + sgg%observation(i)%P(obs_size)%line(idx)%x = this%Sonda%collection(i)%cordinates(idx)%Xi + sgg%observation(i)%P(obs_size)%line(idx)%y = this%Sonda%collection(i)%cordinates(idx)%Yi + sgg%observation(i)%P(obs_size)%line(idx)%z = this%Sonda%collection(i)%cordinates(idx)%Zi + if (this%Sonda%collection(i)%cordinates(idx)%Xe /= -1) then + sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(1, this%Sonda%collection(i)%cordinates(idx)%or) + else if (this%Sonda%collection(i)%cordinates(idx)%Ye /= -1) then + sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(2, this%Sonda%collection(i)%cordinates(idx)%or) + else if (this%Sonda%collection(i)%cordinates(idx)%Ze /= -1) then + sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(3, this%Sonda%collection(i)%cordinates(idx)%or) + end if + end do + sgg%observation(i)%P(obs_size)%XI = sgg%observation(i)%P(obs_size)%line(1)%x + sgg%observation(i)%P(obs_size)%YI = sgg%observation(i)%P(obs_size)%line(1)%y + sgg%observation(i)%P(obs_size)%ZI = sgg%observation(i)%P(obs_size)%line(1)%z + end block + end if + end do + end do + ! + !Sondas propiamente dichas + ! + do i = 1, tamaoldSONDA + ii = i + tamaSonda + !only the MasSondas accept the freqdomain + sgg%observation(ii)%TimeDomain = .TRUE. !NO CONSIDERO EL FARFIELD FREQDOMAIN PQ LA TRATO BIEN COMO TIMEDOMAIN Y NO QUIERO JODERLA !26/02/14 + sgg%observation(ii)%FreqDomain = .FALSE. + sgg%observation(ii)%TRANSFER = .FALSE. + !farfields (no es time domain pero una forma especial de ellos) + tama2 = (this%oldSONDA%probes(i)%n_FarField) + write(buff,*) 'More than 1 Far Field box unsupported' + IF (tama2 > 1) CALL STOPONERROR(layoutnumber,size,buff) + ! + do j = 1, tama2 + tama3 = (this%oldSONDA%probes(i)%FarField(j)%probe%n_cord) + buff='FAR FIELD PROBE REQUIRES TWO COORDINATES FOR THE BOX' + IF (tama3 /= 2) CALL STOPONERROR(layoutnumber,size,buff) + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + punto%XI = this%oldSONDA%probes(i)%FarField(j)%probe%i(1) + punto%YI = this%oldSONDA%probes(i)%FarField(j)%probe%j(1) + punto%ZI = this%oldSONDA%probes(i)%FarField(j)%probe%k(1) + punto%XE = this%oldSONDA%probes(i)%FarField(j)%probe%i(2) + punto%YE = this%oldSONDA%probes(i)%FarField(j)%probe%j(2) + punto%ZE = this%oldSONDA%probes(i)%FarField(j)%probe%k(2) + ! + sgg%observation(ii)%P(1)%XI = punto%XI + sgg%observation(ii)%P(1)%YI = punto%YI + sgg%observation(ii)%P(1)%ZI = punto%ZI + sgg%observation(ii)%P(1)%XE = punto%XE + sgg%observation(ii)%P(1)%YE = punto%YE + sgg%observation(ii)%P(1)%ZE = punto%ZE + sgg%observation(ii)%P(1)%what = farfield + ! + !no se clipea porque se manejan como ondas planas + ! + sgg%observation(ii)%InitialFreq =this%oldSONDA%probes(i)%FarField(j)%probe%fstart + sgg%observation(ii)%FinalFreq =this%oldSONDA%probes(i)%FarField(j)%probe%fstop + sgg%observation(ii)%FreqStep =this%oldSONDA%probes(i)%FarField(j)%probe%fstep + ! + sgg%observation(ii)%thetaStart =this%oldSONDA%probes(i)%FarField(j)%probe%thetaStart + sgg%observation(ii)%thetaStop =this%oldSONDA%probes(i)%FarField(j)%probe%thetaStop + sgg%observation(ii)%thetaStep =this%oldSONDA%probes(i)%FarField(j)%probe%thetaStep + ! + sgg%observation(ii)%phiStart =this%oldSONDA%probes(i)%FarField(j)%probe%phiStart + sgg%observation(ii)%phiStop =this%oldSONDA%probes(i)%FarField(j)%probe%phiStop + sgg%observation(ii)%phiStep =this%oldSONDA%probes(i)%FarField(j)%probe%phiStep + sgg%observation(ii)%FileNormalize =this%oldSONDA%probes(i)%FarField(j)%probe%FileNormalize + + sgg%observation(ii)%outputrequest=trim(adjustl(this%oldSONDA%probes(i)%FarField(j)%probe%outputrequest)) + + if ((sgg%observation(ii)%InitialFreq < 0.).or. & + (sgg%observation(ii)%FinalFreq <= 1e-9).or. & + (sgg%observation(ii)%FreqStep <= 1e-9)) then + write(buff,*) 'ERROR: Some incorrect frequency domain parameters (initial,final,step) ',sgg%observation(ii)%InitialFreq,sgg%observation(ii)%FinalFreq,sgg%observation(ii)%FreqStep + if (sgg%observation(ii)%FreqDomain) CALL STOPONERROR(layoutnumber,size,buff) + end if + ! + + end do + !electric FIELDS + tama2 = (this%oldSONDA%probes(i)%n_Electric) + do j = 1, tama2 + tama3 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + tama4 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + tama5 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + tama6 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) + buff='TAMANIOS DE PROBES EH RAROS' + if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & + & CALL STOPONERROR(layoutnumber,size,buff) + write(probenumber, '(i7)') ii + do k = 1, tama3 + punto%XI = this%oldSONDA%probes(i)%Electric(j)%probe%i(k) + punto%YI = this%oldSONDA%probes(i)%Electric(j)%probe%j(k) + punto%ZI = this%oldSONDA%probes(i)%Electric(j)%probe%k(k) + if ((punto%XI >= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEx + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEy + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iEz + ! + ! + sgg%observation(ii)%InitialTime = this%oldSONDA%probes(i)%Electric(j)%probe%tstart + sgg%observation(ii)%FinalTime = this%oldSONDA%probes(i)%Electric(j)%probe%tstop + sgg%observation(ii)%TimeStep = this%oldSONDA%probes(i)%Electric(j)%probe%tstep + if ((sgg%observation(ii)%FinalTime= BoundingBox%XI) .AND. (punto%XI <= BoundingBox%XE) .AND. (punto%YI >= BoundingBox%YI) .AND. & + & (punto%YI <= BoundingBox%YE) .AND. (punto%ZI >= BoundingBox%ZI) .AND. (punto%ZI <= BoundingBox%ZE)) then + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHx + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHy + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%What = iHz + ! + ! + sgg%observation(ii)%InitialTime = this%oldSONDA%probes(i)%Magnetic(j)%probe%tstart + sgg%observation(ii)%FinalTime = this%oldSONDA%probes(i)%Magnetic(j)%probe%tstop + sgg%observation(ii)%TimeStep = this%oldSONDA%probes(i)%Magnetic(j)%probe%tstep + + if ((sgg%observation(ii)%FinalTime= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. ((punto%YI >= BoundingBox%YI) .OR. & + & (punto%YI <= BoundingBox%YE)) .AND. ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & + & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. ((punto%YE >= BoundingBox%YI) .OR. & + & (punto%YE <= BoundingBox%YE)) .AND. ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) then + ! + !!!ANIADIDO 15/07/15 PARA COMPATIBILIDD NEW PROBE EN FRECUENCIA + SELECT CASE (this%BloquePRB%BP(i)%type2) + CASE (NP_T2_time) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .FALSE. + sgg%observation(ii)%TRANSFER = .FALSE. + CASE (NP_T2_FREQ) + !I will output everything in time and transform it later + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .FALSE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_TRANSFER) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + buff='Transfer function only in Frequency Domain' + !! CALL STOPONERROR(layoutnumber,size,buff) + CASE (NP_T2_TIMEFREQ ) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .FALSE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_TIMETRANSF) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_FREQTRANSF) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + CASE (NP_T2_TIMEFRECTRANSF) + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .TRUE. + sgg%observation(ii)%TRANSFER = .TRUE. + end select + !repair info + ! + if (sgg%observation(ii)%FreqDomain) then + !save everything for later transform + sgg%observation(ii)%Saveall = .TRUE. + end if + !!! end if + ! + write(probenumber, '(i7)') ii + ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & + ! trim(adjustl(this%BloquePRB%BP(i)%outputrequest)) + sgg%observation(ii)%outputrequest = trim (adjustl(this%BloquePRB%BP(i)%outputrequest)) + sgg%observation(ii)%InitialTime = this%BloquePRB%BP(i)%tstart + sgg%observation(ii)%FinalTime = this%BloquePRB%BP(i)%tstop + sgg%observation(ii)%TimeStep = this%BloquePRB%BP(i)%tstep + if ((sgg%observation(ii)%FinalTime1 ) then + write(buff,*) 'Only 1 Volumic probe allown per section' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do j = 1, tama2 + !I clip these probes to allow out-of-the box snapshot probes !ojo si se cambia aqui tambien mas arriba + tipotemp = mapvtk + punto%XI = SINPML_fullsize(iHx)%XI !!! +1 + punto%YI = SINPML_fullsize(iHy)%YI !!! +1 + punto%ZI = SINPML_fullsize(iHz)%ZI !!! +1 + punto%XE = SINPML_fullsize(iHx)%XE !!! -1 + punto%YE = SINPML_fullsize(iHy)%YE !!! -1 + punto%ZE = SINPML_fullsize(iHz)%ZE !!! -1 + + memo=memo+(punto%XE-punto%XI+1)*(punto%YE-punto%YI+1)*(punto%ZE-punto%ZI+1) + + if (( (punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. & + & ((punto%YI >= BoundingBox%YI) .OR. (punto%YI <= BoundingBox%YE)) .AND. & + & ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & + & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. & + & ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. & + & ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) then + + ! + write(probenumber, '(i7)') ii + ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & + ! trim(adjustl(this%BloquePrb%BP(i)%outputrequest)) + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XE = punto%XE + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YE = punto%YE + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZE = punto%ZE + sgg%observation(ii)%P(sgg%observation(ii)%nP)%what = tipotemp + end if + end do +!!!!210618 tambien se crrean extras dummy para los vtk + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + if (associated(this%VolPrb%collection).and.(tamaScrPrb/=0).and.(i<=this%VolPrb%length)) then !280618 & 220319 + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + else + sgg%observation( tamaScrPrb/3+ii)%outputrequest=' ' !es un dummy mapvtk sin nombre 280618 + end if + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. + if (associated(this%VolPrb%collection).and.(tamaScrPrb/=0).and.(i<=this%VolPrb%length)) then !280618 & 220319 + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + else + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=' ' !es un dummy mapvtk sin nombre 280618 + end if + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing + +!!!210618 triplica info sondas de frequencia + sgg%observation(tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic + sgg%observation(tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime + sgg%observation(tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime + sgg%observation(tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep + sgg%observation(tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq + sgg%observation(tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq + sgg%observation(tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep + sgg%observation(tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE + ! + !trancos + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Xtrancos = 1 !default + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ytrancos = 1 !default + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ztrancos = 1 !default + !fin trancos + + !!!!!!!!!!!!!!!!!! + sgg%observation(2*tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic + sgg%observation(2*tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime + sgg%observation(2*tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime + sgg%observation(2*tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep + sgg%observation(2*tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq + sgg%observation(2*tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq + sgg%observation(2*tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep + sgg%observation(2*tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE + ! + !trancos + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Xtrancos = 1 !default + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ytrancos = 1 !default + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ztrancos = 1 !default + !fin trancos + + else !del mapvtk +!!!210618 + sgg%observation(ii)%Volumic = .true. + sgg%observation(ii)%InitialTime = this%VolPrb%collection(i)%tstart + sgg%observation(ii)%FinalTime = this%VolPrb%collection(i)%tstop + sgg%observation(ii)%TimeStep = this%VolPrb%collection(i)%tstep + sgg%observation(ii)%outputrequest = trim (adjustl( this%VolPrb%collection(i)%outputrequest)) + sgg%observation(ii)%InitialFreq = this%VolPrb%collection(i)%fstart + sgg%observation(ii)%FinalFreq = this%VolPrb%collection(i)%fstop + sgg%observation(ii)%FreqStep = this%VolPrb%collection(i)%fstep + sgg%observation(ii)%FileNormalize = trim (adjustl(this%VolPrb%collection(i)%filename)) + sgg%observation(ii)%nP = 0 + tama2 = (this%VolPrb%collection(i)%len_cor) + if (tama2 >1 ) then + write(buff,*) 'Only 1 Volumic probe allown per section' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do j = 1, tama2 + !I clip these probes to allow out-of-the box snapshot probes + tipotemp = this%VolPrb%collection(i)%cordinates(j)%or + punto%XI = max(this%VolPrb%collection(i)%cordinates(j)%XI,SINPML_fullsize(iEx)%XI) + punto%YI = max(this%VolPrb%collection(i)%cordinates(j)%YI,SINPML_fullsize(iEy)%YI) + punto%ZI = max(this%VolPrb%collection(i)%cordinates(j)%ZI,SINPML_fullsize(iEz)%ZI) + punto%XE = min(this%VolPrb%collection(i)%cordinates(j)%XE,SINPML_fullsize(iEx)%XE) + punto%YE = min(this%VolPrb%collection(i)%cordinates(j)%YE,SINPML_fullsize(iEy)%YE) + punto%ZE = min(this%VolPrb%collection(i)%cordinates(j)%ZE,SINPML_fullsize(iEz)%ZE) + memo=memo+(punto%XE-punto%XI+1)*(punto%YE-punto%YI+1)*(punto%ZE-punto%ZI+1) + + if (((punto%XI >= BoundingBox%XI) .OR. (punto%XI <= BoundingBox%XE)) .AND. & + & ((punto%YI >= BoundingBox%YI) .OR. (punto%YI <= BoundingBox%YE)) .AND. & + & ((punto%ZI >= BoundingBox%ZI) .OR. (punto%ZI <= BoundingBox%ZE)) .AND. & + & ((punto%XE >= BoundingBox%XI) .OR. (punto%XE <= BoundingBox%XE)) .AND. & + & ((punto%YE >= BoundingBox%YI) .OR. (punto%YE <= BoundingBox%YE)) .AND. & + & ((punto%ZE >= BoundingBox%ZI) .OR. (punto%ZE <= BoundingBox%ZE))) then + + ! + write(probenumber, '(i7)') ii + ! sgg%observation(ii)%outputrequest=trim(adjustl(probenumber))//'_'// & + ! trim(adjustl(this%BloquePrb%BP(i)%outputrequest)) + ! + sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XI = punto%XI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YI = punto%YI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZI = punto%ZI + sgg%observation(ii)%P(sgg%observation(ii)%nP)%XE = punto%XE + sgg%observation(ii)%P(sgg%observation(ii)%nP)%YE = punto%YE + sgg%observation(ii)%P(sgg%observation(ii)%nP)%ZE = punto%ZE + !trancos + sgg%observation(ii)%P(sgg%observation(ii)%nP)%Xtrancos = this%VolPrb%collection(i)%cordinates(sgg%observation(ii)%nP)%Xtrancos + sgg%observation(ii)%P(sgg%observation(ii)%nP)%Ytrancos = this%VolPrb%collection(i)%cordinates(sgg%observation(ii)%nP)%Ytrancos + sgg%observation(ii)%P(sgg%observation(ii)%nP)%Ztrancos = this%VolPrb%collection(i)%cordinates(sgg%observation(ii)%nP)%Ztrancos + !fin trancos + + end if + end do +! + SELECT CASE (this%VolPrb%collection(i)%type2) + CASE (NP_T2_time) + + sgg%observation(ii)%TimeDomain = .TRUE. + sgg%observation(ii)%FreqDomain = .FALSE. + sgg%observation(ii)%TRANSFER = .FALSE. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing +! + CASE (NP_T2_FREQ) + !I will TRANSFORM ON THE FLY + sgg%observation(ii)%TimeDomain = .false. + sgg%observation(ii)%FreqDomain = .false. + sgg%observation(ii)%TRANSFER = .false. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing !el nothing debe predominar +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing +! + CASE (NP_T2_TRANSFER) + !I will TRANSFORM ON THE FLY + sgg%observation(ii)%TimeDomain = .false. + sgg%observation(ii)%FreqDomain = .false. + sgg%observation(ii)%TRANSFER = .false. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing !el nothing predomina sobre los true anteriores +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp + CASE (NP_T2_TIMEFREQ ) + sgg%observation(ii)%TimeDomain = .true. + sgg%observation(ii)%FreqDomain = .false. + sgg%observation(ii)%TRANSFER = .false. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp !el nothing predomina sobre los true anteriores +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = nothing + CASE (NP_T2_TIMETRANSF) + sgg%observation(ii)%TimeDomain = .true. + sgg%observation(ii)%FreqDomain = .false. + sgg%observation(ii)%TRANSFER = .false. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp !el nothing predomina sobre los true anteriores +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = nothing +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp + CASE (NP_T2_FREQTRANSF) + sgg%observation(ii)%TimeDomain = .false. + sgg%observation(ii)%FreqDomain = .false. + sgg%observation(ii)%TRANSFER = .false. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=nothing +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp +! + CASE (NP_T2_TIMEFRECTRANSF) + sgg%observation(ii)%TimeDomain = .true. + sgg%observation(ii)%FreqDomain = .false. + sgg%observation(ii)%TRANSFER = .false. + sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%what=tipotemp +! + sgg%observation( tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation( tamaScrPrb/3+ii)%FreqDomain = .TRUE. + sgg%observation( tamaScrPrb/3+ii)%TRANSFER = .false. + sgg%observation( tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_df_' + sgg%observation( tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)) + sgg%observation( tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%what = tipotemp +! + sgg%observation(2*tamaScrPrb/3+ii)%TimeDomain = .false. + sgg%observation(2*tamaScrPrb/3+ii)%FreqDomain = .true. + sgg%observation(2*tamaScrPrb/3+ii)%TRANSFER = .true. + sgg%observation(2*tamaScrPrb/3+ii)%outputrequest=trim (adjustl( this%VolPrb%collection(i)%outputrequest))//'_tr_' + sgg%observation(2*tamaScrPrb/3+ii)%nP= sgg%observation( ii)%np + allocate(sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)) + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%what = tipotemp +! + end select +!!!210618 triplica info sondas de frequencia + sgg%observation(tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic + sgg%observation(tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime + sgg%observation(tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime + sgg%observation(tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep + sgg%observation(tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq + sgg%observation(tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq + sgg%observation(tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep + sgg%observation(tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE + !trancos + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Xtrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Xtrancos + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ytrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ytrancos + sgg%observation(tamaScrPrb/3+ii)%P(1:sgg%observation( tamaScrPrb/3+ii)%nP)%Ztrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ztrancos + !fin trancos + !!!!!!!!!!!!!!!!!! + sgg%observation(2*tamaScrPrb/3+ii)%Volumic = sgg%observation(ii)%Volumic + sgg%observation(2*tamaScrPrb/3+ii)%InitialTime = sgg%observation(ii)%InitialTime + sgg%observation(2*tamaScrPrb/3+ii)%FinalTime = sgg%observation(ii)%FinalTime + sgg%observation(2*tamaScrPrb/3+ii)%TimeStep = sgg%observation(ii)%TimeStep + sgg%observation(2*tamaScrPrb/3+ii)%InitialFreq = sgg%observation(ii)%InitialFreq + sgg%observation(2*tamaScrPrb/3+ii)%FinalFreq = sgg%observation(ii)%FinalFreq + sgg%observation(2*tamaScrPrb/3+ii)%FreqStep = sgg%observation(ii)%FreqStep + sgg%observation(2*tamaScrPrb/3+ii)%FileNormalize = sgg%observation(ii)%FileNormalize + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XI + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YI + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZI = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZI + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%XE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%XE + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%YE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%YE + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%ZE = sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%ZE + !trancos + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Xtrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Xtrancos + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ytrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ytrancos + sgg%observation(2*tamaScrPrb/3+ii)%P(1:sgg%observation(2*tamaScrPrb/3+ii)%nP)%Ztrancos =sgg%observation(ii)%P(1:sgg%observation(ii)%nP)%Ztrancos + !fin trancos + +!!!210618 +!!!find 210618 + end if + !DE LAS VolumicPROBLES + end do +!!!210618 + do i = tamaScrPrb/3+1,tamaScrPrb + ii = i + tamaSonda + tamaoldSONDA + tamaBloquePrb !Bug 040718 + if (sgg%observation(ii)%nP /=1) then +!para 040718 + write(buff,*) '----> Volumic probe ii. np=',sgg%observation(ii)%nP + call print11 (layoutnumber, buff) + write(buff,*) '----> Volumic probe ii. outputrequest=',trim(adjustl(sgg%observation(ii)%outputrequest)) + call print11 (layoutnumber, buff) +!fin para debugear + write(buff,*) 'Buggy error in Volumic probes. np/=1. , np=',sgg%observation(ii)%nP + CALL STOPONERROR(layoutnumber,size,buff) + end if + end do +!!!find 210618 + + !luego chequeo las sondas si se van de memoria en observation.f90 + ! if ((memo+sondas)*BuffObse*4 > MaxMemoryProbes) then + ! write(buff,*) 'Too much memory for the probes= ', (memo+sondas)*BuffObse*4, 'Probes= ', (memo+sondas), & + ! & 'Either reduce the number of probes or recompile decreasing BuffObse ', BuffObse, 'or increasing ', MaxMemoryProbes + ! CALL STOPONERROR(layoutnumber,size,buff) + ! end if + + !del if sgg%numberrequest + end if + !las lineas goto 8 que sigue la comento a 27/10/14 porque "creo" que la informacion de shared es necesaria actualizarse + !este bug aparece en bug_OLD221014_a400m_skindepth en Modelo.nfde + !!!goto 8 !!!!? + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !Update the number of the shared fields + if (updateshared) then !!aqui se pierde mucho tiempo aniadido flag -noshared para evitarlo 040717 + write(buff,*) 'INIT UPDATING SHARED INFO. This process may take time!' + call print11 (layoutnumber, buff) + write(buff,*) 'Launch with -noshared to skip this process (just relevant for structured NIBC CFCs and Anisot.)' + call print11 (layoutnumber, buff) + do i1 = 1, sgg%EShared%conta + do j1 = i1 + 1, sgg%EShared%conta + if ((sgg%Med(sgg%EShared%elem(i1)%SharedMed)%Priority == sgg%Med(sgg%EShared%elem(j1)%SharedMed)%Priority) .AND. & + & (sgg%EShared%elem(i1)%field == sgg%EShared%elem(j1)%field) .AND. (sgg%EShared%elem(i1)%i == sgg%EShared%elem(j1)%i) & + & .AND. (sgg%EShared%elem(i1)%j == sgg%EShared%elem(j1)%j) .AND. (sgg%EShared%elem(i1)%k == sgg%EShared%elem(j1)%k)) & + & then + sgg%EShared%elem(i1)%times = sgg%EShared%elem(i1)%times + 1 + sgg%EShared%elem(j1)%times = sgg%EShared%elem(j1)%times + 1 + !!!!!!!! write (17,*) i1,j1,sgg%EShared%elem(j1)%times,sgg%Med(sgg%EShared%elem(j1)%SharedMed)%Priority + if (sgg%EShared%elem(j1)%times > 4) then + write(buff,'(a,4i5)') 'WARNING: More than 4 media try to occupy ', sgg%EShared%elem(j1)%field,sgg%EShared%elem(j1)%i, & + sgg%EShared%elem(j1)%j, sgg%EShared%elem(j1)%k + if ( ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%thinwire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%thinwire)).and. & + ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%SlantedWire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%SlantedWire)).or.verbose) call WarnErrReport (buff) + end if + end if + end do + end do + !Update the number of the shared fields + do i1 = 1, sgg%HShared%conta + do j1 = i1 + 1, sgg%HShared%conta + if ((sgg%Med(sgg%HShared%elem(i1)%SharedMed)%Priority == sgg%Med(sgg%HShared%elem(j1)%SharedMed)%Priority) .AND. & + & (sgg%HShared%elem(i1)%field == sgg%HShared%elem(j1)%field) .AND. (sgg%HShared%elem(i1)%i == sgg%HShared%elem(j1)%i) & + & .AND. (sgg%HShared%elem(i1)%j == sgg%HShared%elem(j1)%j) .AND. (sgg%HShared%elem(i1)%k == sgg%HShared%elem(j1)%k)) & + & then + sgg%HShared%elem(i1)%times = sgg%HShared%elem(i1)%times + 1 + sgg%HShared%elem(j1)%times = sgg%HShared%elem(j1)%times + 1 + if (sgg%HShared%elem(j1)%times > 4) then + write(buff,'(a,4i5)') 'WARNING: More than 4 media try to occupy ', sgg%hShared%elem(j1)%field,sgg%HShared%elem(j1)%i, & + sgg%HShared%elem(j1)%j, sgg%HShared%elem(j1)%k + if ( ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%thinwire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%thinwire)).and. & + ((.not.sgg%Med(sgg%EShared%elem(i1)%SharedMed)%is%SlantedWire).and.(.not.sgg%Med(sgg%EShared%elem(j1)%SharedMed)%is%SlantedWire)).or.verbose) call WarnErrReport (buff) + end if + end if + end do + end do + !end shared +8 continue + write(buff,*) '[OK] END UPDATING SHARED INFO' + call print11 (layoutnumber, buff) + end if !del updateshared + + !PARA LA CAPA EXTRA 2013 + if (medioextra%exists) then + CONTAMEDIA = CONTAMEDIA+1 + if (MEDIOEXTRA%index /= contamedia) then !should be already done earlier + CALL STOPONERROR(layoutnumber,size,'Bug in media count. ') + end if + MEDIOEXTRA%index=CONTAMEDIA + end if + !!!!!!!!!!!!! + if (contamedia > sgg%AllocMed) then + call Readjust(sgg%AllocMed, sgg%Med, contamedia) + end if + sgg%NumMedia = contamedia + !el medio 0 no precisa compresion + + + if ((CLIPREGION)) then !ALLOW four cells OF AIR CELLS TO CLIP LARGE PROBLES WITH NO PROBLEMS WITH BOUNDARIES solo sin MPI + do field=1,6 + do K= sgg%Alloc(field)%ZI , sgg%Alloc(field)%ZE + do J= sgg%Alloc(field)%YI , sgg%Alloc(field)%YE + do I= sgg%Alloc(field)%XI , sgg%Alloc(field)%XE + if ( (i>=sinpml_FULLSIZE(field)%XI) .AND.(i<=sinpml_FULLSIZE(field)%XI+4).OR. & + (i>=sinpml_FULLSIZE(field)%XE-4).AND.(i<=sinpml_FULLSIZE(field)%XE ).OR. & + (J>=sinpml_FULLSIZE(field)%YI) .AND.(j<=sinpml_FULLSIZE(field)%YI+4).OR. & + (J>=sinpml_FULLSIZE(field)%YE-4).AND.(j<=sinpml_FULLSIZE(field)%YE ).OR. & + (K>=sinpml_FULLSIZE(field)%ZI) .AND.(K<=sinpml_FULLSIZE(field)%ZI+4).OR. & + (K>=sinpml_FULLSIZE(field)%ZE-4).AND.(K<=sinpml_FULLSIZE(field)%ZE )) then + select case (field) + case (iEx) + media%sggMIEX(I,J,K)=1 + case (iEy) + media%sggMIEY(I,J,K)=1 + case (iEz) + media%sggMIEZ(I,J,K)=1 + case (iHx) + media%sggMiHX(I,J,K)=1 + case (iHy) + media%sggMiHY(I,J,K)=1 + case (iHz) + media%sggMiHZ(I,J,K)=1 + end select + end if + end do + end do + end do + end do !del field + end if !del CLIPREGION + + !!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!fin clipeado + !!!!!!!!!!!!!!!!!!!!!!!!!!!! + CALL CreatePMLmatrix (layoutnumber, SIZE,sgg,media%sggMiEx,media%sggMiEy,media%sggMiEz,media%sggMiHx,media%sggMiHy,media%sggMiHz, SINPML_fullsize, fullsize, BoundingBox, sgg%Med, sgg%NumMedia, sgg%Border,MEDIOEXTRA) + sgg%EndPMLMedia = sgg%NumMedia + + ! +#ifdef CompileWithInt1 + if (sgg%NumMedia > 127) then + CLOSE (14) + if (sgg%NumMedia > 32767) then + buff='Number of media>32767. Recompile with #define CompileWithInt4' + CALL STOPONERROR(layoutnumber,size,buff) + ELSE + buff='Number of media>127. Recompile with #define CompileWithInt2' + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if +#endif +#ifdef CompileWithInt2 + if (sgg%NumMedia > 32767) then + CLOSE (14) + buff='Number of media>32767. Recompile with #define CompileWithInt4' + CALL STOPONERROR(layoutnumber,size,buff) + end if +#endif +#ifdef CompileWithInt4 + if (sgg%NumMedia > 2.0e9) then + CLOSE (14) + buff='Number of media>2^31-1. Cannot continue. ' + CALL STOPONERROR(layoutnumber,size,buff) + end if +#endif + !read the source files + ! + call read_TIMEFRECTRANSFsourcefiles(simu_devia) + ! + do ii = 1, tamaSonda + !Read the time normalization file + ! + if (sgg%observation(ii)%TRANSFER) then + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%observation(ii)%FileNormalize)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%observation(ii)%FileNormalize))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + ! + end do +!!!!ajusta el flag lossy de los medios (261115) !aunque ya esta hecho por ahi arriba, lo rehago aqui +!!!!Ojo con que el usuario siempre ponga conductividad en !!compo para que esto no reviente +!!!mamma mia. comentado lo siguiente a 120123 para que las puestas a lossy thin wire conectado con resistor sean correctas. bug test_GGGbugresis_wire_stoch_foragasconbug + !!!do i = 1, sgg%NumMedia + !!! if ( (.not.(sgg%med(i)%is%PEC)).and.(sgg%med(i)%sigma >= 1e-4) ) then + !!! sgg%med(i)%is%lossy = .true. + !!! else + !!! sgg%med(i)%is%lossy = .false. + !!! end if + !!!end do + !!!fin 120123 +!!!!!! + !!!!!!!!!!do a final check if magnetic media are present + !sgg jun'12 dejarlo siempre a .true. pq es lo mas seguro + !sgg%thereAreMagneticMedia=.false. + !sgg%thereArePMLMagneticMedia=.false. + !medioespecial = .false. + !do ii=1,sgg%NumMedia + ! buff='PEC media can only have index 0' + ! IF (sgg%Med(ii)%Is%PEC.or.sgg%Med(ii)%Is%Lumped) call STOPONERROR(layoutnumber,size,buff) + ! medioespecial =medioespecial .or. & + ! sgg%Med(ii)%Is%EDispersive .or. & + ! sgg%Med(ii)%Is%multiport .or. & + ! sgg%Med(ii)%Is%AnisMultiport .or. & + ! sgg%Med(ii)%Is%Anisotropic .or. & + ! sgg%Med(ii)%Is%ThinSlot .or. & + ! sgg%Med(ii)%Is%MDispersive + !end do + !if (.not.medioespecial) then + ! do ii=1,sgg%NumMedia + ! if ((SGG%Med(ii)%mur >1.001).or.(SGG%Med(ii)%mur <0.999).or. & + ! (abs(SGG%Med(ii)%sigmam) >1.0e-3_RKIND0)) then + ! if (.not. sgg%Med(ii)%Is%PML ) then + ! sgg%thereAreMagneticMedia=.true. + ! else + ! sgg%thereArePMLMagneticMedia=.true. + ! end if + ! end if + ! end do + !else + sgg%thereAreMagneticMedia=.true. + sgg%thereArePMLMagneticMedia=.true. + !end if + !!!!!!!!!!!!!!!!!!!!!!!!!!!!! + return + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + contains + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + function computeConformalTimeFactor(volumes, surfaces) result(res) + type(ConformalMedia_t), allocatable, dimension(:), intent(in) :: volumes, surfaces + real(kind=rkind) :: res + integer :: t + res = 1.0 + do t = 1, ubound(volumes,1) + if (volumes(t)%time_step_scale_factor < res) then + res = volumes(t)%time_step_scale_factor + end if + end do + do t = 1, ubound(surfaces,1) + if (surfaces(t)%time_step_scale_factor < res) then + res = surfaces(t)%time_step_scale_factor + end if + end do + end function + + function changeTimeStepIfConformalNeeded(sgg_dt) result(res) + real(kind=RKIND_tiempo), intent(in) :: sgg_dt + real(kind=RKIND_tiempo) :: yee_dt, time_scale_factor + real(kind=RKIND_tiempo) :: res + time_scale_factor = computeConformalTimeFactor(conformal_volumes, conformal_surfaces) + yee_dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & + ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & + ((1.0_RKIND / minval(sgg%DZ))**2.0_RKIND )))) + if (sgg_dt > yee_dt*time_scale_factor) then + write(*,*) '-- Conformal geometry requires a time step change' + write(*,*) 'Previous time step: ', sgg_dt + res = yee_dt*time_scale_factor + write(*,*) 'New time step: ', res + else + res = sgg_dt + end if + + end function + + subroutine initConformalBoundingBox(sgg, bbox) + type(SGGFDTDINFO_t), intent(in) :: sgg + type(XYZlimit_t), intent(inout) :: bbox + bbox%XI = -sgg%Alloc(iHx)%XI + bbox%XE = -sgg%Alloc(iHx)%XE + bbox%YI = -sgg%Alloc(iHy)%YI + bbox%YE = -sgg%Alloc(iHy)%YE + bbox%ZI = -sgg%Alloc(iHz)%ZI + bbox%ZE = -sgg%Alloc(iHz)%ZE + end subroutine + + subroutine getDifferentEdgeRatios(ratios, conf_media) + real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media + integer :: i, j, k + real(kind=rkind), dimension(:), allocatable :: aux + logical :: isNew + if (.not. allocated(ratios)) allocate(ratios(0)) + do i = 1, ubound(conf_media,1) + do j = 1, ubound(conf_media(i)%edge_media,1) + isNew = .true. + do k = 1, ubound(ratios,1) + if (eq_ratio(ratios(k), conf_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. + end do + if (isNew) then + block + if (ubound(ratios,1) == 0) then + deallocate(ratios) + allocate(ratios(1)) + ratios(1) = conf_media(i)%edge_media(j)%ratio + else + if (allocated(aux)) deallocate(aux) + allocate(aux(ubound(ratios,1) + 1)) + aux(1:ubound(ratios,1)) = ratios + aux(ubound(ratios,1) + 1) = conf_media(i)%edge_media(j)%ratio + deallocate(ratios) + allocate(ratios(ubound(aux,1))) + ratios = aux + end if + end block + end if + end do + end do + end subroutine + subroutine getDifferentFaceRatios(ratios, conf_media) + real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media + integer :: i, j, k + real(kind=rkind), dimension(:), allocatable :: aux + logical :: isNew + if (.not. allocated(ratios)) allocate(ratios(0)) + do i = 1, ubound(conf_media,1) + do j = 1, ubound(conf_media(i)%face_media,1) + + isNew = .true. + do k = 1, ubound(ratios,1) + if (eq_ratio(ratios(k), conf_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. + end do + if (isNew) then + block + if (ubound(ratios,1) == 0) then + deallocate(ratios) + allocate(ratios(1)) + ratios(1) = conf_media(i)%face_media(j)%ratio + else + if (allocated(aux)) deallocate(aux) + allocate(aux(ubound(ratios,1) + 1)) + aux(1:ubound(ratios,1)) = ratios + aux(ubound(ratios,1) + 1) = conf_media(i)%face_media(j)%ratio + deallocate(ratios) + allocate(ratios(ubound(aux,1))) + ratios = aux + end if + end block + end if + end do + end do + end subroutine + + subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map, type) + type(SGGFDTDINFO_t), intent(inout) :: sgg + type(media_matrices_t), intent(inout) :: media + type(ConformalMedia_t), intent(in) :: conformal_volumes + real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios + real(kind=rkind), dimension(:), allocatable :: edge_ratios_no_zero, face_ratios_no_zero + integer(kind=4), intent(in) :: contamedia + integer(kind=4) :: num_media + type(XYZlimit_t), intent(inout) :: bbox + type(side_tris_map_t), intent(in) :: side_map + integer (kind=4) :: type + integer :: i, j + call initConformalBoundingBox(sgg,bbox) + + if (findloc(edge_ratios, 0.0, 1) /= 0) then + allocate(edge_ratios_no_zero(ubound(edge_ratios,1) - 1)) + k = 0 + do j = 1, ubound(edge_ratios,1) + if (edge_ratios(j) /= 0) then + k = k + 1 + edge_ratios_no_zero(k) = edge_ratios(j) + end if + end do + else + edge_ratios_no_zero = edge_ratios + end if + + if (findloc(face_ratios, 0.0, 1) /= 0) then + allocate(face_ratios_no_zero(ubound(face_ratios,1) - 1)) + k = 0 + do j = 1, ubound(face_ratios,1) + if (face_ratios(j) /= 0) then + k = k + 1 + face_ratios_no_zero(k) = face_ratios(j) + end if + end do + else + face_ratios_no_zero = face_ratios + end if + num_media = contamedia + call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, type) + num_media = contamedia + ubound(edge_ratios_no_zero,1) + call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox, type) + if (type == isVolume) then + call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) + end if + end subroutine + + subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + type(media_matrices_t), intent(inout) :: media + type(ConformalMedia_t), intent(in) :: conformal_volumes + integer(kind=4), intent(in) :: num_media + real(kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios + + integer(kind=4) :: face_media + integer(kind=4) :: cell(3) + integer (kind=4) :: previous_faces + type(face_t), dimension(:), allocatable :: combined_faces + type(XYZlimit_t), intent(inout) :: bbox + integer (kind=4), intent(in) :: type + integer :: j, k + do j = 1, conformal_volumes%n_faces_media + if (conformal_volumes%face_media(j)%ratio /= 0) then + face_media = num_media + findloc(face_ratios, conformal_volumes%face_media(j)%ratio, 1) + sgg%Med(face_media)%Is%ConformalPEC = .TRUE. + sgg%Med(face_media)%Is%Needed = .TRUE. + if (type == isVolume) sgg%Med(face_media)%Is%Volume = .TRUE. + if (type == isSurface) sgg%Med(face_media)%Is%Surface = .TRUE. + sgg%Med(face_media)%Priority = prior_PEC + sgg%Med(face_media)%Epr = this%mats%mats(1)%eps / Eps0 + sgg%Med(face_media)%Sigma = 1.0e29_RKIND + sgg%Med(face_media)%Mur = conformal_volumes%face_media(j)%ratio * this%mats%mats(1)%mu / Mu0 + sgg%Med(face_media)%SigmaM = 0.0_RKIND + else + face_media = 0 + end if + + previous_faces = 0 + if (allocated(sgg%Med(face_media)%ConformalFace)) previous_faces = ubound(sgg%Med(face_media)%ConformalFace, 1) + allocate(combined_faces(previous_faces + conformal_volumes%face_media(j)%size)) + if (previous_faces > 0) combined_faces(1:previous_faces) = sgg%Med(face_media)%ConformalFace + + do k = 1, conformal_volumes%face_media(j)%size + cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) + if (cell(1) < bbox%xi) bbox%xi = cell(1) + if (cell(1) > bbox%xe) bbox%xe = cell(1) + if (cell(2) < bbox%yi) bbox%yi = cell(2) + if (cell(2) > bbox%ye) bbox%ye = cell(2) + if (cell(3) < bbox%zi) bbox%zi = cell(3) + if (cell(3) > bbox%ze) bbox%ze = cell(3) + + select case(conformal_volumes%face_media(j)%faces(k)%direction) + case(F_X) + media%sggMiHx(cell(1), cell(2), cell(3)) = face_media + case(F_Y) + media%sggMiHy(cell(1), cell(2), cell(3)) = face_media + case(F_Z) + media%sggMiHz(cell(1), cell(2), cell(3)) = face_media + end select + + combined_faces(previous_faces+k) = conformal_volumes%face_media(j)%faces(k) + + end do + call move_alloc(combined_faces, sgg%Med(face_media)%ConformalFace) + end do + end subroutine + + + + function getEdgeNormalFromTriangles(triangles) result(res) + type(triangle_t), dimension(:), allocatable :: triangles + real, dimension(3) :: res + integer :: i + res(:) = 0.0 + do i = 1, ubound(triangles, 1) + res = res + triangles(i)%getNormal() + end do + res = res/ubound(triangles,1) + end function + + subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, type) + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + type(media_matrices_t), intent(inout) :: media + type(ConformalMedia_t), intent(in) :: conformal_volumes + integer(kind=4), intent(in) :: num_media + + real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios + integer(kind=4) :: edge_media + integer(kind=4) :: cell(3) + integer (kind=4) :: previous_edges + type(edge_t), dimension(:), allocatable :: combined_edges + type(XYZlimit_t), intent(inout) :: bbox + integer (kind=4), intent(in) :: type + ! integer(kind=4), dimension(4) :: key + integer :: j, k + real, dimension(3) :: normal + + do j = 1, conformal_volumes%n_edges_media + if (conformal_volumes%edge_media(j)%ratio /= 0) then + edge_media = num_media + findloc(edge_ratios, conformal_volumes%edge_media(j)%ratio,1) + sgg%Med(edge_media)%Is%ConformalPEC = .TRUE. + sgg%Med(edge_media)%Is%Needed = .TRUE. + if (type == isVolume) sgg%Med(edge_media)%Is%Volume = .TRUE. + if (type == isSurface) sgg%Med(edge_media)%Is%Surface = .TRUE. + sgg%Med(edge_media)%Priority = prior_PEC + sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_volumes%edge_media(j)%ratio ) / Eps0 + sgg%Med(edge_media)%Sigma = 1.0e29_RKIND + sgg%Med(edge_media)%Mur = this%mats%mats(1)%mu / Mu0 + sgg%Med(edge_media)%SigmaM = 0.0_RKIND + else + edge_media = 0 + end if + + previous_edges = 0 + if (allocated(sgg%Med(edge_media)%ConformalEdge)) previous_edges = ubound(sgg%Med(edge_media)%ConformalEdge, 1) + allocate(combined_edges(previous_edges + conformal_volumes%edge_media(j)%size)) + if (previous_edges > 0) combined_edges(1:previous_edges) = sgg%Med(edge_media)%ConformalEdge + + + do k = 1, conformal_volumes%edge_media(j)%size + cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) + + if (cell(1) < bbox%xi) bbox%xi = cell(1) + if (cell(1) > bbox%xe) bbox%xe = cell(1) + if (cell(2) < bbox%yi) bbox%yi = cell(2) + if (cell(2) > bbox%ye) bbox%ye = cell(2) + if (cell(3) < bbox%zi) bbox%zi = cell(3) + if (cell(3) > bbox%ze) bbox%ze = cell(3) + + select case(conformal_volumes%edge_media(j)%edges(k)%direction) + case(E_X) + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + case(E_Y) + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + case(E_Z) + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + end select + + combined_edges(previous_edges+k) = conformal_volumes%edge_media(j)%edges(k) + + + end do + call move_alloc(combined_edges, sgg%Med(edge_media)%ConformalEdge) + end do + end subroutine + + subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + type(media_matrices_t), intent(inout) :: media + type(ConformalMedia_t), intent(in) :: conformal_volumes + integer(kind=4), intent(in) :: num_media + + real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios + integer(kind=4) :: edge_media + integer(kind=4) :: cell(3) + type(XYZlimit_t), intent(inout) :: bbox + type(side_tris_map_t), intent(in) :: side_map + type(triangle_t), dimension(:), allocatable :: tris + integer(kind=4), dimension(4) :: key + integer :: j, k + real, dimension(3) :: normal + + do j = 1, conformal_volumes%n_edges_media + if (conformal_volumes%edge_media(j)%ratio == 0) then + edge_media = 0 + do k = 1, conformal_volumes%edge_media(j)%size + cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) + key(1:3) = cell + + select case(conformal_volumes%edge_media(j)%edges(k)%direction) + case(E_X) + key(4) = E_X + if (side_map%hasKey(key)) then + tris = side_map%getTrianglesFromSide(key) + normal = getEdgeNormalFromTriangles(tris) + if (normal(2) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHz(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2)+1, cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1)+1, cell(2), cell(3)) = edge_media + else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then + media%sggMiHz(cell(1), cell(2)-1, cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2)-1, cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2)-1, cell(3)) = edge_media + media%sggMiEy(cell(1)+1, cell(2)-1, cell(3)) = edge_media + end if + + if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)+1) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1)+1, cell(2), cell(3)) = edge_media + + else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then + media%sggMiHy(cell(1), cell(2), cell(3)-1) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)-1) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)-1) = edge_media + media%sggMiEz(cell(1)+1, cell(2), cell(3)-1) = edge_media + + end if + end if + case(E_Y) + key(4) = E_Y + if (edge_media == 0 .and. side_map%hasKey(key)) then + tris = side_map%getTrianglesFromSide(key) + normal = getEdgeNormalFromTriangles(tris) + if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)+1) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1), cell(2)+1, cell(3)) = edge_media + else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then + media%sggMiHx(cell(1), cell(2), cell(3)-1) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)-1) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)-1) = edge_media + media%sggMiEz(cell(1), cell(2)+1, cell(3)-1) = edge_media + end if + + if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHz(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2)+1, cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1)+1, cell(2), cell(3)) = edge_media + else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHz(cell(1)-1, cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1)-1, cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1)-1, cell(2)+1, cell(3)) = edge_media + media%sggMiEy(cell(1)-1, cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + end if + end if + case(E_Z) + key(4) = E_Z + if (edge_media == 0 .and. side_map%hasKey(key)) then + tris = side_map%getTrianglesFromSide(key) + normal = getEdgeNormalFromTriangles(tris) + if (normal(2) < 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2), cell(3)+1) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1), cell(2)+1, cell(3)) = edge_media + else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then + media%sggMiHx(cell(1), cell(2)-1, cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2)-1, cell(3)) = edge_media + media%sggMiEy(cell(1), cell(2)-1, cell(3)+1) = edge_media + media%sggMiEz(cell(1), cell(2)-1, cell(3)) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + end if + if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHy(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1), cell(2), cell(3)+1) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1)+1, cell(2), cell(3)) = edge_media + else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then + media%sggMiHy(cell(1)-1, cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1)-1, cell(2), cell(3)) = edge_media + media%sggMiEx(cell(1)-1, cell(2), cell(3)+1) = edge_media + media%sggMiEz(cell(1)-1, cell(2), cell(3)) = edge_media + media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media + end if + end if + end select + end do + end if + end do + end subroutine + + subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) + logical :: simu_devia + real(kind=RKIND) :: deviafactor_Multiplier,unillo,tiempoant + if (simu_devia) then + deviafactor_Multiplier=1.0_RKIND !correccion de 160619. gestiono la iluminacion o no con la variable simu_devia, para que postprocese bien los ficheros devia_ !deprecar deviafactor_Multiplier algun dia + ELSE + deviafactor_Multiplier=1.0_RKIND + end if +!!!! SOURCES IN WIRES + maxSourceValue=0.0_RKIND + minSpaceStep=min(min(minval(sgg%dx),minval(sgg%dy)),minval(sgg%dz)) + do i = 1, sgg%NumMedia + if (sgg%Med(i)%Is%ThinWire) then + if (sgg%Med(i)%wire(1)%VsourceExists) then + do CONTAVOLT=1,sgg%Med(i)%wire(1)%NUMVOLTAGESOURCES + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%name))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + open(15, file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)),action='read') + READ (15,*) tiempo1, field1 + READ (15,*) tiempo2, field2 + sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%deltaSamples = tiempo2 - tiempo1 + nsurfs = 3 + !problemas con multivac + ! while (.not.eof(15)) + DO + READ (15,*, end=77) tiempo1, field1 + if (field1/minspacestep > maxSourceValue) maxSourceValue=field1/minspacestep + nsurfs = nsurfs + 1 + end do +77 continue + CLOSE (15) + numus = nsurfs - 2 + sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NumSamples = numus + allocate(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(0:numus)) + open(15, file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)),action='read') + do k = 0, numus + tiempoant=tiempo1 + READ (15,*) tiempo1, sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(k) + sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(k) = sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%Samples(k) * & + & sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%Multiplier * & + deviafactor_Multiplier + !!evitar sampleos no uniformes + if ((k>1).and.(k1.0_RKIND/0.9)) then + if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo + buff=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' + if (.not.ignoresamplingerrors) then + CLOSE(15) + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + end if + end if + end do + CLOSE (15) + sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NumSamples = numus + end do + end if + end if + if (sgg%Med(i)%Is%ThinWire) then + if (sgg%Med(i)%wire(1)%IsourceExists) then + do CONTACURR=1,sgg%Med(i)%wire(1)%NUMCURRENTSOURCES + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%name))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + open(15, file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)),action='read') + READ (15,*) tiempo1, field1 + READ (15,*) tiempo2, field2 + sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%deltaSamples = tiempo2 - tiempo1 + nsurfs = 3 + !problemas con multivac + ! while (.not.eof(15)) + DO + READ (15,*, end=79) tiempo1, field1 + if (field1/minspacestep**2.0_RKIND > maxSourceValue) maxSourceValue=field1/minspacestep**2.0_RKIND !aqui no tengo feeling, pero estas fuentes no se usan !!? repensar + nsurfs = nsurfs + 1 + end do +79 continue + CLOSE (15) + numus = nsurfs - 2 + sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NumSamples = numus + allocate(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(0:numus)) + open(15, file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)),action='read') + do k = 0, numus + tiempoant=tiempo1 + READ (15,*) tiempo1, sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(k) + sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(k) = sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%Samples(k) * & + & sgg%Med(i)%wire(1)%ISource(CONTACURR)%Multiplier * & + deviafactor_Multiplier + !!evitar sampleos no uniformes + if ((k>1).and.(k1.0_RKIND/0.9)) then + if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo + buff=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' + if (.not.ignoresamplingerrors) then + CLOSE(15) + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + end if + end if + !! + end do + CLOSE (15) + sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NumSamples = numus + end do + end if + end if + ! + if (sgg%Med(i)%Is%SlantedWire) then + do j = 1,sgg%Med(i)%SlantedWire(1)%numNodes + if (sgg%Med(i)%SlantedWire(1)%nodes(j)%VsourceExists) then + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%name))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + open(15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)),action='read') + READ (15,*) tiempo1, field1 + READ (15,*) tiempo2, field2 + sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%deltaSamples = tiempo2 - tiempo1 + nsurfs = 3 + !problemas con multivac + ! while (.not.eof(15)) + DO + READ (15,*, end=179) tiempo1, field1 + if (field1/minspacestep > maxSourceValue) maxSourceValue=field1/minspacestep + nsurfs = nsurfs + 1 + end do +179 continue + CLOSE (15) + numus = nsurfs - 2 + sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NumSamples = numus + allocate(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(0:numus)) + open(15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)),action='read') + do k = 0, numus + tiempoant=tiempo1 + READ (15,*) tiempo1, sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(k) + sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(k) = sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%Samples(k) * & + sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%Multiplier * & + deviafactor_Multiplier + !!evitar sampleos no uniformes + if ((k>1).and.(k1.0_RKIND/0.9)) then + if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo + buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' + if (.not.ignoresamplingerrors) then + CLOSE(15) + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + end if + end if + !! + end do + CLOSE (15) + sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NumSamples = numus + end if + if (sgg%Med(i)%SlantedWire(1)%nodes(j)%IsourceExists) then + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%name))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + open(15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)),action='read') + READ (15,*) tiempo1, field1 + READ (15,*) tiempo2, field2 + sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%deltaSamples = tiempo2 - tiempo1 + nsurfs = 3 + !problemas con multivac + ! while (.not.eof(15)) + DO + READ (15,*, end=279) tiempo1, field1 + if (field1/minspacestep**2.0_RKIND > maxSourceValue) maxSourceValue=field1/minspacestep**2.0_RKIND !aqui no tengo feeling, pero estas fuentes no se usan !!? repensar + nsurfs = nsurfs + 1 + end do +279 continue + CLOSE (15) + numus = nsurfs - 2 + sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NumSamples = numus + allocate(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(0:numus)) + open(15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)),action='read') + do k = 0, numus + tiempoant=tiempo1 + READ (15,*) tiempo1, sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(k) + sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(k) = sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%Samples(k) * & + sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%Multiplier * & + deviafactor_Multiplier + !!evitar sampleos no uniformes + if ((k>1).and.(k1.0_RKIND/0.9)) then + if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo + buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' + if (.not.ignoresamplingerrors) then + CLOSE(15) + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + end if + end if + !! + end do + CLOSE (15) + sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NumSamples = numus + end if + end do + end if + end do + !nodal sources + do j = 1, sgg%NumNodalSources + !Read the time evolution file + ! + if (.not.sgg%NodalSource(j)%IsInitialValue) then + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%NodalSource(j)%fichero%name))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + open(15, file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)),action='read') + READ (15,*) tiempo1, field1 + READ (15,*) tiempo2, field2 + sgg%NodalSource(j)%fichero%deltaSamples = tiempo2 - tiempo1 + nsurfs = 3 + DO + READ (15,*, end=78) tiempo1, field1 + if (sgg%NodalSource(j)%isElec) then + if (field1 > maxSourceValue) maxSourceValue=field1 + else + if (field1*zvac > maxSourceValue) maxSourceValue=field1*zvac + end if + nsurfs = nsurfs + 1 + end do +78 continue + CLOSE (15) + numus = nsurfs - 2 + allocate(sgg%NodalSource(j)%fichero%Samples(0:numus)) + open(15, file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)),action='read') + do k = 0, numus + tiempoant=tiempo1 + READ (15,*) tiempo1, sgg%NodalSource(j)%fichero%Samples(k) + sgg%NodalSource(j)%fichero%Samples(k) = sgg%NodalSource(j)%fichero%Samples(k) * deviafactor_Multiplier + !!evitar sampleos no uniformes + if ((k>1).and.(k1.0_RKIND/0.9)) then + if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo + buff=trim(adjustl(sgg%NodalSource(j)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' + if (.not.ignoresamplingerrors) then + CLOSE(15) + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + end if + end if + !! + end do + CLOSE (15) + sgg%NodalSource(j)%fichero%NumSamples = numus + else !es un initialvalue que no precisa fichero. incializar trivialmente + numus = 0 + sgg%NodalSource(j)%fichero%deltaSamples = 1.0_RKIND !must be non-null + allocate(sgg%NodalSource(j)%fichero%Samples(0:numus)) + do k = 0, numus + sgg%NodalSource(j)%fichero%Samples(k) = 1.0_RKIND * deviafactor_Multiplier + end do + sgg%NodalSource(j)%fichero%NumSamples = numus + end if + end do + !Plane wave sources + do j = 1, sgg%NumPlaneWaves + !Read the time evolution file + ! + errnofile = .FALSE. + inquire(file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)), EXIST=errnofile) + if ( .NOT. errnofile) then + buff=trim(adjustl(sgg%PlaneWave(j)%fichero%name))//' DOES NOT EXIST' + CALL STOPONERROR(layoutnumber,size,buff) + end if + open(15, file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)),action='read') + READ (15,*) tiempo1, field1 + READ (15,*) tiempo2, field2 + sgg%PlaneWave(j)%fichero%deltaSamples = tiempo2 - tiempo1 + nsurfs = 3 + DO + READ (15,*, end=98) tiempo1, field1 + if (field1 > maxSourceValue) maxSourceValue=field1 + nsurfs = nsurfs + 1 + end do +98 continue + CLOSE (15) + numus = nsurfs - 2 + allocate(sgg%PlaneWave(j)%fichero%Samples(0:numus)) + open(15, file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)),action='read') + do k = 0, numus + tiempoant=tiempo1 + READ (15,*) tiempo1, sgg%PlaneWave(j)%fichero%Samples(k) + sgg%PlaneWave(j)%fichero%Samples(k) = sgg%PlaneWave(j)%fichero%Samples(k) * deviafactor_Multiplier + !!evitar sampleos no uniformes + if ((k>1).and.(k1.0_RKIND/0.9)) then + if (2.0_RKIND*(tiempo1-tiempoant)/(tiempo1+tiempoant)>1e-6_RKIND) then !a tiempos muy altos ignoro el redondeo + buff=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' + if (.not.ignoresamplingerrors) then + CLOSE(15) + CALL STOPONERROR(layoutnumber,size,buff) + end if + end if + end if + end if + !! + end do + CLOSE (15) + sgg%PlaneWave(j)%fichero%NumSamples = numus + end do + return + end subroutine read_TIMEFRECTRANSFsourcefiles + +!!!!!!!!!!!!!!!!! +!!!!!!!!!!!!!!!!! + + + subroutine asignawiredisper(disp, file) + type(WireDispersiveParams_t), intent(inout) :: disp + character(len=BUFSIZE), intent(in) :: file + + integer(kind=4) :: i, numPoles + real(kind=RKIND) :: valreal, valimag + + open (1712, file=file, action='READ') + read (1712, *) numPoles + + disp%NumPoles = numPoles + allocate(disp%res(1:numPoles)) + allocate(disp%p (1:numPoles)) + do i = 1, numPoles + read (1712, *) valreal, valimag + disp%res(i) = CMPLX(valreal, valimag, CKIND) + end do + do i = 1, numPoles + read (1712, *) valreal, valimag + disp%p(i) = CMPLX(valreal, valimag, CKIND) + end do + read (1712, *) valreal, valimag + disp%d = CMPLX(valreal, valimag, CKIND) + read (1712, *) valreal, valimag + disp%e = CMPLX(valreal, valimag, CKIND) + + return + end subroutine asignawiredisper + + subroutine asignadisper(fdgeom) + type(FreqDepenMaterial_t), pointer :: fdgeom + + if (fdgeom%l+fdgeom%LM /=0 ) then + BUFF='ERROR: SECOND ORDER DISPERSIVE MEDIA UNSUPPORTED. TRANSLATE THEM TO FIRST ORDER ()' + call WarnErrReport (buff,.TRUE.) + end if + ! + allocate(sgg%Med(contamedia)%EDispersive(1)) + allocate(sgg%Med(contamedia)%MDispersive(1)) + sgg%Med(contamedia)%Priority = prior_FDB + sgg%Med(contamedia)%Epr = fdgeom%eps11 / Eps0 + sgg%Med(contamedia)%Sigma = fdgeom%Sigma11 + sgg%Med(contamedia)%Mur = fdgeom%mu11 / Mu0 + sgg%Med(contamedia)%SigmaM = fdgeom%SigmaM11 + !electric dispersion + sgg%Med(contamedia)%Edispersive(1)%eps11= fdgeom%eps11 + sgg%Med(contamedia)%Edispersive(1)%eps12= fdgeom%eps12 + sgg%Med(contamedia)%Edispersive(1)%eps13= fdgeom%eps13 + sgg%Med(contamedia)%Edispersive(1)%eps22= fdgeom%eps22 + sgg%Med(contamedia)%Edispersive(1)%eps23= fdgeom%eps23 + sgg%Med(contamedia)%Edispersive(1)%eps33= fdgeom%eps33 + + sgg%Med(contamedia)%Edispersive(1)%mu11= fdgeom%MU11 + sgg%Med(contamedia)%Edispersive(1)%mu12= fdgeom%MU12 + sgg%Med(contamedia)%Edispersive(1)%mu13= fdgeom%MU13 + sgg%Med(contamedia)%Edispersive(1)%mu22= fdgeom%MU22 + sgg%Med(contamedia)%Edispersive(1)%mu23= fdgeom%MU23 + sgg%Med(contamedia)%Edispersive(1)%mu33= fdgeom%MU33 + + sgg%Med(contamedia)%EDispersive(1)%SIGMA11= fdgeom%SIGMA11 + sgg%Med(contamedia)%EDispersive(1)%SIGMA12= fdgeom%SIGMA12 + sgg%Med(contamedia)%EDispersive(1)%SIGMA13= fdgeom%SIGMA13 + sgg%Med(contamedia)%EDispersive(1)%SIGMA22= fdgeom%SIGMA22 + sgg%Med(contamedia)%EDispersive(1)%SIGMA23= fdgeom%SIGMA23 + sgg%Med(contamedia)%EDispersive(1)%SIGMA33= fdgeom%SIGMA33 + + sgg%Med(contamedia)%EDispersive(1)%SIGMAM11=fdgeom%SIGMAM11 + sgg%Med(contamedia)%EDispersive(1)%SIGMAM12=fdgeom%SIGMAM12 + sgg%Med(contamedia)%EDispersive(1)%SIGMAM13=fdgeom%SIGMAM13 + sgg%Med(contamedia)%EDispersive(1)%SIGMAM22=fdgeom%SIGMAM22 + sgg%Med(contamedia)%EDispersive(1)%SIGMAM23=fdgeom%SIGMAM23 + sgg%Med(contamedia)%EDispersive(1)%SIGMAM33=fdgeom%SIGMAM33 + + sgg%Med(contamedia)%Mdispersive(1)%eps11= sgg%Med(contamedia)%Edispersive(1)%eps11 + sgg%Med(contamedia)%Mdispersive(1)%eps12= sgg%Med(contamedia)%Edispersive(1)%eps12 + sgg%Med(contamedia)%Mdispersive(1)%eps13= sgg%Med(contamedia)%Edispersive(1)%eps13 + sgg%Med(contamedia)%Mdispersive(1)%eps22= sgg%Med(contamedia)%Edispersive(1)%eps22 + sgg%Med(contamedia)%Mdispersive(1)%eps23= sgg%Med(contamedia)%Edispersive(1)%eps23 + sgg%Med(contamedia)%Mdispersive(1)%eps33= sgg%Med(contamedia)%Edispersive(1)%eps33 + + sgg%Med(contamedia)%Mdispersive(1)%mu11= sgg%Med(contamedia)%Edispersive(1)%mu11 + sgg%Med(contamedia)%Mdispersive(1)%mu12= sgg%Med(contamedia)%Edispersive(1)%mu12 + sgg%Med(contamedia)%Mdispersive(1)%mu13= sgg%Med(contamedia)%Edispersive(1)%mu13 + sgg%Med(contamedia)%Mdispersive(1)%mu22= sgg%Med(contamedia)%Edispersive(1)%mu22 + sgg%Med(contamedia)%Mdispersive(1)%mu23= sgg%Med(contamedia)%Edispersive(1)%mu23 + sgg%Med(contamedia)%Mdispersive(1)%mu33= sgg%Med(contamedia)%Edispersive(1)%mu33 + + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA11= sgg%Med(contamedia)%EDispersive(1)%SIGMA11 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA12= sgg%Med(contamedia)%EDispersive(1)%SIGMA12 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA13= sgg%Med(contamedia)%EDispersive(1)%SIGMA13 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA22= sgg%Med(contamedia)%EDispersive(1)%SIGMA22 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA23= sgg%Med(contamedia)%EDispersive(1)%SIGMA23 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMA33= sgg%Med(contamedia)%EDispersive(1)%SIGMA33 + + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM11= sgg%Med(contamedia)%EDispersive(1)%SIGMAM11 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM12= sgg%Med(contamedia)%EDispersive(1)%SIGMAM12 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM13= sgg%Med(contamedia)%EDispersive(1)%SIGMAM13 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM22= sgg%Med(contamedia)%EDispersive(1)%SIGMAM22 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM23= sgg%Med(contamedia)%EDispersive(1)%SIGMAM23 + sgg%Med(contamedia)%MDISPERSIVE(1)%SIGMAM33= sgg%Med(contamedia)%EDispersive(1)%SIGMAM33 + ! + !los de primer orden solo. Los de segundo no juegan + sgg%Med(contamedia)%EDispersive(1)%NumPolRes11 = fdgeom%k11 !+ fdgeom%l + sgg%Med(contamedia)%EDispersive(1)%NumPolRes12 = fdgeom%k12 + sgg%Med(contamedia)%EDispersive(1)%NumPolRes13 = fdgeom%k13 + sgg%Med(contamedia)%EDispersive(1)%NumPolRes22 = fdgeom%k22 + sgg%Med(contamedia)%EDispersive(1)%NumPolRes23 = fdgeom%k23 + sgg%Med(contamedia)%EDispersive(1)%NumPolRes33 = fdgeom%k33 + !magnetic + sgg%Med(contamedia)%MDispersive(1)%NumPolRes11 = fdgeom%KM11 ! + fdgeom%LM + sgg%Med(contamedia)%MDispersive(1)%NumPolRes12 = fdgeom%KM12 + sgg%Med(contamedia)%MDispersive(1)%NumPolRes13 = fdgeom%KM13 + sgg%Med(contamedia)%MDispersive(1)%NumPolRes22 = fdgeom%KM22 + sgg%Med(contamedia)%MDispersive(1)%NumPolRes23 = fdgeom%KM23 + sgg%Med(contamedia)%MDispersive(1)%NumPolRes33 = fdgeom%KM33 + ! + if (sgg%Med(contamedia)%EDispersive(1)%NumPolRes11 /= 0) then + sgg%Med(contamedia)%Is%EDispersive = .TRUE. + sgg%Med(contamedia)%Is%EDispersiveANIS = .FALSE. + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + end if + if (sgg%Med(contamedia)%EDispersive(1)%NumPolRes12+sgg%Med(contamedia)%EDispersive(1)%NumPolRes13+ & + sgg%Med(contamedia)%EDispersive(1)%NumPolRes22+sgg%Med(contamedia)%EDispersive(1)%NumPolRes23+ & + sgg%Med(contamedia)%EDispersive(1)%NumPolRes33 /= 0) then + sgg%Med(contamedia)%Is%EDispersive = .TRUE. + sgg%Med(contamedia)%Is%EDispersiveAnis = .TRUE. + print *, "Error: anisotropic dispersive unsupported" + stop + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + end if + if (sgg%Med(contamedia)%MDispersive(1)%NumPolRes11 /= 0) then + sgg%Med(contamedia)%Is%MDispersive = .TRUE. + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + end if + if (sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes12+sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes13+ & + sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes22+sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes23+ & + sgg%Med(contamedia)%MDISPERSIVE(1)%NumPolRes33 /= 0) then + sgg%Med(contamedia)%Is%MDISPERSIVE = .TRUE. + sgg%Med(contamedia)%Is%MDISPERSIVEAnis = .TRUE. + print *, "Error: anisotropic dispersive unsupported" + stop + sgg%Med(contamedia)%Is%Dielectric = .FALSE. + end if + !!!! + allocate(sgg%Med(contamedia)%EDispersive(1)%C11(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes11), & + & sgg%Med(contamedia)%EDispersive(1)%a11(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes11)) + allocate(sgg%Med(contamedia)%EDispersive(1)%C12(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes12), & + & sgg%Med(contamedia)%EDispersive(1)%a12(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes12)) + allocate(sgg%Med(contamedia)%EDispersive(1)%C13(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes13), & + & sgg%Med(contamedia)%EDispersive(1)%a13(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes13)) + allocate(sgg%Med(contamedia)%EDispersive(1)%C22(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes22), & + & sgg%Med(contamedia)%EDispersive(1)%a22(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes22)) + allocate(sgg%Med(contamedia)%EDispersive(1)%C23(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes23), & + & sgg%Med(contamedia)%EDispersive(1)%a23(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes23)) + allocate(sgg%Med(contamedia)%EDispersive(1)%C33(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes33), & + & sgg%Med(contamedia)%EDispersive(1)%a33(1:sgg%Med(contamedia)%EDispersive(1)%NumPolRes33)) + ! + allocate(sgg%Med(contamedia)%MDispersive(1)%C11(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes11), & + & sgg%Med(contamedia)%MDispersive(1)%a11(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes11)) + allocate(sgg%Med(contamedia)%MDispersive(1)%C12(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes12), & + & sgg%Med(contamedia)%MDispersive(1)%a12(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes12)) + allocate(sgg%Med(contamedia)%MDispersive(1)%C13(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes13), & + & sgg%Med(contamedia)%MDispersive(1)%a13(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes13)) + allocate(sgg%Med(contamedia)%MDispersive(1)%C22(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes22), & + & sgg%Med(contamedia)%MDispersive(1)%a22(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes22)) + allocate(sgg%Med(contamedia)%MDispersive(1)%C23(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes23), & + & sgg%Med(contamedia)%MDispersive(1)%a23(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes23)) + allocate(sgg%Med(contamedia)%MDispersive(1)%C33(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes33), & + & sgg%Med(contamedia)%MDispersive(1)%a33(1:sgg%Med(contamedia)%MDispersive(1)%NumPolRes33)) + ! + do k1 = 1, (fdgeom%k11) + sgg%Med(contamedia)%EDispersive(1)%C11(k1) = (fdgeom%a11(k1)) + sgg%Med(contamedia)%EDispersive(1)%a11(k1) = (-fdgeom%b11(k1)) !el polo de ORIGINAL esta cambiado de signo + end do + do k1 = 1, (fdgeom%k12) + sgg%Med(contamedia)%EDispersive(1)%C12(k1) = (fdgeom%a12(k1)) + sgg%Med(contamedia)%EDispersive(1)%a12(k1) = (-fdgeom%b12(k1)) + end do + do k1 = 1, (fdgeom%k13) + sgg%Med(contamedia)%EDispersive(1)%C13(k1) = (fdgeom%a13(k1)) + sgg%Med(contamedia)%EDispersive(1)%a13(k1) = (-fdgeom%b13(k1)) + end do + do k1 = 1, (fdgeom%k22) + sgg%Med(contamedia)%EDispersive(1)%C22(k1) = (fdgeom%a22(k1)) + sgg%Med(contamedia)%EDispersive(1)%a22(k1) = (-fdgeom%b22(k1)) + end do + do k1 = 1, (fdgeom%k23) + sgg%Med(contamedia)%EDispersive(1)%C23(k1) = (fdgeom%a23(k1)) + sgg%Med(contamedia)%EDispersive(1)%a23(k1) = (-fdgeom%b23(k1)) + end do + do k1 = 1, (fdgeom%k33) + sgg%Med(contamedia)%EDispersive(1)%C33(k1) = (fdgeom%a33(k1)) + sgg%Med(contamedia)%EDispersive(1)%a33(k1) = (-fdgeom%b33(k1)) + end do + ! + do k1 = 1, (fdgeom%KM11) + sgg%Med(contamedia)%MDispersive(1)%C11(k1) = (fdgeom%aM11(k1)) + sgg%Med(contamedia)%MDispersive(1)%a11(k1) = (-fdgeom%bM11(k1)) + end do + do k1 = 1, (fdgeom%KM12) + sgg%Med(contamedia)%MDispersive(1)%C12(k1) = (fdgeom%aM12(k1)) + sgg%Med(contamedia)%MDispersive(1)%a12(k1) = (-fdgeom%bM12(k1)) + end do + do k1 = 1, (fdgeom%KM13) + sgg%Med(contamedia)%MDispersive(1)%C13(k1) = (fdgeom%aM13(k1)) + sgg%Med(contamedia)%MDispersive(1)%a13(k1) = (-fdgeom%bM13(k1)) + end do + do k1 = 1, (fdgeom%KM22) + sgg%Med(contamedia)%MDispersive(1)%C22(k1) = (fdgeom%aM22(k1)) + sgg%Med(contamedia)%MDispersive(1)%a22(k1) = (-fdgeom%bM22(k1)) + end do + do k1 = 1, (fdgeom%KM23) + sgg%Med(contamedia)%MDispersive(1)%C23(k1) = (fdgeom%aM23(k1)) + sgg%Med(contamedia)%MDispersive(1)%a23(k1) = (-fdgeom%bM23(k1)) + end do + do k1 = 1, (fdgeom%KM33) + sgg%Med(contamedia)%MDispersive(1)%C33(k1) = (fdgeom%aM33(k1)) + sgg%Med(contamedia)%MDispersive(1)%a33(k1) = (-fdgeom%bM33(k1)) + end do + + return + + end subroutine asignadisper + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + end subroutine read_geomData + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize, this,MurAfterPML,mur_exist) + type(limit_t), dimension(1:6) :: fullsize, SINPML_fullsize + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + + type(Parseador_t), intent(in) :: this + integer(kind=4) :: tama, i, field,j,k + character(len=BUFSIZE) :: buff + logical MurAfterPML,mur_exist + integer (kind=4), intent(in) :: layoutnumber,size + real(kind=RKIND), pointer, dimension(:) :: DummyD + real(kind=RKIND) :: delta + ! + real(kind=RKIND), pointer, dimension(:) :: lineasX, lineasY, lineasZ + ! + allocate(sgg%dx(this%despl%mx1:this%despl%mx2-1), sgg%dy(this%despl%my1:this%despl%my2-1), & + & sgg%dz(this%despl%mz1:this%despl%mz2-1)) + !displacement + !materialMatrix + tama = (this%despl%nx) + if (tama == 1) then + do i = this%despl%mx1, this%despl%mx2 - 1 + sgg%dx (i) = this%despl%desx(1) + end do + ELSE + if (tama /= this%despl%mx2-this%despl%mx1) then + buff='Tamanio discretizacion distinto de la region' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do i = this%despl%mx1, this%despl%mx2 - 1 + sgg%dx (i) = this%despl%desx(i) + end do + end if + ! + ! + tama = (this%despl%nY) + if (tama == 1) then + do i = this%despl%my1, this%despl%my2 - 1 + sgg%dy (i) = this%despl%desY(1) + end do + ELSE + if (tama /= this%despl%my2-this%despl%my1) then + buff='Tamanio discretizacion distinto de la region' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do i = this%despl%my1, this%despl%my2 - 1 + sgg%dy (i) = this%despl%desY(i) + end do + end if + ! + ! + tama = (this%despl%nZ) + if (tama == 1) then + do i = this%despl%mz1, this%despl%mz2 - 1 + sgg%dz (i) = this%despl%desZ(1) + end do + ELSE + if (tama /= this%despl%mz2-this%despl%mz1) then + buff='Tamanio discretizacion distinto de la region' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do i = this%despl%mz1, this%despl%mz2 - 1 + sgg%dz (i) = this%despl%desZ(i) + end do + end if + !DISCRETIZATION LINES + !displacement + !materialMatrix + tama = (this%despl%nx) + allocate(lineasX(this%despl%mx1:this%despl%mx2)) + lineasX (this%despl%mx1) = this%despl%originX + this%despl%mx1 * this%despl%desx(1) + if (tama == 1) then + do i = this%despl%mx1, this%despl%mx2 - 1 + lineasX (i+1) = this%despl%desx(1) * (i-this%despl%mx1+1) + lineasX (this%despl%mx1) + end do + ELSE + if (tama /= this%despl%mx2-this%despl%mx1) then + buff='Tamanio discretizacion distinto de la region' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do i = this%despl%mx1, this%despl%mx2 - 1 + lineasX (i+1) = this%despl%desx(i) + lineasX (i) + end do + end if + !Y + tama = (this%despl%nY) + allocate(lineasY(this%despl%my1:this%despl%my2)) + lineasY (this%despl%my1) = this%despl%originy+this%despl%my1*this%despl%desY(1) + if (tama == 1) then + do i = this%despl%my1, this%despl%my2 - 1 + lineasY (i+1) = this%despl%desY(1) * (i-this%despl%my1+1) + lineasY (this%despl%my1) + end do + ELSE + if (tama /= this%despl%my2-this%despl%my1) then + buff='Tamanio discretizacion distinto de la region' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do i = this%despl%my1, this%despl%my2 - 1 + lineasY (i+1) = this%despl%desY(i) + lineasY (i) + end do + end if + !Z + tama = (this%despl%nZ) + allocate(lineasZ(this%despl%mz1:this%despl%mz2)) + lineasZ (this%despl%mz1) = this%despl%originZ+this%despl%mz1*this%despl%desZ(1) + if (tama == 1) then + do i = this%despl%mz1, this%despl%mz2 - 1 + lineasZ (i+1) = this%despl%desZ(1) * (i-this%despl%mz1+1) + lineasZ (this%despl%mz1) + end do + ELSE + if (tama /= this%despl%mz2-this%despl%mz1) then + buff='Tamanio discretizacion distinto de la region' + CALL STOPONERROR(layoutnumber,size,buff) + end if + do i = this%despl%mz1, this%despl%mz2 - 1 + lineasZ (i+1) = this%despl%desZ(i) + lineasZ (i) + end do + end if + ! + allocate(sgg%LineX(this%despl%mx1:this%despl%mx2), sgg%LineY(this%despl%my1:this%despl%my2), & + & sgg%LineZ(this%despl%mz1:this%despl%mz2)) + ! + sgg%LineX (this%despl%mx1:this%despl%mx2) = lineasX + sgg%LineY (this%despl%my1:this%despl%my2) = lineasY + sgg%LineZ (this%despl%mz1:this%despl%mz2) = lineasZ + deallocate(lineasX, lineasY, lineasZ) + !General Parameter + sgg%InitialTimeStep = 0 + sgg%TimeSteps = this%general%nmax + sgg%dt = this%general%dt + !border + !this%BORDER%PROPIEDADESPML(I)%ORDEN no lo considero porque en el interior de mi programa lo pongo (esta a 2 normalmente) + sgg%Border%IsBackPEC = .FALSE. + sgg%Border%IsFrontPEC = .FALSE. + sgg%Border%IsLeftPEC = .FALSE. + sgg%Border%IsRightPEC = .FALSE. + sgg%Border%IsUpPEC = .FALSE. + sgg%Border%IsDownPEC = .FALSE. + sgg%Border%IsBackPMC = .FALSE. + sgg%Border%IsFrontPMC = .FALSE. + sgg%Border%IsLeftPMC = .FALSE. + sgg%Border%IsRightPMC = .FALSE. + sgg%Border%IsUpPMC = .FALSE. + sgg%Border%IsDownPMC = .FALSE. + sgg%Border%IsBackPML = .FALSE. + sgg%Border%IsFrontPML = .FALSE. + sgg%Border%IsLeftPML = .FALSE. + sgg%Border%IsRightPML = .FALSE. + sgg%Border%IsUpPML = .FALSE. + sgg%Border%IsDownPML = .FALSE. + sgg%Border%IsBackPeriodic = .FALSE. + sgg%Border%IsFrontPeriodic = .FALSE. + sgg%Border%IsLeftPeriodic = .FALSE. + sgg%Border%IsRightPeriodic = .FALSE. + sgg%Border%IsUpPeriodic = .FALSE. + sgg%Border%IsDownPeriodic = .FALSE. + sgg%Border%IsBackMUR = .FALSE. + sgg%Border%IsFrontMUR = .FALSE. + sgg%Border%IsLeftMUR = .FALSE. + sgg%Border%IsRightMUR = .FALSE. + sgg%Border%IsUpMUR = .FALSE. + sgg%Border%IsDownMUR = .FALSE. + sgg%PML%NumLayers = 0 + do i = 1, 6 + if (this%front%tipofrontera(i) == F_PML) then + SELECT CASE (i) + !xmin + CASE (1) + sgg%Border%IsBackPML = .TRUE. + sgg%PML%NumLayers (icoord, comi) = this%front%PROPIEDADESPML(i)%NUMCAPAS + sgg%PML%CoeffReflPML (icoord, comi) = this%front%PROPIEDADESPML(i)%REFL + if (sgg%PML%CoeffReflPML (icoord, comi)>=1.0_RKIND) sgg%PML%CoeffReflPML(icoord, comi)=0.99999d0 + sgg%PML%orden (icoord, comi) = this%front%PROPIEDADESPML(i)%orden + !xmax + CASE (2) + sgg%Border%IsFrontPML = .TRUE. + sgg%PML%NumLayers (icoord, fine) = this%front%PROPIEDADESPML(i)%NUMCAPAS + sgg%PML%CoeffReflPML (icoord, fine) = this%front%PROPIEDADESPML(i)%REFL + if (sgg%PML%CoeffReflPML (icoord, fine)>=1.0_RKIND) sgg%PML%CoeffReflPML(icoord, fine)=0.99999d0 + sgg%PML%orden (icoord, fine) = this%front%PROPIEDADESPML(i)%orden + !ymin + CASE (3) + sgg%Border%IsLeftPML = .TRUE. + sgg%PML%NumLayers (jcoord, comi) = this%front%PROPIEDADESPML(i)%NUMCAPAS + sgg%PML%CoeffReflPML (jcoord, comi) = this%front%PROPIEDADESPML(i)%REFL + if (sgg%PML%CoeffReflPML (jcoord, comi)>=1.0_RKIND) sgg%PML%CoeffReflPML(jcoord, comi)=0.99999d0 + sgg%PML%orden (jcoord, comi) = this%front%PROPIEDADESPML(i)%orden + !ymax + CASE (4) + sgg%Border%IsRightPML = .TRUE. + sgg%PML%NumLayers (jcoord, fine) = this%front%PROPIEDADESPML(i)%NUMCAPAS + sgg%PML%CoeffReflPML (jcoord, fine) = this%front%PROPIEDADESPML(i)%REFL + if (sgg%PML%CoeffReflPML (jcoord, fine)>=1.0_RKIND) sgg%PML%CoeffReflPML(jcoord, fine)=0.99999d0 + sgg%PML%orden (jcoord, fine) = this%front%PROPIEDADESPML(i)%orden + !zmin + CASE (5) + sgg%Border%IsDownPML = .TRUE. + sgg%PML%NumLayers (kcoord, comi) = this%front%PROPIEDADESPML(i)%NUMCAPAS + sgg%PML%CoeffReflPML (kcoord, comi) = this%front%PROPIEDADESPML(i)%REFL + if (sgg%PML%CoeffReflPML (kcoord, comi)>=1.0_RKIND) sgg%PML%CoeffReflPML(kcoord, comi)=0.99999d0 + sgg%PML%orden (kcoord, comi) = this%front%PROPIEDADESPML(i)%orden + !zmax + CASE (6) + sgg%Border%IsUpPML = .TRUE. + sgg%PML%NumLayers (kcoord, fine) = this%front%PROPIEDADESPML(i)%NUMCAPAS + sgg%PML%CoeffReflPML (kcoord, fine) = this%front%PROPIEDADESPML(i)%REFL + if (sgg%PML%CoeffReflPML (kcoord, fine)>=1.0_RKIND) sgg%PML%CoeffReflPML(kcoord, fine)=0.99999d0 + sgg%PML%orden (kcoord, fine) = this%front%PROPIEDADESPML(i)%orden + end select + elseIF (this%front%tipofrontera(i) == F_MUR) then + mur_exist=.true. + SELECT CASE (i) + !xmin + CASE (1) + sgg%Border%IsBackMUR = .TRUE. + !xmax + CASE (2) + sgg%Border%IsFrontMUR = .TRUE. + !ymin + CASE (3) + sgg%Border%IsLeftMUR = .TRUE. + !ymax + CASE (4) + sgg%Border%IsRightMUR = .TRUE. + !zmin + CASE (5) + sgg%Border%IsDownMUR = .TRUE. + !zmax + CASE (6) + sgg%Border%IsUpMUR = .TRUE. + end select + ELSE if (this%front%tipofrontera(i) == F_PEC) then + SELECT CASE (i) + !xmin + CASE (1) + sgg%Border%IsBackPEC = .TRUE. + !xmax + CASE (2) + sgg%Border%IsFrontPEC = .TRUE. + !ymin + CASE (3) + sgg%Border%IsLeftPEC = .TRUE. + !ymax + CASE (4) + sgg%Border%IsRightPEC = .TRUE. + !zmin + CASE (5) + sgg%Border%IsDownPEC = .TRUE. + !zmax + CASE (6) + sgg%Border%IsUpPEC = .TRUE. + end select + ELSE if (this%front%tipofrontera(i) == F_PMC) then + SELECT CASE (i) + !xmin + CASE (1) + sgg%Border%IsBackPMC = .TRUE. + !xmax + CASE (2) + sgg%Border%IsFrontPMC = .TRUE. + !ymin + CASE (3) + sgg%Border%IsLeftPMC = .TRUE. + !ymax + CASE (4) + sgg%Border%IsRightPMC = .TRUE. + !zmin + CASE (5) + sgg%Border%IsDownPMC = .TRUE. + !zmax + CASE (6) + sgg%Border%IsUpPMC = .TRUE. + end select + ELSE if (this%front%tipofrontera(i) == F_Per) then + SELECT CASE (i) + !xmin + CASE (1) + sgg%Border%IsBackPeriodic = .TRUE. + !xmax + CASE (2) + sgg%Border%IsFrontPeriodic = .TRUE. + !ymin + CASE (3) + sgg%Border%IsLeftPeriodic = .TRUE. + !ymax + CASE (4) + sgg%Border%IsRightPeriodic = .TRUE. + !zmin + CASE (5) + sgg%Border%IsDownPeriodic = .TRUE. + !zmax + CASE (6) + sgg%Border%IsUpPeriodic = .TRUE. + end select + end if + end do + !assign limits + do field = iEx, iHz + SINPML_fullsize(field)%XI = this%despl%mx1 + SINPML_fullsize(field)%YI = this%despl%my1 + SINPML_fullsize(field)%ZI = this%despl%mz1 + SINPML_fullsize(field)%XE = this%despl%mx2 + SINPML_fullsize(field)%YE = this%despl%my2 + SINPML_fullsize(field)%ZE = this%despl%mz2 + end do + !adjust the endings + SINPML_fullsize(iEx)%XE = SINPML_fullsize(iEx)%XE - 1 + SINPML_fullsize(iEy)%YE = SINPML_fullsize(iEy)%YE - 1 + SINPML_fullsize(iEz)%ZE = SINPML_fullsize(iEz)%ZE - 1 + ! + ! + SINPML_fullsize(iHx)%YE = SINPML_fullsize(iHx)%YE - 1 + SINPML_fullsize(iHx)%ZE = SINPML_fullsize(iHx)%ZE - 1 + SINPML_fullsize(iHy)%ZE = SINPML_fullsize(iHy)%ZE - 1 + SINPML_fullsize(iHy)%XE = SINPML_fullsize(iHy)%XE - 1 + SINPML_fullsize(iHz)%XE = SINPML_fullsize(iHz)%XE - 1 + SINPML_fullsize(iHz)%YE = SINPML_fullsize(iHz)%YE - 1 + ! + do field = iEx, iHz + fullsize(field)%XI = SINPML_fullsize(field)%XI - sgg%PML%NumLayers(icoord, comi) + fullsize(field)%YI = SINPML_fullsize(field)%YI - sgg%PML%NumLayers(jcoord, comi) + fullsize(field)%ZI = SINPML_fullsize(field)%ZI - sgg%PML%NumLayers(kcoord, comi) + fullsize(field)%XE = SINPML_fullsize(field)%XE + sgg%PML%NumLayers(icoord, fine) + fullsize(field)%YE = SINPML_fullsize(field)%YE + sgg%PML%NumLayers(jcoord, fine) + fullsize(field)%ZE = SINPML_fullsize(field)%ZE + sgg%PML%NumLayers(kcoord, fine) + end do + ! + !readjust mur boundaries if necessary + + sgg%Border%IsBackMUR = (sgg%Border%IsBackMUR ).or.(sgg%Border%IsBackPML .and. MurAfterPML) + sgg%Border%IsFrontMUR = (sgg%Border%IsFrontMUR ).or.(sgg%Border%IsFrontPML .and. MurAfterPML) + sgg%Border%IsLeftMUR = (sgg%Border%IsLeftMUR ).or.(sgg%Border%IsLeftPML .and. MurAfterPML) + sgg%Border%IsRightMUR = (sgg%Border%IsRightMUR ).or.(sgg%Border%IsRightPML .and. MurAfterPML) + sgg%Border%IsUpMUR = (sgg%Border%IsUpMUR ).or.(sgg%Border%IsUpPML .and. MurAfterPML) + sgg%Border%IsDownMUR = (sgg%Border%IsDownMUR ).or.(sgg%Border%IsDownPML .and. MurAfterPML) + + + !readjust space steps accordingly 140815 para que esten bien allocateados los dx + ! Discretization Lines Matrix Resizing to accomodate PML regions + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + allocate(DummyD(SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE-1)) + DummyD = sgg%dx + deallocate(sgg%dx) + ! + + sgg%allocDxI=-sgg%PML%NumLayers(1, 1)+SINPML_fullsize(iHx)%XI-1-1 + sgg%allocDxE= SINPML_fullsize(iHx)%XE+sgg%PML%NumLayers(1, 2)+1+1 + allocate(sgg%dx(sgg%allocDxI:sgg%allocDxE)) + ! + sgg%dx (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE-1) = DummyD (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE-1) + deallocate(DummyD) + ! + allocate(DummyD(SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE-1)) + DummyD = sgg%dy + deallocate(sgg%dy) + ! + sgg%allocDyI=-sgg%PML%NumLayers(2, 1)+SINPML_fullsize(iHy)%YI-1-1 + sgg%allocDyE= SINPML_fullsize(iHy)%YE+sgg%PML%NumLayers(2, 2)+1+1 + allocate(sgg%dy(sgg%allocDyI:sgg%allocDyE)) + ! + sgg%dy (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE-1) = DummyD (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE-1) + deallocate(DummyD) + ! + allocate(DummyD(SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE-1)) + DummyD = sgg%dz + deallocate(sgg%dz) + ! + sgg%allocDzI=-sgg%PML%NumLayers(3, 1)+SINPML_fullsize(iHz)%ZI-1-1 + sgg%allocDzE= SINPML_fullsize(iHz)%ZE+sgg%PML%NumLayers(3, 2)+1+1 + allocate(sgg%dz(sgg%allocDzI:sgg%allocDzE)) + sgg%dz (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE-1) = DummyD (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE-1) + deallocate(DummyD) + ! + delta = sgg%dx (SINPML_fullsize(iHx)%XI) + do i = SINPML_fullsize(iHx)%XI - 1, SINPML_fullsize(iHx)%XI - 1 - sgg%PML%NumLayers(1, 1) - 1, - 1 + sgg%dx (i) = delta + end do + delta = sgg%dx (SINPML_fullsize(iHx)%XE-1) + do i = SINPML_fullsize(iHx)%XE, SINPML_fullsize(iHx)%XE + sgg%PML%NumLayers(1, 2) + 1 + 1 + sgg%dx (i) = delta + end do + ! + delta = sgg%dy (SINPML_fullsize(iHy)%YI) + do j = SINPML_fullsize(iHy)%YI - 1, SINPML_fullsize(iHy)%YI - 1 - sgg%PML%NumLayers(2, 1) - 1, - 1 + sgg%dy (j) = delta + end do + ! + delta = sgg%dy (SINPML_fullsize(iHy)%YE-1) + do j = SINPML_fullsize(iHy)%YE, SINPML_fullsize(iHy)%YE + sgg%PML%NumLayers(2, 2) + 1 + 1 + sgg%dy (j) = delta + end do + ! + delta = sgg%dz (SINPML_fullsize(iHz)%ZI) + do k = SINPML_fullsize(iHz)%ZI - 1, SINPML_fullsize(iHz)%ZI - 1 - sgg%PML%NumLayers(3, 1) - 1, - 1 + sgg%dz (k) = delta + end do + ! + delta = sgg%dz (SINPML_fullsize(iHz)%ZE-1) + do k = SINPML_fullsize(iHz)%ZE, SINPML_fullsize(iHz)%ZE + sgg%PML%NumLayers(3, 2) + 1 + 1 + sgg%dz (k) = delta + end do + !DISCRETIZATION LINES (TO BE DEPRECATED IN A NEAR FUTURE, ONLY NEEDED BY THE PLANEWAVE CORNER ROUTINE) + ! + allocate(DummyD(SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE)) + DummyD = sgg%LineX + deallocate(sgg%LineX) + allocate(sgg%LineX(-sgg%PML%NumLayers(1, 1)+SINPML_fullsize(iHx)%XI-1:SINPML_fullsize(iHx)%XE+sgg%PML%NumLayers(1, 2)+1)) + sgg%LineX (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE) = DummyD (SINPML_fullsize(iHx)%XI:SINPML_fullsize(iHx)%XE) + deallocate(DummyD) + ! + allocate(DummyD(SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE)) + DummyD = sgg%LineY + deallocate(sgg%LineY) + allocate(sgg%LineY(-sgg%PML%NumLayers(2, 1)+SINPML_fullsize(iHy)%YI-1:SINPML_fullsize(iHy)%YE+sgg%PML%NumLayers(2, 2)+1)) + sgg%LineY (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE) = DummyD (SINPML_fullsize(iHy)%YI:SINPML_fullsize(iHy)%YE) + deallocate(DummyD) + ! + allocate(DummyD(SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE)) + DummyD = sgg%LineZ + deallocate(sgg%LineZ) + allocate(sgg%LineZ(-sgg%PML%NumLayers(3, 1)+SINPML_fullsize(iHz)%ZI-1:SINPML_fullsize(iHz)%ZE+sgg%PML%NumLayers(3, 2)+1)) + sgg%LineZ (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE) = DummyD (SINPML_fullsize(iHz)%ZI:SINPML_fullsize(iHz)%ZE) + deallocate(DummyD) + ! + delta = sgg%LineX (SINPML_fullsize(iHx)%XI+1) - sgg%LineX(SINPML_fullsize(iHx)%XI) + do i = SINPML_fullsize(iHx)%XI - 1, SINPML_fullsize(iHx)%XI - 1 - sgg%PML%NumLayers(1, 1), - 1 + sgg%LineX (i) = sgg%LineX(i+1) - delta + end do + delta = sgg%LineX (SINPML_fullsize(iHx)%XE) - sgg%LineX(SINPML_fullsize(iHx)%XE-1) + do i = SINPML_fullsize(iHx)%XE + 1, SINPML_fullsize(iHx)%XE + sgg%PML%NumLayers(1, 2) + 1 + sgg%LineX (i) = sgg%LineX(i-1) + delta + end do + ! + delta = sgg%LineY (SINPML_fullsize(iHy)%YI+1) - sgg%LineY(SINPML_fullsize(iHy)%YI) + do j = SINPML_fullsize(iHy)%YI - 1, SINPML_fullsize(iHy)%YI - 1 - sgg%PML%NumLayers(2, 1), - 1 + sgg%LineY (j) = sgg%LineY(j+1) - delta + end do + ! + delta = sgg%LineY (SINPML_fullsize(iHy)%YE) - sgg%LineY(SINPML_fullsize(iHy)%YE-1) + do j = SINPML_fullsize(iHy)%YE + 1, SINPML_fullsize(iHy)%YE + sgg%PML%NumLayers(2, 2) + 1 + sgg%LineY (j) = sgg%LineY(j-1) + delta + end do + ! + delta = sgg%LineZ (SINPML_fullsize(iHz)%ZI+1) - sgg%LineZ(SINPML_fullsize(iHz)%ZI) + do k = SINPML_fullsize(iHz)%ZI - 1, SINPML_fullsize(iHz)%ZI - 1 - sgg%PML%NumLayers(3, 1), - 1 + sgg%LineZ (k) = sgg%LineZ(k+1) - delta + end do + ! + delta = sgg%LineZ (SINPML_fullsize(iHz)%ZE) - sgg%LineZ(SINPML_fullsize(iHz)%ZE-1) + do k = SINPML_fullsize(iHz)%ZE + 1, SINPML_fullsize(iHz)%ZE + sgg%PML%NumLayers(3, 2) + 1 + sgg%LineZ (k) = sgg%LineZ(k-1) + delta + end do + !2012 + !update actual number of media + !!!!!!! + + !! do i = SINPML_fullsize(iHx)%XI - 1, SINPML_fullsize(iHx)%XE + sgg%PML%NumLayers(1, 2) + 1 + !! write (6678,*) 'lineX ',i, sgg%LineX (i) + !! end do + !!! + !! do j = SINPML_fullsize(iHy)%YI - 1, SINPML_fullsize(iHy)%YE + sgg%PML%NumLayers(2, 2) + 1 + !! write (6678,*) 'lineY ',j,sgg%LineY (j) + !! end do + !!! + !! do k = SINPML_fullsize(iHz)%ZI - 1, SINPML_fullsize(iHz)%ZE + sgg%PML%NumLayers(3, 2) + 1 + !! write (6678,*) 'lineZ ',k,sgg%LineZ (k) + !! end do + + + return + ! + end subroutine + ! + + + + !!!!!!!!!!!!!!!!PREPROCESADOR PARA SKIN-DEPTH 09/07/13 + subroutine prepro_skindepth(this,fichin) + integer pozi,tama,j,k + character(len=BUFSIZE) :: multiportFile + type(Parseador_t), intent(in) :: this + character(len=*), intent(in) :: fichin + character(len=BUFSIZE) :: restocadena + integer :: my_iostat + + open (unit=7533,file='UGRskindepthmatlab.layers') + close(7533,status='delete') + my_iostat=0 +9306 if(my_iostat /= 0) write(*,fmt='(a)',advance='no'), '.' !!if(my_iostat /= 0) print '(i5,a1,i4,2x,a)',9306,'.',quienmpi,'UGRskindepthmatlab.layers' + open (unit=7533,file='UGRskindepthmatlab.layers',err=9306,iostat=my_iostat,status='new',action='write') + + tama = this%LossyThinSurfs%length + do j = 1, tama + if (abs(this%LossyThinSurfs%cs(j)%SigmaM(1)) <= 1.0e-2_RKIND ) then !SGBCs que hay que sustituir + multiportFile = trim(adjustl(this%LossyThinSurfs%cs(j)%files)) // '_z11.txt' + ! + !09/07/13 !los SGBCs con skindepth se deben preprocesar + + !crea el fichero de entrada para usar con el compilado de Matlab + pozi=index(multiportFile,'_z11.txt') + write(7533,'(a)') trim(adjustl(multiportFile(1:pozi-1))) + write(7533,*) 'layers ',this%LossyThinSurfs%cs(j)%numcapas + do k=1,this%LossyThinSurfs%cs(j)%numcapas + write(7533,*) 'eps ',k,this%LossyThinSurfs%cs(j)%eps(k) + write(7533,*) 'mu ',k,this%LossyThinSurfs%cs(j)%mu(k) + write(7533,*) 'sigma ',k,this%LossyThinSurfs%cs(j)%sigma(k) + write(7533,*) 'thickness ',k,this%LossyThinSurfs%cs(j)%thk(k) + end do + write(7533,*) 'fmin ',10**4 + write(7533,*) 'fmax ',10**9 + write(7533,*) 'order ',24 + end if + end do + close(7533) + return + + end subroutine !prepro_skindepth + !!!!!!!!end 09/07/13 + +#ifdef CompileWithConformal + subroutine AssigLossyOrPECtoNodes(sgg,media,conf_conflicts,input_conformal_flag) +#else + subroutine AssigLossyOrPECtoNodes(sgg,media) +#endif + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + type(media_matrices_t), intent(inout) :: media + + logical :: ispec, isSGBC, IsComposite, islossy, input_conformal_flag,NODALMENTEIGUALES,iguaSGM,iguaSIG,iguaMUR,iguaPEC,iguaLOS,iguaEPR,ISconformal + real(kind=RKIND) :: sigt,epst,SIGMA,SIGMAM,EPR,MUR + integer(kind=4) i,j,k,n,kmenos1,jmenos1,imenos1,med(0:5),r,imed,i1 + character(len=BUFSIZE) :: buff + +#ifdef CompileWithConformal + type (conf_conflicts_t), pointer :: conf_conflicts + type(conf_node_t), dimension (:), pointer :: conf_busy_node + integer (KIND=confIKIND) :: dims + logical :: mediois1,mediois2,mediois3 + integer (KIND=INTEGERSIZEOFMEDIAMATRICES) :: medio1,medio2,medio3 +#endif + + + !!!lo dejo aqui para en un futuro hacerlo crecer y asignar la informacion de nodo con su tipo de material correctamente + !!copiado de la casuistica de wires !310715 !no esta anulado alli, pero cuando se haga crecer habra que aumenta el sgg%med para acomodar a los nuevos materiales nodales.... + + do k= sgg%Alloc(iEz)%ZI , sgg%Alloc(iEz)%ZE + do j= sgg%Alloc(iEy)%YI , sgg%Alloc(iEy)%YE + do i= sgg%Alloc(iEx)%XI , sgg%Alloc(iEx)%XE + imenos1= i-1 + jmenos1= j-1 + kmenos1= k-1 + if (i-1 < sgg%alloc(iEx)%XI) imenos1=i + if (j-1 < sgg%alloc(iEy)%YI) jmenos1=j + if (k-1 < sgg%alloc(iEz)%ZI) kmenos1=k + + med(0) = media%sggMiEx(i , j , k ) + med(1) = media%sggMiEx(imenos1 , j , k ) + med(2) = media%sggMiEy(i , j , k ) + med(3) = media%sggMiEy(i , jmenos1 , k ) + med(4) = media%sggMiEz(i , j , k ) + med(5) = media%sggMiEz(i , j , kmenos1 ) + sigma = 0.0_RKIND + sigmam = 0.0_RKIND + epr = 0.0_RKIND + mur = 0.0_RKIND + ISPEC =.FALSE. + ISLOSSY =.FALSE. + do i1=0,5 + imed=med(i1) + sigma = max(sigma, sgg%Med(imed)%sigma) + sigmam = max(sigmam, sgg%Med(imed)%sigmam) + epr = epr + sgg%Med(imed)%epr / 6.0_RKIND + mur = mur + sgg%Med(imed)%mur /6.0_RKIND + if ((sgg%med(imed)%is%PEC).or.(imed==0)) isPEC = .true. + end do + if ( (.not.isPEC).and.(sigma >= 1e-4) ) then + islossy = .true. + else + islossy = .false. + end if + ! CREAR NUEVO MEDIO y asignarle sus propiedades de acuerdo a sus adyacencias + if (.not.(sgg%med(med(0))%is%PML.OR.sgg%med(med(1))%is%PML.OR.sgg%med(med(2))%is%PML.OR.sgg%med(med(3))%is%PML.OR.sgg%med(med(4))%is%PML.OR.sgg%med(med(5))%is%PML)) then + if ((MED(0)/=MED(1)).OR.(MED(1)/=MED(2)).OR.(MED(2)/=MED(3)).OR.(MED(3)/=MED(4)).OR.(MED(4)/=MED(5)).OR.(MED(5)/=MED(0))) then + NODALMENTEIGUALES=.FALSE. + busqueda: do I1=0,SGG%NUMMEDIA +!cambios 230817 bug milano borja en rutina iguales + iguaSGM=IGUALES(SGG%MED(I1)%SIGMAM,SIGMAM) + iguaSIG=IGUALES(SGG%MED(I1)%SIGMA,SIGMA) !sgg230817 al poner sigma 1e29 y pec ademas, la rutina de iguales fallaba + iguaEPR=IGUALES(SGG%MED(I1)%EPR,EPR) + iguaMUR=IGUALES(SGG%MED(I1)%MUR,MUR) + iguaPEC=(SGG%MED(I1)%iS%PEC.eqv.ISPEC) + iguaLOS=(SGG%MED(I1)%iS%LOSSY.eqv.ISLOSSY) + ISconformal=((SGG%MED(I1)%iS%already_YEEadvanced_byconformal).or.(SGG%MED(I1)%is%split_and_useless)) + NODALMENTEIGUALES=NODALMENTEIGUALES.OR.(((iguaSGM.and.iguaSIG.and.iguaEPR.and.iguaMUR.and.iguaLOS).OR.iguaPEC).and.(.not.ISconformal)) + if (nodalmenteiguales) exit busqueda + end do busqueda + if (.NOT.NODALMENTEIGUALES) then + if (SGG%NUMMEDIA+1 > SGG%ALLOCmed) then + call READJUST(SGG%ALLOCmed,sgg%med,2*SGG%ALLOCmed) !LO HAgo REallocatando al doble. gENERO NUEVO PARAMETRO sgg%ALLOCmed. Pero esto es un guirigay.... 261115 + end if + SGG%NUMMEDIA=SGG%NUMMEDIA+1 + media%sggMiNo(i,j,k)=SGG%NUMMEDIA + r=media%sggMiNo(i,j,k) + sgg%med(r)%sigma =sigma + sgg%med(r)%sigmam=sigmam + sgg%med(r)%epr =epr + sgg%med(r)%mur =mur + sgg%med(r)%is%PEC = ISPEC !ojo con estos medios que el sistema de prioridades ya no les afecta porque esta rutina va despues del preprocess 03116 + sgg%med(r)%is%LOSSY = ISLOSSY + sgg%med(r)%is%needed = .true. !sgg 220817 por defecto lo he puesto en readjust a false +!write(113,*) '.NOT.NODALMENTEIGUALES--> ',i,j,k,' - ',med(0),med(1),med(2),med(3),med(4),med(5),' - ',SGG%NUMMEDIA + ELSE + media%sggMiNo(i,j,k)=i1 !PUEDE QUE NO SEAN IGUALES PERO NODALMENTE LO SON (SOLO A EFECTOS DE SIGMA,EPR,SIGMAM,MUR,ISLOSSY,ISPEC + !bug 060417 debo ponerlo al medio que ha encontrado igual (i1) y estaba a med(0)!!!! +!write(114,*) '.YES.NODALMENTEIGUALES--> ',i,j,k,' - ',med(0),med(1),med(2),med(3),med(4),med(5),' - ',SGG%NUMMEDIA + end if + else + media%sggMiNo(i,j,k)=MED(0) !todos iguales + end if + end if !del no es pml + !!!!aqui habra luego que ir creando y almacenando lo nuevos tipos de medio nodales en funcion de los sigt y epst para que wires use directamente esa info + end do + end do + end do + +!CORRIGE AHORA CON LA INFO CONFORMAL (HABIA UN BUG 211116 PQ EL NODALMENTE IGUALES LO MACHACABA SI ESTO SE HACIA ANTES) +#ifdef CompileWithConformal + if(input_conformal_flag)then + dims =conf_conflicts%conf_busy_nodesGroup%dims + conf_busy_node=> conf_conflicts%conf_busy_nodesGroup%conf_busy_node + do n=1,dims + i=conf_busy_node(n)%i + j=conf_busy_node(n)%j + k=conf_busy_node(n)%k + if (conf_busy_node(n)%ispec) then + media%sggMiNo(i,j,k)=0 + endif + end do + !!!conf_busy_node(n)%i = 0 + !!!conf_busy_node(n)%j = 0 + !!!conf_busy_node(n)%k = 0 + !!!conf_busy_node(n)%isfree = .true. + !!!conf_busy_node(n)%ispec = .false. + !!!conf_busy_node(n)%sigmaEquiv = 0.0_RKIND + !!!conf_busy_node(n)%epsilonRelEquiv = 1.0_RKIND + !!!conf_busy_node(n)%muRelEquiv = 1.0_RKIND + +!!! Movido a cada wires.F90. Aqui me parece inreportable y peligroso +!!!!pedazo de niapa para poner los sggmiNo conformal a voltage nulo y que Dios reparta suerte 130220 +!!! !barro el interior, por eso el shifing k,x - j,z - i,y +!!! Do k=sgg%alloc(iHx)%ZI , sgg%alloc(iHx)%ZE +!!! Do j=sgg%alloc(iHz)%YI , sgg%alloc(iHz)%YE +!!! Do i=sgg%alloc(iHy)%XI , sgg%alloc(iHy)%XE +!!! medio1 =sggMiEx(i,j,k) +!!! medio2 =sggMiEy(i,j,k) +!!! medio3 =sggMiEz(i,j,k) +!!! mediois1= sgg%med(medio1)%is%already_YEEadvanced_byconformal .or. sgg%med(medio1)%is%split_and_useless +!!! mediois2= sgg%med(medio2)%is%already_YEEadvanced_byconformal .or. sgg%med(medio2)%is%split_and_useless +!!! mediois3= sgg%med(medio3)%is%already_YEEadvanced_byconformal .or. sgg%med(medio3)%is%split_and_useless +!!! if (mediois1.or.mediois2.or.mediois3) then +!!! sggMiNo(i,j,k)=0 !ojo !esto no sirve para contactos conformal SGBC-wires, solo para conformal PEC-wires +!!! endif +!!! End do +!!! End do +!!! End do +!!!!fin pedado de niapa + + + endif +#endif + + return + end subroutine AssigLossyOrPECtoNodes + + LOGICAL function IGUALES(A,B) RESULT(IGUAL) + real(kind=RKIND) :: A,B,ERR + igual=.false. + if (abs(A+B)>1e-20 ) then + ERR=2.0_RKIND*ABS((A-B)/(A+B)) + if (err <1e-2_RKIND) igual=.true. !en tanto por ciento me apanio con un 1 por ciento + ELSE + ERR=ABS(A-B) + if (err <1e-20_RKIND) igual=.true. !en valor absoluto para valores casi nulos le pido que el error sea casi nulo + end if + return + end function IGUALES + + + subroutine populatePlaneWaveRC(Planewave,simu_devia) + type(planeonde_t) :: PlaneWave + integer :: kkk + real(kind=8) :: theta, phi, alpha,beta,alpha1,alpha2,amplitud,FACTOR + complex :: beta1,beta2 + logical :: primeravez,simu_devia + character(len=BUFSIZE) :: buff +!integer :: values(1:8), k +!integer, dimension(:), allocatable :: seed +!real(8) :: r +!call date_and_time(values=values) +!call random_seed(size=k) +!allocate(seed(1:k)) +!seed(:) = values(8) +!call random_seed(put=seed) + + call random_seed() + + amplitud=1.0 + do kkk=1,PlaneWave%numModes +1 continue !punto de retorno si hay algun error de redondeo !vivan los gotos !!!! + primeravez=.true. + theta=0.; phi=0.; + do while(((2.0_RKIND *pi*sin(theta) < phi)).or.primeravez) !moglie + primeravez=.false. + call RANDOM_NUMBER(theta) + theta=pi*theta + call RANDOM_NUMBER(phi) + phi=2.0_RKIND *pi*phi + end do !moglie + phi=phi/sin(theta) !moglie +!ahora la polarizacion +!!!! si los hago asi hay apegotonamiento en los polos 281115 pero con los beta tampoco me sale. Seguir pensando y hacerlo con poincare algun dia 281115 +!generado con ortogonalidad_teM_parafuentesRC.nb +!ojo que el atan de fortran y de mathematica estan invertidos!!!! +2 continue + call RANDOM_NUMBER(beta) + beta=2.0_RKIND *pi*beta + alpha1=atan2( Cos(theta)/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0),-((Cos(beta - phi)*Sin(theta))/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0))) + alpha2=atan2(-(Cos(theta)/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0)), (Cos(beta - phi)*Sin(theta))/Sqrt(Cos(theta)**2.0_RKIND+ Cos(beta - phi)**2.0*Sin(theta)**2.0)) + if ((alpha1 <= pi).and.(alpha1 >= 0.0)) then + alpha=alpha1 + elseif ((alpha2 <= pi).and.(alpha2 >= 0.0)) then + alpha=alpha2 + else + goto 2 + ! write(buff,*) 'Error generando direcciones aleatorias para RC planewaves. ' + ! call STOPONERROR(0,0,buff) + end if + !!! beta1=atan2(-2.0*1.0/Tan(alpha)*1.0/Tan(theta)*Sin(phi) + Sqrt(2.0)*1.0/Tan(phi)*1.0/Sin(alpha)**2.0*1.0/Sin(theta)**2.0*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0)), & + !!! -(1.0/Sin(alpha)*1.0/Sin(theta)*(2.0*Cos(alpha)*Cos(phi)*Cos(theta) + Sqrt(2.0)*1.0/Sin(alpha)*1.0/Sin(theta)*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0))))) + !!! beta2=atan2(-(1.0/Sin(alpha)*1.0/Sin(theta)*(2.0*Cos(alpha)*Cos(theta)*Sin(phi) + Sqrt(2.0)*1.0/Tan(phi)*1.0/Sin(alpha)*1.0/Sin(theta)*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0)))), & + !!! -2.0*Cos(phi)*1.0/Tan(alpha)*1.0/Tan(theta) + Sqrt(2.0)*1.0/Sin(alpha)**2.0*1.0/Sin(theta)**2.0*Sqrt(-((Cos(2.0*alpha) + Cos(2.0*theta))*Sin(alpha)**2.0*Sin(phi)**2.0*Sin(theta)**2.0))) + + +!!!ahora la incertumbre en la posicion + call RANDOM_NUMBER(factor) + planewave%INCERT(kkk)=planewave%incertMax*factor +!!! + ! + planewave%px(kkk) = Sin (theta) * Cos (phi) + planewave%py(kkk) = Sin (theta) * Sin (phi) + planewave%pz(kkk) = Cos (theta) + planewave%ex(kkk) = amplitud * Sin (alpha) * Cos (beta) + planewave%ey(kkk) = amplitud * Sin (alpha) * Sin (beta) + planewave%ez(kkk) = amplitud * Cos (alpha) + !ojo con estos redondeos. + !!!if (Abs(planewave%ex(KKK)/amplitud) < 1e-4) planewave%ex(KKK) = 0.0_RKIND + !!!if (Abs(planewave%ey(KKK)/amplitud) < 1e-4) planewave%ey(KKK) = 0.0_RKIND + !!!if (Abs(planewave%ez(KKK)/amplitud) < 1e-4) planewave%ez(KKK) = 0.0_RKIND + !!!if (Abs(planewave%px(KKK)) < 1e-4) planewave%px(KKK) = 0.0_RKIND + !!!if (Abs(planewave%py(KKK)) < 1e-4) planewave%py(KKK) = 0.0_RKIND + !!!if (Abs(planewave%pz(KKK)) < 1e-4) planewave%pz(KKK) = 0.0_RKIND + if (abs(planewave%px(KKK)**2.+planewave%py(KKK)**2.+planewave%pz(KKK)**2.-1.)>1e-4) then +!!! write(buff,*) 'NO TEM PLANEWAVE in RC routine' + goto 1 !call STOPONERROR(0,0,buff) + end if + if (abs(planewave%ex(KKK)**2.+planewave%ey(KKK)**2.+planewave%ez(KKK)**2.-amplitud**2.)>1e-4) then +!!! write(buff,*) 'NO TEM PLANEWAVE in RC routine' + goto 1 !call STOPONERROR(0,0,buff) + end if + if (Abs(planewave%px(KKK)*planewave%ex(KKK)+planewave%py(KKK)*planewave%ey(KKK)+planewave%pz(KKK)*planewave%ez(KKK)) >= 1e-4) then +!!! write(buff,*) 'NO TEM PLANEWAVE in RC routine' + goto 1 !call STOPONERROR(0,0,buff) + end if +!!! write (777,'(i5,12e19.9e3)') kkk,theta, phi, alpha, beta,factor + end do + + open(888,file='rc_EP.dat', FORM='formatted') + do + read (888,'(i5,12e19.9e3)',end=888,err=888) kkk, planewave%px(kkk),planewave%py(kkk),planewave%pz(kkk), & + planewave%ex(kkk),planewave%ey(kkk),planewave%ez(kkk), planewave%INCERT(kkk) + end do +888 continue + close(888) + + if (.not.simu_devia) then !solo lo escribe el principal + open(888,file='rc_EP.dat', FORM='formatted') + do kkk=1,PlaneWave%numModes + write (888,'(i5,12e19.9e3)') kkk, planewave%px(kkk),planewave%py(kkk),planewave%pz(kkk), & + planewave%ex(kkk),planewave%ey(kkk),planewave%ez(kkk),planewave%INCERT(kkk) + end do + close(888) + end if + + end subroutine populatePlaneWaveRC + +!!!! subroutine init_random_seed() +!!!! use iso_fortran_env, only: int64 +!!!! implicit none +!!!! integer, allocatable :: seed(:) +!!!! integer :: i, n, un, istat, dt(8), pid +!!!! integer(int64) :: t +!!!! +!!!! call random_seed(size = n) +!!!! allocate(seed(n)) +!!!! ! First try if the OS provides a random number generator +!!!! open(newunit=un, file="/dev/urandom", access="stream", & +!!!! form="unformatted", action="read", status="old", iostat=istat) +!!!! if (istat == 0) then +!!!! read(un) seed +!!!! close(un) +!!!! else +!!!! ! Fallback to XOR:ing the current time and pid. The PID is +!!!! ! useful in case one launches multiple instances of the same +!!!! ! program in Parallel. +!!!! call system_clock(t) +!!!! if (t == 0) then +!!!! call date_and_time(values=dt) +!!!! t = (dt(1) - 1970) * 365_int64 * 24 * 60 * 60 * 1000 & +!!!! + dt(2) * 31_int64 * 24 * 60 * 60 * 1000 & +!!!! + dt(3) * 24_int64 * 60 * 60 * 1000 & +!!!! + dt(5) * 60 * 60 * 1000 & +!!!! + dt(6) * 60 * 1000 + dt(7) * 1000 & +!!!! + dt(8) +!!!! end if +!!!! pid = getpid() +!!!! t = ieor(t, int(pid, kind(t))) +!!!! do i = 1, n +!!!! seed(i) = lcg(t) +!!!! end do +!!!! end if +!!!! call random_seed(put=seed) +!!!! contains +!!!! ! This simple PRNG might not be good enough for real work, but is +!!!! ! sufficient for seeding a better PRNG. +!!!! function lcg(s) +!!!! integer :: lcg +!!!! integer(int64) :: s +!!!! if (s == 0) then +!!!! s = 104729 +!!!! else +!!!! s = mod(s, 4294967296_int64) +!!!! end if +!!!! s = mod(s * 279470273_int64, 4294967291_int64) +!!!! lcg = int(mod(s, int(huge(0), int64)), kind(0)) +!!!! end function lcg +!!!! end subroutine init_random_seed + + subroutine cuentatags(this,tagtype,layoutnumber,fichin) + + character(len=*), intent(in) :: fichin + integer(kind=4), intent(in) :: layoutnumber + + type(Parseador_t), intent(inout) :: this + LOGICAL :: foundDuplicate + integer(Kind=4) :: numertag, i,j, k, m, tama,tama2,tama3,tama2p,tama3p,precounting,acum,thefileno + character(len=BUFSIZE) :: tagToCheck + type(tagtype_t) :: tagtype + + !!!ojoo +!!!!return !ojooo + + do precounting=0,1 + numertag=0 + ! + tama = (this%pecregs%nvols) + do i = 1, tama + numertag = numertag + 1; + if ((i>1)) then + if ((this%pecregs%vols(i)%tag == this%pecregs%vols(i-1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + if (precounting==1) tagtype%tag(numertag) = this%pecregs%vols(i)%tag + end do + tama = (this%pecregs%nsurfs) + do i = 1, tama + numertag = numertag + 1; + if ((i>1)) then + if ((this%pecregs%surfs(i)%tag == this%pecregs%surfs(i-1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + if (precounting==1) tagtype%tag(numertag) = this%pecregs%surfs(i)%tag + end do + tama = (this%pecregs%nLINS) + do i = 1, tama + numertag = numertag + 1; + if ((i>1)) then + if ((this%pecregs%lins(i)%tag == this%pecregs%lins(i-1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + if (precounting==1) tagtype%tag(numertag) = this%pecregs%lins(i)%tag + end do + ! + tama = (this%pmcregs%nvols) + do i = 1, tama + numertag = numertag + 1; + if ((i>1)) then + if ((this%pmcregs%vols(i)%tag == this%pmcregs%vols(i-1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + if (precounting==1) tagtype%tag(numertag) = this%pmcregs%vols(i)%tag + end do + tama = (this%pmcregs%nsurfs) + do i = 1, tama + numertag = numertag + 1; + if ((i>1)) then + if ((this%pmcregs%surfs(i)%tag == this%pmcregs%surfs(i-1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + if (precounting==1) tagtype%tag(numertag) = this%pmcregs%surfs(i)%tag + end do + tama = (this%pmcregs%nLINS) + do i = 1, tama + numertag = numertag + 1; + if ((i>1)) then + if ((this%pmcregs%lins(i)%tag == this%pmcregs%lins(i-1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + if (precounting==1) tagtype%tag(numertag) = this%pmcregs%lins(i)%tag + end do + ! + ! + ! + + tama = (this%DielRegs%nvols) + do i = 1, tama + tama2 = (this%DielRegs%vols(i)%n_c1P) + tama3 = (this%DielRegs%vols(i)%n_c2P) + + if ((tama2 == 0) .and. (tama3==0)) then + print *,'Bug in Dielectric Tags. Missing coordinates' + stop + end if + + ! Check c1P coordinates + call checkDielectricComponentTags(this%DielRegs%vols(i), this%DielRegs%vols(1:i-1), i-1, & + 'c1P', numertag, tagtype, precounting, & + 'Bug in Dielectric Volume Tags') + + ! Check c2P coordinates + call checkDielectricComponentTags(this%DielRegs%vols(i), this%DielRegs%vols(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Dielectric Volume Tags') + end do + + ! Similar for surfaces + tama = (this%DielRegs%nSurfs) + do i = 1, tama + tama2 = (this%DielRegs%surfs(i)%n_c1P) + tama3 = (this%DielRegs%surfs(i)%n_c2P) + + if ((tama2 == 0) .and. (tama3==0)) then + print *,'Bug in Dielectric Tags. Missing coordinates' + stop + end if + + ! Check c1P coordinates + call checkDielectricComponentTags(this%DielRegs%surfs(i), this%DielRegs%surfs(1:i-1), i-1, & + 'c1P', numertag, tagtype, precounting, & + 'Bug in Dielectric Surface Tags') + + ! Check c2P coordinates + call checkDielectricComponentTags(this%DielRegs%surfs(i), this%DielRegs%surfs(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Dielectric Surface Tags') + end do + + ! Similar for surfaces + tama = (this%DielRegs%nLins) + do i = 1, tama + tama2 = (this%DielRegs%Lins(i)%n_c1P) + tama3 = (this%DielRegs%Lins(i)%n_c2P) + + if ((tama2 == 0) .and. (tama3==0)) then + print *,'Bug in Dielectric Tags. Missing coordinates' + stop + end if + + ! Check c1P coordinates + call checkDielectricComponentTags(this%DielRegs%lins(i), this%DielRegs%lins(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Dielectric Surface Tags') + + ! Check c2P coordinates + call checkDielectricComponentTags(this%DielRegs%lins(i), this%DielRegs%lins(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Dielectric Surface Tags') + end do +! + tama = (this%animats%nvols) + do i = 1, tama + tama2 = (this%DielRegs%vols(i)%n_c1P) + tama3 = (this%DielRegs%vols(i)%n_c2P) + + if ((tama2 == 0) .and. (tama3==0)) then + print *,'Bug in Animat Tags. Missing coordinates' + stop + end if + + ! Check c1P coordinates + call checkAnimatedComponentTags(this%aniMats%vols(i), this%aniMats%vols(1:i-1), i-1, & + 'c1P', numertag, tagtype, precounting, & + 'Bug in Animat Volume Tags') + + ! Check c2P coordinates + call checkAnimatedComponentTags(this%aniMats%vols(i), this%aniMats%vols(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Animat Volume Tags') + end do + ! + tama = (this%animats%nSurfs) + do i = 1, tama + tama2 = (this%DielRegs%Surfs(i)%n_c1P) + tama3 = (this%DielRegs%Surfs(i)%n_c2P) + + if ((tama2 == 0) .and. (tama3==0)) then + print *,'Bug in Animat Tags. Missing coordinates' + stop + end if + + ! Check c1P coordinates + call checkAnimatedComponentTags(this%aniMats%Surfs(i), this%aniMats%Surfs(1:i-1), i-1, & + 'c1P', numertag, tagtype, precounting, & + 'Bug in Animat Surface Tags') + + ! Check c2P coordinates + call checkAnimatedComponentTags(this%aniMats%Surfs(i), this%aniMats%Surfs(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Animat Surface Tags') + end do + ! + tama = (this%animats%nLins) + do i = 1, tama + tama2 = (this%DielRegs%Lins(i)%n_c1P) + tama3 = (this%DielRegs%Lins(i)%n_c2P) + + if ((tama2 == 0) .and. (tama3==0)) then + print *,'Bug in Animat Tags. Missing coordinates' + stop + end if + + ! Check c1P coordinates + call checkAnimatedComponentTags(this%aniMats%Lins(i), this%aniMats%Lins(1:i-1), i-1, & + 'c1P', numertag, tagtype, precounting, & + 'Bug in Animat Line Tags') + + ! Check c2P coordinates + call checkAnimatedComponentTags(this%aniMats%Lins(i), this%aniMats%Lins(1:i-1), i-1, & + 'c2P', numertag, tagtype, precounting, & + 'Bug in Animat Line Tags') + end do +! +! +! + tama = (this%frqdepmats%nvols) + do i = 1, tama + numertag = numertag + 1; + tama2 = (this%frqdepmats%vols(i)%n_c) + if (tama2/=0) then + if ((i>1)) then + if ((this%frqdepmats%vols(i)%c(1)%tag == this%frqdepmats%vols(i-1)%c(1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + end if + if (precounting==1) then + if (tama2/=0) then + tagtype%tag(numertag) = this%frqdepmats%vols(i)%c(1)%tag + else + print *,'bug in tags. ' + stop + end if + do j = 1, tama2 + if (trim(adjustl(this%frqdepmats%vols(i)%c(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then + print *,'bug in tags. ' + stop + end if + end do + end if + end do + ! + tama = (this%frqdepmats%nsurfs) + do i = 1, tama + numertag = numertag + 1; + tama2 = (this%frqdepmats%surfs(i)%n_c) + if (tama2/=0) then + if ((i>1)) then + if ((this%frqdepmats%surfs(i)%c(1)%tag == this%frqdepmats%surfs(i-1)%c(1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + end if + if (precounting==1) then + if (tama2/=0) then + tagtype%tag(numertag) = this%frqdepmats%surfs(i)%c(1)%tag + else + print *,'bug in tags. ' + stop + end if + do j = 1, tama2 + if (trim(adjustl(this%frqdepmats%surfs(i)%c(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then + print *,'bug in tags. ' + stop + end if + end do + end if + end do + ! + tama = (this%frqdepmats%nlins) + do i = 1, tama + numertag = numertag + 1; + tama2 = (this%frqdepmats%lins(i)%n_c) + if (tama2/=0) then + if ((i>1)) then + if ((this%frqdepmats%lins(i)%c(1)%tag == this%frqdepmats%lins(i-1)%c(1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + end if + if (precounting==1) then + if (tama2/=0) then + tagtype%tag(numertag) = this%LossyThinSurfs%cs(i)%C(1)%tag + else + print *,'bug in tags. ' + stop + end if + do j = 1, tama2 + if (trim(adjustl(this%frqdepmats%lins(i)%c(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then + print *,'bug in tags. ' + stop + end if + end do + end if + end do +!!! + tama = this%LossyThinSurfs%length + do i = 1, tama + call checkLossyTags(this%LossyThinSurfs%cs(i), & + this%LossyThinSurfs%cs(1:i-1), & + i-1, numertag, tagtype, precounting) + end do + + tama = this%twires%n_tw + do i=1, tama + numertag = numertag + 1 + tama2 = this%twires%TW(i)%N_TWC + if (tama2/=0) then + if ((i>1)) then + if ((this%twires%TW(i)%TWC(1)%tag == this%twires%TW(i-1)%TWC(1)%tag )) then !do not increase + numertag=numertag-1 + end if + end if + end if + if (precounting==1) then + if (tama2/=0) then + tagtype%tag(numertag) = this%twires%TW(i)%TWC(1)%tag + else + print *,'bug in tags. ' + stop + end if + do j = 1, tama2 + if (trim(adjustl(this%twires%TW(i)%TWC(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then + print *,'bug in tags. ' + stop + end if + end do + end if + end do + +#ifdef CompileWithMTLN + block + class(cable_t), pointer :: ptr + do i = 1, this%mtln%n_unsh + this%mtln%n_sh + ptr => this%mtln%cables(i)%ptr + select type(ptr) + type is(unshielded_multiwire_t) + numertag = numertag + 1 + if (precounting == 1) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag + end select + end do + end block +#endif + + tama = this%swires%n_sw + do i=1, tama + numertag = numertag + 1 + tama2=this%swires%SW(i)%n_swc + if (tama2/=0) then + if ((i>1)) then + if ((this%swires%SW(i)%swc(1)%tag == this%swires%SW(i-1)%swc(1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + end if + if (precounting==1) then + if (tama2/=0) then + tagtype%tag(numertag) = this%swires%SW(i)%swc(1)%tag + else + print *,'bug in tags. ' + stop + end if + do j = 1,tama2 + if (trim(adjustl(this%swires%SW(i)%swc(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then + print *,'bug in tags. ' + stop + end if + end do + end if + end do + + tama = this%tSlots%n_tg + do i = 1, tama + numertag = numertag + 1 + tama2 = this%tSlots%Tg(i)%N_tgc + if (tama2/=0) then + if ((i>1)) then + if ((this%tSlots%Tg(i)%TgC(1)%tag == this%tSlots%Tg(i-1)%TgC(1)%tag)) then !do not increase + numertag=numertag-1 + end if + end if + end if + if (precounting==1) then + if (tama2/=0) then + tagtype%tag(numertag) = this%tSlots%Tg(i)%TgC(1)%tag + else + print *,'bug in tags. ' + stop + end if + do j = 1, tama2 + if (trim(adjustl(this%tSlots%Tg(i)%TgC(j)%tag)) /= trim(adjustl(tagtype%tag(numertag)))) then + print *,'bug in tags. ' + stop + end if + end do + end if + end do + + if (associated(this%conformalRegs%volumes)) then + numertag = numertag + 1 + if (precounting == 1) tagtype%tag(numertag) = this%conformalRegs%volumes(1)%tag + end if + if (associated(this%conformalRegs%surfaces)) then + numertag = numertag + 1 + if (precounting == 1) tagtype%tag(numertag) = this%conformalRegs%surfaces(1)%tag + end if +!!!!!!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!! + !!!!!!!!!!!!!!!!!!!!! + if (precounting==0) then + tagtype%numertags = numertag + allocate(tagtype%tag(1:numertag+1)) !uno mas para luego jugar + tagtype%tag='' + else !elimina repetidos + do i=1,numertag + do j=i+1,numertag + if ((trim(adjustl(tagtype%tag(i)))==trim(adjustl(tagtype%tag(j))))) then + tagtype%tag(j)='' + end if + end do + end do + i=1 + acum=0 + do while ((i<=numertag).and.(acum<=numertag+1)) + if (trim(adjustl(tagtype%tag(i)))=='') then + tagtype%tag(i:numertag)=tagtype%tag(i+1:numertag+1) + acum=acum+1 + else + i=i+1 + end if + end do + numertag=i-1 + tagtype%numertags = numertag + end if + end do !del precounting + + + return + end subroutine cuentatags + + + subroutine checkDielectricComponentTags (component, prev_components, n_prev, coord_type, numertag, tagtype, precounting, error_msg) + type(Dielectric_t), intent(in) :: component ! Current component + type(Dielectric_t), intent(in) :: prev_components(:) ! Array of previous components + integer, intent(in) :: n_prev ! Number of previous components + character(len=*), intent(in) :: coord_type ! 'c1P' or 'c2P' + integer, intent(inout) :: numertag + type(tagtype_t), intent(inout) :: tagtype + integer, intent(in) :: precounting + character(len=*), intent(in) :: error_msg + + integer :: j, tama2 + + if (coord_type == 'c1P') then + tama2 = component%n_c1P + else + tama2 = component%n_c2P + end if + + check_tags: do j = 1, tama2 + numertag = numertag + 1 + call checkDielectricTagForDuplicate(component, prev_components, n_prev, j, coord_type, numertag, tagtype, precounting, error_msg) + end do check_tags + end subroutine + + subroutine checkDielectricTagForDuplicate(component, prev_components, n_prev, idx, coord_type, numertag, tagtype, precounting, error_msg) + type(Dielectric_t), intent(in) :: component + type(Dielectric_t), intent(in) :: prev_components(:) + integer, intent(in) :: n_prev + integer, intent(in) :: idx + character(len=*), intent(in) :: coord_type + integer, intent(inout) :: numertag + type(tagtype_t), intent(inout) :: tagtype + integer, intent(in) :: precounting + character(len=*), intent(in) :: error_msg + + logical :: foundDuplicate + character(len=BUFSIZE) :: tagToCheck + integer :: k, m + + if (coord_type == 'c1P') then + tagToCheck = trim(adjustl(component%c1P(idx)%tag)) + else + tagToCheck = trim(adjustl(component%c2P(idx)%tag)) + end if + + foundDuplicate = .false. + + if (idx > 1) then + check_current: do k = 1, idx-1 + if (coord_type == 'c1P') then + if (tagToCheck == trim(adjustl(component%c1P(k)%tag))) then + foundDuplicate = .true. + exit check_current + end if + else + if (tagToCheck == trim(adjustl(component%c2P(k)%tag))) then + foundDuplicate = .true. + exit check_current + end if + end if + end do check_current + end if + + if (.not. foundDuplicate) then + check_previous: do m = 1, n_prev + if (prev_components(m)%n_c1P > 0) then + do k = 1, prev_components(m)%n_c1P + if (tagToCheck == trim(adjustl(prev_components(m)%c1P(k)%tag))) then + print *, error_msg + print *, 'Duplicate tag found:', tagToCheck + stop + end if + end do + end if + + if (prev_components(m)%n_c2P > 0) then + do k = 1, prev_components(m)%n_c2P + if (tagToCheck == trim(adjustl(prev_components(m)%c2P(k)%tag))) then + print *, error_msg + print *, 'Duplicate tag found:', tagToCheck + stop + end if + end do + end if + end do check_previous + end if + + if (foundDuplicate) then + numertag = numertag - 1 + else if (precounting == 1) then + tagtype%tag(numertag) = tagToCheck + end if + end subroutine + + + subroutine checkAnimatedComponentTags (component, prev_components, n_prev, coord_type, numertag, tagtype, precounting, error_msg) + type(ANISOTROPICbody_t), intent(in) :: component ! Current component + type(ANISOTROPICbody_t), intent(in) :: prev_components(:) ! Array of previous components + integer, intent(in) :: n_prev ! Number of previous components + character(len=*), intent(in) :: coord_type ! 'c1P' or 'c2P' + integer, intent(inout) :: numertag + type(tagtype_t), intent(inout) :: tagtype + integer, intent(in) :: precounting + character(len=*), intent(in) :: error_msg + + integer :: j, tama2 + + if (coord_type == 'c1P') then + tama2 = component%n_c1P + else + tama2 = component%n_c2P + end if + + check_tags: do j = 1, tama2 + numertag = numertag + 1 + call checkAnimatedTagForDuplicate(component, prev_components, n_prev, j, coord_type, numertag, tagtype, precounting, error_msg) + end do check_tags + end subroutine + + subroutine checkAnimatedTagForDuplicate(component, prev_components, n_prev, idx, coord_type, numertag, tagtype, precounting, error_msg) + type(ANISOTROPICbody_t), intent(in) :: component + type(ANISOTROPICbody_t), intent(in) :: prev_components(:) + integer, intent(in) :: n_prev + integer, intent(in) :: idx + character(len=*), intent(in) :: coord_type + integer, intent(inout) :: numertag + type(tagtype_t), intent(inout) :: tagtype + integer, intent(in) :: precounting + character(len=*), intent(in) :: error_msg + + logical :: foundDuplicate + character(len=BUFSIZE) :: tagToCheck + integer :: k, m + + if (coord_type == 'c1P') then + tagToCheck = trim(adjustl(component%c1P(idx)%tag)) + else + tagToCheck = trim(adjustl(component%c2P(idx)%tag)) + end if + + foundDuplicate = .false. + + if (idx > 1) then + check_current: do k = 1, idx-1 + if (coord_type == 'c1P') then + if (tagToCheck == trim(adjustl(component%c1P(k)%tag))) then + foundDuplicate = .true. + exit check_current + end if + else + if (tagToCheck == trim(adjustl(component%c2P(k)%tag))) then + foundDuplicate = .true. + exit check_current + end if + end if + end do check_current + end if + + if (.not. foundDuplicate) then + check_previous: do m = 1, n_prev + if (prev_components(m)%n_c1P > 0) then + do k = 1, prev_components(m)%n_c1P + if (tagToCheck == trim(adjustl(prev_components(m)%c1P(k)%tag))) then + print *, error_msg + print *, 'Duplicate tag found:', tagToCheck + stop + end if + end do + end if + + if (prev_components(m)%n_c2P > 0) then + do k = 1, prev_components(m)%n_c2P + if (tagToCheck == trim(adjustl(prev_components(m)%c2P(k)%tag))) then + print *, error_msg + print *, 'Duplicate tag found:', tagToCheck + stop + end if + end do + end if + end do check_previous + end if + + if (foundDuplicate) then + numertag = numertag - 1 + else if (precounting == 1) then + tagtype%tag(numertag) = tagToCheck + end if + end subroutine + + subroutine checkLossyTags(component, prev_components, n_prev, numertag, tagtype, precounting) + type(LossyThinSurface_t), intent(in) :: component + type(LossyThinSurface_t), intent(in) :: prev_components(:) + integer, intent(in) :: n_prev + integer, intent(inout) :: numertag + type(tagtype_t), intent(inout) :: tagtype + integer, intent(in) :: precounting + + integer :: j + + if (component%nc == 0) then + print *, 'Bug in LossyThinSurf Tags. Missing coordinates' + stop + end if + + check_tags: do j = 1, component%nc + numertag = numertag + 1 + call checkLossyTagForDuplicate(component, prev_components, n_prev, j, numertag, tagtype, precounting) + end do check_tags + end subroutine + + subroutine checkLossyTagForDuplicate(component, prev_components, n_prev, idx, numertag, tagtype, precounting) + type(LossyThinSurface_t), intent(in) :: component + type(LossyThinSurface_t), intent(in) :: prev_components(:) + integer, intent(in) :: n_prev + integer, intent(in) :: idx + integer, intent(inout) :: numertag + type(tagtype_t), intent(inout) :: tagtype + integer, intent(in) :: precounting + + logical :: foundDuplicate + character(len=BUFSIZE) :: tagToCheck + integer :: k, m + + tagToCheck = trim(adjustl(component%C(idx)%tag)) + foundDuplicate = .false. + + if (idx > 1) then + check_current: do k = 1, idx-1 + if (tagToCheck == trim(adjustl(component%C(k)%tag))) then + foundDuplicate = .true. + exit check_current + end if + end do check_current + end if + + if ((.not. foundDuplicate) .and. (n_prev > 0)) then + check_previous: do m = 1, n_prev + if (prev_components(m)%nc > 0) then + do k = 1, prev_components(m)%nc + if (tagToCheck == trim(adjustl(prev_components(m)%C(k)%tag))) then + foundDuplicate = .true. + end if + end do + end if + end do check_previous + end if + + if (foundDuplicate) then + numertag = numertag - 1 + else if (precounting == 1) then + tagtype%tag(numertag) = tagToCheck + end if + end subroutine + + + function searchtag(tagtype,tag) result(numertag) + + + character(len=*), intent(in) :: tag + integer(Kind=4) :: i,numertag + type(tagtype_t), intent(in) :: tagtype + + numertag=-1 + busca: do i=1,tagtype%numertags + if (trim(adjustl(tagtype%tag(i)))==trim(adjustl(tag))) then + numertag=i + exit busca + end if + end do busca + return + end function searchtag + + +end module Preprocess_m From c0553c37a41f46e7d56a6fee15e4ad128f91a2bd Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Wed, 19 Aug 2026 12:45:54 +0200 Subject: [PATCH 31/35] Reverting cosmetic changes. --- src_main_pub/timestepping.F90 | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index be43f3092..075e473f2 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -1,5 +1,5 @@ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! SEMBA_FDTD sOLVER MODULE +! SEMBA_FDTD sOLVER module ! Creation date Date : April, 8, 2010 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -68,13 +68,12 @@ module Solver_m #endif - USE EpsMuTimeScale_m - USE CALC_CONSTANTS_m + use EpsMuTimeScale_m + use CALC_CONSTANTS_m #ifdef CompileWithPrescale - USE P_rescale + use P_rescale #endif #ifdef CompileWithMTLN - ! use mtln_solver_mod, mtln_solver_t => mtln_t use mtln_types_m, only: mtln_t use Wire_bundles_mtln_m #endif @@ -99,31 +98,31 @@ module Solver_m type(logic_control_t) :: thereAre type(perform_t) :: perform, d_perform - real(kind=rkind), pointer, dimension (:,:,:), contiguous :: Ex,Ey,Ez,Hx,Hy,Hz - real(kind=rkind), pointer, dimension (:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh + real(kind=rkind), pointer, dimension(:,:,:), contiguous :: Ex,Ey,Ez,Hx,Hy,Hz + real(kind=rkind), pointer, dimension(:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh type(constants_t) :: g - real (kind=RKIND_tiempo) :: lastexecutedtime - real (kind=RKIND) :: maxSourceValue + real(kind=RKIND_tiempo) :: lastexecutedtime + real(kind=RKIND) :: maxSourceValue - integer (kind=4) :: initialtimestep, lastexecutedtimestep, ini_save, n_info, n + integer(kind=4) :: initialtimestep, lastexecutedtimestep, ini_save, n_info, n type(bounds_t) :: bounds - type (EpsMuTimeScale_input_parameters_t) :: EpsMuTimeScale_input_parameters + type(EpsMuTimeScale_input_parameters_t) :: EpsMuTimeScale_input_parameters logical :: parar, everflushed = .false., still_planewave_time ! semba variables - type (sggfdtdinfo_t) :: sgg + type(SGGFDTDINFO_t) :: sgg type(media_matrices_t) :: media type(taglist_t) :: tag_numbers - type (limit_t), dimension(1:6) :: SINPML_fullsize,fullsize + type(limit_t), dimension(1:6) :: SINPML_fullsize,fullsize logical :: finishedwithsuccess = .false. - real (kind=rkind) :: eps0,mu0 - type (tagtype_t) :: tagtype + real(kind=rkind) :: eps0,mu0 + type(tagtype_t) :: tagtype type(conformal_surface_face_state_t), allocatable :: conformal_surface_faces(:) #ifdef CompileWithMTLN - type (mtln_t) :: mtln_parsed + type(mtln_t) :: mtln_parsed #endif contains From a3a116c5b9aad2a97bd32dc0529c2d58f4835b3a Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Wed, 19 Aug 2026 13:06:38 +0200 Subject: [PATCH 32/35] Minimize preprocess and timestepping changes against origin/dev --- src_main_pub/preprocess_geom.F90 | 508 +++++-------- src_main_pub/timestepping.F90 | 1180 ++++++++++++++---------------- 2 files changed, 754 insertions(+), 934 deletions(-) diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index 1a75f188a..f505c46e9 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -15,9 +15,8 @@ module Preprocess_m #ifdef CompileWithMTLN use mtln_types_m, only: cable_t, unshielded_multiwire_t #endif - !healer sgg10 use CreateMatrices_m - !typos que leo desde mi FDE + use FDETYPES_m use DMMA_m use conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z @@ -33,7 +32,7 @@ module Preprocess_m ! contains !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SINPML_fullsize, fullsize, this, & + subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs, SINPML_fullsize, fullsize, this, & groundwires,attfactor,mibc,SGBC,SGBCDispersive,MEDIOEXTRA,maxSourceValue,skindepthpre,createmapvtk,input_conformal_flag,CLIPREGION,boundwireradius,maxwireradius,updateshared,run_with_dmma, & eps00,mu00,simu_devia,hay_slanted_wires,verbose,ignoresamplingerrors,tagtype,wiresflavor) type(media_matrices_t), intent(inout) :: media @@ -69,7 +68,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN LOGICAL :: isathinwire, VALIDO, existia,medioespecial,input_conformal_flag,nodo_cazado LOGICAL :: errnofile,errnofile1,errnofile2,errnofile3,errnofile4 real(kind=RKIND) :: tiempo1, tiempo2, field1, field2,rdummy - INTEGER (KIND=4) :: nsurfs, numus, layoutnumber, size,OrigIndex,numminus + integer(kind=4) :: nsurfs, numus, layoutnumber, num_procs,OrigIndex,numminus real(kind=RKIND) :: delta,del,sig_max integer(kind=4), dimension(:), ALLOCATABLE :: contapuntos integer(kind=4) :: conta1, conta2, MEDIO,imenos1,jmenos1,kmenos1,o,p,puntoxi,puntoyi,puntozi, & @@ -133,25 +132,27 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - WRITE (whoami, '(a,i5,a,i5,a)') '(', layoutnumber + 1, '/', size, ') ' + write(whoami, '(a,i5,a,i5,a)') '(', layoutnumber + 1, '/', num_procs, ') ' write(whoamishort,'(i5)') layoutnumber+1 !create space for the etangential shared info sgg%EShared%Conta = 0 sgg%EShared%MaxConta = 10 allocate(sgg%EShared%elem(1:sgg%EShared%MaxConta)) + call buildConformalMedia(this%conformalRegs, conformal_volumes, conformal_surfaces) sgg%dt = changeTimeStepIfConformalNeeded(sgg%dt) - if (associated(this%conformalRegs%volumes)) then + if (associated(this%conformalRegs%volumes)) then volume_side_maps = buildSideMaps(this%conformalRegs%volumes) else allocate(volume_side_maps(0)) - end if + end if if (associated(this%conformalRegs%surfaces)) then surface_side_maps = buildSideMaps(this%conformalRegs%surfaces) else allocate(surface_side_maps(0)) - end if + end if + ! Cuenta los medios !!!!!calcula tamanios @@ -199,21 +200,17 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!! contamedia = contamedia +1 !para acomodar los nodal sources como caso especial de linea vacia - call getDifferentEdgeRatios(edge_ratios, conformal_volumes) call getDifferentEdgeRatios(edge_ratios, conformal_surfaces) call getDifferentFaceRatios(face_ratios, conformal_volumes) call getDifferentFaceRatios(face_ratios, conformal_surfaces) - ! edge_ratios = getDifferentEdgeRatios(conformal_volumes) - ! face_ratios = getDifferentFaceRatios(conformal_volumes) contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 if (findloc(face_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 + #ifdef CompileWithMTLN contamedia = contamedia + this%mtln%n_unsh #endif - ! Surface updates need media distinct from volume updates even when their - ! geometric ratios are equal. if (ubound(conformal_volumes, 1) > 0 .and. ubound(conformal_surfaces, 1) > 0) then contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) if (findloc(edge_ratios, 0.0, 1) /= 0) contamedia = contamedia - 1 @@ -314,7 +311,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! tama = (this%plnSrc%nc) !!! write(buff,*) 'More than 1 Huygens box unsupported' -!!! IF (tama > 1) CALL STOPONERROR(layoutnumber,size,buff) +!!! if (tama > 1) call STOPONERROR(layoutnumber,num_procs,buff) !LO PONGO A MANO ojo amplitud = 1.0_RKIND sgg%NumPlaneWaves = tama @@ -424,7 +421,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (Abs(px*ex+py*ey+pz*ez) >= 1e-4) then write(buff,*) 'NO TEM PLANEWAVE',ex,ey,ez,px,py,pz,(px*ex+py*ey+pz*ez),this%plnSrc%collection(i)%alpha, & this%plnSrc%collection(i)%beta,this%plnSrc%collection(i)%theta,this%plnSrc%collection(i)%phi - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if ! sgg%PlaneWave(i)%px(1) = px @@ -887,7 +884,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN elseif (this%DielRegs%lins(i)%diodo) then !!!27/08/15 diodos aun no soportados write(buff, '(a)') 'Lumped Diodes currently unsupported. .' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) !!! sgg%Med(contamedia)%Is%Lumped = .true. sgg%Med(contamedia)%Is%lossy = .true. !importante que si es lumped esto se ponga a lossy para que thin-wires haga bien el bonding !bug agb 120123 test_GGGbugresis_wire_stoch_foragasconbug @@ -908,7 +905,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%Med(contamedia)%Is%Lumped = .false. if (.not. this%DielRegs%lins(i)%plain) then write(buff, '(a)') 'Buggy error 1 in preprocess lumped. .' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if !!!fin lumped @@ -1333,11 +1330,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN delta=(sgg%DZ(puntoZI)+sgg%Dz(puntoZI-1))/2.0_RKIND case default write(buff, '(a)') 'Buggy error 1 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end select ELSE write(buff, '(a)') 'Buggy error 2 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if sgg%Med(contamedia)%Multiport(1)%numcapas = this%LossyThinSurfs%cs(j)%numcapas !el especificado @@ -1365,7 +1362,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN rdummy=maxval(abs(this%LossyThinSurfs%cs(j)%MU_devia))+maxval(abs(this%LossyThinSurfs%cs(j)%SigmaM_devia)) if (rdummy>1.0e-15_RKIND) then write(buff, '(a)') 'Non null deviations found in sigmam or mu in composites. Still unsupported.' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if !!! @@ -1387,7 +1384,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (SGBCDispersive) sgg%Med(contamedia)%Is%SGBCDispersive = .TRUE. else write(buff, '(a)') 'Some -mibc -sgbc switch should be used for Composites.' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if sgg%Med(contamedia)%Is%Dielectric = .FALSE. @@ -1516,11 +1513,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN delta=(sgg%DZ(puntoZI)+sgg%Dz(puntoZI-1))/2.0_RKIND case default write(buff, '(a)') 'Buggy error 1 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end select ELSE write(buff, '(a)') 'Buggy error 2 in preprocess composites. .' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if sgg%Med(contamedia)%AnisMultiport(1)%Multiportdir = this%LossyThinSurfs%cs(j)%C(i)%or sgg%Med(contamedia)%AnisMultiport(1)%epr = this%LossyThinSurfs%cs(j)%eps / Eps0 @@ -1539,7 +1536,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%Med(contamedia)%Is%Lossy = .TRUE. else write(buff, '(a)') 'Some -mibc -sgbc switch should be used for Anisotropic Composites.' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if sgg%Med(contamedia)%Is%Dielectric = .FALSE. @@ -1873,7 +1870,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN +abs(sgg%Med(contamedia)%wire(1)%Series_C_LeftEnd_devia) if (rdummy>1.0e-15_RKIND) then write(buff, '(a)') 'Non null deviations found in L, C or radius in wires stoch. Still unsupported.' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if !fin stoch ! @@ -1882,7 +1879,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! ! tama2 = this%twires%TW(j)%N_TWC ! if (tama2 == 1) then - ! call stoponerror(layoutnumber,size,'A WIRE must have at least two segments') + ! call stoponerror(layoutnumber,num_procs,'A WIRE must have at least two segments') ! end if ! !esto no es ya necesario porque lo calculo yo luego en el wires @@ -1979,6 +1976,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do !del tama + !preanalisis de hilos embeddeds en materiales antes de asignarlos tama = this%twires%n_tw paraerrhilo=.false. @@ -2222,7 +2220,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !lo dejo que siga !luego el wires parara !if (paraerrhilo.and.(.not.groundwires)) then ! buff='Revise WIRE intersections!' - ! call STOPONERROR(layoutnumber,size,buff) + ! call STOPONERROR(layoutnumber,num_procs,buff) !end if !end preanalisis !perform the assignments @@ -2330,18 +2328,12 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN & Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, & & Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, sgg%Med, sgg%NumMedia, sgg%EShared, BoundingBox, punto, orientacion, & & contamedia, isathinwire,verbose,numeroasignaciones) - IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'VOLT') .OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'CURR').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTVOLT').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTCURR').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDVOLT').OR. & - & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDCURR')) THEN + if ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == F_SOURCE_VOLTAGE) .OR. & + & (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == F_SOURCE_CURRENT)) then !!!!!!!!!!!!! - IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'VOLT').OR. & - (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTVOLT')) THEN + if (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == F_SOURCE_VOLTAGE) then CONTAVOLT=CONTAVOLT+1 sgg%Med(contamedia)%wire(1)%VsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%SOFT=.TRUE. sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = this%twires%TW(j)%TWC(i)%m sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 0.0_RKIND !not provided by .nfde but supported by the simulation though untested @@ -2350,53 +2342,21 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%i = this%twires%TW(j)%TWC(i)%i sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%j = this%twires%TW(j)%TWC(i)%j sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%k = this%twires%TW(j)%TWC(i)%k - ELSE IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'CURR').OR. & - (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDCURR')) THEN + ELSE if ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == F_SOURCE_CURRENT)) then CONTAVOLT=CONTAVOLT+1 - CALL WarnErrReport (buff) - ! CALL STOPONERROR(layoutnumber,size,buff) sgg%Med(contamedia)%wire(1)%VsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%SOFT=.FALSE. !230323 FUENTES DURAS Y FALSAS SGG - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 0.0_RKIND + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Multiplier = 1.0e22_RKIND + sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%Resistance = 1.0e22_RKIND !not provided by .nfde but supported by the simulation though untested ! sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%i = this%twires%TW(j)%TWC(i)%i sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%j = this%twires%TW(j)%TWC(i)%j sgg%Med(contamedia)%wire(1)%VSource(CONTAVOLT)%k = this%twires%TW(j)%TWC(i)%k - ELSEIF (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'HARDVOLT') THEN - CONTACURR=CONTACURR+1 - sgg%Med(contamedia)%wire(1)%IsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%SOFT=.FALSE. !230323 FUENTES DURAS Y FALSAS SGG - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Resistance = 0.0_RKIND - !not provided by .nfde but supported by the simulation though untested - ! - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%i = this%twires%TW(j)%TWC(i)%i - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%j = this%twires%TW(j)%TWC(i)%j - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%k = this%twires%TW(j)%TWC(i)%k - ELSE IF ((trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) == 'SOFTCURR')) THEN - CONTACURR=CONTACURR+1 - CALL WarnErrReport (buff) - ! CALL STOPONERROR(layoutnumber,size,buff) - sgg%Med(contamedia)%wire(1)%IsourceExists = .TRUE. - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%SOFT=.true. !230323 FUENTES DURAS Y FALSAS SGG - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Multiplier = this%twires%TW(j)%TWC(i)%m - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%Resistance = 0.0_RKIND - !not provided by .nfde but supported by the simulation though untested - ! - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%fichero%name = trim (adjustl(this%twires%TW(j)%TWC(i)%SRCFILE)) - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%i = this%twires%TW(j)%TWC(i)%i - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%j = this%twires%TW(j)%TWC(i)%j - sgg%Med(contamedia)%wire(1)%ISource(CONTACURR)%k = this%twires%TW(j)%TWC(i)%k end if ELSEIF (trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) /= 'None') then write(buff,*) 'WRONG type of wire source '//trim(adjustl(this%twires%TW(j)%TWC(i)%SRCTYPE)) - call stoponerror (layoutnumber,size,buff) + call stoponerror (layoutnumber,num_procs,buff) end if end do hilosbarre sgg%Med(contamedia)%wire(1)%NUMVOLTAGESOURCES=CONTAVOLT @@ -2531,39 +2491,23 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!! - IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'VOLT').or. & - (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'SOFTVOLT')) THEN + if (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == F_SOURCE_VOLTAGE) then allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource) sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%SOFT=.TRUE. !fuentes duras sgg 230323. default blandas + ! sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%SOFT=.TRUE. !fuentes duras sgg 230323. default blandas sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%Multiplier = this%swires%SW(j)%swc(i)%m sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%Resistance = 0.0_RKIND sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VSource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - ELSE IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'CURR').OR. & - (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'HARDCURR')) THEN !EQUIVALENTES A IMPLEMENTAR UNA DE voltage - allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource) - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%VsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%SOFT=.FALSE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%Multiplier = this%swires%SW(j)%swc(i)%m - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%Resistance = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Vsource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - ELSEIF (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'HARDVOLT') THEN !EQUIVALENTES A IMPLEMENTAR UNA DE Corriente - allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%SOFT=.FALSE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%Multiplier = this%swires%SW(j)%swc(i)%m - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%Resistance = 0.0_RKIND - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%ISource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) - ELSE IF ((trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == 'SOFTCURR')) THEN + ELSE if (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) == F_SOURCE_CURRENT) then allocate (sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource) sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%IsourceExists = .TRUE. - sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%SOFT=.TRUE. + ! sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%SOFT=.TRUE. sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%Multiplier = this%swires%SW(j)%swc(i)%m sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%Resistance = 0.0_RKIND sgg%Med(contamedia)%SlantedWire(1)%nodes(i)%Isource%fichero%name = trim (adjustl(this%swires%SW(j)%swc(i)%SRCFILE)) elseIF (trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) /= 'None') then write(buff,*) 'WRONG type of wire source '//trim(adjustl(this%swires%SW(j)%swc(i)%SRCTYPE)) - call stoponerror (layoutnumber,size,buff) + call stoponerror (layoutnumber,num_procs,buff) end if end do end do @@ -2584,14 +2528,13 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do if (ubound(conformal_volumes, 1) > 0) then - contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) - if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 - if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + contamedia = contamedia + ubound(edge_ratios,1) + ubound(face_ratios,1) + if (findloc(edge_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 + if (findloc(face_ratios, 0.0,1 ) /= 0) contamedia = contamedia - 1 end if - ! faces from V and S with same ratio are considered different media, bc they need to perform different operations + do j = 1, ubound(conformal_surfaces,1) call addConformalMedia(sgg, media, conformal_surfaces(j), edge_ratios, face_ratios, contamedia, conf_bounding_box, surface_side_maps(j), isSurface) - end do if (ubound(conformal_surfaces, 1) > 0) then @@ -2610,6 +2553,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN contamedia = contamedia + 1 allocate(sgg%Med(contamedia)%multiwire(1)) sgg%Med(contamedia)%Priority = prior_TW + sgg%Med(contamedia)%Epr = sgg%Med(1)%Epr sgg%Med(contamedia)%Sigma = sgg%Med(1)%Sigma sgg%Med(contamedia)%Mur = sgg%Med(1)%Mur @@ -2639,7 +2583,6 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN end do end block #endif - !reporta el bounding box #ifdef CompileWithMPI @@ -2791,7 +2734,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN i1 = i1-1 ELSE write(buff,*) 'Cannot determine ortientation of the PEC plane with the Slot',i1, j1, k1, direccion - call stoponerror (layoutnumber,size,buff) + call stoponerror (layoutnumber,num_procs,buff) !ojo con el nfde no se puede hacer Slots en escalera porque no se puede determinar la orientacion de los planos !en los tramos comunes. Por tanto No he podido testear los shared electricos anisotropos. solo los magneticos end if @@ -2831,7 +2774,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN mur1 = 0.5_RKIND * (sgg%Med(medio1)%Mur+sgg%Med(medio2)%Mur) ELSE write(buff,*) 'Media around the Slot are not plain media: ', medio1, medio2 - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if width = this%tSlots%Tg(j)%width if (sgg%NumPlaneWaves == 1) then @@ -3458,7 +3401,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !si no lo ha cazado if (.not.nodo_cazado) then write(buff,'(a,i9)') 'Current probe not found in WIRE segment ',this%Sonda%collection(i)%cordinates(j)%XI - call StopOnError(layoutnumber,size,buff) + call StopOnError(layoutnumber,num_procs,buff) end if ELSE if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_DDP) then if (run_with_dmma) then @@ -3482,11 +3425,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !si no lo ha cazado if (.not.nodo_cazado) then write(buff,'(a,i9)') 'Voltage probe not found ',this%Sonda%collection(i)%cordinates(j)%XI - call StopOnError(layoutnumber,size,buff) + call StopOnError(layoutnumber,num_procs,buff) end if else write(buff,'(a,i9)') 'ERROR: Voltage probe in gaps only available under -dmma flag ' - call StopOnError(layoutnumber,size,buff) + call StopOnError(layoutnumber,num_procs,buff) end if !del run_with_dmma else if (abs(tipotemp) == NP_COR_LINE) then sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 @@ -3503,7 +3446,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama2 = (this%oldSONDA%probes(i)%n_FarField) if (tama2 > 1) then buff='Only one Far Field probe allowed' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if if (tama2 > 0) sgg%observation(ii)%nP = 1 !un punto para todo el farfield (es simbolico) !electric FIELDS @@ -3515,7 +3458,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama6 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) buff='TAMANIOS DE PROBES EH RAROS' if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) + & call STOPONERROR(layoutnumber,num_procs,buff) do k = 1, tama3 punto%XI = this%oldSONDA%probes(i)%Electric(j)%probe%i(k) punto%YI = this%oldSONDA%probes(i)%Electric(j)%probe%j(k) @@ -3535,7 +3478,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama6 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) buff='pre1_ERROR: TAMANIOS DE PROBES EH RAROS' if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) + & call STOPONERROR(layoutnumber,num_procs,buff) do k = 1, tama3 punto%XI = this%oldSONDA%probes(i)%Magnetic(j)%probe%i(k) punto%YI = this%oldSONDA%probes(i)%Magnetic(j)%probe%j(k) @@ -3640,7 +3583,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (sondas > Maxprobes) then write(buff,*) 'Too many probes= ', sondas, 'Either or reduce the number of probes below ', & & Maxprobes - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if if (sondas > 1024) then write(buff,*) 'Number of probes ', & @@ -3654,7 +3597,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! write(buff,*) 'Too much memory for the probes= ', sondas * BuffObse * 4, 'Probes= ', sondas, & ! & 'Either reduce the number o& ! &f probes or recompile decreasing BuffObse ', BuffObse, 'or increasing ', MaxMemoryProbes - ! CALL STOPONERROR(layoutnumber,size,buff) + ! call STOPONERROR(layoutnumber,num_procs,buff) ! end if ! if (sgg%NumberRequest /= 0) then @@ -3691,28 +3634,28 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_TRANSFER) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .TRUE. buff='Transfer function only in Frequency Domain' - !! CALL STOPONERROR(layoutnumber,size,buff) + !! call STOPONERROR(layoutnumber,num_procs,buff) CASE (NP_T2_TIMEFREQ ) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_TIMETRANSF) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_FREQTRANSF) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_TIMEFRECTRANSF) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. @@ -3748,7 +3691,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN (sgg%observation(ii)%FinalFreq <= 1e-9).or. & (sgg%observation(ii)%FreqStep <= 1e-9)) then write(buff,*) 'ERROR: Some incorrect frequency domain parameters (initial,final,step) ',sgg%observation(ii)%InitialFreq,sgg%observation(ii)%FinalFreq,sgg%observation(ii)%FreqStep - if (sgg%observation(ii)%FreqDomain) CALL STOPONERROR(layoutnumber,size,buff) + if (sgg%observation(ii)%FreqDomain) call STOPONERROR(layoutnumber,num_procs,buff) end if !!! do j = 1, tama2 @@ -3941,7 +3884,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN else if (abs(this%Sonda%collection(i)%cordinates(j)%or) == NP_COR_LINE) then block integer(kind=4) :: line_size, obs_size, idx - !intrinsic size function coopted by size global variable... + !intrinsic num_procs function coopted by num_procs global variable... line_size = ubound(this%Sonda%collection(i)%cordinates,1)-lbound(this%Sonda%collection(i)%cordinates,1)+1 sgg%observation(i)%nP = sgg%observation(i)%nP + 1 obs_size = sgg%observation(i)%nP @@ -3978,12 +3921,12 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !farfields (no es time domain pero una forma especial de ellos) tama2 = (this%oldSONDA%probes(i)%n_FarField) write(buff,*) 'More than 1 Far Field box unsupported' - IF (tama2 > 1) CALL STOPONERROR(layoutnumber,size,buff) + if (tama2 > 1) call STOPONERROR(layoutnumber,num_procs,buff) ! do j = 1, tama2 tama3 = (this%oldSONDA%probes(i)%FarField(j)%probe%n_cord) buff='FAR FIELD PROBE REQUIRES TWO COORDINATES FOR THE BOX' - IF (tama3 /= 2) CALL STOPONERROR(layoutnumber,size,buff) + if (tama3 /= 2) call STOPONERROR(layoutnumber,num_procs,buff) ! sgg%observation(ii)%nP = sgg%observation(ii)%nP + 1 punto%XI = this%oldSONDA%probes(i)%FarField(j)%probe%i(1) @@ -4022,7 +3965,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN (sgg%observation(ii)%FinalFreq <= 1e-9).or. & (sgg%observation(ii)%FreqStep <= 1e-9)) then write(buff,*) 'ERROR: Some incorrect frequency domain parameters (initial,final,step) ',sgg%observation(ii)%InitialFreq,sgg%observation(ii)%FinalFreq,sgg%observation(ii)%FreqStep - if (sgg%observation(ii)%FreqDomain) CALL STOPONERROR(layoutnumber,size,buff) + if (sgg%observation(ii)%FreqDomain) call STOPONERROR(layoutnumber,num_procs,buff) end if ! @@ -4036,7 +3979,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama6 = (this%oldSONDA%probes(i)%Electric(j)%probe%n_cord) buff='TAMANIOS DE PROBES EH RAROS' if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) + & call STOPONERROR(layoutnumber,num_procs,buff) write(probenumber, '(i7)') ii do k = 1, tama3 punto%XI = this%oldSONDA%probes(i)%Electric(j)%probe%i(k) @@ -4081,7 +4024,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama6 = (this%oldSONDA%probes(i)%Magnetic(j)%probe%n_cord) buff='TAMANIOS DE PROBES EH RAROS' if ((tama3 /= tama4) .OR. (tama3 /= tama5) .OR. (tama3 /= tama6)) & - & CALL STOPONERROR(layoutnumber,size,buff) + & call STOPONERROR(layoutnumber,num_procs,buff) do k = 1, tama3 punto%XI = this%oldSONDA%probes(i)%Magnetic(j)%probe%i(k) punto%YI = this%oldSONDA%probes(i)%Magnetic(j)%probe%j(k) @@ -4145,28 +4088,28 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_TRANSFER) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .TRUE. buff='Transfer function only in Frequency Domain' - !! CALL STOPONERROR(layoutnumber,size,buff) + !! call STOPONERROR(layoutnumber,num_procs,buff) CASE (NP_T2_TIMEFREQ ) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .FALSE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_TIMETRANSF) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_FREQTRANSF) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. sgg%observation(ii)%TRANSFER = .TRUE. - ! call STOPONERROR(layoutnumber,size,'ONLY TIME DOMAIN DATA IN NEW PROBE') + ! call STOPONERROR(layoutnumber,num_procs,'ONLY TIME DOMAIN DATA IN NEW PROBE') CASE (NP_T2_TIMEFRECTRANSF) sgg%observation(ii)%TimeDomain = .TRUE. sgg%observation(ii)%FreqDomain = .TRUE. @@ -4197,7 +4140,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN (sgg%observation(ii)%FinalFreq <= 1e-9).or. & (sgg%observation(ii)%FreqStep <= 1e-9) ) then write(buff,*) 'ERROR: Some incorrect frequency domain parameters (initial,final,step) ',sgg%observation(ii)%InitialFreq,sgg%observation(ii)%FinalFreq,sgg%observation(ii)%FreqStep - if (sgg%observation(ii)%FreqDomain) CALL STOPONERROR(layoutnumber,size,buff) + if (sgg%observation(ii)%FreqDomain) call STOPONERROR(layoutnumber,num_procs,buff) end if !FIN COMPATIBILIDAD 15/07/15 SELECT CASE (this%BloquePRB%BP(i)%NML) @@ -4283,7 +4226,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama2 = 1 if (tama2 >1 ) then write(buff,*) 'Only 1 Volumic probe allown per section' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do j = 1, tama2 !I clip these probes to allow out-of-the box snapshot probes !ojo si se cambia aqui tambien mas arriba @@ -4403,7 +4346,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN tama2 = (this%VolPrb%collection(i)%len_cor) if (tama2 >1 ) then write(buff,*) 'Only 1 Volumic probe allown per section' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do j = 1, tama2 !I clip these probes to allow out-of-the box snapshot probes @@ -4657,7 +4600,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN call print11 (layoutnumber, buff) !fin para debugear write(buff,*) 'Buggy error in Volumic probes. np/=1. , np=',sgg%observation(ii)%nP - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end do !!!find 210618 @@ -4666,7 +4609,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN ! if ((memo+sondas)*BuffObse*4 > MaxMemoryProbes) then ! write(buff,*) 'Too much memory for the probes= ', (memo+sondas)*BuffObse*4, 'Probes= ', (memo+sondas), & ! & 'Either reduce the number of probes or recompile decreasing BuffObse ', BuffObse, 'or increasing ', MaxMemoryProbes - ! CALL STOPONERROR(layoutnumber,size,buff) + ! call STOPONERROR(layoutnumber,num_procs,buff) ! end if !del if sgg%numberrequest @@ -4727,14 +4670,11 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (medioextra%exists) then CONTAMEDIA = CONTAMEDIA+1 if (MEDIOEXTRA%index /= contamedia) then !should be already done earlier - CALL STOPONERROR(layoutnumber,size,'Bug in media count. ') + call STOPONERROR(layoutnumber,num_procs,'Bug in media count. ') end if MEDIOEXTRA%index=CONTAMEDIA end if !!!!!!!!!!!!! - if (contamedia > sgg%AllocMed) then - call Readjust(sgg%AllocMed, sgg%Med, contamedia) - end if sgg%NumMedia = contamedia !el medio 0 no precisa compresion @@ -4774,7 +4714,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!fin clipeado !!!!!!!!!!!!!!!!!!!!!!!!!!!! - CALL CreatePMLmatrix (layoutnumber, SIZE,sgg,media%sggMiEx,media%sggMiEy,media%sggMiEz,media%sggMiHx,media%sggMiHy,media%sggMiHz, SINPML_fullsize, fullsize, BoundingBox, sgg%Med, sgg%NumMedia, sgg%Border,MEDIOEXTRA) + call CreatePMLmatrix (layoutnumber, num_procs,sgg,media%sggMiEx,media%sggMiEy,media%sggMiEz,media%sggMiHx,media%sggMiHy,media%sggMiHz, SINPML_fullsize, fullsize, BoundingBox, sgg%Med, sgg%NumMedia, sgg%Border,MEDIOEXTRA) sgg%EndPMLMedia = sgg%NumMedia ! @@ -4783,10 +4723,10 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN CLOSE (14) if (sgg%NumMedia > 32767) then buff='Number of media>32767. Recompile with #define CompileWithInt4' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) ELSE buff='Number of media>127. Recompile with #define CompileWithInt2' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if #endif @@ -4794,14 +4734,14 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN if (sgg%NumMedia > 32767) then CLOSE (14) buff='Number of media>32767. Recompile with #define CompileWithInt4' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if #endif #ifdef CompileWithInt4 if (sgg%NumMedia > 2.0e9) then CLOSE (14) buff='Number of media>2^31-1. Cannot continue. ' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if #endif !read the source files @@ -4816,7 +4756,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN inquire(file=trim(adjustl(sgg%observation(ii)%FileNormalize)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%observation(ii)%FileNormalize))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if ! @@ -4840,7 +4780,7 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !medioespecial = .false. !do ii=1,sgg%NumMedia ! buff='PEC media can only have index 0' - ! IF (sgg%Med(ii)%Is%PEC.or.sgg%Med(ii)%Is%Lumped) call STOPONERROR(layoutnumber,size,buff) + ! if (sgg%Med(ii)%Is%PEC.or.sgg%Med(ii)%Is%Lumped) call STOPONERROR(layoutnumber,num_procs,buff) ! medioespecial =medioespecial .or. & ! sgg%Med(ii)%Is%EDispersive .or. & ! sgg%Med(ii)%Is%multiport .or. & @@ -4881,42 +4821,34 @@ SUBROUTINE read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, size, SIN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - function computeConformalTimeFactor(volumes, surfaces) result(res) - type(ConformalMedia_t), allocatable, dimension(:), intent(in) :: volumes, surfaces + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: volumes, surfaces real(kind=rkind) :: res - integer :: t - res = 1.0 - do t = 1, ubound(volumes,1) - if (volumes(t)%time_step_scale_factor < res) then - res = volumes(t)%time_step_scale_factor - end if + integer :: i + res = 1.0_RKIND + do i = 1, ubound(volumes, 1) + res = min(res, volumes(i)%time_step_scale_factor) end do - do t = 1, ubound(surfaces,1) - if (surfaces(t)%time_step_scale_factor < res) then - res = surfaces(t)%time_step_scale_factor - end if + do i = 1, ubound(surfaces, 1) + res = min(res, surfaces(i)%time_step_scale_factor) end do - end function + end function computeConformalTimeFactor function changeTimeStepIfConformalNeeded(sgg_dt) result(res) real(kind=RKIND_tiempo), intent(in) :: sgg_dt - real(kind=RKIND_tiempo) :: yee_dt, time_scale_factor - real(kind=RKIND_tiempo) :: res + real(kind=RKIND_tiempo) :: res, yee_dt, time_scale_factor time_scale_factor = computeConformalTimeFactor(conformal_volumes, conformal_surfaces) - yee_dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & - ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & - ((1.0_RKIND / minval(sgg%DZ))**2.0_RKIND )))) - if (sgg_dt > yee_dt*time_scale_factor) then + yee_dt = (1.0_RKIND/(cluz*sqrt(((1.0_RKIND / minval(sgg%DX))**2.0_RKIND) + & + ((1.0_RKIND / minval(sgg%DY))**2.0_RKIND) + & + ((1.0_RKIND / minval(sgg%DZ))**2.0_RKIND)))) + res = sgg_dt + if (sgg_dt > yee_dt*time_scale_factor) then write(*,*) '-- Conformal geometry requires a time step change' write(*,*) 'Previous time step: ', sgg_dt res = yee_dt*time_scale_factor write(*,*) 'New time step: ', res - else - res = sgg_dt end if - - end function + end function changeTimeStepIfConformalNeeded subroutine initConformalBoundingBox(sgg, bbox) type(SGGFDTDINFO_t), intent(in) :: sgg @@ -4929,30 +4861,31 @@ subroutine initConformalBoundingBox(sgg, bbox) bbox%ZE = -sgg%Alloc(iHz)%ZE end subroutine - subroutine getDifferentEdgeRatios(ratios, conf_media) - real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media + subroutine getDifferentEdgeRatios(ratios, conformal_media) + real(kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_media integer :: i, j, k real(kind=rkind), dimension(:), allocatable :: aux logical :: isNew if (.not. allocated(ratios)) allocate(ratios(0)) - do i = 1, ubound(conf_media,1) - do j = 1, ubound(conf_media(i)%edge_media,1) + do i = 1, ubound(conformal_media,1) + do j = 1, ubound(conformal_media(i)%edge_media,1) + isNew = .true. do k = 1, ubound(ratios,1) - if (eq_ratio(ratios(k), conf_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. + if (eq_ratio(ratios(k), conformal_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. end do if (isNew) then block - if (ubound(ratios,1) == 0) then + if (ubound(ratios,1) == 0) then deallocate(ratios) allocate(ratios(1)) - ratios(1) = conf_media(i)%edge_media(j)%ratio + ratios(1) = conformal_media(i)%edge_media(j)%ratio else if (allocated(aux)) deallocate(aux) allocate(aux(ubound(ratios,1) + 1)) aux(1:ubound(ratios,1)) = ratios - aux(ubound(ratios,1) + 1) = conf_media(i)%edge_media(j)%ratio + aux(ubound(ratios,1) + 1) = conformal_media(i)%edge_media(j)%ratio deallocate(ratios) allocate(ratios(ubound(aux,1))) ratios = aux @@ -4961,32 +4894,32 @@ subroutine getDifferentEdgeRatios(ratios, conf_media) end if end do end do - end subroutine - subroutine getDifferentFaceRatios(ratios, conf_media) - real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios - type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conf_media + end subroutine getDifferentEdgeRatios + subroutine getDifferentFaceRatios(ratios, conformal_media) + real(kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + type(ConformalMedia_t), dimension(:), allocatable, intent(in) :: conformal_media integer :: i, j, k real(kind=rkind), dimension(:), allocatable :: aux logical :: isNew if (.not. allocated(ratios)) allocate(ratios(0)) - do i = 1, ubound(conf_media,1) - do j = 1, ubound(conf_media(i)%face_media,1) + do i = 1, ubound(conformal_media,1) + do j = 1, ubound(conformal_media(i)%face_media,1) isNew = .true. do k = 1, ubound(ratios,1) - if (eq_ratio(ratios(k), conf_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. + if (eq_ratio(ratios(k), conformal_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. end do if (isNew) then block - if (ubound(ratios,1) == 0) then + if (ubound(ratios,1) == 0) then deallocate(ratios) allocate(ratios(1)) - ratios(1) = conf_media(i)%face_media(j)%ratio + ratios(1) = conformal_media(i)%face_media(j)%ratio else if (allocated(aux)) deallocate(aux) allocate(aux(ubound(ratios,1) + 1)) aux(1:ubound(ratios,1)) = ratios - aux(ubound(ratios,1) + 1) = conf_media(i)%face_media(j)%ratio + aux(ubound(ratios,1) + 1) = conformal_media(i)%face_media(j)%ratio deallocate(ratios) allocate(ratios(ubound(aux,1))) ratios = aux @@ -4995,19 +4928,19 @@ subroutine getDifferentFaceRatios(ratios, conf_media) end if end do end do - end subroutine + end subroutine getDifferentFaceRatios - subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ratios, contamedia, bbox, side_map, type) + subroutine addConformalMedia(sgg, media, conformal_media, edge_ratios, face_ratios, contamedia, bbox, side_map, type) type(SGGFDTDINFO_t), intent(inout) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes + type(ConformalMedia_t), intent(in) :: conformal_media real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios, face_ratios real(kind=rkind), dimension(:), allocatable :: edge_ratios_no_zero, face_ratios_no_zero integer(kind=4), intent(in) :: contamedia integer(kind=4) :: num_media type(XYZlimit_t), intent(inout) :: bbox type(side_tris_map_t), intent(in) :: side_map - integer (kind=4) :: type + integer(kind=4), intent(in) :: type integer :: i, j call initConformalBoundingBox(sgg,bbox) @@ -5037,31 +4970,31 @@ subroutine addConformalMedia(sgg, media, conformal_volumes, edge_ratios, face_ra face_ratios_no_zero = face_ratios end if num_media = contamedia - call addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, type) + call addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ratios_no_zero, bbox, type) num_media = contamedia + ubound(edge_ratios_no_zero,1) - call addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios_no_zero, bbox, type) + call addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ratios_no_zero, bbox, type) if (type == isVolume) then - call addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios_no_zero, bbox, side_map) + call addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge_ratios_no_zero, bbox, side_map) end if end subroutine - subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ratios, bbox, type) + subroutine addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ratios, bbox, type) type(SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes + type(ConformalMedia_t), intent(in) :: conformal_media integer(kind=4), intent(in) :: num_media real(kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios integer(kind=4) :: face_media integer(kind=4) :: cell(3) - integer (kind=4) :: previous_faces + integer(kind=4) :: previous_faces type(face_t), dimension(:), allocatable :: combined_faces type(XYZlimit_t), intent(inout) :: bbox - integer (kind=4), intent(in) :: type + integer(kind=4), intent(in) :: type integer :: j, k - do j = 1, conformal_volumes%n_faces_media - if (conformal_volumes%face_media(j)%ratio /= 0) then - face_media = num_media + findloc(face_ratios, conformal_volumes%face_media(j)%ratio, 1) + do j = 1, conformal_media%n_faces_media + if (conformal_media%face_media(j)%ratio /= 0) then + face_media = num_media + findloc(face_ratios, conformal_media%face_media(j)%ratio, 1) sgg%Med(face_media)%Is%ConformalPEC = .TRUE. sgg%Med(face_media)%Is%Needed = .TRUE. if (type == isVolume) sgg%Med(face_media)%Is%Volume = .TRUE. @@ -5069,19 +5002,17 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ sgg%Med(face_media)%Priority = prior_PEC sgg%Med(face_media)%Epr = this%mats%mats(1)%eps / Eps0 sgg%Med(face_media)%Sigma = 1.0e29_RKIND - sgg%Med(face_media)%Mur = conformal_volumes%face_media(j)%ratio * this%mats%mats(1)%mu / Mu0 + sgg%Med(face_media)%Mur = conformal_media%face_media(j)%ratio * this%mats%mats(1)%mu / Mu0 sgg%Med(face_media)%SigmaM = 0.0_RKIND else face_media = 0 end if - previous_faces = 0 if (allocated(sgg%Med(face_media)%ConformalFace)) previous_faces = ubound(sgg%Med(face_media)%ConformalFace, 1) - allocate(combined_faces(previous_faces + conformal_volumes%face_media(j)%size)) + allocate(combined_faces(previous_faces + conformal_media%face_media(j)%size)) if (previous_faces > 0) combined_faces(1:previous_faces) = sgg%Med(face_media)%ConformalFace - - do k = 1, conformal_volumes%face_media(j)%size - cell(:) = conformal_volumes%face_media(j)%faces(k)%cell(:) + do k = 1, conformal_media%face_media(j)%size + cell(:) = conformal_media%face_media(j)%faces(k)%cell(:) if (cell(1) < bbox%xi) bbox%xi = cell(1) if (cell(1) > bbox%xe) bbox%xe = cell(1) if (cell(2) < bbox%yi) bbox%yi = cell(2) @@ -5089,7 +5020,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ if (cell(3) < bbox%zi) bbox%zi = cell(3) if (cell(3) > bbox%ze) bbox%ze = cell(3) - select case(conformal_volumes%face_media(j)%faces(k)%direction) + select case(conformal_media%face_media(j)%faces(k)%direction) case(F_X) media%sggMiHx(cell(1), cell(2), cell(3)) = face_media case(F_Y) @@ -5097,9 +5028,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_volumes, num_media, face_ case(F_Z) media%sggMiHz(cell(1), cell(2), cell(3)) = face_media end select - - combined_faces(previous_faces+k) = conformal_volumes%face_media(j)%faces(k) - + combined_faces(previous_faces + k) = conformal_media%face_media(j)%faces(k) end do call move_alloc(combined_faces, sgg%Med(face_media)%ConformalFace) end do @@ -5118,47 +5047,43 @@ function getEdgeNormalFromTriangles(triangles) result(res) res = res/ubound(triangles,1) end function - subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, type) + subroutine addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ratios, bbox, type) type(SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes + type(ConformalMedia_t), intent(in) :: conformal_media integer(kind=4), intent(in) :: num_media real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios integer(kind=4) :: edge_media integer(kind=4) :: cell(3) - integer (kind=4) :: previous_edges + integer(kind=4) :: previous_edges type(edge_t), dimension(:), allocatable :: combined_edges type(XYZlimit_t), intent(inout) :: bbox - integer (kind=4), intent(in) :: type - ! integer(kind=4), dimension(4) :: key + integer(kind=4), intent(in) :: type integer :: j, k real, dimension(3) :: normal - do j = 1, conformal_volumes%n_edges_media - if (conformal_volumes%edge_media(j)%ratio /= 0) then - edge_media = num_media + findloc(edge_ratios, conformal_volumes%edge_media(j)%ratio,1) + do j = 1, conformal_media%n_edges_media + if (conformal_media%edge_media(j)%ratio /= 0) then + edge_media = num_media + findloc(edge_ratios, conformal_media%edge_media(j)%ratio,1) sgg%Med(edge_media)%Is%ConformalPEC = .TRUE. sgg%Med(edge_media)%Is%Needed = .TRUE. if (type == isVolume) sgg%Med(edge_media)%Is%Volume = .TRUE. if (type == isSurface) sgg%Med(edge_media)%Is%Surface = .TRUE. sgg%Med(edge_media)%Priority = prior_PEC - sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_volumes%edge_media(j)%ratio ) / Eps0 + sgg%Med(edge_media)%Epr = (this%mats%mats(1)%eps / conformal_media%edge_media(j)%ratio ) / Eps0 sgg%Med(edge_media)%Sigma = 1.0e29_RKIND sgg%Med(edge_media)%Mur = this%mats%mats(1)%mu / Mu0 sgg%Med(edge_media)%SigmaM = 0.0_RKIND else edge_media = 0 end if - previous_edges = 0 if (allocated(sgg%Med(edge_media)%ConformalEdge)) previous_edges = ubound(sgg%Med(edge_media)%ConformalEdge, 1) - allocate(combined_edges(previous_edges + conformal_volumes%edge_media(j)%size)) + allocate(combined_edges(previous_edges + conformal_media%edge_media(j)%size)) if (previous_edges > 0) combined_edges(1:previous_edges) = sgg%Med(edge_media)%ConformalEdge - - - do k = 1, conformal_volumes%edge_media(j)%size - cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) + do k = 1, conformal_media%edge_media(j)%size + cell(:) = conformal_media%edge_media(j)%edges(k)%cell(:) if (cell(1) < bbox%xi) bbox%xi = cell(1) if (cell(1) > bbox%xe) bbox%xe = cell(1) @@ -5167,7 +5092,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ if (cell(3) < bbox%zi) bbox%zi = cell(3) if (cell(3) > bbox%ze) bbox%ze = cell(3) - select case(conformal_volumes%edge_media(j)%edges(k)%direction) + select case(conformal_media%edge_media(j)%edges(k)%direction) case(E_X) media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media case(E_Y) @@ -5175,19 +5100,16 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_volumes, num_media, edge_ case(E_Z) media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end select - - combined_edges(previous_edges+k) = conformal_volumes%edge_media(j)%edges(k) - - + combined_edges(previous_edges + k) = conformal_media%edge_media(j)%edges(k) end do call move_alloc(combined_edges, sgg%Med(edge_media)%ConformalEdge) end do end subroutine - subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, edge_ratios, bbox, side_map) + subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge_ratios, bbox, side_map) type(SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media - type(ConformalMedia_t), intent(in) :: conformal_volumes + type(ConformalMedia_t), intent(in) :: conformal_media integer(kind=4), intent(in) :: num_media real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios @@ -5200,14 +5122,14 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_volumes, num_media, ed integer :: j, k real, dimension(3) :: normal - do j = 1, conformal_volumes%n_edges_media - if (conformal_volumes%edge_media(j)%ratio == 0) then + do j = 1, conformal_media%n_edges_media + if (conformal_media%edge_media(j)%ratio == 0) then edge_media = 0 - do k = 1, conformal_volumes%edge_media(j)%size - cell(:) = conformal_volumes%edge_media(j)%edges(k)%cell(:) + do k = 1, conformal_media%edge_media(j)%size + cell(:) = conformal_media%edge_media(j)%edges(k)%cell(:) key(1:3) = cell - select case(conformal_volumes%edge_media(j)%edges(k)%direction) + select case(conformal_media%edge_media(j)%edges(k)%direction) case(E_X) key(4) = E_X if (side_map%hasKey(key)) then @@ -5333,7 +5255,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) inquire(file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if open(15, file=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME)),action='read') READ (15,*) tiempo1, field1 @@ -5367,7 +5289,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) buff=trim(adjustl(sgg%Med(i)%wire(1)%VSource(CONTAVOLT)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' if (.not.ignoresamplingerrors) then CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if end if @@ -5385,7 +5307,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) inquire(file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if open(15, file=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME)),action='read') READ (15,*) tiempo1, field1 @@ -5419,7 +5341,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) buff=trim(adjustl(sgg%Med(i)%wire(1)%ISource(CONTACURR)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' if (.not.ignoresamplingerrors) then CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if end if @@ -5439,7 +5361,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) inquire(file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if open(15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME)),action='read') READ (15,*) tiempo1, field1 @@ -5473,7 +5395,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Vsource%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' if (.not.ignoresamplingerrors) then CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if end if @@ -5488,7 +5410,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) inquire(file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if open(15, file=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME)),action='read') READ (15,*) tiempo1, field1 @@ -5522,7 +5444,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) buff=trim(adjustl(sgg%Med(i)%SlantedWire(1)%nodes(j)%Isource%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' if (.not.ignoresamplingerrors) then CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if end if @@ -5544,7 +5466,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) inquire(file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%NodalSource(j)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if open(15, file=trim(adjustl(sgg%NodalSource(j)%fichero%NAME)),action='read') READ (15,*) tiempo1, field1 @@ -5577,7 +5499,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) buff=trim(adjustl(sgg%NodalSource(j)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' if (.not.ignoresamplingerrors) then CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if end if @@ -5604,7 +5526,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) inquire(file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)), EXIST=errnofile) if ( .NOT. errnofile) then buff=trim(adjustl(sgg%PlaneWave(j)%fichero%name))//' DOES NOT EXIST' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if open(15, file=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME)),action='read') READ (15,*) tiempo1, field1 @@ -5633,7 +5555,7 @@ subroutine read_TIMEFRECTRANSFsourcefiles(simu_devia) buff=trim(adjustl(sgg%PlaneWave(j)%fichero%NAME))//' not uniformly sampled. Relaunch with -ignoresamplingerrors to ignore it.' if (.not.ignoresamplingerrors) then CLOSE(15) - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if end if end if @@ -5890,7 +5812,7 @@ end subroutine read_geomData !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize, this,MurAfterPML,mur_exist) + subroutine read_limits_nogeom (layoutnumber,num_procs, sgg, fullsize, SINPML_fullsize, this,MurAfterPML,mur_exist) type(limit_t), dimension(1:6) :: fullsize, SINPML_fullsize type(SGGFDTDINFO_t), intent(INOUT) :: sgg @@ -5898,7 +5820,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize integer(kind=4) :: tama, i, field,j,k character(len=BUFSIZE) :: buff logical MurAfterPML,mur_exist - integer (kind=4), intent(in) :: layoutnumber,size + integer(kind=4), intent(in) :: layoutnumber,num_procs real(kind=RKIND), pointer, dimension(:) :: DummyD real(kind=RKIND) :: delta ! @@ -5916,7 +5838,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize ELSE if (tama /= this%despl%mx2-this%despl%mx1) then buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do i = this%despl%mx1, this%despl%mx2 - 1 sgg%dx (i) = this%despl%desx(i) @@ -5932,7 +5854,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize ELSE if (tama /= this%despl%my2-this%despl%my1) then buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do i = this%despl%my1, this%despl%my2 - 1 sgg%dy (i) = this%despl%desY(i) @@ -5948,7 +5870,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize ELSE if (tama /= this%despl%mz2-this%despl%mz1) then buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do i = this%despl%mz1, this%despl%mz2 - 1 sgg%dz (i) = this%despl%desZ(i) @@ -5967,7 +5889,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize ELSE if (tama /= this%despl%mx2-this%despl%mx1) then buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do i = this%despl%mx1, this%despl%mx2 - 1 lineasX (i+1) = this%despl%desx(i) + lineasX (i) @@ -5984,7 +5906,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize ELSE if (tama /= this%despl%my2-this%despl%my1) then buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do i = this%despl%my1, this%despl%my2 - 1 lineasY (i+1) = this%despl%desY(i) + lineasY (i) @@ -6001,7 +5923,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize ELSE if (tama /= this%despl%mz2-this%despl%mz1) then buff='Tamanio discretizacion distinto de la region' - CALL STOPONERROR(layoutnumber,size,buff) + call STOPONERROR(layoutnumber,num_procs,buff) end if do i = this%despl%mz1, this%despl%mz2 - 1 lineasZ (i+1) = this%despl%desZ(i) + lineasZ (i) @@ -6019,6 +5941,7 @@ SUBROUTINE read_limits_nogeom (layoutnumber,size, sgg, fullsize, SINPML_fullsize sgg%InitialTimeStep = 0 sgg%TimeSteps = this%general%nmax sgg%dt = this%general%dt + !border !this%BORDER%PROPIEDADESPML(I)%ORDEN no lo considero porque en el interior de mi programa lo pongo (esta a 2 normalmente) sgg%Border%IsBackPEC = .FALSE. @@ -6406,13 +6329,8 @@ subroutine prepro_skindepth(this,fichin) return end subroutine !prepro_skindepth - !!!!!!!!end 09/07/13 -#ifdef CompileWithConformal - subroutine AssigLossyOrPECtoNodes(sgg,media,conf_conflicts,input_conformal_flag) -#else subroutine AssigLossyOrPECtoNodes(sgg,media) -#endif type(SGGFDTDINFO_t), intent(INOUT) :: sgg type(media_matrices_t), intent(inout) :: media @@ -6421,18 +6339,6 @@ subroutine AssigLossyOrPECtoNodes(sgg,media) integer(kind=4) i,j,k,n,kmenos1,jmenos1,imenos1,med(0:5),r,imed,i1 character(len=BUFSIZE) :: buff -#ifdef CompileWithConformal - type (conf_conflicts_t), pointer :: conf_conflicts - type(conf_node_t), dimension (:), pointer :: conf_busy_node - integer (KIND=confIKIND) :: dims - logical :: mediois1,mediois2,mediois3 - integer (KIND=INTEGERSIZEOFMEDIAMATRICES) :: medio1,medio2,medio3 -#endif - - - !!!lo dejo aqui para en un futuro hacerlo crecer y asignar la informacion de nodo con su tipo de material correctamente - !!copiado de la casuistica de wires !310715 !no esta anulado alli, pero cuando se haga crecer habra que aumenta el sgg%med para acomodar a los nuevos materiales nodales.... - do k= sgg%Alloc(iEz)%ZI , sgg%Alloc(iEz)%ZE do j= sgg%Alloc(iEy)%YI , sgg%Alloc(iEy)%YE do i= sgg%Alloc(iEx)%XI , sgg%Alloc(iEx)%XE @@ -6513,52 +6419,6 @@ subroutine AssigLossyOrPECtoNodes(sgg,media) end do end do -!CORRIGE AHORA CON LA INFO CONFORMAL (HABIA UN BUG 211116 PQ EL NODALMENTE IGUALES LO MACHACABA SI ESTO SE HACIA ANTES) -#ifdef CompileWithConformal - if(input_conformal_flag)then - dims =conf_conflicts%conf_busy_nodesGroup%dims - conf_busy_node=> conf_conflicts%conf_busy_nodesGroup%conf_busy_node - do n=1,dims - i=conf_busy_node(n)%i - j=conf_busy_node(n)%j - k=conf_busy_node(n)%k - if (conf_busy_node(n)%ispec) then - media%sggMiNo(i,j,k)=0 - endif - end do - !!!conf_busy_node(n)%i = 0 - !!!conf_busy_node(n)%j = 0 - !!!conf_busy_node(n)%k = 0 - !!!conf_busy_node(n)%isfree = .true. - !!!conf_busy_node(n)%ispec = .false. - !!!conf_busy_node(n)%sigmaEquiv = 0.0_RKIND - !!!conf_busy_node(n)%epsilonRelEquiv = 1.0_RKIND - !!!conf_busy_node(n)%muRelEquiv = 1.0_RKIND - -!!! Movido a cada wires.F90. Aqui me parece inreportable y peligroso -!!!!pedazo de niapa para poner los sggmiNo conformal a voltage nulo y que Dios reparta suerte 130220 -!!! !barro el interior, por eso el shifing k,x - j,z - i,y -!!! Do k=sgg%alloc(iHx)%ZI , sgg%alloc(iHx)%ZE -!!! Do j=sgg%alloc(iHz)%YI , sgg%alloc(iHz)%YE -!!! Do i=sgg%alloc(iHy)%XI , sgg%alloc(iHy)%XE -!!! medio1 =sggMiEx(i,j,k) -!!! medio2 =sggMiEy(i,j,k) -!!! medio3 =sggMiEz(i,j,k) -!!! mediois1= sgg%med(medio1)%is%already_YEEadvanced_byconformal .or. sgg%med(medio1)%is%split_and_useless -!!! mediois2= sgg%med(medio2)%is%already_YEEadvanced_byconformal .or. sgg%med(medio2)%is%split_and_useless -!!! mediois3= sgg%med(medio3)%is%already_YEEadvanced_byconformal .or. sgg%med(medio3)%is%split_and_useless -!!! if (mediois1.or.mediois2.or.mediois3) then -!!! sggMiNo(i,j,k)=0 !ojo !esto no sirve para contactos conformal SGBC-wires, solo para conformal PEC-wires -!!! endif -!!! End do -!!! End do -!!! End do -!!!!fin pedado de niapa - - - endif -#endif - return end subroutine AssigLossyOrPECtoNodes @@ -6587,7 +6447,7 @@ subroutine populatePlaneWaveRC(Planewave,simu_devia) !integer, dimension(:), allocatable :: seed !real(8) :: r !call date_and_time(values=values) -!call random_seed(size=k) +!call random_seed(num_procs=k) !allocate(seed(1:k)) !seed(:) = values(8) !call random_seed(put=seed) @@ -6690,7 +6550,7 @@ end subroutine populatePlaneWaveRC !!!! integer :: i, n, un, istat, dt(8), pid !!!! integer(int64) :: t !!!! -!!!! call random_seed(size = n) +!!!! call random_seed(num_procs = n) !!!! allocate(seed(n)) !!!! ! First try if the OS provides a random number generator !!!! open(newunit=un, file="/dev/urandom", access="stream", & @@ -7061,7 +6921,6 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) end do end if end do - #ifdef CompileWithMTLN block class(cable_t), pointer :: ptr @@ -7070,8 +6929,13 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) select type(ptr) type is(unshielded_multiwire_t) numertag = numertag + 1 - if (precounting == 1) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag end select + if (precounting == 1) then + select type(ptr) + type is(unshielded_multiwire_t) + tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag + end select + end if end do end block #endif diff --git a/src_main_pub/timestepping.F90 b/src_main_pub/timestepping.F90 index 075e473f2..dbb32d14a 100755 --- a/src_main_pub/timestepping.F90 +++ b/src_main_pub/timestepping.F90 @@ -1,5 +1,5 @@ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! SEMBA_FDTD sOLVER module +! SEMBA_FDTD sOLVER module ! Creation date Date : April, 8, 2010 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -14,25 +14,25 @@ !---> MinusCloneMagneticPMC !________________________________________________________________________________________ -module Solver_m - - use FDETYPES_m - use Report_m - use PostProcessing_m - use ilumina_m - use Observa_m - use BORDERS_other_m - use BORDERS_CPML_m - use BORDERS_MUR_m - use resuming_m - use nodalsources_m - use Lumped_m - use PMLbodies_m - use xdmf_m - use VTK_m +module Solver_m + + use FDETYPES_m + use Report_m + use PostProcessing_m + use ilumina_m + use Observa_m + use BORDERS_other_m + use BORDERS_CPML_m + use BORDERS_MUR_m + use resuming_m + use nodalsources_m + use Lumped_m + use PMLbodies_m + use xdmf_m + use VTK_m use interpreta_switches_m, only: entrada_t #ifdef CompileWithMPI - use MPIcomm_m + use MPIcomm_m #endif #ifdef CompileWithStochastic use MPI_stochastic @@ -44,15 +44,15 @@ module Solver_m #ifdef CompileWithStochastic use sgbc_stoch #else - use SGBC_nostoch_m + use SGBC_nostoch_m #endif - use EDispersives_m - use Mdispersives_m - use Anisotropic_m - use HollandWires_m + use EDispersives_m + use Mdispersives_m + use Anisotropic_m + use HollandWires_m #ifdef CompileWithMTLN - use Wire_bundles_mtln_m + use Wire_bundles_mtln_m #endif #ifdef CompileWithBerengerWires @@ -67,62 +67,60 @@ module Solver_m use estructura_slanted_m #endif - - use EpsMuTimeScale_m - use CALC_CONSTANTS_m + use EpsMuTimeScale_m + use CALC_CONSTANTS_m #ifdef CompileWithPrescale - use P_rescale + use P_rescale #endif #ifdef CompileWithMTLN - use mtln_types_m, only: mtln_t - use Wire_bundles_mtln_m + use mtln_types_m, only: mtln_t + use Wire_bundles_mtln_m #endif !! #ifdef CompileWithProfiling use nvtx #endif - implicit none - - type :: conformal_surface_face_state_t - integer(kind=4), dimension(3) :: cell = 0 - integer(kind=4) :: face_direction = 0 - integer(kind=4) :: split_direction = 0 - real(kind=rkind) :: lower_fraction = 0.0_RKIND - real(kind=rkind) :: lower_h = 0.0_RKIND - real(kind=rkind) :: upper_h = 0.0_RKIND - end type conformal_surface_face_state_t - - - type, public :: solver_t + implicit none + + type :: conformal_surface_face_state_t + integer(kind=4), dimension(3) :: cell = 0 + integer(kind=4) :: face_direction = 0 + integer(kind=4) :: split_direction = 0 + real(kind=rkind) :: lower_fraction = 0.0_RKIND + real(kind=rkind) :: lower_h = 0.0_RKIND + real(kind=rkind) :: upper_h = 0.0_RKIND + end type conformal_surface_face_state_t + + type, public :: solver_t type(sim_control_t) :: control - type(logic_control_t) :: thereAre + type(logic_control_t) :: thereAre type(perform_t) :: perform, d_perform - real(kind=rkind), pointer, dimension(:,:,:), contiguous :: Ex,Ey,Ez,Hx,Hy,Hz - real(kind=rkind), pointer, dimension(:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh + real(kind=rkind), pointer, dimension(:,:,:), contiguous :: Ex,Ey,Ez,Hx,Hy,Hz + real(kind=rkind), pointer, dimension(:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh type(constants_t) :: g - real(kind=RKIND_tiempo) :: lastexecutedtime - real(kind=RKIND) :: maxSourceValue + real(kind=RKIND_tiempo) :: lastexecutedtime + real(kind=RKIND) :: maxSourceValue - integer(kind=4) :: initialtimestep, lastexecutedtimestep, ini_save, n_info, n + integer(kind=4) :: initialtimestep, lastexecutedtimestep, ini_save, n_info, n type(bounds_t) :: bounds - type(EpsMuTimeScale_input_parameters_t) :: EpsMuTimeScale_input_parameters + type(EpsMuTimeScale_input_parameters_t) :: EpsMuTimeScale_input_parameters logical :: parar, everflushed = .false., still_planewave_time ! semba variables - type(SGGFDTDINFO_t) :: sgg + type(SGGFDTDINFO_t) :: sgg type(media_matrices_t) :: media type(taglist_t) :: tag_numbers - type(limit_t), dimension(1:6) :: SINPML_fullsize,fullsize - logical :: finishedwithsuccess = .false. - real(kind=rkind) :: eps0,mu0 - type(tagtype_t) :: tagtype - type(conformal_surface_face_state_t), allocatable :: conformal_surface_faces(:) + type(limit_t), dimension(1:6) :: SINPML_fullsize,fullsize + logical :: finishedwithsuccess = .false. + real(kind=rkind) :: eps0,mu0 + type(tagtype_t) :: tagtype + type(conformal_surface_face_state_t), allocatable :: conformal_surface_faces(:) #ifdef CompileWithMTLN - type(mtln_t) :: mtln_parsed + type(mtln_t) :: mtln_parsed #endif contains @@ -138,8 +136,6 @@ module Solver_m procedure :: step procedure :: advanceE, advanceEx, advanceEy, advanceEz procedure :: advanceH, advanceHx, advanceHy, advanceHz - procedure :: advanceConformalE => solver_advanceConformalE - procedure :: advanceConformalH => solver_advanceConformalH procedure :: advancePlaneWaveE => solver_advancePlaneWaveE procedure :: advancePlaneWaveH => solver_advancePlaneWaveH procedure :: advanceWiresE => solver_advanceWiresE @@ -154,6 +150,8 @@ module Solver_m procedure :: advanceMagneticCPML => solver_advanceMagneticCPML procedure :: advanceSGBCE => solver_advanceSGBCE procedure :: advanceSGBCH => solver_advanceSGBCH + procedure :: advanceConformalE => solver_advanceConformalE + procedure :: advanceConformalH => solver_advanceConformalH procedure :: advanceEDispersiveE => solver_advanceEDispersiveE procedure :: advanceMDispersiveH => solver_advanceMDispersiveH procedure :: MinusCloneMagneticPMC => solver_MinusCloneMagneticPMC @@ -177,16 +175,16 @@ module Solver_m function solver_ctor(sgg,media,tag_numbers,SINPML_Fullsize,fullsize,finishedwithsuccess,Eps0,Mu0,tagtype, & input, maxSourceValue, time_desdelanzamiento) result(res) - type (SGGFDTDINFO_t), intent(in) :: sgg + type(SGGFDTDINFO_t), intent(in) :: sgg type(taglist_t), intent(in) :: tag_numbers type(media_matrices_t), intent(in) :: media - type (limit_t), dimension(1:6), intent(in) :: SINPML_fullsize,fullsize + type(limit_t), dimension(1:6), intent(in) :: SINPML_fullsize,fullsize logical, intent(in) :: finishedwithsuccess - REAL (KIND=RKIND), intent(in) :: eps0,mu0 - type (tagtype_t), intent(in) :: tagtype + real(kind=RKIND), intent(in) :: eps0,mu0 + type(tagtype_t), intent(in) :: tagtype type(entrada_t), intent(in) :: input - real (kind=RKIND), intent(in) :: maxSourceValue - REAL (kind=8), intent(in) :: time_desdelanzamiento + real(kind=RKIND), intent(in) :: maxSourceValue + real(kind=8), intent(in) :: time_desdelanzamiento type(solver_t) :: res call res%init_control(input,maxSourceValue, time_desdelanzamiento) @@ -204,8 +202,8 @@ function solver_ctor(sgg,media,tag_numbers,SINPML_Fullsize,fullsize,finishedwith subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamiento) class(solver_t) :: this type(entrada_t), intent(in) :: input - real (kind=RKIND), intent(in) :: maxSourceValue - REAL (kind=8), intent(in) :: time_desdelanzamiento + real(kind=RKIND), intent(in) :: maxSourceValue + real(kind=8), intent(in) :: time_desdelanzamiento this%control%maxSourceValue = maxSourceValue @@ -247,13 +245,10 @@ subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamient this%control%resume_fromold = input%resume_fromold this%control%vtkindex = input%vtkindex this%control%createh5bin = input%createh5bin - this%control%wirecrank = input%wirecrank - this%control%fatalerror = input%fatalerror -#ifdef CompileWithMTLN - this%control%use_mtln_wires = .true. -#endif - - this%control%cfl = input%cfl + this%control%wirecrank = input%wirecrank + this%control%fatalerror = input%fatalerror + + this%control%cfl = input%cfl this%control%attfactorc = input%attfactorc this%control%attfactorw = input%attfactorw this%control%alphamaxpar = input%alphamaxpar @@ -279,15 +274,11 @@ subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamient this%control%maxCPUtime = input%maxCPUtime this%control%SGBCDepth = input%SGBCDepth this%control%precision = input%precision - this%control%num_procs = input%num_procs + this%control%num_procs = input%num_procs this%control%MEDIOEXTRA = input%MEDIOEXTRA this%control%facesNF2FF = input%facesNF2FF this%EpsMuTimeScale_input_parameters = input%EpsMuTimeScale_input_parameters -#ifdef CompileWithConformal - this%control%input_conformal_flag = input%input_conformal_flag -#endif - call this%thereAre%reset() end subroutine @@ -296,12 +287,12 @@ subroutine solver_init_control(this, input, maxSourceValue, time_desdelanzamient #ifdef CompileWithMTLN subroutine launch_mtln_simulation(this, mtln_parsed, nEntradaRoot, layoutnumber) class(solver_t) :: this - type (mtln_t) :: mtln_parsed - character (len=*), intent(in) :: nEntradaRoot - integer (kind=4), intent(in) :: layoutnumber - - call solveMTLNProblem(mtln_parsed, nEntradaRoot) - call reportSimulationEnd(layoutnumber) + type(mtln_t) :: mtln_parsed + character(len=*), intent(in) :: nEntradaRoot + integer(kind=4), intent(in) :: layoutnumber + + call solveMTLNProblem(mtln_parsed, nEntradaRoot) + call reportSimulationEnd(layoutnumber) end subroutine #endif @@ -369,11 +360,11 @@ subroutine init_distances(this) subroutine set_field_value(this, field_idx, i_range,j_range,k_range, field_value) class(solver_t) :: this - integer (kind=4), intent(in) :: field_idx - integer (kind=4), dimension(2), intent(in) :: i_range, j_range, k_range - real (kind=rkind), intent(in) :: field_value + integer(kind=4), intent(in) :: field_idx + integer(kind=4), dimension(2), intent(in) :: i_range, j_range, k_range + real(kind=rkind), intent(in) :: field_value - real(kind=rkind), pointer, dimension (:,:,:) :: field + real(kind=rkind), pointer, dimension(:,:,:) :: field integer(kind=4) :: i, j, k select case(field_idx) case(iEx) @@ -400,11 +391,11 @@ subroutine set_field_value(this, field_idx, i_range,j_range,k_range, field_value function get_field_value(this, field_idx, fi,fj,fk) result(res) class(solver_t) :: this - integer (kind=4), intent(in) :: field_idx - integer (kind=4), intent(in) :: fi, fj, fk - real (kind=rkind) :: res + integer(kind=4), intent(in) :: field_idx + integer(kind=4), intent(in) :: fi, fj, fk + real(kind=rkind) :: res - real(kind=rkind), pointer, dimension (:,:,:) :: field + real(kind=rkind), pointer, dimension(:,:,:) :: field select case(field_idx) case(iEx) field => this%Ex @@ -433,14 +424,14 @@ subroutine solver_init(this) class(solver_t) :: this integer(kind=4) :: i, j, k, field - character (len=bufsize) :: whoami, chari, layoutcharID + character(len=bufsize) :: whoami, chari, layoutcharID - real(kind=rkind), pointer, dimension (:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz - real(kind=rkind), pointer, dimension (:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh + real(kind=rkind), pointer, dimension(:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz + real(kind=rkind), pointer, dimension(:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh real(kind=RKIND_tiempo) :: ultimodt - character (len=bufsize) :: dubuf + character(len=bufsize) :: dubuf logical :: attinformado = .false. ! #ifdef compileWithMPI @@ -464,7 +455,7 @@ subroutine solver_init(this) if (this%sgg%Alloc(field)%XI /= I) call stoponerror(this%control%layoutnumber,this%control%num_procs,'OFFSETS IN INITIAL COORD NOT ALLOWED') if (this%sgg%Alloc(field)%YI /= J) call stoponerror(this%control%layoutnumber,this%control%num_procs,'OFFSETS IN INITIAL COORD NOT ALLOWED') if (this%sgg%Alloc(field)%ZI /= K) call stoponerror(this%control%layoutnumber,this%control%num_procs,'OFFSETS IN INITIAL COORD NOT ALLOWED') - END DO + end do write(whoami,'(a,i5,a,i5,a)') '(',this%control%layoutnumber+1,'/',this%control%num_procs,') ' !file names @@ -503,7 +494,7 @@ subroutine solver_init(this) open (14,file=trim(adjustl(this%control%nresumeable2))//'.old',form='unformatted') else open (14,file=trim(adjustl(this%control%nresumeable2)),form='unformatted') - endif + end if call ReadFields(this%sgg%alloc,this%lastexecutedtimestep,this%lastexecutedtime,ultimodt,this%eps0,this%mu0,Ex,Ey,Ez,Hx,Hy,Hz) this%sgg%dt=ultimodt !para permit scaling !!!!!!!!!!!!No es preciso re-sincronizar pero lo hago !!!!!!!!!!!!!!!!!!!!!!!!!! @@ -544,8 +535,8 @@ subroutine solver_init(this) else write(dubuf,*) 'SUCCESS: Restarting from .fields.old instead. From n=',this%lastexecutedtimestep call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if #else close (14) @@ -554,18 +545,18 @@ subroutine solver_init(this) call this%destroy_and_deallocate() return #endif - endif + end if #endif this%initialtimestep=this%lastexecutedtimestep+1 write(dubuf,*) '[OK] processing resuming data. Last executed time step ',this%lastexecutedtimestep call print11(this%control%layoutnumber,dubuf) - endif + end if if (this%initialtimestep>this%control%finaltimestep) then call stoponerror (this%control%layoutnumber,this%control%num_procs,'Initial time step greater than final one',.true.) !para que retorne call this%destroy_and_deallocate() return - endif + end if !!!incializa el vector de tiempos para permit scaling 191118 call crea_timevector(this%sgg,this%lastexecutedtimestep,this%control%finaltimestep,this%lastexecutedtime) !!!!!!!!!!!!!!!!!!!!! @@ -601,10 +592,8 @@ subroutine solver_init(this) call initializeSGBC() call initializeMultiports() call initializeConformalElements() - - ! WIP call initializeConformal() - ! + call initializeEDispersives() call initializeMDispersives() call initializePlanewave() @@ -633,14 +622,14 @@ subroutine solver_init(this) call InitTiming(this%sgg, this%control, this%control%time_desdelanzamiento, this%initialtimestep, this%control%maxSourceValue) - CALL CLOSEWARNINGFILE(this%control%layoutnumber,this%control%num_procs,this%control%fatalerror,.false.,this%control%simu_devia) !aqui ya esta dividido el stochastic y hay dos this%control%layoutnumber=0 + call CLOSEWARNINGFILE(this%control%layoutnumber,this%control%num_procs,this%control%fatalerror,.false.,this%control%simu_devia) !aqui ya esta dividido el stochastic y hay dos this%control%layoutnumber=0 if (this%control%fatalerror) then dubuf='FATAL ERRORS. Revise *Warnings.txt file. ABORTING...' call stoponerror(this%control%layoutnumber,this%control%num_procs,dubuf,.true.) !para que retorne call this%destroy_and_deallocate() return - endif + end if #ifdef CompileWithMPI call flushMPIdata() #endif @@ -651,7 +640,7 @@ subroutine solver_init(this) if (this%control%stochastic) then call syncstoch_mpi_sgbcs(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) call syncstoch_mpi_lumped(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) - endif + end if #endif #endif @@ -661,7 +650,7 @@ subroutine solver_init(this) subroutine findbounds(b) ! - type (bounds_t), intent(out) :: b + type(bounds_t), intent(out) :: b ! !No tocar. Dejar como estan alocateados @@ -950,7 +939,7 @@ subroutine updateSigmaM(att) logical, intent(inout) :: att real(kind=rkind) :: deltaespmax, fmax, skin_depth logical :: hayattmedia = .false. - REAL (kind = rkind) :: mur,epr + real(kind = rkind) :: mur,epr character(len=BUFSIZE) :: buff integer :: i if (abs(this%control%attfactorc-1.0_RKIND) > 1.0e-12_RKIND) then @@ -959,7 +948,7 @@ subroutine updateSigmaM(att) if (this%sgg%Med(i)%Is%MultiportPadding) then this%sgg%Med(i)%SigmaM =(-2.0_RKIND * (-1.0_RKIND + this%control%attfactorc)*this%mu0)/((1 + this%control%attfactorc)*this%sgg%dt) hayattmedia=.true. - endif + end if deltaespmax=max(max(maxval(this%sgg%dx),maxval(this%sgg%dy)),maxval(this%sgg%dz)) if (hayattmedia.and. .not. att) then !!!!info on stabilization @@ -985,11 +974,11 @@ subroutine updateSigmaM(att) 8.8757061047382236e6*mur + this%control%attfactorc*((0,2.825225e7) + 8.8757061047382236e6*mur)))/ & (1.124121310242e12 + 1.124121310242e12*this%control%attfactorc))*min(deltaespmax,skin_depth))) if (this%control%layoutnumber == 0) call WarnErrReport(buff) - endif + end if att=.true. - endif + end if end do - endif + end if end subroutine updateSigmaM subroutine updateThinWiresSigma(att) @@ -1005,10 +994,10 @@ subroutine updateThinWiresSigma(att) write(buff,'(a,2e10.2e3)') ' WIREs stabilization att. factors=',this%control%attfactorw,this%sgg%Med(i)%Sigma if (this%control%layoutnumber == 0) call WarnErrReport(buff) att=.true. - endif - endif + end if + end if end do - endif + end if end subroutine updateThinWiresSigma subroutine revertThinWiresSigma() @@ -1017,9 +1006,9 @@ subroutine revertThinWiresSigma() do i=1,this%sgg%nummedia if (this%sgg%Med(i)%Is%ThinWire) then this%sgg%Med(i)%Sigma = 0.0_RKIND !revert!!! !necesario para no lo tome como un lossy luego en wires !solo se toca el g1,g2 - endif + end if end do - endif + end if end subroutine subroutine reportSimulationOptions() @@ -1029,14 +1018,13 @@ subroutine reportSimulationOptions() call WarnErrReport(buff) if (this%control%medioextra%exists) then write(buff,'(a,i5,e9.2e2)') 'CPML correction size,factor to scale sigmamax = ', & - this%control%medioextra%pml_size,this%control%medioextra%sigma + this%control%medioextra%pml_size,this%control%medioextra%sigma call WarnErrReport(buff) - endif + end if write(buff,*) 'saveall=',this%control%saveall,', flushsecondsFields=',this%control%flushsecondsFields,', flushsecondsData=',this%control%flushsecondsData,', maxCPUtime=',this%control%maxCPUtime,', singlefilewrite=',this%control%singlefilewrite call WarnErrReport(buff) write(buff,*) 'TAPARRABOS=',this%control%TAPARRABOS,', wiresflavor=',trim(adjustl(this%control%wiresflavor)),', mindistwires=',this%control%mindistwires,', wirecrank=',this%control%wirecrank , 'makeholes=',this%control%makeholes call WarnErrReport(buff) - write(buff,*) 'use_mtln_wires=', this%control%use_mtln_wires write(buff,*) 'connectendings=',this%control%connectendings,', isolategroupgroups=',this%control%isolategroupgroups call WarnErrReport(buff) write(buff,*) 'wirethickness ', this%control%wirethickness, 'stableradholland=',this%control%stableradholland,'mtlnberenger=',this%control%mtlnberenger,' inductance_model=',trim(adjustl(this%control%inductance_model)), & @@ -1050,14 +1038,14 @@ subroutine reportSimulationOptions() call WarnErrReport(buff) write(buff,*) 'facesNF2FF%de=',this%control%facesNF2FF%de,', facesNF2FF%ab=',this%control%facesNF2FF%ab,', facesNF2FF%ar=',this%control%facesNF2FF%ar,', NF2FFDecim=',this%control%NF2FFDecim call WarnErrReport(buff) - endif + end if end subroutine subroutine initializeBorders() character(len=BUFSIZE) :: dubuf logical :: l_auxinput, l_auxoutput #ifdef CompileWithMPI - integer (kind=4) :: ierr + integer(kind=4) :: ierr #endif write(dubuf,*) 'Init Other Borders...'; call print11(this%control%layoutnumber,dubuf) call InitOtherBorders (this%sgg,this%thereAre) @@ -1071,7 +1059,7 @@ subroutine initializeBorders() write (dubuf,*) '----> there are PEC, PMC or periodic Borders'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no PEC, PMC or periodic Borders found'; call print11(this%control%layoutnumber,dubuf) - endif + end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -1090,7 +1078,7 @@ subroutine initializeBorders() write (dubuf,*) '----> there are CPML Borders'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no CPML Borders found'; call print11(this%control%layoutnumber,dubuf) - endif + end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -1107,7 +1095,7 @@ subroutine initializeBorders() write (dubuf,*) '----> there are PML Bodies'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no PML Bodies found'; call print11(this%control%layoutnumber,dubuf) - endif + end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif @@ -1123,7 +1111,7 @@ subroutine initializeBorders() write (dubuf,*) '----> there are Mur Borders'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Mur Borders found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeBorders @@ -1136,7 +1124,7 @@ subroutine initializeLumped() !init lumped debe ir antes de wires porque toca la conductividad del material !mmmm ojoooo 120123 write(dubuf,*) 'Init Lumped Elements...'; call print11(this%control%layoutnumber,dubuf) - CALL InitLumped(this%sgg,this%media,Ex,Ey,Ez,Hx,Hy,Hz,IDxe,IDye,IDze,IDxh,IDyh,IDzh,this%control,this%thereAre%Lumpeds,this%eps0,this%mu0) + call InitLumped(this%sgg,this%media,Ex,Ey,Ez,Hx,Hy,Hz,IDxe,IDye,IDze,IDxh,IDyh,IDzh,this%control,this%thereAre%Lumpeds,this%eps0,this%mu0) l_auxinput=this%thereAre%Lumpeds l_auxoutput=l_auxinput #ifdef CompileWithMPI @@ -1147,12 +1135,11 @@ subroutine initializeLumped() write (dubuf,*) '----> there are Structured lumped elements'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no lumped Structured elements found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeLumped subroutine initializeWires() - real (kind=rkind_tiempo) :: dtcritico, newdtcritico - ! real (kind=rkind) :: dtcritico, newdtcritico + real(kind=rkind_tiempo) :: dtcritico, newdtcritico character(len=BUFSIZE) :: dubuf, buff logical :: l_auxinput, l_auxoutput #ifdef CompileWithMPI @@ -1160,6 +1147,7 @@ subroutine initializeWires() #endif dtcritico=this%sgg%dt +#ifndef CompileWithMTLN if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then #ifdef CompileWithMPI @@ -1179,8 +1167,8 @@ subroutine initializeWires() write (dubuf,*) '----> there are Holland/transition wires'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Holland/transition wires found'; call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then @@ -1205,8 +1193,8 @@ subroutine initializeWires() write (dubuf,*) '----> there are Multi-wires'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Multi-wires found'; call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if #endif #ifdef CompileWithSlantedWires if((trim(adjustl(this%control%wiresflavor))=='slanted').or.(trim(adjustl(this%control%wiresflavor))=='semistructured')) then @@ -1220,7 +1208,7 @@ subroutine initializeWires() call estructura_slanted(this%sgg,this%control%precision) else continue - endif + end if call InitWires_Slanted(this%sgg, this%control%layoutnumber,this%control%num_procs, Ex, Ey, Ez, & Idxe, Idye, Idze, Idxh, Idyh, Idzh, & this%media%sggMiNo, & @@ -1244,13 +1232,27 @@ subroutine initializeWires() write (dubuf,*) '----> there are Slanted wires'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Slanted wires found'; call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if +#endif + + +#else +! else of #ifndef CompileWithMTLN +#ifdef CompileWithMPI + call MPI_Barrier(SUBCOMM_MPI,ierr) #endif + write(dubuf,*) 'Init MTLN Wires...'; call print11(this%control%layoutnumber,dubuf) + call InitWires_mtln(this%sgg,Ex,Ey,Ez,& + this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz,& + this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz,& + this%eps0, this%mu0, this%mtln_parsed,this%thereAre%MTLNbundles, dtcritico) +#endif + + !!!sincroniza el dtcritico #ifdef CompileWithMPI - newdtcritico = 0.0 - ! call MPI_AllReduce( dtcritico, newdtcritico, 1_4, REALSIZE, MPI_MIN, SUBCOMM_MPI, ierr) + newdtcritico = 0.0_RKIND_tiempo call MPI_AllReduce( dtcritico, newdtcritico, 1_4, REALSIZE_tiempo, MPI_MIN, SUBCOMM_MPI, ierr) dtcritico=newdtcritico #endif @@ -1259,29 +1261,19 @@ subroutine initializeWires() if ((this%control%layoutnumber==0).and.this%control%verbose) call WarnErrReport(buff) else if (.not.(this%control%resume.and.this%control%permitscaling)) then !no abortasr solo advertir si permittivity scaling +#ifdef CompileWithMTLN + write(buff,'(a,e10.2e3)') 'WIR_ERROR: Possibly UNSTABLE dt, make dt < ',dtcritico +#else write(buff,'(a,e10.2e3)') 'WIR_ERROR: Possibly UNSTABLE dt, decrease wire radius, number of parallel WIREs, use -stableradholland or make dt < ',dtcritico +#endif if (this%control%layoutnumber==0) call WarnErrReport(buff,.true.) else write(buff,'(a,e10.2e3)') 'WIR_WARNING: Resume and Pscaling with wires. Possibly UNSTABLE dt, decrease wire radius, number of parallel WIREs: dt is over ',dtcritico if (this%control%layoutnumber==0) call WarnErrReport(buff,.false.) - endif - endif + end if + end if !!! !! - if (this%control%use_mtln_wires) then -#ifdef CompileWithMTLN -#ifdef CompileWithMPI - call MPI_Barrier(SUBCOMM_MPI,ierr) -#endif - write(dubuf,*) 'Init MTLN Wires...'; call print11(this%control%layoutnumber,dubuf) - call InitWires_mtln(this%sgg,Ex,Ey,Ez, & - this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz, & - this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & - this%eps0, this%mu0, this%mtln_parsed,this%thereAre%MTLNbundles, dtcritico) -#else - write(buff,'(a)') 'WIR_ERROR: Executable was not compiled with MTLN modules.' -#endif - endif end subroutine initializeWires @@ -1309,7 +1301,7 @@ subroutine initializeAnisotropic() write (dubuf,*) '----> there are Structured anisotropic elements'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Structured anisotropic elements found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeAnisotropic subroutine initializeSGBC() @@ -1319,7 +1311,7 @@ subroutine initializeSGBC() integer(kind=4) :: ierr #endif - IF (this%control%sgbc) then + if (this%control%sgbc) then #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif @@ -1339,8 +1331,8 @@ subroutine initializeSGBC() write (dubuf,*) '----> there are Structured sgbc elements'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Structured sgbc elements found'; call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if end subroutine initializeSGBC subroutine initializeMultiports() @@ -1348,7 +1340,7 @@ subroutine initializeMultiports() logical :: l_auxinput, l_auxoutput #ifdef CompileWithNIBC - IF (this%control%mibc) then + if (this%control%mibc) then #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif @@ -1365,57 +1357,52 @@ subroutine initializeMultiports() write (dubuf,*) '----> there are Structured multiport elements'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Structured multiport elements found'; call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if #endif end subroutine initializeMultiports - subroutine initializeConformal() + subroutine initializeConformal() #ifdef CompileWithMPI - call MPI_Barrier(SUBCOMM_MPI,ierr) + integer :: ierr + call MPI_Barrier(SUBCOMM_MPI, ierr) #endif - write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) - call initializeConformalSurfaceStates(this) - - end subroutine + call initializeConformalSurfaceStates(this) + end subroutine initializeConformal subroutine initializeConformalElements() character(len=BUFSIZE) :: dubuf logical :: l_auxinput, l_auxoutput +#ifdef CompileWithMPI + integer(kind=4) :: ierr +#endif #ifdef CompileWithConformal - if(input_conformal_flag)then + if (input_conformal_flag) then #ifdef CompileWithMPI - call MPI_Barrier(SUBCOMM_MPI,ierr) + call MPI_Barrier(SUBCOMM_MPI, ierr) #endif - write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) -!WIP -!DEBUG - call initialize_memory_FDTD_conf_fields (this%sgg,this%media%sggMiEx, & - & this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz,Ex,Ey,Ez,Hx,Hy,Hz,& - & this%control%layoutnumber,this%control%num_procs, this%control%verbose); - l_auxinput=input_conformal_flag - l_auxoutput=l_auxinput + write(dubuf,*) 'Init Conformal Elements ...'; call print11(this%control%layoutnumber,dubuf) + call initialize_memory_FDTD_conf_fields(this%sgg,this%media%sggMiEx, & + this%media%sggMiEy,this%media%sggMiEz,this%media%sggMiHx,this%media%sggMiHy,this%media%sggMiHz, & + Ex,Ey,Ez,Hx,Hy,Hz,this%control%layoutnumber,this%control%num_procs,this%control%verbose) + l_auxinput = input_conformal_flag + l_auxoutput = l_auxinput #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) - call MPI_AllReduce( l_auxinput, l_auxoutput, 1_4, MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, ierr) + call MPI_AllReduce(l_auxinput,l_auxoutput,1_4,MPI_LOGICAL,MPI_LOR,MPI_COMM_WORLD,ierr) #endif - ! refactor JUN2015 - - !!!!!!!sgg 051214 !rellena correctamente los campos magneticos. Necesario para construir los surfaces a partir del wireframe - ! call fillMagnetic(sgg, sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz, b) - !!!!!!!ojo solo es valido para PEC!!!! cambiar luego !!?!?!?!?!? - if (l_auxoutput ) then - write (dubuf,*) '----> there are conformal elements'; call print11(this%control%layoutnumber,dubuf) + if (l_auxoutput) then + write(dubuf,*) '----> there are conformal elements'; call print11(this%control%layoutnumber,dubuf) else - write(dubuf,*) '----> no conformal elements found'; call print11(this%control%layoutnumber,dubuf) + write(dubuf,*) '----> no conformal elements found'; call print11(this%control%layoutnumber,dubuf) end if - endif + end if #endif end subroutine initializeConformalElements subroutine initializeEDispersives() - character (len=bufsize) :: dubuf + character(len=bufsize) :: dubuf logical :: l_auxinput, l_auxoutput #ifdef CompileWithMPI integer(kind=4) :: ierr @@ -1436,11 +1423,11 @@ subroutine initializeEDispersives() write (dubuf,*) '----> there are Structured Electric dispersive elements'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Structured Electric dispersive elements found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeEDispersives subroutine initializeMDispersives() - character (len=bufsize) :: dubuf + character(len=bufsize) :: dubuf logical :: l_auxinput, l_auxoutput #ifdef CompileWithMPI integer(kind=4) :: ierr @@ -1461,11 +1448,11 @@ subroutine initializeMDispersives() write (dubuf,*) '----> there are Structured Magnetic dispersive elements'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Structured Magnetic dispersive elements found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeMDispersives subroutine initializePlanewave() - character (len=bufsize) :: dubuf + character(len=bufsize) :: dubuf logical :: l_auxinput, l_auxoutput #ifdef CompileWithMPI integer(kind=4) :: ierr @@ -1486,11 +1473,11 @@ subroutine initializePlanewave() write (dubuf,*) '----> there are Plane Wave'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Plane waves are found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializePlanewave subroutine initializeNodalSources() - character (len=bufsize) :: dubuf + character(len=bufsize) :: dubuf logical :: l_auxinput, l_auxoutput #ifdef CompileWithMPI integer(kind=4) :: ierr @@ -1511,7 +1498,7 @@ subroutine initializeNodalSources() write (dubuf,*) '----> there are Structured Nodal sources'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no Structured Nodal sources are found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeNodalSources @@ -1529,7 +1516,6 @@ subroutine initializeObservation() call InitObservation (this%sgg,this%media,this%tag_numbers, & this%thereAre%Observation,this%thereAre%wires,this%thereAre%FarFields,this%initialtimestep,this%lastexecutedtime, & this%sinPML_fullsize,this%eps0,this%mu0,this%bounds, this%control) - l_auxinput=this%thereAre%Observation.or.this%thereAre%FarFields l_auxoutput=l_auxinput @@ -1541,7 +1527,7 @@ subroutine initializeObservation() write (dubuf,*) '----> there are observation requests'; call print11(this%control%layoutnumber,dubuf) else write(dubuf,*) '----> no observation requests are found'; call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine initializeObservation #ifdef CompileWithMPI @@ -1560,7 +1546,7 @@ subroutine initializeMPI() call FlushMPI_E(this%sgg%alloc,this%control%layoutnumber,this%control%num_procs, this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) - endif + end if !!!!!!!!!!!!!!!!!!!!!fin juego con fuego 210815 @@ -1576,13 +1562,12 @@ subroutine initializeMPI() !this modifies the initwires stuff and must be called after initwires (typically at the end) !llamalo siempre aunque no HAYA WIRES!!! para que no se quede colgado en hilos terminales if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & - (trim(adjustl(this%control%wiresflavor))=='transition') .or. & - this%control%use_mtln_wires) then + (trim(adjustl(this%control%wiresflavor))=='transition')) then write(dubuf,*) 'Init MPI Holland Wires...'; call print11(this%control%layoutnumber,dubuf) call newInitWiresMPI(this%control%layoutnumber,this%thereAre%wires,this%control%num_procs,this%control%resume,this%sgg%sweep) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) - endif + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then @@ -1590,7 +1575,7 @@ subroutine initializeMPI() call InitWiresMPI_Berenger(this%control%layoutnumber,this%thereAre%wires,this%control%num_procs,this%control%resume,this%sgg%sweep) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) - endif + end if #endif !llamalo siempre para forzar los flush extra en caso de materiales anisotropos o multiport write(dubuf,*) 'Init Extra Flush MPI...'; call print11(this%control%layoutnumber,dubuf) @@ -1598,25 +1583,25 @@ subroutine initializeMPI() Ex,Ey,Ez,Hx,Hy,Hz,this%thereAre%MURBorders) call MPI_Barrier(SUBCOMM_MPI,ierr) write(dubuf,*) '[OK]'; call print11(this%control%layoutnumber,dubuf) - endif + end if !must be called now in case the MPI has changed the connectivity info if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then call ReportWireJunctions(this%control%layoutnumber,this%control%num_procs,this%thereAre%wires,this%sgg%Sweep(iHz)%ZI, this%sgg%Sweep(iHz)%ZE,this%control%groundwires,this%control%strictOLD,this%control%verbose) - endif + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then call ReportWireJunctionsBerenger(this%control%layoutnumber,this%control%num_procs,this%thereAre%wires,this%sgg%Sweep(iHz)%ZI, this%sgg%Sweep(iHz)%ZE,this%control%groundwires,this%control%strictOLD,this%control%verbose) !dama no tenia el equivalente 050416 - endif + end if #endif #ifdef CompileWithSlantedWires if ((trim(adjustl(this%control%wiresflavor))=='slanted').or.(trim(adjustl(this%control%wiresflavor))=='semistructured')) then continue - endif + end if #endif end subroutine initializeMPI @@ -1630,36 +1615,36 @@ subroutine flushMPIdata() if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_H_Cray - endif + end if if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then if ((this%control%num_procs>1).and.(this%thereAre%wires)) then call newFlushWiresMPI(this%control%layoutnumber,this%control%num_procs) - endif + end if #ifdef CompileWithStochastic if (this%control%stochastic) then call syncstoch_mpi_wires(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) - endif + end if #endif - endif + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then if ((this%control%num_procs>1).and.(this%thereAre%wires)) call FlushWiresMPI_Berenger(this%control%layoutnumber,this%control%num_procs) - endif + end if #endif end subroutine flushMPIdata #endif subroutine printSimulationStart() character(len=bufsize) :: dubuf - TYPE (tiempo_t) :: time_out2 + type(tiempo_t) :: time_out2 #ifdef CompileWithMPI - integer (kind=4) :: ierr + integer(kind=4) :: ierr #endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - IF (this%control%resume) then + if (this%control%resume) then write(dubuf,*)'END PREPROCESSING. RESUMING simulation from n=',this%n call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador @@ -1672,33 +1657,33 @@ subroutine printSimulationStart() #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif - CALL get_secnds (time_out2) + call get_secnds (time_out2) write(dubuf,*) 'Start Date/time ', time_out2%fecha( 7: 8),'/',& &time_out2%fecha( 5: 6),' ',time_out2%hora( 1: 2), ':',& &time_out2%hora( 3: 4),':',time_out2%hora( 5: 6) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif + end if end subroutine printSimulationStart subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sggMtag, b, tag_numbers) !------------------------> - type (SGGFDTDINFO_t), intent(IN) :: sgg - type (bounds_t), intent( IN) :: b - INTEGER(KIND = IKINDMTAG), dimension ( 0 : b%sggMiHx%NX-1 , 0 : b%sggMiHy%NY-1 , 0 : b%sggMiHz%NZ-1 ) , intent( INOUT) :: sggMtag - integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiHx%NX-1 , 0 : b%sggMiHx%NY-1 , 0 : b%sggMiHx%NZ-1 ) , intent( IN ) :: sggMiHx - integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiHy%NX-1 , 0 : b%sggMiHy%NY-1 , 0 : b%sggMiHy%NZ-1 ) , intent( IN ) :: sggMiHy - integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiHz%NX-1 , 0 : b%sggMiHz%NY-1 , 0 : b%sggMiHz%NZ-1 ) , intent( IN ) :: sggMiHz - integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiEx%NX-1 , 0 : b%sggMiEx%NY-1 , 0 : b%sggMiEx%NZ-1 ) , intent( IN ) :: sggMiEx - integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiEy%NX-1 , 0 : b%sggMiEy%NY-1 , 0 : b%sggMiEy%NZ-1 ) , intent( IN ) :: sggMiEy - integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension ( 0 : b%sggMiEz%NX-1 , 0 : b%sggMiEz%NY-1 , 0 : b%sggMiEz%NZ-1 ) , intent( IN ) :: sggMiEz - type (taglist_t) :: tag_numbers + type(SGGFDTDINFO_t), intent(in) :: sgg + type(bounds_t), intent( IN) :: b + integer(KIND = IKINDMTAG), dimension( 0 : b%sggMiHx%NX-1 , 0 : b%sggMiHy%NY-1 , 0 : b%sggMiHz%NZ-1 ) , intent( INOUT) :: sggMtag + integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension( 0 : b%sggMiHx%NX-1 , 0 : b%sggMiHx%NY-1 , 0 : b%sggMiHx%NZ-1 ) , intent( IN ) :: sggMiHx + integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension( 0 : b%sggMiHy%NX-1 , 0 : b%sggMiHy%NY-1 , 0 : b%sggMiHy%NZ-1 ) , intent( IN ) :: sggMiHy + integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension( 0 : b%sggMiHz%NX-1 , 0 : b%sggMiHz%NY-1 , 0 : b%sggMiHz%NZ-1 ) , intent( IN ) :: sggMiHz + integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension( 0 : b%sggMiEx%NX-1 , 0 : b%sggMiEx%NY-1 , 0 : b%sggMiEx%NZ-1 ) , intent( IN ) :: sggMiEx + integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension( 0 : b%sggMiEy%NX-1 , 0 : b%sggMiEy%NY-1 , 0 : b%sggMiEy%NZ-1 ) , intent( IN ) :: sggMiEy + integer(kind = INTEGERSIZEOFMEDIAMATRICES), dimension( 0 : b%sggMiEz%NX-1 , 0 : b%sggMiEz%NY-1 , 0 : b%sggMiEz%NZ-1 ) , intent( IN ) :: sggMiEz + type(taglist_t) :: tag_numbers !------------------------> Variables locales - integer(kind = 4) :: i, j, k - integer(kind = INTEGERSIZEOFMEDIAMATRICES) :: medio1,medio2,medio3,medio4,medio5 - logical :: mediois1,mediois2,mediois3,mediois4 + integer(kind = 4) :: i, j, k + integer(kind = INTEGERSIZEOFMEDIAMATRICES) :: medio1,medio2,medio3,medio4,medio5 + logical :: mediois1,mediois2,mediois3,mediois4 integer, dimension(3) :: lbx, lby, lbz lbx = lbound(tag_numbers%face%x) lby = lbound(tag_numbers%face%y) @@ -1706,7 +1691,7 @@ subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sgg mediois3=.true.; mediois4=.true. #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) private (i,j,k,medio1,medio2,medio3,medio4,medio5,mediois1,mediois2,mediois3,mediois4) +!$OMP PARALLEL do DEFAULT(SHARED) private (i,j,k,medio1,medio2,medio3,medio4,medio5,mediois1,mediois2,mediois3,mediois4) #endif Do k=1,b%sweepHx%NZ Do j=1,b%sweepHx%NY @@ -1723,13 +1708,13 @@ subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sgg !solo lo hace con celdas de vacio porque en particular el mismo medio sgbc con diferentes orientaciones tiene distintos indices de medio y lo activaria erroneamente si lo hago para todos los medios tag_numbers%face%x(i+lbx(1)-1,j+lbx(2)-1,k+lbx(3)-1)=-ibset(iabs(tag_numbers%face%x(i+lbx(1)-1,j+lbx(2)-1,k+lbx(3)-1)),3) !ojo no cambiar: interacciona con observation tags 141020 !151020 a efectos de mapvtk el signo importa - endif + end if End do End do End do #ifdef CompileWithOpenMP !$OMP END PARALLEL DO -!$OMP PARALLEL DO DEFAULT(SHARED) private (i,j,k,medio1,medio2,medio3,medio4,medio5,mediois1,mediois2,mediois3,mediois4) +!$OMP PARALLEL do DEFAULT(SHARED) private (i,j,k,medio1,medio2,medio3,medio4,medio5,mediois1,mediois2,mediois3,mediois4) #endif Do k=1,b%sweepHy%NZ Do j=1,b%sweepHy%NY @@ -1744,13 +1729,13 @@ subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sgg mediois3= .true. !.not.((medio5==1).and.(((sggMiHy(i,j-1,k)/=1).or.(sggMiHy(i,j+1,k)/=1)))) if ((mediois1.or.mediois2).and.(mediois3)) then tag_numbers%face%y(i+lby(1)-1,j+lby(2)-1,k+lby(3)-1)=-ibset(iabs(tag_numbers%face%y(i+lby(1)-1,j+lby(2)-1,k+lby(3)-1)),4) - endif + end if End do End do End do #ifdef CompileWithOpenMP !$OMP END PARALLEL DO -!$OMP PARALLEL DO DEFAULT(SHARED) private (i,j,k,medio1,medio2,medio3,medio4,medio5,mediois1,mediois2,mediois3,mediois4) +!$OMP PARALLEL do DEFAULT(SHARED) private (i,j,k,medio1,medio2,medio3,medio4,medio5,mediois1,mediois2,mediois3,mediois4) #endif Do k=1,b%sweepHz%NZ Do j=1,b%sweepHz%NY @@ -1765,7 +1750,7 @@ subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sgg mediois3= .true. !.not.((medio5==1).and.(((sggMiHz(i,j,k-1)/=1).or.(sggMiHz(i,j,k+1)/=1)))) if ((mediois1.or.mediois2).and.(mediois3)) then tag_numbers%face%z(i+lbz(1)-1,j+lbz(2)-1,k+lbz(3)-1)=-ibset(iabs(tag_numbers%face%z(i+lbz(1)-1,j+lbz(2)-1,k+lbz(3)-1)),5) - endif + end if End do End do End do @@ -1776,9 +1761,9 @@ subroutine fillMtag(sgg,sggMiEx, sggMiEy, sggMiEz, sggMiHx, sggMiHy, sggMiHz,sgg end subroutine fillMtag subroutine crea_timevector(sgg,lastexecutedtimestep,finaltimestep,lastexecutedtime) - integer (kind=4) :: lastexecutedtimestep,finaltimestep,i - real (kind=RKIND_tiempo) :: lastexecutedtime - type (SGGFDTDINFO_t), intent(INOUT) :: sgg + integer(kind=4) :: lastexecutedtimestep,finaltimestep,i + real(kind=RKIND_tiempo) :: lastexecutedtime + type(SGGFDTDINFO_t), intent(INOUT) :: sgg allocate (sgg%tiempo(lastexecutedtimestep:finaltimestep+2)) sgg%tiempo(lastexecutedtimestep)=lastexecutedtime do i=lastexecutedtimestep+1,finaltimestep+2 @@ -1792,26 +1777,26 @@ end subroutine solver_init subroutine solver_run(this) class(solver_t) :: this - real(kind=rkind), pointer, dimension (:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz - real(kind=rkind), pointer, dimension (:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh + real(kind=rkind), pointer, dimension(:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz + real(kind=rkind), pointer, dimension(:) :: Idxe, Idye, Idze, Idxh, Idyh, Idzh, dxe, dye, dze, dxh, dyh, dzh logical :: call_timing, l_aux, flushFF, somethingdone, newsomethingdone integer :: i - real (kind=rkind) :: pscale_alpha - REAL (kind=rkind_tiempo) :: at + real(kind=rkind) :: pscale_alpha + real(kind=rkind_tiempo) :: at character(len=bufsize) :: dubuf +#ifdef CompileWithConformal +#ifdef CompileWithMPI + call this%init_MPIConformalProbes() +#endif +#endif #ifdef CompileWithMPI integer(kind=4) :: ierr #endif #ifdef CompileWithProfiling call nvtxStartRange("Antes del bucle N") #endif -!240424 sgg creo el comunicador mpi de las sondas conformal aqui. debe irse con el nuevo conformal -#ifdef CompileWithConformal -#ifdef CompileWithMPI - call this%init_MPIConformalProbes() -#endif -#endif + this%still_planewave_time=.true. !inicializacion de la variable flushFF = .false. pscale_alpha=1.0 !se le entra con 1.0 @@ -1821,7 +1806,7 @@ subroutine solver_run(this) Idxe => this%Idxe; Idye => this%Idye; Idze => this%Idze; Idxh => this%Idxh; Idyh => this%Idyh; Idzh => this%Idzh; dxe => this%dxe; dye => this%dye; dze => this%dze; dxh => this%dxh; dyh => this%dyh; dzh => this%dzh - ciclo_temporal : DO while (this%n <= this%control%finaltimestep) + ciclo_temporal : do while (this%n <= this%control%finaltimestep) call this%step() call updateAndFlush() @@ -1830,7 +1815,7 @@ subroutine solver_run(this) call_timing=.true. else call_timing=.false. - endif + end if #ifdef CompileWithMPI l_aux=call_timing call MPI_AllReduce( l_aux, call_timing, 1_4, MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, ierr) @@ -1848,7 +1833,7 @@ subroutine solver_run(this) if (this%sgg%Observation(i)%done.and.(.not.this%sgg%Observation(i)%flushed)) then this%perform%flushXdmf=.true. this%perform%flushVTK=.true. - endif + end if end do #ifdef CompileWithMPI l_aux=this%perform%flushVTK @@ -1883,7 +1868,7 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif + end if if (this%perform%isFlush()) then ! flushFF=this%perform%postprocess @@ -1891,7 +1876,7 @@ subroutine solver_run(this) write(dubuf,'(a,i9)') ' INIT OBSERVATION DATA FLUSHING and Near-to-Far field n= ',this%n else write(dubuf,'(a,i9)') ' INIT OBSERVATION DATA FLUSHING n= ',this%n - endif + end if call print11(this%control%layoutnumber,SEPARADOR//separador//separador) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) @@ -1905,7 +1890,7 @@ subroutine solver_run(this) write(dubuf,'(a,i9)') ' Done OBSERVATION DATA FLUSHED and Near-to-Far field n= ',this%n else write(dubuf,'(a,i9)') ' Done OBSERVATION DATA FLUSHED n= ',this%n - endif + end if call print11(this%control%layoutnumber,SEPARADOR//separador//separador) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) @@ -1933,8 +1918,8 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if !! if (this%perform%flushvtk) then write(dubuf,'(a,i9)') ' Post-processing .vtk files n= ',this%n @@ -1958,8 +1943,8 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if if (this%perform%flushXdmf) then write(dubuf,'(a,i9)') ' Post-processing .xdmf files n= ',this%n call print11(this%control%layoutnumber,SEPARADOR//separador//separador) @@ -1985,13 +1970,13 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) #endif - endif !del if (this%performflushDATA.or.... + end if !del if (this%performflushDATA.or.... ! @@ -2001,17 +1986,17 @@ subroutine solver_run(this) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - endif + end if - endif !!!del if (.not.this%parar) - endif !!!del if(n >= n_info + end if !!!del if (.not.this%parar) + end if !!!del if(n >= n_info ! !!!!!!!!all the previous must be together this%control%fatalerror=.false. if (this%parar) then this%control%fatalerror=.true. exit ciclo_temporal - endif + end if #ifdef CompileWithPrescale if (this%control%permitscaling) then #ifndef miguelPscaleStandAlone @@ -2031,9 +2016,9 @@ subroutine solver_run(this) #endif ,this%control%stochastic,this%control%verbose) #ifndef miguelPscaleStandAlone - endif + end if #endif - endif + end if #endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! Increase time step @@ -2045,19 +2030,19 @@ subroutine solver_run(this) contains subroutine updateAndFlush() integer(kind=4) :: mindum - IF (this%thereAre%Observation) then + if (this%thereAre%Observation) then call UpdateObservation(this%sgg,this%media,this%tag_numbers, this%n,this%ini_save, Ex, Ey, Ez, Hx, Hy, Hz, dxe, dye, dze, dxh, dyh, dzh,this%control%wiresflavor,this%sinPML_fullsize,this%control%wirecrank, this%control%noconformalmapvtk,this%bounds) if (this%n>=this%ini_save+BuffObse) then mindum=min(this%control%finaltimestep,this%ini_save+BuffObse) call FlushObservationFiles(this%sgg,this%ini_save,mindum,this%control%layoutnumber,this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.FALSE.) !no se flushean los farfields ahora - endif - endif + end if + end if end subroutine subroutine singleUnpack() - character (LEN=BUFSIZE) :: dubuf + character(len=BUFSIZE) :: dubuf logical :: somethingdone - real (kind=rkind_tiempo) :: at + real(kind=rkind_tiempo) :: at #ifdef CompileWithMPI integer(kind=4) :: ierr #endif @@ -2070,7 +2055,7 @@ subroutine singleUnpack() if (this%control%singlefilewrite.and.this%perform%Unpack) then at=this%n*this%sgg%dt if (this%thereAre%Observation) call PostProcessOnthefly(this%control%layoutnumber,this%control%num_procs,this%sgg,this%control%nentradaroot,at,somethingdone,this%control%niapapostprocess,this%control%forceresampled) - endif + end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) call MPI_AllReduce( somethingdone, newsomethingdone, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) @@ -2100,16 +2085,15 @@ subroutine step(this) call flushPlanewaveOff(planewave_switched_off, this%still_planewave_time, thereareplanewave) call this%AdvanceAnisotropicE() call this%advanceE() - ! WIP call this%advanceConformalE() - ! #ifdef CompileWithConformal - if(this%control%input_conformal_flag) call conformal_advance_E() + if (this%control%input_conformal_flag) call conformal_advance_E() #endif + call this%advanceWiresE() call this%advancePMLE() #ifdef CompileWithNIBC - IF (this%thereAre%Multiports.and.(this%control%mibc)) call AdvanceMultiportE(this%sgg%alloc, this%Ex, this%Ey, this%Ez) + if (this%thereAre%Multiports.and.(this%control%mibc)) call AdvanceMultiportE(this%sgg%alloc, this%Ex, this%Ey, this%Ez) #endif call this%AdvancesgbcE() call this%advanceLumpedE() @@ -2121,22 +2105,23 @@ subroutine step(this) if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_E_Cray - endif + end if #endif call this%advanceAnisotropicH() call this%advanceH() - ! WIP call this%advanceConformalH() - ! call this%advancePMLbodyH() call this%AdvanceMagneticCPML() call this%MinusCloneMagneticPMC() call this%CloneMagneticPeriodic() +#ifdef CompileWithConformal + if (this%control%input_conformal_flag) call conformal_advance_H() +#endif call this%AdvancesgbcH() call this%AdvanceMDispersiveH() #ifdef CompileWithNIBC - IF (this%thereAre%Multiports .and.(this%control%mibc)) & + if (this%thereAre%Multiports .and.(this%control%mibc)) & call AdvanceMultiportH (this%sgg%alloc,this%Hx,this%Hy,this%Hz, & this%Ex,this%Ey,this%Ez,& this%Idxe,this%Idye,this%Idze, & @@ -2149,10 +2134,6 @@ subroutine step(this) call this%MinusCloneMagneticPMC() call this%CloneMagneticPeriodic() -#ifdef CompileWithConformal - if(this%control%input_conformal_flag) call conformal_advance_H() -#endif - #ifdef CompileWithMPI !!Flush all the MPI (esto estaba justo al principo del bucle temporal diciendo que era necesario para correcto resuming) !lo he movido aqui a 16/10/2012 porque el farfield necesita tener los campos magneticos correctos @@ -2161,18 +2142,18 @@ subroutine step(this) if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_H_Cray - endif + end if if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then if ((this%control%num_procs>1).and.(this%thereAre%wires)) call newFlushWiresMPI(this%control%layoutnumber,this%control%num_procs) #ifdef CompileWithStochastic if (this%control%stochastic) call syncstoch_mpi_wires(this%control%simu_devia,this%control%layoutnumber,this%control%num_procs) #endif - endif + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then if ((this%control%num_procs>1).and.(this%thereAre%wires)) call FlushWiresMPI_Berenger(this%control%layoutnumber,this%control%num_procs) - endif + end if #endif #endif @@ -2194,7 +2175,7 @@ subroutine step(this) subroutine flushPlanewaveOff(pw_switched_off, pw_still_time, pw_thereAre) logical, intent(inout) :: pw_switched_off, pw_still_time, pw_thereAre logical :: pw_still_time_aux, pw_thereAre_aux - integer (kind=4) :: ierr + integer(kind=4) :: ierr character(len=bufsize) :: dubuf if (.not.pw_switched_off) then pw_still_time = pw_still_time.and.this%thereAre%PlaneWaveBoxes @@ -2205,18 +2186,18 @@ subroutine flushPlanewaveOff(pw_switched_off, pw_still_time, pw_thereAre) call MPI_AllReduce(pw_still_time_aux, pw_still_time, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) pw_thereAre_aux = pw_thereAre call MPI_AllReduce(pw_thereAre_aux, pw_thereAre, 1_4, MPI_LOGICAL, MPI_LOR, SUBCOMM_MPI, ierr) - endif + end if #endif if (.not.pw_still_time) then pw_switched_off=.true. write(dubuf,*) 'Switching plane-wave off at n=', this%n if (pw_thereAre) call print11(this%control%layoutnumber,dubuf) - endif - endif + end if + end if end subroutine -! !PML E-field advancing (IT IS IMPORTANT TO FIRST CALL THE PML ADVANCING ROUTINES, SINCE THE DISPERSIVE +! !PML E-field advancing (IT IS IMPORTANT TO FIRST call THE PML ADVANCING ROUTINES, SINCE THE DISPERSIVE ! !ROUTINES INJECT THE POLARIZATION CURRENTS EVERYWHERE (PML INCLUDED) ! !SO THAT DISPERSIVE MATERIALS CAN ALSO BE TRUNCATED BY CPML) end subroutine step @@ -2224,7 +2205,7 @@ end subroutine step #ifdef CompileWithMPI subroutine init_MPIConformalProbes(this) class(solver_t) :: this - integer (kind=4) :: group_conformalprobes_dummy, ierr + integer(kind=4) :: group_conformalprobes_dummy, ierr !!!!sgg250424 niapa para que funcionen sondas conformal mpi !todos deben crear el subcomunicador mpi una sola vez if (input_conformal_flag) then @@ -2233,7 +2214,7 @@ subroutine init_MPIConformalProbes(this) else SUBCOMM_MPI_conformal_probes=0 MPI_conformal_probes_root=-1 - endif + end if call MPIinitSubcomm(this%control%layoutnumber,this%control%num_procs,SUBCOMM_MPI_conformal_probes,& MPI_conformal_probes_root,group_conformalprobes_dummy) ! print *,'-----creating--->',this%control%layoutnumber,SIZE,SUBCOMM_MPI_conformal_probes,MPI_conformal_probes_root @@ -2270,9 +2251,9 @@ subroutine advanceEx(this, sggMiEx) class(solver_t) :: this integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiEx%NX-1,0:this%bounds%sggMiEx%NY-1,0:this%bounds%sggMiEx%NZ-1), intent(in) :: sggMiEx - real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ex - real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hy - real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hz + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ex + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hy + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hz real(kind=rkind), dimension(:), pointer :: Idyh real(kind=rkind), dimension(:), pointer :: Idzh @@ -2288,7 +2269,7 @@ subroutine advanceEx(this, sggMiEx) Idzh(0:this%bounds%dzh%NZ-1) => this%Idzh #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzhk,Idyhj) +!$OMP PARALLEL do DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzhk,Idyhj) #endif #ifdef CompileWithACC !$ACC parallel loop DEFAULT(present) collapse (2) private (i,j,k,medio,Idzhk,Idyhj) copyin(Ex,sggMiEx,Hy,Hz,Idyh,Idzh,b,G1,G2) copyout(Ex) @@ -2311,15 +2292,15 @@ end subroutine advanceEx subroutine advanceEy(this,sggMiEy) class(solver_t) :: this - integer(kind=integersizeofmediamatrices), dimension (0:this%bounds%sggMiEy%NX-1,0:this%bounds%sggMiEy%NY-1,0:this%bounds%sggMiEy%NZ-1), intent(in) :: sggMiEy + integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiEy%NX-1,0:this%bounds%sggMiEy%NY-1,0:this%bounds%sggMiEy%NZ-1), intent(in) :: sggMiEy - real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ey - real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hz - real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ey + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hz + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx real(kind=rkind), dimension(:), pointer :: Idzh real(kind=rkind), dimension(:), pointer :: Idxh - real (kind=rkind) :: Idzhk + real(kind=rkind) :: Idzhk integer(kind=4) :: i, j, k integer(kind=integersizeofmediamatrices) :: medio @@ -2331,7 +2312,7 @@ subroutine advanceEy(this,sggMiEy) Idxh(0:this%bounds%dxh%NX-1) => this%Idxh #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzhk) +!$OMP PARALLEL do DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzhk) #endif #ifdef CompileWithACC !$ACC parallel loop DEFAULT(present) collapse (2) private (i,j,k,medio,Idzhk) copyin(Ey,sggMiEy,Hz,Hx,Idzh,Idxh,b,G1,G2) copyout(Ey) @@ -2356,17 +2337,17 @@ end subroutine advanceEy subroutine advanceEz(this,sggMiEz) class(solver_t) :: this - integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiEz%NX-1,0:this%bounds%sggMiEz%NY-1,0:this%bounds%sggMiEz%NZ-1), intent(in) :: sggMiEz + integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiEz%NX-1,0:this%bounds%sggMiEz%NY-1,0:this%bounds%sggMiEz%NZ-1), intent(in) :: sggMiEz - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ez - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Hy - real (kind=rkind), dimension(:), pointer :: Idyh - real (kind=rkind), dimension(:), pointer :: Idxh + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ez + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hy + real(kind=rkind), dimension(:), pointer :: Idyh + real(kind=rkind), dimension(:), pointer :: Idxh !------------------------> Variables locales - real (kind = RKIND) :: Idyhj - integer(kind = 4) :: i, j, k - integer(kind = INTEGERSIZEOFMEDIAMATRICES) :: medio + real(kind = RKIND) :: Idyhj + integer(kind = 4) :: i, j, k + integer(kind = INTEGERSIZEOFMEDIAMATRICES) :: medio Ez(0:this%bounds%Ez%NX-1,0:this%bounds%Ez%NY-1,0:this%bounds%Ez%NZ-1) => this%Ez @@ -2377,7 +2358,7 @@ subroutine advanceEz(this,sggMiEz) Idxh(0:this%bounds%dxh%NX-1) => this%Idxh #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idyhj) +!$OMP PARALLEL do DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idyhj) #endif #ifdef CompileWithACC !$ACC parallel loop DEFAULT(present) collapse (2) private (i,j,k,medio,Idyhj) copyin(Ez,sggMiEz,Hx,Hy,Idxh,Idyh,b,G1,G2) copyout(Ez) @@ -2422,12 +2403,12 @@ subroutine advanceHx(this, sggMiHx) class(solver_t) :: this integer(kind=integersizeofmediamatrices), dimension(0:this%bounds%sggMiHx%NX-1,0:this%bounds%sggMiHx%NY-1,0:this%bounds%sggMiHx%NZ-1), intent(in) :: sggMiHx - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ey - real (kind=rkind), dimension(:,:,:), pointer, contiguous :: Ez - real (kind=rkind), dimension(:), pointer:: IdyE - real (kind=rkind), dimension(:), pointer:: IdzE - real (kind=rkind) :: Idzek, Idyej + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Hx + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ey + real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ez + real(kind=rkind), dimension(:), pointer:: IdyE + real(kind=rkind), dimension(:), pointer:: IdzE + real(kind=rkind) :: Idzek, Idyej integer(kind=4) :: i, j, k integer(kind=integersizeofmediamatrices) :: medio @@ -2440,7 +2421,7 @@ subroutine advanceHx(this, sggMiHx) #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzek,Idyej) +!$OMP PARALLEL do DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzek,Idyej) #endif #ifdef CompileWithACC !$ACC parallel loop DEFAULT(present) collapse (2) private (i,j,k,medio,Idzek,Idyej) copyin(Hx,sggMiHx,Ey,Ez,Idye,Idze,b,GM1,GM2) copyout(Hx) @@ -2470,7 +2451,7 @@ subroutine advanceHy(this, sggMiHy) real(kind=rkind), dimension(:,:,:), pointer, contiguous :: Ex real(kind=rkind), dimension(:), pointer :: IdzE real(kind=rkind), dimension(:), pointer :: IdxE - real (kind=rkind) :: Idzek + real(kind=rkind) :: Idzek integer(kind=4) :: i, j, k integer(kind=integersizeofmediamatrices) :: medio @@ -2482,7 +2463,7 @@ subroutine advanceHy(this, sggMiHy) IdxE(0:this%bounds%dxE%NX-1) => this%IdxE #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzek) +!$OMP PARALLEL do DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idzek) #endif #ifdef CompileWithACC !$ACC parallel loop DEFAULT(present) collapse (2) private (i,j,k,medio,Idzek) copyin(Hy,sggMiHy,Ez,Ex,Idze,Idxe,b,GM1,GM2) copyout(Hy) @@ -2511,9 +2492,9 @@ subroutine advanceHz(this, sggMiHz) real(kind=rkind), dimension(:), pointer :: IdyE real(kind=rkind), dimension(:), pointer :: IdxE - real (kind = RKIND) :: Idyej - integer(kind = 4) :: i, j, k - integer(kind = INTEGERSIZEOFMEDIAMATRICES) :: medio + real(kind = RKIND) :: Idyej + integer(kind = 4) :: i, j, k + integer(kind = INTEGERSIZEOFMEDIAMATRICES) :: medio Hz(0:this%bounds%Hz%NX-1,0:this%bounds%Hz%NY-1,0:this%bounds%Hz%NZ-1) => this%Hz Ex(0:this%bounds%EX%NX-1,0:this%bounds%EX%NY-1,0:this%bounds%EX%NZ-1) => this%Ex Ey(0:this%bounds%Ey%NX-1,0:this%bounds%Ey%NY-1,0:this%bounds%Ey%NZ-1) => this%Ey @@ -2521,7 +2502,7 @@ subroutine advanceHz(this, sggMiHz) IdxE(0:this%bounds%dxE%NX-1) => this%IdxE #ifdef CompileWithOpenMP -!$OMP PARALLEL DO DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idyej) +!$OMP PARALLEL do DEFAULT(SHARED) collapse (2) private (i,j,k,medio,Idyej) #endif #ifdef CompileWithACC !$ACC parallel loop DEFAULT(present) collapse (2) private (i,j,k,medio,Idyej) copyin(Hz,sggMiHz,Ex,Ey,Idxe,Idye,b,GM1,GM2) copyout(Hz) @@ -2541,222 +2522,203 @@ subroutine advanceHz(this, sggMiHz) return end subroutine advanceHz - subroutine solver_advanceConformalE(this) - class(solver_t) :: this - integer :: n, i, j, k, e, medium - real(kind=rkind) :: sign, inverse_step - - if (.not. allocated(this%conformal_surface_faces)) return - do n = 1, size(this%conformal_surface_faces) - i = this%conformal_surface_faces(n)%cell(1) - j = this%conformal_surface_faces(n)%cell(2) - k = this%conformal_surface_faces(n)%cell(3) - e = 6 - this%conformal_surface_faces(n)%face_direction - & - this%conformal_surface_faces(n)%split_direction - sign = leviCivita(this%conformal_surface_faces(n)%face_direction, & - this%conformal_surface_faces(n)%split_direction, e) - - select case(this%conformal_surface_faces(n)%split_direction) - case(1) - i = i + 1 - inverse_step = this%Idxh(i) - case(2) - j = j + 1 - inverse_step = this%Idyh(j) - case(3) - k = k + 1 - inverse_step = this%Idzh(k) - end select - - select case(e) - case(1) - medium = this%media%sggMiEx(i,j,k) - this%Ex(i,j,k) = this%Ex(i,j,k) + this%g%g2(medium)*inverse_step*sign* & - (this%conformal_surface_faces(n)%upper_h - this%conformal_surface_faces(n)%lower_h) - case(2) - medium = this%media%sggMiEy(i,j,k) - this%Ey(i,j,k) = this%Ey(i,j,k) + this%g%g2(medium)*inverse_step*sign* & - (this%conformal_surface_faces(n)%upper_h - this%conformal_surface_faces(n)%lower_h) - case(3) - medium = this%media%sggMiEz(i,j,k) - this%Ez(i,j,k) = this%Ez(i,j,k) + this%g%g2(medium)*inverse_step*sign* & - (this%conformal_surface_faces(n)%upper_h - this%conformal_surface_faces(n)%lower_h) - end select - end do - end subroutine solver_advanceConformalE - - subroutine solver_advanceConformalH(this) - class(solver_t) :: this - integer :: n, i, j, k, e - real(kind=rkind) :: sign, inverse_step, lower_e, upper_e, lower_fraction - - if (.not. allocated(this%conformal_surface_faces)) return - do n = 1, size(this%conformal_surface_faces) - i = this%conformal_surface_faces(n)%cell(1) - j = this%conformal_surface_faces(n)%cell(2) - k = this%conformal_surface_faces(n)%cell(3) - e = 6 - this%conformal_surface_faces(n)%face_direction - & - this%conformal_surface_faces(n)%split_direction - sign = leviCivita(this%conformal_surface_faces(n)%face_direction, & - this%conformal_surface_faces(n)%split_direction, e) - lower_fraction = this%conformal_surface_faces(n)%lower_fraction - - select case(e) - case(1) - lower_e = this%Ex(i,j,k) - select case(this%conformal_surface_faces(n)%split_direction) - case(2); upper_e = this%Ex(i,j+1,k); inverse_step = this%Idye(j) - case(3); upper_e = this%Ex(i,j,k+1); inverse_step = this%Idze(k) - end select - case(2) - lower_e = this%Ey(i,j,k) - select case(this%conformal_surface_faces(n)%split_direction) - case(1); upper_e = this%Ey(i+1,j,k); inverse_step = this%Idxe(i) - case(3); upper_e = this%Ey(i,j,k+1); inverse_step = this%Idze(k) - end select - case(3) - lower_e = this%Ez(i,j,k) - select case(this%conformal_surface_faces(n)%split_direction) - case(1); upper_e = this%Ez(i+1,j,k); inverse_step = this%Idxe(i) - case(2); upper_e = this%Ez(i,j+1,k); inverse_step = this%Idye(j) - end select - end select - - this%conformal_surface_faces(n)%lower_h = this%conformal_surface_faces(n)%lower_h + & - this%sgg%dt/(this%mu0*lower_fraction)*(-sign)*(-lower_e)*inverse_step - this%conformal_surface_faces(n)%upper_h = this%conformal_surface_faces(n)%upper_h + & - this%sgg%dt/(this%mu0*(1.0_RKIND-lower_fraction))*(-sign)*upper_e*inverse_step - - select case(this%conformal_surface_faces(n)%face_direction) - case(1); this%Hx(i,j,k) = this%conformal_surface_faces(n)%lower_h - case(2); this%Hy(i,j,k) = this%conformal_surface_faces(n)%lower_h - case(3); this%Hz(i,j,k) = this%conformal_surface_faces(n)%lower_h - end select - end do - end subroutine solver_advanceConformalH - - subroutine initializeConformalSurfaceStates(this) - class(solver_t) :: this - type(conformal_surface_face_state_t), allocatable :: states(:), enlarged(:) - integer :: medium, feature, split_direction - type(face_t) :: face - real(kind=rkind) :: lower_fraction - - ! A coordinate-normal sheet cuts opposite, parallel edges at the same - ! fractional coordinate. Those faces can be split into independent - ! lower/upper Yee states without defining a PEC volume. - allocate(states(0)) - do medium = 1, this%sgg%NumMedia - if (.not. this%sgg%Med(medium)%Is%ConformalPEC .or. & - .not. this%sgg%Med(medium)%Is%Surface) cycle - if (.not. allocated(this%sgg%Med(medium)%ConformalFace)) cycle - do feature = 1, size(this%sgg%Med(medium)%ConformalFace) - face = this%sgg%Med(medium)%ConformalFace(feature) - call findSurfaceFaceSplit(this%sgg, face, split_direction, lower_fraction) - if (split_direction == 0) cycle - if (lower_fraction <= 1.0e-5_RKIND .or. lower_fraction >= 1.0_RKIND-1.0e-5_RKIND) cycle - if (surfaceStateExists(states, face%cell, face%direction)) cycle - allocate(enlarged(size(states)+1)) - if (size(states) > 0) enlarged(1:size(states)) = states - enlarged(size(enlarged))%cell = face%cell - enlarged(size(enlarged))%face_direction = face%direction - enlarged(size(enlarged))%split_direction = split_direction - enlarged(size(enlarged))%lower_fraction = lower_fraction - call move_alloc(enlarged, states) - end do - end do - call move_alloc(states, this%conformal_surface_faces) - end subroutine initializeConformalSurfaceStates - - subroutine findSurfaceFaceSplit(sgg, face, split_direction, lower_fraction) - type(SGGFDTDINFO_t), intent(in) :: sgg - type(face_t), intent(in) :: face - integer, intent(out) :: split_direction - real(kind=rkind), intent(out) :: lower_fraction - integer :: medium, feature, candidate - real(kind=rkind) :: candidate_fraction - - split_direction = 0 - lower_fraction = 0.0_RKIND - do medium = 1, sgg%NumMedia - if (.not. sgg%Med(medium)%Is%ConformalPEC .or. .not. sgg%Med(medium)%Is%Surface) cycle - if (.not. allocated(sgg%Med(medium)%ConformalEdge)) cycle - do feature = 1, size(sgg%Med(medium)%ConformalEdge) - candidate = sgg%Med(medium)%ConformalEdge(feature)%direction - if (candidate == face%direction) cycle - if (.not. edgeBoundsFace(sgg%Med(medium)%ConformalEdge(feature), face)) cycle - candidate_fraction = edgeIntersectionFraction(sgg%Med(medium)%ConformalEdge(feature)) - if (candidate_fraction <= 0.0_RKIND) cycle - if (split_direction /= 0 .and. split_direction /= candidate) then - split_direction = 0 - lower_fraction = 0.0_RKIND - return - end if - if (split_direction == candidate .and. lower_fraction > 0.0_RKIND .and. & - abs(lower_fraction-candidate_fraction) > 1.0e-5_RKIND) then - split_direction = 0 - lower_fraction = 0.0_RKIND - return - end if - split_direction = candidate - lower_fraction = candidate_fraction - end do - end do - end subroutine findSurfaceFaceSplit - - logical function edgeBoundsFace(edge, face) - type(edge_t), intent(in) :: edge - type(face_t), intent(in) :: face - integer :: remaining_direction - - edgeBoundsFace = .false. - if (edge%direction == face%direction) return - remaining_direction = 6 - edge%direction - face%direction - if (edge%cell(face%direction) /= face%cell(face%direction)) return - if (edge%cell(edge%direction) /= face%cell(edge%direction)) return - edgeBoundsFace = edge%cell(remaining_direction) == face%cell(remaining_direction) .or. & - edge%cell(remaining_direction) == face%cell(remaining_direction) + 1 - end function edgeBoundsFace - - real(kind=rkind) function edgeIntersectionFraction(edge) result(fraction) - type(edge_t), intent(in) :: edge - real(kind=rkind) :: first_fraction, second_fraction - - first_fraction = edge%material_coords(1) - floor(edge%material_coords(1)) - second_fraction = edge%material_coords(2) - floor(edge%material_coords(2)) - fraction = 0.0_RKIND - if (first_fraction > 1.0e-5_RKIND) fraction = first_fraction - if (second_fraction > 1.0e-5_RKIND) fraction = second_fraction - end function edgeIntersectionFraction - - logical function surfaceStateExists(states, cell, direction) - type(conformal_surface_face_state_t), dimension(:), intent(in) :: states - integer(kind=4), dimension(3), intent(in) :: cell - integer, intent(in) :: direction - integer :: n - - surfaceStateExists = .false. - do n = 1, size(states) - if (states(n)%face_direction == direction .and. all(states(n)%cell == cell)) then - surfaceStateExists = .true. - return - end if - end do - end function surfaceStateExists - - real(kind=rkind) function leviCivita(first, second, third) result(value) - integer, intent(in) :: first, second, third - if (first == second .or. second == third .or. first == third) then - value = 0.0_RKIND - else if ((first == 1 .and. second == 2 .and. third == 3) .or. & - (first == 2 .and. second == 3 .and. third == 1) .or. & - (first == 3 .and. second == 1 .and. third == 2)) then - value = 1.0_RKIND - else - value = -1.0_RKIND - end if - end function leviCivita + subroutine solver_advanceConformalE(this) + class(solver_t) :: this + integer :: n, i, j, k, e, medium + real(kind=rkind) :: sign, inverse_step + + if (.not. allocated(this%conformal_surface_faces)) return + do n = 1, size(this%conformal_surface_faces) + i = this%conformal_surface_faces(n)%cell(1) + j = this%conformal_surface_faces(n)%cell(2) + k = this%conformal_surface_faces(n)%cell(3) + e = 6 - this%conformal_surface_faces(n)%face_direction - this%conformal_surface_faces(n)%split_direction + sign = leviCivita(this%conformal_surface_faces(n)%face_direction, & + this%conformal_surface_faces(n)%split_direction, e) + select case (this%conformal_surface_faces(n)%split_direction) + case (1); i = i + 1; inverse_step = this%Idxh(i) + case (2); j = j + 1; inverse_step = this%Idyh(j) + case (3); k = k + 1; inverse_step = this%Idzh(k) + end select + select case (e) + case (1) + medium = this%media%sggMiEx(i,j,k) + this%Ex(i,j,k) = this%Ex(i,j,k) + this%g%g2(medium)*inverse_step*sign * & + (this%conformal_surface_faces(n)%upper_h-this%conformal_surface_faces(n)%lower_h) + case (2) + medium = this%media%sggMiEy(i,j,k) + this%Ey(i,j,k) = this%Ey(i,j,k) + this%g%g2(medium)*inverse_step*sign * & + (this%conformal_surface_faces(n)%upper_h-this%conformal_surface_faces(n)%lower_h) + case (3) + medium = this%media%sggMiEz(i,j,k) + this%Ez(i,j,k) = this%Ez(i,j,k) + this%g%g2(medium)*inverse_step*sign * & + (this%conformal_surface_faces(n)%upper_h-this%conformal_surface_faces(n)%lower_h) + end select + end do + end subroutine solver_advanceConformalE + + subroutine solver_advanceConformalH(this) + class(solver_t) :: this + integer :: n, i, j, k, e + real(kind=rkind) :: sign, inverse_step, lower_e, upper_e, lower_fraction + + if (.not. allocated(this%conformal_surface_faces)) return + do n = 1, size(this%conformal_surface_faces) + i = this%conformal_surface_faces(n)%cell(1) + j = this%conformal_surface_faces(n)%cell(2) + k = this%conformal_surface_faces(n)%cell(3) + e = 6 - this%conformal_surface_faces(n)%face_direction - this%conformal_surface_faces(n)%split_direction + sign = leviCivita(this%conformal_surface_faces(n)%face_direction, & + this%conformal_surface_faces(n)%split_direction, e) + lower_fraction = this%conformal_surface_faces(n)%lower_fraction + select case (e) + case (1) + lower_e = this%Ex(i,j,k) + select case (this%conformal_surface_faces(n)%split_direction) + case (2); upper_e = this%Ex(i,j+1,k); inverse_step = this%Idyh(j) + case (3); upper_e = this%Ex(i,j,k+1); inverse_step = this%Idzh(k) + end select + case (2) + lower_e = this%Ey(i,j,k) + select case (this%conformal_surface_faces(n)%split_direction) + case (1); upper_e = this%Ey(i+1,j,k); inverse_step = this%Idxe(i) + case (3); upper_e = this%Ey(i,j,k+1); inverse_step = this%Idze(k) + end select + case (3) + lower_e = this%Ez(i,j,k) + select case (this%conformal_surface_faces(n)%split_direction) + case (1); upper_e = this%Ez(i+1,j,k); inverse_step = this%Idxe(i) + case (2); upper_e = this%Ez(i,j+1,k); inverse_step = this%Idye(j) + end select + end select + this%conformal_surface_faces(n)%lower_h = this%conformal_surface_faces(n)%lower_h + & + this%sgg%dt/(this%mu0*lower_fraction)*(-sign)*(-lower_e)*inverse_step + this%conformal_surface_faces(n)%upper_h = this%conformal_surface_faces(n)%upper_h + & + this%sgg%dt/(this%mu0*(1.0_RKIND-lower_fraction))*(-sign)*upper_e*inverse_step + select case (this%conformal_surface_faces(n)%face_direction) + case (1); this%Hx(i,j,k) = this%conformal_surface_faces(n)%lower_h + case (2); this%Hy(i,j,k) = this%conformal_surface_faces(n)%lower_h + case (3); this%Hz(i,j,k) = this%conformal_surface_faces(n)%lower_h + end select + end do + end subroutine solver_advanceConformalH + + subroutine initializeConformalSurfaceStates(this) + class(solver_t) :: this + type(conformal_surface_face_state_t), allocatable :: states(:), enlarged(:) + integer :: medium, feature, split_direction + type(face_t) :: face + real(kind=rkind) :: lower_fraction + + allocate(states(0)) + do medium = 1, this%sgg%NumMedia + if (.not. this%sgg%Med(medium)%Is%ConformalPEC .or. & + .not. this%sgg%Med(medium)%Is%Surface) cycle + if (.not. allocated(this%sgg%Med(medium)%ConformalFace)) cycle + do feature = 1, size(this%sgg%Med(medium)%ConformalFace) + face = this%sgg%Med(medium)%ConformalFace(feature) + call findSurfaceFaceSplit(this%sgg, face, split_direction, lower_fraction) + if (split_direction == 0) cycle + if (lower_fraction <= 1.0e-5_RKIND .or. lower_fraction >= 1.0_RKIND-1.0e-5_RKIND) cycle + if (surfaceStateExists(states, face%cell, face%direction)) cycle + allocate(enlarged(size(states)+1)) + if (size(states) > 0) enlarged(1:size(states)) = states + enlarged(size(enlarged))%cell = face%cell + enlarged(size(enlarged))%face_direction = face%direction + enlarged(size(enlarged))%split_direction = split_direction + enlarged(size(enlarged))%lower_fraction = lower_fraction + call move_alloc(enlarged, states) + end do + end do + call move_alloc(states, this%conformal_surface_faces) + end subroutine initializeConformalSurfaceStates + + subroutine findSurfaceFaceSplit(sgg, face, split_direction, lower_fraction) + type(SGGFDTDINFO_t), intent(in) :: sgg + type(face_t), intent(in) :: face + integer, intent(out) :: split_direction + real(kind=rkind), intent(out) :: lower_fraction + integer :: medium, feature, candidate + real(kind=rkind) :: candidate_fraction + + split_direction = 0 + lower_fraction = 0.0_RKIND + do medium = 1, sgg%NumMedia + if (.not. sgg%Med(medium)%Is%ConformalPEC .or. .not. sgg%Med(medium)%Is%Surface) cycle + if (.not. allocated(sgg%Med(medium)%ConformalEdge)) cycle + do feature = 1, size(sgg%Med(medium)%ConformalEdge) + candidate = sgg%Med(medium)%ConformalEdge(feature)%direction + if (candidate == face%direction) cycle + if (.not. edgeBoundsFace(sgg%Med(medium)%ConformalEdge(feature), face)) cycle + candidate_fraction = edgeIntersectionFraction(sgg%Med(medium)%ConformalEdge(feature)) + if (candidate_fraction <= 0.0_RKIND) cycle + if (split_direction /= 0 .and. split_direction /= candidate) then + split_direction = 0 + lower_fraction = 0.0_RKIND + return + end if + if (split_direction == candidate .and. lower_fraction > 0.0_RKIND .and. & + abs(lower_fraction-candidate_fraction) > 1.0e-5_RKIND) then + split_direction = 0 + lower_fraction = 0.0_RKIND + return + end if + split_direction = candidate + lower_fraction = candidate_fraction + end do + end do + end subroutine findSurfaceFaceSplit + + logical function edgeBoundsFace(edge, face) + type(edge_t), intent(in) :: edge + type(face_t), intent(in) :: face + integer :: remaining_direction + edgeBoundsFace = .false. + if (edge%direction == face%direction) return + remaining_direction = 6 - edge%direction - face%direction + if (edge%cell(face%direction) /= face%cell(face%direction)) return + if (edge%cell(edge%direction) /= face%cell(edge%direction)) return + edgeBoundsFace = edge%cell(remaining_direction) == face%cell(remaining_direction) .or. & + edge%cell(remaining_direction) == face%cell(remaining_direction)+1 + end function edgeBoundsFace + + real(kind=rkind) function edgeIntersectionFraction(edge) result(fraction) + type(edge_t), intent(in) :: edge + real(kind=rkind) :: first_fraction, second_fraction + first_fraction = edge%material_coords(1)-floor(edge%material_coords(1)) + second_fraction = edge%material_coords(2)-floor(edge%material_coords(2)) + fraction = 0.0_RKIND + if (first_fraction > 1.0e-5_RKIND) fraction = first_fraction + if (second_fraction > 1.0e-5_RKIND) fraction = second_fraction + end function edgeIntersectionFraction + + logical function surfaceStateExists(states, cell, direction) + type(conformal_surface_face_state_t), dimension(:), intent(in) :: states + integer(kind=4), dimension(3), intent(in) :: cell + integer, intent(in) :: direction + integer :: n + surfaceStateExists = .false. + do n = 1, size(states) + if (states(n)%face_direction == direction .and. all(states(n)%cell == cell)) then + surfaceStateExists = .true. + return + end if + end do + end function surfaceStateExists + + real(kind=rkind) function leviCivita(first, second, third) result(value) + integer, intent(in) :: first, second, third + if (first == second .or. second == third .or. first == third) then + value = 0.0_RKIND + else if ((first == 1 .and. second == 2 .and. third == 3) .or. & + (first == 2 .and. second == 3 .and. third == 1) .or. & + (first == 3 .and. second == 1 .and. third == 2)) then + value = 1.0_RKIND + else + value = -1.0_RKIND + end if + end function leviCivita subroutine solver_advanceEDispersiveE(this) class(solver_t) :: this @@ -2791,7 +2753,7 @@ subroutine solver_advancePlaneWaveH(this) this%Idxe, this%Idye, this%Idze, & this%Hx, this%Hy, this%Hz, & this%still_planewave_time) - endif + end if end subroutine subroutine solver_advanceNodalE(this) @@ -2826,7 +2788,7 @@ subroutine solver_advanceAnisotropicE(this) subroutine solver_advanceAnisotropicH(this) class(solver_t) :: this - IF (this%thereAre%Anisotropic) call AdvanceAnisotropicH(this%sgg%alloc, this%ex, this%ey, this%ez, & + if (this%thereAre%Anisotropic) call AdvanceAnisotropicH(this%sgg%alloc, this%ex, this%ey, this%ez, & this%hx, this%hy, this%hz, & this%Idxe, this%Idye, this%Idze, & this%Idxh, this%Idyh, this%Idzh) @@ -2862,11 +2824,11 @@ subroutine solver_advancePMLE(this) class (solver_t) :: this If (this%thereAre%PMLbodies) then !waveport absorbers call AdvancePMLbodyE() - endif + end if If (this%thereAre%PMLBorders) then call AdvanceelectricCPML(this%sgg%numMedia, this%bounds,this%media%sggMiEx,this%media%sggMiEy,this%media%sggMiEz, & this%g%G2, this%Ex, this%Ey, this%Ez, this%Hx, this%Hy, this%Hz) - endif + end if end subroutine subroutine solver_advancesgbcE(this) @@ -2886,33 +2848,31 @@ subroutine solver_advanceWiresE(this) class(solver_t) :: this character(len=bufsize) :: buff +#ifdef CompileWithMTLN + call AdvanceWiresE_mtln(this%sgg,this%Idxh,this%Idyh,this%Idzh,this%eps0,this%mu0) +#else + if (( (trim(adjustl(this%control%wiresflavor))=='holland') .or. & - (trim(adjustl(this%control%wiresflavor))=='transition')) .and. .not. this%control%use_mtln_wires) then - IF (this%thereAre%Wires) then + (trim(adjustl(this%control%wiresflavor))=='transition'))) then + if (this%thereAre%Wires) then if (this%control%wirecrank) then call AdvanceWiresEcrank(this%sgg, this%n, this%control%layoutnumber,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic) else - call AdvanceWiresE(this%sgg,this%n, this%control%layoutnumber,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic,this%control%experimentalVideal,this%control%wirethickness,this%eps0,this%mu0) - endif - endif - endif + call AdvanceWiresE(this%sgg,this%n, this%control%layoutnumber,this%control%wiresflavor,this%control%simu_devia,this%control%stochastic,this%control%experimentalVideal,this%control%wirethickness,this%eps0,this%mu0) + end if + end if + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then - IF (this%thereAre%Wires) call AdvanceWiresE_Berenger(this%sgg,this%n) - endif + if (this%thereAre%Wires) call AdvanceWiresE_Berenger(this%sgg,this%n) + end if #endif #ifdef CompileWithSlantedWires if((trim(adjustl(this%control%wiresflavor))=='slanted').or.(trim(adjustl(this%control%wiresflavor))=='semistructured')) then call AdvanceWiresE_Slanted(this%sgg,this%n) - endif + end if #endif - if (this%control%use_mtln_wires) then -#ifdef CompileWithMTLN - call AdvanceWiresE_mtln(this%sgg,this%Idxh,this%Idyh,this%Idzh,this%eps0,this%mu0) -#else - write(buff,'(a)') 'WIR_ERROR: Executable was not compiled with MTLN modules.' #endif - end if end subroutine @@ -2920,16 +2880,16 @@ subroutine solver_advancewiresH(this) class(solver_t) :: this if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then - IF (this%thereAre%Wires) then + if (this%thereAre%Wires) then if (this%control%wirecrank) then continue else call AdvanceWiresH(this%sgg, this%n, this%control%layoutnumber, & this%control%wiresflavor, this%control%simu_devia, this%control%stochastic, & this%control%experimentalVideal, this%control%wirethickness, this%eps0, this%mu0) - endif - endif - endif + end if + end if + end if end subroutine @@ -2948,25 +2908,25 @@ subroutine solver_advanceMagneticMUR(this) if (this%control%num_procs>1) then call MPI_Barrier(SUBCOMM_MPI,ierr) call FlushMPI_H_Cray - endif - endif + end if + end if #endif - endif + end if end subroutine subroutine solver_end(this) class(solver_t) :: this - real(kind=rkind), pointer, dimension (:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz - real(kind=rkind), pointer, dimension (:) :: dxe, dye, dze, dxh, dyh, dzh + real(kind=rkind), pointer, dimension(:,:,:) :: Ex, Ey, Ez, Hx, Hy, Hz + real(kind=rkind), pointer, dimension(:) :: dxe, dye, dze, dxh, dyh, dzh real(kind=rkind_tiempo) :: at - integer (kind=4) :: ndummy + integer(kind=4) :: ndummy logical :: dummylog, somethingdone, newsomethingdone character(len=bufsize) :: dubuf #ifdef CompileWithMPI - integer (kind=4) :: ierr + integer(kind=4) :: ierr #endif Ex => this%Ex; Ey => this%Ey; Ez => this%Ez; Hx => this%Hx; Hy => this%Hy; Hz => this%Hz; dxe => this%dxe; dye => this%dye; dze => this%dze; dxh => this%dxh; dyh => this%dyh; dzh => this%dzh @@ -2974,10 +2934,6 @@ subroutine solver_end(this) #ifdef CompileWithProfiling call nvtxEndRange #endif - -#ifdef CompileWithConformal - if(this%control%input_conformal_flag) call conformal_final_simulation (conf_timeSteps, this%n) -#endif #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -3005,26 +2961,26 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - endif + end if if (this%thereAre%FarFields) then write(dubuf,'(a,i9)') ' INIT FINAL OBSERVATION DATA FLUSHING and Near-to-Far field n= ',this%n else write(dubuf,'(a,i9)') ' INIT FINAL OBSERVATION DATA FLUSHING n= ',this%n - endif + end if call print11(this%control%layoutnumber,SEPARADOR//separador//separador) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) - if (this%thereAre%Observation) THEN + if (this%thereAre%Observation) then call FlushObservationFiles(this%sgg,this%ini_save, this%n,this%control%layoutnumber, this%control%num_procs, dxe, dye, dze, dxh, dyh, dzh,this%bounds,this%control%singlefilewrite,this%control%facesNF2FF,.TRUE.) call CloseObservationFiles(this%sgg,this%control%layoutnumber,this%control%num_procs,this%control%singlefilewrite,this%initialtimestep,this%lastexecutedtime,this%control%resume) !dump the remaining to disk - endif + end if if (this%thereAre%FarFields) then write(dubuf,'(a,i9)') ' DONE FINAL OBSERVATION DATA FLUSHED and Near-to-Far field n= ',this%n else write(dubuf,'(a,i9)') ' DONE FINAL OBSERVATION DATA FLUSHED n= ',this%n - endif + end if call print11(this%control%layoutnumber,SEPARADOR//separador//separador) call print11(this%control%layoutnumber,dubuf) call print11(this%control%layoutnumber,SEPARADOR//separador//separador) @@ -3056,7 +3012,7 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif + end if write(dubuf,*)'INIT FINAL FLUSHING .vtk if any.' call print11(this%control%layoutnumber,dubuf) @@ -3081,7 +3037,7 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif + end if write(dubuf,*)'INIT FINAL FLUSHING .xdmf if any.' call print11(this%control%layoutnumber,dubuf) @@ -3106,7 +3062,7 @@ subroutine solver_end(this) call print11(this%control%layoutnumber,dubuf) write(dubuf,*) SEPARADOR//separador//separador call print11(this%control%layoutnumber,dubuf) - endif + end if #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,ierr) @@ -3126,11 +3082,11 @@ subroutine solver_end(this) !las sggmixx se desctruyen el en main pq se alocatean alli subroutine Destroy_All_exceptSGGMxx(sgg,Ex, Ey, Ez, Hx, Hy, Hz,G1,G2,GM1,GM2,dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh,thereare,wiresflavor ) - character (len=*) , intent(in) :: wiresflavor - type (logic_control_t), intent(IN) :: thereare - type (SGGFDTDINFO_t), intent(INOUT) :: sgg - REAL (KIND=RKIND), intent(INOUT) , pointer, dimension ( : , : , : ) :: Ex,Ey,Ez,Hx,Hy,Hz - REAL (KIND=RKIND), intent(INOUT) , pointer, dimension ( : ) :: G1,G2,GM1,GM2,dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh + character(len=*) , intent(in) :: wiresflavor + type(logic_control_t), intent(in) :: thereare + type(SGGFDTDINFO_t), intent(INOUT) :: sgg + real(kind=RKIND), intent(INOUT) , pointer, dimension( : , : , : ) :: Ex,Ey,Ez,Hx,Hy,Hz + real(kind=RKIND), intent(INOUT) , pointer, dimension( : ) :: G1,G2,GM1,GM2,dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh call DestroyObservation(sgg) Call DestroyNodal(sgg) @@ -3139,33 +3095,33 @@ subroutine Destroy_All_exceptSGGMxx(sgg,Ex, Ey, Ez, Hx, Hy, Hz,G1,G2,GM1,GM2,dxe call DestroyMultiports(sgg) #endif - call destroysgbcs(sgg) !!todos deben destruir pq alocatean en funcion de sgg no de si contienen estos materiales que lo controla therearesgbcs. Lo que habia era IF ((this%thereAre%sgbcs).and.(sgbc)) + call destroysgbcs(sgg) !!todos deben destruir pq alocatean en funcion de sgg no de si contienen estos materiales que lo controla therearesgbcs. Lo que habia era if ((this%thereAre%sgbcs).and.(sgbc)) call destroyLumped(sgg) call DestroyEDispersives(sgg) call DestroyMDispersives(sgg) if ((trim(adjustl(wiresflavor))=='holland') .or. & (trim(adjustl(wiresflavor))=='transition')) then call DestroyWires(sgg) - endif + end if #ifdef CompileWithBerengerWires if (trim(adjustl(wiresflavor))=='berenger') then call DestroyWires_Berenger(sgg) - endif + end if #endif #ifdef CompileWithSlantedWires if((trim(adjustl(wiresflavor))=='slanted').or.(trim(adjustl(wiresflavor))=='semistructured')) then call DestroyWires_Slanted(sgg) - endif + end if #endif call DestroyCPMLBorders call DestroyPMLbodies(sgg) call DestroyMURBorders !Destroy the remaining - deallocate (sgg%Med,sgg%LineX,sgg%LineY,sgg%LineZ,sgg%DX,sgg%DY,sgg%DZ,sgg%tiempo) - deallocate (G1,G2,GM1,GM2) - deallocate (Ex, Ey, Ez, Hx, Hy, Hz) - deallocate (dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh ) + deallocate(sgg%Med,sgg%LineX,sgg%LineY,sgg%LineZ,sgg%DX,sgg%DY,sgg%DZ,sgg%tiempo) + deallocate(G1,G2,GM1,GM2) + deallocate(Ex, Ey, Ez, Hx, Hy, Hz) + deallocate(dxe ,dye ,dze ,Idxe ,Idye ,Idze ,dxh ,dyh ,dzh ,Idxh ,Idyh ,Idzh ) return end subroutine Destroy_All_exceptSGGMxx @@ -3179,34 +3135,34 @@ subroutine destroy_and_deallocate(this) call DestroyMultiports(this%sgg) #endif - call destroysgbcs(this%sgg) !!todos deben destruir pq alocatean en funcion de this%sgg no de si contienen estos materiales que lo controla therearesgbcs. Lo que habia era IF ((this%thereAre%sgbcs).and.(sgbc)) + call destroysgbcs(this%sgg) !!todos deben destruir pq alocatean en funcion de this%sgg no de si contienen estos materiales que lo controla therearesgbcs. Lo que habia era if ((this%thereAre%sgbcs).and.(sgbc)) call destroyLumped(this%sgg) call DestroyEDispersives(this%sgg) call DestroyMDispersives(this%sgg) if ((trim(adjustl(this%control%wiresflavor))=='holland') .or. & (trim(adjustl(this%control%wiresflavor))=='transition')) then call DestroyWires(this%sgg) - endif + end if #ifdef CompileWithBerengerWires if (trim(adjustl(this%control%wiresflavor))=='berenger') then call DestroyWires_Berenger(this%sgg) - endif + end if #endif #ifdef CompileWithSlantedWires if((trim(adjustl(this%control%wiresflavor))=='slanted').or.(trim(adjustl(this%control%wiresflavor))=='semistructured')) then call DestroyWires_Slanted(this%sgg) - endif + end if #endif call DestroyCPMLBorders call DestroyPMLbodies(this%sgg) call DestroyMURBorders !Destroy the remaining - deallocate (this%sgg%Med,this%sgg%LineX,this%sgg%LineY,this%sgg%LineZ,this%sgg%DX,this%sgg%DY,this%sgg%DZ,this%sgg%tiempo) - call this%g%destroy() - if (allocated(this%conformal_surface_faces)) deallocate(this%conformal_surface_faces) - deallocate (this%Ex, this%Ey, this%Ez, this%Hx, this%Hy, this%Hz) - deallocate (this%dxe, this%dye, this%dze, this%Idxe, this%Idye, this%Idze, this%dxh, this%dyh, this%dzh, this%Idxh, this%Idyh, this%Idzh) + if (allocated(this%conformal_surface_faces)) deallocate(this%conformal_surface_faces) + deallocate(this%sgg%Med,this%sgg%LineX,this%sgg%LineY,this%sgg%LineZ,this%sgg%DX,this%sgg%DY,this%sgg%DZ,this%sgg%tiempo) + call this%g%destroy() + deallocate(this%Ex, this%Ey, this%Ez, this%Hx, this%Hy, this%Hz) + deallocate(this%dxe, this%dye, this%dze, this%Idxe, this%Idye, this%Idze, this%dxh, this%dyh, this%dzh, this%Idxh, this%Idyh, this%Idzh) return end subroutine destroy_and_deallocate From b91f0d78dfb6f4a760f56d5c42a5aec2331c389d Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Fri, 21 Aug 2026 18:38:18 +0200 Subject: [PATCH 33/35] Refactor code formatting and improve readability in various scripts - Adjusted comments for consistency in `conformal_surface_sphere_prepost.py` and `conformal_thin_strip_prepost.py`. - Removed unnecessary blank lines in JSON configuration files `pw-with-periodic.fdtd.json` and `conformal.fdtd.json`. - Ensured consistent spacing in material definitions within `conformal.fdtd.json`. --- doc/fdtdjson.md | 108 +- src_conformal/CMakeLists.txt | 6 +- src_conformal/conformal.F90 | 174 +-- src_conformal/conformal_timestepping.F90 | 46 +- src_json_parser/smbjson.F90 | 256 ++-- src_json_parser/smbjson_labels.F90 | 38 +- src_main_pub/fdetypes.F90 | 101 +- src_main_pub/healer.F90 | 67 +- src_main_pub/nfde_types.F90 | 53 +- src_main_pub/preprocess_geom.F90 | 92 +- src_main_pub/semba_fdtd.F90 | 198 +-- test/CMakeLists.txt | 2 +- test/conformal/test_filling.F90 | 38 +- test/conformal/test_geometry.F90 | 46 +- test/pyWrapper/test_full_system.py | 296 +++-- test/pyWrapper/test_integration.py | 64 +- test/smbjson/smbjson_testingTools.F90 | 16 +- test/smbjson/test_cells.F90 | 1 - test/smbjson/test_parser.F90 | 11 +- .../Conductors_50ohm_terminals.fdtd.json | 108 +- ...nductors_Holland_50ohm_terminals.fdtd.json | 108 +- .../conformal_sphere_1mm_rcs_delta.fdtd.json | 18 +- ...mal_impedance_cylinder_staircase.fdtd.json | 1132 ++++++++--------- .../conformal_surface_sphere_prepost.py | 5 +- .../conformal_thin_strip_prepost.py | 2 +- .../planewave/pw-with-periodic.fdtd.json | 2 +- testData/input_examples/conformal.fdtd.json | 8 +- 27 files changed, 1502 insertions(+), 1494 deletions(-) diff --git a/doc/fdtdjson.md b/doc/fdtdjson.md index 6ebb5cb7e..516e80952 100644 --- a/doc/fdtdjson.md +++ b/doc/fdtdjson.md @@ -1,7 +1,7 @@ # The FDTD-JSON format This format aims to provide a way to input data for a full FDTD simulation. -Being in JSON, it can be easily navigated with most text editors, such as Visual Studio Code or Notepad++. +Being in JSON, it can be easily navigated with most text editors, such as Visual Studio Code or Notepad++. There are also multiple tools to read and write them. This document assumes that you are familiar with the basic JSON notation, a brief explanation on this notation can be found [here](https://www.w3schools.com/js/js_json_syntax.asp). @@ -35,7 +35,7 @@ This object must always be present and contains general information regarding th Additionally, it may contain the following optional entry: + `` : A boolean indicating whether the problem is a pure MTLN problem and will solved using only the MTLN solver. If it is not present, its default value is `false` -+ `` : A string with flags. Keep in mind that flags passed by console have higher priority. ++ `` : A string with flags. Keep in mind that flags passed by console have higher priority. **Example:** @@ -54,7 +54,7 @@ This object sets the background electromagnetic media properties to an specified + `[absolutePermeability]`: a real number indicating the value of background permeability. Defaults to the value specified in MU_VACUUM at [fdtypes.F90](../src_main_pub/fdetypes.F90). ### `[boundary]` -This specifies the boundaries which will be used to terminate the computational domain. +This specifies the boundaries which will be used to terminate the computational domain. If `boundary` is not present it defaults to a `mur` absorbing condition in all bounds. The entries within `boundary` are objects labeled with the place where they will be applied: @@ -65,7 +65,7 @@ These objects must contain a `` label which can be: + `pec` for perfectly electric conducting termination. + `pmc` for perfectly magnetic conducting termination. -+ `periodic` for periodic boundary conditions. Must be paired with the opposite side. ++ `periodic` for periodic boundary conditions. Must be paired with the opposite side. + `mur` for Mur's first order absorbing boundary condition. + `pml` for perfectly matched layer termination. If this `type` is selected, it must also contain: @@ -79,7 +79,7 @@ These objects must contain a `` label which can be: "boundary": { "all": { "type": "pml", - "layers": 6, + "layers": 6, "order": 2.0, "reflection": 0.001 } @@ -92,9 +92,9 @@ All the geometrical information of the simulation case is exclusively stored by ```json "mesh": { - "grid": { ... }, + "grid": { ... }, "coordinates": [ ... ], - "elements": [ ... ] + "elements": [ ... ] } ``` @@ -102,13 +102,13 @@ All the geometrical information of the simulation case is exclusively stored by The `grid` object represents a collection of rectangular cuboids or *cells* which tessellate the space to form a structured mesh. This object is defined with the following entries: - `` is an array of three positive integers which indicate the number of cells in each Cartesian direction. - `` is an object which contains three arrays, labeled with ``, `` and `` which represent the cell sizes, expressed in meters, in that direction. Each array may contain a single real to define a [regular grid](https://en.wikipedia.org/wiki/Regular_grid); or, alternatively, a number of reals equal to the number of cells to define a [rectilinear grid](https://en.wikipedia.org/wiki/Regular_grid). -- `[origin]` is an array of three reals marking the position of the lowest vertex of the $(0, 0, 0)$ cell. Defaults to `[0.0, 0.0, 0.0]`. +- `[origin]` is an array of three reals marking the position of the lowest vertex of the $(0, 0, 0)$ cell. Defaults to `[0.0, 0.0, 0.0]`. The following example describes a regular grid with $20$, $20$, and $22$ cells in the $x$, $y$, and $z$ directions respectively. ```json "mesh": { "grid": { - "numberOfCells": [20, 20, 22], + "numberOfCells": [20, 20, 22], "steps": { "x": [0.1], "y": [0.1], "z": [0.1] } } } @@ -128,7 +128,7 @@ This is an array of objects which represent Cartesian coordinates within the gri ```json "mesh": { "grid": { - "numberOfCells": [8, 5, 1], + "numberOfCells": [8, 5, 1], "steps": { "x": [0.1], "y": [0.1], "z": [0.1] } } "coordinates": [ @@ -143,7 +143,7 @@ This is an array of objects which represent Cartesian coordinates within the gri The `elements` entry contains an array of JSON objects, each of which represents a geometrical entity. Within the context of this format specification, an *element* can be a relatively simple entity such as `node` or a `polyline`, but it can also be a much more complex geometrical entity such as a `cell`. An *element objects* must contain the entries + `` formed by an integer which uniquely identifies it within the `elements` array. -+ `` which can be one of the following: ++ `` which can be one of the following: + `node`, representing a point in space. Elements with this type include a `` entry which is an array of a single integer representing the `id` of a coordinate and which must exist in the within the `mesh` `coordinates` list. + `polyline`, representing an oriented collection of segments. It must contain a list `` with at least two coordinates. @@ -170,7 +170,7 @@ Below there is an example of a mesh object which includes several types of eleme {"id": 1, "type": "node", "coordinateIds": [2]}, {"id": 2, "type": "polyline", "coordinateIds": [1, 2, 3] }, {"id": 3, "type": "cell", "intervals": [ [ [1, 1, 1], [19, 19, 21] ] ] } - {"id": 4, "type": "conformal", "subtype": "surface", + {"id": 4, "type": "conformal", "subtype": "surface", "intervals": [ [ [1, 1, 1], [19, 19, 1] ] ], "triangles" : [ [1,2,3] ] } ] } @@ -187,17 +187,17 @@ An interval allows specifying regions within the grid which can be a point, an o + An *oriented line* is defined when the interval has the same initial and ending values in all directions except one, for instance $a_x \neq b_x$. In this case there are two possibilities: + when $(b_x - a_x) > 0$, the line is oriented towards $+\hat{x}$. - + when $(b_x - a_x) < 0$, the line is oriented towards $-\hat{x}$. + + when $(b_x - a_x) < 0$, the line is oriented towards $-\hat{x}$. + An *oriented surface* is defined when one initial and ending value is the same and the other two are different, e.g. $a_x = b_x$, $a_y \neq b_y$, $a_z \neq b_z$. In this case there are four possibilities: - + + when the $(b_y - a_y) > 0$ and $(b_z - a_z) > 0$, the surface normal is assumed to be oriented towards $+\hat{x}$. + when the $(b_y - a_y) < 0$ and $(b_z - a_z) < 0$, the surface normal is assumed to be oriented towards $-\hat{x}$. + The other two cases, in which there is a mix of positive and negative signs, are undefined. + A *volume* is defined when each component of $\mathbf{a}$ is strictly smaller than the corresponding component in $\mathbf{b}$ for each direction, i.e. $a_x < b_x$, $a_y < b_y$, and $a_z < b_z$. The rest of the cases in which all numbers are different but not necessarily smaller are undefined. -**Example:** The following figure represents a grid with the numbers of the cells marked in light gray. The third dimension is ignored for clarity. There are four `cell` elements. +**Example:** The following figure represents a grid with the numbers of the cells marked in light gray. The third dimension is ignored for clarity. There are four `cell` elements. + The first one represents a single rectangular surface with its normal oriented towards the $+\hat{z}$ direction (light green). + The second one is formed by an square surface oriented towards the $-\hat{z}$ direction (light red) and a line oriented towards $-\hat{x}$. @@ -209,7 +209,7 @@ An interval allows specifying regions within the grid which can be a point, an o ```json "mesh": { "grid": { - "numberOfCells": [8, 5, 1], + "numberOfCells": [8, 5, 1], "steps": { "x": [0.1], "y": [0.1], "z": [0.1] } } "elements": [ @@ -224,7 +224,7 @@ An interval allows specifying regions within the grid which can be a point, an o ``` ##### Triangles -Each triangle is a list of three ``, representing the vertices of the triangle. Vertices have to be oriented so the normal of each triangle points outwards the volume. +Each triangle is a list of three ``, representing the vertices of the triangle. Vertices have to be oriented so the normal of each triangle points outwards the volume. ## `[materials]` This entry is an array formed by all the physical models contained in the simulation. Each object within the array must contain: @@ -258,11 +258,11 @@ A `material` with `type` `isotropic` represents an isotropic material with const ```json { "name": "teflon", - "id": 1, + "id": 1, "type": "isotropic", "relativePermittivity": 2.5, "electricConducitivity": 1e-6 -} +} ``` ### `lumped` @@ -286,13 +286,13 @@ Defined by: ```json { "name": "100_ohm_resistor", - "id": 1, + "id": 1, "type": "lumped", "model": "resistor", "resistance": 100, "startingTime": 0.0, "endTime": 1.0 -} +} ``` #### `inductor` model @@ -352,8 +352,8 @@ A `wire`, or *thin wire*, represents an electrically conducting wire-like struct These structures are solved by an algorithm similar to the one described in: ``` -R. Holland and L. Simpson, -"Finite-Difference Analysis of EMP Coupling to Thin Struts and Wires," +R. Holland and L. Simpson, +"Finite-Difference Analysis of EMP Coupling to Thin Struts and Wires," IEEE Transactions on Electromagnetic Compatibility, vol. EMC-23, no. 2, pp. 88-97, May 1981, doi: 10.1109/TEMC.1981.303899. ``` @@ -386,7 +386,7 @@ A `shieldedMultiwire`, models $N+1$ electrical wires inside a bundled. The volta `shieldedMultiwire` materials are assumed to be contained within an `unshieldedMultiwire` or another `shieldedMultiwire` which is the external domain and is used as voltage reference. Materials of type `shieldedMultiwire` and `unshieldedMultiwre` can only be defined if the compilation flag for MTLN was ON, i.e. `SEMBA_FDTD_ENABLE_MTLN = ON`. Otherwise, the program execution will fail at runtime. They must contain the following entries: -+ `` and `` which must be matrices with a size $N \times N$. If the number of wires is equal to $1$, this property must be a $1 \times 1$ matrix, e.g `[[1e-7]]` ++ `` and `` which must be matrices with a size $N \times N$. If the number of wires is equal to $1$, this property must be a $1 \times 1$ matrix, e.g `[[1e-7]]` + `[resistancePerMeter]` and `[conductancePerMeter]` which must be arrays of size $N$. Defaults to zero. If the number of wires is equal to $1$, must be an array of size $1$, e.g. `[50]`. + `[transferImpedancePerMeter]` which represents the coupling with the external domain, described below. If not present, it defaults to zero, i.e. perfect shielding. @@ -438,13 +438,13 @@ They must contain the following entries: The field reconstruction objects contains information necessary to calculate the in-cell parameters for an `unshieldedMultiwire` with $N$ conductors. The `electric` and `magnetic`potentials are used to compute the in-cell capacitances and in-cell inductances, respectively. Each contains information to perform a multipolar expansion based on - Tsogtgerel Gantumur. Multipole Expansions in the plane. 2016, lecture notes. + Tsogtgerel Gantumur. Multipole Expansions in the plane. 2016, lecture notes. and which must contain + `` is an array of size $N$ indicating the potentials for each conductor. The $n$-th entry of this array should be equal to $1$, for the active conductor, and less than one for the rest (floating conductors). -+ `` which is an array of $P$ pairs of real numbers $(a_p, b_p)$, which are the pole coefficients of the field expansion when the $n$-th conductor is active. -+ `` is an pair of real numbers indicating the place in which the dipole moment is zero, a concept similar to the _center of charge_. ++ `` which is an array of $P$ pairs of real numbers $(a_p, b_p)$, which are the pole coefficients of the field expansion when the $n$-th conductor is active. ++ `` is an pair of real numbers indicating the place in which the dipole moment is zero, a concept similar to the _center of charge_. + `` is the potential averaged within the `innerRegionBox`. The multipolar expansion only valid outside the inner region. @@ -460,27 +460,27 @@ Each entry in `terminations` is specified by a `type` + `short` if the wire is short-circuited with another wire or with any surface which might be present. + `open` if the wire does not end in an ohmic contact with any other structure. + Different configurations of passive circuit elements R, L, and C can be defined: - + `series` (for RLC series circuits), - + `parallel` (for RLC parallel circuits), - + `RsLCp` (LC parallel in series with R), - + `RLsCp` (RL series in parallel with C), - + `LsRCp` (RC parallel in series with L), + + `series` (for RLC series circuits), + + `parallel` (for RLC parallel circuits), + + `RsLCp` (LC parallel in series with R), + + `RLsCp` (RL series in parallel with C), + + `LsRCp` (RC parallel in series with L), + `CsLRp` (LR parallel in parallel with C), - + `RCsLp` (RC series in parallel with L), and - + `LCsRp` (LC series in parallel with R). + + `RCsLp` (RC series in parallel with L), and + + `LCsRp` (LC series in parallel with R). The values are defined defined as follows: + `[resistance]` which defaults to `0.0`, + `[inductance]` which defaults to `0.0`, + `[capacitance]` which defaults to `1e22`. + 2-terminals SPICE models can used in a termination. In this case the `type` is `circuit`, and is defined with: - + `[file]` which is the name of the file where the SPICE model is defined + + `[file]` which is the name of the file where the SPICE model is defined + `[name]` which is the name of the subcircuit as defined inside `file` - + `[terminal]` which is the number of the subcircuit terminals the termination is connected to. It can be equal to 1 or 2, depending on the side of the SPICE model the termination is connected to. By default it equals 1, meaning that the termination is connected to the first external node in the netlist definition + + `[terminal]` which is the number of the subcircuit terminals the termination is connected to. It can be equal to 1 or 2, depending on the side of the SPICE model the termination is connected to. By default it equals 1, meaning that the termination is connected to the first external node in the netlist definition + N-terminals SPICE models can be used to connect a series of terminations to a subcircuit. The `type` is `network`, and is defined with: - + `[file]` which is the name of the file where the SPICE model is defined + + `[file]` which is the name of the file where the SPICE model is defined + `[name]` which is the name of the subcircuit as defined inside `file` - + `[node]` which is the subcircuit node the termination is connected to. Generally, subcircuits will have their terminals external nodes named in non-numerical way. `[node]` is an integer that refers to the position of the node in the netlist + + `[node]` which is the subcircuit node the termination is connected to. Generally, subcircuits will have their terminals external nodes named in non-numerical way. `[node]` is an integer that refers to the position of the node in the netlist **Example:** @@ -494,7 +494,7 @@ The values are defined defined as follows: ``` #### `SPICE terminations` -There are two types of SPICE terminations, `circuit` and `network`. `circuit` terminations are equivalent to 2-terminal networks. The netlist representing the connection can be composed of an arbitrary number of components, but it must have only two external nodes. +There are two types of SPICE terminations, `circuit` and `network`. `circuit` terminations are equivalent to 2-terminal networks. The netlist representing the connection can be composed of an arbitrary number of components, but it must have only two external nodes. **Example:** @@ -515,7 +515,7 @@ There are two types of SPICE terminations, `circuit` and `network`. `circuit` te { "name" : "NetworkTerminal", "id" : 5, - "type" : "terminal", + "type" : "terminal", "terminations" : [ {"type": "network", "file": "ListOfComponents.lib", "name": "Component_2", "node" : 1}, {"type": "network", "file": "ListOfComponents.lib", "name": "Component_2", "node" : 2}, {"type": "network", "file": "ListOfComponents.lib", "name": "Component_2", "node" : 3} ] @@ -529,7 +529,7 @@ In this case, the three wires of a e-conductor cable are connected to the nodes The `connector` represents the physical connection of a bundle to a structure. `connector` assigns properties to the initial or last segment of a `wire`, a `shieldedMultiwire` or an `unshieldedMultiwire`. The `connector` can have the following properties: + `[resistances]`, an array of real numbers which will be converted to resistances per unit length and will replace the resistancePerMeter of that segment. -+ `[transferImpedancesPerMeter]`, an array of [transferImpedancePerMeter], as described in the [shieldedMultiwire](#shieldedMultiwire) section. ++ `[transferImpedancesPerMeter]`, an array of [transferImpedancePerMeter], as described in the [shieldedMultiwire](#shieldedMultiwire) section. The most common situation will be having the connector of a shielded bundle. In that case, the arrays have a single component. However, the `connector` can describe the connections of a (unshielded) bundle of $N$ shielded conductors. In that case, the `connector` has to describe the connections, if any, of the $N$ shielded conductors. @@ -621,7 +621,7 @@ Records a vector field a single position referenced by `elementIds` which must c #### `wire` -Records a scalar field at a single position referenced by `elementIds`. `elementIds` must contain a single `id` referencing an element of type `node`. Additionally, this `node` must point to a `coordinateId` belonging to at least one `polyline`. +Records a scalar field at a single position referenced by `elementIds`. `elementIds` must contain a single `id` referencing an element of type `node`. Additionally, this `node` must point to a `coordinateId` belonging to at least one `polyline`. If the node's `coordinateId` is shared by more than one `polyline` a probe will be defined for each one of them The `[field]` can be `voltage`, `current` or `charge` (defaults to `current`). Voltage probes are properly defined only when used placed on `shieldedMultiwires`. The voltage on a conductor will be referred to the shield surrounding that conductor. In an unshielded wire, there is not a well defined reference, and thus the probe is not reliable. Charge probes are implemented only for wires not treated with the MTL module. @@ -672,7 +672,7 @@ In this example `elementId` points to a volume element, therefore `direction` mu One important aspect to keep in mind when working with `bulkCurrent` with `electric field type` arises from the fact that to measure the electric current it is necessary to calculate the closed path integral of the magnetic field. However, the magnetic field is defined by normals located at the center of each cell faced. -In consequence, the code internally shifts the defined `bulkCurrent`, causing a **half-cell offset**. +In consequence, the code internally shifts the defined `bulkCurrent`, causing a **half-cell offset**. In the case of surfaces, the coordinates **perpendicular** to the current flowing through the surface experience a **negative offset**, as shown in the figure below: ![Negative offset](fig/grid-negativeOffSet.svg) @@ -700,8 +700,8 @@ A `line` probe computes the electric field line integral along a given `polyline #### `farField` -Probes of type `farField` perform a near to far field transformation of the electric and magnetic vector fields and are typically located in the scattered field region which is defined by a total/scattered field excitation, e.g. [a planewave](#planewave). -They must be defined with a single `cell` element which must contain a single `interval` defining a cuboid. +Probes of type `farField` perform a near to far field transformation of the electric and magnetic vector fields and are typically located in the scattered field region which is defined by a total/scattered field excitation, e.g. [a planewave](#planewave). +They must be defined with a single `cell` element which must contain a single `interval` defining a cuboid. The direction of the radiated field $\hat{r}(\theta, \phi)$ is defined with `` and ``, which must contain ``, ``, and ``, expressed in degrees. The `domain` of a `farField` probe can only be of type `frequency`. If not `magnitudeFile` is specified and only one `source` is defined, the `magnitudeFile` of that source will be used to calculate as normalizing function. @@ -728,7 +728,7 @@ If not `magnitudeFile` is specified and only one `source` is defined, the `magni Probes of type `movie` record a vector field in a volume region indicated by `elementIds`. `[field]` can be `electric`, `magnetic`, or `currentDensity`; defaults to `electric`. `currentDensity` will store only the surface density currents on `pec` or lossy surfaces. -For movies in time domain, the `initialTime`, `finalTime`, and `samplingPeriod` must be specified by the user; there is no default value. +For movies in time domain, the `initialTime`, `finalTime`, and `samplingPeriod` must be specified by the user; there is no default value. The stored values can be selected using the `[component]` entry, which stores one of the following labels `x`, `y`, `z`, or `magnitude`; if no component is specified, defaults to `magnitude`. An example follows: @@ -809,8 +809,8 @@ This object represents a time-varying vector field applied along an oriented lin ```json { "name": "entry_line_curent", - "type": "nodalSource", - "magnitudeFile": "gauss.exc", + "type": "nodalSource", + "magnitudeFile": "gauss.exc", "elementIds": [1], "hardness": "soft" } @@ -818,7 +818,7 @@ This object represents a time-varying vector field applied along an oriented lin ### `generator` -A `generator` source must be located on a single `node`. The entry `[field]` can be `voltage` or `current`; defaults to `voltage`. +A `generator` source must be located on a single `node`. The entry `[field]` can be `voltage` or `current`; defaults to `voltage`. **Example:** @@ -835,7 +835,7 @@ A `generator` source must be located on a single `node`. The entry `[field]` can ##### Holland wires -Using Holland wires, generators can be located on any node of the lines. Voltage(current) generators cannot have a series(parallel) resistance defined. The magnitude of the source already has to include any resistances that belong to the generator. +Using Holland wires, generators can be located on any node of the lines. Voltage(current) generators cannot have a series(parallel) resistance defined. The magnitude of the source already has to include any resistances that belong to the generator. ##### MLTN wires @@ -846,7 +846,7 @@ Using MTLN wires there are some restrictions on the position of the generator: | Voltage | Only terminal nodes | Terminal and interior nodes | | Current | Terminal and interior nodes | Only terminal nodes | -MTLN voltage(current) generators can have a series(parallel) resistance, which is optional. In case no value is provided, the resistance default value will be 0.0. for `voltage` generators and 1.0e22 for `current` generators. +MTLN voltage(current) generators can have a series(parallel) resistance, which is optional. In case no value is provided, the resistance default value will be 0.0. for `voltage` generators and 1.0e22 for `current` generators. If the generator is located at the termination of a wire, the series or parallel `resistance` is added to the connection defined in the corresponding `terminal`. If a current generator is located on a wire intermediate position, its Thévenin equivalent (generator + series resistance) is computed to substitute the current generator. The per-unit-length properties of the corresponding segment are modified according to the `resistance` of the generator. @@ -860,7 +860,7 @@ In case a generator is on a wire extreme, the current direction will be from the #### Generators on junctions -In case the generator is located at the junction `node` (connection point) of two of more lines, the lines whose ends are connected will share the same `coordinateId`. In this case, it is necessary to know to which of the lines the generator is attached to. The entry `[attachedToLineId]` is an integer which refers to the `elementId` of the `polyline` the generator is connected to. +In case the generator is located at the junction `node` (connection point) of two of more lines, the lines whose ends are connected will share the same `coordinateId`. In this case, it is necessary to know to which of the lines the generator is attached to. The entry `[attachedToLineId]` is an integer which refers to the `elementId` of the `polyline` the generator is connected to. **Example:** @@ -870,8 +870,8 @@ In case the generator is located at the junction `node` (connection point) of tw "name": "voltage_source", "type": "generator", "field": "voltage", - "magnitudeFile": "gauss.exc", - "elementIds": [1], + "magnitudeFile": "gauss.exc", + "elementIds": [1], "attachedToLineId" : 2 } ``` diff --git a/src_conformal/CMakeLists.txt b/src_conformal/CMakeLists.txt index fa541ce3f..4940f16bc 100644 --- a/src_conformal/CMakeLists.txt +++ b/src_conformal/CMakeLists.txt @@ -2,10 +2,10 @@ message(STATUS "Creating build system for conformal") set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/mod) -add_library(conformal - "geometry.F90" - "cell_map.F90" +add_library(conformal + "cell_map.F90" "conformal.F90" + "geometry.F90" ) target_link_libraries(conformal PRIVATE semba-types semba-reports fhash) diff --git a/src_conformal/conformal.F90 b/src_conformal/conformal.F90 index fc18eb529..83f0e57c7 100644 --- a/src_conformal/conformal.F90 +++ b/src_conformal/conformal.F90 @@ -4,11 +4,11 @@ module conformal_m use geometry_m use cell_map_m use NFDETypes_m, only: ConformalPECRegions_t, ConformalPECElements_t, ConformalMedia_t, & - edge_t, face_t, & + edge_t, face_t, & conformal_face_media_t, conformal_edge_media_t, rkind - - real (kind=rkind), PARAMETER :: EDGE_RATIO_EQ_TOLERANCE = 1e-5 - real (kind=rkind), PARAMETER :: FACE_RATIO_EQ_TOLERANCE = 1e-3 + + real(kind=rkind), parameter :: EDGE_RATIO_EQ_TOLERANCE = 1e-5 + real(kind=rkind), parameter :: FACE_RATIO_EQ_TOLERANCE = 1e-3 real, parameter :: TOPOLOGY_TOLERANCE = 1.0e-5 type :: oriented_edge_t @@ -35,15 +35,15 @@ function buildSideMaps(elements) result(res) end do end function - subroutine buildConformalMedia(conformalRegs, volumes, surfaces) + subroutine buildConformalMedia(conformalRegs, volumes, surfaces) type(ConformalPECRegions_t), pointer, intent(in) :: conformalRegs type(ConformalMedia_t), allocatable, dimension(:), intent(inout) :: volumes, surfaces - if (associated(conformalRegs%volumes)) then + if (associated(conformalRegs%volumes)) then volumes = buildMedia(conformalRegs%volumes) else allocate(volumes(0)) end if - if (associated(conformalRegs%surfaces)) then + if (associated(conformalRegs%surfaces)) then surfaces = buildSurfaceMedia(conformalRegs%surfaces) else allocate(surfaces(0)) @@ -792,7 +792,7 @@ function buildMedia(elements) result(res) canonical_element = canonicalClosedSurfaceOrientation(elements(i)) res(i) = buildMediaFromElement(canonical_element) end do - end function + end function function buildMediaFromElement(element) result(res) type(ConformalPECElements_t), intent(in) :: element @@ -802,7 +802,7 @@ function buildMediaFromElement(element) result(res) real (kind=rkind), dimension(:), allocatable :: edge_ratios, face_ratios type(edge_t), dimension(:), allocatable :: edges type(face_t), dimension(:), allocatable :: faces - + call buildCellMap(cell_map, element) call fillElements(cell_map, faces, edges) call addNewRatios(edges, faces, edge_ratios, face_ratios) @@ -819,17 +819,17 @@ function buildMediaFromElement(element) result(res) subroutine addNewRatios(edges, faces, edge_ratios, face_ratios) type(edge_t), dimension(:), allocatable, intent(in) :: edges type(face_t), dimension(:), allocatable, intent(in) :: faces - real (kind=rkind), dimension(:), allocatable, intent(inout) :: edge_ratios, face_ratios + real(kind=rkind), dimension(:), allocatable, intent(inout) :: edge_ratios, face_ratios integer :: i allocate(edge_ratios(0)) allocate(face_ratios(0)) do i = 1, size(edges) - if (isNewRatio(edge_ratios, edges(i)%ratio, EDGE_RATIO_EQ_TOLERANCE)) then + if (isNewRatio(edge_ratios, edges(i)%ratio, EDGE_RATIO_EQ_TOLERANCE)) then call addRatio(edge_ratios, edges(i)%ratio) end if end do do i = 1, size(faces) - if (isNewRatio(face_ratios, faces(i)%ratio, FACE_RATIO_EQ_TOLERANCE)) then + if (isNewRatio(face_ratios, faces(i)%ratio, FACE_RATIO_EQ_TOLERANCE)) then call addRatio(face_ratios, faces(i)%ratio) end if end do @@ -838,7 +838,7 @@ subroutine addNewRatios(edges, faces, edge_ratios, face_ratios) function addEdgeMedia(edges, edge_ratios) result(res) - real (kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios + real(kind=rkind), dimension(:), allocatable, intent(in) :: edge_ratios type(edge_t), dimension(:), allocatable, intent(in) :: edges type(edge_t), dimension(:), allocatable :: filtered_edges TYPE (conformal_edge_media_t), DIMENSION (:), POINTER :: res @@ -853,7 +853,7 @@ function addEdgeMedia(edges, edge_ratios) result(res) end function function addFaceMedia(faces, face_ratios) result(res) - real (kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios + real(kind=rkind), dimension(:), allocatable, intent(in) :: face_ratios type(face_t), dimension(:), allocatable, intent(in) :: faces type(face_t), dimension(:), allocatable :: filtered_faces TYPE (conformal_face_media_t), DIMENSION (:), POINTER :: res @@ -900,15 +900,15 @@ function computeTimeStepScalingFactor(edges_media, faces_media) result(res) idx2 = mod(j + 1,3) + 1 l_ratio = max(cell_ratio_info%length(idx1),cell_ratio_info%length(idx2)) aux_cell(idx1) = aux_cell(idx1) + 1 - if (cell_ratio_map%hasKey(aux_cell)) then + if (cell_ratio_map%hasKey(aux_cell)) then cell_ratio_info = cell_ratio_map%getCellRatiosInCell(aux_cell) l_ratio = max(l_ratio, cell_ratio_info%length(idx2)) - else + else l_ratio = 1.0 end if aux_cell = cell aux_cell(idx2) = aux_cell(idx2) + 1 - if (cell_ratio_map%hasKey(aux_cell)) then + if (cell_ratio_map%hasKey(aux_cell)) then cell_ratio_info = cell_ratio_map%getCellRatiosInCell(aux_cell) l_ratio = max(l_ratio, cell_ratio_info%length(idx1)) else @@ -919,14 +919,14 @@ function computeTimeStepScalingFactor(edges_media, faces_media) result(res) end if end do end do - end function + end function subroutine fillElements(cell_map, faces, edges) type(cell_map_t), intent(in) :: cell_map - type (face_t), dimension (:), allocatable, intent(inout) :: faces - type (edge_t), dimension (:), allocatable, intent(inout) :: edges - integer (kind=4), dimension(3) :: cell + type(face_t), dimension(:), allocatable, intent(inout) :: faces + type(edge_t), dimension(:), allocatable, intent(inout) :: edges + integer(kind=4), dimension(3) :: cell integer :: i, edge, face type(side_t), dimension(:), allocatable :: sides, sides_on_face, contour, sides_on_edge type(triangle_t), dimension(:), allocatable :: tris, tris_on_face @@ -934,13 +934,13 @@ subroutine fillElements(cell_map, faces, edges) allocate(faces(0)) allocate(edges(0)) do i = 1, size(cell_map%keys) - cell = cell_map%keys(i)%cell + cell = cell_map%keys(i)%cell sides = cell_map%getSidesInCell(cell) tris = cell_map%getTrianglesInCell(cell) intervals = cell_map%getIntervalsInCell(cell) do face = FACE_X, FACE_Z sides_on_face = getSidesOnFace(sides, face) - if (size(sides_on_face) /= 0) then + if (size(sides_on_face) /= 0) then contour = findLargestContour(sides_on_face) call fillFaceFromContour(contour, faces) call fillEdgesFromContour(contour, edges) @@ -952,9 +952,9 @@ subroutine fillElements(cell_map, faces, edges) end do do i = 1, size(cell_map%keys) - cell = cell_map%keys(i)%cell + cell = cell_map%keys(i)%cell sides = cell_map%getSidesInCell(cell) - + do edge = EDGE_X, EDGE_Z sides_on_edge = getSidesOnEdge(sides, edge) call fillEdges(sides_on_edge, edges) @@ -1004,11 +1004,11 @@ function buildSidesFromCellInterval(interval) result(res) subroutine fillIntervals(intervals, edges, faces) type(interval_t), dimension(:), allocatable :: intervals - type (edge_t), dimension (:), allocatable, intent(inout) :: edges - type (face_t), dimension (:), allocatable, intent(inout) :: faces + type(edge_t), dimension(:), allocatable, intent(inout) :: edges + type(face_t), dimension(:), allocatable, intent(inout) :: faces integer :: i type(side_t), dimension(:), allocatable :: contour - do i = 1, size(intervals) + do i = 1, size(intervals) call fillEdgesFromInterval(edges, intervals(i)) call fillFaceFromInterval(faces, intervals(i)) end do @@ -1016,11 +1016,11 @@ subroutine fillIntervals(intervals, edges, faces) subroutine fillFullFaces(tris_on_face, faces, edges) type(triangle_t), dimension(:), allocatable, intent(in) :: tris_on_face - type (face_t), dimension (:), allocatable, intent(inout) :: faces - type (edge_t), dimension (:), allocatable, intent(inout) :: edges + type(face_t), dimension(:), allocatable, intent(inout) :: faces + type(edge_t), dimension(:), allocatable, intent(inout) :: edges type(side_t), dimension(:), allocatable :: tri_sides integer :: j, k, s - real (kind=rkind) :: area, ratio + real(kind=rkind) :: area, ratio integer :: edge, face integer, dimension(3) :: cell area = 0.0 @@ -1028,17 +1028,17 @@ subroutine fillFullFaces(tris_on_face, faces, edges) do j = 1, size(tris_on_face) area = area + getArea(tris_on_face(j)) end do - if (abs(area-1.0) < 1e-4) then + if (abs(area-1.0) < 1e-4) then cell = tris_on_face(1)%getCell() face = tris_on_face(1)%getFace() call addFace(faces, cell, face, ratio) do k = 1, size(tris_on_face) tri_sides = tris_on_face(k)%getSides() do s = 1, 3 - if (tri_sides(s)%isOnAnyEdge()) then + if (tri_sides(s)%isOnAnyEdge()) then cell = tri_sides(s)%getCell() edge = tri_sides(s)%getEdge() - if (isNewEdge(edges, cell, edge, ratio)) then + if (isNewEdge(edges, cell, edge, ratio)) then call addEdge(edges, cell, edge, tri_sides(s)) end if end if @@ -1050,16 +1050,16 @@ subroutine fillFullFaces(tris_on_face, faces, edges) subroutine fillEdgesFromContour(contour, edges) type(side_t), dimension(:), allocatable, intent(in) :: contour - type (edge_t), dimension (:), allocatable, intent(inout) :: edges + type(edge_t), dimension(:), allocatable, intent(inout) :: edges integer :: i, edge integer, dimension(3) :: cell do i = 1, size(contour) edge = contour(i)%getEdge() cell = contour(i)%getCell() - if (edge /= NOT_ON_EDGE) then - if (isEdgeFilled(edges, cell, edge)) then + if (edge /= NOT_ON_EDGE) then + if (isEdgeFilled(edges, cell, edge)) then call fillSmallerRatio(edges, cell, edge, contour(i)) - else + else call addEdge(edges, cell, edge, contour(i)) end if end if @@ -1068,16 +1068,16 @@ subroutine fillEdgesFromContour(contour, edges) subroutine fillEdges(sides, edges) type(side_t), dimension(:), allocatable, intent(in) :: sides - type (edge_t), dimension (:), allocatable, intent(inout) :: edges + type(edge_t), dimension(:), allocatable, intent(inout) :: edges integer :: i, edge integer, dimension(3) :: cell do i = 1, size(sides) edge = sides(i)%getEdge() cell = sides(i)%getCell() - if (edge /= NOT_ON_EDGE) then - if (isEdgeFilled(edges, cell, edge)) then + if (edge /= NOT_ON_EDGE) then + if (isEdgeFilled(edges, cell, edge)) then call reduceEdgeRatio(edges, cell, edge, sides(i)) - else + else call addEdge(edges, cell, edge, sides(i)) end if end if @@ -1085,17 +1085,17 @@ subroutine fillEdges(sides, edges) end subroutine subroutine fillEdgesFromInterval(edges, interval) - type (edge_t), dimension (:), allocatable :: edges + type(edge_t), dimension(:), allocatable :: edges type(interval_t), intent(in) :: interval integer :: i, edge type(side_t), dimension(4) :: sides sides = buildSidesFromCellInterval(interval) do i = 1, size(sides) edge = sides(i)%getEdge() - if (edge /= NOT_ON_EDGE) then - if (isEdgeFilled(edges, sides(i)%getCell(), edge)) then + if (edge /= NOT_ON_EDGE) then + if (isEdgeFilled(edges, sides(i)%getCell(), edge)) then call fillSmallerRatio(edges, sides(i)%getCell(), edge, sides(i)) - else + else call addEdge(edges, sides(i)%getCell(), edge, sides(i)) end if end if @@ -1103,10 +1103,10 @@ subroutine fillEdgesFromInterval(edges, interval) end subroutine subroutine fillFaceFromInterval(faces, interval) - type (face_t), dimension (:), allocatable :: faces + type(face_t), dimension(:), allocatable :: faces type(interval_t), intent(in) :: interval type(side_t) :: aux - real (kind=rkind) :: ratio + real(kind=rkind) :: ratio ratio = 0.0 aux%init%position = interval%ini%cell aux%end%position = interval%end%cell @@ -1115,13 +1115,13 @@ subroutine fillFaceFromInterval(faces, interval) subroutine fillFaceFromContour(contour, faces) type(side_t), dimension(:), allocatable, intent(in) :: contour - type (face_t), dimension (:), allocatable :: faces - real (kind=rkind) :: area + type(face_t), dimension(:), allocatable :: faces + real(kind=rkind) :: area integer :: face integer, dimension(3) :: cell cell = findContourCell(contour) face = findContourFace(contour) - if (size(contour) /= 0) then + if (size(contour) /= 0) then area = 1.0 - contourArea(contour) call addFace(faces, cell, face , area) end if @@ -1132,7 +1132,7 @@ function findLargestContour(sides) result(res) type(side_t), dimension(:), allocatable :: res type(side_t), dimension(:), allocatable :: aux_contour type(side_t), dimension(:), allocatable :: aux_side - integer :: i + integer :: i real :: area, contour_area area = 0 allocate(aux_side(1)) @@ -1140,25 +1140,25 @@ function findLargestContour(sides) result(res) aux_side(1) = sides(i) aux_contour = buildSidesContour(aux_side) contour_area = contourArea(aux_contour) - if (contour_area > area) then + if (contour_area > area) then res = aux_contour area = contour_area end if end do end function - + logical function isNewEdge(edges, cell, edge, ratio) type(edge_t), dimension(:), allocatable, intent(inout) :: edges - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4) :: edge - real (kind=rkind) :: ratio + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4) :: edge + real(kind=rkind) :: ratio integer :: i isNewEdge = .true. do i = 1, size(edges) if (all(edges(i)%cell == cell) .and. & edges(i)%ratio == ratio .and. & - edges(i)%direction == edge) then + edges(i)%direction == edge) then isNewEdge = .false. exit end if @@ -1167,13 +1167,13 @@ logical function isNewEdge(edges, cell, edge, ratio) logical function isEdgeFilled(edges, cell, edge) type(edge_t), dimension(:), allocatable, intent(inout) :: edges - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4) :: edge + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4) :: edge integer :: i isEdgeFilled = .false. do i = 1, size(edges) if (all(edges(i)%cell == cell) .and. & - edges(i)%direction == edge) then + edges(i)%direction == edge) then isEdgeFilled = .true. exit end if @@ -1182,16 +1182,16 @@ logical function isEdgeFilled(edges, cell, edge) subroutine reduceEdgeRatio (edges, cell, edge, side) type(edge_t), dimension(:), allocatable, intent(inout) :: edges - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4) :: edge + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4) :: edge type(side_t), intent(in) :: side integer :: i do i = 1, size(edges) if (all(edges(i)%cell == cell) .and. & - edges(i)%direction == edge) then + edges(i)%direction == edge) then if (edges(i)%material_coords(1) /= min(side%init%position(edge), side%end%position(edge)) .and. & edges(i)%material_coords(2) /= max(side%init%position(edge), side%end%position(edge)) .and. & - edges(i)%ratio /= 0) then + edges(i)%ratio /= 0) then edges(i)%ratio = edges(i)%ratio - side%length() end if exit @@ -1201,16 +1201,16 @@ subroutine reduceEdgeRatio (edges, cell, edge, side) subroutine fillSmallerRatio (edges, cell, edge, side) type(edge_t), dimension(:), allocatable, intent(inout) :: edges - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4) :: edge + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4) :: edge type(side_t), intent(in) :: side integer :: i real(kind=rkind) :: new_ratio do i = 1, size(edges) if (all(edges(i)%cell == cell) .and. & - edges(i)%direction == edge) then + edges(i)%direction == edge) then new_ratio = 1.0 - side%length() - if (new_ratio < edges(i)%ratio) then + if (new_ratio < edges(i)%ratio) then edges(i)%ratio = new_ratio end if exit @@ -1221,12 +1221,12 @@ subroutine fillSmallerRatio (edges, cell, edge, side) subroutine addEdge(edges, cell, edge, side) type(edge_t), dimension(:), allocatable, intent(inout) :: edges type(edge_t), dimension(:), allocatable :: aux - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4) :: edge + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4) :: edge type(side_t), intent(in) :: side type(edge_t) :: new_edge - real (kind=rkind) :: ratio - real (kind = rkind), dimension(2) :: coords + real(kind=rkind) :: ratio + real(kind = rkind), dimension(2) :: coords ratio = 1.0 - side%length() allocate(aux(size(edges) + 1)) @@ -1244,10 +1244,10 @@ subroutine addEdge(edges, cell, edge, side) subroutine addFace(faces, cell, face, ratio) type(face_t), dimension(:), allocatable, intent(inout) :: faces type(face_t), dimension(:), allocatable :: aux - integer (kind=4), dimension(3), intent(in) :: cell - integer (kind=4) :: face + integer(kind=4), dimension(3), intent(in) :: cell + integer(kind=4) :: face type(face_t) :: new_face - real (kind=rkind) :: ratio + real(kind=rkind) :: ratio allocate(aux(size(faces) + 1)) aux(1:size(faces)) = faces new_face = face_t(cell=cell, ratio=ratio, direction=face) @@ -1259,12 +1259,12 @@ subroutine addFace(faces, cell, face, ratio) end subroutine subroutine addRatio(ratios, ratio) - real (kind=rkind), dimension(:), allocatable, intent(inout) :: ratios - real (kind=rkind), dimension(:), allocatable :: aux - real (kind=rkind) :: ratio + real(kind=rkind), dimension(:), allocatable, intent(inout) :: ratios + real(kind=rkind), dimension(:), allocatable :: aux + real(kind=rkind) :: ratio integer :: i logical :: new = .true. - if (size(ratios) == 0) then + if (size(ratios) == 0) then deallocate(ratios) allocate(ratios(1)) ratios(1) = ratio @@ -1279,8 +1279,8 @@ subroutine addRatio(ratios, ratio) end subroutine logical function isNewRatio(ratios, ratio, tol) - real (kind=rkind), dimension(:), allocatable, intent(in) :: ratios - real (kind=rkind), intent(in) :: ratio, tol + real(kind=rkind), dimension(:), allocatable, intent(in) :: ratios + real(kind=rkind), intent(in) :: ratio, tol integer :: i isNewRatio = .true. do i = 1, size(ratios) @@ -1289,13 +1289,13 @@ logical function isNewRatio(ratios, ratio, tol) end function logical function eq_ratio(a,b, tol) - real (kind=rkind), intent(in) :: a,b, tol + real(kind=rkind), intent(in) :: a,b, tol eq_ratio = abs(a - b) < tol end function function filterEdgesByMedia(edges, ratio) result(res) type(edge_t), dimension(:), allocatable, intent(in) :: edges - real (kind=rkind) :: ratio + real(kind=rkind) :: ratio type(edge_t), dimension(:), allocatable :: res integer :: i,n n = 0 @@ -1305,7 +1305,7 @@ function filterEdgesByMedia(edges, ratio) result(res) allocate(res(n)) n = 0 do i = 1, size(edges) - if (eq_ratio(edges(i)%ratio, ratio, EDGE_RATIO_EQ_TOLERANCE)) then + if (eq_ratio(edges(i)%ratio, ratio, EDGE_RATIO_EQ_TOLERANCE)) then n = n + 1 res(n) = edges(i) end if @@ -1314,7 +1314,7 @@ function filterEdgesByMedia(edges, ratio) result(res) function filterFacesByMedia(faces, ratio) result(res) type(face_t), dimension(:), allocatable, intent(in) :: faces - real (kind=rkind) :: ratio + real(kind=rkind) :: ratio type(face_t), dimension(:), allocatable :: res integer :: i,n n = 0 @@ -1324,7 +1324,7 @@ function filterFacesByMedia(faces, ratio) result(res) allocate(res(n)) n = 0 do i = 1, size(faces) - if (eq_ratio(faces(i)%ratio, ratio, FACE_RATIO_EQ_TOLERANCE)) then + if (eq_ratio(faces(i)%ratio, ratio, FACE_RATIO_EQ_TOLERANCE)) then n = n + 1 res(n) = faces(i) end if diff --git a/src_conformal/conformal_timestepping.F90 b/src_conformal/conformal_timestepping.F90 index 33751b8e3..3ce8aaecd 100644 --- a/src_conformal/conformal_timestepping.F90 +++ b/src_conformal/conformal_timestepping.F90 @@ -26,7 +26,7 @@ module conformal_mod ! t_t alguno de los tipos conformal - + ! type Conformal_t ! integer (kind=simple) :: nConformalMedia ! type(t_t), pointer, dimension(:) :: medium @@ -138,10 +138,10 @@ subroutine initConformal(sgg, Ex, Ey, Ez, Hx, Hy, Hz, conformal_media) ! make fields in faces and edges point to the corresponding region I or II fields integer :: i, j - do i = 1, sgg%NumMedia - if (sgg%med(i)%Is%conformal .and. sgg%med(i)%Is%surface) then - if (featureIs(sgg%med(i)%conformalSurface(1)), CONFORMAL_FACE) then - do j = 1, sgg%med(i)%conformalSurface(1)%size + do i = 1, sgg%NumMedia + if (sgg%med(i)%Is%conformal .and. sgg%med(i)%Is%surface) then + if (featureIs(sgg%med(i)%conformalSurface(1)), CONFORMAL_FACE) then + do j = 1, sgg%med(i)%conformalSurface(1)%size cell(:) = sgg%med(i)%conformalSurface(1)%faces(j)%cell(:) select case(sgg%med(i)%conformalSurface(1)%faces(j)%direction) case(FACE_Z) @@ -150,27 +150,27 @@ subroutine initConformal(sgg, Ex, Ey, Ez, Hx, Hy, Hz, conformal_media) ! 1: Ey(cell(1) , cell(2) , cell(3)) ! si existe call edge_map%get(key(k), edge) - if (edge%ratio == 0) then + if (edge%ratio == 0) then sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = 0 sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = edge%region_II_fields%E - else if (edge%ratio == 1) then + else if (edge%ratio == 1) then sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 => Ey(cell(1) , cell(2) , cell(3)) - + allocate(sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned, 0.0) - sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%p => % + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%p => % sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned ! sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 = Ey(cell(1) , cell(2) , cell(3)) ! sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 = 0 - else + else sgg%med(i)%conformalSurface(1)%faces(j)%region_I_fields%E1 => Ey(cell(1) , cell(2) , cell(3)) ! sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1 => edge%region_II_fields%E allocate(sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned, 0.0) - sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%p => % + sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%p => % sgg%med(i)%conformalSurface(1)%faces(j)%region_II_fields%E1%owned end if ! Ex(cell(1) , cell(2) + 1, cell(3)) ! Ey(cell(1) + 1, cell(2) , cell(3)) - ! Ex(cell(1) , cell(2) , cell(3)) + ! Ex(cell(1) , cell(2) , cell(3)) end select end do end if @@ -238,7 +238,7 @@ subroutine advanceConformalH(sgg, media_maps) E3 => sgg%Med(i)%conformal%faces(j)%region_I_fields%E3%p E4 => sgg%Med(i)%conformal%faces(j)%region_I_fields%E4%p - cell(:) = sgg%Med(i)%conformal%faces(j)%cell(:) + cell(:) = sgg%Med(i)%conformal%faces(j)%cell(:) direction = sgg%Med(i)%conformal%faces(k)%direction medium = media_maps%getMedium(cell, direction, found) @@ -246,14 +246,14 @@ subroutine advanceConformalH(sgg, media_maps) H = g%gm1(medium)*H + g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) - if (isSurface) then + if (isSurface) then rIIH => sgg%Med(i)%conformal%faces(j)%region_II_fields%H%p rIIE1 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E1%p rIIE2 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E2%p rIIE3 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E3%p rIIE4 => sgg%Med(i)%conformal%faces(j)%region_II_fields%E4%p - ! medium ? + ! medium ? ! gm1, gm2? rIIH = gm1(medium)*rIIH + gm2(medium)*((rIIE2 - rIIE4)*id1 - (rIIE3-rIIE1)*id2) @@ -270,7 +270,7 @@ subroutine advanceConformalH(sgg, media_maps) ! E1 => conformal_media%face_media(i)%faces(j)%region_I_fields%E1 ! E2 => conformal_media%face_media(i)%faces(j)%region_I_fields%E2 ! E3 => conformal_media%face_media(i)%faces(j)%region_I_fields%E3 - ! E4 => conformal_media%face_media(i)%faces(j)%region_I_fields%E4 + ! E4 => conformal_media%face_media(i)%faces(j)%region_I_fields%E4 ! cell(:) = conformal_media%face_media(i)%faces(j)%cell(:) ! direction = conformal_media%face_media(j)%faces(k)%direction ! ! asignacion de medios: esta en otro sitio? en este esquema, los medios this%g%gm1(medium) @@ -281,12 +281,12 @@ subroutine advanceConformalH(sgg, media_maps) ! ! case(FACE_X) ! ! medium = media_maps%Hx%get(key(cell)) ! ! ! medium = sggMiHx(cell(1), cell(2), cell(3)) - ! ! ! id1 = - ! ! ! id2 = + ! ! ! id1 = + ! ! ! id2 = ! ! case(FACE_Y) ! ! medium =sggMiHy(cell(1), cell(2), cell(3)) - ! ! ! id1 = - ! ! ! id2 = + ! ! ! id1 = + ! ! ! id2 = ! ! case(FACE_Z) ! ! medium =sggMiHz(cell(1), cell(2), cell(3)) ! ! ! id1 = Idye(cell(2)) @@ -296,13 +296,13 @@ subroutine advanceConformalH(sgg, media_maps) ! ! if Ex in region II, g1 = 0, g2 = 0, and field = 0 ! H = g%gm1(medium)*H + g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) ! ! H = this%g%gm1(medium)*H + this%g%gm2(medium)*((E2 - E4)*id1 - (E3-E1)*id2) - ! ! update region II - ! if (isSurface) then + ! ! update region II + ! if (isSurface) then ! rIIH => conformal_media%face_media(i)%faces(j)%region_II_fields%H ! rIIE1 => conformal_media%face_media(i)%faces(j)%region_II_fields%E1 ! rIIE2 => conformal_media%face_media(i)%faces(j)%region_II_fields%E2 ! rIIE3 => conformal_media%face_media(i)%faces(j)%region_II_fields%E3 - ! rIIE4 => conformal_media%face_media(i)%faces(j)%region_II_fields%E4 + ! rIIE4 => conformal_media%face_media(i)%faces(j)%region_II_fields%E4 ! rIIH = this%g%gm1(medium)*rIIH + this%g%gm2(medium)*((rIIE2 - rIIE4)*id1 - (rIIE3-rIIE1)*id2) diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 17d8e8868..67e543e94 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -24,13 +24,13 @@ module smbjson_m implicit none - integer, private, parameter :: MAX_LINE = BUFSIZE - character (len=*), parameter :: TAG_MATERIAL = 'material' - character (len=*), parameter :: TAG_LAYER = 'layer' + integer, private, parameter :: MAX_LINE = BUFSIZE + character(len=*), parameter :: TAG_MATERIAL = 'material' + character(len=*), parameter :: TAG_LAYER = 'layer' type, public :: parser_t private - character (len=:), allocatable :: filename + character(len=:), allocatable :: filename type(json_file), pointer :: jsonfile => null() type(json_core), pointer :: core => null() type(json_value), pointer :: root => null() @@ -106,13 +106,14 @@ module smbjson_m character(:), allocatable :: name integer :: materialId integer, dimension(:), allocatable :: elementIds - character(:), allocatable :: matAssType + character(len=:), allocatable :: matAssType ! Cable specific fields. integer :: initialTerminalId = -1 integer :: endTerminalId = -1 integer :: initialConnectorId = -1 integer :: endConnectorId = -1 integer :: containedWithinElementId = -1 + ! Optional total resistance override (replaces resistancePerMeter from material). real(kind=RKIND), dimension(:), allocatable :: totalResistance logical :: hasTotalResistance = .false. end type @@ -234,7 +235,7 @@ subroutine addCoordinates(mesh) subroutine addElements(mesh) type(mesh_t), intent(inout) :: mesh - character (len=:), allocatable :: elementType + character(len=:), allocatable :: elementType type(json_value), pointer :: jes, je integer :: id, i type(node_t) :: node @@ -284,12 +285,12 @@ subroutine addElements(mesh) call WarnErrReport('Invalid element type', .true.) end select end do - end if + end if end subroutine function readCellIntervals(place, path) result(res) type(json_value), pointer, intent(in) :: place - character (len=*), intent(in) :: path + character(len=*), intent(in) :: path type(cell_interval_t), dimension(:), allocatable :: res type(json_value), pointer :: intervalsPlace, interval @@ -315,7 +316,7 @@ function readCellIntervals(place, path) result(res) function readTriangles(place, path) result(res) type(json_value), pointer, intent(in) :: place - character (len=*), intent(in) :: path + character(len=*), intent(in) :: path type(triangle_t), dimension(:), allocatable :: res type(json_value), pointer :: triangles, triangle_ptr @@ -375,7 +376,7 @@ function readConformalRegion(place, mesh) result(res) function readAdditionalArguments(this) result (res) class (parser_t) :: this - character (len=BUFSIZE) :: res + character(len=BUFSIZE) :: res res = this%getStrAt(this%root, J_GENERAL//'.'//J_GEN_ADDITIONAL_ARGUMENTS, default = '') end function @@ -383,16 +384,16 @@ function readGeneral(this) result (res) class(parser_t) :: this type(NFDEGeneral_t) :: res res%dt = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_TIME_STEP, default = 0.0_RKIND) - if (res%dt < 0) call WarnErrReport('timeStep cannot be negative', .true.) + if (res%dt < 0) call WarnErrReport('timStep cannot be negative', .true.) res%nmax = this%getRealAt(this%root, J_GENERAL//'.'//J_GEN_NUMBER_OF_STEPS) - if (res%nmax <= 0) call WarnErrReport('numberOfSteps has to be positive', .true.) + if (res%nmax <=0) call WarnErrReport('numberOfSteps has to be positive', .true.) res%mtlnProblem = this%getLogicalAt(this%root, J_GENERAL//'.'//J_GEN_MTLN_PROBLEM, default = .false.) end function function readMediaMatrix(this) result(res) class(parser_t) :: this type(MatrizMedios_t) :: res - character (len=*), parameter :: P = J_MESH//'.'//J_GRID//'.'//J_GRID_NUMBER_OF_CELLS + character(len=*), parameter :: P = J_MESH//'.'//J_GRID//'.'//J_GRID_NUMBER_OF_CELLS res%totalX = this%getIntAt(this%root, P//'(1)') + 1 res%totalY = this%getIntAt(this%root, P//'(2)') + 1 res%totalZ = this%getIntAt(this%root, P//'(3)') + 1 @@ -402,10 +403,10 @@ function readGrid(this) result (res) class(parser_t) :: this type(Desplazamiento_t) :: res real, dimension(:), allocatable :: vec - character (len=*), parameter :: P = J_MESH//'.'//J_GRID - integer :: nX, nY, nZ + character(len=*), parameter :: P = J_MESH//'.'//J_GRID + nX = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(1)') nY = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(2)') nZ = this%getIntAt(this%root, P//'.'//J_GRID_NUMBER_OF_CELLS//'(3)') @@ -433,16 +434,16 @@ function readGrid(this) result (res) contains subroutine assignDes(path, dest, n) character(kind=CK, len=*) :: path - real (kind=rkind), dimension(:), pointer :: dest + real(kind=RKIND), dimension(:), pointer :: dest real(kind=RKIND), dimension(:), allocatable :: vec - integer (kind=4), intent(inout) :: n + integer(kind=4), intent(inout) :: n logical :: found = .false. - vec= this%getRealsAt(this%root, path, found) + vec = this%getRealsAt(this%root, path, found) if (.not. found) then call WarnErrReport('Error reading grid: steps not found.', .true.) - endif + end if if (size(vec) /= 1 .and. size(vec) /= n) then call WarnErrReport( 'Error reading grid: steps must be arrays of size 1 (for regular grids) or size equal to the number of cells.', .true.) end if @@ -474,7 +475,7 @@ subroutine readBackgroundMaterial(this, mats) function readBoundary(this) result (res) class(parser_t) :: this type(Frontera_t) :: res - character (len=:), allocatable :: bdrType + character(len=:), allocatable :: bdrType type(json_value), pointer :: bdrs logical :: found character(len=*), parameter :: errorMsgInit = "ERROR reading boundary: " @@ -572,14 +573,14 @@ function readPMCRegions(this) result (res) function buildPECPMCRegions(this, matType) result(res) class(parser_t) :: this - character (len=*), intent(in) :: matType + character(len=*), intent(in) :: matType type(PECRegions_t) :: res type(materialAssociation_t), dimension(:), allocatable :: mAs type(coords_t), dimension(:), pointer :: cs integer :: i - mAs = this%getMaterialAssociations([matType], [ & - '-'//J_CONF_SUBTYPE_SURFACE, J_ELEM_TYPE_CELL//' ', '-'//J_CONF_SUBTYPE_VOLUME//' ']) + ! mAs = this%getMaterialAssociations([matType],[J_ELEM_TYPE_CELL]) + mAs = this%getMaterialAssociations([matType],['-'//J_CONF_SUBTYPE_SURFACE, J_ELEM_TYPE_CELL//' ', '-'//J_CONF_SUBTYPE_VOLUME//' ']) block type(coords_t), dimension(:), pointer :: emptyCoords if (size(mAs) == 0) then @@ -642,7 +643,7 @@ function readConformalRegions(this) result(res) type(materialAssociation_t), dimension(:), allocatable :: mAs type(conformal_region_t) :: cR type(triangle_t), dimension(:), allocatable :: aux_tris - character (len=:), allocatable :: tagName + character(len=:), allocatable :: tagName integer :: i, j logical :: found @@ -691,7 +692,7 @@ end function isClosedRegion subroutine appendRegion(regions, region, tagName) type(ConformalPECElements_t), dimension(:), pointer :: regions type(conformal_region_t), intent(in) :: region - character (len=:), allocatable, intent(in) :: tagName + character(len=:), allocatable, intent(in) :: tagName type(ConformalPECElements_t), dimension(:), allocatable :: aux integer :: i @@ -836,8 +837,8 @@ function readDielectric(mA, cellType) result(res) ! Fills rest of dielectric data. res%sigma = this%getRealAt(matPtr%p, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0_RKIND) res%sigmam = this%getRealAt(matPtr%p, J_MAT_MAGNETIC_CONDUCTIVITY, default=0.0_RKIND) - res%eps = this%getRealAt(matPtr%p, J_MAT_REL_PERMITTIVITY, default=1.0_RKIND)*EPSILON_VACUUM - res%mu = this%getRealAt(matPtr%p, J_MAT_REL_PERMEABILITY, default=1.0_RKIND)*MU_VACUUM + res%eps = this%getRealAt(matPtr%p, J_MAT_REL_PERMITTIVITY, default=1.0_RKIND) * EPSILON_VACUUM + res%mu = this%getRealAt(matPtr%p, J_MAT_REL_PERMEABILITY, default=1.0_RKIND) * MU_VACUUM end function @@ -888,6 +889,10 @@ function readLumped(mA, cellType) result(res) end if res%Rtime_on = this%getRealAt(matPtr%p, J_MAT_LUMPED_STARTING_TIME, default=0.0_RKIND) res%Rtime_off = this%getRealAt(matPtr%p, J_MAT_LUMPED_END_TIME, default=1.0_RKIND) + if (res%Rtime_on < 0 .or. res%Rtime_off <0) then + write(errorMsg,'(A)') errorMsgInit, mA%materialId, " starting or end time is negative" + call WarnErrReport('', .true.) + end if case (J_MAT_LUMPED_MODEL_INDUCTOR) res%inductor = .true. res%L = this%getRealAt(matPtr%p, J_MAT_LUMPED_INDUCTANCE, found) @@ -938,9 +943,9 @@ subroutine matAssToCoords(this, res, mA, cellType) type(materialAssociation_t), intent(in) :: mA type(coords_t), dimension(:), pointer :: res integer, intent(in) :: cellType - character (len=:), allocatable :: tagName + character(len=:), allocatable :: tagName type(coords_t), dimension(:), allocatable :: newCoords - type (cell_region_t) :: cR + type(cell_region_t) :: cR integer :: nCs integer :: e, jIni, jEnd @@ -1003,7 +1008,9 @@ function readLossyThinSurfaces(this) result (res) end do do i = 1, nLossySurfaces - res%nC_max = max(res%nC_max, size(res%cs(i)%c)) + if (res%nC_max < size(res%cs(i)%c)) then + res%nC_max = size(res%cs(i)%c) + end if end do contains @@ -1011,7 +1018,7 @@ function readLossyThinSurface(mA) result(res) type(materialAssociation_t), intent(in) :: mA type(LossyThinSurface_t) :: res logical :: found, hasAbsPermittivity, hasAbsPermeability - character (len=*), parameter :: errorMsgInit = "ERROR reading lossy thin surface: " + character(len=*), parameter :: errorMsgInit = "ERROR reading lossy thin surface: " integer :: i type(json_value_ptr_t) :: mat type(json_value), pointer :: layer @@ -1039,11 +1046,11 @@ function readLossyThinSurface(mA) result(res) call this%core%get_child(layers, i, layer) res%sigma(i) = this%getRealAt(layer, J_MAT_ELECTRIC_CONDUCTIVITY, default=0.0_RKIND) res%sigmam(i) = this%getRealAt(layer, J_MAT_MAGNETIC_CONDUCTIVITY, default=0.0_RKIND) - res%eps(i) = this%getRealAt(layer, J_MAT_ABS_PERMITTIVITY, hasAbsPermittivity) + res%eps(i) = this%getRealAt(layer, J_MAT_ABS_PERMITTIVITY, hasAbsPermittivity) if (.not. hasAbsPermittivity) then res%eps(i) = this%getRealAt(layer, J_MAT_REL_PERMITTIVITY, default=1.0_RKIND) * EPSILON_VACUUM end if - res%mu(i) = this%getRealAt(layer, J_MAT_ABS_PERMEABILITY, hasAbsPermeability) + res%mu(i) = this%getRealAt(layer, J_MAT_ABS_PERMEABILITY, hasAbsPermeability) if (.not. hasAbsPermeability) then res%mu(i) = this%getRealAt(layer, J_MAT_REL_PERMEABILITY, default=1.0_RKIND) * MU_VACUUM end if @@ -1099,7 +1106,7 @@ function readPlanewave(pw) result (res) type(PlaneWave_t) :: res type(json_value), pointer :: pw - character (len=:), allocatable :: label + character(len=:), allocatable :: label logical :: found res%nombre_fichero = trim(adjustl(this%getStrAt(pw,J_SRC_MAGNITUDE_FILE))) @@ -1110,22 +1117,19 @@ function readPlanewave(pw) result (res) res%phi = this%getRealAt(pw, J_SRC_PW_DIRECTION//'.'//J_SRC_PW_PHI) res%alpha = this%getRealAt(pw, J_SRC_PW_POLARIZATION//'.'//J_SRC_PW_THETA) res%beta = this%getRealAt(pw, J_SRC_PW_POLARIZATION//'.'//J_SRC_PW_PHI) - res%isRC = .false. - res%nummodes = 1 - res%incertmax = 0.0_RKIND - block type(cell_interval_t), dimension(:), allocatable :: cellIntervals type(coords_t), dimension(:), allocatable :: nfdeCoords cellIntervals = this%getSingleVolumeInElementsIds(pw) - if (size(cellIntervals) == 0) then - call WarnErrReport('Planewave elementIds must define one non-empty volume.', .true.) - return - end if + if (size(cellIntervals) == 0) return nfdeCoords = cellIntervalsToCoords(cellIntervals) res%coor1 = [nfdeCoords(1)%Xi, nfdeCoords(1)%Yi, nfdeCoords(1)%Zi] res%coor2 = [nfdeCoords(1)%Xe, nfdeCoords(1)%Ye, nfdeCoords(1)%Ze] end block + + res%isRC = .false. + res%nummodes = 1 + res%incertmax = 0.0_RKIND end function end function @@ -1169,7 +1173,7 @@ function readField(jns) result(res) type(Curr_Field_Src_t) :: res type(json_value), pointer :: jns, entry integer, dimension(:), allocatable :: elementIds - character (len=BUFSIZE) :: nodalSourceName + character(len=BUFSIZE) :: nodalSourceName type(coords_scaled_t), dimension(:), pointer :: allCoords integer :: j, cnt_c1p, cnt_c2p @@ -1239,7 +1243,7 @@ function readProbes(this) result (res) type(json_value), pointer :: allProbes type(json_value_ptr_t), dimension(:), allocatable :: ps ! The only oldProbe present in the format is the far field. - character (len=*), dimension(1), parameter :: validTypes = [J_PR_TYPE_FARFIELD] + character(len=*), dimension(1), parameter :: validTypes = [J_PR_TYPE_FARFIELD] integer :: i logical :: found @@ -1265,7 +1269,7 @@ function readFarFieldProbe(p) result (res) type(abstractSonda_t) :: res type(json_value), pointer :: p type(Sonda_t), pointer :: ff - character (len=:), allocatable :: outputName + character(len=:), allocatable :: outputName logical :: transferFunctionFound type(domain_t) :: domain @@ -1283,9 +1287,9 @@ function readFarFieldProbe(p) result (res) if (domain%type2 /= NP_T2_FREQ) then call WarnErrReport("Only frequency domain is accepted for far field probes.", .true.) end if - ff%tstart = 0.0 - ff%tstop = 0.0 - ff%tstep = 0.0 + ff%tstart = 0.0_RKIND + ff%tstop = 0.0_RKIND + ff%tstep = 0.0_RKIND ff%fstart = domain%fstart ff%fstop = domain%fstop ff%fstep = domain%fstep @@ -1293,7 +1297,7 @@ function readFarFieldProbe(p) result (res) block logical :: sourcesFound type(json_value), pointer :: sources, src - character (len=:), allocatable :: fn + character(len=:), allocatable :: fn fn = this%getStrAt(p, J_PR_DOMAIN//J_PR_DOMAIN_MAGNITUDE_FILE, found=transferFunctionFound) if (.not. transferFunctionFound) then @@ -1347,9 +1351,9 @@ function readFarFieldProbe(p) result (res) subroutine readDirection(p, label, initial, final, step) type(json_value), pointer :: p type(json_value), pointer :: dir - character (len=*), intent(in) :: label + character(len=*), intent(in) :: label logical :: found - real (kind=rkind), intent(inout) :: initial, final, step + real(kind=rkind), intent(inout) :: initial, final, step call this%core%get(p, label, dir, found=found) if (.not. found) then @@ -1368,10 +1372,10 @@ function readMoreProbes(this) result (res) type(json_value_ptr_t), dimension(:), allocatable :: ps integer :: i - character (len=*), dimension(2), parameter :: validTypes = & + character(len=*), dimension(2), parameter :: validTypes = & [J_PR_TYPE_POINT, J_PR_TYPE_LINE] logical :: found - character (len=:), allocatable :: fieldLbl, probeLbl + character(len=:), allocatable :: probeLbl integer :: filtered_size, n call this%core%get(this%root, J_PROBES, allProbes, found) @@ -1387,7 +1391,6 @@ function readMoreProbes(this) result (res) filtered_size = 0 do i=1, size(ps) - fieldLbl = this%getStrAt(ps(i)%p, J_FIELD, default=J_FIELD_ELECTRIC) if (isMoreProbe(ps(i)%p)) then filtered_size = filtered_size + 1 end if @@ -1396,7 +1399,6 @@ function readMoreProbes(this) result (res) n = 1 allocate(res%collection(filtered_size)) do i=1, size(ps) - fieldLbl = this%getStrAt(ps(i)%p, J_FIELD, default=J_FIELD_ELECTRIC) if (isMoreProbe(ps(i)%p)) then probeLbl = this%getStrAt(ps(i)%p, J_TYPE, default=J_FIELD_ELECTRIC) if (probeLbl == J_PR_TYPE_POINT) then @@ -1412,14 +1414,15 @@ function readMoreProbes(this) result (res) res%length = size(res%collection) res%length_max = size(res%collection) do i=1, size(res%collection) - if (size(res%collection(i)%cordinates) > res%len_cor_max) then - res%len_cor_max = size(res%collection(i)%cordinates) + if (size(res%collection(i)%cordinates) > res%len_cor_max) then + res%len_cor_max = size(res%collection(i)%cordinates) end if end do contains logical function isMoreProbe(p) type(json_value), pointer :: p - isMoreProbe = isPointProbe(p) .or. isLineProbe(p) + isMoreProbe = isPointProbe(p) & + .or. isLineProbe(p) end function logical function isLineProbe(p) @@ -1429,7 +1432,7 @@ logical function isLineProbe(p) logical function isPointProbe(p) type(json_value), pointer :: p - character (len=:), allocatable :: typeLabel, fieldLabel + character(len=:), allocatable :: typeLabel, fieldLabel logical :: found typeLabel = this%getStrAt(p, J_TYPE, found=found) @@ -1454,7 +1457,7 @@ function readLineProbe(p) result (res) type(MasSonda_t) :: res type(json_value), pointer :: p integer :: i - character (len=:), allocatable :: outputName + character(len=:), allocatable :: outputName type(linel_t), dimension(:), allocatable :: linels type(polyline_t) :: polyline @@ -1505,7 +1508,7 @@ function readPointProbe(p) result (res) type(json_value), pointer :: p, dirLabelPtr character(len=1), dimension(:), allocatable :: dirLabels integer :: i, j, k - character (len=:), allocatable :: typeLabel, fieldLabel, outputName, dirLabel + character(len=:), allocatable :: typeLabel, fieldLabel, outputName, dirLabel type(pixel_t) :: pixel integer, dimension(:), allocatable :: elemIds @@ -1545,9 +1548,9 @@ function readPointProbe(p) result (res) allocate(res%cordinates(size(dirLabels))) do j = 1, size(dirLabels) res%cordinates(j)%tag = outputName - res%cordinates(j)%Xi = int (pixel%cell(1)) - res%cordinates(j)%Yi = int (pixel%cell(2)) - res%cordinates(j)%Zi = int (pixel%cell(3)) + res%cordinates(j)%Xi = int(pixel%cell(1)) + res%cordinates(j)%Yi = int(pixel%cell(2)) + res%cordinates(j)%Zi = int(pixel%cell(3)) res%cordinates(j)%Or = strToFieldType(fieldLabel, dirLabels(j)) end do end select @@ -1593,9 +1596,9 @@ subroutine setDomain(res, domain) end subroutine function strToFieldType(fieldLabel, dirLabel) result(res) - integer (kind=4) :: res - character (len=:), allocatable, intent(in) :: fieldLabel - character (len=1), intent(in), optional :: dirLabel + integer(kind=4) :: res + character(len=:), allocatable, intent(in) :: fieldLabel + character(len=1), intent(in), optional :: dirLabel select case (fieldLabel) case (J_FIELD_ELECTRIC) if (.not. present(dirLabel)) then @@ -1723,7 +1726,7 @@ subroutine setDomain(res, domain) else res%fileNormalize = " " end if - res%type2 = domain%type2 + res%type2 = domain%type2 if (domain%isLogarithmicFrequencySpacing) then call appendLogSufix(res%outputrequest) @@ -1798,7 +1801,7 @@ function readVolProbe(p) result(res) else component = J_DIR_M res%cordinates(1)%Or = buildVolProbeType(fieldType, component) - endif + end if res%len_cor = size(res%cordinates) res%outputrequest = trim(adjustl(this%getStrAt(p, J_NAME, default=" "))) @@ -1871,7 +1874,7 @@ subroutine setDomain(res, domain) subroutine appendLogSufix(fn) character(len=BUFSIZE), intent(inout) :: fn - character (len=*), parameter :: SMBJSON_LOG_SUFFIX = "_log_" + character(len=*), parameter :: SMBJSON_LOG_SUFFIX = "_log_" fn = trim(fn) // SMBJSON_LOG_SUFFIX end subroutine @@ -1895,7 +1898,7 @@ function readThinSlots(this) result (res) end do contains function readThinSlot(mA) result(res) - type (materialAssociation_t), intent(in) :: mA + type(materialAssociation_t), intent(in) :: mA type(ThinSlot_t) :: res type(coords_t), dimension(:), pointer :: cs type(json_value_ptr_t) :: mat @@ -2043,7 +2046,7 @@ function readThinWire(cable) result(res) type(ThinWire_t) :: res type(materialAssociation_t), intent(in) :: cable - character (len=:), allocatable :: entry + character(len=:), allocatable :: entry type(json_value), pointer :: je, je2 integer :: i logical :: found @@ -2058,12 +2061,14 @@ function readThinWire(cable) result(res) res%res = resistance res%ind = inductance res%dispfile = trim(adjustl(" ")) + res%dispfile_LeftEnd = trim(adjustl(" ")) + res%dispfile_RightEnd = trim(adjustl(" ")) end block block type(json_value_ptr_t) :: terminal type(thinwiretermination_t) :: term - character (len=:), allocatable :: label + character(len=:), allocatable :: label terminal = this%matTable%getId(cable%initialTerminalId) term = readThinWireTermination(terminal%p) res%tl = term%terminationType @@ -2219,7 +2224,7 @@ function readGeneratorOnThinWire(linels, plineElemIds) result(res) res(position)%srctype = F_SOURCE_VOLTAGE case (J_FIELD_CURRENT) res(position)%srctype = F_SOURCE_CURRENT - case default + case default call WarnErrReport('Field block of source of type generator must be current or voltage', .true.) end select res(position)%srcfile = this%getStrAt(genSrcs(i)%p, J_SRC_MAGNITUDE_FILE) @@ -2235,11 +2240,11 @@ function orientFieldFromGenerator(linels, position) result(res) integer, intent(in) :: position integer :: res if (position == 1) then - res = sign(1, linels(position)%orientation) - else if (position == size(linels)) then - res = -sign(1, linels(position)%orientation) + res = sign(1,linels(position)%orientation) + else if (position == size(linels)) then + res = -sign(1,linels(position)%orientation) else - res = sign(1, linels(position)%orientation) + res = sign(1,linels(position)%orientation) end if end function @@ -2265,7 +2270,7 @@ function findSourcePositionInLinels(srcElemIds, linels) result(res) function readThinWireTermination(terminal) result(res) type(thinwiretermination_t) :: res type(json_value), pointer :: terminal, tms, tm - character (len=:), allocatable :: label + character(len=:), allocatable :: label logical :: found call this%core%get(terminal, J_MAT_TERM_TERMINATIONS, tms, found) @@ -2306,7 +2311,7 @@ function readThinWireTermination(terminal) result(res) end function function strToTerminationType(label) result(res) - character (len=:), allocatable, intent(in) :: label + character(len=:), allocatable, intent(in) :: label integer :: res select case (label) case (J_MAT_TERM_TYPE_OPEN) @@ -2397,10 +2402,12 @@ subroutine setDomainOfWireProbe(res, domain) else res%filename = " " end if - res%type1 = domain%type1 + res%type1 = domain%type1 res%type2 = domain%type2 - if (domain%isLogarithmicFrequencySpacing) call appendLogSufix(res%outputrequest) + if (domain%isLogarithmicFrequencySpacing) then + call appendLogSufix(res%outputrequest) + end if end subroutine function getSegmentNdWhichMatchesCoord(coordId, probe_coord) result(nd_index) @@ -2455,7 +2462,7 @@ function getDomain(this, place, path) result(res) integer :: numberOfFrequencies type(json_value), pointer :: domain - character (len=:), allocatable :: fn, domainType, freqSpacing + character(len=:), allocatable :: fn, domainType, freqSpacing logical :: found, transferFunctionFound real :: val @@ -2468,7 +2475,7 @@ function getDomain(this, place, path) result(res) fn = this%getStrAt(domain, J_PR_DOMAIN_MAGNITUDE_FILE, transferFunctionFound, default=" ") if (transferFunctionFound) then res%filename = trim(adjustl(fn)) - endif + end if res%type1 = NP_T1_PLAIN @@ -2478,6 +2485,16 @@ function getDomain(this, place, path) result(res) res%tstart = this%getRealAt(domain, J_PR_DOMAIN_TIME_START, default=0.0_RKIND) res%tstop = this%getRealAt(domain, J_PR_DOMAIN_TIME_STOP, default=0.0_RKIND) res%tstep = this%getRealAt(domain, J_PR_DOMAIN_TIME_STEP, default=0.0_RKIND) + if (res%tstart < 0 .or. res%tstop <0 .or. res%tstep < 0) then + block + character(len=BUFSIZE) :: errorMsg + character(len=:), allocatable :: p_name + logical :: nameFound + p_name = this%getStrAt(place, J_NAME, found=nameFound) + write(errorMsg, *) "Probe named ", p_name, " has negative times in its domain definition" + call WarnErrReport(errorMsg, .true.) + end block + end if res%fstart = this%getRealAt(domain, J_PR_DOMAIN_FREQ_START, default=0.0_RKIND) res%fstop = this%getRealAt(domain, J_PR_DOMAIN_FREQ_STOP, default=0.0_RKIND) @@ -2486,7 +2503,7 @@ function getDomain(this, place, path) result(res) res%fstep = 0.0_RKIND else res%fstep = (res%fstop - res%fstart) / numberOfFrequencies - endif + end if freqSpacing = & this%getStrAt(domain, J_PR_DOMAIN_FREQ_SPACING, default=J_PR_DOMAIN_FREQ_SPACING_LINEAR) @@ -2499,8 +2516,8 @@ function getDomain(this, place, path) result(res) contains function getNPDomainType(typeLabel, hasTransferFunction) result(res) - integer (kind=4) :: res - character (len=:), intent(in), allocatable :: typeLabel + integer(kind=4) :: res + character(len=:), intent(in), allocatable :: typeLabel logical, intent(in) :: hasTransferFunction logical :: isTime, isFrequency character(BUFSIZE) :: errorMsg @@ -2551,10 +2568,10 @@ function parseMaterialAssociation(this, matAss) result(res) type(json_value), pointer, intent(in) :: matAss type(json_value_ptr_t) :: mat type(materialAssociation_t) :: res - character (len=*), parameter :: errorMsgInit = "ERROR reading material association: " + character(len=*), parameter :: errorMsgInit = "ERROR reading material association: " logical :: found logical :: isMultiwire, isWireOrMultiwire - character (len=BUFSIZE) :: errorMsg + character(len=BUFSIZE) :: errorMsg ! Fills material association. res%materialId = this%getIntAt(matAss, J_MATERIAL_ID, found) @@ -2589,7 +2606,7 @@ function parseMaterialAssociation(this, matAss) result(res) if (this%matTable%checkId(res%materialId) /= 0) then write(errorMsg, *) errorMsgInit, "material with id ", res%materialId, " not found." call WarnErrReport(errorMsg, .true.) - endif + end if if (size(res%elementIds) == 0) then write(errorMsg, *) errorMsgInit, J_ELEMENTIDS, "must not be empty." @@ -2653,7 +2670,7 @@ function parseMaterialAssociation(this, matAss) result(res) contains logical function isMaterialIdOfType(matId, matType) integer, intent(in) :: matId - character (len=*), intent(in) :: matType + character(len=*), intent(in) :: matType type(json_value_ptr_t) :: mat logical :: materialFound if (this%matTable%checkId(matId) /= 0) then @@ -2665,7 +2682,7 @@ logical function isMaterialIdOfType(matId, matType) end function subroutine showLabelNotFoundError(label) - character (len=*), intent(in) :: label + character(len=*), intent(in) :: label end subroutine end function @@ -2710,10 +2727,12 @@ function getMaterialAssociations(this, materialTypes, elementLabels) result(res) if (present(elementLabels)) then if (isAssociatedWithElementLabel(mAPtr, elementLabels)) then res(j) = this%parseMaterialAssociation(mAPtr) + res(j)%matAssType = trim(materialTypes(k)) j = j+1 end if else res(j) = this%parseMaterialAssociation(mAPtr) + res(j)%matAssType = trim(materialTypes(k)) j = j+1 end if end if @@ -2723,7 +2742,7 @@ function getMaterialAssociations(this, materialTypes, elementLabels) result(res) contains logical function isAssociatedWithMaterial(mAPtr, materialType) type(json_value), pointer, intent(in) :: mAPtr - character (len=*), intent(in) :: materialType + character(len=*), intent(in) :: materialType type(materialAssociation_t) :: matAss type(json_value_ptr_t) :: mat @@ -2735,8 +2754,8 @@ logical function isAssociatedWithMaterial(mAPtr, materialType) logical function isAssociatedWithElementLabel(mAPtr, elementLabels) type(json_value), pointer, intent(in) :: mAPtr - character (len=*), intent(in) :: elementLabels(:) - character (len=:), allocatable :: trimmedLabel + character(len=*), intent(in) :: elementLabels(:) + character(len=:), allocatable :: trimmedLabel character(len=20) :: elementLabel type(materialAssociation_t) :: matAss type(json_value_ptr_t) :: elm @@ -2777,7 +2796,7 @@ function buildTagName(this, matId, elementId) result(res) character(len=BUFSIZE) :: res character(len=:), allocatable :: matName, layerName logical :: found - character (len=BUFSIZE) :: errorMsg + character(len=BUFSIZE) :: errorMsg block type(json_value_ptr_t) :: mat @@ -2808,8 +2827,8 @@ function buildTagName(this, matId, elementId) result(res) res = trim(matName // '@' // layerName) contains subroutine checkIsValidName(str) - character (len=:), allocatable, intent(in) :: str - character (len=*), parameter :: notAllowedChars = '@' + character(len=:), allocatable, intent(in) :: str + character(len=*), parameter :: notAllowedChars = '@' integer :: i do i = 1, len((notAllowedChars)) if (index(str, notAllowedChars(i:i)) /= 0) then @@ -2821,8 +2840,8 @@ subroutine checkIsValidName(str) end subroutine function adaptName(str) result(res) - character (len=:), allocatable, intent(in) :: str - character (len=:), allocatable :: res + character(len=:), allocatable, intent(in) :: str + character(len=:), allocatable :: res integer :: i res = trim(adjustl(str)) do i = 1, len(res) @@ -4694,7 +4713,7 @@ function getLogicalAt(this, place, path, found, default) result(res) found = localFound else call handleFoundAndDefault(path, localFound, present(default)) - endif + end if end function @@ -4712,7 +4731,7 @@ function getIntAt(this, place, path, found, default) result(res) found = localFound else call handleFoundAndDefault(path, localFound, present(default)) - endif + end if end function function getIntsAt(this, place, path, found) result(res) @@ -4728,7 +4747,7 @@ function getIntsAt(this, place, path, found) result(res) found = localFound else call handleFoundAndDefault(path, localFound, .false.) - endif + end if end function function getRealAt(this, place, path, found, default) result(res) @@ -4745,7 +4764,7 @@ function getRealAt(this, place, path, found, default) result(res) found = localFound else call handleFoundAndDefault(path, localFound, present(default)) - endif + end if end function function getRealsAt(this, place, path, found) result(res) @@ -4761,7 +4780,7 @@ function getRealsAt(this, place, path, found) result(res) found = localFound else call handleFoundAndDefault(path, localFound, .false.) - endif + end if end function function getMatrixAt(this, place, path, found) result(res) @@ -4779,7 +4798,7 @@ function getMatrixAt(this, place, path, found) result(res) found = localFound else call handleFoundAndDefault(path, localFound, .false.) - endif + end if call this%core%info(matrix, vartype, nr) allocate(res(nr,nr)) @@ -4793,12 +4812,12 @@ function getMatrixAt(this, place, path, found) result(res) function getStrAt(this, place, path, found, default) result(res) - character (len=:), allocatable :: res + character(len=:), allocatable :: res class(parser_t) :: this type(json_value), pointer :: place character(len=*) :: path logical, intent(out), optional :: found - character (len=*), optional :: default + character(len=*), optional :: default logical :: localFound call this%core%get(place, path, res, localFound, default) @@ -4806,7 +4825,7 @@ function getStrAt(this, place, path, found, default) result(res) found = localFound else call handleFoundAndDefault(path, localFound, present(default)) - endif + end if end function function existsAt(this, place, path) result(res) @@ -4830,10 +4849,10 @@ function jsonValueFilterByKeyValues(this, srcs, key, values) result (res) type(json_value_ptr_t), dimension(:), allocatable :: res type(json_value), pointer :: srcs - character (kind=JSON_CK, len=*) :: key - character (kind=JSON_CK, len=*), dimension(:) :: values + character(kind=JSON_CK, len=*) :: key + character(kind=JSON_CK, len=*), dimension(:) :: values - type(json_value_ptr_t), dimension (:), allocatable :: foundEntries + type(json_value_ptr_t), dimension(:), allocatable :: foundEntries integer :: i, lastEntry, nEntries allocate(res(0)) @@ -4848,12 +4867,12 @@ function jsonValueFilterByKeyValues(this, srcs, key, values) result (res) function jsonValueFilterByKeyValue(this, place, key, value) result (res) class(parser_t) :: this type(json_value_ptr_t), allocatable :: res(:) - character (kind=JSON_CK, len=*) :: key, value + character(kind=JSON_CK, len=*) :: key, value type(json_value), pointer :: place, src - character (kind=JSON_CK, len=:), allocatable :: typeStr + character(kind=JSON_CK, len=:), allocatable :: typeStr integer :: i, j, n logical :: found - character (len=BUFSIZE) :: errorMsg + character(len=BUFSIZE) :: errorMsg ! Precounting. n = 0 @@ -4897,6 +4916,11 @@ function getSingleVolumeInElementsIds(this, pw) result (res) allocate(res(0)) return end if + if (size(elemIds) == 0) then + call WarnErrReport("Entity elementIds must not be empty.", .true.) + allocate(res(0)) + return + end if if (size(elemIds) /= 1) then call WarnErrReport("Entity must contain a single elementId.", .true.) allocate(res(0)) @@ -4913,6 +4937,8 @@ function getSingleVolumeInElementsIds(this, pw) result (res) if (size(res) /= 1) then write(errorMsg, *) "Entity must contain a single cell region defining a volume." call WarnErrReport(errorMsg, .true.) + allocate(res(0)) + return end if end function diff --git a/src_json_parser/smbjson_labels.F90 b/src_json_parser/smbjson_labels.F90 index e3914209a..6ea3f9d6c 100644 --- a/src_json_parser/smbjson_labels.F90 +++ b/src_json_parser/smbjson_labels.F90 @@ -1,6 +1,6 @@ module smbjson_labels_m -#ifdef CompileWithSMBJSON +#ifdef CompileWithSMBJSON ! LABELS ! -- common labels character(len=*), parameter :: J_NAME = "name" @@ -31,7 +31,7 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_REL_PERMEABILITY = "relativePermeability" character(len=*), parameter :: J_MAT_ELECTRIC_CONDUCTIVITY = "electricConductivity" character(len=*), parameter :: J_MAT_MAGNETIC_CONDUCTIVITY = "magneticConductivity" - + character(len=*), parameter :: J_MAT_TYPE_PEC = "pec" character(len=*), parameter :: J_MAT_TYPE_PMC = "pmc" character(len=*), parameter :: J_MAT_TYPE_ISOTROPIC = "isotropic" @@ -43,7 +43,7 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_TYPE_UNSHIELDED_MULTIWIRE = "unshieldedMultiwire" character(len=*), parameter :: J_MAT_TYPE_TERMINAL = "terminal" character(len=*), parameter :: J_MAT_TYPE_CONNECTOR = "connector" - + character(len=*), parameter :: J_MAT_WIRE_RADIUS = "radius" character(len=*), parameter :: J_MAT_WIRE_RESISTANCE = "resistancePerMeter" character(len=*), parameter :: J_MAT_WIRE_INDUCTANCE = "inductancePermeter" @@ -56,8 +56,8 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_LUMPED_STARTING_TIME = "startingTime" character(len=*), parameter :: J_MAT_LUMPED_END_TIME = "endTime" character(len=*), parameter :: J_MAT_LUMPED_INDUCTANCE = "inductance" - character(len=*), parameter :: J_MAT_LUMPED_CAPACITANCE = "capacitance" - + character(len=*), parameter :: J_MAT_LUMPED_CAPACITANCE = "capacitance" + character(len=*), parameter :: J_MAT_TERM_TERMINATIONS = "terminations" character(len=*), parameter :: J_MAT_TERM_TYPE_OPEN = "open" character(len=*), parameter :: J_MAT_TERM_TYPE_SHORT = "short" @@ -85,7 +85,7 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_MULTIWIRE_INDUCTANCE = "inductancePerMeter" character(len=*), parameter :: J_MAT_MULTIWIRE_RESISTANCE = "resistancePerMeter" character(len=*), parameter :: J_MAT_MULTIWIRE_CONDUCTANCE = "conductancePerMeter" - + character(len=*), parameter :: J_MAT_MULTIWIRE_MULTIPOLAR_EXPANSION = "multipolarExpansion" ! ME = Multipolar Expansion character(len=*), parameter :: J_MAT_MULTIWIRE_ME_INNER_REGION_BOX = "innerRegionBox" @@ -102,7 +102,7 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_MULTILAYERED_SURF_LAYERS = "layers" character(len=*), parameter :: J_MAT_MULTILAYERED_SURF_THICKNESS = "thickness" - + character(len=*), parameter :: J_MAT_THINSLOT_WIDTH = "width" ! -- materialAssociations @@ -116,7 +116,7 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_ASS_CAB_END_CONN_ID = "endConnectorId" character(len=*), parameter :: J_MAT_ASS_CAB_CONTAINED_WITHIN_ID = "containedWithinElementId" character(len=*), parameter :: J_MAT_ASS_TOTAL_RESISTANCE = "totalResistance" - + ! -- connector character(len=*), parameter :: J_MAT_CONN_RESISTANCES = "resistances" character(len=*), parameter :: J_MAT_CONN_TRANSFER_IMPEDANCES = "transferImpedancesPerMeter" @@ -128,21 +128,21 @@ module smbjson_labels_m character(len=*), parameter :: J_MAT_TRANSFER_IMPEDANCE_POLES = "poles" character(len=*), parameter :: J_MAT_TRANSFER_IMPEDANCE_RESIDUES = "residues" character(len=*), parameter :: J_MAT_TRANSFER_IMPEDANCE_NUMBER_POLES = "numberOfPoles" - + ! -- Mesh and geometry. character(len=*), parameter :: J_MESH = "mesh" - + character(len=*), parameter :: J_GRID = "grid" character(len=*), parameter :: J_COORDINATES = "coordinates" character(len=*), parameter :: J_ELEMENTS = "elements" - + character(len=*), parameter :: J_GRID_NUMBER_OF_CELLS = "numberOfCells" character(len=*), parameter :: J_GRID_STEPS = "steps" character(len=*), parameter :: J_GRID_ORIGIN = "origin" - + character(len=*), parameter :: J_COORDINATE_IDS = "coordinateIds" character(len=*), parameter :: J_COORDINATE_POS = "relativePosition" - + character(len=*), parameter :: J_ELEM_TYPE_NODE = "node" character(len=*), parameter :: J_ELEM_TYPE_POLYLINE = "polyline" character(len=*), parameter :: J_ELEM_TYPE_CELL = "cell" @@ -150,7 +150,7 @@ module smbjson_labels_m character(len=*), parameter :: J_CELL_INTERVALS = "intervals" character(len=*), parameter :: J_CONF_VOLUME_TRIANGLES = "triangles" character(len=*), parameter :: J_CONF_VOLUME_INTERVALS = "intervals" - + character(len=*), parameter :: J_CONF_SUBTYPE_VOLUME = "volume" character(len=*), parameter :: J_CONF_SUBTYPE_SURFACE = "surface" @@ -189,7 +189,7 @@ module smbjson_labels_m ! -- source types character(len=*), parameter :: J_SOURCES = "sources" character(len=*), parameter :: J_SRC_MAGNITUDE_FILE = "magnitudeFile" - + character (len=*), parameter :: J_SRC_TYPE_PW = "planewave" character (len=*), parameter :: J_SRC_TYPE_NS = "nodalSource" character (len=*), parameter :: J_SRC_TYPE_GEN = "generator" @@ -209,14 +209,14 @@ module smbjson_labels_m ! --- probe types character(len=*), parameter :: J_PROBES = "probes" - + character(len=*), parameter :: J_PR_TYPE_POINT = "point" character(len=*), parameter :: J_PR_TYPE_WIRE = "wire" character(len=*), parameter :: J_PR_TYPE_BULK_CURRENT = "bulkCurrent" character(len=*), parameter :: J_PR_TYPE_FARFIELD = "farField" character(len=*), parameter :: J_PR_TYPE_MOVIE = "movie" character(len=*), parameter :: J_PR_TYPE_LINE = "line" - + character(len=*), parameter :: J_PR_POINT_DIRECTIONS = "directions" character(len=*), parameter :: J_PR_MOVIE_COMPONENT = "component" @@ -230,7 +230,7 @@ module smbjson_labels_m ! domain stuff character(len=*), parameter :: J_PR_DOMAIN = "domain" character(len=*), parameter :: J_PR_DOMAIN_TYPE = "type" - + character(len=*), parameter :: J_PR_DOMAIN_TYPE_TIME = "time" character(len=*), parameter :: J_PR_DOMAIN_TYPE_FREQ = "frequency" character(len=*), parameter :: J_PR_DOMAIN_TYPE_TIMEFREQ = "timeFrequency" @@ -240,7 +240,7 @@ module smbjson_labels_m character(len=*), parameter :: J_PR_DOMAIN_TIME_START = "initialTime" character(len=*), parameter :: J_PR_DOMAIN_TIME_STOP = "finalTime" character(len=*), parameter :: J_PR_DOMAIN_TIME_STEP = "samplingPeriod" - + character(len=*), parameter :: J_PR_DOMAIN_FREQ_START = "initialFrequency" character(len=*), parameter :: J_PR_DOMAIN_FREQ_STOP = "finalFrequency" character(len=*), parameter :: J_PR_DOMAIN_FREQ_NUMBER = "numberOfFrequencies" diff --git a/src_main_pub/fdetypes.F90 b/src_main_pub/fdetypes.F90 index ed65de76f..6c013fd75 100755 --- a/src_main_pub/fdetypes.F90 +++ b/src_main_pub/fdetypes.F90 @@ -1,5 +1,5 @@ - + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! This module contains the types and parameters shared by all the rest of the modules ! No public variables are defined. Only types and parameters @@ -11,13 +11,13 @@ module FDETYPES_m use omp_lib #endif - -#ifdef CompileWithReal16 + +#ifdef CompileWithReal16 #undef CompileWithReal8 #undef CompileWithReal4 #endif -#ifdef CompileWithReal8 +#ifdef CompileWithReal8 #undef CompileWithReal16 #undef CompileWithReal4 #endif @@ -56,7 +56,7 @@ module FDETYPES_m integer(kind=4) :: quienmpi,tamaniompi integer(kind=4) :: SUBCOMM_MPI -!240424 para que funcionen las sondas slice de conformal lo pongo como general. niapaa. algun dia hay que reahacer el conformal +!240424 para que funcionen las sondas slice de conformal lo pongo como general. niapaa. algun dia hay que reahacer el conformal !y esto debe desaparecer integer(kind=4) :: SUBCOMM_MPI_conformal_probes,MPI_conformal_probes_root !!! @@ -66,8 +66,8 @@ module FDETYPES_m integer(kind=8), parameter :: MaxProbes=150000 !Maximum number of probes (a limit of 200000 is set with ulimit in Linux) ! ! - integer, parameter :: topCPUtime=10000000 !maximum cpu time in minutes - !size of character strings + integer, parameter :: topCPUtime=10000000 !maximum cpu time in minutes + !size of character strings integer, parameter :: BUFSIZE=1024 integer, parameter :: BUFSIZE_LONG=16384 !!!integer :: maxmessages=20000 !numero maximo mensajes para alocatear en MPI overrideable con -maxmessages y quitado como parameter fijo !deprecated 07/03/15 @@ -121,7 +121,7 @@ module FDETYPES_m #else !default integer(kind=2), parameter :: RKIND=SINGLE - integer(kind=2), parameter :: RKIND_wires=DOUBLE !020719 a peticion + integer(kind=2), parameter :: RKIND_wires=DOUBLE !020719 a peticion integer(kind=2), parameter :: RKIND_tiempo=DOUBLE !! integer(kind=2), parameter :: CKIND=SINGLE integer(kind=2), parameter :: CKIND=DOUBLE !LOS COMPLEJOS LOS VOY A MANEJAR SIEMPRE EN DOBLE PRECISION como minimo @@ -194,13 +194,13 @@ module FDETYPES_m real(kind=RKIND), parameter :: MU_VACUUM = & 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 real(kind=rkind), parameter :: c_vacuum = 1.0_RKIND/sqrt(EPSILON_VACUUM*MU_VACUUM) - + real(kind=RKIND_tiempo) :: dt0 !aqui para OLDrlo accesible en resume pscale - + integer(kind=4), parameter :: FACE_X = 1 integer(kind=4), parameter :: FACE_Y = 2 integer(kind=4), parameter :: FACE_Z = 3 - + integer(kind=4), parameter :: EDGE_X = 1 integer(kind=4), parameter :: EDGE_Y = 2 integer(kind=4), parameter :: EDGE_Z = 3 @@ -209,15 +209,15 @@ module FDETYPES_m character(len=*), parameter :: F_SOURCE_VOLTAGE = 'VOLT' character(len=*), parameter :: F_SOURCE_CURRENT = 'CURR' - + #ifdef CompileWithReal4 character(len=*), parameter :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 #else #ifdef CompileWithReal8 - character(len=*), parameter :: fmt='(12(e27.17e3))' !IEEE 754 single-precision 15 to 17 decimals -#else + character(len=*), parameter :: fmt='(12(e27.17e3))' !IEEE 754 single-precision 15 to 17 decimals +#else #ifdef CompileWithReal16 - character(len=*), parameter :: fmt='(12(e46.36e3))' !IEEE 754 single-precision 33 to 36 decimals + character(len=*), parameter :: fmt='(12(e46.36e3))' !IEEE 754 single-precision 33 to 36 decimals #else !default character(len=*), parameter :: fmt='(e27.17e3,11(e19.9e3))' !IEEE 754 single-precision 6 to 9 decimals -1.123456789E-001 #endif @@ -268,7 +268,7 @@ module FDETYPES_m NodalH , & MagneticMedia, PMLMagneticMedia, & MTLNbundles - contains + contains procedure :: reset => logic_reset end type @@ -290,7 +290,7 @@ module FDETYPES_m type XYZlimit_t integer(kind=4) :: XI,XE,YI,YE,ZI,ZE end type - type XYZlimit_scaled_t + type xyzlimit_scaled_t integer(kind=4) :: XI,XE,YI,YE,ZI,ZE real(kind=RKIND) :: xc,yc,zc integer(kind=4) :: Or !to include possible orientations (nodal sources 180915) @@ -344,13 +344,12 @@ module FDETYPES_m type(fichevol_wires_t) :: Fichero real(kind=RKIND_wires) :: Resistance real(kind=RKIND_wires) :: Multiplier - logical :: soft integer(kind=4) :: i,j,k end type type :: NodalSource_t type(fichevol_t) :: Fichero - type(XYZlimit_scaled_t), pointer, dimension(:) :: punto + type(xyzlimit_scaled_t), pointer, dimension(:) :: punto integer(kind=4) :: numpuntos logical :: IsInitialValue logical :: IsHard @@ -371,7 +370,7 @@ module FDETYPES_m logical :: orientadoalreves end type oriented_point_t -#ifdef CompileWithMTLN +#ifdef CompileWithMTLN type :: Multiwires_t end type #endif @@ -404,14 +403,14 @@ module FDETYPES_m ! integer(kind=4) :: LextremoI,LextremoJ,LextremoK,RextremoI,RextremoJ,RextremoK !no ncesario: yo luego calculo bien los extremos integer(kind=4) :: LeftEnd,RightEnd end type Wires_t - + type :: SlantedNode_t integer(kind=4) :: index real(kind=RKIND_wires) :: x, y, z logical :: VsourceExists, IsourceExists type(source_t), pointer :: Vsource, Isource end type SlantedNode_t - + type :: SlantedWires_t real(kind=RKIND_wires) :: radius,R,L,C,P_R,P_L,P_C type(WireDispersiveParams_t), allocatable, dimension(:) :: disp @@ -433,7 +432,7 @@ module FDETYPES_m integer(kind=4) :: Orient = 0 !orientation +iEx, -iEx,+iEy....... !deprecado 201222 real(kind=RKIND_wires) :: epr,mur,sigma,sigmam real(kind=RKIND_wires) :: R,L,C,DiodB,DiodIsat,Rtime_on,Rtime_off - logical :: resistor , inductor , capacitor , diodo + logical :: resistor , inductor , capacitor , diodo real(kind=RKIND_wires) ::R_devia,L_devia,C_devia end type Lumped_t !!! @@ -445,7 +444,7 @@ module FDETYPES_m type :: Multiport_t integer(kind=4) :: Multiportdir = 0 !orientation +iEx, -iEx,+iEy....... character(len=BUFSIZE) :: multiportFileZ11,multiportFileZ22,multiportFileZ12,multiportFileZ21 - real(kind=rkind), dimension( : ), pointer :: epr,mur,sigma,sigmam,width + real(kind=rkind), dimension( : ), pointer :: epr,mur,sigma,sigmam,width !_for_devia 090519 real(kind=rkind), dimension( : ), pointer :: epr_devia,mur_devia,sigma_devia,sigmam_devia,width_devia !!! @@ -467,7 +466,7 @@ module FDETYPES_m integer(kind=4) :: esqx1,esqy1,esqz1,esqx2,esqy2,esqz2 type(fichevol_t) :: Fichero integer(kind=4) :: nummodes - logical :: isRC + logical :: isRC end type planeonde_t ! type :: Border_t @@ -516,7 +515,7 @@ module FDETYPES_m integer(kind=4) :: XI,YI,ZI,XE,YE,ZE,What,Node !los valores finales XE,YE,ZE solo se precisan para las CurrentProbes integer(kind=4) :: Xtrancos,Ytrancos,Ztrancos type(direction_t), dimension(:), allocatable :: line - + end type observable_t ! type :: Obses_t @@ -714,12 +713,12 @@ module FDETYPES_m integer(kind=INTEGERSIZEOFMEDIAMATRICES) , allocatable , dimension(:,:,:) :: sggMiNo,sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz integer(kind=IKINDMTAG) , allocatable , dimension(:,:,:) :: sggMtag end type - + type :: constants_t real(kind=rkind), pointer, dimension( : ) :: g1,g2,gM1,gM2 contains - procedure :: destroy => constants_destroy + procedure :: destroy => constants_destroy end type @@ -741,29 +740,29 @@ module FDETYPES_m ! variables for timestepping solver control type :: sim_control_t - logical :: simu_devia, resume,saveall,makeholes,& - connectendings,isolategroupgroups,createmap, & - groundwires,noSlantedcrecepelo, & - mibc,ADE,conformalskin,sgbc, sgbcDispersive, sgbccrank, & - NOcompomur,strictOLD,TAPARRABOS, & + logical :: simu_devia, resume,saveall,makeholes,& + connectendings,isolategroupgroups,createmap, & + groundwires,noSlantedcrecepelo, & + mibc,ADE,conformalskin,sgbc, sgbcDispersive, sgbccrank, & + NOcompomur,strictOLD,TAPARRABOS, & noconformalmapvtk, experimentalVideal, & forceresampled, mur_second,MurAfterPML, & stableradholland,singlefilewrite,NF2FFDecim, & fieldtotl,finishedwithsuccess, & permitscaling,mtlnberenger,niapapostprocess, & stochastic, verbose, dontwritevtk, & - use_mtln_wires, resume_fromold, vtkindex,createh5bin,wirecrank,fatalerror + resume_fromold, vtkindex,createh5bin,wirecrank,fatalerror real(kind=8) :: time_desdelanzamiento real(kind=RKIND) :: cfl, attfactorc,attfactorw, alphamaxpar, & alphaOrden, kappamaxpar, mindistwires,sgbcFreq,sgbcresol, maxSourceValue real(kind=rkind_wires) :: factorradius,factordelta - + character(len=BUFSIZE) :: nEntradaRoot, inductance_model,wiresflavor, nresumeable2 character(len=BUFSIZE) :: opcionestotales - - integer(kind=4) :: finaltimestep, flushsecondsFields,flushsecondsData, layoutnumber,& + + integer(kind=4) :: finaltimestep, flushsecondsFields,flushsecondsData, layoutnumber,& mpidir, inductance_order, wirethickness, maxCPUtime, SGBCDepth, precision, num_procs - + type(MedioExtra_t) :: MEDIOEXTRA type(nf2ff_T) :: facesNF2FF @@ -817,7 +816,7 @@ subroutine perform_reset(this) this%postprocess = .false. this%flushXdmf = .false. this%flushVTK = .false. - end subroutine + end subroutine subroutine logic_reset(this) class(logic_control_t) :: this @@ -844,7 +843,7 @@ subroutine logic_reset(this) this%MagneticMedia = .false. this%PMLMagneticMedia= .false. this%MTLNbundles = .false. - end subroutine + end subroutine subroutine setglobal(iu1,iu2) integer(kind=4) :: iu1,iu2 @@ -873,10 +872,10 @@ subroutine set_priorities(prioritizeCOMPOoverPEC,prioritizeISOTROPICBODYoverall, prior_TG =155 !thin Slot has more priority than PEC !!!!!se aniade la opcion -prioritizeCOMPOoverPEC para subir su prioridad y poder simular SIVA (sgg 070815) if (prioritizeTHINWIRE) then - prior_TW = 1500 !cambiado a 231024 y puesto con maxima prioridad. es solo experimental y por visualizacion - else !opcion correcta. lo anterior es solo experimental y por visualizacion - prior_TW = 15 !prioridad del thin-wire por debajo de todos (excepto del background) - end if + prior_TW = 1500 !cambiado a 231024 y puesto con maxima prioridad. es solo experimental y por visualizacion + else !opcion correcta. lo anterior es solo experimental y por visualizacion + prior_TW = 15 !prioridad del thin-wire por debajo de todos (excepto del background) + end if ! prior_pmlbody = prior_TW-1 !el hilo tiene prioridad sobre el pmlbody (prueba HOLD coax sgg 251019) prior_pmlbody = prior_BV+1 !el pml body puede ser penetrado por todo 311019 sgg !!!! @@ -886,18 +885,18 @@ subroutine set_priorities(prioritizeCOMPOoverPEC,prioritizeISOTROPICBODYoverall, prior_CS=prior_PEC-2 !composites has lower than PEC to properly handle junctions PEC-composite !(ss's 210312 mail) end if if (prioritizeISOTROPICBODYoverall) then ! Isotropic body - prior_IB = 200 !SOLO PARA EL CASO DEL SIVA SACAR BOCADOS DE vacio + prior_IB = 200 !SOLO PARA EL CASO DEL SIVA SACAR BOCADOS DE vacio else prior_IB = 20 !EL SUSUAL - end if + end if return - + end subroutine set_priorities - + function taglist_getFaceTag(this, field, i, j, k) result(res) class(taglist_t) :: this - integer(kind=IKINDMTAG) :: res + integer(kind=IKINDMTAG) :: res integer(kind = 4) :: field, i, j, k select case(field) case(iHx) @@ -911,7 +910,7 @@ function taglist_getFaceTag(this, field, i, j, k) result(res) function taglist_getEdgeTag(this, field, i, j, k) result(res) class(taglist_t) :: this - integer(kind=IKINDMTAG) :: res + integer(kind=IKINDMTAG) :: res integer(kind = 4) :: field, i, j, k select case(field) case(iEx) @@ -924,7 +923,7 @@ function taglist_getEdgeTag(this, field, i, j, k) result(res) end function logical function direction_eq(a,b) - class(direction_t), intent(in) :: a,b + class(direction_t), intent(in) :: a,b direction_eq = .true. direction_eq = direction_eq .and. (a%x == b%x) direction_eq = direction_eq .and. (a%y == b%y) diff --git a/src_main_pub/healer.F90 b/src_main_pub/healer.F90 index 7284bf5d4..5712722a6 100755 --- a/src_main_pub/healer.F90 +++ b/src_main_pub/healer.F90 @@ -55,18 +55,6 @@ subroutine SortInitEndWithIncreasingOrder(p) end if end subroutine - ! Similar to CreateConformalPECVolume, but fills only the boundary? Inside (if closed surface) is vacuum/subtrate - ! If open surface, only boundary has to be tagged - ! SUBROUTINE CreateConformalPECSurface (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & - ! & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & - ! & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & - ! & Alloc_iEz_XI, Alloc_iEz_XE, Alloc_iEz_YI, Alloc_iEz_YE, Alloc_iEz_ZI, Alloc_iEz_ZE, Alloc_iHx_XI, Alloc_iHx_XE, & - ! & Alloc_iHx_YI, Alloc_iHx_YE, Alloc_iHx_ZI, Alloc_iHx_ZE, Alloc_iHy_XI, Alloc_iHy_XE, Alloc_iHy_YI, Alloc_iHy_YE, & - ! & Alloc_iHy_ZI, Alloc_iHy_ZE, Alloc_iHz_XI, Alloc_iHz_XE, Alloc_iHz_YI, Alloc_iHz_YE, Alloc_iHz_ZI, Alloc_iHz_ZE, med, & - ! & NumMedia, BoundingBox,indicemedio) - - ! end subroutine - subroutine CreateConformalPECVolume (layoutnumber, Mtag, tags, numertag, MMiEx, MMiEy, MMiEz, MMiHx, & & MMiHy, MMiHz, Alloc_iEx_XI, Alloc_iEx_XE, Alloc_iEx_YI, Alloc_iEx_YE, & & Alloc_iEx_ZI, Alloc_iEx_ZE, Alloc_iEy_XI, Alloc_iEy_XE, Alloc_iEy_YI, Alloc_iEy_YE, Alloc_iEy_ZI, Alloc_iEy_ZE, & @@ -1507,7 +1495,7 @@ subroutine CreateMagneticSurface(layoutnumber, Mtag, tags, numertag, MMiEx, MMiE ! Med%Epr,Med%Mur,Med%Sigma,Med%SigmaM = New Matrices with average and PML constitutive parameters of new media ! Med%Wire,Med%multiport = Same as input but resized accordingly to take into account the increment in NumMedia !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz, SINPML_fullsize, fullsize, BBox, med, NumMedia, Border, MEDIOEXTRA) + subroutine CreatePMLmatrix (layoutnumber, num_procs, sgg,sggMiEx,sggMiEy,sggMiEz,sggMiHx,sggMiHy,sggMiHz, SINPML_fullsize, fullsize, BBox, med, NumMedia, Border, MEDIOEXTRA) ! type(limit_t), dimension(1:6) :: SINPML_fullsize, fullsize !Inputs and Outputs @@ -1527,7 +1515,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM ! Local stuff integer(kind=4), pointer, dimension(:) :: tempo type(MediaData_t), pointer, dimension(:) :: NewMed - INTEGER (KIND=4) :: layoutnumber, SIZE, field, medium, i, j, k, NuevoNumeroMediosConPML + integer(kind=4) :: layoutnumber, num_procs, field, medium, i, j, k, NuevoNumeroMediosConPML integer(kind=4) :: oldNumMedia,oldmed integer(kind=4), dimension(1:6) :: XIPML, XEPML, YIPML, YEPML, ZIPML, ZEPML real(kind=RKIND) :: oldepr,oldmur,oldsigma,oldsigmam,newepr,newmur,newsigma,newsigmam @@ -2207,7 +2195,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2243,7 +2231,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2279,7 +2267,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2315,7 +2303,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2353,7 +2341,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2389,7 +2377,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2425,7 +2413,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2461,7 +2449,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2499,7 +2487,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2535,7 +2523,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2571,7 +2559,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2607,7 +2595,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2649,7 +2637,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2685,7 +2673,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2721,7 +2709,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2757,7 +2745,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2795,7 +2783,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2831,7 +2819,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2867,7 +2855,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2903,7 +2891,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2941,7 +2929,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -2977,7 +2965,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -3013,7 +3001,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -3049,7 +3037,7 @@ SUBROUTINE CreatePMLmatrix (layoutnumber, SIZE, sgg,sggMiEx,sggMiEy,sggMiEz,sggM if (yapuesto) then if ((oldmed /= MEDIOEXTRA%index).and.((newepr /= oldepr).or.(newmur /= oldmur).or. & (newsigma /= oldsigma + MEDIOEXTRA%sigma ).or.(newsigmam /= oldsigmam + MEDIOEXTRA%sigmam))) then - CALL STOPONERROR (layoutnumber,size,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') + call STOPONERROR (layoutnumber,num_procs,'Multilayer corrected PML unsupported. Relaunch without -pmlcorr') end if else sgg%Med(MEDIOEXTRA%index)%epr = oldepr @@ -3110,6 +3098,7 @@ subroutine Readjust (NumMedia, med, NewNumMedia) med(i)%Is%PEC = .FALSE. med(i)%Is%PMC = .FALSE. med(i)%Is%ThinWire = .FALSE. + med(i)%Is%Multiwire = .FALSE. med(i)%Is%SlantedWire = .FALSE. med(i)%Is%EDispersive = .FALSE. med(i)%Is%MDispersive = .FALSE. @@ -3187,4 +3176,4 @@ subroutine AddToShared (campo, i1, j1, k1, Sharedmed, ProPmed, Shared) ! end subroutine ! -END MODULE CreateMatrices_m +end module diff --git a/src_main_pub/nfde_types.F90 b/src_main_pub/nfde_types.F90 index a0fe8aa14..4a1355b81 100755 --- a/src_main_pub/nfde_types.F90 +++ b/src_main_pub/nfde_types.F90 @@ -1,8 +1,8 @@ module NFDETypes_m ! use FDETYPES_m -#ifdef CompileWithMTLN - USE mtln_types_m, ONLY: mtln_t +#ifdef CompileWithMTLN + use mtln_types_m #endif use conformal_types_m ! @@ -14,7 +14,7 @@ module NFDETypes_m ! global variable stochastic ! MATERIALS real(kind=RK), parameter :: SIGMA_PEC = 1e19_RK - real(kind=RK), parameter :: SIGMA_PMC = 1e19_RK + real(kind=RK), parameter :: SIGMA_PMC = 1e19_RK ! PROBES !!!! integer(kind=4), parameter :: NP_T1_PLAIN = 0 @@ -65,8 +65,8 @@ module NFDETypes_m integer(kind=4), parameter :: Dielectric = 24 integer(kind=4), parameter :: PMLbody = 25 ! conformal - INTEGER (KIND=4), PARAMETER :: isVolume = 1 - INTEGER (KIND=4), PARAMETER :: isSurface = 2 + integer(kind=4), parameter :: isVolume = 1 + integer(kind=4), parameter :: isSurface = 2 !------------------------------------------------------------------------------ ! TYPES !------------------------------------------------------------------------------ @@ -100,7 +100,7 @@ module NFDETypes_m integer(kind=4) :: Or = 0 !field orientation nuevo 2015 character(len=BUFSIZE) :: tag end type coords_scaled_t - !-----------------> Material_t Types + !-----------------> Material Types !------------------------------------------------------------------------------ ! Basic constants for materials !------------------------------------------------------------------------------ @@ -128,7 +128,7 @@ module NFDETypes_m type(triangle_t), dimension(:), allocatable :: triangles type(interval_t), dimension(:), allocatable :: intervals character(len=bufsize) :: tag - end type + end type type, public :: ConformalPECRegions_t type(ConformalPECElements_t), dimension(:), pointer :: volumes => null() @@ -314,8 +314,8 @@ module NFDETypes_m real(kind=RK), dimension(:), pointer :: thk_devia ! integer(kind=4) :: nc = 0 - character(len=BUFSIZE) :: files = ' ' - integer(kind=4) :: numcapas + character(len=BUFSIZE) :: files = ' ' + integer(kind=4) :: numcapas end type LossyThinSurface_t !------------------------------------------------------------------------------ ! Locates all the different Comp media found @@ -324,7 +324,7 @@ module NFDETypes_m type(LossyThinSurface_t), dimension(:), pointer :: cs => NULL () integer(kind=4) :: length = 0 integer(kind=4) :: length_max = 0 - INTEGER (KIND=4) :: nC_max = 0 !cota de todos los nc de LossyThinSurface_t + integer(kind=4) :: nC_max = 0 !cota de todos los nc de LossyThinSurface end type LossyThinSurfaces_t !------------------------------------------------------------------------------ ! Component for Thin Wires there is a list of this inside the component @@ -341,8 +341,8 @@ module NFDETypes_m character(len=BUFSIZE) :: tag end type ThinWireComp_t !------------------------------------------------------------------------------ - ! ThinWire_t component that defines the overall properties of the definition - ! of ThinWires_t + ! ThinWire component that defines the overall properties of the definition + ! of ThinWires !------------------------------------------------------------------------------ type, public :: ThinWire_t type(ThinWireComp_t), dimension(:), pointer :: twc => NULL () @@ -393,8 +393,8 @@ module NFDETypes_m character(len=BUFSIZE) :: tag end type SlantedWireComp_t !------------------------------------------------------------------------------ - ! ThinWire_t component that defines the overall properties of the definition - ! of ThinWires_t + ! ThinWire component that defines the overall properties of the definition + ! of ThinWires !------------------------------------------------------------------------------ type, public :: SlantedWire_t type(SlantedWireComp_t), dimension(:), pointer :: swc => NULL () @@ -430,7 +430,7 @@ module NFDETypes_m type(SlantedWire_t), dimension(:), pointer :: sw => NULL () integer(kind=4) :: n_sw = 0 integer(kind=4) :: n_sw_max = 0 - END TYPE SlantedWiresInfo_t + end type !-------------------------------------------------------------------------- ! Component for Thin Slots there is a list of this inside the component ! that defines the whole Thin Slot Reference @@ -445,8 +445,8 @@ module NFDETypes_m character(len=BUFSIZE) :: tag end type ThinSlotComp_t !-------------------------------------------------------------------------- - ! ThinSlot_t component that defines the overall properties of the definition - ! of ThinSlots_t in ORIGINAL + ! ThinSlot component that defines the overall properties of the definition + ! of ThinSlots in ORIGINAL !-------------------------------------------------------------------------- type, public :: ThinSlot_t type(ThinSlotComp_t), dimension(:), pointer :: tgc => NULL () @@ -579,7 +579,7 @@ module NFDETypes_m ! Abstract class which performs the dynamic dispatching !------------------------------------------------------------------------------ type, public :: abstractSonda_t - integer(kind=4) :: n_FarField = 0 + integer(kind=4) :: n_FarField = 0 integer(kind=4) :: n_Electric = 0 integer(kind=4) :: n_Magnetic = 0 integer(kind=4) :: n_NormalElectric = 0 @@ -727,11 +727,11 @@ module NFDETypes_m ! their size is equal to 1 then there is a constant increment. If it is not ! then it will be one for each cell position. !! WARNING - !! Even though, Type MatrizMedios_t defines the total number of cell for each + !! Even though, Type MatrizMedios defines the total number of cell for each !! axis. n[XYZ] defines it too partially. Meaning that if there is a !! constant increment, the pointer will be a scalar. However, when it is !! variable the pointer will have the same size as total[XYZ] in the - !! MatrizMedios_t type and for each vector position the increment for those + !! MatrizMedios type and for each vector position the increment for those !! Cells !------------------------------------------------------------------------------ type Desplazamiento_t @@ -750,13 +750,13 @@ module NFDETypes_m ! Parameters needed for the parser !------------------------------------------------------------------------------ type, public :: Parseador_t - character(len=BUFSIZE) :: switches=' ' + character(len=BUFSIZE) :: switches=' ' ! Basics type(NFDEGeneral_t), pointer :: general => NULL () type(MatrizMedios_t), pointer :: matriz => NULL () type(Desplazamiento_t), pointer :: despl => NULL () type(Frontera_t), pointer :: front => NULL () - ! Materials_t + ! Materials type(Materials_t), pointer :: Mats => NULL () type(PECRegions_t), pointer :: pecRegs => NULL () type(PECRegions_t), pointer :: pmcRegs => NULL () @@ -773,17 +773,17 @@ module NFDETypes_m type(MasSondas_t), pointer :: Sonda => NULL () type(BloqueProbes_t), pointer :: BloquePrb => NULL () type(VolProbes_t), pointer :: VolPrb => NULL () - ! Thin Elements + ! Thin Elements type(ThinWires_t), pointer :: tWires => NULL () type(SlantedWiresInfo_t), pointer :: sWires => NULL () type(ThinSlots_t), pointer :: tSlots => NULL () ! Conformal type(ConformalPECRegions_t), pointer :: conformalRegs => NULL() #ifdef CompileWithMTLN - type(mtln_t), pointer :: mtln => NULL () + type(mtln_t), pointer :: mtln => NULL () #endif end type Parseador_t - + !---> definicion de tipos type, public :: t_linea_t integer(kind=4) :: LEN @@ -791,7 +791,6 @@ module NFDETypes_m end type t_linea_t !---> type, public :: t_NFDE_FILE_t - INTEGER (KIND=4) mpidir !x=1,y=2,z=3 integer(kind=8) :: targ !---> integer(kind=8) :: numero @@ -805,4 +804,4 @@ module NFDETypes_m end module NFDETypes_m - + diff --git a/src_main_pub/preprocess_geom.F90 b/src_main_pub/preprocess_geom.F90 index f505c46e9..ddde55227 100644 --- a/src_main_pub/preprocess_geom.F90 +++ b/src_main_pub/preprocess_geom.F90 @@ -16,7 +16,7 @@ module Preprocess_m use mtln_types_m, only: cable_t, unshielded_multiwire_t #endif use CreateMatrices_m - + use FDETYPES_m use DMMA_m use conformal_m, F_X => FACE_X, F_Y => FACE_Y, F_Z => FACE_Z, E_X => EDGE_X, E_Y => EDGE_Y, E_Z => EDGE_Z @@ -305,7 +305,7 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs media%sggMiHx (:, :, :) = 1 media%sggMiHy (:, :, :) = 1 media%sggMiHz (:, :, :) = 1 - + !planeWaves ! @@ -2950,7 +2950,7 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs sgg%NodalSource(conta1)%fichero%name = trim (adjustl(this%nodsrc%NodalSource(i)%nombre)) sgg%NodalSource(conta1)%isElec = this%nodsrc%NodalSource(i)%isElec sgg%NodalSource(conta1)%IsHard = this%nodsrc%NodalSource(i)%isHard - sgg%NodalSource(conta1)%IsInitialValue = this%nodsrc%NodalSource(i)%IsInitialValue + sgg%NodalSource(conta1)%IsInitialValue = this%nodsrc%NodalSource(i)%IsInitialValue end if ! tama2 = this%nodsrc%NodalSource(i)%n_c1P @@ -3773,9 +3773,9 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJx - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQx end if @@ -3787,9 +3787,9 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJy - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQy end if CASE (iEz) @@ -3798,9 +3798,9 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs sgg%observation(i)%P(sgg%observation(i)%nP)%XI = punto%XI sgg%observation(i)%P(sgg%observation(i)%nP)%YI = punto%YI sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = punto%ZI - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJz - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQz end if end select @@ -3825,9 +3825,9 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs sgg%observation(i)%P(sgg%observation(i)%nP)%XI = floor(this%swires%SW(j1)%SWC(i1)%x) sgg%observation(i)%P(sgg%observation(i)%nP)%YI = floor(this%swires%SW(j1)%SWC(i1)%y) sgg%observation(i)%P(sgg%observation(i)%nP)%ZI = floor(this%swires%SW(j1)%SWC(i1)%z) - if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then + if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_WIRECURRENT) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iJx - else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then + else if (this%Sonda%collection(i)%cordinates(j)%or == NP_COR_CHARGE) then sgg%observation(i)%P(sgg%observation(i)%nP)%What = iQx end if EXIT do_loop_busqueda3 @@ -3881,7 +3881,7 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs end if end do end do do_loop_busquedatg - else if (abs(this%Sonda%collection(i)%cordinates(j)%or) == NP_COR_LINE) then + else if (abs(this%Sonda%collection(i)%cordinates(j)%or) == NP_COR_LINE) then block integer(kind=4) :: line_size, obs_size, idx !intrinsic num_procs function coopted by num_procs global variable... @@ -3894,11 +3894,11 @@ subroutine read_geomData (sgg,media,tag_numbers, fichin, layoutnumber, num_procs sgg%observation(i)%P(obs_size)%line(idx)%x = this%Sonda%collection(i)%cordinates(idx)%Xi sgg%observation(i)%P(obs_size)%line(idx)%y = this%Sonda%collection(i)%cordinates(idx)%Yi sgg%observation(i)%P(obs_size)%line(idx)%z = this%Sonda%collection(i)%cordinates(idx)%Zi - if (this%Sonda%collection(i)%cordinates(idx)%Xe /= -1) then + if (this%Sonda%collection(i)%cordinates(idx)%Xe /= -1) then sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(1, this%Sonda%collection(i)%cordinates(idx)%or) - else if (this%Sonda%collection(i)%cordinates(idx)%Ye /= -1) then + else if (this%Sonda%collection(i)%cordinates(idx)%Ye /= -1) then sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(2, this%Sonda%collection(i)%cordinates(idx)%or) - else if (this%Sonda%collection(i)%cordinates(idx)%Ze /= -1) then + else if (this%Sonda%collection(i)%cordinates(idx)%Ze /= -1) then sgg%observation(i)%P(obs_size)%line(idx)%orientation = sign(3, this%Sonda%collection(i)%cordinates(idx)%or) end if end do @@ -4875,8 +4875,8 @@ subroutine getDifferentEdgeRatios(ratios, conformal_media) do k = 1, ubound(ratios,1) if (eq_ratio(ratios(k), conformal_media(i)%edge_media(j)%ratio, EDGE_RATIO_EQ_TOLERANCE)) isNew = .false. end do - if (isNew) then - block + if (isNew) then + block if (ubound(ratios,1) == 0) then deallocate(ratios) allocate(ratios(1)) @@ -4909,8 +4909,8 @@ subroutine getDifferentFaceRatios(ratios, conformal_media) do k = 1, ubound(ratios,1) if (eq_ratio(ratios(k), conformal_media(i)%face_media(j)%ratio, FACE_RATIO_EQ_TOLERANCE)) isNew = .false. end do - if (isNew) then - block + if (isNew) then + block if (ubound(ratios,1) == 0) then deallocate(ratios) allocate(ratios(1)) @@ -4944,29 +4944,29 @@ subroutine addConformalMedia(sgg, media, conformal_media, edge_ratios, face_rati integer :: i, j call initConformalBoundingBox(sgg,bbox) - if (findloc(edge_ratios, 0.0, 1) /= 0) then + if (findloc(edge_ratios, 0.0, 1) /= 0) then allocate(edge_ratios_no_zero(ubound(edge_ratios,1) - 1)) k = 0 do j = 1, ubound(edge_ratios,1) - if (edge_ratios(j) /= 0) then + if (edge_ratios(j) /= 0) then k = k + 1 edge_ratios_no_zero(k) = edge_ratios(j) end if end do - else + else edge_ratios_no_zero = edge_ratios end if - if (findloc(face_ratios, 0.0, 1) /= 0) then + if (findloc(face_ratios, 0.0, 1) /= 0) then allocate(face_ratios_no_zero(ubound(face_ratios,1) - 1)) k = 0 do j = 1, ubound(face_ratios,1) - if (face_ratios(j) /= 0) then + if (face_ratios(j) /= 0) then k = k + 1 face_ratios_no_zero(k) = face_ratios(j) end if end do - else + else face_ratios_no_zero = face_ratios end if num_media = contamedia @@ -4993,7 +4993,7 @@ subroutine addConformalFaceMedia(sgg, media, conformal_media, num_media, face_ra integer(kind=4), intent(in) :: type integer :: j, k do j = 1, conformal_media%n_faces_media - if (conformal_media%face_media(j)%ratio /= 0) then + if (conformal_media%face_media(j)%ratio /= 0) then face_media = num_media + findloc(face_ratios, conformal_media%face_media(j)%ratio, 1) sgg%Med(face_media)%Is%ConformalPEC = .TRUE. sgg%Med(face_media)%Is%Needed = .TRUE. @@ -5064,7 +5064,7 @@ subroutine addConformalEdgeMedia(sgg, media, conformal_media, num_media, edge_ra real, dimension(3) :: normal do j = 1, conformal_media%n_edges_media - if (conformal_media%edge_media(j)%ratio /= 0) then + if (conformal_media%edge_media(j)%ratio /= 0) then edge_media = num_media + findloc(edge_ratios, conformal_media%edge_media(j)%ratio,1) sgg%Med(edge_media)%Is%ConformalPEC = .TRUE. sgg%Med(edge_media)%Is%Needed = .TRUE. @@ -5123,7 +5123,7 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge real, dimension(3) :: normal do j = 1, conformal_media%n_edges_media - if (conformal_media%edge_media(j)%ratio == 0) then + if (conformal_media%edge_media(j)%ratio == 0) then edge_media = 0 do k = 1, conformal_media%edge_media(j)%size cell(:) = conformal_media%edge_media(j)%edges(k)%cell(:) @@ -5135,28 +5135,28 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge if (side_map%hasKey(key)) then tris = side_map%getTrianglesFromSide(key) normal = getEdgeNormalFromTriangles(tris) - if (normal(2) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then + if (normal(2) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then media%sggMiHz(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2)+1, cell(3)) = edge_media media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media media%sggMiEy(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then + else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then media%sggMiHz(cell(1), cell(2)-1, cell(3)) = edge_media media%sggMiEx(cell(1), cell(2)-1, cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media media%sggMiEy(cell(1), cell(2)-1, cell(3)) = edge_media media%sggMiEy(cell(1)+1, cell(2)-1, cell(3)) = edge_media end if - - if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then + + if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then media%sggMiHy(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)+1) = edge_media media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media media%sggMiEz(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then + else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then media%sggMiHy(cell(1), cell(2), cell(3)-1) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)-1) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media @@ -5170,13 +5170,13 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge if (edge_media == 0 .and. side_map%hasKey(key)) then tris = side_map%getTrianglesFromSide(key) normal = getEdgeNormalFromTriangles(tris) - if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)))%is%conformalPEC) then + if (normal(3) < 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)))%is%conformalPEC) then media%sggMiHx(cell(1), cell(2), cell(3)) = edge_media media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media media%sggMiEy(cell(1), cell(2), cell(3)+1) = edge_media media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media media%sggMiEz(cell(1), cell(2)+1, cell(3)) = edge_media - else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then + else if (normal(3) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2), cell(3)-1))%is%conformalPEC) then media%sggMiHx(cell(1), cell(2), cell(3)-1) = edge_media media%sggMiEy(cell(1), cell(2), cell(3)-1) = edge_media media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media @@ -5184,13 +5184,13 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge media%sggMiEz(cell(1), cell(2)+1, cell(3)-1) = edge_media end if - if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then + if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHz(cell(1), cell(2), cell(3)))%is%conformalPEC) then media%sggMiHz(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2)+1, cell(3)) = edge_media media%sggMiEy(cell(1), cell(2), cell(3)) = edge_media media%sggMiEy(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then + else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHz(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then media%sggMiHz(cell(1)-1, cell(2), cell(3)) = edge_media media%sggMiEx(cell(1)-1, cell(2), cell(3)) = edge_media media%sggMiEx(cell(1)-1, cell(2)+1, cell(3)) = edge_media @@ -5209,20 +5209,20 @@ subroutine addUndetectedBorderFaces(sgg, media, conformal_media, num_media, edge media%sggMiEy(cell(1), cell(2), cell(3)+1) = edge_media media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media media%sggMiEz(cell(1), cell(2)+1, cell(3)) = edge_media - else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then + else if (normal(2) > 0 .and. .not. sgg%med(media%sggMiHx(cell(1), cell(2)-1, cell(3)))%is%conformalPEC) then media%sggMiHx(cell(1), cell(2)-1, cell(3)) = edge_media media%sggMiEy(cell(1), cell(2)-1, cell(3)) = edge_media media%sggMiEy(cell(1), cell(2)-1, cell(3)+1) = edge_media media%sggMiEz(cell(1), cell(2)-1, cell(3)) = edge_media media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media end if - if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then + if (normal(1) < 0 .and. .not. sgg%med(media%sggMiHy(cell(1), cell(2), cell(3)))%is%conformalPEC) then media%sggMiHy(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)) = edge_media media%sggMiEx(cell(1), cell(2), cell(3)+1) = edge_media media%sggMiEz(cell(1), cell(2), cell(3)) = edge_media media%sggMiEz(cell(1)+1, cell(2), cell(3)) = edge_media - else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then + else if (normal(1) > 0 .and. .not. sgg%med(media%sggMiHy(cell(1)-1, cell(2), cell(3)))%is%conformalPEC) then media%sggMiHy(cell(1)-1, cell(2), cell(3)) = edge_media media%sggMiEx(cell(1)-1, cell(2), cell(3)) = edge_media media%sggMiEx(cell(1)-1, cell(2), cell(3)+1) = edge_media @@ -5941,7 +5941,7 @@ subroutine read_limits_nogeom (layoutnumber,num_procs, sgg, fullsize, SINPML_ful sgg%InitialTimeStep = 0 sgg%TimeSteps = this%general%nmax sgg%dt = this%general%dt - + !border !this%BORDER%PROPIEDADESPML(I)%ORDEN no lo considero porque en el interior de mi programa lo pongo (esta a 2 normalmente) sgg%Border%IsBackPEC = .FALSE. @@ -6922,15 +6922,15 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) end if end do #ifdef CompileWithMTLN - block + block class(cable_t), pointer :: ptr do i = 1, this%mtln%n_unsh + this%mtln%n_sh ptr => this%mtln%cables(i)%ptr select type(ptr) type is(unshielded_multiwire_t) numertag = numertag + 1 - end select - if (precounting == 1) then + end select + if (precounting == 1) then select type(ptr) type is(unshielded_multiwire_t) tagtype%tag(numertag) = this%mtln%cables(i)%ptr%tag @@ -6994,11 +6994,11 @@ subroutine cuentatags(this,tagtype,layoutnumber,fichin) end if end do - if (associated(this%conformalRegs%volumes)) then + if (associated(this%conformalRegs%volumes)) then numertag = numertag + 1 if (precounting == 1) tagtype%tag(numertag) = this%conformalRegs%volumes(1)%tag end if - if (associated(this%conformalRegs%surfaces)) then + if (associated(this%conformalRegs%surfaces)) then numertag = numertag + 1 if (precounting == 1) tagtype%tag(numertag) = this%conformalRegs%surfaces(1)%tag end if diff --git a/src_main_pub/semba_fdtd.F90 b/src_main_pub/semba_fdtd.F90 index 9cef18496..19ac1f68e 100755 --- a/src_main_pub/semba_fdtd.F90 +++ b/src_main_pub/semba_fdtd.F90 @@ -5,14 +5,14 @@ module SEMBA_FDTD_m use Getargs_m ! use FDETYPES_m - use Solver_m + use Solver_m use resuming_m !nfde parser stuff - use NFDETypes_m - use nfde_rotate_m + use NFDETypes_m + use nfde_rotate_m -#ifdef CompilePrivateVersion +#ifdef CompilePrivateVersion use ParseadorClass #endif @@ -41,7 +41,7 @@ module SEMBA_FDTD_m ! should eps0 and mu0 be global variables? - type, public :: semba_fdtd_t + type, public :: semba_fdtd_t type(entrada_t) :: l type(tiempo_t) :: time_comienzo real(kind=8) time_desdelanzamiento @@ -64,9 +64,9 @@ module SEMBA_FDTD_m procedure :: end => semba_end procedure :: create_solver => semba_create_solver procedure :: update_after_simulation => semba_update_after_simulation - end type semba_fdtd_t + end type semba_fdtd_t + - contains subroutine semba_init(this, input_flags) @@ -75,7 +75,7 @@ subroutine semba_init(this, input_flags) real(kind=RKIND) :: dtantesdecorregir real(kind=RKIND) :: dxmin,dymin,dzmin,dtlay - + logical :: dummylog,l_auxinput, l_auxoutput, ThereArethinslots logical :: hayinput logical :: lexis @@ -95,8 +95,8 @@ subroutine semba_init(this, input_flags) type(Parseador_t), pointer :: parser type(t_NFDE_FILE_t), pointer :: NFDE_FILE - type(solver_t) :: solver - + type(solver_t) :: solver + #ifdef CompileWithMPI LOGICAL :: fatalerror_aux type(XYZlimit_t), dimension(1:6) :: tempalloc @@ -104,12 +104,12 @@ subroutine semba_init(this, input_flags) integer(kind=4) :: conf_err - call initEntrada(this%l) + call initEntrada(this%l) this%eps0= 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12 this%mu0 = 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6 this%cluz=1.0_RKIND/sqrt(this%eps0*this%mu0) - + call OnPrint #ifdef CompileWithMPI @@ -120,10 +120,10 @@ subroutine semba_init(this, input_flags) this%l%layoutnumber = 0 #endif call setglobal(this%l%layoutnumber,this%l%num_procs) !para crear variables globales con info MPI - + write(this%whoamishort, '(i5)') this%l%layoutnumber + 1 write(this%whoami, '(a,i5,a,i5,a)') '(', this%l%layoutnumber + 1, '/', this%l%num_procs, ') ' - + #ifdef CompileWithMPI call MPI_Barrier(SUBCOMM_MPI,this%l%ierr) #endif @@ -148,12 +148,12 @@ subroutine semba_init(this, input_flags) if (this%l%layoutnumber==0) then my_iostat=0 - 3443 if(my_iostat /= 0) write(*,fmt='(a)',advance='no'), '.' + 3443 if(my_iostat /= 0) write(*,fmt='(a)',advance='no'), '.' open(11, file='SEMBA_FDTD_temp.log',err=3443,iostat=my_iostat,action='write') write (11,*) '!END' CLOSE (11,status='delete') my_iostat=0 - 3447 if(my_iostat /= 0) write(*,fmt='(a)',advance='no'), '.' !!if(my_iostat /= 0) print '(i5,a1,i4,2x,a)',3447,'.',this%l%layoutnumber,'SEMBA_FDTD_temp.log' + 3447 if(my_iostat /= 0) write(*,fmt='(a)',advance='no'), '.' !!if(my_iostat /= 0) print '(i5,a1,i4,2x,a)',3447,'.',this%l%layoutnumber,'SEMBA_FDTD_temp.log' open(11, file='SEMBA_FDTD_temp.log',err=3447,iostat=my_iostat,status='new',action='write') call print_credits(this%l) CLOSE (11) @@ -224,7 +224,7 @@ subroutine semba_init(this, input_flags) end do !fin del semaphoro -#ifdef keeppause +#ifdef keeppause inquire(file='forcestop', EXIST=this%l%forcestop) if (this%l%forcestop) then if (this%l%layoutnumber==0) then @@ -253,9 +253,9 @@ subroutine semba_init(this, input_flags) call MPI_Barrier(SUBCOMM_MPI,this%l%ierr) #endif call get_secnds (this%l%time_out2) - - - if (present(input_flags)) then + + + if (present(input_flags)) then this%l%read_command_line = .false. this%l%chain2 = input_flags this%l%length = len(input_flags) @@ -274,7 +274,7 @@ subroutine semba_init(this, input_flags) open(9, file='launch', FORM='formatted',action='read') READ (9, '(a)') chain3 chain3=trim(adjustl(chain3)) - CLOSE (9) + CLOSE (9) print *,'----> launch input file '//trim(adjustl(chain3)) end if #ifdef CompileWithMPI @@ -285,7 +285,7 @@ subroutine semba_init(this, input_flags) this%l%chain2=trim(adjustl(this%l%chain2))//' '//trim(adjustl(chain3)) call buscaswitchficheroinput(this%l) - + if (status /= 0) then call stoponerror (this%l%layoutnumber, this%l%num_procs, 'Error in searching input file. Correct and remove pause file',.true.); goto 652 @@ -295,10 +295,10 @@ subroutine semba_init(this, input_flags) call print_credits(this%l) #ifdef CompileWithMPI - call initialize_MPI_process(this%l%filefde,this%l%extension) + call initialize_MPI_process(this%l%filefde,this%l%extension) #else #ifdef CompilePrivateVersion - if (trim(adjustl(this%l%extension))=='.nfde') then + if (trim(adjustl(this%l%extension))=='.nfde') then #ifndef CompileWithMTLN NFDE_FILE => cargar_NFDE_FILE (this%l%filefde) #else @@ -321,25 +321,25 @@ subroutine semba_init(this, input_flags) this%l%chain2=trim(adjustl(this%l%chain2)) chaindummy=trim(adjustl(chaindummy)) this%l%length=len(trim(adjustl(chaindummy))) - this%l%chain2=trim(adjustl(chaindummy))//' '//trim(adjustl(this%sgg%extraswitches))//' '//trim(adjustl(this%l%chain2(this%l%length+1:))) + this%l%chain2=trim(adjustl(chaindummy))//' '//trim(adjustl(this%sgg%extraswitches))//' '//trim(adjustl(this%l%chain2(this%l%length+1:))) this%l%chaininput=trim(adjustl(this%l%chain2)) !!!! - call interpreta(this%l,status ) + call interpreta(this%l,status ) this%sgg%nEntradaRoot=trim (adjustl(this%l%nEntradaRoot)) -#ifdef CompileWithMPI +#ifdef CompileWithMPI call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) #endif call nfde_rotate (parser,this%l%mpidir) -#ifdef CompileWithMPI +#ifdef CompileWithMPI call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) #endif -#ifdef CompileWithMTLN - if (parser%general%mtlnProblem) then - call solver%launch_mtln_simulation(parser%mtln, this%l%nEntradaRoot, this%l%layoutnumber) +#ifdef CompileWithMTLN + if (parser%general%mtlnProblem) then + call solver%launch_mtln_simulation(parser%mtln, this%l%nEntradaRoot, this%l%layoutnumber) STOP end if #endif @@ -351,9 +351,9 @@ subroutine semba_init(this, input_flags) inquire(file=trim(adjustl(this%sgg%nEntradaRoot))//'_h5bin.txt',exist=lexis) if (.not.lexis) goto 9083 open(newunit=myunit,file=trim(adjustl(this%sgg%nEntradaRoot))//'_h5bin.txt',form='formatted',err=9083) !lista de todos los .h5bin - do + do read (myunit,'(a)',end=84552) filename_h5bin - call createh5filefromsinglebin(filename_h5bin,this%l%vtkindex) + call createh5filefromsinglebin(filename_h5bin,this%l%vtkindex) print *, 'Processed '//trim(adjustl(filename_h5bin)) end do 84552 close(myunit) @@ -411,7 +411,7 @@ subroutine semba_init(this, input_flags) if (this%l%forcesteps) then this%sgg%TimeSteps = this%l%finaltimestep #ifdef CompileWithMTLN - this%mtln_parsed%number_of_steps = this%l%finaltimestep + this%mtln_parsed%number_of_steps = this%l%finaltimestep #endif else this%l%finaltimestep = this%sgg%TimeSteps @@ -427,7 +427,7 @@ subroutine semba_init(this, input_flags) this%l%finaltimestep=NEWfinaltimestep #endif #ifdef CompileWithMTLN - this%mtln_parsed%number_of_steps = this%l%finaltimestep + this%mtln_parsed%number_of_steps = this%l%finaltimestep #endif if (finaltimestepantesdecorregir/=this%l%finaltimestep) then write(dubuf,*) SEPARADOR//separador//separador @@ -466,10 +466,10 @@ subroutine semba_init(this, input_flags) call stoponerror (this%l%layoutnumber, this%l%num_procs, 'Conformal sgbc not allowed. ') end if #endif - ! + ! end do - - + + if (this%l%thereare_stoch.and.(.not.this%l%chosenyesornostochastic)) then call stoponerror (this%l%layoutnumber, this%l%num_procs, '!STOCH found in .nfde. Specify either -stoch or -nostoch') end if @@ -477,18 +477,18 @@ subroutine semba_init(this, input_flags) if (this%l%hay_slanted_wires) then call stoponerror (this%l%layoutnumber, this%l%num_procs, 'slanted wires without slanted support. Recompile ()') end if -#endif +#endif if (this%l%hay_slanted_wires .AND. ((trim(adjustl(this%l%wiresflavor))/='slanted').AND.(trim(adjustl(this%l%wiresflavor))/='semistructured'))) then call stoponerror (this%l%layoutnumber, this%l%num_procs, 'slanted wires require -this%l%wiresflavor Slanted/semistructured') end if - + !Error abrezanjas y no this%l%resume conformal ThereArethinslots=.FALSE. do jmed=1,this%sgg%NumMedia if (this%sgg%Med(jmed)%Is%ThinSlot) ThereArethinslots=.true. end do - if (this%l%resume.and.this%l%run_with_abrezanjas.and.ThereArethinslots) then + if (this%l%resume.and.this%l%run_with_abrezanjas.and.ThereArethinslots) then call stoponerror (this%l%layoutnumber, this%l%num_procs, 'this%l%resume -r currently unsupported by conformal solver',.true.); statuse=-1; !return end if ! @@ -498,16 +498,16 @@ subroutine semba_init(this, input_flags) write(dubuf,*) SEPARADOR // SEPARADOR // SEPARADOR call print11 (this%l%layoutnumber, dubuf) call print11 (this%l%layoutnumber, 'Solver launched with options:') - write(dubuf,*) this%l%mibc + write(dubuf,*) this%l%mibc call print11 (this%l%layoutnumber, '---> this%l%mibc solver for NIBC multilayer: '//trim(adjustl(dubuf))) - write(dubuf,*) this%l%ade + write(dubuf,*) this%l%ade call print11 (this%l%layoutnumber, '---> this%l%ade solver for ADC multilayer: '//trim(adjustl(dubuf))) - Write(dubuf,*) this%l%sgbc + Write(dubuf,*) this%l%sgbc call print11 (this%l%layoutnumber, '---> sgbc solver for multilayer: '//trim(adjustl(dubuf))) if (this%l%sgbc) then - write(dubuf,*) this%l%sgbcDispersive + write(dubuf,*) this%l%sgbcDispersive call print11 (this%l%layoutnumber, '---> sgbc DISPERSIVE solver for multilayer: '//trim(adjustl(dubuf))) - write(dubuf,*) this%l%sgbccrank + write(dubuf,*) this%l%sgbccrank call print11 (this%l%layoutnumber, '---> sgbc Crank-Nicolson solver for multilayer: '//trim(adjustl(dubuf))) write(dubuf,*) this%l%sgbcdepth call print11 (this%l%layoutnumber, '---> sgbc Depth: '//trim(adjustl(dubuf))) @@ -520,7 +520,7 @@ subroutine semba_init(this, input_flags) call print11 (this%l%layoutnumber, '---> this%l%skindepthpre preprocessing for multilayer: '//trim(adjustl(dubuf))) write(dubuf,*) this%l%flag_conf_sgg call print11 (this%l%layoutnumber, '---> Conformal file external: '//trim(adjustl(dubuf))) - write(dubuf,*) this%l%input_conformal_flag + write(dubuf,*) this%l%input_conformal_flag call print11 (this%l%layoutnumber, '---> Conformal solver: '//trim(adjustl(dubuf))) write(dubuf,*) this%l%run_with_abrezanjas call print11 (this%l%layoutnumber, '---> Conformal thin-gap solver: '//trim(adjustl(dubuf))) @@ -541,12 +541,12 @@ subroutine semba_init(this, input_flags) call print11 (this%l%layoutnumber, '---> Berenger -this%l%mtlnberenger MTLN switch: '//trim(adjustl(dubuf))) end if if (trim(adjustl(this%l%wiresflavor))=='holland') then - write(dubuf,*) this%l%stableradholland + write(dubuf,*) this%l%stableradholland call print11 (this%l%layoutnumber, '---> Holland -this%l%stableradholland automatic correction switch: '//trim(adjustl(dubuf))) end if - write(dubuf,*) this%l%TAPARRABOS + write(dubuf,*) this%l%TAPARRABOS call print11 (this%l%layoutnumber, '---> Thin-wire double-tails removed: '//trim(adjustl(dubuf))) - write(dubuf,*) this%l%fieldtotl + write(dubuf,*) this%l%fieldtotl call print11 (this%l%layoutnumber, '---> Thin-wire -this%l%fieldtotl experimental switch: '//trim(adjustl(dubuf))) write(dubuf,*) SEPARADOR // SEPARADOR // SEPARADOR @@ -556,13 +556,13 @@ subroutine semba_init(this, input_flags) if (this%l%layoutnumber == 0) then call erasesignalingfiles(this%l%simu_devia) end if - + if (this%l%layoutnumber==0) then - + open(newunit=thefileno,FILE = trim(adjustl(this%l%nEntradaRoot))//'_tag_paraviewfilters.txt') - write(thefileno,'(a)') trim(adjustl('### FOR SLICE CURRENT VTK PROBES select the "current_t" or "current_f" ')) - write(thefileno,'(a)') trim(adjustl('### FOR MAP VTK PROBES select the "mediatype" layer ')) - write(thefileno,'(a)') trim(adjustl('### For Paraview versions over 5.10 just use the Threshold exisiting filter to select the interval')) + write(thefileno,'(a)') trim(adjustl('### FOR SLICE CURRENT VTK PROBES select the "current_t" or "current_f" ')) + write(thefileno,'(a)') trim(adjustl('### FOR MAP VTK PROBES select the "mediatype" layer ')) + write(thefileno,'(a)') trim(adjustl('### For Paraview versions over 5.10 just use the Threshold exisiting filter to select the interval')) write(thefileno,'(a)') trim(adjustl('### ######################')) write(thefileno,'(a)') trim(adjustl('### For Paraview versions under 5.10 Copy and paste the next as a programmable filter to select only one interval of tags')) write(thefileno,'(a)') trim(adjustl('import vtk ')) @@ -573,7 +573,7 @@ subroutine semba_init(this, input_flags) write(thefileno,'(a)') trim(adjustl('thresh.SetInputArrayToProcess(0, 0, 0,vtk.vtkDataObject.FIELD_ASSOCIATION_CELLS, "tagnumber") ')) write(thefileno,'(a)') trim(adjustl('thresh.ThresholdBetween(64,127) ')) write(thefileno,'(a)') trim(adjustl('thresh.Update() ')) - write(thefileno,'(a)') trim(adjustl('outp.ShallowCopy(thresh.GetOutput()) ')) + write(thefileno,'(a)') trim(adjustl('outp.ShallowCopy(thresh.GetOutput()) ')) write(thefileno,'(a)') trim(adjustl( '# Replace the thresh.ThresholdBetween numbers by tag intervals below to filter by tags ')) write(thefileno,'(a)') '# ( -1e21 , -1e-3 ) '//trim(adjustl('Candidates for undesired free-space slots')) write(thefileno,'(a,i9,a,i9,a)') '# ( 0 , 63 ) '//trim(adjustl('Nodal sources, etc.')) @@ -581,10 +581,10 @@ subroutine semba_init(this, input_flags) write(thefileno,'(a,i9,a,i9,a)') '# (',i*64,' , ',i*64+63,') '//trim(adjustl(this%tagtype%tag(i))) !los shifteo 6 bits y les sumo 2**campo ! idea de los 3 bits de 151020 end do !! - write(thefileno,'(a)') trim(adjustl( '### ')) - write(thefileno,'(a)') trim(adjustl( '### ')) - write(thefileno,'(a)') trim(adjustl( '### FOR MAP VTK PROBES select the "mediatype" layer ')) - write(thefileno,'(a)') trim(adjustl( '### For Paraview versions over 5.10 just use the Threshold exisiting filter to select the interval')) + write(thefileno,'(a)') trim(adjustl( '### ')) + write(thefileno,'(a)') trim(adjustl( '### ')) + write(thefileno,'(a)') trim(adjustl( '### FOR MAP VTK PROBES select the "mediatype" layer ')) + write(thefileno,'(a)') trim(adjustl( '### For Paraview versions over 5.10 just use the Threshold exisiting filter to select the interval')) write(thefileno,'(a)') trim(adjustl( '### ######################')) write(thefileno,'(a)') trim(adjustl( '### For Paraview versions under 5.10Copy and paste the next as a programmable filter to select only one types of media')) write(thefileno,'(a)') trim(adjustl( 'import vtk ')) @@ -631,9 +631,9 @@ subroutine semba_init(this, input_flags) close(thefileno) end if -contains - subroutine NFDE2sgg - !!!!!!!!! +contains + subroutine NFDE2sgg + !!!!!!!!! real(kind=rkind) :: dt,finaldt logical fatalerror ! parser now holds all the .nfde info @@ -642,7 +642,7 @@ subroutine NFDE2sgg call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) #endif call read_limits_nogeom (this%l%layoutnumber,this%l%num_procs, this%sgg, this%fullsize, this%SINPML_fullsize, parser,this%l%MurAfterPML,this%l%mur_exist) - + dtantesdecorregir=this%sgg%dt dxmin=minval(this%sgg%DX) @@ -742,16 +742,16 @@ subroutine NFDE2sgg call print11 (this%l%layoutnumber, dubuf) call read_geomData (this%sgg,this%media,this%tag_numbers, this%l%fichin, this%l%layoutnumber, this%l%num_procs, this%SINPML_fullsize, this%fullsize, parser, & this%l%groundwires,this%l%attfactorc,this%l%mibc,this%l%sgbc,this%l%sgbcDispersive,this%l%MEDIOEXTRA,this%maxSourceValue,this%l%skindepthpre,this%l%createmapvtk,this%l%input_conformal_flag,this%l%CLIPREGION,this%l%boundwireradius,this%l%maxwireradius,this%l%updateshared,this%l%run_with_dmma, this%eps0, & - this%mu0,.false.,this%l%hay_slanted_wires,this%l%verbose,this%l%ignoresamplingerrors,this%tagtype,this%l%wiresflavor) + this%mu0,.false.,this%l%hay_slanted_wires,this%l%verbose,this%l%ignoresamplingerrors,this%tagtype,this%l%wiresflavor) ! call read_geomData (this%sgg,this%sggMtag,this%tag_numbers, this%sggMiNo,this%sggMiEx,this%sggMiEy,this%sggMiEz,this%sggMiHx,this%sggMiHy,this%sggMiHz, this%l%fichin, this%l%layoutnumber, this%l%num_procs, this%SINPML_fullsize, this%fullsize, parser, & ! this%l%groundwires,this%l%attfactorc,this%l%mibc,this%l%sgbc,this%l%sgbcDispersive,this%l%MEDIOEXTRA,this%maxSourceValue,this%l%skindepthpre,this%l%createmapvtk,this%l%input_conformal_flag,this%l%CLIPREGION,this%l%boundwireradius,this%l%maxwireradius,this%l%updateshared,this%l%run_with_dmma, this%eps0, & ! this%mu0,.false.,this%l%hay_slanted_wires,this%l%verbose,this%l%ignoresamplingerrors,this%tagtype,this%l%wiresflavor) #ifdef CompileWithMTLN - if (trim(adjustl(this%l%extension))=='.json') then + if (trim(adjustl(this%l%extension))=='.json') then this%mtln_parsed = parser%mtln this%mtln_parsed%time_step = this%sgg%dt end if - ! if (trim(adjustl(this%l%extension))=='.json') mtln_solver = mtlnCtor(parser%mtln) + ! if (trim(adjustl(this%l%extension))=='.json') mtln_solver = mtlnCtor(parser%mtln) #endif write(dubuf,*) '[OK] ENDED NFDE --------> GEOM' call print11 (this%l%layoutnumber, dubuf) @@ -777,7 +777,7 @@ subroutine NFDE2sgg end if #endif #endif - ELSE !del this%l%num_procs==1 + ELSE !del this%l%num_procs==1 #ifdef CompileWithMPI call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) #ifdef CompileWithStochastic @@ -785,17 +785,17 @@ subroutine NFDE2sgg call HalvesStochasticMPI(this%l%layoutnumber,this%l%num_procs,this%l%simu_devia) end if #endif - - call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) + + call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) !!!ahora divide el espacio computacional call MPIdivide (this%sgg, this%fullsize, this%SINPML_fullsize, this%l%layoutnumber, this%l%num_procs, this%l%forcing, this%l%forced, this%l%slicesoriginales, this%l%resume,this%l%fatalerror) ! - call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) + call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) if (this%l%fatalerror) then !intenta recuperarte return end if - + ! if the layout is pure PML then take at least a line of non PML to build the PML data insider read_geomDAta ! Uses extra memory but later matrix sggm is deallocated in favor of smaller sggMIEX, etc do field = iEx, iHz @@ -804,8 +804,8 @@ subroutine NFDE2sgg this%sgg%Alloc(field)%ZE = Max (this%sgg%Alloc(field)%ZE, this%SINPML_fullsize(field)%ZI+1) this%sgg%Alloc(field)%ZI = Min (this%sgg%Alloc(field)%ZI, this%SINPML_fullsize(field)%ZE-1) end do - ! - call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) + ! + call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) !!incluido aqui pq se precisa para clip 16/07/15 do field = iEx, iHz this%sgg%SINPMLSweep(field)%XI = Max (this%SINPML_fullsize(field)%XI, this%sgg%Sweep(field)%XI) @@ -817,7 +817,7 @@ subroutine NFDE2sgg end do !!fin 16/07/15 write(dubuf,*) 'INIT NFDE --------> GEOM' - call print11 (this%l%layoutnumber, dubuf) + call print11 (this%l%layoutnumber, dubuf) call read_geomData (this%sgg,this%media,this%tag_numbers, this%l%fichin, this%l%layoutnumber, this%l%num_procs, this%SINPML_fullsize, this%fullsize, parser, & this%l%groundwires,this%l%attfactorc,this%l%mibc,this%l%sgbc,this%l%sgbcDispersive,this%l%MEDIOEXTRA,this%maxSourceValue,this%l%skindepthpre,this%l%createmapvtk,this%l%input_conformal_flag,this%l%CLIPREGION,this%l%boundwireradius,this%l%maxwireradius,this%l%updateshared,this%l%run_with_dmma, & @@ -832,7 +832,7 @@ subroutine NFDE2sgg call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) #endif #ifdef CompileWithMTLN - if (trim(adjustl(this%l%extension))=='.json') then + if (trim(adjustl(this%l%extension))=='.json') then this%mtln_parsed = parser%mtln this%mtln_parsed%time_step = this%sgg%dt end if @@ -877,7 +877,7 @@ subroutine initialize_MPI_process(filename, extension) if (this%l%layoutnumber==0) then #ifdef CompilePrivateVersion - if (trim(adjustl(extension))=='.nfde') then + if (trim(adjustl(extension))=='.nfde') then #ifdef CompileWithMTLN call stoponerror(this%l%layoutnumber, this%l%num_procs, & 'NFDE files are not supported when compiling with MTLN', .true.) @@ -902,7 +902,7 @@ subroutine initialize_MPI_process(filename, extension) call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) ! numeroLineasFichero=NFDE_FILE%numero - call MPI_BCAST(numeroLineasFichero, 1_4, MPI_INTEGER8, 0_4, SUBCOMM_MPI, this%l%ierr) + call MPI_BCAST(numeroLineasFichero, 1_4, MPI_INTEGER8, 0_4, SUBCOMM_MPI, this%l%ierr) if (this%l%layoutnumber/=0) then NFDE_FILE%targ = 1 NFDE_FILE%numero=numeroLineasFichero @@ -923,7 +923,7 @@ subroutine initialize_MPI_process(filename, extension) else longitud4=int(longitud8,4) end if - call MPI_BCAST(NFDE_FILE%lineas(i8),longitud4,mpi_t_linea_t,0_4,SUBCOMM_MPI,this%l%ierr) + call MPI_BCAST(NFDE_FILE%lineas(i8),longitud4,mpi_t_linea_t,0_4,SUBCOMM_MPI,this%l%ierr) call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) end do end subroutine initialize_MPI_process @@ -937,9 +937,9 @@ subroutine data_loader(filename, parsedProblem) write (dubuf,*) 'INIT interpreting geometrical data from ', trim (adjustl(filename)) call print11 (this%l%layoutnumber, dubuf) - - if (trim(adjustl(this%l%extension))=='.nfde') then -#ifdef CompilePrivateVersion + + if (trim(adjustl(this%l%extension))=='.nfde') then +#ifdef CompilePrivateVersion parsedProblem => newparser (NFDE_FILE) ! this%l%mpidir = NFDE_FILE%mpidir this%l%thereare_stoch=NFDE_FILE%thereare_stoch @@ -947,10 +947,10 @@ subroutine data_loader(filename, parsedProblem) print *,'Not compiled with cargaNFDEINDEX' stop #endif - + #ifdef CompileWithSMBJSON elseif (trim(adjustl(this%l%extension))=='.json') then - parsed_t = fdtdjson_parser_t(filename) + parsed_t = fdtdjson_parser_t(filename) allocate(parsedProblem) parsedProblem = parsed_t%readProblemDescription() if (isFatalError()) error stop 1 @@ -961,8 +961,8 @@ subroutine data_loader(filename, parsedProblem) stop end if - write(dubuf,*) '[OK] '//trim(adjustl(this%whoami))//' Parser still working '; call print11(this%l%layoutnumber,dubuf) -#ifdef CompileWithMPI + write(dubuf,*) '[OK] '//trim(adjustl(this%whoami))//' Parser still working '; call print11(this%l%layoutnumber,dubuf) +#ifdef CompileWithMPI call MPI_Barrier (SUBCOMM_MPI, this%l%ierr) #endif return @@ -1040,7 +1040,7 @@ subroutine readLinesFromJSONOneLiner(rInfo, filename, unit) subroutine carga_raw_info (rawFileInfo, filename, extension) character(len=*), intent(in) :: filename, extension type(t_NFDE_FILE_t), pointer :: rawFileInfo - + type(t_linea_t), pointer :: linea LOGICAL :: ok character(len=BUFSIZE) :: l_aux @@ -1064,9 +1064,9 @@ subroutine carga_raw_info (rawFileInfo, filename, extension) CLOSE (UNIT_EF) if (prelines == 1 .and. trim(adjustl(extension))=='.json') then - rawFileInfo%numero = countLinesInJSONOneLiner(filename, UNIT_EF) + rawFileInfo%numero = countLinesInJSONOneLiner(filename, UNIT_EF) call readLinesFromJSONOneLiner(rawFileInfo, filename, UNIT_EF) - else + else rawFileInfo%numero = prelines call readLines(rawFileInfo, filename, UNIT_EF) end if @@ -1085,7 +1085,7 @@ subroutine carga_raw_info (rawFileInfo, filename, extension) end do !update linea%dato = trim (adjustl(linea%dato)) - linea%LEN=len_trim (adjustl(linea%dato)) + linea%LEN=len_trim (adjustl(linea%dato)) end do @@ -1093,16 +1093,16 @@ subroutine carga_raw_info (rawFileInfo, filename, extension) end subroutine carga_raw_info - end subroutine semba_init + end subroutine semba_init function semba_create_solver(this) result (res) class(semba_fdtd_t) :: this type(solver_t) :: res - res = solver_ctor(this%sgg,this%media,this%tag_numbers,& - this%SINPML_fullsize,this%fullsize, & - this%finishedwithsuccess, this%eps0,this%mu0, & - this%tagtype,this%l, this%maxSourceValue, & + res = solver_ctor(this%sgg,this%media,this%tag_numbers,& + this%SINPML_fullsize,this%fullsize, & + this%finishedwithsuccess, this%eps0,this%mu0, & + this%tagtype,this%l, this%maxSourceValue, & this%time_desdelanzamiento) end function @@ -1118,7 +1118,7 @@ subroutine semba_update_after_simulation(this, success, sgg, eps, mu, media) this%mu0 = mu this%media = media end subroutine - + subroutine semba_launch(this) class(semba_fdtd_t) :: this type(solver_t) :: solver @@ -1178,7 +1178,7 @@ end subroutine semba_launch subroutine semba_end(this) class(semba_fdtd_t) :: this character(len=BUFSIZE) :: dubuf - logical :: existe + logical :: existe character(len=BUFSIZE) :: filenombre= ' ' if (this%l%layoutnumber == 0) then @@ -1326,7 +1326,7 @@ subroutine initEntrada(input) input%prefix = ' '; input%fichin = ' '; input%chain2 = ' '; - input%opcionestotales = ' ' + input%opcionestotales = ' ' input%nEntradaRoot = ' '; input%fileFDE = ' '; input%fileH5 = ' ' @@ -1338,7 +1338,7 @@ subroutine initEntrada(input) input%chdummy = ' '; input%flushsecondsFields=0.; input%flushsecondsData=0.; - input%time_end=0. + input%time_end=0. input%existeNFDE=.false.; input%existeh5=.false. input%creditosyaprinteados=.false. diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8cc1ac229..14d38d3dd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -46,7 +46,7 @@ set(HEALER_TESTS_LIBRARY healer_tests) add_subdirectory(sgbc) set(SGBC_TESTS_LIBRARY sgbc_tests) -add_executable(fdtd_tests +add_executable(fdtd_tests "fdtd_tests.cpp" ) diff --git a/test/conformal/test_filling.F90 b/test/conformal/test_filling.F90 index 2f61b7f43..c2b86d5f9 100644 --- a/test/conformal/test_filling.F90 +++ b/test/conformal/test_filling.F90 @@ -30,7 +30,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err allocate(tris(1)) vertices = [c1,c2,c3] tris(1) = triangle_t(vertices) - + allocate(cR%volumes(1)) allocate(cR%volumes(1)%triangles(1)) allocate(cR%volumes(1)%intervals(0)) @@ -46,7 +46,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err if (abs(cM%edge_media(1)%edges(1)%ratio-0.75) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(2)%ratio-0.75) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.75) > 0.01) err = err + 1 - + if (abs(cM%edge_media(2)%ratio - 0.0) > 0.01) err = err + 1 if (size(cM%edge_media(2)%edges) /= 2) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.0) > 0.01) err = err + 1 @@ -74,7 +74,7 @@ integer function test_conformal_filling_off_face_triangle_x() bind(C) result(err if (abs(cM%edge_media(1)%edges(1)%ratio-0.25) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(2)%ratio-0.25) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.25) > 0.01) err = err + 1 - + if (abs(cM%edge_media(2)%ratio - 0.0) > 0.01) err = err + 1 if (size(cM%edge_media(2)%edges) /= 2) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.0) > 0.01) err = err + 1 @@ -205,7 +205,7 @@ integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err if (abs(cM%edge_media(1)%edges(1)%ratio-0.25) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(2)%ratio-0.25) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.25) > 0.01) err = err + 1 - + if (size(cM%edge_media(2)%edges) /= 2) err = err + 1 if (abs(cM%edge_media(2)%ratio - 0.0) > 0.01) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.0) > 0.01) err = err + 1 @@ -235,7 +235,7 @@ integer function test_conformal_filling_off_face_triangle_y() bind(C) result(err if (abs(cM%edge_media(1)%edges(1)%ratio-0.75) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(2)%ratio-0.75) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.75) > 0.01) err = err + 1 - + if (size(cM%edge_media(2)%edges) /= 2) err = err + 1 if (abs(cM%edge_media(2)%ratio - 0.0) > 0.01) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.0) > 0.01) err = err + 1 @@ -301,7 +301,7 @@ integer function test_conformal_filling_off_face_triangle_z() bind(C) result(err if (abs(cM%edge_media(1)%edges(1)%ratio-0.75) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(2)%ratio-0.75) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.75) > 0.01) err = err + 1 - + if (size(cM%edge_media(2)%edges) /= 2) err = err + 1 if (abs(cM%edge_media(2)%ratio - 0.0) > 0.01) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.0) > 0.01) err = err + 1 @@ -329,7 +329,7 @@ integer function test_conformal_filling_off_face_triangle_z() bind(C) result(err if (abs(cM%edge_media(1)%edges(1)%ratio-0.25) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(2)%ratio-0.25) > 0.01) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.25) > 0.01) err = err + 1 - + if (size(cM%edge_media(2)%edges) /= 2) err = err + 1 if (abs(cM%edge_media(2)%ratio - 0.0) > 0.01) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.0) > 0.01) err = err + 1 @@ -368,7 +368,7 @@ integer function test_conformal_filling_open() bind(C) result(err) type(cell_map_t) :: cell_map type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides - + err = 0 c1 = coord_t(position = [0.6,0.0,0.0], id = 1) @@ -403,7 +403,7 @@ integer function test_conformal_filling_open() bind(C) result(err) if (abs(cM%time_step_scale_factor - 0.9055) > 0.01) err = err + 1 end function - + integer function test_conformal_filling_closed() bind(C) result(err) ! /| @@ -429,7 +429,7 @@ integer function test_conformal_filling_closed() bind(C) result(err) type(cell_map_t) :: cell_map type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides - + err = 0 c1 = coord_t(position = [0.6,0.0,0.0], id = 1) @@ -469,7 +469,7 @@ integer function test_conformal_filling_closed() bind(C) result(err) end function - + integer function test_conformal_edge_next_cell() bind(C) result(err) use conformal_m @@ -485,7 +485,7 @@ integer function test_conformal_edge_next_cell() bind(C) result(err) type(cell_map_t) :: cell_map type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides - + err = 0 c1 = coord_t(position = [0.0,0.25,0.0], id = 1) @@ -558,7 +558,7 @@ integer function test_conformal_filling_closed_corner() bind(C) result(err) type(cell_map_t) :: cell_map type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides - + err = 0 c1 = coord_t(position = [0.0,0.0,0.0], id = 1) @@ -616,12 +616,12 @@ integer function test_conformal_filling_closed_corner() bind(C) result(err) integer function test_conformal_filling_block_and_corner() bind(C) result(err) -! 9 +! 9 ! / |\ ! 5______6 -! / | | +! / | | ! / | 10 | -! / | / \| +! / | / \| ! 3______4_/_____ ! | 7______8|______ ! | / | / @@ -641,7 +641,7 @@ integer function test_conformal_filling_block_and_corner() bind(C) result(err) type(cell_map_t) :: cell_map type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides - + err = 0 c1 = coord_t(position = [0.0,0.0,0.0], id = 1) @@ -689,7 +689,7 @@ integer function test_conformal_filling_block_and_corner() bind(C) result(err) if (abs(cM%edge_media(1)%edges(2)%ratio-0.0) > 0.00) err = err + 1 if (abs(cM%edge_media(1)%edges(3)%ratio-0.0) > 0.00) err = err + 1 if (abs(cM%edge_media(1)%edges(4)%ratio-0.0) > 0.00) err = err + 1 - + if (abs(cM%edge_media(2)%ratio - 0.5) > 0.01) err = err + 1 if (size(cM%edge_media(2)%edges) /= 6) err = err + 1 if (abs(cM%edge_media(2)%edges(1)%ratio-0.5) > 0.00) err = err + 1 @@ -747,7 +747,7 @@ integer function test_conformal_filling_cylinder_base_on_grid_plane() bind(C) re type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides - + err = 0 c(1) = coord_t(position = [1.0,0.25,0.0], id = 1) diff --git a/test/conformal/test_geometry.F90 b/test/conformal/test_geometry.F90 index b1871a88e..8ab40ec39 100644 --- a/test/conformal/test_geometry.F90 +++ b/test/conformal/test_geometry.F90 @@ -309,13 +309,13 @@ integer function test_geometry_triangle_normal() bind(C) result(err) type(triangle_t) :: t err = 0 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,0.0,1.0]; t%vertices(3)%position = [0.0,1.0,0.0] if (t%getFace() /= FACE_X) err = err + 1 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,0.0,1.0]; t%vertices(3)%position = [1.0,0.0,0.0] if (t%getFace() /= FACE_Y) err = err + 1 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,1.0,0.0]; t%vertices(3)%position = [1.0,0.0,0.0] if (t%getFace() /= FACE_Z) err = err + 1 @@ -332,19 +332,19 @@ integer function test_geometry_triangle_edges() bind(C) result(err) type(triangle_t) :: t type(side_t), dimension(3) :: sides err = 0 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,0.0,1.0]; t%vertices(3)%position = [0.0,1.0,0.0] sides = t%getSides() if (sides(1)%getEdge() /= EDGE_Z) err = err + 1 if (sides(2)%getEdge() /= NOT_ON_EDGE) err = err + 1 if (sides(3)%getEdge() /= EDGE_Y) err = err + 1 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,0.0,1.0]; t%vertices(3)%position = [1.0,0.0,0.0] sides = t%getSides() if (sides(1)%getEdge() /= EDGE_Z) err = err + 1 if (sides(2)%getEdge() /= NOT_ON_EDGE) err = err + 1 if (sides(3)%getEdge() /= EDGE_X) err = err + 1 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,1.0,0.0]; t%vertices(3)%position = [1.0,0.0,0.0] sides = t%getSides() if (sides(1)%getEdge() /= EDGE_Y) err = err + 1 @@ -368,15 +368,15 @@ integer function test_geometry_triangle_cell() bind(C) result(err) type(side_t), dimension(3) :: sides integer(kind=4), dimension(3) :: cell err = 0 - + t%vertices(1)%position = [0.0,0.0,0.0]; t%vertices(2)%position = [0.0,0.0,1.0]; t%vertices(3)%position = [0.0,1.0,0.0] cell = [0.0,0.0,0.0] if (all(t%getCell() .eq. cell) .eqv. .false.) err = err + 1 - + t%vertices(1)%position = [1.0,0.0,0.0]; t%vertices(2)%position = [1.0,0.0,1.0]; t%vertices(3)%position = [1.0,1.0,0.0] cell = [1.0,0.0,0.0] if (all(t%getCell() .eq. cell) .eqv. .false.) err = err + 1 - + t%vertices(1)%position = [1.0,0.0,1.0]; t%vertices(2)%position = [1.0,0.0,2.0]; t%vertices(3)%position = [1.0,1.0,1.0] cell = [1.0,0.0,1.0] if (all(t%getCell() .eq. cell) .eqv. .false.) err = err + 1 @@ -393,7 +393,7 @@ integer function test_geometry_elements_in_cell() bind(C) result(err) use cell_map_m use geometry_m - implicit none + implicit none type(triangle_map_t) :: tri_map type(side_map_t) :: side_map @@ -428,7 +428,7 @@ integer function test_geometry_elements_in_cell() bind(C) result(err) integer function test_geometry_map_sides() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(triangle_map_t) :: tri_map type(side_map_t) :: side_map @@ -480,7 +480,7 @@ integer function test_geometry_map_sides() bind(C) result(err) integer function test_geometry_path() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(triangle_map_t) :: tri_map type(side_map_t) :: side_map @@ -528,7 +528,7 @@ integer function test_geometry_path() bind(C) result(err) integer function test_geometry_vertex_vertex_contour() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -563,7 +563,7 @@ integer function test_geometry_vertex_vertex_contour() bind(C) result(err) cell = triangles(1)%getCell() call buildMapOfSidesOnFaceOrEdgeFromTrisNotOnFaces(side_map, triangles) sides = side_map%getSidesInCell(cell) - + sides_on_face = getSidesOnFace(sides, FACE_Z) path = getPathOnFace(sides_on_face) init = path(1)%init @@ -580,7 +580,7 @@ integer function test_geometry_vertex_vertex_contour() bind(C) result(err) integer function test_geometry_vertex_side_contour() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -633,7 +633,7 @@ integer function test_geometry_vertex_side_contour() bind(C) result(err) integer function test_geometry_side_vertex_contour() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -686,7 +686,7 @@ integer function test_geometry_side_vertex_contour() bind(C) result(err) integer function test_geometry_side_side_contour() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -738,7 +738,7 @@ integer function test_geometry_side_side_contour() bind(C) result(err) integer function test_geometry_side_side_contour_2() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -796,7 +796,7 @@ integer function test_geometry_side_side_contour_2() bind(C) result(err) integer function test_geometry_side_side_contour_3() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -835,14 +835,14 @@ integer function test_geometry_side_side_contour_3() bind(C) result(err) if (.not. all(contour(3)%end%position .eq. c4%position)) err = err + 1 if (.not. all(contour(4)%init%position .eq. c4%position)) err = err + 1 if (.not. all(contour(4)%end%position .eq. c1%position)) err = err + 1 - + end function integer function test_geometry_areas() bind(C) result(err) use geometry_m use cell_map_m - implicit none + implicit none type(side_map_t) :: side_map type(side_t), dimension(:), allocatable :: sides, path, sides_on_face, contour @@ -858,7 +858,7 @@ integer function test_geometry_areas() bind(C) result(err) c1 = coord_t(position = [1.0,0.0,0.0], id = 1) c2 = coord_t(position = [0.0,1.0,0.0], id= 2) c3 = coord_t(position = [0.0,0.0,1.0], id= 3) - + allocate(triangles(1)) triangles(1) = triangle_t(vertices = [c1,c2,c3]) cell = triangles(1)%getCell() @@ -883,7 +883,7 @@ integer function test_geometry_areas() bind(C) result(err) contour = buildSidesContour(path) area = contourArea(contour) if (area /= 0.25) err = err + 1 - + call side_map%unset(key(cell)) triangles(1)%vertices(2)%position = [0.0,0.25,0.0] call buildMapOfSidesOnFaceOrEdgeFromTrisNotOnFaces(side_map, triangles) diff --git a/test/pyWrapper/test_full_system.py b/test/pyWrapper/test_full_system.py index e13ffed7b..fd9c112ef 100644 --- a/test/pyWrapper/test_full_system.py +++ b/test/pyWrapper/test_full_system.py @@ -15,7 +15,7 @@ def test_lineIntegralProbe(tmp_path): solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver['materials'][0] = createWire(id = 1, r = 0.001) solver.run() - + pf = 'lineIntegralProbe_plates.fdtd_vprobe_LI_20_20_10.dat' li_probe = Probe(solver.getSolvedProbeFilenames("vprobe_LI_20_20_10")[0]) expected = Probe(OUTPUTS_FOLDER+pf) @@ -48,29 +48,29 @@ def test_shieldedPair(tmp_path): p_solved.append(Probe(pf)) for i in [0,3]: - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['voltage_0'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['voltage_0'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['voltage_1'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['voltage_1'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['voltage_2'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['voltage_2'])[0,1] > 0.999 for i in [1,2]: - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_0'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_0'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_1'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_1'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_2'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_2'])[0,1] > 0.999 @@ -96,7 +96,7 @@ def test_bundles_mpi_n_ranks(tmp_path): # solver.cleanUp() # solver.run() # assert solver.hasFinishedSuccessfully() - + # solver = FDTD(input_filename=fn, # path_to_exe=SEMBA_EXE, # mpi_command='mpirun -np 4', @@ -104,7 +104,7 @@ def test_bundles_mpi_n_ranks(tmp_path): # solver.cleanUp() # solver.run() # assert solver.hasFinishedSuccessfully() - + @no_mtln_skip @no_mpi_skip @pytest.mark.mtln @@ -112,7 +112,7 @@ def test_bundles_mpi_n_ranks(tmp_path): @pytest.mark.wires @pytest.mark.multiwire def test_bundles_mpi_n_ranks_2(tmp_path): -# (9,10)(10,10) +# (9,10)(10,10) # | (12,12) # (7,9) _ | #(1,7)(3,7) _ _ | | | @@ -120,10 +120,10 @@ def test_bundles_mpi_n_ranks_2(tmp_path): # | | (5,6) | | | # | |_ _ | |_ | # | (3,6) | | (10,6) |_| -# | |_ _| (11,6)(11,4)(12,4) -# | (5,3)(7,3) -# | -# (1,1) +# | |_ _| (11,6)(11,4)(12,4) +# | (5,3)(7,3) +# | +# (1,1) fn = CASES_FOLDER + 'mpi/bundles_for_mpi_2.fdtd.json' solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, @@ -139,7 +139,7 @@ def test_bundles_mpi_n_ranks_2(tmp_path): # solver.cleanUp() # solver.run() # assert solver.hasFinishedSuccessfully() - + # solver = FDTD(input_filename=fn, # path_to_exe=SEMBA_EXE, # mpi_command='mpirun -np 4', @@ -147,7 +147,7 @@ def test_bundles_mpi_n_ranks_2(tmp_path): # solver.cleanUp() # solver.run() # assert solver.hasFinishedSuccessfully() - + @no_mtln_skip @@ -179,29 +179,29 @@ def test_shieldedPair_mpi(tmp_path): p_solved.append(Probe(pf)) for i in [0,3]: - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['voltage_0'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['voltage_0'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['voltage_1'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['voltage_1'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['voltage_2'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['voltage_2'])[0,1] > 0.999 for i in [1,2]: - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_0'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_0'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_1'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_1'])[0,1] > 0.999 - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_2'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_2'])[0,1] > 0.999 @@ -213,8 +213,8 @@ def test_shieldedPair_mpi(tmp_path): @pytest.mark.probes def test_coated_antenna(tmp_path): """ Test for a coated antenna with MTLN wires reproducing Fig. 2 in: - A. Rubio Bretones, R. Gomez Martin, A. Salinas and I. Sanchez, - "Time domain analysis of dielectric coated wire scatterers and antennas," + A. Rubio Bretones, R. Gomez Martin, A. Salinas and I. Sanchez, + "Time domain analysis of dielectric coated wire scatterers and antennas," Proceedings of MELECON '94. Mediterranean Electrotechnical Conference, Antalya, Turkey, 1994, pp. 1174-1176 vol.3, doi: 10.1109/MELCON.1994.380859. """ @@ -233,29 +233,29 @@ def test_coated_antenna(tmp_path): OUTPUTS_FOLDER+'coated_antenna.fdtd_mid_point_half_1_I_11_11_12.dat') p_solved = Probe(probe_files[0]) - - solved = np.interp(p_expected['time'].to_numpy(), - p_solved['time'].to_numpy(), + + solved = np.interp(p_expected['time'].to_numpy(), + p_solved['time'].to_numpy(), p_solved['current_0'].to_numpy()) assert np.corrcoef(solved, p_expected['current_0'])[0,1] > 0.999 - + # compiled without mtln uses classic wires # compiled with mtln, wire is treated as an unshielded multiwire @pytest.mark.wires @pytest.mark.probes def test_holland(tmp_path): fn = CASES_FOLDER + 'holland/holland1981.fdtd.json' - solver = FDTD(input_filename=fn, + solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver.run() p = Probe(solver.getSolvedProbeFilenames("mid_point")[0]) - + expected_f = json.load(open(OUTPUTS_FOLDER+'holland1981_mid_point_expected_current.json')) expected_t, expected_i = np.array([]), np.array([]) for data in expected_f['datasetColl'][0]['data']: - expected_t = np.append(expected_t, float(data['value'][0])) - expected_i = np.append(expected_i, float(data['value'][1])) + expected_t = np.append(expected_t, float(data['value'][0])) + expected_i = np.append(expected_i, float(data['value'][1])) expected_i_interp = np.interp(p['time']-3.05*1e-9, expected_t, expected_i) assert np.allclose(expected_i_interp, p['current'], rtol=1e-4, atol=5e-5) @@ -267,7 +267,7 @@ def test_holland(tmp_path): def test_holland_short_terminals_match_open_terminals(tmp_path): fn = CASES_FOLDER + 'holland/holland1981.fdtd.json' number_of_steps = 1000 - + folder_open = os.path.join(tmp_path, 'open_terminals') os.makedirs(folder_open) solver_open = FDTD(input_filename=fn, @@ -342,29 +342,29 @@ def test_holland_mtln_mpi(tmp_path): expected_f = json.load(open(OUTPUTS_FOLDER+'holland1981_mid_point_expected_current.json')) expected_t, expected_i = np.array([]), np.array([]) for data in expected_f['datasetColl'][0]['data']: - expected_t = np.append(expected_t, float(data['value'][0])) - expected_i = np.append(expected_i, float(data['value'][1])) + expected_t = np.append(expected_t, float(data['value'][0])) + expected_i = np.append(expected_i, float(data['value'][1])) expected_i_interp = np.interp(probe_mid_no_mpi['time']-3.05*1e-9, expected_t, expected_i) assert np.allclose( - expected_i_interp, - probe_mid_no_mpi['current_0'], + expected_i_interp, + probe_mid_no_mpi['current_0'], rtol=1e-4, atol=5e-5) assert np.allclose( - expected_i_interp, - probe_mid_mpi_1['current_0'], + expected_i_interp, + probe_mid_mpi_1['current_0'], rtol=1e-4, atol=5e-5) assert np.allclose( - expected_i_interp, - probe_mid_mpi_2['current_0'], + expected_i_interp, + probe_mid_mpi_2['current_0'], rtol=1e-4, atol=5e-5) # assert np.allclose( - # expected_i_interp, - # probe_mid_mpi_3['current_0'], + # expected_i_interp, + # probe_mid_mpi_3['current_0'], # rtol=1e-4, atol=5e-5) @@ -386,13 +386,13 @@ def test_unshielded_multiwires(tmp_path): p_expected = Probe( OUTPUTS_FOLDER+'unshielded_multiwires_berenger.fdtd_mid_point_unshielded_two_wire_I_2_11_14.dat') - solved_0 = np.interp(p_expected['time'].to_numpy(), - p_solved.data['time'].to_numpy(), + solved_0 = np.interp(p_expected['time'].to_numpy(), + p_solved.data['time'].to_numpy(), p_solved.data['current_0'].to_numpy()) assert np.corrcoef(solved_0, p_expected['current_0'])[0,1] > 0.999 - - solved_1 = np.interp(p_expected['time'].to_numpy(), - p_solved.data['time'].to_numpy(), + + solved_1 = np.interp(p_expected['time'].to_numpy(), + p_solved.data['time'].to_numpy(), p_solved.data['current_1'].to_numpy()) assert np.corrcoef(solved_1, p_expected['current_1'])[0,1] > 0.999 @@ -406,7 +406,7 @@ def test_towelHanger_mpi(tmp_path): mpidir = ["x","y","z"] for i in range(3): solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, - run_in_folder=tmp_path, flags=['-mpidir ' + mpidir[i]], + run_in_folder=tmp_path, flags=['-mpidir ' + mpidir[i]], mpi_command='mpirun -np 1',) for j in range(len(solver["mesh"]["coordinates"])): cs = [0,0,0] @@ -436,12 +436,12 @@ def test_towelHanger_mpi(tmp_path): Probe(OUTPUTS_FOLDER+'towelHanger.fdtd_wire_end_Wz_43_25_30_s4.dat')] for i in range(3): - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_0'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_0'])[0,1] > 0.999 - - + + @pytest.mark.wires @pytest.mark.probes @@ -460,8 +460,8 @@ def test_towelHanger(tmp_path): Probe(OUTPUTS_FOLDER+'towelHanger.fdtd_wire_end_Wz_43_25_30_s4.dat')] for i in range(3): - solved = np.interp(p_expected[i]['time'].to_numpy(), - p_solved[i]['time'].to_numpy(), + solved = np.interp(p_expected[i]['time'].to_numpy(), + p_solved[i]['time'].to_numpy(), p_solved[i]['current_0'].to_numpy()) assert np.corrcoef(solved, p_expected[i]['current_0'])[0,1] > 0.999 @@ -525,8 +525,8 @@ def test_towel_rack_with_and_without_shorting_plane(tmp_path): # Expect the shorting plane not changing the impedance at low frequencies. assert np.allclose( - np.abs(Z_in_w[freqs < 1e6]), - np.abs(Z_in_wo[freqs < 1e6]), + np.abs(Z_in_w[freqs < 1e6]), + np.abs(Z_in_wo[freqs < 1e6]), rtol=0.1 ) @@ -605,7 +605,7 @@ def test_planewave_with_periodic_boundaries(tmp_path): solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver.run() - + before = Probe(solver.getSolvedProbeFilenames("before")[0]) inbox = Probe(solver.getSolvedProbeFilenames("inbox")[0]) after = Probe(solver.getSolvedProbeFilenames("after")[0]) @@ -684,7 +684,7 @@ def test_sgbc_shielding_effectiveness(tmp_path): def test_current_orientation(tmp_path): fn = CASES_FOLDER + 'current_orientation/currentOrientation.fdtd.json' solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) - + solver['mesh']['elements'][12]['coordinateIds'] = [1,2] solver['sources'][0]['elementIds'] = [1] solver.cleanUp() @@ -721,7 +721,7 @@ def test_current_orientation(tmp_path): def test_sgbc_structured_resistance_single_wire(tmp_path): fn = CASES_FOLDER + 'sgbcResistance/sgbcResistance.fdtd.json' solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) - + solver['materials'][2] = createWire(id = 3, r = 1e-4) solver.run() @@ -762,10 +762,10 @@ def test_pec_overlapping_sgbcs(tmp_path): # plt.legend() # plt.show() - + # Checks values are different due to PEC prioritization. assert np.all(np.greater(np.abs(iPEC[1000:]), np.abs(iSGBC[1000:]))) - + # compiled without mtln uses classic wires # compiled with mtln, wire is treated as an unshielded multiwire @pytest.mark.sgbc @@ -792,7 +792,7 @@ def test_sgbc_overlapping_sgbc(tmp_path): solver.cleanUp() solver.run() iSGBC_bottom = Probe(solver.getSolvedProbeFilenames("Bulk probe")[0])['current'].to_numpy() - + # For debugging only. # plt.figure() # plt.plot(t, iSGBC_top,'.-', label='SGBC sigma = 40 S/m, top') @@ -800,7 +800,7 @@ def test_sgbc_overlapping_sgbc(tmp_path): # plt.grid(which='both') # plt.legend() # plt.show() - + # Checks values are different due to prioritization of first written. assert np.all(np.greater(np.abs(iSGBC_top[1000:]), np.abs(iSGBC_bottom[1000:]))) @@ -814,24 +814,24 @@ def getIncidentField(probe:Probe) -> Dict: time = probe["time"][idx] value = probe["field"][idx] return {"time":time, "value": value} - + def getReflectedField(probe:Probe) -> Dict: idx = probe["field"].argmax() time = probe["time"][idx] value = probe["field"][idx] return {"time":time, "value": value} - + def getTransmittedField(probe:Probe) -> Dict: idx = probe["field"].argmin() time = probe["time"][idx] value = probe["field"][idx] return {"time":time, "value": value} - + def getReflectedDelay(incidentTime:float, reflectedTime:float): timeToSurface:float = ((reflectedTime-incidentTime)/2) + incidentTime reflectedDelay:float = reflectedTime - timeToSurface return reflectedDelay - + def getTransmittedDelay(incidentTime:float, reflectedTime:float, transmittedTime:float): timeToSurface:float = ((reflectedTime-incidentTime)/2) + incidentTime transmitedDelay = transmittedTime - timeToSurface @@ -843,7 +843,7 @@ def getTransmittedDelay(incidentTime:float, reflectedTime:float, transmittedTime relativePermittivity = solver.getMaterialProperties('DielectricMaterial')["relativePermittivity"] materialRelativeImpedance = np.sqrt(1/relativePermittivity) - + expectedReflectedCoeff = (materialRelativeImpedance - 1) / (materialRelativeImpedance + 1) expectedtransmittedCoeff = (1 + expectedReflectedCoeff) expectedDelayRatio = 1/np.sqrt(relativePermittivity) @@ -855,7 +855,7 @@ def getTransmittedDelay(incidentTime:float, reflectedTime:float, transmittedTime incidentField = getIncidentField(outsideProbe) reflectedField = getReflectedField(outsideProbe) transmittedField = getTransmittedField(insideProbe) - + assert (incidentField['value'] - transmittedField['value'] + reflectedField['value']) < _FIELD_TOLERANCE assert np.allclose(reflectedField["value"]/incidentField["value"], expectedReflectedCoeff, rtol=_FIELD_TOLERANCE) assert np.allclose(transmittedField["value"]/incidentField["value"], expectedtransmittedCoeff, rtol=_FIELD_TOLERANCE) @@ -865,7 +865,7 @@ def getTransmittedDelay(incidentTime:float, reflectedTime:float, transmittedTime assert np.allclose(reflectedDelay/transmitedDelay, expectedDelayRatio, rtol=_FIELD_TOLERANCE) - + @pytest.mark.conformal @pytest.mark.probes def test_rectilinear_mode(tmp_path): @@ -877,7 +877,7 @@ def getPeakPulse(probe:Probe) -> Dict: time = probe["time"][idx] value = probe["field"][idx] return {"time":time, "value": value} - + rectilinearModeFile = CASES_FOLDER + "rectilinear_mode/rectilinearMode.fdtd.json" noRectilinearModeFile = CASES_FOLDER + "rectilinear_mode/noRectilinearMode.fdtd.json" @@ -902,7 +902,7 @@ def getPeakPulse(probe:Probe) -> Dict: np.testing.assert_almost_equal(getPeakPulse(rectilinearFrontProbe)['time'], getPeakPulse(noRectilinearFrontProbe)['time'], decimal=_TIME_TOLERANCE) np.testing.assert_almost_equal(getPeakPulse(rectilinearVertexProbe)['value'], getPeakPulse(noRectilinearVertexProbe)['value'], decimal=_FIELD_TOLERANCE) np.testing.assert_almost_equal(getPeakPulse(rectilinearVertexProbe)['time'], getPeakPulse(noRectilinearVertexProbe)['time'], decimal=_TIME_TOLERANCE) - + @pytest.mark.dielectric @pytest.mark.probes @pytest.mark.vtk @@ -911,18 +911,18 @@ def test_can_execute_fdtd_from_folder_with_spaces_and_can_process_additional_arg os.mkdir(folderWithSpaces) if platform == 'win32': shutil.copy2(NGSPICE_DLL, folderWithSpaces) - + sembaExecutable = os.path.basename(SEMBA_EXE) pathToExe: str = os.path.join(folderWithSpaces, sembaExecutable) shutil.copy2(SEMBA_EXE, pathToExe) - + fn = CASES_FOLDER + "dielectric/dielectricTransmission.fdtd.json" solver = FDTD(fn, path_to_exe=pathToExe, run_in_folder=tmp_path, flags=['-mapvtk']) solver.run() assert (Probe(solver.getSolvedProbeFilenames("outside")[0]) is not None) vtk_map_path = solver.getVTKMap() assert vtk_map_path is not None and os.path.isfile(vtk_map_path) - + # compiled without mtln uses classic wires # compiled with mtln, wire is treated as an unshielded multiwire @pytest.mark.wires @@ -934,7 +934,7 @@ def test_nodal_source(tmp_path): solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver['materials'][1] = createWire(id = 2, r = 0.1e-5, rpul=10000.0) solver.run() - + resistanceBulkProbe = Probe( \ solver.getSolvedProbeFilenames("Bulk probe Resistance")[0]) nodalBulkProbe = Probe( \ @@ -944,16 +944,16 @@ def test_nodal_source(tmp_path): # For debugging. # plt.figure() - # plt.plot(resistanceBulkProbe['time'].to_numpy(), + # plt.plot(resistanceBulkProbe['time'].to_numpy(), # resistanceBulkProbe['current'].to_numpy(), label='BP Current@resistance') - # plt.plot(excitation.data['time'].to_numpy(), + # plt.plot(excitation.data['time'].to_numpy(), # excitation.data['value'].to_numpy(), label='excited current') # plt.plot(nodalBulkProbe['time'].to_numpy(), # -nodalBulkProbe['current'].to_numpy(), label='BP Current@nodal source') # plt.legend() - exc = np.interp(nodalBulkProbe['time'].to_numpy(), - excitation.data['time'].to_numpy(), + exc = np.interp(nodalBulkProbe['time'].to_numpy(), + excitation.data['time'].to_numpy(), excitation.data['value'].to_numpy()) assert np.corrcoef(exc, -nodalBulkProbe['current'])[0,1] > 0.999 assert np.corrcoef(-nodalBulkProbe['current'], resistanceBulkProbe['current'])[0,1] > 0.998 @@ -963,7 +963,7 @@ def test_nodal_source(tmp_path): @pytest.mark.probes def test_nodal_source_with_total_resistance(tmp_path): """Verify that totalResistance in materialAssociation overrides resistancePerMeter from material. - + The nodalSource wire spans 10 cells of 0.001 m each (total 0.01 m). totalResistance = 100.0 Ohm <=> resistancePerMeter = 10000.0 Ohm/m. The material's resistancePerMeter is set to zero and the total resistance is @@ -1017,7 +1017,7 @@ def test_lumped_resistor(tmp_path): # These measurements are used to evaluate the accuracy of the lumped material model. # # For validation, the results are compared against two reference cases: - # 1. A simple loop circuit with the same dimensions where a terminal is inserted in place of the lumped line, + # 1. A simple loop circuit with the same dimensions where a terminal is inserted in place of the lumped line, # using the same resistance of the lumped line. # 2. Theoretical current response calculated using Laplace transforms from the initial pulse excitation. # @@ -1025,7 +1025,7 @@ def test_lumped_resistor(tmp_path): fn_lumped = CASES_FOLDER + 'lumped_lines/simple_loop_R/simple_loop_lumped.fdtd.json' fn_terminal = CASES_FOLDER + 'lumped_lines/simple_loop_R/simple_loop_terminal.fdtd.json' - + solver_lumped = FDTD(fn_lumped, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver_terminal = FDTD(fn_terminal, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) @@ -1055,12 +1055,12 @@ def test_lumped_resistor(tmp_path): num = [1] den = [L, R] system = signal.TransferFunction(num, den) - tout, I_out, _ = signal.lsim(system, - U=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=1), + tout, I_out, _ = signal.lsim(system, + U=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=1), T=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=0)) - + I_theo = np.interp(AdjacentPreLumpedProbe['time'], tout, I_out) - + assert np.corrcoef(AdjacentPostLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(AdjacentPreLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(StartLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 @@ -1070,7 +1070,7 @@ def test_lumped_resistor(tmp_path): @pytest.mark.lumped @pytest.mark.probes def test_lumped_capacitor(tmp_path): - # This test validates the behavior of lumped capacitor materials in a simplified circuit. The lumped capacitor + # This test validates the behavior of lumped capacitor materials in a simplified circuit. The lumped capacitor # can be modeled as a capacitor in parallel with a resistor. # The circuit consists of a 40mm x 40mm simple loop with a lumped capacitor line inserted along one edge. # Due to the geometry, the circuit naturally exhibits a parasitic inductance of approximately 1.65e-7 H. @@ -1100,12 +1100,12 @@ def test_lumped_capacitor(tmp_path): num = [R*C, 1] den = [L*R*C, L, R] system = signal.TransferFunction(num, den) - tout, I_out, _ = signal.lsim(system, - U=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=1), + tout, I_out, _ = signal.lsim(system, + U=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=1), T=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=0)) - + I_theo = np.interp(AdjacentPreLumpedProbe['time'], tout, I_out) - + assert np.corrcoef(AdjacentPostLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(AdjacentPreLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(StartLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 @@ -1124,7 +1124,7 @@ def test_lumped_inductor(tmp_path): # These measurements are used to evaluate the accuracy of the lumped material model. # # For validation, the results are compared against two reference cases: - # 1. A simple loop circuit with the same dimensions where a terminal is inserted in place of the lumped line, + # 1. A simple loop circuit with the same dimensions where a terminal is inserted in place of the lumped line, # using the same resistance and inductance of the lumped line. # 2. Theoretical current response calculated using Laplace transforms from the initial pulse excitation. # @@ -1132,7 +1132,7 @@ def test_lumped_inductor(tmp_path): fn_lumped = CASES_FOLDER + 'lumped_lines/simple_loop_RL/simple_loop_lumped.fdtd.json' fn_terminal = CASES_FOLDER + 'lumped_lines/simple_loop_RL/simple_loop_terminal.fdtd.json' - + solver_lumped = FDTD(fn_lumped, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver_terminal = FDTD(fn_terminal, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) @@ -1162,12 +1162,12 @@ def test_lumped_inductor(tmp_path): num = [1] den = [L, R] system = signal.TransferFunction(num, den) - tout, I_out, _ = signal.lsim(system, - U=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=1), + tout, I_out, _ = signal.lsim(system, + U=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=1), T=np.loadtxt(solver_lumped["sources"][0]["magnitudeFile"], usecols=0)) - + I_theo = np.interp(AdjacentPreLumpedProbe['time'], tout, I_out) - + assert np.corrcoef(AdjacentPostLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(AdjacentPreLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(StartLumpedProbe['current'].to_numpy(), I_theo)[0, 1] > 0.999 @@ -1205,18 +1205,18 @@ def test_lumped_resistor_parallel_terminal_resistor(tmp_path): R_lumped = solver.getMaterialProperties("lumped_resistor")["resistance"] R_terminal = solver.getMaterialProperties("Terminal_R")["terminations"][0]["resistance"] - R = 1/(1/R_lumped + 1/R_terminal) + R = 1/(1/R_lumped + 1/R_terminal) L = 1.65e-7 # parasitic inductance mentioned above num = [1] den = [L, R] system = signal.TransferFunction(num, den) - tout, I_out, _ = signal.lsim(system, - U=np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=1), + tout, I_out, _ = signal.lsim(system, + U=np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=1), T=np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=0)) - + I_theo = np.interp(InitialBulk_probe['time'], tout, I_out) - + assert np.corrcoef(TopBulk_probe['current'].to_numpy() + BottomBulk_probe['current'].to_numpy(), I_theo)[0, 1] > 0.999 assert np.corrcoef(InitialBulk_probe['current'].to_numpy(), I_theo)[0, 1] > 0.999 @@ -1235,11 +1235,11 @@ def test_bulk_current_offset_normal_in_x(tmp_path): I_in = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=1) time = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=0) - + probe_at_x_18 = Probe(solver.getSolvedProbeFilenames("BulkCurrent1")[0]) probe_at_x_20 = Probe(solver.getSolvedProbeFilenames("BulkCurrent2")[0]) probe_at_x_22 = Probe(solver.getSolvedProbeFilenames("BulkCurrent3")[0]) - + I_interp = np.interp( probe_at_x_18['time'].to_numpy(), time, @@ -1265,11 +1265,11 @@ def test_bulk_current_offset_normal_in_y(tmp_path): I_in = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=1) time = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=0) - + probe_at_y_m2 = Probe(solver.getSolvedProbeFilenames("BulkCurrent1")[0]) probe_at_y_0 = Probe(solver.getSolvedProbeFilenames("BulkCurrent2")[0]) probe_at_y_2 = Probe(solver.getSolvedProbeFilenames("BulkCurrent3")[0]) - + I_interp = np.interp( probe_at_y_m2['time'].to_numpy(), time, @@ -1295,11 +1295,11 @@ def test_bulk_current_offset_normal_in_z(tmp_path): I_in = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=1) time = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=0) - + probe_at_z_18 = Probe(solver.getSolvedProbeFilenames("BulkCurrent1")[0]) probe_at_z_20 = Probe(solver.getSolvedProbeFilenames("BulkCurrent2")[0]) probe_at_z_22 = Probe(solver.getSolvedProbeFilenames("BulkCurrent3")[0]) - + I_interp = np.interp( probe_at_z_18['time'].to_numpy(), time, @@ -1328,13 +1328,13 @@ def test_bulk_current_offset_perpendicular_in_x(tmp_path): # # The test checks that the bulk planes only measure the current values of the respective nodal sources # and if we move one negative cell in the y and z directions, the current values are zero for the bulk planes - # 1 and 3 respectively; similar behavior if we move one positive cell in the y and z directions for + # 1 and 3 respectively; similar behavior if we move one positive cell in the y and z directions for # the bulk planes 1 and 2. This proves that the bulk have a negative offset in the y and z directions. fn = CASES_FOLDER + 'bulk_current_offsets/threeLines_offSet_x_Perpendicular/threeLines.fdtd.json' fn_negative = CASES_FOLDER + 'bulk_current_offsets/threeLines_offSet_x_Perpendicular/threeLinesNegative.fdtd.json' fn_positive = CASES_FOLDER + 'bulk_current_offsets/threeLines_offSet_x_Perpendicular/threeLinesPositive.fdtd.json' - + solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver_negative = FDTD(input_filename = fn_negative, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver_positive = FDTD(input_filename = fn_positive, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) @@ -1350,7 +1350,7 @@ def test_bulk_current_offset_perpendicular_in_x(tmp_path): assert np.corrcoef(probe1['current'].to_numpy() + probe2['current'].to_numpy() + probe3['current'].to_numpy(), probeTotal['current'].to_numpy())[0, 1] > 0.999 - + probe1_negative = Probe(solver_negative.getSolvedProbeFilenames("Bulk probe1")[0]) probe2_negative = Probe(solver_negative.getSolvedProbeFilenames("Bulk probe2")[0]) probe3_negative = Probe(solver_negative.getSolvedProbeFilenames("Bulk probe3")[0]) @@ -1392,7 +1392,7 @@ def test_bulk_current_negative_offset_in_x(tmp_path): # perpendicular to the normal vector of the bulk surface. The previous test checks the negative offset in the # y and z directions when the normal vector is in the x-direction. Now we check the negative offset in the # x-direction when the normal vector is in the y-direction. - # The setup consists in a nodal source placed in a line defined by [(0 mm,0 mm,0 mm), (0 mm,50 mm,0 mm)]. + # The setup consists in a nodal source placed in a line defined by [(0 mm,0 mm,0 mm), (0 mm,50 mm,0 mm)]. # The nodal source is a Gaussian pulse with 1 A amplitude. And three bulk planes defined at: # - Plane at y=36 mm, (-4 mm, -2 mm) and (0 mm, 2 mm) in x and z directions. # - Plane at y=38 mm, (0 mm, -2 mm) and (4 mm, 2 mm) in x and z directions. @@ -1409,11 +1409,11 @@ def test_bulk_current_negative_offset_in_x(tmp_path): I_in = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=1) time = np.loadtxt(solver["sources"][0]["magnitudeFile"], usecols=0) - + probeR = Probe(solver.getSolvedProbeFilenames("Bulk_right")[0]) probeL = Probe(solver.getSolvedProbeFilenames("Bulk_left")[0]) probeTotal = Probe(solver.getSolvedProbeFilenames("BulkTotal")[0]) - + I_interp = np.interp( probeTotal['time'].to_numpy(), time, @@ -1506,7 +1506,7 @@ def test_conformal_impedance_cylinder_unshielded(tmp_path): solver.run() assert solver.hasFinishedSuccessfully() bulk_conf = Probe(solver.getSolvedProbeFilenames("BulkProbe")[0]) - + #discrete fourier transforms exc_file = solver.getExcitationFile("predefinedExcitation")[0] exc = pd.read_csv(exc_file, sep='\\s+') @@ -1530,7 +1530,7 @@ def test_conformal_impedance_cylinder_unshielded(tmp_path): assert np.corrcoef(data['z'], np.abs(Vfexc/Ifbulk_conf))[0,1] > 0.999 - + @pytest.mark.conformal @pytest.mark.farfield @pytest.mark.probes @@ -1598,13 +1598,13 @@ def assert_byte_equal(actual, expected, description): far = volume['far'] rg = far.loc[(far['Theta'] == 90.0) & (far['Phi'] == 0.0), 'rcs_geom'] ffar = far.loc[(far['Theta'] == 90.0) & (far['Phi'] == 0.0), 'freq'] - + # analytical RCS f = np.linspace(1e7,7e8,200) r = 0.5 # in meters rcs = RCS(fspace=f, radius=r) # simulated, interpolated to analytical frequencies - rcs_interp = np.interp(f, ffar, rg) + rcs_interp = np.interp(f,ffar,rg) assert np.corrcoef(rcs[5:150], rcs_interp[5:150])[0,1] > 0.98 @@ -1655,7 +1655,7 @@ def test_conformal_delay(tmp_path): def test_conformal_surface_midcell_reflection(tmp_path, normal_axis, propagation, reverse_winding): fn = CASES_FOLDER + 'conformal_surface/conformal_surface_midcell.fdtd.json' solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) - + permutations = { 'x': (0, 1, 2), 'y': (1, 0, 2), @@ -1727,7 +1727,7 @@ def test_conformal_surface_midcell_reflection(tmp_path, normal_axis, propagation assert np.isclose(reflection_amplitude, 1.0, rtol=0.05) assert abs(lag*dt-expected_delay) <= 4*dt assert np.max(np.abs(shadow)) <= 0.01*np.max(np.abs(incident)) - + @pytest.mark.conformal @pytest.mark.xfail( run=False, @@ -1740,7 +1740,7 @@ def test_conformal_thin_strip_resistance(tmp_path): run_in_folder=tmp_path) solver.run() assert solver.hasFinishedSuccessfully() - + exc = pd.read_csv("predefinedExcitation.1.exc", sep='\\s+') exc = exc.rename(columns={ exc.columns[0]: 'time', @@ -1757,9 +1757,9 @@ def test_conformal_thin_strip_resistance(tmp_path): tbulk = bulk["time"].to_numpy() dt_bulk = tbulk[1]-tbulk[0] Ifbulk = dt_bulk*np.array([np.sum(Ibulk * np.exp(-1j * 2 * np.pi * f * tbulk)) for f in new_freqs]) - # compute - Rdc_th = 0 - #impedance comparison + # compute + Rdc_th = 0 + #impedance comparison assert (np.abs(Vfexc/Ifbulk)[0] == Rdc_th) @no_mtln_skip @@ -1770,7 +1770,7 @@ def test_conformal_thin_strip_resistance(tmp_path): def test_current_generators_with_resistance(tmp_path): # Checks current and voltage of probes at the extremes of a wire # with a current generator in the middle of the wire - + fn = CASES_FOLDER + 'sources/sources_current.fdtd.json' solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path, flags=['-mapvtk']) @@ -1787,15 +1787,13 @@ def test_current_generators_with_resistance(tmp_path): assert np.allclose(Vend['voltage_0'][-100:-1], 16.666, rtol=0.005) assert np.allclose(Vstart['voltage_0'][-100:-1], -16.666, rtol=0.005) -@no_mtln_skip -@pytest.mark.mtln @pytest.mark.wires @pytest.mark.nodal_source @pytest.mark.probes def test_current_generators_without_resistance(tmp_path): # Checks current probes at the extremes of a wire # with a current generator in the middle of the wire and on the extremes of the wire - + fn = CASES_FOLDER + 'sources/sources_current_no_resistance.fdtd.json' solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path, flags=['-mapvtk']) @@ -1840,7 +1838,7 @@ def test_voltage_generators(tmp_path): solver.cleanUp() solver.run() - + Iend = Probe(solver.getSolvedProbeFilenames("probe_end")[0]) Istart = Probe(solver.getSolvedProbeFilenames("probe_start")[0]) Vend = Probe(solver.getSolvedProbeFilenames("probe_end")[1]) @@ -1855,7 +1853,7 @@ def test_voltage_generators(tmp_path): assert np.allclose(Istart['current_1'][-100:-1], 1.0/3.0, rtol=0.005) assert np.allclose(Vend['voltage_1'][-100:-1], -16.666, rtol=0.005) assert np.allclose(Vstart['voltage_1'][-100:-1], -16.666, rtol=0.005) - + @pytest.mark.probes def test_bulk_current_outputs(tmp_path): # This test uses bulk_probe_cases_over_nodal_source.fdtd from input_examples as input. @@ -1864,11 +1862,11 @@ def test_bulk_current_outputs(tmp_path): solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver.run() - bulkXPlaneFiles = solver.getSolvedProbeFilenames("BulkXPlane") - bulkYPlaneFiles = solver.getSolvedProbeFilenames("BulkYPlane") - bulkZPlaneFiles = solver.getSolvedProbeFilenames("BulkZPlane") - bulkYPointFiles = solver.getSolvedProbeFilenames("BulkYPoint") - bulkZVolumeFiles = solver.getSolvedProbeFilenames("BulkZVolume") + bulkXPlaneFiles = solver.getSolvedProbeFilenames("BulkXPlane") + bulkYPlaneFiles = solver.getSolvedProbeFilenames("BulkYPlane") + bulkZPlaneFiles = solver.getSolvedProbeFilenames("BulkZPlane") + bulkYPointFiles = solver.getSolvedProbeFilenames("BulkYPoint") + bulkZVolumeFiles = solver.getSolvedProbeFilenames("BulkZVolume") assert len(bulkXPlaneFiles) == 1 assert len(bulkYPlaneFiles) == 1 diff --git a/test/pyWrapper/test_integration.py b/test/pyWrapper/test_integration.py index cb7d51f1e..c6f3a7a6d 100644 --- a/test/pyWrapper/test_integration.py +++ b/test/pyWrapper/test_integration.py @@ -51,7 +51,7 @@ def test_holland_case_checking_number_of_outputs_unshielded(tmp_path): number_of_steps = 10 solver['general']['numberOfSteps'] = number_of_steps - solver['materials'][0] = createUnshieldedWire(id = 1, lpul = 6.52188703e-08, cpul = 1.7060247700000001e-10) + solver['materials'][0] = createUnshieldedWire(id = 1, lpul = 6.52188703e-08, cpul = 1.7060247700000001e-10) outfile = 'holland1981.fdtd_mid_point_single_wire_I_11_11_12.dat' solver.run() @@ -93,9 +93,9 @@ def test_towel_hanger_case_creates_output_probes(tmp_path): @pytest.mark.wires def test_airplane_case_with_mpi(tmp_path): fn = CASES_FOLDER + 'airplane/airplane.fdtd.json' - solver = FDTD(fn, + solver = FDTD(fn, path_to_exe=SEMBA_EXE, - run_in_folder=tmp_path, + run_in_folder=tmp_path, flags=['-mapvtk'], mpi_command='mpirun -np 2') solver.run() @@ -107,11 +107,11 @@ def test_airplane_case_with_mpi(tmp_path): @pytest.mark.wires def test_simple_cabin_initialization(tmp_path): fn = CASES_FOLDER + 'simple_cabin/simple_cabin.fdtd.json' - solver = FDTD(input_filename=fn, + solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver.run() - + assert solver.hasFinishedSuccessfully() @@ -120,9 +120,9 @@ def test_simple_cabin_initialization(tmp_path): @pytest.mark.wires def test_simple_cabin_initialization_with_mpi(tmp_path): fn = CASES_FOLDER + 'simple_cabin/simple_cabin.fdtd.json' - solver = FDTD(fn, + solver = FDTD(fn, path_to_exe=SEMBA_EXE, - run_in_folder=tmp_path, + run_in_folder=tmp_path, flags=['-mapvtk'], mpi_command='mpirun -np 2') solver.run() @@ -271,7 +271,7 @@ def test_fill_slanted_vtk_large_sphere(tmp_path): assert face_media_dict assert -1 not in face_media_dict.keys() - + @pytest.mark.conformal @pytest.mark.vtk def test_fill_conformal_vtk_corner(tmp_path): @@ -284,9 +284,9 @@ def test_fill_conformal_vtk_corner(tmp_path): # | 6| | / # | / \| | / # 1/____2________|/ - - - + + + fn = CASES_FOLDER + 'conformal/conformal_corner.fdtd.json' solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path, flags=['-mapvtk']) @@ -299,7 +299,7 @@ def test_fill_conformal_vtk_corner(tmp_path): face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') - + assert face_media_dict assert(0 not in face_media_dict.keys()) assert face_media_dict[1005] == 2 # Conformal PEC surface #1 @@ -310,7 +310,7 @@ def test_fill_conformal_vtk_corner(tmp_path): assert line_media_dict assert line_media_dict[0.5] == 1 # PEC line assert line_media_dict[2004] == 4 # Conformal lines - + @pytest.mark.probes @pytest.mark.movie def test_movie_with_frequency_domain(tmp_path): @@ -462,7 +462,7 @@ def test_one_cell_SGBC_surface_Jprobe(tmp_path): solver['general']['numberOfSteps'] = 1 solver['materialAssociations'][0]['materialId'] = 2 - + solver["probes"][0]["component"] = "x" solver.cleanUp() @@ -671,9 +671,9 @@ def test_wires(tmp_path): line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') - assert line_media_dict[7] == 7 - assert line_media_dict[10] == 6 - assert line_media_dict[21] == 1 + assert line_media_dict[7] == 7 + assert line_media_dict[10] == 6 + assert line_media_dict[21] == 1 @mtln_skip def test_wires_collision_Jprobe(tmp_path): @@ -685,7 +685,7 @@ def test_wires_collision_Jprobe(tmp_path): solver.run() vtkmapfile = solver.getCurrentVTKMap() - + assert os.path.isfile(vtkmapfile) face_tag_dict = createPropertyDictionary( @@ -731,10 +731,10 @@ def test_wires_collision(tmp_path): line_media_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='mediatype') - assert line_media_dict[7] == 6 - assert line_media_dict[8] == 1 - assert line_media_dict[10] == 6 - assert line_media_dict[21] == 1 + assert line_media_dict[7] == 6 + assert line_media_dict[8] == 1 + assert line_media_dict[10] == 6 + assert line_media_dict[21] == 1 assert line_media_dict[0.5] == 2 # PEC line @mtln_skip @@ -1217,9 +1217,9 @@ def test_multiwire_x_long_collision_z(tmp_path): line_tag_dict = createPropertyDictionary( vtkmapfile, celltype=3, property='tagnumber') assert line_tag_dict[64] == 2 #PEC - assert line_tag_dict[128] == 8 #Multiwire: + assert line_tag_dict[128] == 8 #Multiwire: # 3 segments w/o collision, 2 of them are also intermediate - # 1 segment adjacent something not multiwire, 2 extremes, + # 1 segment adjacent something not multiwire, 2 extremes, face_media_dict = createPropertyDictionary( vtkmapfile, celltype=9, property='mediatype') @@ -1253,12 +1253,12 @@ def test_can_execute_fdtd_from_folder_with_spaces_and_can_process_additional_arg os.mkdir(folderWitSpaces) if platform == 'win32': shutil.copy2(NGSPICE_DLL, folderWitSpaces) - + sembaExecutable = SEMBA_EXE.split(os.path.sep)[-1] pathToExe: str = os.path.join(folderWitSpaces, sembaExecutable) shutil.copy2(SEMBA_EXE, pathToExe) print(pathToExe) - + fn = CASES_FOLDER + "dielectric/dielectricTransmission.fdtd.json" solver = FDTD(fn, path_to_exe=pathToExe, run_in_folder=tmp_path) solver.run() @@ -1272,11 +1272,11 @@ def test_bulk_current_outputs(tmp_path): solver = FDTD(fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver.run() - bulkXPlaneFiles = solver.getSolvedProbeFilenames("BulkXPlane") - bulkYPlaneFiles = solver.getSolvedProbeFilenames("BulkYPlane") - bulkZPlaneFiles = solver.getSolvedProbeFilenames("BulkZPlane") - bulkYPointFiles = solver.getSolvedProbeFilenames("BulkYPoint") - bulkZVolumeFiles = solver.getSolvedProbeFilenames("BulkZVolume") + bulkXPlaneFiles = solver.getSolvedProbeFilenames("BulkXPlane") + bulkYPlaneFiles = solver.getSolvedProbeFilenames("BulkYPlane") + bulkZPlaneFiles = solver.getSolvedProbeFilenames("BulkZPlane") + bulkYPointFiles = solver.getSolvedProbeFilenames("BulkYPoint") + bulkZVolumeFiles = solver.getSolvedProbeFilenames("BulkZVolume") assert len(bulkXPlaneFiles) == 1 assert len(bulkYPlaneFiles) == 1 @@ -1300,7 +1300,7 @@ def test_wires_vtk(tmp_path): solver = FDTD(input_filename=fn, path_to_exe=SEMBA_EXE, run_in_folder=tmp_path) solver.run() - + vtkmapfile = solver.getVTKMap() reader = pv.get_reader(vtkmapfile) mesh = reader.read() diff --git a/test/smbjson/smbjson_testingTools.F90 b/test/smbjson/smbjson_testingTools.F90 index 14838ddbc..4dff55479 100644 --- a/test/smbjson/smbjson_testingTools.F90 +++ b/test/smbjson/smbjson_testingTools.F90 @@ -7,9 +7,9 @@ module smbjson_testingTools character(len=*), parameter :: PATH_TO_TEST_DATA = 'testData/' character(len=*), parameter :: INPUT_EXAMPLES='input_examples/' - + contains - subroutine expect_eq_int(err, ex, pr, msg) + subroutine expect_eq_int(err, ex, pr, msg) integer, intent(inout) :: err integer, intent(in) :: ex, pr character(len=*), intent(in), optional :: msg @@ -22,7 +22,7 @@ subroutine expect_eq(err, ex, pr, ignoreRegions) logical, optional, intent(in) :: ignoreRegions logical :: checkRegions - if (.not. present(ignoreRegions)) then + if (.not. present(ignoreRegions)) then checkRegions = .true. else if (ignoreRegions) then @@ -36,7 +36,7 @@ subroutine expect_eq(err, ex, pr, ignoreRegions) if (.not. ex%matriz == pr%matriz) call testFails(err, 'Expected and read "media matrix" do not match') if (.not. ex%despl == pr%despl) call testFails(err, 'Expected and read "grid" do not match') if (.not. ex%front == pr%front) call testFails(err, 'Expected and read "boundary" do not match') - + ! Materials if (.not. ex%Mats == pr%Mats) call testFails(err, 'Expected and read "materials" do not match') if (checkRegions) then @@ -45,24 +45,24 @@ subroutine expect_eq(err, ex, pr, ignoreRegions) if (.not. ex%dielRegs == pr%dielRegs) call testFails(err, 'Expected and read "dielectric regions" do not match') if (.not. ex%lossyThinSurfs == pr%lossyThinSurfs) call testFails(err, 'Expected and read "lossy thin surfaces" do not match') end if - + ! Sources if (.not. ex%plnSrc == pr%plnSrc) call testFails(err, 'Expected and read "planewave sources" do not match') if (.not. ex%nodSrc == pr%nodSrc) call testFails(err, 'Expected and read "nodal sources" do not match') - + ! Probes if (.not. ex%oldSONDA == pr%oldSonda) call testFails(err, 'Expected and read "old probes" do not match') if (.not. ex%sonda == pr%sonda) call testFails(err, 'Expected and read "new probes" do not match') if (.not. ex%BloquePrb == pr%BloquePrb) call testFails(err, 'Expected and read "block probes" do not match') if (.not. ex%VolPrb == pr%VolPrb) call testFails(err, 'Expected and read "vol probes" do not match') - + ! Thin elements if (.not. ex%tSlots == pr%tSlots) call testFails(err, 'Expected and read "thin slots" do not match') if (.not. ex%tWires == pr%tWires) call testFails(err, 'Expected and read "thin wires" do not match') #ifdef CompileWithMTLN if (.not. ex%mtln == pr%mtln) call testFails(err, 'Expected and read mtln types do not match') #endif - if (err == 0) write(*,*) "Read and expected inputs are equal." + if (err == 0) write(*,*) "Read and expected inputs are equal." end subroutine subroutine testFails(err, msg) diff --git a/test/smbjson/test_cells.F90 b/test/smbjson/test_cells.F90 index 02a858ead..b32787829 100644 --- a/test/smbjson/test_cells.F90 +++ b/test/smbjson/test_cells.F90 @@ -37,5 +37,4 @@ integer function test_cells() bind(C) result(err) if (interval%getType() /= CELL_TYPE_SURFEL) err = err + 1 if (interval%getOrientation() /= - DIR_X) err = err + 1 if (interval%getSize() /= 3) err = err + 1 - end function diff --git a/test/smbjson/test_parser.F90 b/test/smbjson/test_parser.F90 index 6616b76b2..bd73c01fe 100644 --- a/test/smbjson/test_parser.F90 +++ b/test/smbjson/test_parser.F90 @@ -6,11 +6,11 @@ integer function test_parser_ctor() bind(C) result(err) character(len=*),parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'planewave.fdtd.json' type(parser_t) :: parser - + parser = parser_t(filename) if (parser%isInitialized) then err = 0 - else + else err = 1 end if end function @@ -79,7 +79,6 @@ integer function test_parser_read_mesh() bind(C) result(err) character(len=*),parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'mtln.fdtd.json' type(parser_t) :: parser type(mesh_t) :: mesh - type(cell_region_t), dimension(:), allocatable :: regions logical :: found type(coordinate_t) :: expected, obtained @@ -87,10 +86,10 @@ integer function test_parser_read_mesh() bind(C) result(err) parser = parser_t(filename) mesh = parser%readMesh() - + ! call mesh%printCoordHashInfo() !! For debugging only expected%position = [10,0,1] - + obtained = mesh%getCoordinate(59, found) if (.not. found) err = err + 1 if ( any(obtained%position /= expected%position)) err = err + 1 @@ -110,7 +109,7 @@ integer function test_parser_read_conformal_volume() bind(C) result(err) use smbjson_m use smbjson_testingTools - + implicit none character(len=*),parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'conformal.fdtd.json' diff --git a/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json b/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json index 4d1a038f0..b8c40d573 100644 --- a/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json +++ b/testData/cases/conductors_forming_y_on_panel/Conductors_50ohm_terminals.fdtd.json @@ -8628,324 +8628,324 @@ [ 27, 15, - 5 + 6 ], [ 27, 16, - 6 + 5 ] ], [ [ 27, 16, - 5 + 6 ], [ 27, 17, - 6 + 5 ] ], [ [ 27, 17, - 5 + 6 ], [ 27, 18, - 6 + 5 ] ], [ [ 27, 18, - 5 + 6 ], [ 27, 19, - 6 + 5 ] ], [ [ 27, 18, - 6 + 7 ], [ 27, 19, - 7 + 6 ] ], [ [ 27, 19, - 5 + 6 ], [ 27, 20, - 6 + 5 ] ], [ [ 27, 19, - 6 + 7 ], [ 27, 20, - 7 + 6 ] ], [ [ 27, 20, - 5 + 6 ], [ 27, 21, - 6 + 5 ] ], [ [ 27, 20, - 6 + 7 ], [ 27, 21, - 7 + 6 ] ], [ [ 27, 21, - 5 + 6 ], [ 27, 22, - 6 + 5 ] ], [ [ 27, 21, - 6 + 7 ], [ 27, 22, - 7 + 6 ] ], [ [ 27, 21, - 7 + 8 ], [ 27, 22, - 8 + 7 ] ], [ [ 27, 22, - 5 + 6 ], [ 27, 23, - 6 + 5 ] ], [ [ 27, 22, - 6 + 7 ], [ 27, 23, - 7 + 6 ] ], [ [ 27, 22, - 7 + 8 ], [ 27, 23, - 8 + 7 ] ], [ [ 27, 14, - 5 + 6 ], [ 27, 15, - 6 + 5 ] ], [ [ 27, 14, - 6 + 7 ], [ 27, 15, - 7 + 6 ] ], [ [ 27, 14, - 7 + 8 ], [ 27, 15, - 8 + 7 ] ], [ [ 27, 15, - 6 + 7 ], [ 27, 16, - 7 + 6 ] ], [ [ 27, 15, - 7 + 8 ], [ 27, 16, - 8 + 7 ] ], [ [ 27, 16, - 6 + 7 ], [ 27, 17, - 7 + 6 ] ], [ [ 27, 16, - 7 + 8 ], [ 27, 17, - 8 + 7 ] ], [ [ 27, 17, - 6 + 7 ], [ 27, 18, - 7 + 6 ] ], [ [ 27, 17, - 7 + 8 ], [ 27, 18, - 8 + 7 ] ], [ [ 27, 18, - 7 + 8 ], [ 27, 19, - 8 + 7 ] ], [ [ 27, 19, - 7 + 8 ], [ 27, 20, - 8 + 7 ] ], [ [ 27, 20, - 7 + 8 ], [ 27, 21, - 8 + 7 ] ] ] diff --git a/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json b/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json index 1e30b48b8..d89a2c2ab 100644 --- a/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json +++ b/testData/cases/conductors_forming_y_on_panel/Conductors_Holland_50ohm_terminals.fdtd.json @@ -8628,324 +8628,324 @@ [ 27, 15, - 5 + 6 ], [ 27, 16, - 6 + 5 ] ], [ [ 27, 16, - 5 + 6 ], [ 27, 17, - 6 + 5 ] ], [ [ 27, 17, - 5 + 6 ], [ 27, 18, - 6 + 5 ] ], [ [ 27, 18, - 5 + 6 ], [ 27, 19, - 6 + 5 ] ], [ [ 27, 18, - 6 + 7 ], [ 27, 19, - 7 + 6 ] ], [ [ 27, 19, - 5 + 6 ], [ 27, 20, - 6 + 5 ] ], [ [ 27, 19, - 6 + 7 ], [ 27, 20, - 7 + 6 ] ], [ [ 27, 20, - 5 + 6 ], [ 27, 21, - 6 + 5 ] ], [ [ 27, 20, - 6 + 7 ], [ 27, 21, - 7 + 6 ] ], [ [ 27, 21, - 5 + 6 ], [ 27, 22, - 6 + 5 ] ], [ [ 27, 21, - 6 + 7 ], [ 27, 22, - 7 + 6 ] ], [ [ 27, 21, - 7 + 8 ], [ 27, 22, - 8 + 7 ] ], [ [ 27, 22, - 5 + 6 ], [ 27, 23, - 6 + 5 ] ], [ [ 27, 22, - 6 + 7 ], [ 27, 23, - 7 + 6 ] ], [ [ 27, 22, - 7 + 8 ], [ 27, 23, - 8 + 7 ] ], [ [ 27, 14, - 5 + 6 ], [ 27, 15, - 6 + 5 ] ], [ [ 27, 14, - 6 + 7 ], [ 27, 15, - 7 + 6 ] ], [ [ 27, 14, - 7 + 8 ], [ 27, 15, - 8 + 7 ] ], [ [ 27, 15, - 6 + 7 ], [ 27, 16, - 7 + 6 ] ], [ [ 27, 15, - 7 + 8 ], [ 27, 16, - 8 + 7 ] ], [ [ 27, 16, - 6 + 7 ], [ 27, 17, - 7 + 6 ] ], [ [ 27, 16, - 7 + 8 ], [ 27, 17, - 8 + 7 ] ], [ [ 27, 17, - 6 + 7 ], [ 27, 18, - 7 + 6 ] ], [ [ 27, 17, - 7 + 8 ], [ 27, 18, - 8 + 7 ] ], [ [ 27, 18, - 7 + 8 ], [ 27, 19, - 8 + 7 ] ], [ [ 27, 19, - 7 + 8 ], [ 27, 20, - 8 + 7 ] ], [ [ 27, 20, - 7 + 8 ], [ 27, 21, - 8 + 7 ] ] ] diff --git a/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json b/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json index 3faf20077..c4ffd3d0a 100644 --- a/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json +++ b/testData/cases/conformal/conformal_sphere_1mm_rcs_delta.fdtd.json @@ -75,7 +75,7 @@ [8,3,5], [15,7,4], [15,4,12 ], - + [8,5,6], [6,5,13], [7,13,5], @@ -127,20 +127,20 @@ {"id": 13,"relativePosition": [16.333299994468689, 16.0, 16.0]}, {"id": 14,"relativePosition": [16.0, 16.333299994468689, 16.0]}, {"id": 15,"relativePosition": [15.0, 16.333299994468689, 16.0]}, - {"id": 16,"relativePosition": [14.666700005531311, 16.0, 16.0]}, - {"id": 17,"relativePosition": [16.333299994468689, 15.0, 16.0]}, + {"id": 16,"relativePosition": [14.666700005531311, 16.0, 16.0]}, + {"id": 17,"relativePosition": [16.333299994468689, 15.0, 16.0]}, {"id": 18,"relativePosition": [15.0, 14.666700005531311, 15.0]}, {"id": 19,"relativePosition": [16.0, 14.666700005531311, 15.0]}, - {"id": 20,"relativePosition": [14.666700005531311, 15.0, 16.0]}, + {"id": 20,"relativePosition": [14.666700005531311, 15.0, 16.0]}, {"id": 21,"relativePosition": [16.0, 16.0, 16.333299994468689]}, - {"id": 22,"relativePosition": [16.0, 15.0, 16.333299994468689]}, - {"id": 23,"relativePosition": [15.0, 16.0, 16.333299994468689]}, - {"id": 24,"relativePosition": [15.0, 14.666700005531311, 16.0]}, - {"id": 25,"relativePosition": [16.0, 14.666700005531311, 16.0]}, + {"id": 22,"relativePosition": [16.0, 15.0, 16.333299994468689]}, + {"id": 23,"relativePosition": [15.0, 16.0, 16.333299994468689]}, + {"id": 24,"relativePosition": [15.0, 14.666700005531311, 16.0]}, + {"id": 25,"relativePosition": [16.0, 14.666700005531311, 16.0]}, {"id": 26,"relativePosition": [15.0, 15.0, 16.333299994468689]}, {"id": 27,"relativePosition": [15.0, 15.0, 15.0]} - ] + ] }, "materials": [ { diff --git a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json index dd75806ea..90e5218f4 100755 --- a/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json +++ b/testData/cases/conformal_impedance_cylinder/conformal_impedance_cylinder_staircase.fdtd.json @@ -53,12 +53,12 @@ "intervals": [ [ [ - 11, + 12, 5, 7 ], [ - 12, + 11, 5, 8 ] @@ -127,12 +127,12 @@ [ 13, 6, - 13 + 12 ], [ 13, 5, - 12 + 13 ] ], [ @@ -413,12 +413,12 @@ ], [ [ - 14, + 15, 7, 11 ], [ - 15, + 14, 7, 12 ] @@ -487,12 +487,12 @@ [ 15, 8, - 9 + 8 ], [ 15, 7, - 8 + 9 ] ], [ @@ -847,156 +847,156 @@ [ 16, 11, - 10 + 11 ], [ 16, 12, - 11 + 10 ] ], [ [ 16, 11, - 11 + 12 ], [ 16, 12, - 12 + 11 ] ], [ [ 16, 11, - 12 + 13 ], [ 16, 12, - 13 + 12 ] ], [ [ 16, 11, - 7 + 8 ], [ 16, 12, - 8 + 7 ] ], [ [ 16, 11, - 8 + 9 ], [ 16, 12, - 9 + 8 ] ], [ [ 16, 11, - 9 + 10 ], [ 16, 12, - 10 + 9 ] ], [ [ 16, 12, - 9 + 10 ], [ 16, 13, - 10 + 9 ] ], [ [ 16, 12, - 10 + 11 ], [ 16, 13, - 11 + 10 ] ], [ [ 16, 12, - 11 + 12 ], [ 16, 13, - 12 + 11 ] ], [ [ 16, 12, - 12 + 13 ], [ 16, 13, - 13 + 12 ] ], [ [ 16, 12, - 7 + 8 ], [ 16, 13, - 8 + 7 ] ], [ [ 16, 12, - 8 + 9 ], [ 16, 13, - 9 + 8 ] ], [ [ 15, 13, - 8 + 9 ], [ 15, 14, - 9 + 8 ] ], [ @@ -1135,60 +1135,60 @@ [ 15, 14, - 9 + 10 ], [ 15, 15, - 10 + 9 ] ], [ [ 15, 14, - 10 + 11 ], [ 15, 15, - 11 + 10 ] ], [ [ 15, 14, - 11 + 12 ], [ 15, 15, - 12 + 11 ] ], [ [ 15, 14, - 12 + 13 ], [ 15, 15, - 13 + 12 ] ], [ [ 15, 14, - 7 + 8 ], [ 15, 15, - 8 + 7 ] ], [ @@ -1279,12 +1279,12 @@ [ 14, 15, - 12 + 13 ], [ 14, 16, - 13 + 12 ] ], [ @@ -1351,60 +1351,60 @@ [ 14, 15, - 7 + 8 ], [ 14, 16, - 8 + 7 ] ], [ [ 14, 15, - 8 + 9 ], [ 14, 16, - 9 + 8 ] ], [ [ 14, 15, - 9 + 10 ], [ 14, 16, - 10 + 9 ] ], [ [ 14, 15, - 10 + 11 ], [ 14, 16, - 11 + 10 ] ], [ [ 14, 15, - 11 + 12 ], [ 14, 16, - 12 + 11 ] ], [ @@ -1481,12 +1481,12 @@ ], [ [ - 13, + 12, 16, 11 ], [ - 12, + 13, 16, 10 ] @@ -1495,24 +1495,24 @@ [ 12, 16, - 11 + 12 ], [ 12, 17, - 12 + 11 ] ], [ [ 12, 16, - 12 + 13 ], [ 12, 17, - 13 + 12 ] ], [ @@ -1531,48 +1531,48 @@ [ 12, 16, - 7 + 8 ], [ 12, 17, - 8 + 7 ] ], [ [ 12, 16, - 8 + 9 ], [ 12, 17, - 9 + 8 ] ], [ [ 12, 16, - 9 + 10 ], [ 12, 17, - 10 + 9 ] ], [ [ 12, 16, - 10 + 11 ], [ 12, 17, - 11 + 10 ] ], [ @@ -1625,12 +1625,12 @@ ], [ [ - 12, + 11, 17, 12 ], [ - 11, + 12, 17, 11 ] @@ -1709,144 +1709,144 @@ ], [ [ - 10, + 9, 17, 8 ], [ - 9, + 10, 17, 7 ] ], [ [ - 10, + 9, 17, 9 ], [ - 9, + 10, 17, 8 ] ], [ [ - 10, + 9, 17, 10 ], [ - 9, + 10, 17, 9 ] ], [ [ - 10, + 9, 17, 11 ], [ - 9, + 10, 17, 10 ] ], [ [ - 10, + 9, 17, 12 ], [ - 9, + 10, 17, 11 ] ], [ [ - 10, + 9, 17, 13 ], [ - 9, + 10, 17, 12 ] ], [ [ - 9, + 8, 17, 8 ], [ - 8, + 9, 17, 7 ] ], [ [ - 9, + 8, 17, 9 ], [ - 8, + 9, 17, 8 ] ], [ [ - 9, + 8, 17, 10 ], [ - 8, + 9, 17, 9 ] ], [ [ - 9, + 8, 17, 11 ], [ - 8, + 9, 17, 10 ] ], [ [ - 9, + 8, 17, 12 ], [ - 8, + 9, 17, 11 ] ], [ [ - 9, + 8, 17, 13 ], [ - 8, + 9, 17, 12 ] @@ -1855,214 +1855,214 @@ [ 8, 16, - 7 + 8 ], [ 8, 17, - 8 + 7 ] ], [ [ 8, 16, - 8 + 9 ], [ 8, 17, - 9 + 8 ] ], [ [ 8, 16, - 9 + 10 ], [ 8, 17, - 10 + 9 ] ], [ [ 8, 16, - 10 + 11 ], [ 8, 17, - 11 + 10 ] ], [ [ 8, 16, - 11 + 12 ], [ 8, 17, - 12 + 11 ] ], [ [ 8, 16, - 12 + 13 ], [ 8, 17, - 13 + 12 ] ], [ [ - 8, + 7, 16, 8 ], [ - 7, + 8, 16, 7 ] ], [ [ - 8, + 7, 16, 9 ], [ - 7, + 8, 16, 8 ] ], [ [ - 8, + 7, 16, 10 ], [ - 7, + 8, 16, 9 ] ], [ [ - 8, + 7, 16, 11 ], [ - 7, + 8, 16, 10 ] ], [ [ - 8, + 7, 16, 12 ], [ - 7, + 8, 16, 11 ] ], [ [ - 8, + 7, 16, 13 ], [ - 7, + 8, 16, 12 ] ], [ [ - 7, + 6, 16, 8 ], [ - 6, + 7, 16, 7 ] ], [ [ - 7, + 6, 16, 9 ], [ - 6, + 7, 16, 8 ] ], [ [ - 7, + 6, 16, 10 ], [ - 6, + 7, 16, 9 ] ], [ [ - 7, + 6, 16, 11 ], [ - 6, + 7, 16, 10 ] ], [ [ - 7, + 6, 16, 12 ], [ - 6, + 7, 16, 11 ] ], [ [ - 7, + 6, 16, 13 ], [ - 6, + 7, 16, 12 ] @@ -2071,48 +2071,48 @@ [ 6, 15, - 7 + 8 ], [ 6, 16, - 8 + 7 ] ], [ [ 6, 15, - 8 + 9 ], [ 6, 16, - 9 + 8 ] ], [ [ 6, 15, - 9 + 10 ], [ 6, 16, - 10 + 9 ] ], [ [ 6, 15, - 10 + 11 ], [ 6, 16, - 11 + 10 ] ], [ @@ -2131,22 +2131,22 @@ [ 6, 15, - 12 + 13 ], [ 6, 16, - 13 + 12 ] ], [ [ - 6, + 5, 15, 8 ], [ - 5, + 6, 15, 7 ] @@ -2165,48 +2165,48 @@ ], [ [ - 6, + 5, 15, 10 ], [ - 5, + 6, 15, 9 ] ], [ [ - 6, + 5, 15, 11 ], [ - 5, + 6, 15, 10 ] ], [ [ - 6, + 5, 15, 12 ], [ - 5, + 6, 15, 11 ] ], [ [ - 6, + 5, 15, 13 ], [ - 5, + 6, 15, 12 ] @@ -2215,60 +2215,60 @@ [ 5, 14, - 7 + 8 ], [ 5, 15, - 8 + 7 ] ], [ [ 5, 14, - 8 + 9 ], [ 5, 15, - 9 + 8 ] ], [ [ 5, 14, - 9 + 10 ], [ 5, 15, - 10 + 9 ] ], [ [ 5, 14, - 10 + 11 ], [ 5, 15, - 11 + 10 ] ], [ [ 5, 14, - 11 + 12 ], [ 5, 15, - 12 + 11 ] ], [ @@ -2287,120 +2287,120 @@ [ 5, 13, - 10 + 11 ], [ 5, 14, - 11 + 10 ] ], [ [ 5, 13, - 11 + 12 ], [ 5, 14, - 12 + 11 ] ], [ [ 5, 13, - 12 + 13 ], [ 5, 14, - 13 + 12 ] ], [ [ 5, 13, - 7 + 8 ], [ 5, 14, - 8 + 7 ] ], [ [ 5, 13, - 8 + 9 ], [ 5, 14, - 9 + 8 ] ], [ [ 5, 13, - 9 + 10 ], [ 5, 14, - 10 + 9 ] ], [ [ 4, 12, - 9 + 10 ], [ 4, 13, - 10 + 9 ] ], [ [ 4, 12, - 10 + 11 ], [ 4, 13, - 11 + 10 ] ], [ [ 4, 12, - 11 + 12 ], [ 4, 13, - 12 + 11 ] ], [ [ 4, 12, - 12 + 13 ], [ 4, 13, - 13 + 12 ] ], [ @@ -2503,84 +2503,84 @@ [ 4, 11, - 12 + 13 ], [ 4, 12, - 13 + 12 ] ], [ [ 4, 11, - 7 + 8 ], [ 4, 12, - 8 + 7 ] ], [ [ 4, 11, - 8 + 9 ], [ 4, 12, - 9 + 8 ] ], [ [ 4, 11, - 9 + 10 ], [ 4, 12, - 10 + 9 ] ], [ [ 4, 11, - 10 + 11 ], [ 4, 12, - 11 + 10 ] ], [ [ 4, 11, - 11 + 12 ], [ 4, 12, - 12 + 11 ] ], [ [ 4, 10, - 12 + 13 ], [ 4, 11, - 13 + 12 ] ], [ @@ -2717,72 +2717,72 @@ ], [ [ - 4, + 5, 9, 8 ], [ - 5, + 4, 9, 9 ] ], [ [ - 4, + 5, 9, 9 ], [ - 5, + 4, 9, 10 ] ], [ [ - 4, + 5, 9, 10 ], [ - 5, + 4, 9, 11 ] ], [ [ - 4, + 5, 9, 11 ], [ - 5, + 4, 9, 12 ] ], [ [ - 4, + 5, 9, 12 ], [ - 5, + 4, 9, 13 ] ], [ [ - 4, + 5, 9, 7 ], [ - 5, + 4, 9, 8 ] @@ -2933,72 +2933,72 @@ ], [ [ - 5, + 6, 7, 9 ], [ - 6, + 5, 7, 10 ] ], [ [ - 5, + 6, 7, 10 ], [ - 6, + 5, 7, 11 ] ], [ [ - 5, + 6, 7, 11 ], [ - 6, + 5, 7, 12 ] ], [ [ - 5, + 6, 7, 12 ], [ - 6, + 5, 7, 13 ] ], [ [ - 5, + 6, 7, 7 ], [ - 6, + 5, 7, 8 ] ], [ [ - 5, + 6, 7, 8 ], [ - 6, + 5, 7, 9 ] @@ -3007,12 +3007,12 @@ [ 6, 7, - 10 + 9 ], [ 6, 6, - 9 + 10 ] ], [ @@ -3077,144 +3077,144 @@ ], [ [ - 6, + 7, 6, 7 ], [ - 7, + 6, 6, 8 ] ], [ [ - 6, + 7, 6, 8 ], [ - 7, + 6, 6, 9 ] ], [ [ - 6, + 7, 6, 9 ], [ - 7, + 6, 6, 10 ] ], [ [ - 6, + 7, 6, 10 ], [ - 7, + 6, 6, 11 ] ], [ [ - 6, + 7, 6, 11 ], [ - 7, + 6, 6, 12 ] ], [ [ - 6, + 7, 6, 12 ], [ - 7, + 6, 6, 13 ] ], [ [ - 7, + 8, 6, 7 ], [ - 8, + 7, 6, 8 ] ], [ [ - 7, + 8, 6, 8 ], [ - 8, + 7, 6, 9 ] ], [ [ - 7, + 8, 6, 9 ], [ - 8, + 7, 6, 10 ] ], [ [ - 7, + 8, 6, 10 ], [ - 8, + 7, 6, 11 ] ], [ [ - 7, + 8, 6, 11 ], [ - 8, + 7, 6, 12 ] ], [ [ - 7, + 8, 6, 12 ], [ - 8, + 7, 6, 13 ] @@ -3293,144 +3293,144 @@ ], [ [ - 8, + 9, 5, 7 ], [ - 9, + 8, 5, 8 ] ], [ [ - 8, + 9, 5, 8 ], [ - 9, + 8, 5, 9 ] ], [ [ - 8, + 9, 5, 9 ], [ - 9, + 8, 5, 10 ] ], [ [ - 8, + 9, 5, 10 ], [ - 9, + 8, 5, 11 ] ], [ [ - 8, + 9, 5, 11 ], [ - 9, + 8, 5, 12 ] ], [ [ - 8, + 9, 5, 12 ], [ - 9, + 8, 5, 13 ] ], [ [ - 9, + 10, 5, 7 ], [ - 10, + 9, 5, 8 ] ], [ [ - 9, + 10, 5, 8 ], [ - 10, + 9, 5, 9 ] ], [ [ - 9, + 10, 5, 9 ], [ - 10, + 9, 5, 10 ] ], [ [ - 9, + 10, 5, 10 ], [ - 10, + 9, 5, 11 ] ], [ [ - 9, + 10, 5, 11 ], [ - 10, + 9, 5, 12 ] ], [ [ - 9, + 10, 5, 12 ], [ - 10, + 9, 5, 13 ] @@ -3486,12 +3486,12 @@ [ [ 11, - 16, + 17, 7 ], [ 12, - 17, + 16, 7 ] ], @@ -3510,12 +3510,12 @@ [ [ 10, - 16, + 17, 7 ], [ 11, - 17, + 16, 7 ] ], @@ -3534,12 +3534,12 @@ [ [ 9, - 16, + 17, 7 ], [ 10, - 17, + 16, 7 ] ], @@ -3582,24 +3582,24 @@ [ [ 7, - 15, + 16, 7 ], [ 8, - 16, + 15, 7 ] ], [ [ 15, - 8, + 9, 7 ], [ 16, - 9, + 8, 7 ] ], @@ -3630,24 +3630,24 @@ [ [ 14, - 7, + 8, 7 ], [ 15, - 8, + 7, 7 ] ], [ [ 6, - 14, + 15, 7 ], [ 7, - 15, + 14, 7 ] ], @@ -3666,24 +3666,24 @@ [ [ 13, - 6, + 7, 7 ], [ 14, - 7, + 6, 7 ] ], [ [ 5, - 13, + 14, 7 ], [ 6, - 14, + 13, 7 ] ], @@ -3726,24 +3726,24 @@ [ [ 11, - 5, + 6, 7 ], [ 12, - 6, + 5, 7 ] ], [ [ 4, - 11, + 12, 7 ], [ 5, - 12, + 11, 7 ] ], @@ -3810,12 +3810,12 @@ [ [ 7, - 6, + 7, 7 ], [ 8, - 7, + 6, 7 ] ], @@ -3846,35 +3846,35 @@ [ [ 6, - 7, + 8, 7 ], [ 7, - 8, + 7, 7 ] ], [ [ - 12, + 11, 6, 8 ], [ - 11, + 12, 6, 7 ] ], [ [ - 12, + 11, 6, 9 ], [ - 11, + 12, 6, 8 ] @@ -3893,36 +3893,36 @@ ], [ [ - 12, + 11, 6, 11 ], [ - 11, + 12, 6, 10 ] ], [ [ - 12, + 11, 6, 12 ], [ - 11, + 12, 6, 11 ] ], [ [ - 12, + 11, 6, 13 ], [ - 11, + 12, 6, 12 ] @@ -3931,22 +3931,22 @@ [ 12, 6, - 7 + 8 ], [ 12, 7, - 8 + 7 ] ], [ [ - 13, + 12, 7, 8 ], [ - 12, + 13, 7, 7 ] @@ -3955,58 +3955,58 @@ [ 12, 6, - 8 + 9 ], [ 12, 7, - 9 + 8 ] ], [ [ - 13, + 12, 7, 9 ], [ - 12, + 13, 7, 8 ] ], [ [ - 13, + 12, 7, 10 ], [ - 12, + 13, 7, 9 ] ], [ [ - 13, + 12, 7, 11 ], [ - 12, + 13, 7, 10 ] ], [ [ - 13, + 12, 7, 12 ], [ - 12, + 13, 7, 11 ] @@ -4015,130 +4015,130 @@ [ 12, 6, - 9 + 10 ], [ 12, 7, - 10 + 9 ] ], [ [ 12, 6, - 10 + 11 ], [ 12, 7, - 11 + 10 ] ], [ [ 12, 6, - 11 + 12 ], [ 12, 7, - 12 + 11 ] ], [ [ 12, 6, - 12 + 13 ], [ 12, 7, - 13 + 12 ] ], [ [ - 13, + 12, 7, 13 ], [ - 12, + 13, 7, 12 ] ], [ [ - 14, + 13, 7, 8 ], [ - 13, + 14, 7, 7 ] ], [ [ - 14, + 13, 7, 9 ], [ - 13, + 14, 7, 8 ] ], [ [ - 14, + 13, 7, 10 ], [ - 13, + 14, 7, 9 ] ], [ [ - 14, + 13, 7, 11 ], [ - 13, + 14, 7, 10 ] ], [ [ - 14, + 13, 7, 12 ], [ - 13, + 14, 7, 11 ] ], [ [ - 14, + 13, 7, 13 ], [ - 13, + 14, 7, 12 ] @@ -4147,94 +4147,94 @@ [ 14, 7, - 7 + 8 ], [ 14, 8, - 8 + 7 ] ], [ [ 14, 7, - 8 + 9 ], [ 14, 8, - 9 + 8 ] ], [ [ 14, 7, - 9 + 10 ], [ 14, 8, - 10 + 9 ] ], [ [ 14, 7, - 10 + 11 ], [ 14, 8, - 11 + 10 ] ], [ [ 14, 7, - 11 + 12 ], [ 14, 8, - 12 + 11 ] ], [ [ 14, 7, - 12 + 13 ], [ 14, 8, - 13 + 12 ] ], [ [ - 15, + 14, 9, 8 ], [ - 14, + 15, 9, 7 ] ], [ [ - 15, + 14, 9, 9 ], [ - 14, + 15, 9, 8 ] @@ -4255,58 +4255,58 @@ [ 14, 8, - 7 + 8 ], [ 14, 9, - 8 + 7 ] ], [ [ 14, 8, - 8 + 9 ], [ 14, 9, - 9 + 8 ] ], [ [ 14, 8, - 9 + 10 ], [ 14, 9, - 10 + 9 ] ], [ [ 14, 8, - 10 + 11 ], [ 14, 9, - 11 + 10 ] ], [ [ - 15, + 14, 9, 11 ], [ - 14, + 15, 9, 10 ] @@ -4315,22 +4315,22 @@ [ 14, 8, - 11 + 12 ], [ 14, 9, - 12 + 11 ] ], [ [ - 15, + 14, 9, 12 ], [ - 14, + 15, 9, 11 ] @@ -4339,22 +4339,22 @@ [ 14, 8, - 12 + 13 ], [ 14, 9, - 13 + 12 ] ], [ [ - 15, + 14, 9, 13 ], [ - 14, + 15, 9, 12 ] @@ -4399,48 +4399,48 @@ [ 15, 9, - 10 + 11 ], [ 15, 10, - 11 + 10 ] ], [ [ 15, 9, - 11 + 12 ], [ 15, 10, - 12 + 11 ] ], [ [ 15, 9, - 12 + 13 ], [ 15, 10, - 13 + 12 ] ], [ [ 15, 10, - 12 + 13 ], [ 15, 11, - 13 + 12 ] ], [ @@ -4627,24 +4627,24 @@ [ 15, 12, - 11 + 12 ], [ 15, 13, - 12 + 11 ] ], [ [ 15, 12, - 12 + 13 ], [ 15, 13, - 13 + 12 ] ], [ @@ -4661,60 +4661,60 @@ ], [ [ - 14, + 15, 13, 7 ], [ - 15, + 14, 13, 8 ] ], [ [ - 14, + 15, 13, 8 ], [ - 15, + 14, 13, 9 ] ], [ [ - 14, + 15, 13, 9 ], [ - 15, + 14, 13, 10 ] ], [ [ - 14, + 15, 13, 10 ], [ - 15, + 14, 13, 11 ] ], [ [ - 14, + 15, 13, 11 ], [ - 15, + 14, 13, 12 ] @@ -4781,12 +4781,12 @@ ], [ [ - 14, + 15, 13, 12 ], [ - 15, + 14, 13, 13 ] @@ -4889,12 +4889,12 @@ ], [ [ - 13, + 14, 15, 11 ], [ - 14, + 13, 15, 12 ] @@ -4913,12 +4913,12 @@ ], [ [ - 13, + 14, 15, 12 ], [ - 14, + 13, 15, 13 ] @@ -4937,72 +4937,72 @@ ], [ [ - 12, + 13, 15, 7 ], [ - 13, + 12, 15, 8 ] ], [ [ - 12, + 13, 15, 8 ], [ - 13, + 12, 15, 9 ] ], [ [ - 12, + 13, 15, 9 ], [ - 13, + 12, 15, 10 ] ], [ [ - 12, + 13, 15, 10 ], [ - 13, + 12, 15, 11 ] ], [ [ - 12, + 13, 15, 11 ], [ - 13, + 12, 15, 12 ] ], [ [ - 12, + 13, 15, 12 ], [ - 13, + 12, 15, 13 ] @@ -5081,60 +5081,60 @@ ], [ [ - 11, + 12, 16, 7 ], [ - 12, + 11, 16, 8 ] ], [ [ - 11, + 12, 16, 8 ], [ - 12, + 11, 16, 9 ] ], [ [ - 11, + 12, 16, 9 ], [ - 12, + 11, 16, 10 ] ], [ [ - 11, + 12, 16, 10 ], [ - 12, + 11, 16, 11 ] ], [ [ - 11, + 12, 16, 11 ], [ - 12, + 11, 16, 12 ] @@ -5153,72 +5153,72 @@ ], [ [ - 10, + 11, 16, 7 ], [ - 11, + 10, 16, 8 ] ], [ [ - 10, + 11, 16, 8 ], [ - 11, + 10, 16, 9 ] ], [ [ - 10, + 11, 16, 9 ], [ - 11, + 10, 16, 10 ] ], [ [ - 10, + 11, 16, 10 ], [ - 11, + 10, 16, 11 ] ], [ [ - 10, + 11, 16, 11 ], [ - 11, + 10, 16, 12 ] ], [ [ - 10, + 11, 16, 12 ], [ - 11, + 10, 16, 13 ] @@ -5273,12 +5273,12 @@ ], [ [ - 9, + 10, 16, 11 ], [ - 10, + 9, 16, 12 ] @@ -5477,12 +5477,12 @@ ], [ [ - 7, + 8, 15, 10 ], [ - 8, + 7, 15, 11 ] @@ -5659,12 +5659,12 @@ [ 6, 14, - 12 + 11 ], [ 6, 13, - 11 + 12 ] ], [ @@ -5729,12 +5729,12 @@ ], [ [ - 6, + 5, 13, 13 ], [ - 5, + 6, 13, 12 ] @@ -5803,60 +5803,60 @@ [ 5, 12, - 8 + 9 ], [ 5, 13, - 9 + 8 ] ], [ [ 5, 12, - 9 + 10 ], [ 5, 13, - 10 + 9 ] ], [ [ 5, 12, - 10 + 11 ], [ 5, 13, - 11 + 10 ] ], [ [ 5, 12, - 11 + 12 ], [ 5, 13, - 12 + 11 ] ], [ [ 5, 12, - 12 + 13 ], [ 5, 13, - 13 + 12 ] ], [ @@ -5875,36 +5875,36 @@ [ 5, 11, - 10 + 11 ], [ 5, 12, - 11 + 10 ] ], [ [ 5, 11, - 11 + 12 ], [ 5, 12, - 12 + 11 ] ], [ [ 5, 11, - 12 + 13 ], [ 5, 12, - 13 + 12 ] ], [ @@ -5959,70 +5959,70 @@ [ 5, 10, - 8 + 9 ], [ 5, 11, - 9 + 8 ] ], [ [ 5, 10, - 9 + 10 ], [ 5, 11, - 10 + 9 ] ], [ [ 5, 10, - 10 + 11 ], [ 5, 11, - 11 + 10 ] ], [ [ 5, 10, - 11 + 12 ], [ 5, 11, - 12 + 11 ] ], [ [ 5, 10, - 12 + 13 ], [ 5, 11, - 13 + 12 ] ], [ [ - 5, + 6, 9, 7 ], [ - 6, + 5, 9, 8 ] @@ -6041,12 +6041,12 @@ ], [ [ - 5, + 6, 9, 8 ], [ - 6, + 5, 9, 9 ] @@ -6163,96 +6163,96 @@ [ 6, 8, - 7 + 8 ], [ 6, 9, - 8 + 7 ] ], [ [ 6, 8, - 8 + 9 ], [ 6, 9, - 9 + 8 ] ], [ [ 6, 8, - 9 + 10 ], [ 6, 9, - 10 + 9 ] ], [ [ 6, 8, - 10 + 11 ], [ 6, 9, - 11 + 10 ] ], [ [ 6, 8, - 11 + 12 ], [ 6, 9, - 12 + 11 ] ], [ [ 6, 8, - 12 + 13 ], [ 6, 9, - 13 + 12 ] ], [ [ 7, 7, - 7 + 8 ], [ 7, 8, - 8 + 7 ] ], [ [ 7, 7, - 8 + 9 ], [ 7, 8, - 9 + 8 ] ], [ @@ -6295,12 +6295,12 @@ [ 7, 7, - 9 + 10 ], [ 7, 8, - 10 + 9 ] ], [ @@ -6319,34 +6319,34 @@ [ 7, 7, - 10 + 11 ], [ 7, 8, - 11 + 10 ] ], [ [ 7, 7, - 11 + 12 ], [ 7, 8, - 12 + 11 ] ], [ [ - 6, + 7, 8, 11 ], [ - 7, + 6, 8, 12 ] @@ -6355,22 +6355,22 @@ [ 7, 7, - 12 + 13 ], [ 7, 8, - 13 + 12 ] ], [ [ - 6, + 7, 8, 12 ], [ - 7, + 6, 8, 13 ] @@ -6451,12 +6451,12 @@ [ 8, 6, - 7 + 8 ], [ 8, 7, - 8 + 7 ] ], [ @@ -6485,12 +6485,12 @@ ], [ [ - 9, + 8, 6, 10 ], [ - 8, + 9, 6, 9 ] @@ -6499,60 +6499,60 @@ [ 8, 6, - 8 + 9 ], [ 8, 7, - 9 + 8 ] ], [ [ 8, 6, - 9 + 10 ], [ 8, 7, - 10 + 9 ] ], [ [ 8, 6, - 10 + 11 ], [ 8, 7, - 11 + 10 ] ], [ [ 8, 6, - 11 + 12 ], [ 8, 7, - 12 + 11 ] ], [ [ 8, 6, - 12 + 13 ], [ 8, 7, - 13 + 12 ] ], [ @@ -6593,12 +6593,12 @@ ], [ [ - 10, + 9, 6, 8 ], [ - 9, + 10, 6, 7 ] @@ -6666,48 +6666,48 @@ [ [ 15, - 8, + 7, 13 ], [ 14, - 7, + 8, 13 ] ], [ [ 14, - 7, + 6, 13 ], [ 13, - 6, + 7, 13 ] ], [ [ 15, - 9, + 8, 13 ], [ 14, - 8, + 9, 13 ] ], [ [ 16, - 9, + 8, 13 ], [ 15, - 8, + 9, 13 ] ], @@ -6726,108 +6726,108 @@ [ [ 13, - 7, + 6, 13 ], [ 12, - 6, + 7, 13 ] ], [ [ 16, - 10, + 9, 13 ], [ 15, - 9, + 10, 13 ] ], [ [ 12, - 6, + 5, 13 ], [ 11, - 5, + 6, 13 ] ], [ [ 16, - 11, + 10, 13 ], [ 15, - 10, + 11, 13 ] ], [ [ 16, - 12, + 11, 13 ], [ 15, - 11, + 12, 13 ] ], [ [ 10, - 6, + 5, 13 ], [ 9, - 5, + 6, 13 ] ], [ [ 16, - 13, + 12, 13 ], [ 15, - 12, + 13, 13 ] ], [ [ 9, - 6, + 5, 13 ], [ 8, - 5, + 6, 13 ] ], [ [ 15, - 14, + 13, 13 ], [ 14, - 13, + 14, 13 ] ], @@ -6930,12 +6930,12 @@ [ [ 12, - 17, + 16, 13 ], [ 11, - 16, + 17, 13 ] ], @@ -6966,12 +6966,12 @@ [ [ 5, - 11, + 10, 13 ], [ 4, - 10, + 11, 13 ] ], @@ -7014,60 +7014,60 @@ [ [ 5, - 13, + 12, 13 ], [ 4, - 12, + 13, 13 ] ], [ [ 8, - 16, + 15, 13 ], [ 7, - 15, + 16, 13 ] ], [ [ 7, - 16, + 15, 13 ], [ 6, - 15, + 16, 13 ] ], [ [ 6, - 14, + 13, 13 ], [ 5, - 13, + 14, 13 ] ], [ [ 6, - 15, + 14, 13 ], [ 5, - 14, + 15, 13 ] ], @@ -7159,36 +7159,36 @@ [ 10, 5, - 10 + 11 ], [ 10, 6, - 11 + 10 ] ], [ [ 10, 5, - 11 + 12 ], [ 10, 6, - 12 + 11 ] ], [ [ 10, 5, - 12 + 13 ], [ 10, 6, - 13 + 12 ] ], [ diff --git a/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py b/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py index 699eabaf3..b45c10f80 100644 --- a/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py +++ b/testData/cases/conformal_surface_sphere/conformal_surface_sphere_prepost.py @@ -52,7 +52,7 @@ def had(n,z): rcs = np.abs(rcs)**2*(l**2/(4*np.pi)) -# %% plot results +# %% plot results plt.loglog(f, rcs/(np.pi*a**2), '.', label='analytical') plt.loglog(f90_0, rg90_0/(np.pi*(a)**2), '--', label='Structured') plt.xlabel('f [Hz]') @@ -61,7 +61,7 @@ def had(n,z): plt.hlines(1,0.0,7e8, colors ='red', linestyles='--') plt.legend() -# %% plot results +# %% plot results plt.plot(ex['time']*1e6, ex['field'], label=r'$E_x$') plt.plot(ey['time']*1e6, ey['field'], label=r'$E_y$') plt.plot(ez['time']*1e6, ez['field'], label=r'$E_z$') @@ -69,4 +69,3 @@ def had(n,z): plt.ylabel(r'|E|') plt.title('Field inside hollow PEC sphere') plt.legend() - diff --git a/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py b/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py index 986aabce2..5fb81a026 100644 --- a/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py +++ b/testData/cases/conformal_thin_strip/conformal_thin_strip_prepost.py @@ -34,7 +34,7 @@ dt_bulk = tbulk[1]-tbulk[0] Ifbulk = dt_bulk*np.array([np.sum(Ibulk * np.exp(-1j * 2 * np.pi * f * tbulk)) for f in new_freqs]) -#impedance comparison +#impedance comparison plt.loglog(new_freqs, np.abs(Vfexc/Ifbulk), label='conformal') plt.ylabel(r'Z($\Omega$)') plt.xlabel('f [Hz]') diff --git a/testData/cases/planewave/pw-with-periodic.fdtd.json b/testData/cases/planewave/pw-with-periodic.fdtd.json index f1209a279..0cd604302 100644 --- a/testData/cases/planewave/pw-with-periodic.fdtd.json +++ b/testData/cases/planewave/pw-with-periodic.fdtd.json @@ -6,7 +6,7 @@ "timeStep": 0.05e-9, "numberOfSteps": 400 }, - + "boundary": { "xLower": {"type": "periodic"}, "xUpper": {"type": "periodic"}, diff --git a/testData/input_examples/conformal.fdtd.json b/testData/input_examples/conformal.fdtd.json index eaeb15598..23f69ee88 100644 --- a/testData/input_examples/conformal.fdtd.json +++ b/testData/input_examples/conformal.fdtd.json @@ -6,7 +6,7 @@ "timeStep": 3e-12, "numberOfSteps": 50000 }, - + "boundary": { "xLower": {"type": "pec"}, "xUpper": {"type": "pec"}, @@ -61,10 +61,10 @@ ] }, - "materials": [ + "materials": [ { "name": "aluminum", - "id": 1, + "id": 1, "type": "multilayeredSurface", "layers": [ {"thickness": 10e-3, "electricConductivity": 100} @@ -72,7 +72,7 @@ }, { "name": "pec", - "id": 2, + "id": 2, "type": "pec" } ], From d90bc67e03798e4e84a2dc8a6c8d1fe3bc2e3b9f Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Fri, 21 Aug 2026 18:42:42 +0200 Subject: [PATCH 34/35] Minor --- src_json_parser/smbjson.F90 | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src_json_parser/smbjson.F90 b/src_json_parser/smbjson.F90 index 67e543e94..b8e565b2c 100644 --- a/src_json_parser/smbjson.F90 +++ b/src_json_parser/smbjson.F90 @@ -265,17 +265,7 @@ subroutine addElements(mesh) CASE (J_ELEM_TYPE_CELL) block type(json_value), pointer :: conformalEntry - type(cell_region_t) :: cR - logical :: foundConformalEntry - - call this%core%get(je, J_CONF_VOLUME_TRIANGLES, conformalEntry, found=foundConformalEntry) - if (.not. foundConformalEntry) then - call this%core%get(je, J_SUBTYPE, conformalEntry, found=foundConformalEntry) - end if - if (foundConformalEntry) then - call WarnErrReport('Element type "cell" cannot define conformal geometry. Use type "conformal".', .true.) - return - end if + type(cell_region_t) :: cR cR%intervals = readCellIntervals(je, J_CELL_INTERVALS) call mesh%addCellRegion(id, cR) end block From dd2309d10cfe2ec1718827019558f9b37382c4cb Mon Sep 17 00:00:00 2001 From: Luis Manuel Diaz Angulo Date: Fri, 21 Aug 2026 18:44:59 +0200 Subject: [PATCH 35/35] Minor --- test/smbjson/smbjson_tests.h | 2 -- test/smbjson/test_parser.F90 | 20 +------------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/test/smbjson/smbjson_tests.h b/test/smbjson/smbjson_tests.h index abe0623a0..058ecbaec 100644 --- a/test/smbjson/smbjson_tests.h +++ b/test/smbjson/smbjson_tests.h @@ -12,7 +12,6 @@ extern "C" int test_mesh_polyline_to_linel(); extern "C" int test_parser_ctor(); extern "C" int test_parser_read_mesh(); extern "C" int test_parser_read_conformal_volume(); -extern "C" int test_parser_reject_conformal_cell_label(); extern "C" int test_read_planewave(); extern "C" int test_read_planewave_empty_elementids(); @@ -51,7 +50,6 @@ TEST(smbjson, mesh_polyline_to_linel) { EXPECT_EQ(0, test_mesh_polyline_to_li TEST(smbjson, parser_ctor) { EXPECT_EQ(0, test_parser_ctor()); } TEST(smbjson, parser_read_mesh) { EXPECT_EQ(0, test_parser_read_mesh()); } TEST(smbjson, parser_read_conf_volume) { EXPECT_EQ(0, test_parser_read_conformal_volume()); } -TEST(smbjson, parser_reject_conformal_cell_label) { EXPECT_EQ(0, test_parser_reject_conformal_cell_label()); } TEST(smbjson, read_planewave) { EXPECT_EQ(0, test_read_planewave()); } TEST(smbjson, read_planewave_empty_elementids) { EXPECT_EQ(0, test_read_planewave_empty_elementids()); } TEST(smbjson, read_dielectricslab) { EXPECT_EQ(0, test_read_dielectricslab()); } diff --git a/test/smbjson/test_parser.F90 b/test/smbjson/test_parser.F90 index bd73c01fe..2a3a1dd1e 100644 --- a/test/smbjson/test_parser.F90 +++ b/test/smbjson/test_parser.F90 @@ -133,22 +133,4 @@ integer function test_parser_read_conformal_volume() bind(C) result(err) problem = parser%readProblemDescription() if (.not. associated(problem%conformalRegs%volumes)) err = err + 1 if (size(problem%conformalRegs%volumes) /= 1) err = err + 1 -end function - -integer function test_parser_reject_conformal_cell_label() bind(C) result(err) - use smbjson_m - use smbjson_testingTools - use Report_m, only: isFatalError, resetFatalError - implicit none - - character(len=*), parameter :: filename = PATH_TO_TEST_DATA//INPUT_EXAMPLES//'conformal_cell_label.fdtd.json' - type(parser_t) :: parser - type(mesh_t) :: mesh - - err = 0 - call resetFatalError() - parser = parser_t(filename) - mesh = parser%readMesh() - if (.not. isFatalError()) err = err + 1 - call resetFatalError() -end function test_parser_reject_conformal_cell_label +end function \ No newline at end of file