From 2e1bf59f8b2f607e778a55511ee90c036684f51c Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Fri, 19 Jul 2019 16:33:53 -0600 Subject: [PATCH 01/69] restructure CFDExchange.mo with a divided PartialExchange.mo --- .../Detailed/BaseClasses/CFDExchange.mo | 189 +------------ .../Detailed/BaseClasses/PartialExchange.mo | 262 ++++++++++++++++++ .../Detailed/BaseClasses/package.order | 1 + 3 files changed, 264 insertions(+), 188 deletions(-) create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/PartialExchange.mo diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo b/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo index 68a876d938f..d412357de44 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo @@ -1,63 +1,6 @@ within Buildings.ThermalZones.Detailed.BaseClasses; block CFDExchange "Block that exchanges data with the CFD code" - extends Modelica.Blocks.Interfaces.DiscreteBlock( - firstTrigger(start=false, - fixed=true)); - parameter String cfdFilNam "CFD input file name" annotation (Dialog( - loadSelector(caption= - "Select CFD input file"))); - parameter Boolean activateInterface=true - "Set to false to deactivate interface and use instead yFixed as output" - annotation (Evaluate=true); - parameter Integer nXi - "Number of independent species concentration of the inflowing medium"; - parameter Integer nC "Number of trace substances of the inflowing medium"; - parameter Integer nWri(min=0) - "Number of values to write to the CFD simulation"; - parameter Integer nRea(min=0) - "Number of double values to be read from the CFD simulation"; - parameter Integer flaWri[nWri] = ones(nWri) - "Flag for double values (0: use current value, 1: use average over interval, 2: use integral over interval)" - annotation(Evaluate=true); - parameter Real yFixed[nRea] "Fixed output, used if activateInterface=false" - annotation (Dialog(enable=not activateInterface)); - parameter Integer nSur(min=2) "Number of surfaces"; - parameter Integer nConExtWin(min=0) - "number of exterior construction with window"; - parameter CFDSurfaceIdentifier surIde[nSur] "Surface identifiers"; - parameter Boolean haveShade - "Set to true if at least one window in the room has a shade"; - parameter Boolean haveSensor - "Flag, true if the model has at least one sensor"; - parameter String sensorName[:] - "Names of sensors as declared in the CFD input file"; - parameter String portName[:] - "Names of fluid ports as declared in the CFD input file"; - parameter Boolean verbose=false "Set to true for verbose output"; - parameter Modelica.SIunits.Density rho_start "Density at initial state"; - - CFDThread CFDThre = CFDThread() - "Allocate memory for cosimulation variables via constructor and send stop command to FFD via destructor"; - - Modelica.Blocks.Interfaces.RealInput u[nWri] "Inputs to CFD" - annotation (Placement(transformation(extent={{-140,-20},{-100,20}}))); - discrete Modelica.Blocks.Interfaces.RealOutput y[nRea] "Outputs received from CFD" - annotation (Placement(transformation(extent={{100,-10},{120,10}}))); - - Real uInt[nWri] "Value of integral"; - discrete Real uIntPre[nWri] "Value of integral at previous sampling instance"; - discrete Real uWri[nWri] "Value to be sent to the CFD interface"; - - -protected - final parameter Integer nSen(min=0) = size(sensorName, 1) - "Number of sensors that are connected to CFD output"; - final parameter Integer nPorts=size(portName, 1) - "Number of fluid ports for the HVAC inlet and outlets"; - discrete Modelica.SIunits.Time modTimRea(fixed=false) - "Current model time received from CFD"; - - discrete Integer retVal(start=0, fixed=true) "Return value from CFD"; + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialExchange; /////////////////////////////////////////////////////////////////////////// // Function that sends the parameters of the model from Modelica to CFD @@ -151,94 +94,7 @@ protected nY); end exchange; - /////////////////////////////////////////////////////////////////////////// - // Function that returns strings that are not unique. - function returnNonUniqueStrings - input Integer n(min=2) "Number entries"; - input Boolean ideNam[n - 1] - "Flag that is set to true if the name is used more than once"; - input String names[n] "Names"; - output String s "String with non-unique names"; - algorithm - s := ""; - for i in 1:n - 1 loop - if ideNam[i] then - s := s + "\n '" + names[i] + "'"; - end if; - end for; - end returnNonUniqueStrings; - - // This function does not work because Dymola 2014 has problems with - // handling strings in an algorithm section - function assertStringsAreUnique - input String descriptiveName - "Descriptive name of what is tested, such as 'sensor' or 'ports'"; - input Integer n(min=2) "Number of strings"; - input String names[n] "Names"; - protected - Boolean ideNam[n-1] - "Flag that is set to true if the name is used more than once"; - - algorithm - // Loop over all names to verify that they are unique - if n > 1 then - for i in 1:n-1 loop - for j in i+1:n loop - ideNam[i] := Modelica.Utilities.Strings.isEqual(names[i], names[j]); - if ideNam[i] then - break; - end if; - end for; // j - end for; // i - - assert( not Modelica.Math.BooleanVectors.anyTrue(ideNam), - "For the CFD interface, all " + descriptiveName + - " must have a name that is unique within each room. - The following " - + descriptiveName + " names are used more than once in the room model:" + - returnNonUniqueStrings(n, ideNam, names)); - else - ideNam :=fill(false, max(0, n - 1)); - end if; - annotation(Inline=true); - end assertStringsAreUnique; - initial equation - // Diagnostics output - if verbose then - Modelica.Utilities.Streams.print(string=" -CFDExchange has the following surfaces:"); - for i in 1:nSur loop - Modelica.Utilities.Streams.print(string=" - name = " + surIde[i].name + " - A = " + String(surIde[i].A) + " [m2] - tilt = " + String(surIde[i].til*180/Modelica.Constants.pi) + " [deg]"); - end for; - - if haveSensor then - Modelica.Utilities.Streams.print(string=" -CFDExchange has the following sensors:"); - for i in 1:nSen loop - Modelica.Utilities.Streams.print(string=" " + sensorName[i]); - end for; - else - Modelica.Utilities.Streams.print(string="CFDExchange has no sensors."); - end if; -end if; - - // Assert that the surface, sensor and ports have a name, - // and that that name is unique. - // Otherwise, stop with an error. - - assertStringsAreUnique(descriptiveName="surface", - n=nSur, - names={surIde[i].name for i in 1:nSur}); - assertStringsAreUnique(descriptiveName="sensor", - n=nSen, - names=sensorName); - assertStringsAreUnique(descriptiveName="ports", - n=nPorts, - names=portName); // Send parameters to the CFD interface sendParameters( @@ -260,52 +116,9 @@ end if; rho_start=rho_start, verbose=verbose); - // Assignment of parameters and start values - uInt = zeros(nWri); - uIntPre = zeros(nWri); - for i in 1:nWri loop - assert(flaWri[i] >= 0 and flaWri[i] <= 2, - "Parameter flaWri out of range for " + String(i) + "-th component."); - end for; - - // Assign uWri and y. This avoids a translation warning in Dymola - // as otherwise, not all initial values are specified. - // However, uWri and y are only used below in the body of the 'when' - // block after they have been assigned. - uWri = u; - y=yFixed; - - modTimRea = time; equation - for i in 1:nWri loop - der(uInt[i]) = if (flaWri[i] > 0) then u[i] else 0; - end for; - - when sampleTrigger then - // Compute value that will be sent to the CFD interface - for i in 1:nWri loop - if (flaWri[i] == 0) then - uWri[i] = pre(u[i]); - elseif (flaWri[i] == 1) then - if (time 1 then + for i in 1:n-1 loop + for j in i+1:n loop + ideNam[i] := Modelica.Utilities.Strings.isEqual(names[i], names[j]); + if ideNam[i] then + break; + end if; + end for; // j + end for; // i + + assert( not Modelica.Math.BooleanVectors.anyTrue(ideNam), + "For the CFD interface, all " + descriptiveName + + " must have a name that is unique within each room. + The following " + + descriptiveName + " names are used more than once in the room model:" + + returnNonUniqueStrings(n, ideNam, names)); + else + ideNam :=fill(false, max(0, n - 1)); + end if; + annotation(Inline=true); + end assertStringsAreUnique; + +initial equation + // Diagnostics output + if verbose then + Modelica.Utilities.Streams.print(string=" +CFDExchange has the following surfaces:"); + for i in 1:nSur loop + Modelica.Utilities.Streams.print(string=" + name = " + surIde[i].name + " + A = " + String(surIde[i].A) + " [m2] + tilt = " + String(surIde[i].til*180/Modelica.Constants.pi) + " [deg]"); + end for; + + if haveSensor then + Modelica.Utilities.Streams.print(string=" +CFDExchange has the following sensors:"); + for i in 1:nSen loop + Modelica.Utilities.Streams.print(string=" " + sensorName[i]); + end for; + else + Modelica.Utilities.Streams.print(string="CFDExchange has no sensors."); + end if; +end if; + + // Assert that the surface, sensor and ports have a name, + // and that that name is unique. + // Otherwise, stop with an error. + + assertStringsAreUnique(descriptiveName="surface", + n=nSur, + names={surIde[i].name for i in 1:nSur}); + assertStringsAreUnique(descriptiveName="sensor", + n=nSen, + names=sensorName); + assertStringsAreUnique(descriptiveName="ports", + n=nPorts, + names=portName); + + // Assignment of parameters and start values + uInt = zeros(nWri); + uIntPre = zeros(nWri); + for i in 1:nWri loop + assert(flaWri[i] >= 0 and flaWri[i] <= 2, + "Parameter flaWri out of range for " + String(i) + "-th component."); + end for; + + // Assign uWri and y. This avoids a translation warning in Dymola + // as otherwise, not all initial values are specified. + // However, uWri and y are only used below in the body of the 'when' + // block after they have been assigned. + uWri = u; + y=yFixed; + + modTimRea = time; +equation + for i in 1:nWri loop + der(uInt[i]) = if (flaWri[i] > 0) then u[i] else 0; + end for; + + when sampleTrigger then + // Compute value that will be sent to the CFD interface + for i in 1:nWri loop + if (flaWri[i] == 0) then + uWri[i] = pre(u[i]); + elseif (flaWri[i] == 1) then + if (time +Buildings.ThermalZones.Detailed.UsersGuide.CFD. +

+", revisions=" +
    +
  • +January 12, 2019, by Michael Wetter:
    +Removed Evaluate statement as the model is used with +fixed=false which causes a warning in JModelica. +
  • +
  • +July 27, 2018, by Wei Tian and Xu Han:
    +To fix the issue FFD fails in JModelica tests due to unsupported OS #612 at +issue 612. +November 17, 2016, by Michael Wetter:
    +Removed public parameter uStart, which is not needed and +refactored model.
    +This is for +issue 579. +
  • +
  • +April 21, 2016, by Michael Wetter:
    +Movded call to + +Buildings.BoundaryConditions.WeatherData.BaseClasses.getAbsolutePath +from this model to +Buildings.ThermalZones.Detailed.CFD. +This is for +Buildings, #506. +
  • +
  • +September 28, 2015, by Michael Wetter:
    +Provided start value for all variables to avoid warning +in the pedantic Modelica check in Dymola 2016 about unspecified initial conditions. +This closes +issue 459. +
  • +
  • +June 4, 2015, by Michael Wetter:
    +Set start and fixed +attributes in +u[nWri](start=_uStart, each fixed=true) +to avoid a warning in Dymola 2016 about unspecified initial conditions. +This closes +issue 422. +
  • +
  • +February 6, 2015, by Michael Wetter:
    +Changed initial algorithm to initial equation. +
  • +
  • +January 24, 2014, by Wangda Zuo:
    +Enabled the transfer of Xi and X to CFD. +
  • +
  • +July 19, 2013, by Michael Wetter:
    +First implementation. +
  • +
+")); +end PartialExchange; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/package.order b/Buildings/ThermalZones/Detailed/BaseClasses/package.order index 85277ec7635..3d47c6af2b0 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/package.order +++ b/Buildings/ThermalZones/Detailed/BaseClasses/package.order @@ -1,5 +1,6 @@ CFDAirHeatMassBalance CFDExchange +PartialExchange CFDFluidInterface CFDSurfaceInterface CFDThread From b39bb28da447abd1bb3bde2a955092d954f05c49 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Fri, 19 Jul 2019 17:07:54 -0600 Subject: [PATCH 02/69] add variables for internal sources in CFDExchange.mo --- .../ThermalZones/Detailed/BaseClasses/CFDExchange.mo | 12 ++++++++++++ .../Detailed/BaseClasses/PartialExchange.mo | 6 ++++++ .../Detailed/BaseClasses/cfdStartCosimulation.mo | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo b/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo index d412357de44..726488c96d7 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo @@ -28,6 +28,12 @@ block CFDExchange "Block that exchanges data with the CFD code" input Integer nXi "Number of independent species concentration of the inflowing medium"; input Integer nC "Number of trace substances of the inflowing medium"; + input Boolean haveSource + "Flag, true if the model has at least one source"; + input Integer nSou(min=0) + "Number of sources that are connected to CFD output"; + input String sourceName[nSou] + "Names of sources as declared in the CFD input file"; input Modelica.SIunits.Density rho_start "Density at initial state"; protected Integer coSimFlag=0; @@ -57,6 +63,9 @@ block CFDExchange "Block that exchanges data with the CFD code" nConExtWin, nXi, nC, + haveSource, + nSou, + sourceName, rho_start); assert(coSimFlag < 0.5, "Could not start the cosimulation."); @@ -113,6 +122,9 @@ initial equation nPorts=nPorts, nXi=nXi, nC=nC, + haveSource=haveSource, + nSou=nSou, + sourceName=sourceName, rho_start=rho_start, verbose=verbose); diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchange.mo b/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchange.mo index 07ba846745f..b8aa50b7fa6 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchange.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchange.mo @@ -36,6 +36,12 @@ block PartialExchange "Names of fluid ports as declared in the CFD input file"; parameter Boolean verbose=false "Set to true for verbose output"; parameter Modelica.SIunits.Density rho_start "Density at initial state"; + parameter Boolean haveSource + "Flag, true if the model has at least one source"; + parameter Integer nSou(min=0) + "Number of sources that are connected to CFD output"; + parameter String sourceName[:] + "Names of sources as declared in the CFD input file"; CFDThread CFDThre = CFDThread() "Allocate memory for cosimulation variables via constructor and send stop command to FFD via destructor"; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo b/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo index 6075159a470..44fea29eb55 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo @@ -20,6 +20,12 @@ function cfdStartCosimulation "Start the coupled simulation with CFD" input Integer nConExtWin(min=0) "number of exterior construction with window"; input Integer nXi(min=0) "Number of independent species"; input Integer nC(min=0) "Number of trace substances"; + input Boolean haveSource + "Flag, true if the model has at least one source"; + input Integer nSou(min=0) + "Number of sources that are connected to CFD output"; + input String sourceName[nSou] + "Names of sources as declared in the CFD input file"; input Modelica.SIunits.Density rho_start "Density at initial state"; output Integer retVal "Return value of the function (0 indicates CFD successfully started.)"; @@ -39,6 +45,9 @@ external"C" retVal = cfdStartCosimulation( nConExtWin, nXi, nC, + haveSource, + nSou, + sourceName, rho_start) annotation (Include="#include ", IncludeDirectory="modelica://Buildings/Resources/C-Sources", LibraryDirectory="modelica://Buildings/Resources/Library", Library="ffd"); From 34002a882f9b28628704e34a9efbdd0648212393 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Fri, 19 Jul 2019 17:56:20 -0600 Subject: [PATCH 03/69] update external c codes to add variables for internal sources --- .../Resources/C-Sources/cfdExchangeData.c | 8 ++++++++ .../Resources/C-Sources/cfdSendStopCommand.c | 18 ++++++++++++++++++ .../C-Sources/cfdStartCosimulation.c | 13 ++++++++++++- Buildings/Resources/C-Sources/cfdcosim.c | 4 ++++ Buildings/Resources/Library/win32/ffd.dll | Bin 139264 -> 139264 bytes Buildings/Resources/Library/win32/ffd.lib | Bin 1646 -> 1646 bytes .../FastFluidDynamics/modelica_ffd_common.h | 4 ++++ 7 files changed, 46 insertions(+), 1 deletion(-) diff --git a/Buildings/Resources/C-Sources/cfdExchangeData.c b/Buildings/Resources/C-Sources/cfdExchangeData.c index 2118ad1956c..02ac26b43fa 100644 --- a/Buildings/Resources/C-Sources/cfdExchangeData.c +++ b/Buildings/Resources/C-Sources/cfdExchangeData.c @@ -75,6 +75,14 @@ int cfdExchangeData(double t0, double dt, double *u, size_t nU, size_t nY, cosim->modelica->latentHeat = u[i]; i++; + if(cosim->para->Sou){ + for(j=0; jpara->nSou; j++) { + cosim->modelica->sourceHeat[j] = (REAL) u[i+j]; + fprintf(f, "sourceHeat: %f\n",cosim->modelica->sourceHeat[j]); + } + } + i = i + cosim->para->nSou; + cosim->modelica->p = u[i]; i++; diff --git a/Buildings/Resources/C-Sources/cfdSendStopCommand.c b/Buildings/Resources/C-Sources/cfdSendStopCommand.c index 98027fbcbdc..385b1a76546 100644 --- a/Buildings/Resources/C-Sources/cfdSendStopCommand.c +++ b/Buildings/Resources/C-Sources/cfdSendStopCommand.c @@ -133,6 +133,24 @@ void cfdSendStopCommand(void *thread) { if (cosim->ffd->temHea != NULL){ free(cosim->ffd->temHea); } + + if(cosim->para->Sou>0){ + for(i=0; ipara->souName[i] != NULL){ + free(cosim->para->souName[i]); + } + if (cosim->modelica->sourceHeat[i] != NULL){ + free(cosim->modelica->sourceHeat[i]); + } + } + } + if (cosim->para->Sou != NULL){ + free(cosim->para->Sou); + } + if (cosim->para->nSou != NULL){ + free(cosim->para->nSou); + } + if (cosim->para != NULL){ free(cosim->para); } diff --git a/Buildings/Resources/C-Sources/cfdStartCosimulation.c b/Buildings/Resources/C-Sources/cfdStartCosimulation.c index eb03c99ea56..7587a8fd499 100644 --- a/Buildings/Resources/C-Sources/cfdStartCosimulation.c +++ b/Buildings/Resources/C-Sources/cfdStartCosimulation.c @@ -44,7 +44,7 @@ int cfdStartCosimulation(char *cfdFilNam, char **name, double *A, double *til, int *bouCon, int nPorts, char** portName, int haveSensor, char **sensorName, int haveShade, size_t nSur, size_t nSen, - size_t nConExtWin, size_t nXi, size_t nC, double rho_start) { + size_t nConExtWin, size_t nXi, size_t nC, int haveSource, size_t nSou, char **sourceName, double rho_start) { size_t i; size_t nBou; @@ -66,6 +66,17 @@ int cfdStartCosimulation(char *cfdFilNam, char **name, double *A, double *til, cosim->para->nXi = nXi; cosim->para->rho_start = rho_start; + cosim->para->Sou = haveSource; + cosim->para->nSou = nSou; + cosim->para->souName = (char**) malloc(nSou*sizeof(char *)); + cosim->modelica->sourceHeat = (REAL *) malloc(nSou*sizeof(REAL)); + if(cosim->para->Sou){ + for(i=0; ipara->souName[i] = (char *)malloc(sizeof(char)*(strlen(sourceName[i])+1)); + strcpy(cosim->para->souName[i], sourceName[i]); + } + } + nBou = nSur + nPorts; cosim->para->name = (char**) malloc(nSur*sizeof(char *)); diff --git a/Buildings/Resources/C-Sources/cfdcosim.c b/Buildings/Resources/C-Sources/cfdcosim.c index a26d2b3a4e9..3c26acca19f 100644 --- a/Buildings/Resources/C-Sources/cfdcosim.c +++ b/Buildings/Resources/C-Sources/cfdcosim.c @@ -96,6 +96,10 @@ void *cfdcosim() { cosim->modelica->shaConSig = NULL; cosim->modelica->shaAbsRad = NULL; cosim->ffd->TSha = NULL; + cosim->para->Sou = 0; + cosim->para->nSou = 0; + cosim->para->souName = NULL; + cosim->modelica->sourceHeat = NULL; return (void*) cosim; } /* End of cfdcosim()*/ diff --git a/Buildings/Resources/Library/win32/ffd.dll b/Buildings/Resources/Library/win32/ffd.dll index c0797c5d1297398f728d09ee91d79c47425e2cbb..5fe85a8e809c94af491dedd2dcd2fd2732e77e5d 100755 GIT binary patch delta 133 zcmZoTz|nAkV*>{xi)4gRY%>qzb{=a6NAbZgxqw6&x{ga^QPN;W~>o7$J=eHyb#mH+jhwx9US=)=q+4zyys J#COIQ8UV3$A|n6* delta 133 zcmZoTz|nAkV*>{xi=f@wm}VZv?L3T(H$K{ccnmuJs#4&LpWF*?!_PqYpC+KhTQp K65knLXaE3N0VM7K diff --git a/Buildings/Resources/Library/win32/ffd.lib b/Buildings/Resources/Library/win32/ffd.lib index aaf6ac5d8942a3b26e76de5f7833fc5000c97e8c..9f7f9a76cefbf3ea568e8d190331e6886527c638 100755 GIT binary patch delta 191 zcmaFI^NweN6o;9ysfB@wvE}3mjA9clrl9g)%|qs^v4}?)#ctlk_<|8xSZwkEW&uu+ z)K&%t2ByjT8KozGVSa$3MAFFIKmh_0xO^Cy89>S}LY13Mc4WPaqI|Lqn}{4pi6Br3 W0|N&`d|Fycd`eCZ1CZ7O(Odv_z%eoa delta 191 zcmaFI^NweN6o;vag{irTh56(OjA9clrl9g)%|qs^vGCiijoG}5@dYEYu-N1S%mSPs zsjUnQ3`~>vGfGeX!u$Y5iKLOafdT|1aQQGYGk}y|geo_i?8tf-MfqeKHW4|H5<#F6 W1_lm>__VZ?_>`O+1|Y2mqPYMEn=;M- diff --git a/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h b/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h index b6e7bac3937..57807bdb389 100644 --- a/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h +++ b/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h @@ -33,6 +33,9 @@ typedef struct { /* 1: fixed temperature,*/ /* 2: fixed heat flow rate through the surface*/ char **sensorName; /* *sensorName[nSen]: Name of sensor in FFD*/ + int Sou; /* 1: have internal source ; 0: no internal source*/ + int nSou; /* Number of internal sources*/ + char **souName; /* *souName[nSou]: Name of internal heat sources*/ } ParameterSharedData; typedef struct { @@ -54,6 +57,7 @@ typedef struct { REAL **XiPor; /* XiPor[nPorts][Medium.nXi]: species concentration of inflowing medium at the port*/ /* First Medium.nXi elements are for port 1*/ REAL **CPor; /* CPor[nPorts][Medium.nC]: the trace substances of the inflowing medium*/ + REAL *sourceHeat; /* sourceHeat[nSou]: the internal source heat gain*/ }ModelicaSharedData; typedef struct { From 2e26b0bc925fc93c9dc777007481a4bff4ce596a Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Sat, 20 Jul 2019 17:29:35 -0600 Subject: [PATCH 04/69] modify ThernalZones.Detailed.CFD model to add internal sources and fix a few bugs --- .../Resources/C-Sources/cfdExchangeData.c | 1 - .../Resources/C-Sources/cfdSendStopCommand.c | 16 +++----- .../BaseClasses/CFDAirHeatMassBalance.mo | 37 +++++++++++++++++-- Buildings/ThermalZones/Detailed/CFD.mo | 37 +++++++++++++++++-- .../Examples/FFD/BaseClasses/PartialRoom.mo | 7 +++- .../Examples/FFD/Tutorial/MixedConvection.mo | 2 + .../FFD/Tutorial/NaturalConvection.mo | 2 + 7 files changed, 83 insertions(+), 19 deletions(-) diff --git a/Buildings/Resources/C-Sources/cfdExchangeData.c b/Buildings/Resources/C-Sources/cfdExchangeData.c index 02ac26b43fa..747143faf7c 100644 --- a/Buildings/Resources/C-Sources/cfdExchangeData.c +++ b/Buildings/Resources/C-Sources/cfdExchangeData.c @@ -78,7 +78,6 @@ int cfdExchangeData(double t0, double dt, double *u, size_t nU, size_t nY, if(cosim->para->Sou){ for(j=0; jpara->nSou; j++) { cosim->modelica->sourceHeat[j] = (REAL) u[i+j]; - fprintf(f, "sourceHeat: %f\n",cosim->modelica->sourceHeat[j]); } } i = i + cosim->para->nSou; diff --git a/Buildings/Resources/C-Sources/cfdSendStopCommand.c b/Buildings/Resources/C-Sources/cfdSendStopCommand.c index 385b1a76546..e1412aa5457 100644 --- a/Buildings/Resources/C-Sources/cfdSendStopCommand.c +++ b/Buildings/Resources/C-Sources/cfdSendStopCommand.c @@ -134,22 +134,16 @@ void cfdSendStopCommand(void *thread) { free(cosim->ffd->temHea); } - if(cosim->para->Sou>0){ - for(i=0; ipara->nSou>0){ + for(i=0; ipara->nSou; i++) { if (cosim->para->souName[i] != NULL){ free(cosim->para->souName[i]); } - if (cosim->modelica->sourceHeat[i] != NULL){ - free(cosim->modelica->sourceHeat[i]); - } } } - if (cosim->para->Sou != NULL){ - free(cosim->para->Sou); - } - if (cosim->para->nSou != NULL){ - free(cosim->para->nSou); - } + if (cosim->modelica->sourceHeat != NULL){ + free(cosim->modelica->sourceHeat); + } if (cosim->para != NULL){ free(cosim->para); diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo b/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo index 4e6fa9cbc52..1dd278bebf6 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo @@ -34,6 +34,12 @@ model CFDAirHeatMassBalance "Names of fluid ports as declared in the CFD input file"; parameter Real uSha_fixed[nConExtWin] "Constant control signal for the shading device (0: unshaded; 1: fully shaded)"; + parameter Boolean haveSource + "Flag, true if the model has at least one source"; + parameter Integer nSou(min=0) + "Number of sources that are connected to CFD output"; + parameter String sourceName[nSou] + "Names of sources as declared in the CFD input file"; CFDExchange cfd( final cfdFilNam=cfdFilNam, @@ -51,6 +57,9 @@ model CFDAirHeatMassBalance final yFixed=yFixed, final nXi=Medium.nXi, final nC=Medium.nC, + final haveSource=haveSource, + final nSou=nSou, + final sourceName=sourceName, rho_start=rho_start, nConExtWin=NConExtWin) "Block that exchanges data with the CFD simulation" annotation (Placement(transformation(extent={{-40,180},{-20,200}}))); @@ -235,7 +244,10 @@ protected final parameter Integer kQLatGai_flow=kQConGai_flow + 1 "Offset used to connect CFD signals to input signal for connect radiative heat gain"; - final parameter Integer kFluIntP=kQLatGai_flow + 1 + final parameter Integer kQIntSou=kQLatGai_flow + 1 + "Offset used to connect CFD signals to input signal for internal source heat gain"; + + final parameter Integer kFluIntP=kQIntSou + nSou "Offset used to connect CFD signals to input signal for pressure from the fluid ports"; final parameter Integer kFluIntM_flow=kFluIntP + 1 @@ -383,6 +395,10 @@ public annotation (Placement(transformation(extent={{-210,-10},{-190,10}}))); to_W QTotCon_flow_W annotation (Placement(transformation(extent={{-140,-60},{-120,-40}}))); + Modelica.Blocks.Interfaces.RealInput QIntSou[nSou] if haveSource + "Heat gains from internal heat sources" annotation (Placement( + transformation(extent={{-280,-238},{-240,-198}}), iconTransformation( + extent={{-280,-238},{-240,-198}}))); initial equation startTime = time; @@ -698,6 +714,15 @@ equation color={0,0,127}, smooth=Smooth.None)); + // Connections to internal heat sources + if haveSource then + for i in 1:nSou loop + connect(QIntSou[i], cfd.u[kQIntSou + i]) annotation (Line(points={{-260,-218}, + {-60,-218},{-60,190},{-42,190}}, + color={0,0,127})); + end for; + end if; + // Connections to fluid port connect(ports, fluInt.ports) annotation (Line( points={{0,-238},{0,-198}}, @@ -792,14 +817,20 @@ equation annotation ( preferredView="info", Diagram(coordinateSystem(preserveAspectRatio=false,extent={{-240,-240},{240, - 240}}), graphics), + 240}})), Icon(coordinateSystem(preserveAspectRatio=false,extent={{-240,-240},{240, 240}}), graphics={Rectangle( extent={{-144,184},{148,-200}}, pattern=LinePattern.None, lineColor={0,0,0}, fillColor={170,213,255}, - fillPattern=FillPattern.Sphere)}), + fillPattern=FillPattern.Sphere), + Text( + extent={{-230,-242},{-180,-192}}, + lineColor={0,0,127}, + fillColor={0,0,255}, + fillPattern=FillPattern.Solid, + textString="QSou")}), Documentation(info="

This model computes the heat and mass balance of the air using Computational Fluid Dynamics program. diff --git a/Buildings/ThermalZones/Detailed/CFD.mo b/Buildings/ThermalZones/Detailed/CFD.mo index 762937ec7fd..2fcc483ec25 100644 --- a/Buildings/ThermalZones/Detailed/CFD.mo +++ b/Buildings/ThermalZones/Detailed/CFD.mo @@ -12,7 +12,10 @@ model CFD final sensorName=sensorName, final portName=portName, final uSha_fixed=uSha_fixed, - final p_start=p_start)); + final p_start=p_start, + final haveSource=haveSource, + final nSou=nSou, + final sourceName=sourceName)); // Assumptions parameter Modelica.Fluid.Types.Dynamics massDynamics=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial @@ -41,10 +44,18 @@ model CFD annotation (Dialog(group = "CFD", loadSelector(caption= "Select CFD input file"))); + parameter Integer nSou(min=0) + "Number of sources that are connected to CFD input"; + parameter String sourceName[nSou] + "Names of sources as declared in the CFD input file"; + parameter Boolean haveSource + "Flag, true if the model has at least one source"; + Modelica.Blocks.Interfaces.RealOutput yCFD[nSen] if haveSensor "Sensor for output from CFD" annotation (Placement(transformation( extent={{460,110},{480,130}}), iconTransformation(extent={{200,110},{220,130}}))); + protected final parameter String absCfdFilNam = Buildings.BoundaryConditions.WeatherData.BaseClasses.getAbsolutePath(cfdFilNam) "Absolute path to the CFD file"; @@ -53,10 +64,16 @@ protected "Flag, true if the model has at least one sensor"; final parameter Integer nSen(min=0) = size(sensorName, 1) "Number of sensors that are connected to CFD output"; + Modelica.Blocks.Sources.Constant conSha[nConExtWin](final k=uSha_fixed) if haveShade "Constant signal for shade" annotation (Placement(transformation(extent={{-260,170},{-240,190}}))); +public + Modelica.Blocks.Interfaces.RealInput QIntSou[nSou](each unit="W") if haveSource + "Internal source heat gain into room" annotation (Placement(transformation( + extent={{-300,-130},{-260,-90}}), iconTransformation(extent={{-232,164}, + {-200,196}}))); equation connect(air.yCFD, yCFD) annotation (Line( points={{61,-142.5},{61,-206},{440,-206},{440,120},{470,120}}, @@ -91,6 +108,16 @@ equation points={{39.6,-120},{28,-120},{28,180},{-239,180}}, color={0,0,127}, smooth=Smooth.None)); + + // Connections to internal heat sources + if haveSource then + for i in 1:nSou loop + connect(QIntSou[i], air.QIntSou[i]) annotation (Line(points={{-280,-110},{ + -212,-110},{-212,-202},{-18,-202},{-18,-140.9},{39,-140.9}}, + color={0,0,127})); + end for; + end if; + annotation ( Icon(coordinateSystem(preserveAspectRatio=false, extent={{-200,-200},{200,200}}), graphics={Rectangle( @@ -116,7 +143,11 @@ equation Text( extent={{-114,-134},{-36,-116}}, lineColor={0,0,0}, - textString="surface")}), + textString="surface"), + Text( + extent={{-218,198},{-142,166}}, + lineColor={0,0,127}, + textString="s")}), Documentation(info="

Room model that computes the room air flow using computational fluid dynamics (CFD). The CFD simulation is coupled to the thermal simulation of the room @@ -163,5 +194,5 @@ First Implementation. "), Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-260,-220},{460, - 200}}), graphics)); + 200}}))); end CFD; diff --git a/Buildings/ThermalZones/Detailed/Examples/FFD/BaseClasses/PartialRoom.mo b/Buildings/ThermalZones/Detailed/Examples/FFD/BaseClasses/PartialRoom.mo index bdb4108601f..e8d932dd843 100644 --- a/Buildings/ThermalZones/Detailed/Examples/FFD/BaseClasses/PartialRoom.mo +++ b/Buildings/ThermalZones/Detailed/Examples/FFD/BaseClasses/PartialRoom.mo @@ -10,11 +10,16 @@ partial model PartialRoom "Partial model for a room" parameter Integer nConExt=0 "Number of exterior constructions withour a window"; parameter Integer nConPar=0 "Number of partition constructions"; + parameter Integer nSou=0 + "Number of sources that are connected to CFD input"; + Buildings.ThermalZones.Detailed.CFD roo( redeclare package Medium = MediumA, nConBou=nConBou, nSurBou=nSurBou, nConExt=nConExt, + nSou=nSou, + haveSource=false, sensorName={"Occupied zone air temperature","Velocity"}, useCFD=true, nConPar=nConPar, @@ -53,7 +58,7 @@ equation color={0,0,127}, smooth=Smooth.None)); connect(multiplex3_1.y, roo.qGai_flow) annotation (Line( - points={{1,50},{20,50},{20,48},{44,48}}, + points={{1,50},{20,50},{20,48},{44.4,48}}, color={0,0,127}, smooth=Smooth.None)); connect(weaDat.weaBus, roo.weaBus) annotation (Line( diff --git a/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvection.mo b/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvection.mo index 1923deebb9a..7fbd2b114ec 100644 --- a/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvection.mo +++ b/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvection.mo @@ -39,6 +39,8 @@ model MixedConvection "Tutorial for Mixed Convection case" hRoo = 1, linearizeRadiation = false, useCFD = true, + haveSource=false, + nSou=0, sensorName = {"Occupied zone air temperature", "Velocity"}, cfdFilNam = "modelica://Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvection.ffd", nConExt = nConExt, diff --git a/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/NaturalConvection.mo b/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/NaturalConvection.mo index 9853801740b..36a80a143e9 100644 --- a/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/NaturalConvection.mo +++ b/Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/NaturalConvection.mo @@ -42,6 +42,8 @@ model NaturalConvection "Tutorial for Natural Convection case" hRoo = 1, linearizeRadiation = false, useCFD = true, + haveSource=false, + nSou=0, sensorName = {"Occupied zone air temperature", "Velocity"}, cfdFilNam = "modelica://Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/NaturalConvection.ffd", nConExt = nConExt, From dae9da54881e5c18e89101e15ed5b92806eb86d0 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Sun, 21 Jul 2019 10:22:58 -0600 Subject: [PATCH 05/69] restructure cfdExchangeData and cfdStartCosimulation --- .../BaseClasses/PartialExchangeData.mo | 27 +++++++++++ .../BaseClasses/PartialStartCosimulation.mo | 46 +++++++++++++++++++ .../Detailed/BaseClasses/cfdExchangeData.mo | 13 ++---- .../BaseClasses/cfdStartCosimulation.mo | 31 +------------ .../Detailed/BaseClasses/package.order | 2 + 5 files changed, 80 insertions(+), 39 deletions(-) create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/PartialExchangeData.mo create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/PartialStartCosimulation.mo diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchangeData.mo b/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchangeData.mo new file mode 100644 index 00000000000..0b6aa937561 --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/PartialExchangeData.mo @@ -0,0 +1,27 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +function PartialExchangeData + "Partial model for Exchanging data between CFD and Modelica" + input Integer flag "Communication flag to CFD"; + input Modelica.SIunits.Time t "Current Modelica simulation time to CFD"; + input Modelica.SIunits.Time dt(min=100*Modelica.Constants.eps) + "Requested synchronization time step size"; + input Real[nU] u "Input to CFD"; + input Integer nU "Number of inputs to CFD"; + input Integer nY "Number of outputs from CFD"; + output Modelica.SIunits.Time modTimRea "Current model time from CFD"; + output Real[nY] y "Output computed by CFD"; + output Integer retVal "Return value for CFD simulation status"; + + annotation (Documentation(info=" +

+This function calls a C function to conduct the data exchange between Modelica and CFD program during the coupled simulation.

+", revisions=" +
    +
  • +August 16, 2013, by Wangda Zuo:
    +First implementation. +
  • +
+")); + +end PartialExchangeData; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/PartialStartCosimulation.mo b/Buildings/ThermalZones/Detailed/BaseClasses/PartialStartCosimulation.mo new file mode 100644 index 00000000000..27a23c4eb1b --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/PartialStartCosimulation.mo @@ -0,0 +1,46 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +function PartialStartCosimulation + "Partial model for Starting the coupled simulation with CFD" + input String cfdFilNam "CFD input file name"; + input String[nSur] name "Surface names"; + input Modelica.SIunits.Area[nSur] A "Surface areas"; + input Modelica.SIunits.Angle[nSur] til "Surface tilt"; + input Buildings.ThermalZones.Detailed.Types.CFDBoundaryConditions[nSur] bouCon + "Type of boundary condition"; + input Integer nPorts(min=0) + "Number of fluid ports for the HVAC inlet and outlets"; + input String portName[nPorts] + "Names of fluid ports as declared in the CFD input file"; + input Boolean haveSensor "Flag, true if the model has at least one sensor"; + input String sensorName[nSen] + "Names of sensors as declared in the CFD input file"; + input Boolean haveShade "Flag, true if the windows have a shade"; + input Integer nSur "Number of surfaces"; + input Integer nSen(min=0) + "Number of sensors that are connected to CFD output"; + input Integer nConExtWin(min=0) "number of exterior construction with window"; + input Integer nXi(min=0) "Number of independent species"; + input Integer nC(min=0) "Number of trace substances"; + input Boolean haveSource + "Flag, true if the model has at least one source"; + input Integer nSou(min=0) + "Number of sources that are connected to CFD output"; + input String sourceName[nSou] + "Names of sources as declared in the CFD input file"; + input Modelica.SIunits.Density rho_start "Density at initial state"; + output Integer retVal + "Return value of the function (0 indicates CFD successfully started.)"; + + annotation (Documentation(info=" +

+This function calls a C function to start the coupled simulation with CFD.", + revisions=" +

    +
  • +August 16, 2013, by Wangda Zuo:
    +First implementation. +
  • +
+")); + +end PartialStartCosimulation; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/cfdExchangeData.mo b/Buildings/ThermalZones/Detailed/BaseClasses/cfdExchangeData.mo index c841a2d07df..787c45570ad 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/cfdExchangeData.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/cfdExchangeData.mo @@ -1,15 +1,7 @@ within Buildings.ThermalZones.Detailed.BaseClasses; function cfdExchangeData "Exchange data between CFD and Modelica" - input Integer flag "Communication flag to CFD"; - input Modelica.SIunits.Time t "Current Modelica simulation time to CFD"; - input Modelica.SIunits.Time dt(min=100*Modelica.Constants.eps) - "Requested synchronization time step size"; - input Real[nU] u "Input to CFD"; - input Integer nU "Number of inputs to CFD"; - input Integer nY "Number of outputs from CFD"; - output Modelica.SIunits.Time modTimRea "Current model time from CFD"; - output Real[nY] y "Output computed by CFD"; - output Integer retVal "Return value for CFD simulation status"; + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialExchangeData; + external"C" retVal = cfdExchangeData( t, dt, @@ -19,6 +11,7 @@ external"C" retVal = cfdExchangeData( modTimRea, y) annotation (Include="#include ", IncludeDirectory= "modelica://Buildings/Resources/C-Sources"); + annotation (Documentation(info="

This function calls a C function to conduct the data exchange between Modelica and CFD program during the coupled simulation.

diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo b/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo index 44fea29eb55..16f0cf5c684 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/cfdStartCosimulation.mo @@ -1,34 +1,7 @@ within Buildings.ThermalZones.Detailed.BaseClasses; function cfdStartCosimulation "Start the coupled simulation with CFD" - input String cfdFilNam "CFD input file name"; - input String[nSur] name "Surface names"; - input Modelica.SIunits.Area[nSur] A "Surface areas"; - input Modelica.SIunits.Angle[nSur] til "Surface tilt"; - input Buildings.ThermalZones.Detailed.Types.CFDBoundaryConditions[nSur] bouCon - "Type of boundary condition"; - input Integer nPorts(min=0) - "Number of fluid ports for the HVAC inlet and outlets"; - input String portName[nPorts] - "Names of fluid ports as declared in the CFD input file"; - input Boolean haveSensor "Flag, true if the model has at least one sensor"; - input String sensorName[nSen] - "Names of sensors as declared in the CFD input file"; - input Boolean haveShade "Flag, true if the windows have a shade"; - input Integer nSur "Number of surfaces"; - input Integer nSen(min=0) - "Number of sensors that are connected to CFD output"; - input Integer nConExtWin(min=0) "number of exterior construction with window"; - input Integer nXi(min=0) "Number of independent species"; - input Integer nC(min=0) "Number of trace substances"; - input Boolean haveSource - "Flag, true if the model has at least one source"; - input Integer nSou(min=0) - "Number of sources that are connected to CFD output"; - input String sourceName[nSou] - "Names of sources as declared in the CFD input file"; - input Modelica.SIunits.Density rho_start "Density at initial state"; - output Integer retVal - "Return value of the function (0 indicates CFD successfully started.)"; + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialStartCosimulation; + external"C" retVal = cfdStartCosimulation( cfdFilNam, name, diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/package.order b/Buildings/ThermalZones/Detailed/BaseClasses/package.order index 3d47c6af2b0..7f4ecd65568 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/package.order +++ b/Buildings/ThermalZones/Detailed/BaseClasses/package.order @@ -31,3 +31,5 @@ ParameterConstructionWithWindow PartialParameterConstruction SideFins Examples +PartialExchangeData +PartialStartCosimulation From 89685da0945c2ef80824d987b5d3036c1b9b2f62 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Sun, 21 Jul 2019 11:02:37 -0600 Subject: [PATCH 06/69] build base models for ThermalZones.Detailed.ISAT based on CFD models --- .../BaseClasses/CFDAirHeatMassBalance.mo | 2 +- .../Detailed/BaseClasses/CFDFluidInterface.mo | 6 +- .../BaseClasses/ExteriorBoundaryConditions.mo | 3 +- .../BaseClasses/ISATAirHeatMassBalance.mo | 41 +++++ .../Detailed/BaseClasses/ISATExchange.mo | 170 ++++++++++++++++++ .../Detailed/BaseClasses/ISATThread.mo | 55 ++++++ .../Detailed/BaseClasses/isatExchangeData.mo | 27 +++ .../BaseClasses/isatStartCosimulation.mo | 41 +++++ .../Detailed/BaseClasses/package.order | 9 +- 9 files changed, 346 insertions(+), 8 deletions(-) create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/ISATAirHeatMassBalance.mo create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/ISATExchange.mo create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/ISATThread.mo create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/isatExchangeData.mo create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/isatStartCosimulation.mo diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo b/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo index 1dd278bebf6..dcba20fc5b5 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/CFDAirHeatMassBalance.mo @@ -41,7 +41,7 @@ model CFDAirHeatMassBalance parameter String sourceName[nSou] "Names of sources as declared in the CFD input file"; - CFDExchange cfd( + replaceable CFDExchange cfd( final cfdFilNam=cfdFilNam, final startTime=startTime, final activateInterface=useCFD, diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/CFDFluidInterface.mo b/Buildings/ThermalZones/Detailed/BaseClasses/CFDFluidInterface.mo index 3b5fab2c66e..02f3ab897e5 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/CFDFluidInterface.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/CFDFluidInterface.mo @@ -169,9 +169,9 @@ equation for i in 1:nPorts loop m_flow[i] = ports[i].m_flow; T_inflow[i] = Medium.temperature(Medium.setState_phX( - p= p, - h= inStream(ports[i].h_outflow), - X= inStream(ports[i].Xi_outflow))); + p = p, + h = inStream(ports[i].h_outflow), + X = inStream(ports[i].Xi_outflow))); for j in 1:Medium.nXi loop Xi_inflow_internal[(i-1)*Medium.nXi+j] = inStream(ports[i].Xi_outflow[j]); diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/ExteriorBoundaryConditions.mo b/Buildings/ThermalZones/Detailed/BaseClasses/ExteriorBoundaryConditions.mo index 7da6482516e..fd44b439a3e 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/ExteriorBoundaryConditions.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/ExteriorBoundaryConditions.mo @@ -179,8 +179,7 @@ equation color={0,0,127}, smooth=Smooth.None)); annotation (Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-300,-300}, - {300,300}})), - Icon(coordinateSystem(preserveAspectRatio=true, + {300,300}})), Icon(coordinateSystem(preserveAspectRatio=true, extent={{-300,-300},{300,300}}), graphics={ Rectangle( extent={{-160,280},{280,-250}}, diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/ISATAirHeatMassBalance.mo b/Buildings/ThermalZones/Detailed/BaseClasses/ISATAirHeatMassBalance.mo new file mode 100644 index 00000000000..467b6822229 --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/ISATAirHeatMassBalance.mo @@ -0,0 +1,41 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +model ISATAirHeatMassBalance + "Heat and mass balance of the air based on ISAT" + extends Buildings.ThermalZones.Detailed.BaseClasses.CFDAirHeatMassBalance; + + redeclare ISATExchange cfd( + final cfdFilNam=cfdFilNam, + final startTime=startTime, + final activateInterface=useCFD, + final samplePeriod=if useCFD then samplePeriod else Modelica.Constants.inf, + final nWri=kFluIntC_inflow + Medium.nC*nPorts, + final nRea=kSen + nSen, + final nSur=nSur, + final surIde=surIde, + final haveShade=haveShade, + final haveSensor=haveSensor, + final sensorName=sensorName, + final portName=portName, + final yFixed=yFixed, + final nXi=Medium.nXi, + final nC=Medium.nC, + final haveSource=haveSource, + final nSou=nSou, + final sourceName=sourceName, + rho_start=rho_start, + nConExtWin=NConExtWin) "Block that exchanges data with the ISAT simulation" + annotation (Placement(transformation(extent={{-40,180},{-20,200}}))); + + annotation (Documentation(info=" +

+Block derived from CFDAirHEatMassBalance to compute the heat and +mass balance of the air using ISAT. +", revisions=" +

    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); +end ISATAirHeatMassBalance; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/ISATExchange.mo b/Buildings/ThermalZones/Detailed/BaseClasses/ISATExchange.mo new file mode 100644 index 00000000000..3bbeff3e01f --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/ISATExchange.mo @@ -0,0 +1,170 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +block ISATExchange "Block that exchanges data with the ISAT code" + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialExchange; + + /////////////////////////////////////////////////////////////////////////// + // Function that sends the parameters of the model from Modelica to ISAT + function sendParameters + input String cfdFilNam "ISAT input file name"; + input String[nSur] name "Surface names"; + input Modelica.SIunits.Area[nSur] A "Surface areas"; + input Modelica.SIunits.Angle[nSur] til "Surface tilt"; + input Buildings.ThermalZones.Detailed.Types.CFDBoundaryConditions[nSur] bouCon + "Type of boundary condition"; + input Integer nPorts(min=0) + "Number of fluid ports for the HVAC inlet and outlets"; + input String portName[nPorts] + "Names of fluid ports as declared in the ISAT input file"; + input Boolean haveSensor "Flag, true if the model has at least one sensor"; + input String sensorName[nSen] + "Names of sensors as declared in the ISAT input file"; + input Boolean haveShade "Flag, true if the windows have a shade"; + input Integer nSur(min=2) "Number of surfaces"; + input Integer nSen(min=0) + "Number of sensors that are connected to ISAT output"; + input Integer nConExtWin(min=0) + "number of exterior construction with window"; + input Boolean verbose "Set to true for verbose output"; + input Integer nXi + "Number of independent species concentration of the inflowing medium"; + input Integer nC "Number of trace substances of the inflowing medium"; + input Boolean haveSource + "Flag, true if the model has at least one source"; + input Integer nSou(min=0) + "Number of sources that are connected to ISAT output"; + input String sourceName[nSou] + "Names of sources as declared in the ISAT input file"; + input Modelica.SIunits.Density rho_start "Density at initial state"; + protected + Integer coSimFlag=0; + algorithm + if verbose then + Modelica.Utilities.Streams.print("ISATExchange:sendParameter"); + end if; + + for i in 1:nSur loop + assert(A[i] > 0, "Surface must be bigger than zero."); + end for; + + Modelica.Utilities.Streams.print(string="Start cosimulation"); + coSimFlag := isatStartCosimulation( + cfdFilNam, + name, + A, + til, + bouCon, + nPorts, + portName, + haveSensor, + sensorName, + haveShade, + nSur, + nSen, + nConExtWin, + nXi, + nC, + haveSource, + nSou, + sourceName, + rho_start); + assert(coSimFlag < 0.5, "Could not start the cosimulation."); + + end sendParameters; + + /////////////////////////////////////////////////////////////////////////// + // Function that exchanges data during the time stepping between + // Modelica and ISAT. + function exchange + input Integer flag "Communication flag to write to ISAT"; + input Modelica.SIunits.Time t "Current simulation time in seconds to write"; + input Modelica.SIunits.Time dt(min=100*Modelica.Constants.eps) + "Requested time step length"; + input Real[nU] u "Input for ISAT"; + input Integer nU "Number of inputs for ISAT"; + input Real[nY] yFixed "Fixed values (used for debugging only)"; + input Integer nY "Number of outputs from ISAT"; + output Modelica.SIunits.Time modTimRea + "Current model time in seconds read from ISAT"; + input Boolean verbose "Set to true for verbose output"; + output Real[nY] y "Output computed by ISAT"; + output Integer retVal + "The exit value, which is negative if an error occurred"; + algorithm + if verbose then + Modelica.Utilities.Streams.print("ISATExchange:exchange at t=" + String(t)); + end if; + + (modTimRea,y,retVal) := isatExchangeData( + flag, + t, + dt, + u, + nU, + nY); + end exchange; + +initial equation + + // Send parameters to the ISAT interface + sendParameters( + cfdFilNam=cfdFilNam, + name=surIde[:].name, + A=surIde[:].A, + til=surIde[:].til, + bouCon=surIde[:].bouCon, + haveSensor=haveSensor, + portName=portName, + sensorName=sensorName, + haveShade=haveShade, + nSur=nSur, + nSen=nSen, + nConExtWin=nConExtWin, + nPorts=nPorts, + nXi=nXi, + nC=nC, + haveSource=haveSource, + nSou=nSou, + sourceName=sourceName, + rho_start=rho_start, + verbose=verbose); + +equation + +algorithm + when sampleTrigger then + // Exchange data + if activateInterface then + (modTimRea,y,retVal) := exchange( + flag=0, + t=time, + dt=samplePeriod, + u=uWri, + nU=size(u, 1), + yFixed=yFixed, + nY=size(y, 1), + verbose=verbose); + else + modTimRea := time; + y := yFixed; + retVal := 0; + end if; + + // Check for valid return flags + assert(retVal >= 0, + "Obtained negative return value during data transfer with ISAT.\n" + + " Aborting simulation. Check ISAT log file.\n" + + " Received: retVal = " + String(retVal)); + end when; + + annotation (Documentation(info=" +

+Block derived from CFDExchange to exchange data between Modelica and ISAT. +", revisions=" +

    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); +end ISATExchange; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/ISATThread.mo b/Buildings/ThermalZones/Detailed/BaseClasses/ISATThread.mo new file mode 100644 index 00000000000..1b837f93523 --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/ISATThread.mo @@ -0,0 +1,55 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +class ISATThread "class used to handle ISAT thread" + extends ExternalObject; + // constructor + function constructor "allocate memeory for cosimulation variables" + output ISATThread ISATThre "the handler of ISAT thread"; + external"C" ISATThre = isatcosim() annotation (Include="#include ", + IncludeDirectory="modelica://Buildings/Resources/C-Sources", + LibraryDirectory="modelica://Buildings/Resources/Library", Library="isat"); + annotation (Documentation(info=" +

+Constructor allocates memory for co-simulation variables when co-simulation starts +", revisions=" +

    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); + end constructor; + + // destructor + function destructor "release isat.dll or isat.so" + input ISATThread ISATThre "the handler of ISAT thread"; + external"C" isatSendStopCommand(ISATThre) annotation (Include="#include ", + IncludeDirectory="modelica://Buildings/Resources/C-Sources", + LibraryDirectory="modelica://Buildings/Resources/Library", Library="isat"); + annotation (Documentation(info=" +

+Destructor sends stop command to ISAT and releases memory for co-simulation variables at the end of the simulation + +", revisions=" +

    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); + end destructor; + annotation (Documentation(info=" +

+Class derived from ExternalObject having two local external function definition, +named destructor and constructor respectively. +", revisions=" +

    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); + +end ISATThread; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/isatExchangeData.mo b/Buildings/ThermalZones/Detailed/BaseClasses/isatExchangeData.mo new file mode 100644 index 00000000000..32e43693497 --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/isatExchangeData.mo @@ -0,0 +1,27 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +function isatExchangeData "Exchange data between ISAT and Modelica" + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialExchangeData; + +external"C" retVal = isatExchangeData( + t, + dt, + u, + nU, + nY, + modTimRea, + y) annotation (Include="#include ", IncludeDirectory= + "modelica://Buildings/Resources/C-Sources"); + + annotation (Documentation(info=" +

+This function calls a C function to conduct the data exchange between Modelica and ISAT program during the coupled simulation.

+", revisions=" +
    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); + +end isatExchangeData; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/isatStartCosimulation.mo b/Buildings/ThermalZones/Detailed/BaseClasses/isatStartCosimulation.mo new file mode 100644 index 00000000000..1a97c87ae1b --- /dev/null +++ b/Buildings/ThermalZones/Detailed/BaseClasses/isatStartCosimulation.mo @@ -0,0 +1,41 @@ +within Buildings.ThermalZones.Detailed.BaseClasses; +function isatStartCosimulation + "Start the coupled simulation with ISAT" + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialStartCosimulation; + +external"C" retVal = isatStartCosimulation( + cfdFilNam, + name, + A, + til, + bouCon, + nPorts, + portName, + haveSensor, + sensorName, + haveShade, + nSur, + nSen, + nConExtWin, + nXi, + nC, + haveSource, + nSou, + sourceName, + rho_start) annotation (Include="#include ", + IncludeDirectory="modelica://Buildings/Resources/C-Sources", + LibraryDirectory="modelica://Buildings/Resources/Library", Library="isat"); + + annotation (Documentation(info=" +

+This function calls a C function to start the coupled simulation with ISAT.", + revisions=" +

    +
  • +July 21, 2019, by Xu Han and Wangda Zuo:
    +First implementation. +
  • +
+")); + +end isatStartCosimulation; diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/package.order b/Buildings/ThermalZones/Detailed/BaseClasses/package.order index 7f4ecd65568..db71995f32a 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/package.order +++ b/Buildings/ThermalZones/Detailed/BaseClasses/package.order @@ -1,3 +1,6 @@ +ISATAirHeatMassBalance +ISATExchange +ISATThread CFDAirHeatMassBalance CFDExchange PartialExchange @@ -18,8 +21,12 @@ RadiationTemperature RoomHeatMassBalance SkyRadiationExchange SolarRadiationExchange +isatExchangeData +isatStartCosimulation cfdExchangeData cfdStartCosimulation +PartialExchangeData +PartialStartCosimulation to_W CFDSurfaceIdentifier ConstructionNumbers @@ -31,5 +38,3 @@ ParameterConstructionWithWindow PartialParameterConstruction SideFins Examples -PartialExchangeData -PartialStartCosimulation From 1293e3622e462056b518f74adde11b2890dee3dc Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Sun, 21 Jul 2019 12:13:53 -0600 Subject: [PATCH 07/69] Add external C codes for ThermalZones.Detailed.ISAT based on CFD models --- .../Resources/C-Sources/isatCosimulation.h | 39 +++ .../Resources/C-Sources/isatExchangeData.c | 168 ++++++++++++ .../Resources/C-Sources/isatSendStopCommand.c | 166 ++++++++++++ .../C-Sources/isatStartCosimulation.c | 241 ++++++++++++++++++ Buildings/Resources/C-Sources/isatcosim.c | 102 ++++++++ 5 files changed, 716 insertions(+) create mode 100644 Buildings/Resources/C-Sources/isatCosimulation.h create mode 100644 Buildings/Resources/C-Sources/isatExchangeData.c create mode 100644 Buildings/Resources/C-Sources/isatSendStopCommand.c create mode 100644 Buildings/Resources/C-Sources/isatStartCosimulation.c create mode 100644 Buildings/Resources/C-Sources/isatcosim.c diff --git a/Buildings/Resources/C-Sources/isatCosimulation.h b/Buildings/Resources/C-Sources/isatCosimulation.h new file mode 100644 index 00000000000..3520838b510 --- /dev/null +++ b/Buildings/Resources/C-Sources/isatCosimulation.h @@ -0,0 +1,39 @@ +/* + * + * @file isatCosimulation.h + * + * @brief Header file for coupled simulation with ISAT based on cfdCosimulation.h + * + * @author + * Xu Han + * University of Colorado Boulder + * xuha3556@colorado.edu + * + * Wangda Zuo + * University of Miami + * W.Zuo@miami.edu + * + * \date 9/21/2019 + * + */ + +#include + +#if defined(_MSC_VER) || defined(__WIN32__) /* Windows */ +#include +#else /* Linux*/ +#include /*For load shared library*/ +#include /*For Linux function*/ +#define Sleep(x) sleep(x/1000) +#endif + +#ifndef _MODELICA_FFD_COMMON_H +#define _MODELICA_FFD_COMMON_H +#include "../src/ISAT/ffd_src/modelica_ffd_common.h" +#include /* Needed to detect 32 vs. 64 bit using UINTPTR_MAX*/ +#endif + +CosimulationData *cosim; + +/*declare the isat_dll function in DLL*/ +void *isat_dll(CosimulationData *cosim); diff --git a/Buildings/Resources/C-Sources/isatExchangeData.c b/Buildings/Resources/C-Sources/isatExchangeData.c new file mode 100644 index 00000000000..6b5663324fc --- /dev/null +++ b/Buildings/Resources/C-Sources/isatExchangeData.c @@ -0,0 +1,168 @@ +/* + * + * \file isatExchangeData.c + * + * \brief Function to exchange data between Modelica and ISAT based on cfdExchangeData.c + * + * @author + * Xu Han + * University of Colorado Boulder + * xuha3556@colorado.edu + * + * Wangda Zuo + * University of Miami + * W.Zuo@miami.edu + * + * \date 9/21/2019 + * + */ +#include "isatCosimulation.h" +#include +#include +#include +/* + * Exchange the data between Modelica and ISAT + * + * @param t0 Current time of integration for Modelica + * @param dt Time step size for next synchronization defined by Modelica + * @param u Pointer to the input data from Modelica to ISAT + * @param nU Number of inputs from Modelica to ISAT + * @param nY Number of outputs from ISAT to Modelica + * @param y Pointer to the output data from ISAT to Modelica + * + * @return 0 if no error occurred + */ +int isatExchangeData(double t0, double dt, double *u, size_t nU, size_t nY, + double *t1, double *y) { + size_t i, j, k; + + /*check if current modelica time equals to last time*/ + /*if yes, it means cfdExchangeData() was called multiple times at one synchronization point, then directly return*/ + if(abs(cosim->modelica->lt - t0) < 1E-6){ + return 0; + } + + /*-------------------------------------------------------------------------- + | Write data to ISAT + | Command: + | -1: fake data + | 0: data has been read by the other program + | 1: data waiting for the other program to read + --------------------------------------------------------------------------*/ + /* If previous data hasn't been read, wait*/ + while(cosim->modelica->flag==1) { + if(cosim->para->ffdError==1) + ModelicaError(cosim->ffd->msg); + else + Sleep(10); + } + + cosim->modelica->t = t0; + cosim->modelica->dt = dt; + cosim->modelica->lt = t0; + + /* Copy the Modelica data to shared memory*/ + for(i=0; ipara->nSur; i++) { + cosim->modelica->temHea[i] = u[i]; + } + + if(cosim->para->sha==1) { + for(j=0; jpara->nConExtWin; j++) { + cosim->modelica->shaConSig[j] = u[i+j]; + cosim->modelica->shaAbsRad[j] = u[i+j+cosim->para->nConExtWin]; + } + i = i + 2*cosim->para->nConExtWin; + } + + cosim->modelica->sensibleHeat = u[i]; + i++; + + cosim->modelica->latentHeat = u[i]; + i++; + + if(cosim->para->Sou){ + for(j=0; jpara->nSou; j++) { + cosim->modelica->sourceHeat[j] = (REAL) u[i+j]; + } + } + i = i + cosim->para->nSou; + + cosim->modelica->p = u[i]; + i++; + + for(j=0; jpara->nPorts; j++) { + cosim->modelica->mFloRatPor[j] = u[i+j]; + cosim->modelica->TPor[j] = u[i+j+cosim->para->nPorts]; + } + + i = i + 2*cosim->para->nPorts; + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nXi; k++) { + cosim->modelica->XiPor[j][k] = u[i+j*cosim->para->nXi+k]; + } + + i = i + cosim->para->nPorts*cosim->para->nXi; + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nC; k++) { + cosim->modelica->CPor[j][k] = u[i+j*cosim->para->nC+k]; + } + + /* Set the flag to new data*/ + cosim->modelica->flag = 1; + + /**************************************************************************** + | Copy data from ISAT + ****************************************************************************/ + /* If the data is not ready or not updated, check again*/ + while(cosim->ffd->flag!=1) { + if(cosim->para->ffdError==1) + ModelicaError(cosim->ffd->msg); + else + Sleep(10); + } + + /* Get the temperature/heat flux for solid surface*/ + for(i=0; ipara->nSur; i++) { + y[i] = cosim->ffd->temHea[i]; + } + + /* Get the averaged room temperature*/ + y[i] = cosim->ffd->TRoo; + i++; + + /* Get the temperature of shading device if there is a shading device*/ + if(cosim->para->sha==1) { + for(j=0; jpara->nConExtWin; i++, j++) { + y[i] = cosim->ffd->TSha[j]; + } + } + + /* Get the temperature fluid at the fluid ports*/ + for(j=0; jpara->nPorts; i++, j++) { + y[i] = cosim->ffd->TPor[j]; + } + + /* Get the mass fraction at fluid ports*/ + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nXi; k++, i++) { + y[i] = cosim->ffd->XiPor[j][k]; + } + + /* Get the trace substance at fluid ports*/ + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nC; k++, i++) { + y[i] = cosim->ffd->CPor[j][k]; + } + + /* Get the sensor data*/ + for(j=0; jpara->nSen; j++, i++) { + y[i] = cosim->ffd->senVal[j]; + } + + /* Update the data status*/ + cosim->ffd->flag = 0; + + *t1 = cosim->ffd->t; + + return 0; +} /* End of isatExchangeData()*/ diff --git a/Buildings/Resources/C-Sources/isatSendStopCommand.c b/Buildings/Resources/C-Sources/isatSendStopCommand.c new file mode 100644 index 00000000000..7f301c5b8c3 --- /dev/null +++ b/Buildings/Resources/C-Sources/isatSendStopCommand.c @@ -0,0 +1,166 @@ +/* + * + * \file isatSendStopCommand.c + * + * \brief Function to send a stop command to terminate the ISAT simulation based on cfdSendStopCommand.c + * + * \author + * Xu Han + * University of Colorado Boulder + * xuha3556@colorado.edu + * + * Wangda Zuo + * University of Miami + * W.Zuo@miami.edu + * + * \date 9/21/2019 + * + */ +#include "isatCosimulation.h" + +/* + * Send a stop command to terminate the CFD simulation + * + * @return No return needed + */ +void isatSendStopCommand(void *thread) { + + size_t i = 0; + size_t imax = 10000; + + /*send stop command to ISAT*/ + cosim->para->flag = 0; + + /* Wait for the feedback from ISAT*/ + while(cosim->para->flag==0 && ipara->ffdError==1) { + ModelicaError(cosim->ffd->msg); + } + else { + Sleep(10); + i++; + } + } + + if(ipara->ffdError==1) { + ModelicaError(cosim->ffd->msg); + } + else { + ModelicaMessage("Successfully stopped the ISAT simulation.\n"); + } + } + else { + ModelicaMessage("Error: Cannot stop the ISAT simulation in required time."); + } + + /*free memory for variables*/ + if (cosim->para->fileName != NULL){ + free(cosim->para->fileName); + } + if (cosim->para->are != NULL){ + free(cosim->para->are); + } + if (cosim->para->til != NULL){ + free(cosim->para->til); + } + if (cosim->para->bouCon != NULL){ + free(cosim->para->bouCon); + } + if (cosim->para->nSur>0){ + for(i=0; ipara->nSur; i++) { + free(cosim->para->name[i]); + } + if (cosim->para->name != NULL){ + free(cosim->para->name); + } + } + if (cosim->para->nSen>0){ + if (cosim->ffd->senVal != NULL){ + free(cosim->ffd->senVal); + } + for(i=0; ipara->nSen; i++) { + free(cosim->para->sensorName[i]); + } + if (cosim->para->sensorName != NULL){ + free(cosim->para->sensorName); + } + } + if (cosim->modelica->temHea != NULL){ + free(cosim->modelica->temHea); + } + if (cosim->para->sha==1){ + if (cosim->modelica->shaConSig != NULL){ + free(cosim->modelica->shaConSig); + } + if (cosim->modelica->shaAbsRad != NULL){ + free(cosim->modelica->shaAbsRad); + } + if (cosim->ffd->TSha != NULL){ + free(cosim->ffd->TSha); + } + } + if (cosim->para->nPorts>0){ + for(i=0; ipara->nPorts; i++) { + free(cosim->modelica->XiPor[i]); + free(cosim->ffd->XiPor[i]); + free(cosim->modelica->CPor[i]); + free(cosim->ffd->CPor[i]); + } + if (cosim->modelica->CPor != NULL){ + free(cosim->modelica->CPor); + } + if (cosim->ffd->CPor != NULL){ + free(cosim->ffd->CPor); + } + if (cosim->modelica->XiPor != NULL){ + free(cosim->modelica->XiPor); + } + if (cosim->ffd->XiPor != NULL){ + free(cosim->ffd->XiPor); + } + if (cosim->modelica->TPor != NULL){ + free(cosim->modelica->TPor); + } + if (cosim->ffd->TPor != NULL){ + free(cosim->ffd->TPor); + } + for(i=0; ipara->nPorts; i++) { + free(cosim->para->portName[i]); + } + if (cosim->para->portName != NULL){ + free(cosim->para->portName); + } + if (cosim->modelica->mFloRatPor != NULL){ + free(cosim->modelica->mFloRatPor); + } + } + if (cosim->ffd->temHea != NULL){ + free(cosim->ffd->temHea); + } + + if(cosim->para->nSou>0){ + for(i=0; ipara->nSou; i++) { + if (cosim->para->souName[i] != NULL){ + free(cosim->para->souName[i]); + } + } + } + if (cosim->modelica->sourceHeat != NULL){ + free(cosim->modelica->sourceHeat); + } + + if (cosim->para != NULL){ + free(cosim->para); + } + if (cosim->modelica != NULL){ + free(cosim->modelica); + } + if (cosim->ffd != NULL){ + free(cosim->ffd); + } + if (cosim != NULL){ + free(cosim); + } + +} /* End of isatSendStopCommand*/ diff --git a/Buildings/Resources/C-Sources/isatStartCosimulation.c b/Buildings/Resources/C-Sources/isatStartCosimulation.c new file mode 100644 index 00000000000..eaa8de86667 --- /dev/null +++ b/Buildings/Resources/C-Sources/isatStartCosimulation.c @@ -0,0 +1,241 @@ +/* + * + * \file isatStartCosimulation.c + * + * \brief Function to start the coupled simulation based on cfdStartCosimulation.c + * + * @author + * Xu Han + * University of Colorado Boulder + * xuha3556@colorado.edu + * + * Wangda Zuo + * University of Miami + * W.Zuo@miami.edu + * + * \date 9/21/2019 + * + */ +#include "isatCosimulation.h" + +/* + * Start the cosimulation + * + * Allocate memory for the data exchange and launch ISAT simulation + * + * @param cfdFilNam Name of the input file for the ISAT simulation + * @param name Pointer to the names of surfaces and fluid ports + * @param A Pointer to the area of surfaces in the same order of name + * @param til Pointer to the tilt of surface in the same order of name + * @param bouCon Pointer to the type of thermal boundary condition in the + * same order of name + * @param nPorts Number of fluid ports + * @param portName Pointer to the name of fluid ports + * @param haveSensor Flag: 1->have sensor; 0->No sensor + * @param sensorName Pointer to the names of the sensors used in ISAT + * @param haveShade Flag: 1->have shade; 0->no shade + * @param nSur Number of surfaces + * @param nSen Number of sensors + * @param nConExtWin Number of exterior construction with windows + * @param nXi Number of species + * @param nC Number of trace substances + * @param rho_start Density at initial state + * + * @return 0 if no error occurred + */ +int isatStartCosimulation(char *cfdFilNam, char **name, double *A, double *til, + int *bouCon, int nPorts, char** portName, int haveSensor, + char **sensorName, int haveShade, size_t nSur, size_t nSen, + size_t nConExtWin, size_t nXi, size_t nC, int haveSource, size_t nSou, char **sourceName, double rho_start) { + size_t i; + size_t nBou; + + /**************************************************************************** + | allocate the memory and assign the data + ****************************************************************************/ + cosim->para->fileName = (char *) malloc(sizeof(char)*(strlen(cfdFilNam)+1)); + if (cosim->para->fileName == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->fileName in isatStartCosimulation.c"); + } + strcpy(cosim->para->fileName, cfdFilNam); + + cosim->para->nSur = nSur; + cosim->para->nSen = nSen; + cosim->para->nConExtWin= nConExtWin; + cosim->para->nPorts = nPorts; + cosim->para->sha = haveShade; + cosim->para->nC = nC; + cosim->para->nXi = nXi; + cosim->para->rho_start = rho_start; + + cosim->para->Sou = haveSource; + cosim->para->nSou = nSou; + cosim->para->souName = (char**) malloc(nSou*sizeof(char *)); + cosim->modelica->sourceHeat = (REAL *) malloc(nSou*sizeof(REAL)); + if(cosim->para->Sou){ + for(i=0; ipara->souName[i] = (char *)malloc(sizeof(char)*(strlen(sourceName[i])+1)); + strcpy(cosim->para->souName[i], sourceName[i]); + } + } + + nBou = nSur + nPorts; + + cosim->para->name = (char**) malloc(nSur*sizeof(char *)); + if (cosim->para->name == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->name in isatStartCosimulation.c"); + } + cosim->para->are = (double *) malloc(nSur*sizeof(double)); + if (cosim->para->are == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->are in isatStartCosimulation.c"); + } + cosim->para->til = (double *) malloc(nSur*sizeof(double)); + if (cosim->para->til == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->til in isatStartCosimulation.c"); + } + cosim->para->bouCon = (size_t *) malloc(nSur*sizeof(size_t)); + if (cosim->para->bouCon == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->bouCon in isatStartCosimulation.c"); + } + + for(i=0; ipara->name[i] = NULL; + cosim->para->name[i] = (char *)malloc(sizeof(char) *(strlen(name[i])+1)); + if ( cosim->para->name[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->name[i] in isatStartCosimulation.c"); + } + strcpy(cosim->para->name[i], name[i]); + cosim->para->are[i] = (double) A[i]; + cosim->para->til[i] = (double) til[i]; + cosim->para->bouCon[i] = bouCon[i]; + } + + cosim->para->portName = (char**) malloc(nPorts*sizeof(char *)); + if (cosim->para->portName == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->portName in isatStartCosimulation.c"); + } + + for(i=0; ipara->portName[i] = NULL; + cosim->para->portName[i] = (char *)malloc(sizeof(char)*(strlen(portName[i])+1)); + if ( cosim->para->portName[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->portName[i] in isatStartCosimulation.c"); + } + strcpy(cosim->para->portName[i], portName[i]); + } + + if(haveSensor) { + cosim->para->sensorName = (char **) malloc(nSen*sizeof(char *)); + if ( cosim->para->sensorName == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->sensorName in isatStartCosimulation.c"); + } + cosim->ffd->senVal = (double *) malloc(nSen*sizeof(double)); + if ( cosim->ffd->senVal == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->senVal in isatStartCosimulation.c"); + } + for(i=0; ipara->sensorName[i] = NULL; + cosim->para->sensorName[i] = (char *)malloc(sizeof(char)*(strlen(sensorName[i])+1)); + if ( cosim->para->sensorName[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->para->sensorName[i] in isatStartCosimulation.c"); + } + strcpy(cosim->para->sensorName[i], sensorName[i]); + } + } + + /* Set the flag to initial value*/ + cosim->modelica->flag = 0; + cosim->ffd->flag = 0; + cosim->para->flag = 1; + cosim->para->ffdError = 0; + cosim->modelica->t = 0; + cosim->modelica->lt = -1;/*initialize lt to -1 to avoid skipping all exchange() at time = 0*/ + + cosim->modelica->temHea = (double *) malloc(nSur*sizeof(double)); + if (cosim->modelica->temHea == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->temHea in isatStartCosimulation.c"); + } + /* Having a shade for window*/ + if(haveShade==1) { + cosim->modelica->shaConSig = (double *) malloc(nConExtWin*sizeof(double)); + if ( cosim->modelica->shaConSig == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->shaConSig in isatStartCosimulation.c"); + } + cosim->modelica->shaAbsRad = (double *) malloc(nConExtWin*sizeof(double)); + if ( cosim->modelica->shaAbsRad == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->shaAbsRad in isatStartCosimulation.c"); + } + } + cosim->modelica->mFloRatPor = (double *) malloc(nPorts*sizeof(double)); + if (cosim->modelica->mFloRatPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->mFloRatPor in isatStartCosimulation.c"); + } + cosim->modelica->TPor = (double *) malloc(nPorts*sizeof(double)); + if (cosim->modelica->TPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->TPor in isatStartCosimulation.c"); + } + + cosim->modelica->XiPor = (double **) malloc(nPorts*sizeof(double *)); + if (cosim->modelica->XiPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->XiPor in isatStartCosimulation.c"); + } + cosim->ffd->XiPor = (double **) malloc(nPorts*sizeof(double *)); + if (cosim->ffd->XiPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->XiPor in isatStartCosimulation.c"); + } + for(i=0; imodelica->XiPor[i] = NULL; + cosim->modelica->XiPor[i] = (double *) malloc(cosim->para->nXi*sizeof(double)); + if ( cosim->modelica->XiPor[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->XiPor[i] in isatStartCosimulation.c"); + } + cosim->ffd->XiPor[i] = NULL; + cosim->ffd->XiPor[i] = (double *) malloc(cosim->para->nXi*sizeof(double)); + if ( cosim->ffd->XiPor[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->XiPor[i] in isatStartCosimulation.c"); + } + } + + cosim->modelica->CPor = (double **) malloc(nPorts*sizeof(double *)); + if (cosim->modelica->CPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->CPor in isatStartCosimulation.c"); + } + cosim->ffd->CPor = (double **) malloc(nPorts*sizeof(double *)); + if (cosim->ffd->CPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->CPor in isatStartCosimulation.c"); + } + for(i=0; imodelica->CPor[i] = NULL; + cosim->modelica->CPor[i] = (double *) malloc(cosim->para->nC*sizeof(double)); + if ( cosim->modelica->CPor[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica->CPor[i] in isatStartCosimulation.c"); + } + cosim->ffd->CPor[i] = NULL; + cosim->ffd->CPor[i] = (double *) malloc(cosim->para->nC*sizeof(double)); + if ( cosim->ffd->CPor[i] == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->CPor[i] in isatStartCosimulation.c"); + } + } + + cosim->ffd->temHea = (double *) malloc(nSur*sizeof(double)); + if (cosim->ffd->temHea == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->temHea in isatStartCosimulation.c"); + } + if(haveShade==1){ + cosim->ffd->TSha = (double *) malloc(nConExtWin*sizeof(double)); + if ( cosim->ffd->TSha == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->TSha in isatStartCosimulation.c"); + } + } + cosim->ffd->TPor = (double *) malloc(nPorts*sizeof(double)); + if (cosim->ffd->TPor == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd->TPor in isatStartCosimulation.c"); + } + + /**************************************************************************** + | Implicitly launch DLL module. + ****************************************************************************/ + isat_dll(cosim); + + return 0; +} /* End of isatStartCosimulation()*/ diff --git a/Buildings/Resources/C-Sources/isatcosim.c b/Buildings/Resources/C-Sources/isatcosim.c new file mode 100644 index 00000000000..5830041c87a --- /dev/null +++ b/Buildings/Resources/C-Sources/isatcosim.c @@ -0,0 +1,102 @@ +/* + * + * \file isatStartCosimulation.c + * + * \brief Function to start the coupled simulation based on cfdcosim.c + * + * \author + * Xu Han + * University of Colorado Boulder + * xuha3556@colorado.edu + * + * Wangda Zuo + * University of Miami + * W.Zuo@miami.edu + * + * \date 9/21/2019 + * + */ +#include "isatCosimulation.h" +#include +/* + * Start the cosimulation + * + * Allocate memory for cosimulation variables + * + */ +void *isatcosim() { + + /**************************************************************************** + | return modelica error if more than one isat instances are created + ****************************************************************************/ + if ( cosim != NULL ) + ModelicaError("ModelicaError: Only one room with ISAT can be used, but more than one is used."); + + /**************************************************************************** + | Allocate memory for cosimulation variables + ****************************************************************************/ + cosim = NULL; + cosim = (CosimulationData *) malloc(sizeof(CosimulationData)); + if (cosim == NULL){ + ModelicaError("Failed to allocate memory for cosim in isatcosim.c"); + } + cosim->para = NULL; + cosim->para = (ParameterSharedData *) malloc(sizeof(ParameterSharedData)); + if (cosim->para == NULL){ + ModelicaError("Failed to allocate memory for cosim->para in isatcosim.c"); + } + + cosim->modelica = NULL; + cosim->modelica = (ModelicaSharedData *) malloc(sizeof(ModelicaSharedData)); + if (cosim->para == NULL){ + ModelicaError("Failed to allocate memory for cosim->modelica in isatcosim.c"); + } + + cosim->ffd = NULL; + cosim->ffd = (ffdSharedData *) malloc(sizeof(ffdSharedData)); + if (cosim->para == NULL){ + ModelicaError("Failed to allocate memory for cosim->ffd in isatcosim.c"); + } + + /**************************************************************************** + | Initialize cosimulation variables + ****************************************************************************/ + cosim->modelica->flag = 0; + cosim->ffd->flag = 0; + cosim->para->flag = 1; + cosim->para->ffdError = 0; + cosim->para->nSur = 0; + cosim->para->nSen = 0; + cosim->para->nConExtWin = 0; + cosim->para->nPorts = 0; + cosim->para->sha = 0; + cosim->para->nC = 0; + cosim->para->nXi = 0; + cosim->ffd->msg = NULL; + cosim->para->fileName = NULL; + cosim->para->are = NULL; + cosim->para->til = NULL; + cosim->para->bouCon = NULL; + cosim->para->name = NULL; + cosim->para->sensorName = NULL; + cosim->ffd->senVal = NULL; + cosim->modelica->CPor = NULL; + cosim->ffd->CPor = NULL; + cosim->modelica->XiPor = NULL; + cosim->ffd->XiPor = NULL; + cosim->modelica->TPor = NULL; + cosim->ffd->TPor = NULL; + cosim->para->portName = NULL; + cosim->modelica->mFloRatPor = NULL; + cosim->ffd->temHea = NULL; + cosim->modelica->temHea = NULL; + cosim->modelica->shaConSig = NULL; + cosim->modelica->shaAbsRad = NULL; + cosim->ffd->TSha = NULL; + cosim->para->Sou = 0; + cosim->para->nSou = 0; + cosim->para->souName = NULL; + cosim->modelica->sourceHeat = NULL; + + return (void*) cosim; +} /* End of isatcosim()*/ From 7f307bfd3afab2fb7d3524c2a7c05f2a078665b8 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Tue, 30 Jul 2019 11:24:23 -0600 Subject: [PATCH 08/69] fix a few bugs of CFD module running in JModelica --- .../Resources/C-Sources/cfdExchangeData.c | 10 +++++----- .../Resources/C-Sources/cfdSendStopCommand.c | 20 +++++++++---------- .../C-Sources/cfdStartCosimulation.c | 17 ++++++++-------- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/Buildings/Resources/C-Sources/cfdExchangeData.c b/Buildings/Resources/C-Sources/cfdExchangeData.c index 747143faf7c..d7dd988cba2 100644 --- a/Buildings/Resources/C-Sources/cfdExchangeData.c +++ b/Buildings/Resources/C-Sources/cfdExchangeData.c @@ -75,12 +75,12 @@ int cfdExchangeData(double t0, double dt, double *u, size_t nU, size_t nY, cosim->modelica->latentHeat = u[i]; i++; - if(cosim->para->Sou){ - for(j=0; jpara->nSou; j++) { - cosim->modelica->sourceHeat[j] = (REAL) u[i+j]; - } + if(cosim->para->nSou>0){ + for(j=0; jpara->nSou; j++) { + cosim->modelica->sourceHeat[j] = u[i+j]; + } } - i = i + cosim->para->nSou; + i = i + cosim->para->nSou; cosim->modelica->p = u[i]; i++; diff --git a/Buildings/Resources/C-Sources/cfdSendStopCommand.c b/Buildings/Resources/C-Sources/cfdSendStopCommand.c index e1412aa5457..a48078ad7ed 100644 --- a/Buildings/Resources/C-Sources/cfdSendStopCommand.c +++ b/Buildings/Resources/C-Sources/cfdSendStopCommand.c @@ -134,17 +134,15 @@ void cfdSendStopCommand(void *thread) { free(cosim->ffd->temHea); } - if(cosim->para->nSou>0){ - for(i=0; ipara->nSou; i++) { - if (cosim->para->souName[i] != NULL){ - free(cosim->para->souName[i]); - } - } - } - if (cosim->modelica->sourceHeat != NULL){ - free(cosim->modelica->sourceHeat); - } - + if(cosim->para->nSou>0){ + if (cosim->para->souName != NULL){ + free(cosim->para->souName); + } + if (cosim->modelica->sourceHeat != NULL){ + free(cosim->modelica->sourceHeat); + } + } + if (cosim->para != NULL){ free(cosim->para); } diff --git a/Buildings/Resources/C-Sources/cfdStartCosimulation.c b/Buildings/Resources/C-Sources/cfdStartCosimulation.c index 7587a8fd499..6920d4d74c2 100644 --- a/Buildings/Resources/C-Sources/cfdStartCosimulation.c +++ b/Buildings/Resources/C-Sources/cfdStartCosimulation.c @@ -68,14 +68,15 @@ int cfdStartCosimulation(char *cfdFilNam, char **name, double *A, double *til, cosim->para->Sou = haveSource; cosim->para->nSou = nSou; - cosim->para->souName = (char**) malloc(nSou*sizeof(char *)); - cosim->modelica->sourceHeat = (REAL *) malloc(nSou*sizeof(REAL)); - if(cosim->para->Sou){ - for(i=0; ipara->souName[i] = (char *)malloc(sizeof(char)*(strlen(sourceName[i])+1)); - strcpy(cosim->para->souName[i], sourceName[i]); - } - } + + if(cosim->para->nSou>0){ + cosim->para->souName = (char**) malloc(nSou*sizeof(char *)); + cosim->modelica->sourceHeat = (REAL *) malloc(nSou*sizeof(REAL)); + for(i=0; ipara->souName[i] = (char *)malloc(sizeof(char)*(strlen(sourceName[i])+1)); + strcpy(cosim->para->souName[i], sourceName[i]); + } + } nBou = nSur + nPorts; From 1b2160d79d9b07cf4a53e01c4f679b484801ef04 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Wed, 31 Jul 2019 17:30:03 -0600 Subject: [PATCH 09/69] fix a few bugs --- Buildings/Resources/C-Sources/cfdSendStopCommand.c | 2 +- Buildings/ThermalZones/Detailed/CFD.mo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Buildings/Resources/C-Sources/cfdSendStopCommand.c b/Buildings/Resources/C-Sources/cfdSendStopCommand.c index a48078ad7ed..b21ed244e21 100644 --- a/Buildings/Resources/C-Sources/cfdSendStopCommand.c +++ b/Buildings/Resources/C-Sources/cfdSendStopCommand.c @@ -21,7 +21,7 @@ void cfdSendStopCommand(void *thread) { size_t i = 0; - size_t imax = 10000; + size_t imax = 1000000; /*send stop command to FFD*/ cosim->para->flag = 0; diff --git a/Buildings/ThermalZones/Detailed/CFD.mo b/Buildings/ThermalZones/Detailed/CFD.mo index 2fcc483ec25..28601d0bac6 100644 --- a/Buildings/ThermalZones/Detailed/CFD.mo +++ b/Buildings/ThermalZones/Detailed/CFD.mo @@ -46,7 +46,7 @@ model CFD "Select CFD input file"))); parameter Integer nSou(min=0) "Number of sources that are connected to CFD input"; - parameter String sourceName[nSou] + parameter String sourceName[nSou]=fill("",nSou) "Names of sources as declared in the CFD input file"; parameter Boolean haveSource "Flag, true if the model has at least one source"; From 38dcf77fe78be865be878ef906722f7317cda444 Mon Sep 17 00:00:00 2001 From: Cary Date: Thu, 31 Oct 2019 13:25:41 -0600 Subject: [PATCH 10/69] fetched upstream --- Buildings/Resources/Library/win32/ffd.dll | Bin 139264 -> 179200 bytes Buildings/Resources/Library/win32/ffd.lib | Bin 1646 -> 1646 bytes Buildings/Resources/Library/win64/ffd.dll | Bin 0 -> 150016 bytes Buildings/Resources/Library/win64/ffd.lib | Bin 0 -> 1648 bytes Buildings/Resources/ffd.dll | Bin 0 -> 139264 bytes Buildings/Resources/ffd.lib | Bin 0 -> 1646 bytes Buildings/ffd.log | 5898 +++++++++++++++++++++ Buildings/output.cfd | 707 +++ Buildings/result.plt | 1731 ++++++ Buildings/unsteady.plt | 1728 ++++++ 10 files changed, 10064 insertions(+) create mode 100644 Buildings/Resources/Library/win64/ffd.dll create mode 100644 Buildings/Resources/Library/win64/ffd.lib create mode 100644 Buildings/Resources/ffd.dll create mode 100644 Buildings/Resources/ffd.lib create mode 100644 Buildings/ffd.log create mode 100644 Buildings/output.cfd create mode 100644 Buildings/result.plt create mode 100644 Buildings/unsteady.plt diff --git a/Buildings/Resources/Library/win32/ffd.dll b/Buildings/Resources/Library/win32/ffd.dll index c0797c5d1297398f728d09ee91d79c47425e2cbb..b8d89c01e7b75232db57a7851c831b061bbdf253 100755 GIT binary patch literal 179200 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

sRKYI$?HlYKB~ustP+7ImXh=)LO$w?N$9G&gc4q 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%0AjD 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 i%p=$57*IL!xlQPwRFqP3hT%VYf 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

m5&>7pWaMRp+I! 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 z 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

~jydV_0Zu7tago66O4v$!j{ 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

hYys!yxWs#{?@|E+$C$m<|1XJ_hnoJakR5y+xe zfi5$(HQHM31$Z9+(mv2WK?dl2UDOrb(uW~tDFJmN`aj@(5Z$U7$Si*@nhbWKaxL}e?kmP@+-X& zJ4uj<*|0}Tm7A$Ntb^zGDZJtzpu^fA$9pQ|q7r$RIk32k)f*5!tx?yi>p_b*L5ug* z&(v=r8EM*aS~u-P?F_9y@^Yp&91&Hab^&Noqg|{mfQ7zBTc+KsJ)o_l)Oj7U^D%NW zKWPI&A5+iPa}iTrsF&+8#LU;hLwpQA_4E1`NYide6S3vpkeM586gj^2Y-7H$(D;Xw zr+L!YXuN=!Y6raSkBxnZI=h>r%p1*Hp)Xg%^Vwj&glO|4^K)}AtYs@?>RdEWqgaEj zVOEKCp;ZU}=UMATWU~JQe_$W6FLSYPiOS&#u#XS3k0Uep68jp~5lGy%A0E-2+zQCr zTC5pt=5|20eu@k*$-UJfFEbC?^*a7m{$c)cejRdfZy>k+4W#WPp*J!Z0|gKCY_4zt zG8i+2OOWk-M0f((-Yvp5NFRyHeiaT2CyA$v{Y6$Z#KB@7IO#%U<6`0x@qKt4gWbcR zZ6~_RkmJ4BJr~?_v-=VETK9ACbGN(y?cNQa>PN&}1<(prT~$U4|R5^H^q$fC78OwL1$H4!mZwS0*@ zA5wg`TrYDEi$k1M+ z5odo0)Z9zL9^o@3P5lX8Po_RxABC8D5;C+?Afp%SOZ6M{TacxDSYMLJqP<|f3fg=E z>M+Y;`vIdhG-Q8xF}cXJKczp5*!vItOQJ*9q%oa9yV2|%b_p{2YmrlZ4ZgvbSOLn0 zuAIWn;I88Cf;Ie(TZNU6^92DplN@A3r^0t7vBiAhDtNEUgu4(iuLf;42rq&*yM&K~ z&xNlMGc#g0(FNKl;+>)w*#F4AA2NG_bdDrS6Qz(;C(V}r0Z;IN)Y@~thliG2;92f@ z2wv@r@F^I%17!3(YPqtI|GZ5es`z1<>@38zDMMBfqD_Lp7S7e|5OKRvNi}Y z=uOCOzNPJk-Pw;^Q#buI*qwgBps1_*Amq98u$EK|S@Hpsb!0tilf4&o2Ufm1(A|rz cnA1>vHFpiXx#jT4cO!px2)Q#9{tx;5KcRc>`v3p{ diff --git a/Buildings/Resources/Library/win32/ffd.lib b/Buildings/Resources/Library/win32/ffd.lib index aaf6ac5d8942a3b26e76de5f7833fc5000c97e8c..0a5225cf02694ae0faa3feb1d27f12ab52b14752 100755 GIT binary patch delta 266 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

Z3%%giNW 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 AYXATM literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Library/win64/ffd.lib b/Buildings/Resources/Library/win64/ffd.lib new file mode 100644 index 0000000000000000000000000000000000000000..f9d4b6dabb0968788d106e16438ac2a77d0b35b0 GIT binary patch literal 1648 zcmb_dOHaZ;5dNU}BE}H)Vxmb+Ow5q_#?O) zuio_N!C&G*XWHEYu|Ar(WIH>LcE6eZW|>|tHcRKL;RUsK#F8mJrN#7kve&*S)L1Mf zR>xrgeL$cID7Qf90qBqLG|lv0Za-fzH@6Np^66Y*KW~=H7ECjHn8|!~;)cAAudscX z-8DDY3TqTysWtdL)2db>rEk3P4&D#}ZU%r`1$ZDO(r+h#0D=h7PoX`1BKHRAnGau#m3mV)bC<47U&gOml2sC9aBbvAS0Xut|B=oos2fyjEaVihloGjZt{ zr^OS^H({V+z`)|8h)W5xz0Z4B9NP`3k3o_n7-AIzBB@!7MFvQJwynT0$@bmoUZvEm zU)0N&>Rf(a&7`xt!rvn}m_hI)8rdu25p#=dVh0$ddaXei+jnpH_~?$NFgie{!@7$qzC3>p)UyEP~jfr*FD=5+m%F8F8({X{!~qnbEdE zF*I*xSdPnmb}=I%jm(UDsR+r;`1ce4%UMnlfNw7h-xbrBzVy;7ZQvZNcg23_C6@`@ zi`+}y!+;@sNt1Stdy$He9QUu4{YzCRXmd{z`mJa}Qc&gp0d7dE#Wxf;E;liKPu|;n G>){hVG9lmq literal 0 HcmV?d00001 diff --git a/Buildings/Resources/ffd.dll b/Buildings/Resources/ffd.dll new file mode 100644 index 0000000000000000000000000000000000000000..c0797c5d1297398f728d09ee91d79c47425e2cbb GIT binary patch literal 139264 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

m5&>7pWaMRp+I! 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 z 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

~jydV_0Zu7tago66O4v$!j{ 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

hYys!yxWs#{?@|E+$C$m<|1XJ_hnoJakR5y+xe zfi5$(HQHM31$Z9+(mv2WK?dl2UDOrb(uW~tDFJmN`aj@(5Z$U7$Si*@nhbWKaxL}e?kmP@+-X& zJ4uj<*|0}Tm7A$Ntb^zGDZJtzpu^fA$9pQ|q7r$RIk32k)f*5!tx?yi>p_b*L5ug* z&(v=r8EM*aS~u-P?F_9y@^Yp&91&Hab^&Noqg|{mfQ7zBTc+KsJ)o_l)Oj7U^D%NW zKWPI&A5+iPa}iTrsF&+8#LU;hLwpQA_4E1`NYide6S3vpkeM586gj^2Y-7H$(D;Xw zr+L!YXuN=!Y6raSkBxnZI=h>r%p1*Hp)Xg%^Vwj&glO|4^K)}AtYs@?>RdEWqgaEj zVOEKCp;ZU}=UMATWU~JQe_$W6FLSYPiOS&#u#XS3k0Uep68jp~5lGy%A0E-2+zQCr zTC5pt=5|20eu@k*$-UJfFEbC?^*a7m{$c)cejRdfZy>k+4W#WPp*J!Z0|gKCY_4zt zG8i+2OOWk-M0f((-Yvp5NFRyHeiaT2CyA$v{Y6$Z#KB@7IO#%U<6`0x@qKt4gWbcR zZ6~_RkmJ4BJr~?_v-=VETK9ACbGN(y?cNQa>PN&}1<(prT~$U4|R5^H^q$fC78OwL1$H4!mZwS0*@ zA5wg`TrYDEi$k1M+ z5odo0)Z9zL9^o@3P5lX8Po_RxABC8D5;C+?Afp%SOZ6M{TacxDSYMLJqP<|f3fg=E z>M+Y;`vIdhG-Q8xF}cXJKczp5*!vItOQJ*9q%oa9yV2|%b_p{2YmrlZ4ZgvbSOLn0 zuAIWn;I88Cf;Ie(TZNU6^92DplN@A3r^0t7vBiAhDtNEUgu4(iuLf;42rq&*yM&K~ z&xNlMGc#g0(FNKl;+>)w*#F4AA2NG_bdDrS6Qz(;C(V}r0Z;IN)Y@~thliG2;92f@ z2wv@r@F^I%17!3(YPqtI|GZ5es`z1<>@38zDMMBfqD_Lp7S7e|5OKRvNi}Y z=uOCOzNPJk-Pw;^Q#buI*qwgBps1_*Amq98u$EK|S@Hpsb!0tilf4&o2Ufm1(A|rz cnA1>vHFpiXx#jT4cO!px2)Q#9{tx;5KcRc>`v3p{ literal 0 HcmV?d00001 diff --git a/Buildings/Resources/ffd.lib b/Buildings/Resources/ffd.lib new file mode 100644 index 0000000000000000000000000000000000000000..aaf6ac5d8942a3b26e76de5f7833fc5000c97e8c GIT binary patch literal 1646 zcmb_dPfrs;6#va`rMMwjgo}wJYeJ%4DlNOT2PF$)Vr40$l$&8FT`El=C5T-80v@<= z_5*O_PPlpCzz6V?c)<6jGrL6>WfP{EKkv`Z{N9`2n?8HpI%x0AIj`KCt>pV&)vtKf z%1!;W7E7h7UTr!69suG9u#bV<1u!(iUCP?>>Pn+27vHVDZPZqqD-GG{M3Az+9)^D# z@s+H7Tl4*TeMv6PH|NQ_ySFd-LmBPvB3@)hTuu<@2=b8tj&0zAgpnZ?0t77N=x5WZ z8L{66Gc_g(rbxlWA^b1fUd3F)rV|PqkLFH4+Jt|Y;-Dsq(e~DtPg84s5qLw3Z${8_ zfWktt8?_EwQ)OeCpv4dBKed9=fdJFz+HY2?)j7Wg{8%5rJ-28c#X}a6*FinUcp*Fn5eb1;yZOqw&~>6o`HNM8o>0Jm|)|1HP7cvhab%%!ElL zhLe>UWp6gF!%$d?8D|O$z>FEAWoCRgf}WWf_kQDdxywlcaOel%UE~Xhk literal 0 HcmV?d00001 diff --git a/Buildings/ffd.log b/Buildings/ffd.log new file mode 100644 index 00000000000..84b5fd221a3 --- /dev/null +++ b/Buildings/ffd.log @@ -0,0 +1,5898 @@ +Start Fast Fluid Dynamics Simulation with Thread ID 5165440 +fileName="C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/WindowWithoutShade.ffd" +read_parameter(): Opened file C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/WindowWithoutShade.ffd for FFD parameters with base directory C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/ +assign_parameter(): inpu.parameter_file_format=SCI +assign_parameter(): inpu.parameter_file_name=C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/WindowWithoutShade.cfd +assign_parameter(): inpu.block_file_name=C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/EmptyRoom.dat +assign_parameter(): geom.Lx=1.000000 +assign_parameter(): geom.Ly=1.000000 +assign_parameter(): geom.Lz=1.000000 +assign_parameter(): geom.imax=10 +assign_parameter(): geom.jmax=10 +assign_parameter(): geom.kmax=10 +assign_parameter(): geom.index=600 +assign_parameter(): inpu.read_old_ffd_file=0 +assign_parameter(): geom.dx=0.100000 +assign_parameter(): geom.dy=0.100000 +assign_parameter(): geom.dz=0.100000 +assign_parameter(): geom.uniform=1 +assign_parameter(): outp.version=RUN +assign_parameter(): prob.nu=0.000016 +assign_parameter(): prob.rho=1.177400 +assign_parameter(): prob.gravx=0.000000 +assign_parameter(): prob.gravy=0.000000 +assign_parameter(): prob.gravz=-9.810000 +assign_parameter(): prob.cond=0.026240 +assign_parameter(): prob.Cp=1006.000000 +assign_parameter(): prob.beta=0.003600 +assign_parameter(): prob.diff=0.000010 +assign_parameter(): prob.coeff_h=0.000400 +assign_parameter(): prob.force=1.000000 +assign_parameter(): prob.source=1.000000 +assign_parameter(): prob.movie=0 +assign_parameter(): prob.tur_model=LAM +assign_parameter(): prob.chen_a=0.038740 +assign_parameter(): prob.Prt=0.900000 +assign_parameter(): prob.Temp_Buoyancy=20.000000 +assign_parameter(): mytime.t_steady=100.000000 +assign_parameter(): bc.nb_Xi=1 +assign_parameter(): solv.solver=GS +assign_parameter(): solv.check_residual=0 +assign_parameter(): solv.advection_solver=SEMI +assign_parameter(): solv.interpolation=BILINEAR +assign_parameter(): solv.cosimulation=1 +assign_parameter(): sensor.nb_sensor=2 +assign_parameter(): sensor.name=OccupiedZoneAirTemperature +assign_parameter(): sensor.name=Velocity +assign_parameter(): init.T=10.000000 +assign_parameter(): init.u=0.000000 +assign_parameter(): init.v=0.000000 +assign_parameter(): init.w=0.000000 +read_sci_input(): Start to read sci input file C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/WindowWithoutShade.cfd +read_sci_input(): para->bc->nb_bc=10 +read_sci_input(): para->bc->nb_inlet=0 +read_sci_input(): para->bc->nb_outlet=0 +read_sci_input(): para->bc->nb_block=0 +read_sci_input(): para->bc->nb_wall=10 +read_sci_input(): para->bc->wallName[0]="South Wall" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[1]="North Wall" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[2]="Ceiling" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[3]="Floor" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[4]="West Wall" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[5]="West Wall (glass, unshaded)" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[6]="East Wall" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[7]="East Wall (glass, unshaded)" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[8]="East Wall (frame)" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->wallName[9]="West Wall (frame)" +read_sci_input(): ThermalBC=1, T/q_dot=0.000000 +read_sci_input(): para->bc->nb_source=0 +read_sci_input(): para->mytime->t_start=0.000000 +read_sci_input(): para->mytime->dt=1.000000 +read_sci_input(): para->mytime->step_total=1000 +read_sci_input(): Read sci input file C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/WindowWithoutShade.cfd +read_sci_input(): start to read block information from "C:/Git/modelica-buildings/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/EmptyRoom.dat". +read_sci_input(): end of reading zeroone.dat. +bounary_area(): Calculated surface area for FFD boundaries are: + Wall boundaries: + South Wall: 1.000000[m2] + North Wall: 1.000000[m2] + Ceiling: 1.000000[m2] + Floor: 1.000000[m2] + West Wall: 0.500000[m2] + West Wall (glass, unshaded): 0.400000[m2] + East Wall: 0.500000[m2] + East Wall (glass, unshaded): 0.400000[m2] + East Wall (frame): 0.100000[m2] + West Wall (frame): 0.100000[m2] +------------------------------------------------------------------- + nSur=10 + nPorts=0 + nSen=2 + nXi=1 + nC=0 + nConExtWin=2 + sha=0 + Surface 0: North Wall + Area:1.000000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 1: South Wall + Area:1.000000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 2: Floor + Area:1.000000[m2], Tilt:3.141593[deg] + Thermal boundary: Fixed temperature + Surface 3: Ceiling + Area:1.000000[m2], Tilt:0.000000[deg] + Thermal boundary: Fixed temperature + Surface 4: East Wall + Area:0.500000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 5: West Wall + Area:0.500000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 6: East Wall (glass, unshaded) + Area:0.400000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 7: West Wall (glass, unshaded) + Area:0.400000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 8: East Wall (frame) + Area:0.100000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Surface 9: West Wall (frame) + Area:0.100000[m2], Tilt:1.570796[deg] + Thermal boundary: Fixed temperature + Sensor 0: Occupied zone air temperature + Sensor 1: Velocity +compare_boundary_names(): Matched boundary name "North Wall". +compare_boundary_names(): Matched boundary name "South Wall". +compare_boundary_names(): Matched boundary name "Floor". +compare_boundary_names(): Matched boundary name "Ceiling". +compare_boundary_names(): Matched boundary name "East Wall". +compare_boundary_names(): Matched boundary name "West Wall". +compare_boundary_names(): Matched boundary name "East Wall (glass, unshaded)". +compare_boundary_names(): Matched boundary name "West Wall (glass, unshaded)". +compare_boundary_names(): Matched boundary name "East Wall (frame)". +compare_boundary_names(): Matched boundary name "West Wall (frame)". +Start to compare port names +compare_boundary_area(): Start to compare the area of solid surfaces. + South Wall has the same area of 1.000000[m2] + North Wall has the same area of 1.000000[m2] + Ceiling has the same area of 1.000000[m2] + Floor has the same area of 1.000000[m2] + West Wall has the same area of 0.500000[m2] + West Wall (glass, unshaded) has the same area of 0.400000[m2] + East Wall has the same area of 0.500000[m2] + East Wall (glass, unshaded) has the same area of 0.400000[m2] + East Wall (frame) has the same area of 0.100000[m2] + West Wall (frame) has the same area of 0.100000[m2] +read_cosim_parameter(): Simulation starts at 0.000000s +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=20.000000[degC] + North Wall: T=20.000000[degC] + Ceiling: T=20.000000[degC] + Floor: T=20.000000[degC] + West Wall: T=20.000000[degC] + West Wall (glass, unshaded): T=3.210931[degC] + East Wall: T=20.000000[degC] + East Wall (glass, unshaded): T=3.210931[degC] + East Wall (frame): T=8.887533[degC] + West Wall (frame): T=8.887533[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=0.000000[s] + Averaged room temperature 10.019528[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -5.219335[W] + North Wall: -5.219335[W] + Ceiling: -5.223463[W] + Floor: -5.215730[W] + West Wall: -2.607871[W] + West Wall (glass, unshaded): 1.423048[W] + East Wall: -2.607871[W] + East Wall (glass, unshaded): 1.423048[W] + East Wall (frame): 0.058589[W] + West Wall (frame): 0.058589[W] + Sensor Information: + Occupied zone air temperature: 283.169528 + Velocity: 0.220191 +ffd.c: Start FFD solver. +Physical time=1.0000 s, CPU time=2.3510 s, Time Ratio=0.4254 +Physical time=2.0000 s, CPU time=2.3600 s, Time Ratio=0.8475 +Physical time=3.0000 s, CPU time=2.3690 s, Time Ratio=1.2664 +Physical time=4.0000 s, CPU time=2.3760 s, Time Ratio=1.6835 +Physical time=5.0000 s, CPU time=2.3830 s, Time Ratio=2.0982 +Physical time=6.0000 s, CPU time=2.3890 s, Time Ratio=2.5115 +Physical time=7.0000 s, CPU time=2.3960 s, Time Ratio=2.9215 +Physical time=8.0000 s, CPU time=2.4010 s, Time Ratio=3.3319 +Physical time=9.0000 s, CPU time=2.4070 s, Time Ratio=3.7391 +Physical time=10.0000 s, CPU time=2.4130 s, Time Ratio=4.1442 +Physical time=11.0000 s, CPU time=2.4190 s, Time Ratio=4.5473 +Physical time=12.0000 s, CPU time=2.4250 s, Time Ratio=4.9485 +Physical time=13.0000 s, CPU time=2.4310 s, Time Ratio=5.3476 +Physical time=14.0000 s, CPU time=2.4360 s, Time Ratio=5.7471 +Physical time=15.0000 s, CPU time=2.4420 s, Time Ratio=6.1425 +Physical time=16.0000 s, CPU time=2.4470 s, Time Ratio=6.5386 +Physical time=17.0000 s, CPU time=2.4530 s, Time Ratio=6.9303 +Physical time=18.0000 s, CPU time=2.4580 s, Time Ratio=7.3230 +Physical time=19.0000 s, CPU time=2.4630 s, Time Ratio=7.7142 +Physical time=20.0000 s, CPU time=2.4690 s, Time Ratio=8.1004 +Physical time=21.0000 s, CPU time=2.4750 s, Time Ratio=8.4848 +Physical time=22.0000 s, CPU time=2.4810 s, Time Ratio=8.8674 +Physical time=23.0000 s, CPU time=2.4860 s, Time Ratio=9.2518 +Physical time=24.0000 s, CPU time=2.4910 s, Time Ratio=9.6347 +Physical time=25.0000 s, CPU time=2.4970 s, Time Ratio=10.0120 +Physical time=26.0000 s, CPU time=2.5030 s, Time Ratio=10.3875 +Physical time=27.0000 s, CPU time=2.5080 s, Time Ratio=10.7656 +Physical time=28.0000 s, CPU time=2.5140 s, Time Ratio=11.1376 +Physical time=29.0000 s, CPU time=2.5190 s, Time Ratio=11.5125 +Physical time=30.0000 s, CPU time=2.5250 s, Time Ratio=11.8812 +Physical time=31.0000 s, CPU time=2.5300 s, Time Ratio=12.2530 +Physical time=32.0000 s, CPU time=2.5360 s, Time Ratio=12.6183 +Physical time=33.0000 s, CPU time=2.5420 s, Time Ratio=12.9819 +Physical time=34.0000 s, CPU time=2.5480 s, Time Ratio=13.3438 +Physical time=35.0000 s, CPU time=2.5530 s, Time Ratio=13.7094 +Physical time=36.0000 s, CPU time=2.5580 s, Time Ratio=14.0735 +Physical time=37.0000 s, CPU time=2.5630 s, Time Ratio=14.4362 +Physical time=38.0000 s, CPU time=2.5730 s, Time Ratio=14.7688 +Physical time=39.0000 s, CPU time=2.5790 s, Time Ratio=15.1221 +Physical time=40.0000 s, CPU time=2.5850 s, Time Ratio=15.4739 +Physical time=41.0000 s, CPU time=2.5900 s, Time Ratio=15.8301 +Physical time=42.0000 s, CPU time=2.5990 s, Time Ratio=16.1601 +Physical time=43.0000 s, CPU time=2.6080 s, Time Ratio=16.4877 +Physical time=44.0000 s, CPU time=2.6160 s, Time Ratio=16.8196 +Physical time=45.0000 s, CPU time=2.6210 s, Time Ratio=17.1690 +Physical time=46.0000 s, CPU time=2.6260 s, Time Ratio=17.5171 +Physical time=47.0000 s, CPU time=2.6330 s, Time Ratio=17.8504 +Physical time=48.0000 s, CPU time=2.6390 s, Time Ratio=18.1887 +Physical time=49.0000 s, CPU time=2.6440 s, Time Ratio=18.5325 +Physical time=50.0000 s, CPU time=2.6500 s, Time Ratio=18.8679 +Physical time=51.0000 s, CPU time=2.6550 s, Time Ratio=19.2090 +Physical time=52.0000 s, CPU time=2.6610 s, Time Ratio=19.5415 +Physical time=53.0000 s, CPU time=2.6660 s, Time Ratio=19.8800 +Physical time=54.0000 s, CPU time=2.6700 s, Time Ratio=20.2247 +Physical time=55.0000 s, CPU time=2.6750 s, Time Ratio=20.5607 +Physical time=56.0000 s, CPU time=2.6800 s, Time Ratio=20.8955 +Physical time=57.0000 s, CPU time=2.6850 s, Time Ratio=21.2291 +Physical time=58.0000 s, CPU time=2.6900 s, Time Ratio=21.5613 +Physical time=59.0000 s, CPU time=2.6950 s, Time Ratio=21.8924 +Physical time=60.0000 s, CPU time=2.7000 s, Time Ratio=22.2222 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.997659[degC] + North Wall: T=19.997659[degC] + Ceiling: T=19.997661[degC] + Floor: T=19.997658[degC] + West Wall: T=19.997658[degC] + West Wall (glass, unshaded): T=3.191188[degC] + East Wall: T=19.997658[degC] + East Wall (glass, unshaded): T=3.191188[degC] + East Wall (frame): T=8.886617[degC] + West Wall (frame): T=8.886617[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=60.000000[s] + Averaged room temperature 10.809391[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -4.724518[W] + North Wall: -4.724371[W] + Ceiling: -4.620939[W] + Floor: -4.816742[W] + West Wall: -2.365698[W] + West Wall (glass, unshaded): 1.592651[W] + East Wall: -2.365660[W] + East Wall (glass, unshaded): 1.592843[W] + East Wall (frame): 0.098915[W] + West Wall (frame): 0.099018[W] + Sensor Information: + Occupied zone air temperature: 283.959391 + Velocity: 0.026750 +ffd_solver(): Synchronized data at t=60.000000[s] + +Physical time=61.0000 s, CPU time=2.8440 s, Time Ratio=21.4487 +Physical time=62.0000 s, CPU time=2.8490 s, Time Ratio=21.7620 +Physical time=63.0000 s, CPU time=2.8540 s, Time Ratio=22.0743 +Physical time=64.0000 s, CPU time=2.8600 s, Time Ratio=22.3776 +Physical time=65.0000 s, CPU time=2.8650 s, Time Ratio=22.6876 +Physical time=66.0000 s, CPU time=2.8700 s, Time Ratio=22.9965 +Physical time=67.0000 s, CPU time=2.8750 s, Time Ratio=23.3043 +Physical time=68.0000 s, CPU time=2.8800 s, Time Ratio=23.6111 +Physical time=69.0000 s, CPU time=2.8860 s, Time Ratio=23.9085 +Physical time=70.0000 s, CPU time=2.8910 s, Time Ratio=24.2131 +Physical time=71.0000 s, CPU time=2.8960 s, Time Ratio=24.5166 +Physical time=72.0000 s, CPU time=2.9010 s, Time Ratio=24.8190 +Physical time=73.0000 s, CPU time=2.9060 s, Time Ratio=25.1204 +Physical time=74.0000 s, CPU time=2.9100 s, Time Ratio=25.4296 +Physical time=75.0000 s, CPU time=2.9150 s, Time Ratio=25.7290 +Physical time=76.0000 s, CPU time=2.9200 s, Time Ratio=26.0274 +Physical time=77.0000 s, CPU time=2.9320 s, Time Ratio=26.2619 +Physical time=78.0000 s, CPU time=2.9430 s, Time Ratio=26.5036 +Physical time=79.0000 s, CPU time=2.9550 s, Time Ratio=26.7343 +Physical time=80.0000 s, CPU time=2.9660 s, Time Ratio=26.9724 +Physical time=81.0000 s, CPU time=2.9750 s, Time Ratio=27.2269 +Physical time=82.0000 s, CPU time=2.9880 s, Time Ratio=27.4431 +Physical time=83.0000 s, CPU time=3.0000 s, Time Ratio=27.6667 +Physical time=84.0000 s, CPU time=3.0070 s, Time Ratio=27.9348 +Physical time=85.0000 s, CPU time=3.0130 s, Time Ratio=28.2111 +Physical time=86.0000 s, CPU time=3.0220 s, Time Ratio=28.4580 +Physical time=87.0000 s, CPU time=3.0310 s, Time Ratio=28.7034 +Physical time=88.0000 s, CPU time=3.0400 s, Time Ratio=28.9474 +Physical time=89.0000 s, CPU time=3.0480 s, Time Ratio=29.1995 +Physical time=90.0000 s, CPU time=3.0550 s, Time Ratio=29.4599 +Physical time=91.0000 s, CPU time=3.0630 s, Time Ratio=29.7094 +Physical time=92.0000 s, CPU time=3.0730 s, Time Ratio=29.9382 +Physical time=93.0000 s, CPU time=3.0800 s, Time Ratio=30.1948 +Physical time=94.0000 s, CPU time=3.0870 s, Time Ratio=30.4503 +Physical time=95.0000 s, CPU time=3.0940 s, Time Ratio=30.7046 +Physical time=96.0000 s, CPU time=3.1010 s, Time Ratio=30.9578 +Physical time=97.0000 s, CPU time=3.1080 s, Time Ratio=31.2098 +Physical time=98.0000 s, CPU time=3.1130 s, Time Ratio=31.4809 +Physical time=99.0000 s, CPU time=3.1200 s, Time Ratio=31.7308 +Physical time=100.0000 s, CPU time=3.1250 s, Time Ratio=32.0000 +Physical time=101.0000 s, CPU time=3.1300 s, Time Ratio=32.2684 +Physical time=102.0000 s, CPU time=3.1350 s, Time Ratio=32.5359 +Physical time=103.0000 s, CPU time=3.1400 s, Time Ratio=32.8025 +Physical time=104.0000 s, CPU time=3.1460 s, Time Ratio=33.0579 +Physical time=105.0000 s, CPU time=3.1510 s, Time Ratio=33.3228 +Physical time=106.0000 s, CPU time=3.1560 s, Time Ratio=33.5868 +Physical time=107.0000 s, CPU time=3.1610 s, Time Ratio=33.8500 +Physical time=108.0000 s, CPU time=3.1660 s, Time Ratio=34.1124 +Physical time=109.0000 s, CPU time=3.1710 s, Time Ratio=34.3740 +Physical time=110.0000 s, CPU time=3.1770 s, Time Ratio=34.6239 +Physical time=111.0000 s, CPU time=3.1870 s, Time Ratio=34.8290 +Physical time=112.0000 s, CPU time=3.1970 s, Time Ratio=35.0328 +Physical time=113.0000 s, CPU time=3.2070 s, Time Ratio=35.2354 +Physical time=114.0000 s, CPU time=3.2170 s, Time Ratio=35.4367 +Physical time=115.0000 s, CPU time=3.2240 s, Time Ratio=35.6700 +Physical time=116.0000 s, CPU time=3.2300 s, Time Ratio=35.9133 +Physical time=117.0000 s, CPU time=3.2350 s, Time Ratio=36.1669 +Physical time=118.0000 s, CPU time=3.2400 s, Time Ratio=36.4198 +Physical time=119.0000 s, CPU time=3.2510 s, Time Ratio=36.6041 +Physical time=120.0000 s, CPU time=3.2570 s, Time Ratio=36.8437 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.992866[degC] + North Wall: T=19.992866[degC] + Ceiling: T=19.992836[degC] + Floor: T=19.992893[degC] + West Wall: T=19.992866[degC] + West Wall (glass, unshaded): T=3.151572[degC] + East Wall: T=19.992866[degC] + East Wall (glass, unshaded): T=3.151570[degC] + East Wall (frame): T=8.884092[degC] + West Wall (frame): T=8.884091[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=120.000000[s] + Averaged room temperature 12.223591[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -4.005387[W] + North Wall: -4.007160[W] + Ceiling: -3.858332[W] + Floor: -4.128383[W] + West Wall: -2.013243[W] + West Wall (glass, unshaded): 1.886230[W] + East Wall: -2.011795[W] + East Wall (glass, unshaded): 1.886334[W] + East Wall (frame): 0.165605[W] + West Wall (frame): 0.165667[W] + Sensor Information: + Occupied zone air temperature: 285.373591 + Velocity: 0.012926 +ffd_solver(): Synchronized data at t=120.000000[s] + +Physical time=121.0000 s, CPU time=3.5410 s, Time Ratio=34.1711 +Physical time=122.0000 s, CPU time=3.5460 s, Time Ratio=34.4050 +Physical time=123.0000 s, CPU time=3.5520 s, Time Ratio=34.6284 +Physical time=124.0000 s, CPU time=3.5570 s, Time Ratio=34.8608 +Physical time=125.0000 s, CPU time=3.5650 s, Time Ratio=35.0631 +Physical time=126.0000 s, CPU time=3.5720 s, Time Ratio=35.2744 +Physical time=127.0000 s, CPU time=3.5790 s, Time Ratio=35.4848 +Physical time=128.0000 s, CPU time=3.5860 s, Time Ratio=35.6944 +Physical time=129.0000 s, CPU time=3.5920 s, Time Ratio=35.9131 +Physical time=130.0000 s, CPU time=3.5970 s, Time Ratio=36.1412 +Physical time=131.0000 s, CPU time=3.6030 s, Time Ratio=36.3586 +Physical time=132.0000 s, CPU time=3.6090 s, Time Ratio=36.5752 +Physical time=133.0000 s, CPU time=3.6160 s, Time Ratio=36.7810 +Physical time=134.0000 s, CPU time=3.6220 s, Time Ratio=36.9961 +Physical time=135.0000 s, CPU time=3.6270 s, Time Ratio=37.2208 +Physical time=136.0000 s, CPU time=3.6320 s, Time Ratio=37.4449 +Physical time=137.0000 s, CPU time=3.6390 s, Time Ratio=37.6477 +Physical time=138.0000 s, CPU time=3.6440 s, Time Ratio=37.8705 +Physical time=139.0000 s, CPU time=3.6500 s, Time Ratio=38.0822 +Physical time=140.0000 s, CPU time=3.6560 s, Time Ratio=38.2932 +Physical time=141.0000 s, CPU time=3.6620 s, Time Ratio=38.5035 +Physical time=142.0000 s, CPU time=3.6680 s, Time Ratio=38.7132 +Physical time=143.0000 s, CPU time=3.6730 s, Time Ratio=38.9328 +Physical time=144.0000 s, CPU time=3.6780 s, Time Ratio=39.1517 +Physical time=145.0000 s, CPU time=3.6840 s, Time Ratio=39.3594 +Physical time=146.0000 s, CPU time=3.6890 s, Time Ratio=39.5771 +Physical time=147.0000 s, CPU time=3.6970 s, Time Ratio=39.7620 +Physical time=148.0000 s, CPU time=3.7070 s, Time Ratio=39.9245 +Physical time=149.0000 s, CPU time=3.7130 s, Time Ratio=40.1293 +Physical time=150.0000 s, CPU time=3.7220 s, Time Ratio=40.3009 +Physical time=151.0000 s, CPU time=3.7310 s, Time Ratio=40.4717 +Physical time=152.0000 s, CPU time=3.7400 s, Time Ratio=40.6417 +Physical time=153.0000 s, CPU time=3.7460 s, Time Ratio=40.8436 +Physical time=154.0000 s, CPU time=3.7520 s, Time Ratio=41.0448 +Physical time=155.0000 s, CPU time=3.7570 s, Time Ratio=41.2563 +Physical time=156.0000 s, CPU time=3.7620 s, Time Ratio=41.4673 +Physical time=157.0000 s, CPU time=3.7670 s, Time Ratio=41.6777 +Physical time=158.0000 s, CPU time=3.7730 s, Time Ratio=41.8765 +Physical time=159.0000 s, CPU time=3.7780 s, Time Ratio=42.0858 +Physical time=160.0000 s, CPU time=3.7830 s, Time Ratio=42.2945 +Physical time=161.0000 s, CPU time=3.7890 s, Time Ratio=42.4914 +Physical time=162.0000 s, CPU time=3.7940 s, Time Ratio=42.6990 +Physical time=163.0000 s, CPU time=3.7990 s, Time Ratio=42.9060 +Physical time=164.0000 s, CPU time=3.8050 s, Time Ratio=43.1012 +Physical time=165.0000 s, CPU time=3.8110 s, Time Ratio=43.2957 +Physical time=166.0000 s, CPU time=3.8160 s, Time Ratio=43.5010 +Physical time=167.0000 s, CPU time=3.8230 s, Time Ratio=43.6830 +Physical time=168.0000 s, CPU time=3.8290 s, Time Ratio=43.8757 +Physical time=169.0000 s, CPU time=3.8350 s, Time Ratio=44.0678 +Physical time=170.0000 s, CPU time=3.8420 s, Time Ratio=44.2478 +Physical time=171.0000 s, CPU time=3.8490 s, Time Ratio=44.4271 +Physical time=172.0000 s, CPU time=3.8550 s, Time Ratio=44.6174 +Physical time=173.0000 s, CPU time=3.8620 s, Time Ratio=44.7954 +Physical time=174.0000 s, CPU time=3.8690 s, Time Ratio=44.9729 +Physical time=175.0000 s, CPU time=3.8760 s, Time Ratio=45.1496 +Physical time=176.0000 s, CPU time=3.8820 s, Time Ratio=45.3375 +Physical time=177.0000 s, CPU time=3.8880 s, Time Ratio=45.5247 +Physical time=178.0000 s, CPU time=3.8950 s, Time Ratio=45.6996 +Physical time=179.0000 s, CPU time=3.9050 s, Time Ratio=45.8387 +Physical time=180.0000 s, CPU time=3.9100 s, Time Ratio=46.0358 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.987757[degC] + North Wall: T=19.987757[degC] + Ceiling: T=19.987648[degC] + Floor: T=19.987851[degC] + West Wall: T=19.987766[degC] + West Wall (glass, unshaded): T=3.108941[degC] + East Wall: T=19.987765[degC] + East Wall (glass, unshaded): T=3.108935[degC] + East Wall (frame): T=8.879836[degC] + West Wall (frame): T=8.879832[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=180.000000[s] + Averaged room temperature 13.314663[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -3.426945[W] + North Wall: -3.418075[W] + Ceiling: -3.306444[W] + Floor: -3.515289[W] + West Wall: -1.760555[W] + West Wall (glass, unshaded): 2.115579[W] + East Wall: -1.761381[W] + East Wall (glass, unshaded): 2.121504[W] + East Wall (frame): 0.223249[W] + West Wall (frame): 0.222644[W] + Sensor Information: + Occupied zone air temperature: 286.464663 + Velocity: 0.041999 +ffd_solver(): Synchronized data at t=180.000000[s] + +Physical time=181.0000 s, CPU time=4.0200 s, Time Ratio=45.0249 +Physical time=182.0000 s, CPU time=4.0290 s, Time Ratio=45.1725 +Physical time=183.0000 s, CPU time=4.0350 s, Time Ratio=45.3532 +Physical time=184.0000 s, CPU time=4.0410 s, Time Ratio=45.5333 +Physical time=185.0000 s, CPU time=4.0480 s, Time Ratio=45.7016 +Physical time=186.0000 s, CPU time=4.0540 s, Time Ratio=45.8806 +Physical time=187.0000 s, CPU time=4.0600 s, Time Ratio=46.0591 +Physical time=188.0000 s, CPU time=4.0660 s, Time Ratio=46.2371 +Physical time=189.0000 s, CPU time=4.0710 s, Time Ratio=46.4259 +Physical time=190.0000 s, CPU time=4.0780 s, Time Ratio=46.5915 +Physical time=191.0000 s, CPU time=4.0840 s, Time Ratio=46.7679 +Physical time=192.0000 s, CPU time=4.0900 s, Time Ratio=46.9438 +Physical time=193.0000 s, CPU time=4.0960 s, Time Ratio=47.1191 +Physical time=194.0000 s, CPU time=4.1010 s, Time Ratio=47.3055 +Physical time=195.0000 s, CPU time=4.1060 s, Time Ratio=47.4915 +Physical time=196.0000 s, CPU time=4.1110 s, Time Ratio=47.6770 +Physical time=197.0000 s, CPU time=4.1160 s, Time Ratio=47.8620 +Physical time=198.0000 s, CPU time=4.1210 s, Time Ratio=48.0466 +Physical time=199.0000 s, CPU time=4.1270 s, Time Ratio=48.2190 +Physical time=200.0000 s, CPU time=4.1320 s, Time Ratio=48.4027 +Physical time=201.0000 s, CPU time=4.1380 s, Time Ratio=48.5742 +Physical time=202.0000 s, CPU time=4.1430 s, Time Ratio=48.7569 +Physical time=203.0000 s, CPU time=4.1480 s, Time Ratio=48.9392 +Physical time=204.0000 s, CPU time=4.1530 s, Time Ratio=49.1211 +Physical time=205.0000 s, CPU time=4.1580 s, Time Ratio=49.3025 +Physical time=206.0000 s, CPU time=4.1630 s, Time Ratio=49.4835 +Physical time=207.0000 s, CPU time=4.1680 s, Time Ratio=49.6641 +Physical time=208.0000 s, CPU time=4.1730 s, Time Ratio=49.8442 +Physical time=209.0000 s, CPU time=4.1810 s, Time Ratio=49.9880 +Physical time=210.0000 s, CPU time=4.1900 s, Time Ratio=50.1193 +Physical time=211.0000 s, CPU time=4.1980 s, Time Ratio=50.2620 +Physical time=212.0000 s, CPU time=4.2060 s, Time Ratio=50.4042 +Physical time=213.0000 s, CPU time=4.2140 s, Time Ratio=50.5458 +Physical time=214.0000 s, CPU time=4.2210 s, Time Ratio=50.6989 +Physical time=215.0000 s, CPU time=4.2270 s, Time Ratio=50.8635 +Physical time=216.0000 s, CPU time=4.2330 s, Time Ratio=51.0276 +Physical time=217.0000 s, CPU time=4.2400 s, Time Ratio=51.1792 +Physical time=218.0000 s, CPU time=4.2490 s, Time Ratio=51.3062 +Physical time=219.0000 s, CPU time=4.2590 s, Time Ratio=51.4205 +Physical time=220.0000 s, CPU time=4.2720 s, Time Ratio=51.4981 +Physical time=221.0000 s, CPU time=4.2840 s, Time Ratio=51.5873 +Physical time=222.0000 s, CPU time=4.2960 s, Time Ratio=51.6760 +Physical time=223.0000 s, CPU time=4.3050 s, Time Ratio=51.8002 +Physical time=224.0000 s, CPU time=4.3110 s, Time Ratio=51.9601 +Physical time=225.0000 s, CPU time=4.3170 s, Time Ratio=52.1195 +Physical time=226.0000 s, CPU time=4.3220 s, Time Ratio=52.2906 +Physical time=227.0000 s, CPU time=4.3270 s, Time Ratio=52.4613 +Physical time=228.0000 s, CPU time=4.3330 s, Time Ratio=52.6194 +Physical time=229.0000 s, CPU time=4.3380 s, Time Ratio=52.7893 +Physical time=230.0000 s, CPU time=4.3430 s, Time Ratio=52.9588 +Physical time=231.0000 s, CPU time=4.3490 s, Time Ratio=53.1157 +Physical time=232.0000 s, CPU time=4.3590 s, Time Ratio=53.2232 +Physical time=233.0000 s, CPU time=4.3690 s, Time Ratio=53.3303 +Physical time=234.0000 s, CPU time=4.3810 s, Time Ratio=53.4125 +Physical time=235.0000 s, CPU time=4.3860 s, Time Ratio=53.5796 +Physical time=236.0000 s, CPU time=4.3930 s, Time Ratio=53.7218 +Physical time=237.0000 s, CPU time=4.3990 s, Time Ratio=53.8759 +Physical time=238.0000 s, CPU time=4.4050 s, Time Ratio=54.0295 +Physical time=239.0000 s, CPU time=4.4100 s, Time Ratio=54.1950 +Physical time=240.0000 s, CPU time=4.4160 s, Time Ratio=54.3478 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.982309[degC] + North Wall: T=19.982307[degC] + Ceiling: T=19.982118[degC] + Floor: T=19.982468[degC] + West Wall: T=19.982354[degC] + West Wall (glass, unshaded): T=3.062800[degC] + East Wall: T=19.982352[degC] + East Wall (glass, unshaded): T=3.062711[degC] + East Wall (frame): T=8.873609[degC] + West Wall (frame): T=8.873614[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=240.000000[s] + Averaged room temperature 14.199924[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -2.946089[W] + North Wall: -2.947300[W] + Ceiling: -2.884880[W] + Floor: -3.006908[W] + West Wall: -1.535531[W] + West Wall (glass, unshaded): 2.307698[W] + East Wall: -1.530925[W] + East Wall (glass, unshaded): 2.314711[W] + East Wall (frame): 0.269255[W] + West Wall (frame): 0.268831[W] + Sensor Information: + Occupied zone air temperature: 287.349924 + Velocity: 0.020923 +ffd_solver(): Synchronized data at t=240.000000[s] + +Physical time=241.0000 s, CPU time=4.5120 s, Time Ratio=53.4131 +Physical time=242.0000 s, CPU time=4.5170 s, Time Ratio=53.5754 +Physical time=243.0000 s, CPU time=4.5230 s, Time Ratio=53.7254 +Physical time=244.0000 s, CPU time=4.5280 s, Time Ratio=53.8869 +Physical time=245.0000 s, CPU time=4.5330 s, Time Ratio=54.0481 +Physical time=246.0000 s, CPU time=4.5380 s, Time Ratio=54.2089 +Physical time=247.0000 s, CPU time=4.5430 s, Time Ratio=54.3694 +Physical time=248.0000 s, CPU time=4.5480 s, Time Ratio=54.5295 +Physical time=249.0000 s, CPU time=4.5530 s, Time Ratio=54.6892 +Physical time=250.0000 s, CPU time=4.5580 s, Time Ratio=54.8486 +Physical time=251.0000 s, CPU time=4.5640 s, Time Ratio=54.9956 +Physical time=252.0000 s, CPU time=4.5720 s, Time Ratio=55.1181 +Physical time=253.0000 s, CPU time=4.5800 s, Time Ratio=55.2402 +Physical time=254.0000 s, CPU time=4.5880 s, Time Ratio=55.3618 +Physical time=255.0000 s, CPU time=4.5950 s, Time Ratio=55.4951 +Physical time=256.0000 s, CPU time=4.6030 s, Time Ratio=55.6159 +Physical time=257.0000 s, CPU time=4.6110 s, Time Ratio=55.7363 +Physical time=258.0000 s, CPU time=4.6210 s, Time Ratio=55.8321 +Physical time=259.0000 s, CPU time=4.6320 s, Time Ratio=55.9154 +Physical time=260.0000 s, CPU time=4.6450 s, Time Ratio=55.9742 +Physical time=261.0000 s, CPU time=4.6620 s, Time Ratio=55.9846 +Physical time=262.0000 s, CPU time=4.6730 s, Time Ratio=56.0668 +Physical time=263.0000 s, CPU time=4.6880 s, Time Ratio=56.1007 +Physical time=264.0000 s, CPU time=4.7000 s, Time Ratio=56.1702 +Physical time=265.0000 s, CPU time=4.7120 s, Time Ratio=56.2394 +Physical time=266.0000 s, CPU time=4.7280 s, Time Ratio=56.2606 +Physical time=267.0000 s, CPU time=4.7450 s, Time Ratio=56.2698 +Physical time=268.0000 s, CPU time=4.7590 s, Time Ratio=56.3144 +Physical time=269.0000 s, CPU time=4.7720 s, Time Ratio=56.3705 +Physical time=270.0000 s, CPU time=4.7890 s, Time Ratio=56.3792 +Physical time=271.0000 s, CPU time=4.8050 s, Time Ratio=56.3996 +Physical time=272.0000 s, CPU time=4.8180 s, Time Ratio=56.4550 +Physical time=273.0000 s, CPU time=4.8320 s, Time Ratio=56.4983 +Physical time=274.0000 s, CPU time=4.8500 s, Time Ratio=56.4948 +Physical time=275.0000 s, CPU time=4.8650 s, Time Ratio=56.5262 +Physical time=276.0000 s, CPU time=4.8780 s, Time Ratio=56.5806 +Physical time=277.0000 s, CPU time=4.8890 s, Time Ratio=56.6578 +Physical time=278.0000 s, CPU time=4.9030 s, Time Ratio=56.7000 +Physical time=279.0000 s, CPU time=4.9130 s, Time Ratio=56.7881 +Physical time=280.0000 s, CPU time=4.9240 s, Time Ratio=56.8643 +Physical time=281.0000 s, CPU time=4.9400 s, Time Ratio=56.8826 +Physical time=282.0000 s, CPU time=4.9540 s, Time Ratio=56.9237 +Physical time=283.0000 s, CPU time=4.9640 s, Time Ratio=57.0105 +Physical time=284.0000 s, CPU time=4.9730 s, Time Ratio=57.1084 +Physical time=285.0000 s, CPU time=4.9850 s, Time Ratio=57.1715 +Physical time=286.0000 s, CPU time=4.9950 s, Time Ratio=57.2573 +Physical time=287.0000 s, CPU time=5.0030 s, Time Ratio=57.3656 +Physical time=288.0000 s, CPU time=5.0090 s, Time Ratio=57.4965 +Physical time=289.0000 s, CPU time=5.0200 s, Time Ratio=57.5697 +Physical time=290.0000 s, CPU time=5.0310 s, Time Ratio=57.6426 +Physical time=291.0000 s, CPU time=5.0440 s, Time Ratio=57.6923 +Physical time=292.0000 s, CPU time=5.0570 s, Time Ratio=57.7417 +Physical time=293.0000 s, CPU time=5.0670 s, Time Ratio=57.8251 +Physical time=294.0000 s, CPU time=5.0770 s, Time Ratio=57.9082 +Physical time=295.0000 s, CPU time=5.0940 s, Time Ratio=57.9113 +Physical time=296.0000 s, CPU time=5.1070 s, Time Ratio=57.9597 +Physical time=297.0000 s, CPU time=5.1160 s, Time Ratio=58.0532 +Physical time=298.0000 s, CPU time=5.1270 s, Time Ratio=58.1237 +Physical time=299.0000 s, CPU time=5.1360 s, Time Ratio=58.2165 +Physical time=300.0000 s, CPU time=5.1490 s, Time Ratio=58.2637 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.976599[degC] + North Wall: T=19.976595[degC] + Ceiling: T=19.976355[degC] + Floor: T=19.976802[degC] + West Wall: T=19.976713[degC] + West Wall (glass, unshaded): T=3.014845[degC] + East Wall: T=19.976709[degC] + East Wall (glass, unshaded): T=3.014590[degC] + East Wall (frame): T=8.865756[degC] + West Wall (frame): T=8.865775[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=300.000000[s] + Averaged room temperature 14.878314[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -2.576853[W] + North Wall: -2.591372[W] + Ceiling: -2.515713[W] + Floor: -2.640719[W] + West Wall: -1.341990[W] + West Wall (glass, unshaded): 2.453929[W] + East Wall: -1.359798[W] + East Wall (glass, unshaded): 2.460480[W] + East Wall (frame): 0.302032[W] + West Wall (frame): 0.302524[W] + Sensor Information: + Occupied zone air temperature: 288.028314 + Velocity: 0.036801 +ffd_solver(): Synchronized data at t=300.000000[s] + +Physical time=301.0000 s, CPU time=5.2780 s, Time Ratio=57.0292 +Physical time=302.0000 s, CPU time=5.2870 s, Time Ratio=57.1212 +Physical time=303.0000 s, CPU time=5.2930 s, Time Ratio=57.2454 +Physical time=304.0000 s, CPU time=5.2990 s, Time Ratio=57.3693 +Physical time=305.0000 s, CPU time=5.3040 s, Time Ratio=57.5038 +Physical time=306.0000 s, CPU time=5.3090 s, Time Ratio=57.6380 +Physical time=307.0000 s, CPU time=5.3160 s, Time Ratio=57.7502 +Physical time=308.0000 s, CPU time=5.3260 s, Time Ratio=57.8295 +Physical time=309.0000 s, CPU time=5.3330 s, Time Ratio=57.9411 +Physical time=310.0000 s, CPU time=5.3400 s, Time Ratio=58.0524 +Physical time=311.0000 s, CPU time=5.3480 s, Time Ratio=58.1526 +Physical time=312.0000 s, CPU time=5.3550 s, Time Ratio=58.2633 +Physical time=313.0000 s, CPU time=5.3620 s, Time Ratio=58.3737 +Physical time=314.0000 s, CPU time=5.3710 s, Time Ratio=58.4621 +Physical time=315.0000 s, CPU time=5.3780 s, Time Ratio=58.5720 +Physical time=316.0000 s, CPU time=5.3840 s, Time Ratio=58.6924 +Physical time=317.0000 s, CPU time=5.3900 s, Time Ratio=58.8126 +Physical time=318.0000 s, CPU time=5.3950 s, Time Ratio=58.9435 +Physical time=319.0000 s, CPU time=5.4010 s, Time Ratio=59.0631 +Physical time=320.0000 s, CPU time=5.4080 s, Time Ratio=59.1716 +Physical time=321.0000 s, CPU time=5.4130 s, Time Ratio=59.3017 +Physical time=322.0000 s, CPU time=5.4180 s, Time Ratio=59.4315 +Physical time=323.0000 s, CPU time=5.4250 s, Time Ratio=59.5392 +Physical time=324.0000 s, CPU time=5.4400 s, Time Ratio=59.5588 +Physical time=325.0000 s, CPU time=5.4500 s, Time Ratio=59.6330 +Physical time=326.0000 s, CPU time=5.4600 s, Time Ratio=59.7070 +Physical time=327.0000 s, CPU time=5.4700 s, Time Ratio=59.7806 +Physical time=328.0000 s, CPU time=5.4870 s, Time Ratio=59.7777 +Physical time=329.0000 s, CPU time=5.5030 s, Time Ratio=59.7856 +Physical time=330.0000 s, CPU time=5.5130 s, Time Ratio=59.8585 +Physical time=331.0000 s, CPU time=5.5250 s, Time Ratio=59.9095 +Physical time=332.0000 s, CPU time=5.5370 s, Time Ratio=59.9603 +Physical time=333.0000 s, CPU time=5.5450 s, Time Ratio=60.0541 +Physical time=334.0000 s, CPU time=5.5580 s, Time Ratio=60.0936 +Physical time=335.0000 s, CPU time=5.5650 s, Time Ratio=60.1977 +Physical time=336.0000 s, CPU time=5.5740 s, Time Ratio=60.2799 +Physical time=337.0000 s, CPU time=5.5880 s, Time Ratio=60.3078 +Physical time=338.0000 s, CPU time=5.5940 s, Time Ratio=60.4219 +Physical time=339.0000 s, CPU time=5.6010 s, Time Ratio=60.5249 +Physical time=340.0000 s, CPU time=5.6100 s, Time Ratio=60.6061 +Physical time=341.0000 s, CPU time=5.6160 s, Time Ratio=60.7194 +Physical time=342.0000 s, CPU time=5.6220 s, Time Ratio=60.8324 +Physical time=343.0000 s, CPU time=5.6290 s, Time Ratio=60.9344 +Physical time=344.0000 s, CPU time=5.6340 s, Time Ratio=61.0579 +Physical time=345.0000 s, CPU time=5.6410 s, Time Ratio=61.1594 +Physical time=346.0000 s, CPU time=5.6460 s, Time Ratio=61.2823 +Physical time=347.0000 s, CPU time=5.6520 s, Time Ratio=61.3942 +Physical time=348.0000 s, CPU time=5.6580 s, Time Ratio=61.5058 +Physical time=349.0000 s, CPU time=5.6640 s, Time Ratio=61.6172 +Physical time=350.0000 s, CPU time=5.6700 s, Time Ratio=61.7284 +Physical time=351.0000 s, CPU time=5.6760 s, Time Ratio=61.8393 +Physical time=352.0000 s, CPU time=5.6820 s, Time Ratio=61.9500 +Physical time=353.0000 s, CPU time=5.6890 s, Time Ratio=62.0496 +Physical time=354.0000 s, CPU time=5.6990 s, Time Ratio=62.1162 +Physical time=355.0000 s, CPU time=5.7110 s, Time Ratio=62.1607 +Physical time=356.0000 s, CPU time=5.7230 s, Time Ratio=62.2051 +Physical time=357.0000 s, CPU time=5.7300 s, Time Ratio=62.3037 +Physical time=358.0000 s, CPU time=5.7370 s, Time Ratio=62.4020 +Physical time=359.0000 s, CPU time=5.7430 s, Time Ratio=62.5109 +Physical time=360.0000 s, CPU time=5.7490 s, Time Ratio=62.6196 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.970698[degC] + North Wall: T=19.970699[degC] + Ceiling: T=19.970420[degC] + Floor: T=19.970936[degC] + West Wall: T=19.970882[degC] + West Wall (glass, unshaded): T=2.966370[degC] + East Wall: T=19.970887[degC] + East Wall (glass, unshaded): T=2.965957[degC] + East Wall (frame): T=8.856679[degC] + West Wall (frame): T=8.856697[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=360.000000[s] + Averaged room temperature 15.400598[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -2.321695[W] + North Wall: -2.313134[W] + Ceiling: -2.249948[W] + Floor: -2.404423[W] + West Wall: -1.216781[W] + West Wall (glass, unshaded): 2.562286[W] + East Wall: -1.193325[W] + East Wall (glass, unshaded): 2.577861[W] + East Wall (frame): 0.330768[W] + West Wall (frame): 0.331840[W] + Sensor Information: + Occupied zone air temperature: 288.550598 + Velocity: 0.024686 +ffd_solver(): Synchronized data at t=360.000000[s] + +Physical time=361.0000 s, CPU time=5.8520 s, Time Ratio=61.6883 +Physical time=362.0000 s, CPU time=5.8570 s, Time Ratio=61.8064 +Physical time=363.0000 s, CPU time=5.8630 s, Time Ratio=61.9137 +Physical time=364.0000 s, CPU time=5.8680 s, Time Ratio=62.0314 +Physical time=365.0000 s, CPU time=5.8730 s, Time Ratio=62.1488 +Physical time=366.0000 s, CPU time=5.8820 s, Time Ratio=62.2237 +Physical time=367.0000 s, CPU time=5.8880 s, Time Ratio=62.3302 +Physical time=368.0000 s, CPU time=5.8970 s, Time Ratio=62.4046 +Physical time=369.0000 s, CPU time=5.9060 s, Time Ratio=62.4788 +Physical time=370.0000 s, CPU time=5.9130 s, Time Ratio=62.5740 +Physical time=371.0000 s, CPU time=5.9210 s, Time Ratio=62.6583 +Physical time=372.0000 s, CPU time=5.9310 s, Time Ratio=62.7213 +Physical time=373.0000 s, CPU time=5.9380 s, Time Ratio=62.8158 +Physical time=374.0000 s, CPU time=5.9440 s, Time Ratio=62.9206 +Physical time=375.0000 s, CPU time=5.9490 s, Time Ratio=63.0358 +Physical time=376.0000 s, CPU time=5.9550 s, Time Ratio=63.1402 +Physical time=377.0000 s, CPU time=5.9610 s, Time Ratio=63.2444 +Physical time=378.0000 s, CPU time=5.9720 s, Time Ratio=63.2954 +Physical time=379.0000 s, CPU time=5.9810 s, Time Ratio=63.3673 +Physical time=380.0000 s, CPU time=5.9900 s, Time Ratio=63.4391 +Physical time=381.0000 s, CPU time=6.0010 s, Time Ratio=63.4894 +Physical time=382.0000 s, CPU time=6.0120 s, Time Ratio=63.5396 +Physical time=383.0000 s, CPU time=6.0190 s, Time Ratio=63.6318 +Physical time=384.0000 s, CPU time=6.0250 s, Time Ratio=63.7344 +Physical time=385.0000 s, CPU time=6.0310 s, Time Ratio=63.8368 +Physical time=386.0000 s, CPU time=6.0360 s, Time Ratio=63.9496 +Physical time=387.0000 s, CPU time=6.0410 s, Time Ratio=64.0622 +Physical time=388.0000 s, CPU time=6.0460 s, Time Ratio=64.1747 +Physical time=389.0000 s, CPU time=6.0540 s, Time Ratio=64.2550 +Physical time=390.0000 s, CPU time=6.0610 s, Time Ratio=64.3458 +Physical time=391.0000 s, CPU time=6.0660 s, Time Ratio=64.4576 +Physical time=392.0000 s, CPU time=6.0720 s, Time Ratio=64.5586 +Physical time=393.0000 s, CPU time=6.0830 s, Time Ratio=64.6063 +Physical time=394.0000 s, CPU time=6.0890 s, Time Ratio=64.7068 +Physical time=395.0000 s, CPU time=6.0940 s, Time Ratio=64.8179 +Physical time=396.0000 s, CPU time=6.0990 s, Time Ratio=64.9287 +Physical time=397.0000 s, CPU time=6.1040 s, Time Ratio=65.0393 +Physical time=398.0000 s, CPU time=6.1090 s, Time Ratio=65.1498 +Physical time=399.0000 s, CPU time=6.1140 s, Time Ratio=65.2601 +Physical time=400.0000 s, CPU time=6.1190 s, Time Ratio=65.3702 +Physical time=401.0000 s, CPU time=6.1250 s, Time Ratio=65.4694 +Physical time=402.0000 s, CPU time=6.1300 s, Time Ratio=65.5791 +Physical time=403.0000 s, CPU time=6.1350 s, Time Ratio=65.6887 +Physical time=404.0000 s, CPU time=6.1400 s, Time Ratio=65.7980 +Physical time=405.0000 s, CPU time=6.1500 s, Time Ratio=65.8537 +Physical time=406.0000 s, CPU time=6.1560 s, Time Ratio=65.9519 +Physical time=407.0000 s, CPU time=6.1620 s, Time Ratio=66.0500 +Physical time=408.0000 s, CPU time=6.1670 s, Time Ratio=66.1586 +Physical time=409.0000 s, CPU time=6.1720 s, Time Ratio=66.2670 +Physical time=410.0000 s, CPU time=6.1770 s, Time Ratio=66.3753 +Physical time=411.0000 s, CPU time=6.1820 s, Time Ratio=66.4833 +Physical time=412.0000 s, CPU time=6.1870 s, Time Ratio=66.5912 +Physical time=413.0000 s, CPU time=6.1920 s, Time Ratio=66.6990 +Physical time=414.0000 s, CPU time=6.2030 s, Time Ratio=66.7419 +Physical time=415.0000 s, CPU time=6.2140 s, Time Ratio=66.7847 +Physical time=416.0000 s, CPU time=6.2200 s, Time Ratio=66.8810 +Physical time=417.0000 s, CPU time=6.2260 s, Time Ratio=66.9772 +Physical time=418.0000 s, CPU time=6.2340 s, Time Ratio=67.0517 +Physical time=419.0000 s, CPU time=6.2450 s, Time Ratio=67.0937 +Physical time=420.0000 s, CPU time=6.2530 s, Time Ratio=67.1678 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.964678[degC] + North Wall: T=19.964680[degC] + Ceiling: T=19.964363[degC] + Floor: T=19.964957[degC] + West Wall: T=19.964927[degC] + West Wall (glass, unshaded): T=2.918555[degC] + East Wall: T=19.964928[degC] + East Wall (glass, unshaded): T=2.917882[degC] + East Wall (frame): T=8.846662[degC] + West Wall (frame): T=8.846656[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=420.000000[s] + Averaged room temperature 15.801968[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -2.116784[W] + North Wall: -2.105897[W] + Ceiling: -2.066601[W] + Floor: -2.182785[W] + West Wall: -1.106142[W] + West Wall (glass, unshaded): 2.666352[W] + East Wall: -1.062652[W] + East Wall (glass, unshaded): 2.660660[W] + East Wall (frame): 0.361255[W] + West Wall (frame): 0.350403[W] + Sensor Information: + Occupied zone air temperature: 288.951968 + Velocity: 0.033063 +ffd_solver(): Synchronized data at t=420.000000[s] + +Physical time=421.0000 s, CPU time=6.3760 s, Time Ratio=66.0289 +Physical time=422.0000 s, CPU time=6.3820 s, Time Ratio=66.1235 +Physical time=423.0000 s, CPU time=6.3890 s, Time Ratio=66.2075 +Physical time=424.0000 s, CPU time=6.3950 s, Time Ratio=66.3018 +Physical time=425.0000 s, CPU time=6.4000 s, Time Ratio=66.4063 +Physical time=426.0000 s, CPU time=6.4060 s, Time Ratio=66.5002 +Physical time=427.0000 s, CPU time=6.4130 s, Time Ratio=66.5835 +Physical time=428.0000 s, CPU time=6.4180 s, Time Ratio=66.6874 +Physical time=429.0000 s, CPU time=6.4230 s, Time Ratio=66.7912 +Physical time=430.0000 s, CPU time=6.4300 s, Time Ratio=66.8740 +Physical time=431.0000 s, CPU time=6.4350 s, Time Ratio=66.9775 +Physical time=432.0000 s, CPU time=6.4410 s, Time Ratio=67.0703 +Physical time=433.0000 s, CPU time=6.4470 s, Time Ratio=67.1630 +Physical time=434.0000 s, CPU time=6.4520 s, Time Ratio=67.2660 +Physical time=435.0000 s, CPU time=6.4570 s, Time Ratio=67.3687 +Physical time=436.0000 s, CPU time=6.4630 s, Time Ratio=67.4609 +Physical time=437.0000 s, CPU time=6.4680 s, Time Ratio=67.5634 +Physical time=438.0000 s, CPU time=6.4730 s, Time Ratio=67.6657 +Physical time=439.0000 s, CPU time=6.4780 s, Time Ratio=67.7678 +Physical time=440.0000 s, CPU time=6.4840 s, Time Ratio=67.8593 +Physical time=441.0000 s, CPU time=6.4950 s, Time Ratio=67.8984 +Physical time=442.0000 s, CPU time=6.5070 s, Time Ratio=67.9268 +Physical time=443.0000 s, CPU time=6.5130 s, Time Ratio=68.0178 +Physical time=444.0000 s, CPU time=6.5230 s, Time Ratio=68.0668 +Physical time=445.0000 s, CPU time=6.5310 s, Time Ratio=68.1366 +Physical time=446.0000 s, CPU time=6.5370 s, Time Ratio=68.2270 +Physical time=447.0000 s, CPU time=6.5450 s, Time Ratio=68.2964 +Physical time=448.0000 s, CPU time=6.5540 s, Time Ratio=68.3552 +Physical time=449.0000 s, CPU time=6.5610 s, Time Ratio=68.4347 +Physical time=450.0000 s, CPU time=6.5670 s, Time Ratio=68.5244 +Physical time=451.0000 s, CPU time=6.5740 s, Time Ratio=68.6036 +Physical time=452.0000 s, CPU time=6.5830 s, Time Ratio=68.6617 +Physical time=453.0000 s, CPU time=6.5890 s, Time Ratio=68.7509 +Physical time=454.0000 s, CPU time=6.5950 s, Time Ratio=68.8400 +Physical time=455.0000 s, CPU time=6.6000 s, Time Ratio=68.9394 +Physical time=456.0000 s, CPU time=6.6060 s, Time Ratio=69.0282 +Physical time=457.0000 s, CPU time=6.6120 s, Time Ratio=69.1168 +Physical time=458.0000 s, CPU time=6.6200 s, Time Ratio=69.1843 +Physical time=459.0000 s, CPU time=6.6270 s, Time Ratio=69.2621 +Physical time=460.0000 s, CPU time=6.6340 s, Time Ratio=69.3398 +Physical time=461.0000 s, CPU time=6.6410 s, Time Ratio=69.4173 +Physical time=462.0000 s, CPU time=6.6510 s, Time Ratio=69.4632 +Physical time=463.0000 s, CPU time=6.6590 s, Time Ratio=69.5300 +Physical time=464.0000 s, CPU time=6.6640 s, Time Ratio=69.6279 +Physical time=465.0000 s, CPU time=6.6690 s, Time Ratio=69.7256 +Physical time=466.0000 s, CPU time=6.6760 s, Time Ratio=69.8023 +Physical time=467.0000 s, CPU time=6.6820 s, Time Ratio=69.8893 +Physical time=468.0000 s, CPU time=6.6880 s, Time Ratio=69.9761 +Physical time=469.0000 s, CPU time=6.6980 s, Time Ratio=70.0209 +Physical time=470.0000 s, CPU time=6.7040 s, Time Ratio=70.1074 +Physical time=471.0000 s, CPU time=6.7110 s, Time Ratio=70.1833 +Physical time=472.0000 s, CPU time=6.7180 s, Time Ratio=70.2590 +Physical time=473.0000 s, CPU time=6.7290 s, Time Ratio=70.2928 +Physical time=474.0000 s, CPU time=6.7380 s, Time Ratio=70.3473 +Physical time=475.0000 s, CPU time=6.7460 s, Time Ratio=70.4121 +Physical time=476.0000 s, CPU time=6.7550 s, Time Ratio=70.4663 +Physical time=477.0000 s, CPU time=6.7640 s, Time Ratio=70.5204 +Physical time=478.0000 s, CPU time=6.7740 s, Time Ratio=70.5639 +Physical time=479.0000 s, CPU time=6.7850 s, Time Ratio=70.5969 +Physical time=480.0000 s, CPU time=6.7990 s, Time Ratio=70.5986 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.958590[degC] + North Wall: T=19.958587[degC] + Ceiling: T=19.958244[degC] + Floor: T=19.958911[degC] + West Wall: T=19.958900[degC] + West Wall (glass, unshaded): T=2.871902[degC] + East Wall: T=19.958859[degC] + East Wall (glass, unshaded): T=2.871167[degC] + East Wall (frame): T=8.835758[degC] + West Wall (frame): T=8.835901[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=480.000000[s] + Averaged room temperature 16.136486[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.953506[W] + North Wall: -1.931635[W] + Ceiling: -1.909128[W] + Floor: -1.979247[W] + West Wall: -1.036793[W] + West Wall (glass, unshaded): 2.743258[W] + East Wall: -0.961541[W] + East Wall (glass, unshaded): 2.760873[W] + East Wall (frame): 0.382141[W] + West Wall (frame): 0.369527[W] + Sensor Information: + Occupied zone air temperature: 289.286486 + Velocity: 0.042118 +ffd_solver(): Synchronized data at t=480.000000[s] + +Physical time=481.0000 s, CPU time=6.9260 s, Time Ratio=69.4485 +Physical time=482.0000 s, CPU time=6.9340 s, Time Ratio=69.5125 +Physical time=483.0000 s, CPU time=6.9420 s, Time Ratio=69.5765 +Physical time=484.0000 s, CPU time=6.9490 s, Time Ratio=69.6503 +Physical time=485.0000 s, CPU time=6.9560 s, Time Ratio=69.7240 +Physical time=486.0000 s, CPU time=6.9620 s, Time Ratio=69.8075 +Physical time=487.0000 s, CPU time=6.9680 s, Time Ratio=69.8909 +Physical time=488.0000 s, CPU time=6.9740 s, Time Ratio=69.9742 +Physical time=489.0000 s, CPU time=6.9840 s, Time Ratio=70.0172 +Physical time=490.0000 s, CPU time=6.9960 s, Time Ratio=70.0400 +Physical time=491.0000 s, CPU time=7.0090 s, Time Ratio=70.0528 +Physical time=492.0000 s, CPU time=7.0200 s, Time Ratio=70.0855 +Physical time=493.0000 s, CPU time=7.0260 s, Time Ratio=70.1679 +Physical time=494.0000 s, CPU time=7.0340 s, Time Ratio=70.2303 +Physical time=495.0000 s, CPU time=7.0410 s, Time Ratio=70.3025 +Physical time=496.0000 s, CPU time=7.0470 s, Time Ratio=70.3846 +Physical time=497.0000 s, CPU time=7.0550 s, Time Ratio=70.4465 +Physical time=498.0000 s, CPU time=7.0620 s, Time Ratio=70.5183 +Physical time=499.0000 s, CPU time=7.0680 s, Time Ratio=70.5999 +Physical time=500.0000 s, CPU time=7.0740 s, Time Ratio=70.6814 +Physical time=501.0000 s, CPU time=7.0810 s, Time Ratio=70.7527 +Physical time=502.0000 s, CPU time=7.0880 s, Time Ratio=70.8239 +Physical time=503.0000 s, CPU time=7.0960 s, Time Ratio=70.8850 +Physical time=504.0000 s, CPU time=7.1020 s, Time Ratio=70.9659 +Physical time=505.0000 s, CPU time=7.1090 s, Time Ratio=71.0367 +Physical time=506.0000 s, CPU time=7.1200 s, Time Ratio=71.0674 +Physical time=507.0000 s, CPU time=7.1300 s, Time Ratio=71.1080 +Physical time=508.0000 s, CPU time=7.1390 s, Time Ratio=71.1584 +Physical time=509.0000 s, CPU time=7.1510 s, Time Ratio=71.1789 +Physical time=510.0000 s, CPU time=7.1630 s, Time Ratio=71.1992 +Physical time=511.0000 s, CPU time=7.1760 s, Time Ratio=71.2096 +Physical time=512.0000 s, CPU time=7.1930 s, Time Ratio=71.1803 +Physical time=513.0000 s, CPU time=7.2050 s, Time Ratio=71.2006 +Physical time=514.0000 s, CPU time=7.2190 s, Time Ratio=71.2010 +Physical time=515.0000 s, CPU time=7.2290 s, Time Ratio=71.2408 +Physical time=516.0000 s, CPU time=7.2380 s, Time Ratio=71.2904 +Physical time=517.0000 s, CPU time=7.2450 s, Time Ratio=71.3596 +Physical time=518.0000 s, CPU time=7.2520 s, Time Ratio=71.4286 +Physical time=519.0000 s, CPU time=7.2630 s, Time Ratio=71.4581 +Physical time=520.0000 s, CPU time=7.2680 s, Time Ratio=71.5465 +Physical time=521.0000 s, CPU time=7.2770 s, Time Ratio=71.5954 +Physical time=522.0000 s, CPU time=7.2850 s, Time Ratio=71.6541 +Physical time=523.0000 s, CPU time=7.2930 s, Time Ratio=71.7126 +Physical time=524.0000 s, CPU time=7.3090 s, Time Ratio=71.6924 +Physical time=525.0000 s, CPU time=7.3230 s, Time Ratio=71.6919 +Physical time=526.0000 s, CPU time=7.3340 s, Time Ratio=71.7208 +Physical time=527.0000 s, CPU time=7.3480 s, Time Ratio=71.7202 +Physical time=528.0000 s, CPU time=7.3620 s, Time Ratio=71.7196 +Physical time=529.0000 s, CPU time=7.3760 s, Time Ratio=71.7191 +Physical time=530.0000 s, CPU time=7.3870 s, Time Ratio=71.7477 +Physical time=531.0000 s, CPU time=7.3970 s, Time Ratio=71.7859 +Physical time=532.0000 s, CPU time=7.4080 s, Time Ratio=71.8143 +Physical time=533.0000 s, CPU time=7.4160 s, Time Ratio=71.8716 +Physical time=534.0000 s, CPU time=7.4260 s, Time Ratio=71.9095 +Physical time=535.0000 s, CPU time=7.4360 s, Time Ratio=71.9473 +Physical time=536.0000 s, CPU time=7.4430 s, Time Ratio=72.0140 +Physical time=537.0000 s, CPU time=7.4500 s, Time Ratio=72.0805 +Physical time=538.0000 s, CPU time=7.4550 s, Time Ratio=72.1663 +Physical time=539.0000 s, CPU time=7.4610 s, Time Ratio=72.2423 +Physical time=540.0000 s, CPU time=7.4680 s, Time Ratio=72.3085 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.952466[degC] + North Wall: T=19.952452[degC] + Ceiling: T=19.952096[degC] + Floor: T=19.952809[degC] + West Wall: T=19.952837[degC] + West Wall (glass, unshaded): T=2.826730[degC] + East Wall: T=19.952722[degC] + East Wall (glass, unshaded): T=2.825904[degC] + East Wall (frame): T=8.824107[degC] + West Wall (frame): T=8.824603[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=540.000000[s] + Averaged room temperature 16.395376[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.788550[W] + North Wall: -1.829228[W] + Ceiling: -1.783703[W] + Floor: -1.861119[W] + West Wall: -0.962106[W] + West Wall (glass, unshaded): 2.811140[W] + East Wall: -0.903139[W] + East Wall (glass, unshaded): 2.822049[W] + East Wall (frame): 0.398381[W] + West Wall (frame): 0.384609[W] + Sensor Information: + Occupied zone air temperature: 289.545376 + Velocity: 0.020547 +ffd_solver(): Synchronized data at t=540.000000[s] + +Physical time=541.0000 s, CPU time=7.5770 s, Time Ratio=71.4003 +Physical time=542.0000 s, CPU time=7.5860 s, Time Ratio=71.4474 +Physical time=543.0000 s, CPU time=7.5940 s, Time Ratio=71.5038 +Physical time=544.0000 s, CPU time=7.6000 s, Time Ratio=71.5789 +Physical time=545.0000 s, CPU time=7.6050 s, Time Ratio=71.6634 +Physical time=546.0000 s, CPU time=7.6100 s, Time Ratio=71.7477 +Physical time=547.0000 s, CPU time=7.6160 s, Time Ratio=71.8225 +Physical time=548.0000 s, CPU time=7.6210 s, Time Ratio=71.9066 +Physical time=549.0000 s, CPU time=7.6270 s, Time Ratio=71.9811 +Physical time=550.0000 s, CPU time=7.6320 s, Time Ratio=72.0650 +Physical time=551.0000 s, CPU time=7.6380 s, Time Ratio=72.1393 +Physical time=552.0000 s, CPU time=7.6430 s, Time Ratio=72.2229 +Physical time=553.0000 s, CPU time=7.6480 s, Time Ratio=72.3065 +Physical time=554.0000 s, CPU time=7.6550 s, Time Ratio=72.3710 +Physical time=555.0000 s, CPU time=7.6630 s, Time Ratio=72.4259 +Physical time=556.0000 s, CPU time=7.6690 s, Time Ratio=72.4997 +Physical time=557.0000 s, CPU time=7.6790 s, Time Ratio=72.5355 +Physical time=558.0000 s, CPU time=7.6850 s, Time Ratio=72.6090 +Physical time=559.0000 s, CPU time=7.6910 s, Time Ratio=72.6824 +Physical time=560.0000 s, CPU time=7.6970 s, Time Ratio=72.7556 +Physical time=561.0000 s, CPU time=7.7040 s, Time Ratio=72.8193 +Physical time=562.0000 s, CPU time=7.7100 s, Time Ratio=72.8923 +Physical time=563.0000 s, CPU time=7.7180 s, Time Ratio=72.9464 +Physical time=564.0000 s, CPU time=7.7250 s, Time Ratio=73.0097 +Physical time=565.0000 s, CPU time=7.7330 s, Time Ratio=73.0635 +Physical time=566.0000 s, CPU time=7.7410 s, Time Ratio=73.1172 +Physical time=567.0000 s, CPU time=7.7460 s, Time Ratio=73.1991 +Physical time=568.0000 s, CPU time=7.7520 s, Time Ratio=73.2714 +Physical time=569.0000 s, CPU time=7.7570 s, Time Ratio=73.3531 +Physical time=570.0000 s, CPU time=7.7620 s, Time Ratio=73.4347 +Physical time=571.0000 s, CPU time=7.7680 s, Time Ratio=73.5067 +Physical time=572.0000 s, CPU time=7.7730 s, Time Ratio=73.5881 +Physical time=573.0000 s, CPU time=7.7790 s, Time Ratio=73.6599 +Physical time=574.0000 s, CPU time=7.7840 s, Time Ratio=73.7410 +Physical time=575.0000 s, CPU time=7.7890 s, Time Ratio=73.8221 +Physical time=576.0000 s, CPU time=7.7950 s, Time Ratio=73.8935 +Physical time=577.0000 s, CPU time=7.8000 s, Time Ratio=73.9744 +Physical time=578.0000 s, CPU time=7.8060 s, Time Ratio=74.0456 +Physical time=579.0000 s, CPU time=7.8110 s, Time Ratio=74.1262 +Physical time=580.0000 s, CPU time=7.8170 s, Time Ratio=74.1973 +Physical time=581.0000 s, CPU time=7.8220 s, Time Ratio=74.2777 +Physical time=582.0000 s, CPU time=7.8280 s, Time Ratio=74.3485 +Physical time=583.0000 s, CPU time=7.8330 s, Time Ratio=74.4287 +Physical time=584.0000 s, CPU time=7.8380 s, Time Ratio=74.5088 +Physical time=585.0000 s, CPU time=7.8440 s, Time Ratio=74.5793 +Physical time=586.0000 s, CPU time=7.8490 s, Time Ratio=74.6592 +Physical time=587.0000 s, CPU time=7.8590 s, Time Ratio=74.6914 +Physical time=588.0000 s, CPU time=7.8700 s, Time Ratio=74.7141 +Physical time=589.0000 s, CPU time=7.8790 s, Time Ratio=74.7557 +Physical time=590.0000 s, CPU time=7.8860 s, Time Ratio=74.8161 +Physical time=591.0000 s, CPU time=7.8950 s, Time Ratio=74.8575 +Physical time=592.0000 s, CPU time=7.9040 s, Time Ratio=74.8988 +Physical time=593.0000 s, CPU time=7.9100 s, Time Ratio=74.9684 +Physical time=594.0000 s, CPU time=7.9170 s, Time Ratio=75.0284 +Physical time=595.0000 s, CPU time=7.9260 s, Time Ratio=75.0694 +Physical time=596.0000 s, CPU time=7.9370 s, Time Ratio=75.0913 +Physical time=597.0000 s, CPU time=7.9450 s, Time Ratio=75.1416 +Physical time=598.0000 s, CPU time=7.9550 s, Time Ratio=75.1728 +Physical time=599.0000 s, CPU time=7.9660 s, Time Ratio=75.1946 +Physical time=600.0000 s, CPU time=7.9790 s, Time Ratio=75.1974 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.946316[degC] + North Wall: T=19.946308[degC] + Ceiling: T=19.945938[degC] + Floor: T=19.946684[degC] + West Wall: T=19.946761[degC] + West Wall (glass, unshaded): T=2.783402[degC] + East Wall: T=19.946563[degC] + East Wall (glass, unshaded): T=2.782275[degC] + East Wall (frame): T=8.811941[degC] + West Wall (frame): T=8.812828[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=600.000000[s] + Averaged room temperature 16.544479[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.739078[W] + North Wall: -1.758242[W] + Ceiling: -1.662930[W] + Floor: -1.828236[W] + West Wall: -0.875999[W] + West Wall (glass, unshaded): 2.857981[W] + East Wall: -0.934493[W] + East Wall (glass, unshaded): 2.835427[W] + East Wall (frame): 0.390848[W] + West Wall (frame): 0.391839[W] + Sensor Information: + Occupied zone air temperature: 289.694479 + Velocity: 0.044572 +ffd_solver(): Synchronized data at t=600.000000[s] + +Physical time=601.0000 s, CPU time=8.1390 s, Time Ratio=73.8420 +Physical time=602.0000 s, CPU time=8.1510 s, Time Ratio=73.8560 +Physical time=603.0000 s, CPU time=8.1640 s, Time Ratio=73.8609 +Physical time=604.0000 s, CPU time=8.1760 s, Time Ratio=73.8748 +Physical time=605.0000 s, CPU time=8.1870 s, Time Ratio=73.8976 +Physical time=606.0000 s, CPU time=8.2000 s, Time Ratio=73.9024 +Physical time=607.0000 s, CPU time=8.2140 s, Time Ratio=73.8982 +Physical time=608.0000 s, CPU time=8.2270 s, Time Ratio=73.9030 +Physical time=609.0000 s, CPU time=8.2410 s, Time Ratio=73.8988 +Physical time=610.0000 s, CPU time=8.2580 s, Time Ratio=73.8678 +Physical time=611.0000 s, CPU time=8.2690 s, Time Ratio=73.8904 +Physical time=612.0000 s, CPU time=8.2790 s, Time Ratio=73.9220 +Physical time=613.0000 s, CPU time=8.2870 s, Time Ratio=73.9713 +Physical time=614.0000 s, CPU time=8.2950 s, Time Ratio=74.0205 +Physical time=615.0000 s, CPU time=8.8740 s, Time Ratio=69.3036 +Physical time=616.0000 s, CPU time=8.8870 s, Time Ratio=69.3147 +Physical time=617.0000 s, CPU time=8.8990 s, Time Ratio=69.3336 +Physical time=618.0000 s, CPU time=8.9120 s, Time Ratio=69.3447 +Physical time=619.0000 s, CPU time=8.9230 s, Time Ratio=69.3713 +Physical time=620.0000 s, CPU time=8.9350 s, Time Ratio=69.3900 +Physical time=621.0000 s, CPU time=8.9470 s, Time Ratio=69.4087 +Physical time=622.0000 s, CPU time=8.9580 s, Time Ratio=69.4351 +Physical time=623.0000 s, CPU time=8.9670 s, Time Ratio=69.4770 +Physical time=624.0000 s, CPU time=8.9780 s, Time Ratio=69.5032 +Physical time=625.0000 s, CPU time=8.9840 s, Time Ratio=69.5681 +Physical time=626.0000 s, CPU time=8.9900 s, Time Ratio=69.6329 +Physical time=627.0000 s, CPU time=8.9980 s, Time Ratio=69.6822 +Physical time=628.0000 s, CPU time=9.0060 s, Time Ratio=69.7313 +Physical time=629.0000 s, CPU time=9.0130 s, Time Ratio=69.7881 +Physical time=630.0000 s, CPU time=9.0190 s, Time Ratio=69.8525 +Physical time=631.0000 s, CPU time=9.0270 s, Time Ratio=69.9014 +Physical time=632.0000 s, CPU time=9.0320 s, Time Ratio=69.9734 +Physical time=633.0000 s, CPU time=9.0410 s, Time Ratio=70.0144 +Physical time=634.0000 s, CPU time=9.0480 s, Time Ratio=70.0707 +Physical time=635.0000 s, CPU time=9.0560 s, Time Ratio=70.1193 +Physical time=636.0000 s, CPU time=9.0610 s, Time Ratio=70.1909 +Physical time=637.0000 s, CPU time=9.0690 s, Time Ratio=70.2393 +Physical time=638.0000 s, CPU time=9.0770 s, Time Ratio=70.2875 +Physical time=639.0000 s, CPU time=9.0860 s, Time Ratio=70.3280 +Physical time=640.0000 s, CPU time=9.0940 s, Time Ratio=70.3761 +Physical time=641.0000 s, CPU time=9.1010 s, Time Ratio=70.4318 +Physical time=642.0000 s, CPU time=9.1100 s, Time Ratio=70.4720 +Physical time=643.0000 s, CPU time=9.1200 s, Time Ratio=70.5044 +Physical time=644.0000 s, CPU time=9.1270 s, Time Ratio=70.5599 +Physical time=645.0000 s, CPU time=9.1330 s, Time Ratio=70.6230 +Physical time=646.0000 s, CPU time=9.1410 s, Time Ratio=70.6706 +Physical time=647.0000 s, CPU time=9.1480 s, Time Ratio=70.7258 +Physical time=648.0000 s, CPU time=9.1590 s, Time Ratio=70.7501 +Physical time=649.0000 s, CPU time=9.1690 s, Time Ratio=70.7820 +Physical time=650.0000 s, CPU time=9.1760 s, Time Ratio=70.8370 +Physical time=651.0000 s, CPU time=9.1860 s, Time Ratio=70.8687 +Physical time=652.0000 s, CPU time=9.1920 s, Time Ratio=70.9312 +Physical time=653.0000 s, CPU time=9.1990 s, Time Ratio=70.9860 +Physical time=654.0000 s, CPU time=9.2050 s, Time Ratio=71.0483 +Physical time=655.0000 s, CPU time=9.2160 s, Time Ratio=71.0720 +Physical time=656.0000 s, CPU time=9.2260 s, Time Ratio=71.1034 +Physical time=657.0000 s, CPU time=9.2320 s, Time Ratio=71.1655 +Physical time=658.0000 s, CPU time=9.2400 s, Time Ratio=71.2121 +Physical time=659.0000 s, CPU time=9.2490 s, Time Ratio=71.2509 +Physical time=660.0000 s, CPU time=9.2570 s, Time Ratio=71.2974 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.940176[degC] + North Wall: T=19.940188[degC] + Ceiling: T=19.939780[degC] + Floor: T=19.940588[degC] + West Wall: T=19.940659[degC] + West Wall (glass, unshaded): T=2.742153[degC] + East Wall: T=19.940466[degC] + East Wall (glass, unshaded): T=2.741304[degC] + East Wall (frame): T=8.799706[degC] + West Wall (frame): T=8.800768[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=660.000000[s] + Averaged room temperature 16.673845[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.671397[W] + North Wall: -1.652936[W] + Ceiling: -1.623610[W] + Floor: -1.727127[W] + West Wall: -0.849367[W] + West Wall (glass, unshaded): 2.883064[W] + East Wall: -0.886678[W] + East Wall (glass, unshaded): 2.896429[W] + East Wall (frame): 0.398215[W] + West Wall (frame): 0.406801[W] + Sensor Information: + Occupied zone air temperature: 289.823845 + Velocity: 0.017979 +ffd_solver(): Synchronized data at t=660.000000[s] + +Physical time=661.0000 s, CPU time=9.4060 s, Time Ratio=70.2743 +Physical time=662.0000 s, CPU time=9.4180 s, Time Ratio=70.2909 +Physical time=663.0000 s, CPU time=9.4290 s, Time Ratio=70.3150 +Physical time=664.0000 s, CPU time=9.4450 s, Time Ratio=70.3017 +Physical time=665.0000 s, CPU time=9.4610 s, Time Ratio=70.2886 +Physical time=666.0000 s, CPU time=9.4780 s, Time Ratio=70.2680 +Physical time=667.0000 s, CPU time=9.4930 s, Time Ratio=70.2623 +Physical time=668.0000 s, CPU time=9.5070 s, Time Ratio=70.2640 +Physical time=669.0000 s, CPU time=9.5200 s, Time Ratio=70.2731 +Physical time=670.0000 s, CPU time=9.5310 s, Time Ratio=70.2969 +Physical time=671.0000 s, CPU time=9.5450 s, Time Ratio=70.2986 +Physical time=672.0000 s, CPU time=9.5520 s, Time Ratio=70.3518 +Physical time=673.0000 s, CPU time=9.5650 s, Time Ratio=70.3607 +Physical time=674.0000 s, CPU time=9.5720 s, Time Ratio=70.4137 +Physical time=675.0000 s, CPU time=9.5840 s, Time Ratio=70.4299 +Physical time=676.0000 s, CPU time=9.5980 s, Time Ratio=70.4313 +Physical time=677.0000 s, CPU time=9.6080 s, Time Ratio=70.4621 +Physical time=678.0000 s, CPU time=9.6210 s, Time Ratio=70.4708 +Physical time=679.0000 s, CPU time=9.6320 s, Time Ratio=70.4942 +Physical time=680.0000 s, CPU time=9.6410 s, Time Ratio=70.5321 +Physical time=681.0000 s, CPU time=9.6550 s, Time Ratio=70.5334 +Physical time=682.0000 s, CPU time=9.6620 s, Time Ratio=70.5858 +Physical time=683.0000 s, CPU time=9.6670 s, Time Ratio=70.6527 +Physical time=684.0000 s, CPU time=9.6780 s, Time Ratio=70.6758 +Physical time=685.0000 s, CPU time=9.6840 s, Time Ratio=70.7352 +Physical time=686.0000 s, CPU time=9.6900 s, Time Ratio=70.7946 +Physical time=687.0000 s, CPU time=9.6960 s, Time Ratio=70.8540 +Physical time=688.0000 s, CPU time=9.7030 s, Time Ratio=70.9059 +Physical time=689.0000 s, CPU time=9.7110 s, Time Ratio=70.9505 +Physical time=690.0000 s, CPU time=9.7180 s, Time Ratio=71.0023 +Physical time=691.0000 s, CPU time=9.7240 s, Time Ratio=71.0613 +Physical time=692.0000 s, CPU time=9.7310 s, Time Ratio=71.1129 +Physical time=693.0000 s, CPU time=9.7360 s, Time Ratio=71.1791 +Physical time=694.0000 s, CPU time=9.7420 s, Time Ratio=71.2379 +Physical time=695.0000 s, CPU time=9.7470 s, Time Ratio=71.3040 +Physical time=696.0000 s, CPU time=9.7520 s, Time Ratio=71.3700 +Physical time=697.0000 s, CPU time=9.7570 s, Time Ratio=71.4359 +Physical time=698.0000 s, CPU time=9.7620 s, Time Ratio=71.5017 +Physical time=699.0000 s, CPU time=9.7670 s, Time Ratio=71.5675 +Physical time=700.0000 s, CPU time=9.7720 s, Time Ratio=71.6332 +Physical time=701.0000 s, CPU time=9.7780 s, Time Ratio=71.6916 +Physical time=702.0000 s, CPU time=9.7830 s, Time Ratio=71.7571 +Physical time=703.0000 s, CPU time=9.7880 s, Time Ratio=71.8226 +Physical time=704.0000 s, CPU time=9.7920 s, Time Ratio=71.8954 +Physical time=705.0000 s, CPU time=9.7990 s, Time Ratio=71.9461 +Physical time=706.0000 s, CPU time=9.8040 s, Time Ratio=72.0114 +Physical time=707.0000 s, CPU time=9.8110 s, Time Ratio=72.0620 +Physical time=708.0000 s, CPU time=9.8170 s, Time Ratio=72.1198 +Physical time=709.0000 s, CPU time=9.8280 s, Time Ratio=72.1408 +Physical time=710.0000 s, CPU time=9.8350 s, Time Ratio=72.1912 +Physical time=711.0000 s, CPU time=9.8470 s, Time Ratio=72.2047 +Physical time=712.0000 s, CPU time=9.8610 s, Time Ratio=72.2036 +Physical time=713.0000 s, CPU time=9.8730 s, Time Ratio=72.2172 +Physical time=714.0000 s, CPU time=9.8880 s, Time Ratio=72.2087 +Physical time=715.0000 s, CPU time=9.9030 s, Time Ratio=72.2003 +Physical time=716.0000 s, CPU time=9.9170 s, Time Ratio=72.1993 +Physical time=717.0000 s, CPU time=9.9310 s, Time Ratio=72.1982 +Physical time=718.0000 s, CPU time=9.9440 s, Time Ratio=72.2043 +Physical time=719.0000 s, CPU time=9.9560 s, Time Ratio=72.2178 +Physical time=720.0000 s, CPU time=9.9660 s, Time Ratio=72.2456 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.934076[degC] + North Wall: T=19.934088[degC] + Ceiling: T=19.933648[degC] + Floor: T=19.934526[degC] + West Wall: T=19.934563[degC] + West Wall (glass, unshaded): T=2.703360[degC] + East Wall: T=19.934434[degC] + East Wall (glass, unshaded): T=2.702715[degC] + East Wall (frame): T=8.787540[degC] + West Wall (frame): T=8.788436[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=720.000000[s] + Averaged room temperature 16.788361[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.597763[W] + North Wall: -1.620380[W] + Ceiling: -1.528907[W] + Floor: -1.688785[W] + West Wall: -0.859735[W] + West Wall (glass, unshaded): 2.905009[W] + East Wall: -0.841165[W] + East Wall (glass, unshaded): 2.922349[W] + East Wall (frame): 0.407219[W] + West Wall (frame): 0.403848[W] + Sensor Information: + Occupied zone air temperature: 289.938361 + Velocity: 0.018897 +ffd_solver(): Synchronized data at t=720.000000[s] + +Physical time=721.0000 s, CPU time=10.0810 s, Time Ratio=71.5207 +Physical time=722.0000 s, CPU time=10.0880 s, Time Ratio=71.5702 +Physical time=723.0000 s, CPU time=10.0940 s, Time Ratio=71.6267 +Physical time=724.0000 s, CPU time=10.1000 s, Time Ratio=71.6832 +Physical time=725.0000 s, CPU time=10.1150 s, Time Ratio=71.6757 +Physical time=726.0000 s, CPU time=10.1290 s, Time Ratio=71.6754 +Physical time=727.0000 s, CPU time=10.1410 s, Time Ratio=71.6892 +Physical time=728.0000 s, CPU time=10.1510 s, Time Ratio=71.7171 +Physical time=729.0000 s, CPU time=10.1590 s, Time Ratio=71.7590 +Physical time=730.0000 s, CPU time=10.1660 s, Time Ratio=71.8080 +Physical time=731.0000 s, CPU time=10.1720 s, Time Ratio=71.8639 +Physical time=732.0000 s, CPU time=10.1780 s, Time Ratio=71.9198 +Physical time=733.0000 s, CPU time=10.1900 s, Time Ratio=71.9333 +Physical time=734.0000 s, CPU time=10.2020 s, Time Ratio=71.9467 +Physical time=735.0000 s, CPU time=10.2080 s, Time Ratio=72.0024 +Physical time=736.0000 s, CPU time=10.2140 s, Time Ratio=72.0580 +Physical time=737.0000 s, CPU time=10.2190 s, Time Ratio=72.1206 +Physical time=738.0000 s, CPU time=10.2310 s, Time Ratio=72.1337 +Physical time=739.0000 s, CPU time=10.2420 s, Time Ratio=72.1539 +Physical time=740.0000 s, CPU time=10.2520 s, Time Ratio=72.1810 +Physical time=741.0000 s, CPU time=10.2600 s, Time Ratio=72.2222 +Physical time=742.0000 s, CPU time=10.2710 s, Time Ratio=72.2422 +Physical time=743.0000 s, CPU time=10.2760 s, Time Ratio=72.3044 +Physical time=744.0000 s, CPU time=10.2830 s, Time Ratio=72.3524 +Physical time=745.0000 s, CPU time=10.2890 s, Time Ratio=72.4074 +Physical time=746.0000 s, CPU time=10.2950 s, Time Ratio=72.4624 +Physical time=747.0000 s, CPU time=10.3010 s, Time Ratio=72.5172 +Physical time=748.0000 s, CPU time=10.3120 s, Time Ratio=72.5369 +Physical time=749.0000 s, CPU time=10.3220 s, Time Ratio=72.5635 +Physical time=750.0000 s, CPU time=10.3310 s, Time Ratio=72.5970 +Physical time=751.0000 s, CPU time=10.3390 s, Time Ratio=72.6376 +Physical time=752.0000 s, CPU time=10.3470 s, Time Ratio=72.6781 +Physical time=753.0000 s, CPU time=10.3570 s, Time Ratio=72.7045 +Physical time=754.0000 s, CPU time=10.3670 s, Time Ratio=72.7308 +Physical time=755.0000 s, CPU time=10.3760 s, Time Ratio=72.7641 +Physical time=756.0000 s, CPU time=10.3840 s, Time Ratio=72.8043 +Physical time=757.0000 s, CPU time=10.3920 s, Time Ratio=72.8445 +Physical time=758.0000 s, CPU time=10.4010 s, Time Ratio=72.8776 +Physical time=759.0000 s, CPU time=10.4070 s, Time Ratio=72.9317 +Physical time=760.0000 s, CPU time=10.4130 s, Time Ratio=72.9857 +Physical time=761.0000 s, CPU time=10.4210 s, Time Ratio=73.0256 +Physical time=762.0000 s, CPU time=10.4300 s, Time Ratio=73.0585 +Physical time=763.0000 s, CPU time=10.4360 s, Time Ratio=73.1123 +Physical time=764.0000 s, CPU time=10.4410 s, Time Ratio=73.1731 +Physical time=765.0000 s, CPU time=10.4500 s, Time Ratio=73.2057 +Physical time=766.0000 s, CPU time=10.4600 s, Time Ratio=73.2314 +Physical time=767.0000 s, CPU time=10.4690 s, Time Ratio=73.2639 +Physical time=768.0000 s, CPU time=10.4740 s, Time Ratio=73.3244 +Physical time=769.0000 s, CPU time=10.4830 s, Time Ratio=73.3569 +Physical time=770.0000 s, CPU time=10.4890 s, Time Ratio=73.4102 +Physical time=771.0000 s, CPU time=10.4960 s, Time Ratio=73.4566 +Physical time=772.0000 s, CPU time=10.5030 s, Time Ratio=73.5028 +Physical time=773.0000 s, CPU time=10.5110 s, Time Ratio=73.5420 +Physical time=774.0000 s, CPU time=10.5180 s, Time Ratio=73.5881 +Physical time=775.0000 s, CPU time=10.5240 s, Time Ratio=73.6412 +Physical time=776.0000 s, CPU time=10.5320 s, Time Ratio=73.6802 +Physical time=777.0000 s, CPU time=10.5390 s, Time Ratio=73.7262 +Physical time=778.0000 s, CPU time=10.5470 s, Time Ratio=73.7651 +Physical time=779.0000 s, CPU time=10.5530 s, Time Ratio=73.8179 +Physical time=780.0000 s, CPU time=10.5600 s, Time Ratio=73.8636 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.928008[degC] + North Wall: T=19.928021[degC] + Ceiling: T=19.927551[degC] + Floor: T=19.928496[degC] + West Wall: T=19.928532[degC] + West Wall (glass, unshaded): T=2.667155[degC] + East Wall: T=19.928418[degC] + East Wall (glass, unshaded): T=2.666158[degC] + East Wall (frame): T=8.775198[degC] + West Wall (frame): T=8.775998[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=780.000000[s] + Averaged room temperature 16.911509[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.533925[W] + North Wall: -1.532013[W] + Ceiling: -1.513161[W] + Floor: -1.615556[W] + West Wall: -0.806117[W] + West Wall (glass, unshaded): 2.938378[W] + East Wall: -0.788851[W] + East Wall (glass, unshaded): 2.939142[W] + East Wall (frame): 0.423374[W] + West Wall (frame): 0.415621[W] + Sensor Information: + Occupied zone air temperature: 290.061509 + Velocity: 0.009928 +ffd_solver(): Synchronized data at t=780.000000[s] + +Physical time=781.0000 s, CPU time=10.6680 s, Time Ratio=73.2096 +Physical time=782.0000 s, CPU time=10.6790 s, Time Ratio=73.2278 +Physical time=783.0000 s, CPU time=10.6870 s, Time Ratio=73.2666 +Physical time=784.0000 s, CPU time=10.6960 s, Time Ratio=73.2984 +Physical time=785.0000 s, CPU time=10.7050 s, Time Ratio=73.3302 +Physical time=786.0000 s, CPU time=10.7110 s, Time Ratio=73.3825 +Physical time=787.0000 s, CPU time=10.7180 s, Time Ratio=73.4279 +Physical time=788.0000 s, CPU time=10.7240 s, Time Ratio=73.4800 +Physical time=789.0000 s, CPU time=10.7300 s, Time Ratio=73.5322 +Physical time=790.0000 s, CPU time=10.7380 s, Time Ratio=73.5705 +Physical time=791.0000 s, CPU time=10.7440 s, Time Ratio=73.6225 +Physical time=792.0000 s, CPU time=10.7540 s, Time Ratio=73.6470 +Physical time=793.0000 s, CPU time=10.7600 s, Time Ratio=73.6989 +Physical time=794.0000 s, CPU time=10.7660 s, Time Ratio=73.7507 +Physical time=795.0000 s, CPU time=10.7730 s, Time Ratio=73.7956 +Physical time=796.0000 s, CPU time=10.7800 s, Time Ratio=73.8404 +Physical time=797.0000 s, CPU time=10.7910 s, Time Ratio=73.8578 +Physical time=798.0000 s, CPU time=10.8000 s, Time Ratio=73.8889 +Physical time=799.0000 s, CPU time=10.8060 s, Time Ratio=73.9404 +Physical time=800.0000 s, CPU time=10.8140 s, Time Ratio=73.9782 +Physical time=801.0000 s, CPU time=10.8220 s, Time Ratio=74.0159 +Physical time=802.0000 s, CPU time=10.8300 s, Time Ratio=74.0536 +Physical time=803.0000 s, CPU time=10.8350 s, Time Ratio=74.1117 +Physical time=804.0000 s, CPU time=10.8420 s, Time Ratio=74.1561 +Physical time=805.0000 s, CPU time=10.8540 s, Time Ratio=74.1662 +Physical time=806.0000 s, CPU time=10.8620 s, Time Ratio=74.2036 +Physical time=807.0000 s, CPU time=10.8720 s, Time Ratio=74.2274 +Physical time=808.0000 s, CPU time=10.8810 s, Time Ratio=74.2579 +Physical time=809.0000 s, CPU time=10.8920 s, Time Ratio=74.2747 +Physical time=810.0000 s, CPU time=10.9010 s, Time Ratio=74.3051 +Physical time=811.0000 s, CPU time=10.9100 s, Time Ratio=74.3355 +Physical time=812.0000 s, CPU time=10.9170 s, Time Ratio=74.3794 +Physical time=813.0000 s, CPU time=10.9240 s, Time Ratio=74.4233 +Physical time=814.0000 s, CPU time=10.9360 s, Time Ratio=74.4331 +Physical time=815.0000 s, CPU time=10.9470 s, Time Ratio=74.4496 +Physical time=816.0000 s, CPU time=10.9570 s, Time Ratio=74.4729 +Physical time=817.0000 s, CPU time=10.9650 s, Time Ratio=74.5098 +Physical time=818.0000 s, CPU time=10.9750 s, Time Ratio=74.5330 +Physical time=819.0000 s, CPU time=10.9830 s, Time Ratio=74.5698 +Physical time=820.0000 s, CPU time=10.9910 s, Time Ratio=74.6065 +Physical time=821.0000 s, CPU time=10.9990 s, Time Ratio=74.6431 +Physical time=822.0000 s, CPU time=11.0060 s, Time Ratio=74.6865 +Physical time=823.0000 s, CPU time=11.0140 s, Time Ratio=74.7231 +Physical time=824.0000 s, CPU time=11.0230 s, Time Ratio=74.7528 +Physical time=825.0000 s, CPU time=11.0320 s, Time Ratio=74.7825 +Physical time=826.0000 s, CPU time=11.0390 s, Time Ratio=74.8256 +Physical time=827.0000 s, CPU time=11.0470 s, Time Ratio=74.8620 +Physical time=828.0000 s, CPU time=11.0540 s, Time Ratio=74.9050 +Physical time=829.0000 s, CPU time=11.0610 s, Time Ratio=74.9480 +Physical time=830.0000 s, CPU time=11.0670 s, Time Ratio=74.9977 +Physical time=831.0000 s, CPU time=11.0800 s, Time Ratio=75.0000 +Physical time=832.0000 s, CPU time=11.0860 s, Time Ratio=75.0496 +Physical time=833.0000 s, CPU time=11.0920 s, Time Ratio=75.0992 +Physical time=834.0000 s, CPU time=11.0980 s, Time Ratio=75.1487 +Physical time=835.0000 s, CPU time=11.1030 s, Time Ratio=75.2049 +Physical time=836.0000 s, CPU time=11.1080 s, Time Ratio=75.2611 +Physical time=837.0000 s, CPU time=11.1130 s, Time Ratio=75.3172 +Physical time=838.0000 s, CPU time=11.1180 s, Time Ratio=75.3733 +Physical time=839.0000 s, CPU time=11.1290 s, Time Ratio=75.3886 +Physical time=840.0000 s, CPU time=11.1350 s, Time Ratio=75.4378 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.921971[degC] + North Wall: T=19.921990[degC] + Ceiling: T=19.921495[degC] + Floor: T=19.922504[degC] + West Wall: T=19.922548[degC] + West Wall (glass, unshaded): T=2.633177[degC] + East Wall: T=19.922414[degC] + East Wall (glass, unshaded): T=2.632039[degC] + East Wall (frame): T=8.762555[degC] + West Wall (frame): T=8.763509[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=840.000000[s] + Averaged room temperature 17.015779[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.488925[W] + North Wall: -1.471826[W] + Ceiling: -1.467360[W] + Floor: -1.584401[W] + West Wall: -0.773439[W] + West Wall (glass, unshaded): 2.969166[W] + East Wall: -0.780268[W] + East Wall (glass, unshaded): 2.966438[W] + East Wall (frame): 0.425536[W] + West Wall (frame): 0.425262[W] + Sensor Information: + Occupied zone air temperature: 290.165779 + Velocity: 0.016429 +ffd_solver(): Synchronized data at t=840.000000[s] + +Physical time=841.0000 s, CPU time=11.2980 s, Time Ratio=74.4380 +Physical time=842.0000 s, CPU time=11.3130 s, Time Ratio=74.4276 +Physical time=843.0000 s, CPU time=11.3260 s, Time Ratio=74.4305 +Physical time=844.0000 s, CPU time=11.3360 s, Time Ratio=74.4531 +Physical time=845.0000 s, CPU time=11.3460 s, Time Ratio=74.4756 +Physical time=846.0000 s, CPU time=11.3560 s, Time Ratio=74.4981 +Physical time=847.0000 s, CPU time=11.3640 s, Time Ratio=74.5336 +Physical time=848.0000 s, CPU time=11.3710 s, Time Ratio=74.5757 +Physical time=849.0000 s, CPU time=11.3770 s, Time Ratio=74.6242 +Physical time=850.0000 s, CPU time=11.3820 s, Time Ratio=74.6793 +Physical time=851.0000 s, CPU time=11.3880 s, Time Ratio=74.7278 +Physical time=852.0000 s, CPU time=11.3930 s, Time Ratio=74.7828 +Physical time=853.0000 s, CPU time=11.3980 s, Time Ratio=74.8377 +Physical time=854.0000 s, CPU time=11.4090 s, Time Ratio=74.8532 +Physical time=855.0000 s, CPU time=11.4190 s, Time Ratio=74.8752 +Physical time=856.0000 s, CPU time=11.4250 s, Time Ratio=74.9234 +Physical time=857.0000 s, CPU time=11.4300 s, Time Ratio=74.9781 +Physical time=858.0000 s, CPU time=11.4350 s, Time Ratio=75.0328 +Physical time=859.0000 s, CPU time=11.4460 s, Time Ratio=75.0481 +Physical time=860.0000 s, CPU time=11.4520 s, Time Ratio=75.0961 +Physical time=861.0000 s, CPU time=11.4600 s, Time Ratio=75.1309 +Physical time=862.0000 s, CPU time=11.4770 s, Time Ratio=75.1067 +Physical time=863.0000 s, CPU time=11.4880 s, Time Ratio=75.1219 +Physical time=864.0000 s, CPU time=11.4950 s, Time Ratio=75.1631 +Physical time=865.0000 s, CPU time=11.5020 s, Time Ratio=75.2043 +Physical time=866.0000 s, CPU time=11.5130 s, Time Ratio=75.2193 +Physical time=867.0000 s, CPU time=11.5250 s, Time Ratio=75.2278 +Physical time=868.0000 s, CPU time=11.5370 s, Time Ratio=75.2362 +Physical time=869.0000 s, CPU time=11.5510 s, Time Ratio=75.2316 +Physical time=870.0000 s, CPU time=11.5660 s, Time Ratio=75.2205 +Physical time=871.0000 s, CPU time=11.5830 s, Time Ratio=75.1964 +Physical time=872.0000 s, CPU time=11.5970 s, Time Ratio=75.1919 +Physical time=873.0000 s, CPU time=11.6040 s, Time Ratio=75.2327 +Physical time=874.0000 s, CPU time=11.6110 s, Time Ratio=75.2734 +Physical time=875.0000 s, CPU time=11.6170 s, Time Ratio=75.3207 +Physical time=876.0000 s, CPU time=11.6250 s, Time Ratio=75.3548 +Physical time=877.0000 s, CPU time=11.6320 s, Time Ratio=75.3955 +Physical time=878.0000 s, CPU time=11.6390 s, Time Ratio=75.4360 +Physical time=879.0000 s, CPU time=11.6440 s, Time Ratio=75.4895 +Physical time=880.0000 s, CPU time=11.6500 s, Time Ratio=75.5365 +Physical time=881.0000 s, CPU time=11.6550 s, Time Ratio=75.5899 +Physical time=882.0000 s, CPU time=11.6600 s, Time Ratio=75.6432 +Physical time=883.0000 s, CPU time=11.6650 s, Time Ratio=75.6965 +Physical time=884.0000 s, CPU time=11.6710 s, Time Ratio=75.7433 +Physical time=885.0000 s, CPU time=11.6760 s, Time Ratio=75.7965 +Physical time=886.0000 s, CPU time=11.6810 s, Time Ratio=75.8497 +Physical time=887.0000 s, CPU time=11.6860 s, Time Ratio=75.9028 +Physical time=888.0000 s, CPU time=11.6910 s, Time Ratio=75.9559 +Physical time=889.0000 s, CPU time=11.6960 s, Time Ratio=76.0089 +Physical time=890.0000 s, CPU time=11.7010 s, Time Ratio=76.0619 +Physical time=891.0000 s, CPU time=11.7070 s, Time Ratio=76.1083 +Physical time=892.0000 s, CPU time=11.7150 s, Time Ratio=76.1417 +Physical time=893.0000 s, CPU time=11.7220 s, Time Ratio=76.1815 +Physical time=894.0000 s, CPU time=11.7280 s, Time Ratio=76.2278 +Physical time=895.0000 s, CPU time=11.7340 s, Time Ratio=76.2741 +Physical time=896.0000 s, CPU time=11.7400 s, Time Ratio=76.3203 +Physical time=897.0000 s, CPU time=11.7460 s, Time Ratio=76.3664 +Physical time=898.0000 s, CPU time=11.7510 s, Time Ratio=76.4190 +Physical time=899.0000 s, CPU time=11.7560 s, Time Ratio=76.4716 +Physical time=900.0000 s, CPU time=11.7610 s, Time Ratio=76.5241 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.915974[degC] + North Wall: T=19.915986[degC] + Ceiling: T=19.915492[degC] + Floor: T=19.916553[degC] + West Wall: T=19.916582[degC] + West Wall (glass, unshaded): T=2.601107[degC] + East Wall: T=19.916445[degC] + East Wall (glass, unshaded): T=2.600111[degC] + East Wall (frame): T=8.749726[degC] + West Wall (frame): T=8.750783[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=900.000000[s] + Averaged room temperature 17.086542[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.438260[W] + North Wall: -1.444374[W] + Ceiling: -1.415042[W] + Floor: -1.555910[W] + West Wall: -0.761414[W] + West Wall (glass, unshaded): 2.986998[W] + East Wall: -0.762281[W] + East Wall (glass, unshaded): 2.987929[W] + East Wall (frame): 0.428168[W] + West Wall (frame): 0.429428[W] + Sensor Information: + Occupied zone air temperature: 290.236542 + Velocity: 0.049569 +ffd_solver(): Synchronized data at t=900.000000[s] + +Physical time=901.0000 s, CPU time=11.8670 s, Time Ratio=75.9248 +Physical time=902.0000 s, CPU time=11.8720 s, Time Ratio=75.9771 +Physical time=903.0000 s, CPU time=11.8780 s, Time Ratio=76.0229 +Physical time=904.0000 s, CPU time=11.8840 s, Time Ratio=76.0687 +Physical time=905.0000 s, CPU time=11.8890 s, Time Ratio=76.1208 +Physical time=906.0000 s, CPU time=11.8970 s, Time Ratio=76.1537 +Physical time=907.0000 s, CPU time=11.9020 s, Time Ratio=76.2057 +Physical time=908.0000 s, CPU time=11.9080 s, Time Ratio=76.2513 +Physical time=909.0000 s, CPU time=11.9150 s, Time Ratio=76.2904 +Physical time=910.0000 s, CPU time=11.9200 s, Time Ratio=76.3423 +Physical time=911.0000 s, CPU time=11.9260 s, Time Ratio=76.3877 +Physical time=912.0000 s, CPU time=11.9310 s, Time Ratio=76.4395 +Physical time=913.0000 s, CPU time=11.9360 s, Time Ratio=76.4913 +Physical time=914.0000 s, CPU time=11.9440 s, Time Ratio=76.5238 +Physical time=915.0000 s, CPU time=11.9490 s, Time Ratio=76.5754 +Physical time=916.0000 s, CPU time=11.9550 s, Time Ratio=76.6207 +Physical time=917.0000 s, CPU time=11.9600 s, Time Ratio=76.6722 +Physical time=918.0000 s, CPU time=11.9650 s, Time Ratio=76.7238 +Physical time=919.0000 s, CPU time=11.9710 s, Time Ratio=76.7689 +Physical time=920.0000 s, CPU time=11.9770 s, Time Ratio=76.8139 +Physical time=921.0000 s, CPU time=11.9840 s, Time Ratio=76.8525 +Physical time=922.0000 s, CPU time=11.9910 s, Time Ratio=76.8910 +Physical time=923.0000 s, CPU time=11.9970 s, Time Ratio=76.9359 +Physical time=924.0000 s, CPU time=12.0020 s, Time Ratio=76.9872 +Physical time=925.0000 s, CPU time=12.0070 s, Time Ratio=77.0384 +Physical time=926.0000 s, CPU time=12.0130 s, Time Ratio=77.0832 +Physical time=927.0000 s, CPU time=12.0180 s, Time Ratio=77.1343 +Physical time=928.0000 s, CPU time=12.0240 s, Time Ratio=77.1790 +Physical time=929.0000 s, CPU time=12.0300 s, Time Ratio=77.2236 +Physical time=930.0000 s, CPU time=12.0370 s, Time Ratio=77.2618 +Physical time=931.0000 s, CPU time=12.0440 s, Time Ratio=77.2999 +Physical time=932.0000 s, CPU time=12.0520 s, Time Ratio=77.3316 +Physical time=933.0000 s, CPU time=12.0630 s, Time Ratio=77.3439 +Physical time=934.0000 s, CPU time=12.0720 s, Time Ratio=77.3691 +Physical time=935.0000 s, CPU time=12.0790 s, Time Ratio=77.4071 +Physical time=936.0000 s, CPU time=12.0850 s, Time Ratio=77.4514 +Physical time=937.0000 s, CPU time=12.0900 s, Time Ratio=77.5021 +Physical time=938.0000 s, CPU time=12.0960 s, Time Ratio=77.5463 +Physical time=939.0000 s, CPU time=12.1010 s, Time Ratio=77.5969 +Physical time=940.0000 s, CPU time=12.1060 s, Time Ratio=77.6474 +Physical time=941.0000 s, CPU time=12.1110 s, Time Ratio=77.6980 +Physical time=942.0000 s, CPU time=12.1170 s, Time Ratio=77.7420 +Physical time=943.0000 s, CPU time=12.1220 s, Time Ratio=77.7924 +Physical time=944.0000 s, CPU time=12.1270 s, Time Ratio=77.8428 +Physical time=945.0000 s, CPU time=12.1320 s, Time Ratio=77.8932 +Physical time=946.0000 s, CPU time=12.1370 s, Time Ratio=77.9435 +Physical time=947.0000 s, CPU time=12.1430 s, Time Ratio=77.9873 +Physical time=948.0000 s, CPU time=12.1490 s, Time Ratio=78.0311 +Physical time=949.0000 s, CPU time=12.1540 s, Time Ratio=78.0813 +Physical time=950.0000 s, CPU time=12.1600 s, Time Ratio=78.1250 +Physical time=951.0000 s, CPU time=12.1660 s, Time Ratio=78.1687 +Physical time=952.0000 s, CPU time=12.1710 s, Time Ratio=78.2187 +Physical time=953.0000 s, CPU time=12.1770 s, Time Ratio=78.2623 +Physical time=954.0000 s, CPU time=12.1820 s, Time Ratio=78.3123 +Physical time=955.0000 s, CPU time=12.1870 s, Time Ratio=78.3622 +Physical time=956.0000 s, CPU time=12.1930 s, Time Ratio=78.4056 +Physical time=957.0000 s, CPU time=12.1980 s, Time Ratio=78.4555 +Physical time=958.0000 s, CPU time=12.2030 s, Time Ratio=78.5053 +Physical time=959.0000 s, CPU time=12.2080 s, Time Ratio=78.5550 +Physical time=960.0000 s, CPU time=12.2140 s, Time Ratio=78.5983 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.910018[degC] + North Wall: T=19.910026[degC] + Ceiling: T=19.909531[degC] + Floor: T=19.910654[degC] + West Wall: T=19.910660[degC] + West Wall (glass, unshaded): T=2.570973[degC] + East Wall: T=19.910530[degC] + East Wall (glass, unshaded): T=2.570102[degC] + East Wall (frame): T=8.736924[degC] + West Wall (frame): T=8.737945[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=960.000000[s] + Averaged room temperature 17.152649[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.398644[W] + North Wall: -1.400491[W] + Ceiling: -1.366540[W] + Floor: -1.498900[W] + West Wall: -0.737078[W] + West Wall (glass, unshaded): 3.011244[W] + East Wall: -0.738095[W] + East Wall (glass, unshaded): 3.014785[W] + East Wall (frame): 0.434266[W] + West Wall (frame): 0.434874[W] + Sensor Information: + Occupied zone air temperature: 290.302649 + Velocity: 0.048871 +ffd_solver(): Synchronized data at t=960.000000[s] + +Physical time=961.0000 s, CPU time=12.3200 s, Time Ratio=78.0032 +Physical time=962.0000 s, CPU time=12.3250 s, Time Ratio=78.0527 +Physical time=963.0000 s, CPU time=12.3390 s, Time Ratio=78.0452 +Physical time=964.0000 s, CPU time=12.3460 s, Time Ratio=78.0820 +Physical time=965.0000 s, CPU time=12.3530 s, Time Ratio=78.1187 +Physical time=966.0000 s, CPU time=12.3610 s, Time Ratio=78.1490 +Physical time=967.0000 s, CPU time=12.3680 s, Time Ratio=78.1856 +Physical time=968.0000 s, CPU time=12.3770 s, Time Ratio=78.2096 +Physical time=969.0000 s, CPU time=12.3870 s, Time Ratio=78.2272 +Physical time=970.0000 s, CPU time=12.3980 s, Time Ratio=78.2384 +Physical time=971.0000 s, CPU time=12.4070 s, Time Ratio=78.2623 +Physical time=972.0000 s, CPU time=12.4210 s, Time Ratio=78.2546 +Physical time=973.0000 s, CPU time=12.4340 s, Time Ratio=78.2532 +Physical time=974.0000 s, CPU time=12.4500 s, Time Ratio=78.2329 +Physical time=975.0000 s, CPU time=12.4590 s, Time Ratio=78.2567 +Physical time=976.0000 s, CPU time=12.4670 s, Time Ratio=78.2867 +Physical time=977.0000 s, CPU time=12.4770 s, Time Ratio=78.3041 +Physical time=978.0000 s, CPU time=12.4870 s, Time Ratio=78.3215 +Physical time=979.0000 s, CPU time=12.4960 s, Time Ratio=78.3451 +Physical time=980.0000 s, CPU time=12.5040 s, Time Ratio=78.3749 +Physical time=981.0000 s, CPU time=12.5110 s, Time Ratio=78.4110 +Physical time=982.0000 s, CPU time=12.5170 s, Time Ratio=78.4533 +Physical time=983.0000 s, CPU time=12.5230 s, Time Ratio=78.4956 +Physical time=984.0000 s, CPU time=12.5280 s, Time Ratio=78.5441 +Physical time=985.0000 s, CPU time=12.5330 s, Time Ratio=78.5925 +Physical time=986.0000 s, CPU time=12.5380 s, Time Ratio=78.6409 +Physical time=987.0000 s, CPU time=12.5430 s, Time Ratio=78.6893 +Physical time=988.0000 s, CPU time=12.5500 s, Time Ratio=78.7251 +Physical time=989.0000 s, CPU time=12.5580 s, Time Ratio=78.7546 +Physical time=990.0000 s, CPU time=12.5670 s, Time Ratio=78.7778 +Physical time=991.0000 s, CPU time=12.5800 s, Time Ratio=78.7758 +Physical time=992.0000 s, CPU time=12.5930 s, Time Ratio=78.7739 +Physical time=993.0000 s, CPU time=12.6030 s, Time Ratio=78.7908 +Physical time=994.0000 s, CPU time=12.6100 s, Time Ratio=78.8263 +Physical time=995.0000 s, CPU time=12.6160 s, Time Ratio=78.8681 +Physical time=996.0000 s, CPU time=12.6240 s, Time Ratio=78.8973 +Physical time=997.0000 s, CPU time=12.6310 s, Time Ratio=78.9328 +Physical time=998.0000 s, CPU time=12.6390 s, Time Ratio=78.9619 +Physical time=999.0000 s, CPU time=12.6480 s, Time Ratio=78.9848 +Physical time=1000.0000 s, CPU time=12.6550 s, Time Ratio=79.0202 +Physical time=1001.0000 s, CPU time=12.6610 s, Time Ratio=79.0617 +Physical time=1002.0000 s, CPU time=12.6660 s, Time Ratio=79.1094 +Physical time=1003.0000 s, CPU time=12.6710 s, Time Ratio=79.1571 +Physical time=1004.0000 s, CPU time=12.6760 s, Time Ratio=79.2048 +Physical time=1005.0000 s, CPU time=12.6810 s, Time Ratio=79.2524 +Physical time=1006.0000 s, CPU time=12.6860 s, Time Ratio=79.3000 +Physical time=1007.0000 s, CPU time=12.6910 s, Time Ratio=79.3476 +Physical time=1008.0000 s, CPU time=12.6960 s, Time Ratio=79.3951 +Physical time=1009.0000 s, CPU time=12.7000 s, Time Ratio=79.4488 +Physical time=1010.0000 s, CPU time=12.7050 s, Time Ratio=79.4963 +Physical time=1011.0000 s, CPU time=12.7100 s, Time Ratio=79.5437 +Physical time=1012.0000 s, CPU time=12.7150 s, Time Ratio=79.5910 +Physical time=1013.0000 s, CPU time=12.7260 s, Time Ratio=79.6008 +Physical time=1014.0000 s, CPU time=12.7310 s, Time Ratio=79.6481 +Physical time=1015.0000 s, CPU time=12.7360 s, Time Ratio=79.6954 +Physical time=1016.0000 s, CPU time=12.7410 s, Time Ratio=79.7426 +Physical time=1017.0000 s, CPU time=12.7460 s, Time Ratio=79.7897 +Physical time=1018.0000 s, CPU time=12.7510 s, Time Ratio=79.8369 +Physical time=1019.0000 s, CPU time=12.7560 s, Time Ratio=79.8840 +Physical time=1020.0000 s, CPU time=12.7610 s, Time Ratio=79.9310 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.904103[degC] + North Wall: T=19.904115[degC] + Ceiling: T=19.903608[degC] + Floor: T=19.904796[degC] + West Wall: T=19.904784[degC] + West Wall (glass, unshaded): T=2.542676[degC] + East Wall: T=19.904658[degC] + East Wall (glass, unshaded): T=2.541832[degC] + East Wall (frame): T=8.724091[degC] + West Wall (frame): T=8.725065[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1020.000000[s] + Averaged room temperature 17.196411[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.379860[W] + North Wall: -1.380717[W] + Ceiling: -1.320899[W] + Floor: -1.494948[W] + West Wall: -0.730186[W] + West Wall (glass, unshaded): 3.016087[W] + East Wall: -0.730119[W] + East Wall (glass, unshaded): 3.018412[W] + East Wall (frame): 0.436444[W] + West Wall (frame): 0.435237[W] + Sensor Information: + Occupied zone air temperature: 290.346411 + Velocity: 0.058209 +ffd_solver(): Synchronized data at t=1020.000000[s] + +Physical time=1021.0000 s, CPU time=12.8770 s, Time Ratio=79.2887 +Physical time=1022.0000 s, CPU time=12.8850 s, Time Ratio=79.3170 +Physical time=1023.0000 s, CPU time=12.8940 s, Time Ratio=79.3392 +Physical time=1024.0000 s, CPU time=12.9000 s, Time Ratio=79.3798 +Physical time=1025.0000 s, CPU time=12.9060 s, Time Ratio=79.4204 +Physical time=1026.0000 s, CPU time=12.9110 s, Time Ratio=79.4671 +Physical time=1027.0000 s, CPU time=12.9160 s, Time Ratio=79.5138 +Physical time=1028.0000 s, CPU time=12.9250 s, Time Ratio=79.5358 +Physical time=1029.0000 s, CPU time=12.9330 s, Time Ratio=79.5639 +Physical time=1030.0000 s, CPU time=12.9410 s, Time Ratio=79.5920 +Physical time=1031.0000 s, CPU time=12.9490 s, Time Ratio=79.6200 +Physical time=1032.0000 s, CPU time=12.9550 s, Time Ratio=79.6604 +Physical time=1033.0000 s, CPU time=12.9630 s, Time Ratio=79.6883 +Physical time=1034.0000 s, CPU time=12.9700 s, Time Ratio=79.7224 +Physical time=1035.0000 s, CPU time=12.9750 s, Time Ratio=79.7688 +Physical time=1036.0000 s, CPU time=12.9830 s, Time Ratio=79.7967 +Physical time=1037.0000 s, CPU time=12.9920 s, Time Ratio=79.8183 +Physical time=1038.0000 s, CPU time=13.0000 s, Time Ratio=79.8462 +Physical time=1039.0000 s, CPU time=13.0070 s, Time Ratio=79.8801 +Physical time=1040.0000 s, CPU time=13.0150 s, Time Ratio=79.9078 +Physical time=1041.0000 s, CPU time=13.0210 s, Time Ratio=79.9478 +Physical time=1042.0000 s, CPU time=13.0260 s, Time Ratio=79.9939 +Physical time=1043.0000 s, CPU time=13.0310 s, Time Ratio=80.0399 +Physical time=1044.0000 s, CPU time=13.0360 s, Time Ratio=80.0859 +Physical time=1045.0000 s, CPU time=13.0420 s, Time Ratio=80.1257 +Physical time=1046.0000 s, CPU time=13.0480 s, Time Ratio=80.1655 +Physical time=1047.0000 s, CPU time=13.0540 s, Time Ratio=80.2053 +Physical time=1048.0000 s, CPU time=13.0600 s, Time Ratio=80.2450 +Physical time=1049.0000 s, CPU time=13.0650 s, Time Ratio=80.2909 +Physical time=1050.0000 s, CPU time=13.0700 s, Time Ratio=80.3366 +Physical time=1051.0000 s, CPU time=13.0750 s, Time Ratio=80.3824 +Physical time=1052.0000 s, CPU time=13.0810 s, Time Ratio=80.4220 +Physical time=1053.0000 s, CPU time=13.0860 s, Time Ratio=80.4677 +Physical time=1054.0000 s, CPU time=13.0910 s, Time Ratio=80.5133 +Physical time=1055.0000 s, CPU time=13.0960 s, Time Ratio=80.5589 +Physical time=1056.0000 s, CPU time=13.1010 s, Time Ratio=80.6045 +Physical time=1057.0000 s, CPU time=13.1060 s, Time Ratio=80.6501 +Physical time=1058.0000 s, CPU time=13.1110 s, Time Ratio=80.6956 +Physical time=1059.0000 s, CPU time=13.1170 s, Time Ratio=80.7349 +Physical time=1060.0000 s, CPU time=13.1280 s, Time Ratio=80.7434 +Physical time=1061.0000 s, CPU time=13.1430 s, Time Ratio=80.7274 +Physical time=1062.0000 s, CPU time=13.1510 s, Time Ratio=80.7543 +Physical time=1063.0000 s, CPU time=13.1570 s, Time Ratio=80.7935 +Physical time=1064.0000 s, CPU time=13.1640 s, Time Ratio=80.8265 +Physical time=1065.0000 s, CPU time=13.1690 s, Time Ratio=80.8717 +Physical time=1066.0000 s, CPU time=13.1750 s, Time Ratio=80.9108 +Physical time=1067.0000 s, CPU time=13.1800 s, Time Ratio=80.9560 +Physical time=1068.0000 s, CPU time=13.1850 s, Time Ratio=81.0011 +Physical time=1069.0000 s, CPU time=13.1910 s, Time Ratio=81.0401 +Physical time=1070.0000 s, CPU time=13.1980 s, Time Ratio=81.0729 +Physical time=1071.0000 s, CPU time=13.2040 s, Time Ratio=81.1118 +Physical time=1072.0000 s, CPU time=13.2100 s, Time Ratio=81.1506 +Physical time=1073.0000 s, CPU time=13.2150 s, Time Ratio=81.1956 +Physical time=1074.0000 s, CPU time=13.2210 s, Time Ratio=81.2344 +Physical time=1075.0000 s, CPU time=13.2280 s, Time Ratio=81.2670 +Physical time=1076.0000 s, CPU time=13.2340 s, Time Ratio=81.3057 +Physical time=1077.0000 s, CPU time=13.2410 s, Time Ratio=81.3383 +Physical time=1078.0000 s, CPU time=13.2470 s, Time Ratio=81.3769 +Physical time=1079.0000 s, CPU time=13.2520 s, Time Ratio=81.4217 +Physical time=1080.0000 s, CPU time=13.2570 s, Time Ratio=81.4664 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.898241[degC] + North Wall: T=19.898252[degC] + Ceiling: T=19.897725[degC] + Floor: T=19.898989[degC] + West Wall: T=19.898957[degC] + West Wall (glass, unshaded): T=2.516262[degC] + East Wall: T=19.898836[degC] + East Wall (glass, unshaded): T=2.515424[degC] + East Wall (frame): T=8.711243[degC] + West Wall (frame): T=8.712207[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1080.000000[s] + Averaged room temperature 17.251770[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.341601[W] + North Wall: -1.346035[W] + Ceiling: -1.313799[W] + Floor: -1.455046[W] + West Wall: -0.713950[W] + West Wall (glass, unshaded): 3.043899[W] + East Wall: -0.715275[W] + East Wall (glass, unshaded): 3.044651[W] + East Wall (frame): 0.439471[W] + West Wall (frame): 0.438950[W] + Sensor Information: + Occupied zone air temperature: 290.401770 + Velocity: 0.032629 +ffd_solver(): Synchronized data at t=1080.000000[s] + +Physical time=1081.0000 s, CPU time=13.3700 s, Time Ratio=80.8527 +Physical time=1082.0000 s, CPU time=13.3770 s, Time Ratio=80.8851 +Physical time=1083.0000 s, CPU time=13.3830 s, Time Ratio=80.9236 +Physical time=1084.0000 s, CPU time=13.3880 s, Time Ratio=80.9680 +Physical time=1085.0000 s, CPU time=13.3970 s, Time Ratio=80.9883 +Physical time=1086.0000 s, CPU time=13.4020 s, Time Ratio=81.0327 +Physical time=1087.0000 s, CPU time=13.4070 s, Time Ratio=81.0770 +Physical time=1088.0000 s, CPU time=13.4140 s, Time Ratio=81.1093 +Physical time=1089.0000 s, CPU time=13.4220 s, Time Ratio=81.1354 +Physical time=1090.0000 s, CPU time=13.4290 s, Time Ratio=81.1676 +Physical time=1091.0000 s, CPU time=13.4370 s, Time Ratio=81.1937 +Physical time=1092.0000 s, CPU time=13.4490 s, Time Ratio=81.1956 +Physical time=1093.0000 s, CPU time=13.4560 s, Time Ratio=81.2277 +Physical time=1094.0000 s, CPU time=13.4660 s, Time Ratio=81.2416 +Physical time=1095.0000 s, CPU time=13.4730 s, Time Ratio=81.2737 +Physical time=1096.0000 s, CPU time=13.4840 s, Time Ratio=81.2815 +Physical time=1097.0000 s, CPU time=13.4940 s, Time Ratio=81.2954 +Physical time=1098.0000 s, CPU time=13.7050 s, Time Ratio=80.1167 +Physical time=1099.0000 s, CPU time=13.7220 s, Time Ratio=80.0904 +Physical time=1100.0000 s, CPU time=13.7310 s, Time Ratio=80.1107 +Physical time=1101.0000 s, CPU time=13.7420 s, Time Ratio=80.1193 +Physical time=1102.0000 s, CPU time=13.7520 s, Time Ratio=80.1338 +Physical time=1103.0000 s, CPU time=13.7580 s, Time Ratio=80.1715 +Physical time=1104.0000 s, CPU time=13.7650 s, Time Ratio=80.2034 +Physical time=1105.0000 s, CPU time=13.7700 s, Time Ratio=80.2469 +Physical time=1106.0000 s, CPU time=13.7750 s, Time Ratio=80.2904 +Physical time=1107.0000 s, CPU time=13.7810 s, Time Ratio=80.3280 +Physical time=1108.0000 s, CPU time=13.7860 s, Time Ratio=80.3714 +Physical time=1109.0000 s, CPU time=13.7910 s, Time Ratio=80.4148 +Physical time=1110.0000 s, CPU time=13.7960 s, Time Ratio=80.4581 +Physical time=1111.0000 s, CPU time=13.8020 s, Time Ratio=80.4956 +Physical time=1112.0000 s, CPU time=13.8070 s, Time Ratio=80.5389 +Physical time=1113.0000 s, CPU time=13.8120 s, Time Ratio=80.5821 +Physical time=1114.0000 s, CPU time=13.8170 s, Time Ratio=80.6253 +Physical time=1115.0000 s, CPU time=13.8220 s, Time Ratio=80.6685 +Physical time=1116.0000 s, CPU time=13.8290 s, Time Ratio=80.7000 +Physical time=1117.0000 s, CPU time=13.8340 s, Time Ratio=80.7431 +Physical time=1118.0000 s, CPU time=13.8410 s, Time Ratio=80.7745 +Physical time=1119.0000 s, CPU time=13.8470 s, Time Ratio=80.8117 +Physical time=1120.0000 s, CPU time=13.8520 s, Time Ratio=80.8548 +Physical time=1121.0000 s, CPU time=13.8590 s, Time Ratio=80.8861 +Physical time=1122.0000 s, CPU time=13.8650 s, Time Ratio=80.9232 +Physical time=1123.0000 s, CPU time=13.8710 s, Time Ratio=80.9603 +Physical time=1124.0000 s, CPU time=13.8780 s, Time Ratio=80.9915 +Physical time=1125.0000 s, CPU time=13.8860 s, Time Ratio=81.0169 +Physical time=1126.0000 s, CPU time=13.8930 s, Time Ratio=81.0480 +Physical time=1127.0000 s, CPU time=13.9000 s, Time Ratio=81.0791 +Physical time=1128.0000 s, CPU time=13.9080 s, Time Ratio=81.1044 +Physical time=1129.0000 s, CPU time=13.9150 s, Time Ratio=81.1355 +Physical time=1130.0000 s, CPU time=13.9200 s, Time Ratio=81.1782 +Physical time=1131.0000 s, CPU time=13.9250 s, Time Ratio=81.2208 +Physical time=1132.0000 s, CPU time=13.9320 s, Time Ratio=81.2518 +Physical time=1133.0000 s, CPU time=13.9420 s, Time Ratio=81.2652 +Physical time=1134.0000 s, CPU time=13.9490 s, Time Ratio=81.2962 +Physical time=1135.0000 s, CPU time=13.9590 s, Time Ratio=81.3095 +Physical time=1136.0000 s, CPU time=13.9650 s, Time Ratio=81.3462 +Physical time=1137.0000 s, CPU time=13.9710 s, Time Ratio=81.3829 +Physical time=1138.0000 s, CPU time=13.9770 s, Time Ratio=81.4195 +Physical time=1139.0000 s, CPU time=13.9830 s, Time Ratio=81.4561 +Physical time=1140.0000 s, CPU time=13.9880 s, Time Ratio=81.4984 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.892428[degC] + North Wall: T=19.892441[degC] + Ceiling: T=19.891894[degC] + Floor: T=19.893235[degC] + West Wall: T=19.893183[degC] + West Wall (glass, unshaded): T=2.491493[degC] + East Wall: T=19.893066[degC] + East Wall (glass, unshaded): T=2.490699[degC] + East Wall (frame): T=8.698429[degC] + West Wall (frame): T=8.699400[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1140.000000[s] + Averaged room temperature 17.279411[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.328985[W] + North Wall: -1.328848[W] + Ceiling: -1.261406[W] + Floor: -1.416252[W] + West Wall: -0.696729[W] + West Wall (glass, unshaded): 3.050748[W] + East Wall: -0.695286[W] + East Wall (glass, unshaded): 3.054908[W] + East Wall (frame): 0.443522[W] + West Wall (frame): 0.443070[W] + Sensor Information: + Occupied zone air temperature: 290.429411 + Velocity: 0.062620 +ffd_solver(): Synchronized data at t=1140.000000[s] + +Physical time=1141.0000 s, CPU time=14.1130 s, Time Ratio=80.8474 +Physical time=1142.0000 s, CPU time=14.1180 s, Time Ratio=80.8896 +Physical time=1143.0000 s, CPU time=14.1240 s, Time Ratio=80.9261 +Physical time=1144.0000 s, CPU time=14.1290 s, Time Ratio=80.9682 +Physical time=1145.0000 s, CPU time=14.1340 s, Time Ratio=81.0103 +Physical time=1146.0000 s, CPU time=14.1390 s, Time Ratio=81.0524 +Physical time=1147.0000 s, CPU time=14.1440 s, Time Ratio=81.0945 +Physical time=1148.0000 s, CPU time=14.1510 s, Time Ratio=81.1250 +Physical time=1149.0000 s, CPU time=14.1590 s, Time Ratio=81.1498 +Physical time=1150.0000 s, CPU time=14.1640 s, Time Ratio=81.1918 +Physical time=1151.0000 s, CPU time=14.1700 s, Time Ratio=81.2279 +Physical time=1152.0000 s, CPU time=14.1770 s, Time Ratio=81.2584 +Physical time=1153.0000 s, CPU time=14.1840 s, Time Ratio=81.2888 +Physical time=1154.0000 s, CPU time=14.1900 s, Time Ratio=81.3249 +Physical time=1155.0000 s, CPU time=14.1960 s, Time Ratio=81.3609 +Physical time=1156.0000 s, CPU time=14.2020 s, Time Ratio=81.3970 +Physical time=1157.0000 s, CPU time=14.2080 s, Time Ratio=81.4330 +Physical time=1158.0000 s, CPU time=14.2140 s, Time Ratio=81.4690 +Physical time=1159.0000 s, CPU time=14.2200 s, Time Ratio=81.5049 +Physical time=1160.0000 s, CPU time=14.2260 s, Time Ratio=81.5408 +Physical time=1161.0000 s, CPU time=14.2330 s, Time Ratio=81.5710 +Physical time=1162.0000 s, CPU time=14.2390 s, Time Ratio=81.6069 +Physical time=1163.0000 s, CPU time=14.2510 s, Time Ratio=81.6083 +Physical time=1164.0000 s, CPU time=14.2590 s, Time Ratio=81.6327 +Physical time=1165.0000 s, CPU time=14.2660 s, Time Ratio=81.6627 +Physical time=1166.0000 s, CPU time=14.2720 s, Time Ratio=81.6984 +Physical time=1167.0000 s, CPU time=14.2770 s, Time Ratio=81.7399 +Physical time=1168.0000 s, CPU time=14.2880 s, Time Ratio=81.7469 +Physical time=1169.0000 s, CPU time=14.2930 s, Time Ratio=81.7883 +Physical time=1170.0000 s, CPU time=14.2980 s, Time Ratio=81.8296 +Physical time=1171.0000 s, CPU time=14.3050 s, Time Ratio=81.8595 +Physical time=1172.0000 s, CPU time=14.3110 s, Time Ratio=81.8950 +Physical time=1173.0000 s, CPU time=14.3180 s, Time Ratio=81.9248 +Physical time=1174.0000 s, CPU time=14.3290 s, Time Ratio=81.9317 +Physical time=1175.0000 s, CPU time=14.3390 s, Time Ratio=81.9443 +Physical time=1176.0000 s, CPU time=14.3500 s, Time Ratio=81.9512 +Physical time=1177.0000 s, CPU time=14.3590 s, Time Ratio=81.9695 +Physical time=1178.0000 s, CPU time=14.3690 s, Time Ratio=81.9820 +Physical time=1179.0000 s, CPU time=14.3810 s, Time Ratio=81.9832 +Physical time=1180.0000 s, CPU time=14.3940 s, Time Ratio=81.9786 +Physical time=1181.0000 s, CPU time=14.4040 s, Time Ratio=81.9911 +Physical time=1182.0000 s, CPU time=14.4110 s, Time Ratio=82.0207 +Physical time=1183.0000 s, CPU time=14.4200 s, Time Ratio=82.0388 +Physical time=1184.0000 s, CPU time=14.4260 s, Time Ratio=82.0740 +Physical time=1185.0000 s, CPU time=14.4320 s, Time Ratio=82.1092 +Physical time=1186.0000 s, CPU time=14.4370 s, Time Ratio=82.1500 +Physical time=1187.0000 s, CPU time=14.4430 s, Time Ratio=82.1851 +Physical time=1188.0000 s, CPU time=14.4490 s, Time Ratio=82.2202 +Physical time=1189.0000 s, CPU time=14.4540 s, Time Ratio=82.2610 +Physical time=1190.0000 s, CPU time=14.4590 s, Time Ratio=82.3017 +Physical time=1191.0000 s, CPU time=14.4640 s, Time Ratio=82.3424 +Physical time=1192.0000 s, CPU time=14.4740 s, Time Ratio=82.3546 +Physical time=1193.0000 s, CPU time=14.4790 s, Time Ratio=82.3952 +Physical time=1194.0000 s, CPU time=14.4870 s, Time Ratio=82.4187 +Physical time=1195.0000 s, CPU time=14.4930 s, Time Ratio=82.4536 +Physical time=1196.0000 s, CPU time=14.4990 s, Time Ratio=82.4884 +Physical time=1197.0000 s, CPU time=14.5070 s, Time Ratio=82.5119 +Physical time=1198.0000 s, CPU time=14.5130 s, Time Ratio=82.5467 +Physical time=1199.0000 s, CPU time=14.5200 s, Time Ratio=82.5758 +Physical time=1200.0000 s, CPU time=14.5260 s, Time Ratio=82.6105 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.886665[degC] + North Wall: T=19.886679[degC] + Ceiling: T=19.886110[degC] + Floor: T=19.887521[degC] + West Wall: T=19.887454[degC] + West Wall (glass, unshaded): T=2.468203[degC] + East Wall: T=19.887340[degC] + East Wall (glass, unshaded): T=2.467422[degC] + East Wall (frame): T=8.685624[degC] + West Wall (frame): T=8.686592[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1200.000000[s] + Averaged room temperature 17.302310[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.316287[W] + North Wall: -1.318518[W] + Ceiling: -1.257783[W] + Floor: -1.429443[W] + West Wall: -0.701768[W] + West Wall (glass, unshaded): 3.055799[W] + East Wall: -0.701904[W] + East Wall (glass, unshaded): 3.057980[W] + East Wall (frame): 0.442788[W] + West Wall (frame): 0.442072[W] + Sensor Information: + Occupied zone air temperature: 290.452310 + Velocity: 0.044067 +ffd_solver(): Synchronized data at t=1200.000000[s] + +Physical time=1201.0000 s, CPU time=14.6390 s, Time Ratio=82.0411 +Physical time=1202.0000 s, CPU time=14.6450 s, Time Ratio=82.0758 +Physical time=1203.0000 s, CPU time=14.6510 s, Time Ratio=82.1104 +Physical time=1204.0000 s, CPU time=14.6570 s, Time Ratio=82.1451 +Physical time=1205.0000 s, CPU time=14.6640 s, Time Ratio=82.1740 +Physical time=1206.0000 s, CPU time=14.6690 s, Time Ratio=82.2142 +Physical time=1207.0000 s, CPU time=14.6740 s, Time Ratio=82.2543 +Physical time=1208.0000 s, CPU time=14.6790 s, Time Ratio=82.2944 +Physical time=1209.0000 s, CPU time=14.6850 s, Time Ratio=82.3289 +Physical time=1210.0000 s, CPU time=14.6900 s, Time Ratio=82.3690 +Physical time=1211.0000 s, CPU time=14.6950 s, Time Ratio=82.4090 +Physical time=1212.0000 s, CPU time=14.7000 s, Time Ratio=82.4490 +Physical time=1213.0000 s, CPU time=14.7060 s, Time Ratio=82.4833 +Physical time=1214.0000 s, CPU time=14.7120 s, Time Ratio=82.5177 +Physical time=1215.0000 s, CPU time=14.7180 s, Time Ratio=82.5520 +Physical time=1216.0000 s, CPU time=14.7230 s, Time Ratio=82.5919 +Physical time=1217.0000 s, CPU time=14.7280 s, Time Ratio=82.6317 +Physical time=1218.0000 s, CPU time=14.7340 s, Time Ratio=82.6659 +Physical time=1219.0000 s, CPU time=14.7400 s, Time Ratio=82.7001 +Physical time=1220.0000 s, CPU time=14.7460 s, Time Ratio=82.7343 +Physical time=1221.0000 s, CPU time=14.7520 s, Time Ratio=82.7684 +Physical time=1222.0000 s, CPU time=14.7570 s, Time Ratio=82.8082 +Physical time=1223.0000 s, CPU time=14.7630 s, Time Ratio=82.8422 +Physical time=1224.0000 s, CPU time=14.7690 s, Time Ratio=82.8763 +Physical time=1225.0000 s, CPU time=14.7750 s, Time Ratio=82.9103 +Physical time=1226.0000 s, CPU time=14.7810 s, Time Ratio=82.9443 +Physical time=1227.0000 s, CPU time=14.7870 s, Time Ratio=82.9783 +Physical time=1228.0000 s, CPU time=14.7920 s, Time Ratio=83.0178 +Physical time=1229.0000 s, CPU time=14.7980 s, Time Ratio=83.0518 +Physical time=1230.0000 s, CPU time=14.8030 s, Time Ratio=83.0913 +Physical time=1231.0000 s, CPU time=14.8080 s, Time Ratio=83.1307 +Physical time=1232.0000 s, CPU time=14.8140 s, Time Ratio=83.1646 +Physical time=1233.0000 s, CPU time=14.8190 s, Time Ratio=83.2040 +Physical time=1234.0000 s, CPU time=14.8260 s, Time Ratio=83.2322 +Physical time=1235.0000 s, CPU time=14.8380 s, Time Ratio=83.2322 +Physical time=1236.0000 s, CPU time=14.8500 s, Time Ratio=83.2323 +Physical time=1237.0000 s, CPU time=14.8610 s, Time Ratio=83.2380 +Physical time=1238.0000 s, CPU time=14.8710 s, Time Ratio=83.2493 +Physical time=1239.0000 s, CPU time=14.8790 s, Time Ratio=83.2717 +Physical time=1240.0000 s, CPU time=14.8870 s, Time Ratio=83.2941 +Physical time=1241.0000 s, CPU time=14.8960 s, Time Ratio=83.3110 +Physical time=1242.0000 s, CPU time=14.9030 s, Time Ratio=83.3389 +Physical time=1243.0000 s, CPU time=14.9090 s, Time Ratio=83.3725 +Physical time=1244.0000 s, CPU time=14.9140 s, Time Ratio=83.4116 +Physical time=1245.0000 s, CPU time=14.9240 s, Time Ratio=83.4227 +Physical time=1246.0000 s, CPU time=14.9300 s, Time Ratio=83.4561 +Physical time=1247.0000 s, CPU time=14.9390 s, Time Ratio=83.4728 +Physical time=1248.0000 s, CPU time=14.9460 s, Time Ratio=83.5006 +Physical time=1249.0000 s, CPU time=14.9530 s, Time Ratio=83.5284 +Physical time=1250.0000 s, CPU time=14.9590 s, Time Ratio=83.5617 +Physical time=1251.0000 s, CPU time=14.9700 s, Time Ratio=83.5671 +Physical time=1252.0000 s, CPU time=14.9810 s, Time Ratio=83.5725 +Physical time=1253.0000 s, CPU time=14.9900 s, Time Ratio=83.5891 +Physical time=1254.0000 s, CPU time=14.9960 s, Time Ratio=83.6223 +Physical time=1255.0000 s, CPU time=15.0010 s, Time Ratio=83.6611 +Physical time=1256.0000 s, CPU time=15.0060 s, Time Ratio=83.6999 +Physical time=1257.0000 s, CPU time=15.0130 s, Time Ratio=83.7274 +Physical time=1258.0000 s, CPU time=15.0200 s, Time Ratio=83.7550 +Physical time=1259.0000 s, CPU time=15.0250 s, Time Ratio=83.7937 +Physical time=1260.0000 s, CPU time=15.0310 s, Time Ratio=83.8268 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.880959[degC] + North Wall: T=19.880974[degC] + Ceiling: T=19.880374[degC] + Floor: T=19.881863[degC] + West Wall: T=19.881782[degC] + West Wall (glass, unshaded): T=2.446568[degC] + East Wall: T=19.881669[degC] + East Wall (glass, unshaded): T=2.445780[degC] + East Wall (frame): T=8.672891[degC] + West Wall (frame): T=8.673857[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1260.000000[s] + Averaged room temperature 17.336189[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.286501[W] + North Wall: -1.288860[W] + Ceiling: -1.257300[W] + Floor: -1.373397[W] + West Wall: -0.684648[W] + West Wall (glass, unshaded): 3.079534[W] + East Wall: -0.680783[W] + East Wall (glass, unshaded): 3.082681[W] + East Wall (frame): 0.447205[W] + West Wall (frame): 0.445320[W] + Sensor Information: + Occupied zone air temperature: 290.486189 + Velocity: 0.048187 +ffd_solver(): Synchronized data at t=1260.000000[s] + +Physical time=1261.0000 s, CPU time=15.1610 s, Time Ratio=83.1739 +Physical time=1262.0000 s, CPU time=15.1660 s, Time Ratio=83.2124 +Physical time=1263.0000 s, CPU time=15.1720 s, Time Ratio=83.2455 +Physical time=1264.0000 s, CPU time=15.1780 s, Time Ratio=83.2784 +Physical time=1265.0000 s, CPU time=15.1850 s, Time Ratio=83.3059 +Physical time=1266.0000 s, CPU time=15.1920 s, Time Ratio=83.3333 +Physical time=1267.0000 s, CPU time=15.1980 s, Time Ratio=83.3662 +Physical time=1268.0000 s, CPU time=15.2030 s, Time Ratio=83.4046 +Physical time=1269.0000 s, CPU time=15.2100 s, Time Ratio=83.4320 +Physical time=1270.0000 s, CPU time=15.2160 s, Time Ratio=83.4648 +Physical time=1271.0000 s, CPU time=15.2210 s, Time Ratio=83.5031 +Physical time=1272.0000 s, CPU time=15.2270 s, Time Ratio=83.5358 +Physical time=1273.0000 s, CPU time=15.2320 s, Time Ratio=83.5741 +Physical time=1274.0000 s, CPU time=15.2400 s, Time Ratio=83.5958 +Physical time=1275.0000 s, CPU time=15.2470 s, Time Ratio=83.6230 +Physical time=1276.0000 s, CPU time=15.2520 s, Time Ratio=83.6612 +Physical time=1277.0000 s, CPU time=15.2570 s, Time Ratio=83.6993 +Physical time=1278.0000 s, CPU time=15.2640 s, Time Ratio=83.7264 +Physical time=1279.0000 s, CPU time=15.2720 s, Time Ratio=83.7480 +Physical time=1280.0000 s, CPU time=15.2800 s, Time Ratio=83.7696 +Physical time=1281.0000 s, CPU time=15.2880 s, Time Ratio=83.7912 +Physical time=1282.0000 s, CPU time=15.2960 s, Time Ratio=83.8128 +Physical time=1283.0000 s, CPU time=15.3030 s, Time Ratio=83.8398 +Physical time=1284.0000 s, CPU time=15.3090 s, Time Ratio=83.8722 +Physical time=1285.0000 s, CPU time=15.3160 s, Time Ratio=83.8992 +Physical time=1286.0000 s, CPU time=15.3250 s, Time Ratio=83.9152 +Physical time=1287.0000 s, CPU time=15.3370 s, Time Ratio=83.9147 +Physical time=1288.0000 s, CPU time=15.3490 s, Time Ratio=83.9143 +Physical time=1289.0000 s, CPU time=15.3580 s, Time Ratio=83.9302 +Physical time=1290.0000 s, CPU time=15.3680 s, Time Ratio=83.9407 +Physical time=1291.0000 s, CPU time=15.3760 s, Time Ratio=83.9620 +Physical time=1292.0000 s, CPU time=15.3890 s, Time Ratio=83.9561 +Physical time=1293.0000 s, CPU time=15.4040 s, Time Ratio=83.9392 +Physical time=1294.0000 s, CPU time=15.4140 s, Time Ratio=83.9497 +Physical time=1295.0000 s, CPU time=15.4260 s, Time Ratio=83.9492 +Physical time=1296.0000 s, CPU time=15.4340 s, Time Ratio=83.9705 +Physical time=1297.0000 s, CPU time=15.4450 s, Time Ratio=83.9754 +Physical time=1298.0000 s, CPU time=15.4540 s, Time Ratio=83.9912 +Physical time=1299.0000 s, CPU time=15.4630 s, Time Ratio=84.0070 +Physical time=1300.0000 s, CPU time=15.4690 s, Time Ratio=84.0390 +Physical time=1301.0000 s, CPU time=15.4740 s, Time Ratio=84.0765 +Physical time=1302.0000 s, CPU time=15.4800 s, Time Ratio=84.1085 +Physical time=1303.0000 s, CPU time=15.4960 s, Time Ratio=84.0862 +Physical time=1304.0000 s, CPU time=15.5020 s, Time Ratio=84.1182 +Physical time=1305.0000 s, CPU time=15.5080 s, Time Ratio=84.1501 +Physical time=1306.0000 s, CPU time=15.5200 s, Time Ratio=84.1495 +Physical time=1307.0000 s, CPU time=15.5260 s, Time Ratio=84.1814 +Physical time=1308.0000 s, CPU time=15.5340 s, Time Ratio=84.2024 +Physical time=1309.0000 s, CPU time=15.5410 s, Time Ratio=84.2288 +Physical time=1310.0000 s, CPU time=15.5460 s, Time Ratio=84.2660 +Physical time=1311.0000 s, CPU time=15.5530 s, Time Ratio=84.2924 +Physical time=1312.0000 s, CPU time=15.5590 s, Time Ratio=84.3242 +Physical time=1313.0000 s, CPU time=15.5670 s, Time Ratio=84.3451 +Physical time=1314.0000 s, CPU time=15.5760 s, Time Ratio=84.3606 +Physical time=1315.0000 s, CPU time=15.5830 s, Time Ratio=84.3868 +Physical time=1316.0000 s, CPU time=15.5890 s, Time Ratio=84.4185 +Physical time=1317.0000 s, CPU time=15.5940 s, Time Ratio=84.4556 +Physical time=1318.0000 s, CPU time=15.5990 s, Time Ratio=84.4926 +Physical time=1319.0000 s, CPU time=15.6040 s, Time Ratio=84.5296 +Physical time=1320.0000 s, CPU time=15.6100 s, Time Ratio=84.5612 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.875303[degC] + North Wall: T=19.875319[degC] + Ceiling: T=19.874700[degC] + Floor: T=19.876254[degC] + West Wall: T=19.876164[degC] + West Wall (glass, unshaded): T=2.426208[degC] + East Wall: T=19.876053[degC] + East Wall (glass, unshaded): T=2.425428[degC] + East Wall (frame): T=8.660225[degC] + West Wall (frame): T=8.661212[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1320.000000[s] + Averaged room temperature 17.334756[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.296979[W] + North Wall: -1.296373[W] + Ceiling: -1.224029[W] + Floor: -1.378009[W] + West Wall: -0.673868[W] + West Wall (glass, unshaded): 3.075626[W] + East Wall: -0.679046[W] + East Wall (glass, unshaded): 3.074526[W] + East Wall (frame): 0.447426[W] + West Wall (frame): 0.448267[W] + Sensor Information: + Occupied zone air temperature: 290.484756 + Velocity: 0.026283 +ffd_solver(): Synchronized data at t=1320.000000[s] + +Physical time=1321.0000 s, CPU time=15.7200 s, Time Ratio=84.0331 +Physical time=1322.0000 s, CPU time=15.7290 s, Time Ratio=84.0486 +Physical time=1323.0000 s, CPU time=15.7350 s, Time Ratio=84.0801 +Physical time=1324.0000 s, CPU time=15.7420 s, Time Ratio=84.1062 +Physical time=1325.0000 s, CPU time=15.7480 s, Time Ratio=84.1377 +Physical time=1326.0000 s, CPU time=15.7540 s, Time Ratio=84.1691 +Physical time=1327.0000 s, CPU time=15.7590 s, Time Ratio=84.2059 +Physical time=1328.0000 s, CPU time=15.7650 s, Time Ratio=84.2372 +Physical time=1329.0000 s, CPU time=15.7700 s, Time Ratio=84.2739 +Physical time=1330.0000 s, CPU time=15.7750 s, Time Ratio=84.3106 +Physical time=1331.0000 s, CPU time=15.7800 s, Time Ratio=84.3473 +Physical time=1332.0000 s, CPU time=15.7850 s, Time Ratio=84.3839 +Physical time=1333.0000 s, CPU time=15.7900 s, Time Ratio=84.4205 +Physical time=1334.0000 s, CPU time=15.7960 s, Time Ratio=84.4518 +Physical time=1335.0000 s, CPU time=15.8020 s, Time Ratio=84.4830 +Physical time=1336.0000 s, CPU time=15.8080 s, Time Ratio=84.5142 +Physical time=1337.0000 s, CPU time=15.8160 s, Time Ratio=84.5346 +Physical time=1338.0000 s, CPU time=15.8220 s, Time Ratio=84.5658 +Physical time=1339.0000 s, CPU time=15.8280 s, Time Ratio=84.5969 +Physical time=1340.0000 s, CPU time=15.8350 s, Time Ratio=84.6227 +Physical time=1341.0000 s, CPU time=15.8400 s, Time Ratio=84.6591 +Physical time=1342.0000 s, CPU time=15.8460 s, Time Ratio=84.6901 +Physical time=1343.0000 s, CPU time=15.8530 s, Time Ratio=84.7158 +Physical time=1344.0000 s, CPU time=15.8580 s, Time Ratio=84.7522 +Physical time=1345.0000 s, CPU time=15.8640 s, Time Ratio=84.7832 +Physical time=1346.0000 s, CPU time=15.8690 s, Time Ratio=84.8195 +Physical time=1347.0000 s, CPU time=15.8760 s, Time Ratio=84.8450 +Physical time=1348.0000 s, CPU time=15.8820 s, Time Ratio=84.8760 +Physical time=1349.0000 s, CPU time=15.8880 s, Time Ratio=84.9068 +Physical time=1350.0000 s, CPU time=15.8930 s, Time Ratio=84.9431 +Physical time=1351.0000 s, CPU time=15.8990 s, Time Ratio=84.9739 +Physical time=1352.0000 s, CPU time=15.9090 s, Time Ratio=84.9833 +Physical time=1353.0000 s, CPU time=15.9190 s, Time Ratio=84.9928 +Physical time=1354.0000 s, CPU time=15.9250 s, Time Ratio=85.0235 +Physical time=1355.0000 s, CPU time=15.9320 s, Time Ratio=85.0490 +Physical time=1356.0000 s, CPU time=15.9380 s, Time Ratio=85.0797 +Physical time=1357.0000 s, CPU time=15.9430 s, Time Ratio=85.1157 +Physical time=1358.0000 s, CPU time=15.9550 s, Time Ratio=85.1144 +Physical time=1359.0000 s, CPU time=15.9620 s, Time Ratio=85.1397 +Physical time=1360.0000 s, CPU time=15.9680 s, Time Ratio=85.1703 +Physical time=1361.0000 s, CPU time=15.9740 s, Time Ratio=85.2010 +Physical time=1362.0000 s, CPU time=15.9800 s, Time Ratio=85.2315 +Physical time=1363.0000 s, CPU time=15.9850 s, Time Ratio=85.2674 +Physical time=1364.0000 s, CPU time=15.9910 s, Time Ratio=85.2980 +Physical time=1365.0000 s, CPU time=15.9990 s, Time Ratio=85.3178 +Physical time=1366.0000 s, CPU time=16.0040 s, Time Ratio=85.3537 +Physical time=1367.0000 s, CPU time=16.0090 s, Time Ratio=85.3895 +Physical time=1368.0000 s, CPU time=16.0150 s, Time Ratio=85.4199 +Physical time=1369.0000 s, CPU time=16.0200 s, Time Ratio=85.4557 +Physical time=1370.0000 s, CPU time=16.0250 s, Time Ratio=85.4914 +Physical time=1371.0000 s, CPU time=16.0360 s, Time Ratio=85.4951 +Physical time=1372.0000 s, CPU time=16.0450 s, Time Ratio=85.5095 +Physical time=1373.0000 s, CPU time=16.0500 s, Time Ratio=85.5452 +Physical time=1374.0000 s, CPU time=16.0550 s, Time Ratio=85.5808 +Physical time=1375.0000 s, CPU time=16.0610 s, Time Ratio=85.6111 +Physical time=1376.0000 s, CPU time=16.0660 s, Time Ratio=85.6467 +Physical time=1377.0000 s, CPU time=16.0710 s, Time Ratio=85.6823 +Physical time=1378.0000 s, CPU time=16.0790 s, Time Ratio=85.7018 +Physical time=1379.0000 s, CPU time=16.0840 s, Time Ratio=85.7374 +Physical time=1380.0000 s, CPU time=16.0900 s, Time Ratio=85.7676 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.869703[degC] + North Wall: T=19.869719[degC] + Ceiling: T=19.869078[degC] + Floor: T=19.870691[degC] + West Wall: T=19.870590[degC] + West Wall (glass, unshaded): T=2.407146[degC] + East Wall: T=19.870483[degC] + East Wall (glass, unshaded): T=2.406418[degC] + East Wall (frame): T=8.647615[degC] + West Wall (frame): T=8.648599[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1380.000000[s] + Averaged room temperature 17.349161[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.278487[W] + North Wall: -1.280227[W] + Ceiling: -1.252251[W] + Floor: -1.393603[W] + West Wall: -0.686330[W] + West Wall (glass, unshaded): 3.082620[W] + East Wall: -0.684510[W] + East Wall (glass, unshaded): 3.083246[W] + East Wall (frame): 0.446854[W] + West Wall (frame): 0.446773[W] + Sensor Information: + Occupied zone air temperature: 290.499161 + Velocity: 0.074666 +ffd_solver(): Synchronized data at t=1380.000000[s] + +Physical time=1381.0000 s, CPU time=16.2070 s, Time Ratio=85.2101 +Physical time=1382.0000 s, CPU time=16.2240 s, Time Ratio=85.1824 +Physical time=1383.0000 s, CPU time=16.2300 s, Time Ratio=85.2126 +Physical time=1384.0000 s, CPU time=16.2360 s, Time Ratio=85.2427 +Physical time=1385.0000 s, CPU time=16.2410 s, Time Ratio=85.2780 +Physical time=1386.0000 s, CPU time=16.2460 s, Time Ratio=85.3133 +Physical time=1387.0000 s, CPU time=16.2560 s, Time Ratio=85.3223 +Physical time=1388.0000 s, CPU time=16.2640 s, Time Ratio=85.3419 +Physical time=1389.0000 s, CPU time=16.2710 s, Time Ratio=85.3666 +Physical time=1390.0000 s, CPU time=16.2820 s, Time Ratio=85.3703 +Physical time=1391.0000 s, CPU time=16.2890 s, Time Ratio=85.3951 +Physical time=1392.0000 s, CPU time=16.3000 s, Time Ratio=85.3988 +Physical time=1393.0000 s, CPU time=16.3150 s, Time Ratio=85.3816 +Physical time=1394.0000 s, CPU time=16.3260 s, Time Ratio=85.3853 +Physical time=1395.0000 s, CPU time=16.3370 s, Time Ratio=85.3890 +Physical time=1396.0000 s, CPU time=16.3440 s, Time Ratio=85.4136 +Physical time=1397.0000 s, CPU time=16.3530 s, Time Ratio=85.4278 +Physical time=1398.0000 s, CPU time=16.3620 s, Time Ratio=85.4419 +Physical time=1399.0000 s, CPU time=16.3700 s, Time Ratio=85.4612 +Physical time=1400.0000 s, CPU time=16.3810 s, Time Ratio=85.4649 +Physical time=1401.0000 s, CPU time=16.3920 s, Time Ratio=85.4685 +Physical time=1402.0000 s, CPU time=16.3980 s, Time Ratio=85.4982 +Physical time=1403.0000 s, CPU time=16.4030 s, Time Ratio=85.5331 +Physical time=1404.0000 s, CPU time=16.4080 s, Time Ratio=85.5680 +Physical time=1405.0000 s, CPU time=16.4180 s, Time Ratio=85.5768 +Physical time=1406.0000 s, CPU time=16.4240 s, Time Ratio=85.6064 +Physical time=1407.0000 s, CPU time=16.4290 s, Time Ratio=85.6412 +Physical time=1408.0000 s, CPU time=16.4340 s, Time Ratio=85.6760 +Physical time=1409.0000 s, CPU time=16.4390 s, Time Ratio=85.7108 +Physical time=1410.0000 s, CPU time=16.4450 s, Time Ratio=85.7403 +Physical time=1411.0000 s, CPU time=16.4500 s, Time Ratio=85.7751 +Physical time=1412.0000 s, CPU time=16.4550 s, Time Ratio=85.8098 +Physical time=1413.0000 s, CPU time=16.4660 s, Time Ratio=85.8132 +Physical time=1414.0000 s, CPU time=16.4760 s, Time Ratio=85.8218 +Physical time=1415.0000 s, CPU time=16.4810 s, Time Ratio=85.8564 +Physical time=1416.0000 s, CPU time=16.4870 s, Time Ratio=85.8858 +Physical time=1417.0000 s, CPU time=16.4960 s, Time Ratio=85.8996 +Physical time=1418.0000 s, CPU time=16.5020 s, Time Ratio=85.9290 +Physical time=1419.0000 s, CPU time=16.5110 s, Time Ratio=85.9427 +Physical time=1420.0000 s, CPU time=16.5190 s, Time Ratio=85.9616 +Physical time=1421.0000 s, CPU time=16.5260 s, Time Ratio=85.9857 +Physical time=1422.0000 s, CPU time=16.5310 s, Time Ratio=86.0202 +Physical time=1423.0000 s, CPU time=16.5370 s, Time Ratio=86.0495 +Physical time=1424.0000 s, CPU time=16.5450 s, Time Ratio=86.0683 +Physical time=1425.0000 s, CPU time=16.5550 s, Time Ratio=86.0767 +Physical time=1426.0000 s, CPU time=16.5610 s, Time Ratio=86.1059 +Physical time=1427.0000 s, CPU time=16.5670 s, Time Ratio=86.1351 +Physical time=1428.0000 s, CPU time=16.5740 s, Time Ratio=86.1590 +Physical time=1429.0000 s, CPU time=16.5800 s, Time Ratio=86.1882 +Physical time=1430.0000 s, CPU time=16.5860 s, Time Ratio=86.2173 +Physical time=1431.0000 s, CPU time=16.5920 s, Time Ratio=86.2464 +Physical time=1432.0000 s, CPU time=16.5970 s, Time Ratio=86.2807 +Physical time=1433.0000 s, CPU time=16.6020 s, Time Ratio=86.3149 +Physical time=1434.0000 s, CPU time=16.6100 s, Time Ratio=86.3335 +Physical time=1435.0000 s, CPU time=16.6190 s, Time Ratio=86.3470 +Physical time=1436.0000 s, CPU time=16.6250 s, Time Ratio=86.3759 +Physical time=1437.0000 s, CPU time=16.6300 s, Time Ratio=86.4101 +Physical time=1438.0000 s, CPU time=16.6350 s, Time Ratio=86.4442 +Physical time=1439.0000 s, CPU time=16.6410 s, Time Ratio=86.4732 +Physical time=1440.0000 s, CPU time=16.6470 s, Time Ratio=86.5021 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.864160[degC] + North Wall: T=19.864176[degC] + Ceiling: T=19.863514[degC] + Floor: T=19.865193[degC] + West Wall: T=19.865077[degC] + West Wall (glass, unshaded): T=2.389480[degC] + East Wall: T=19.864975[degC] + East Wall (glass, unshaded): T=2.388832[degC] + East Wall (frame): T=8.635140[degC] + West Wall (frame): T=8.636093[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1440.000000[s] + Averaged room temperature 17.365624[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.263509[W] + North Wall: -1.268535[W] + Ceiling: -1.223751[W] + Floor: -1.349474[W] + West Wall: -0.670941[W] + West Wall (glass, unshaded): 3.099253[W] + East Wall: -0.668061[W] + East Wall (glass, unshaded): 3.099207[W] + East Wall (frame): 0.450870[W] + West Wall (frame): 0.449759[W] + Sensor Information: + Occupied zone air temperature: 290.515624 + Velocity: 0.042036 +ffd_solver(): Synchronized data at t=1440.000000[s] + +Physical time=1441.0000 s, CPU time=16.7510 s, Time Ratio=86.0247 +Physical time=1442.0000 s, CPU time=16.7570 s, Time Ratio=86.0536 +Physical time=1443.0000 s, CPU time=16.7630 s, Time Ratio=86.0824 +Physical time=1444.0000 s, CPU time=16.7690 s, Time Ratio=86.1113 +Physical time=1445.0000 s, CPU time=16.7750 s, Time Ratio=86.1401 +Physical time=1446.0000 s, CPU time=16.7810 s, Time Ratio=86.1689 +Physical time=1447.0000 s, CPU time=16.7870 s, Time Ratio=86.1977 +Physical time=1448.0000 s, CPU time=16.7960 s, Time Ratio=86.2110 +Physical time=1449.0000 s, CPU time=16.8030 s, Time Ratio=86.2346 +Physical time=1450.0000 s, CPU time=16.8100 s, Time Ratio=86.2582 +Physical time=1451.0000 s, CPU time=16.8210 s, Time Ratio=86.2612 +Physical time=1452.0000 s, CPU time=16.8320 s, Time Ratio=86.2643 +Physical time=1453.0000 s, CPU time=16.8430 s, Time Ratio=86.2673 +Physical time=1454.0000 s, CPU time=16.8540 s, Time Ratio=86.2703 +Physical time=1455.0000 s, CPU time=16.8690 s, Time Ratio=86.2529 +Physical time=1456.0000 s, CPU time=16.8790 s, Time Ratio=86.2610 +Physical time=1457.0000 s, CPU time=16.8880 s, Time Ratio=86.2743 +Physical time=1458.0000 s, CPU time=16.9010 s, Time Ratio=86.2671 +Physical time=1459.0000 s, CPU time=16.9140 s, Time Ratio=86.2599 +Physical time=1460.0000 s, CPU time=16.9300 s, Time Ratio=86.2374 +Physical time=1461.0000 s, CPU time=16.9420 s, Time Ratio=86.2354 +Physical time=1462.0000 s, CPU time=16.9530 s, Time Ratio=86.2384 +Physical time=1463.0000 s, CPU time=16.9630 s, Time Ratio=86.2465 +Physical time=1464.0000 s, CPU time=16.9720 s, Time Ratio=86.2597 +Physical time=1465.0000 s, CPU time=16.9800 s, Time Ratio=86.2780 +Physical time=1466.0000 s, CPU time=16.9880 s, Time Ratio=86.2962 +Physical time=1467.0000 s, CPU time=16.9960 s, Time Ratio=86.3144 +Physical time=1468.0000 s, CPU time=17.0040 s, Time Ratio=86.3326 +Physical time=1469.0000 s, CPU time=17.0130 s, Time Ratio=86.3457 +Physical time=1470.0000 s, CPU time=17.0210 s, Time Ratio=86.3639 +Physical time=1471.0000 s, CPU time=17.0280 s, Time Ratio=86.3871 +Physical time=1472.0000 s, CPU time=17.0340 s, Time Ratio=86.4154 +Physical time=1473.0000 s, CPU time=17.0400 s, Time Ratio=86.4437 +Physical time=1474.0000 s, CPU time=17.0450 s, Time Ratio=86.4770 +Physical time=1475.0000 s, CPU time=17.0500 s, Time Ratio=86.5103 +Physical time=1476.0000 s, CPU time=17.0560 s, Time Ratio=86.5385 +Physical time=1477.0000 s, CPU time=17.0610 s, Time Ratio=86.5717 +Physical time=1478.0000 s, CPU time=17.0660 s, Time Ratio=86.6049 +Physical time=1479.0000 s, CPU time=17.0710 s, Time Ratio=86.6382 +Physical time=1480.0000 s, CPU time=17.0760 s, Time Ratio=86.6714 +Physical time=1481.0000 s, CPU time=17.0800 s, Time Ratio=86.7096 +Physical time=1482.0000 s, CPU time=17.0860 s, Time Ratio=86.7377 +Physical time=1483.0000 s, CPU time=17.0910 s, Time Ratio=86.7708 +Physical time=1484.0000 s, CPU time=17.0950 s, Time Ratio=86.8090 +Physical time=1485.0000 s, CPU time=17.1000 s, Time Ratio=86.8421 +Physical time=1486.0000 s, CPU time=17.1050 s, Time Ratio=86.8752 +Physical time=1487.0000 s, CPU time=17.1100 s, Time Ratio=86.9082 +Physical time=1488.0000 s, CPU time=17.1150 s, Time Ratio=86.9413 +Physical time=1489.0000 s, CPU time=17.1200 s, Time Ratio=86.9743 +Physical time=1490.0000 s, CPU time=17.1250 s, Time Ratio=87.0073 +Physical time=1491.0000 s, CPU time=17.1300 s, Time Ratio=87.0403 +Physical time=1492.0000 s, CPU time=17.1340 s, Time Ratio=87.0783 +Physical time=1493.0000 s, CPU time=17.1390 s, Time Ratio=87.1113 +Physical time=1494.0000 s, CPU time=17.1440 s, Time Ratio=87.1442 +Physical time=1495.0000 s, CPU time=17.1490 s, Time Ratio=87.1771 +Physical time=1496.0000 s, CPU time=17.1540 s, Time Ratio=87.2100 +Physical time=1497.0000 s, CPU time=17.1590 s, Time Ratio=87.2428 +Physical time=1498.0000 s, CPU time=17.1640 s, Time Ratio=87.2757 +Physical time=1499.0000 s, CPU time=17.1690 s, Time Ratio=87.3085 +Physical time=1500.0000 s, CPU time=17.1800 s, Time Ratio=87.3108 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.858665[degC] + North Wall: T=19.858683[degC] + Ceiling: T=19.858009[degC] + Floor: T=19.859744[degC] + West Wall: T=19.859620[degC] + West Wall (glass, unshaded): T=2.372820[degC] + East Wall: T=19.859518[degC] + East Wall (glass, unshaded): T=2.372230[degC] + East Wall (frame): T=8.622743[degC] + West Wall (frame): T=8.623696[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1500.000000[s] + Averaged room temperature 17.360371[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.270989[W] + North Wall: -1.275077[W] + Ceiling: -1.204691[W] + Floor: -1.368769[W] + West Wall: -0.669317[W] + West Wall (glass, unshaded): 3.088443[W] + East Wall: -0.670763[W] + East Wall (glass, unshaded): 3.090182[W] + East Wall (frame): 0.449916[W] + West Wall (frame): 0.450486[W] + Sensor Information: + Occupied zone air temperature: 290.510371 + Velocity: 0.045085 +ffd_solver(): Synchronized data at t=1500.000000[s] + +Physical time=1501.0000 s, CPU time=17.3240 s, Time Ratio=86.6428 +Physical time=1502.0000 s, CPU time=17.3310 s, Time Ratio=86.6655 +Physical time=1503.0000 s, CPU time=17.3360 s, Time Ratio=86.6982 +Physical time=1504.0000 s, CPU time=17.3420 s, Time Ratio=86.7259 +Physical time=1505.0000 s, CPU time=17.3490 s, Time Ratio=86.7485 +Physical time=1506.0000 s, CPU time=17.3550 s, Time Ratio=86.7761 +Physical time=1507.0000 s, CPU time=17.3600 s, Time Ratio=86.8088 +Physical time=1508.0000 s, CPU time=17.3650 s, Time Ratio=86.8413 +Physical time=1509.0000 s, CPU time=17.3700 s, Time Ratio=86.8739 +Physical time=1510.0000 s, CPU time=17.3750 s, Time Ratio=86.9065 +Physical time=1511.0000 s, CPU time=17.3810 s, Time Ratio=86.9340 +Physical time=1512.0000 s, CPU time=17.3870 s, Time Ratio=86.9615 +Physical time=1513.0000 s, CPU time=17.3920 s, Time Ratio=86.9940 +Physical time=1514.0000 s, CPU time=17.4030 s, Time Ratio=86.9965 +Physical time=1515.0000 s, CPU time=17.4090 s, Time Ratio=87.0240 +Physical time=1516.0000 s, CPU time=17.4150 s, Time Ratio=87.0514 +Physical time=1517.0000 s, CPU time=17.4200 s, Time Ratio=87.0838 +Physical time=1518.0000 s, CPU time=17.4250 s, Time Ratio=87.1162 +Physical time=1519.0000 s, CPU time=17.4350 s, Time Ratio=87.1236 +Physical time=1520.0000 s, CPU time=17.4440 s, Time Ratio=87.1360 +Physical time=1521.0000 s, CPU time=17.4500 s, Time Ratio=87.1633 +Physical time=1522.0000 s, CPU time=17.4560 s, Time Ratio=87.1907 +Physical time=1523.0000 s, CPU time=17.4620 s, Time Ratio=87.2180 +Physical time=1524.0000 s, CPU time=17.4690 s, Time Ratio=87.2403 +Physical time=1525.0000 s, CPU time=17.4760 s, Time Ratio=87.2625 +Physical time=1526.0000 s, CPU time=17.4820 s, Time Ratio=87.2898 +Physical time=1527.0000 s, CPU time=17.4940 s, Time Ratio=87.2871 +Physical time=1528.0000 s, CPU time=17.5010 s, Time Ratio=87.3093 +Physical time=1529.0000 s, CPU time=17.5080 s, Time Ratio=87.3315 +Physical time=1530.0000 s, CPU time=17.5150 s, Time Ratio=87.3537 +Physical time=1531.0000 s, CPU time=17.5210 s, Time Ratio=87.3809 +Physical time=1532.0000 s, CPU time=17.5310 s, Time Ratio=87.3881 +Physical time=1533.0000 s, CPU time=17.5420 s, Time Ratio=87.3903 +Physical time=1534.0000 s, CPU time=17.5480 s, Time Ratio=87.4174 +Physical time=1535.0000 s, CPU time=17.5570 s, Time Ratio=87.4295 +Physical time=1536.0000 s, CPU time=17.5650 s, Time Ratio=87.4466 +Physical time=1537.0000 s, CPU time=17.5730 s, Time Ratio=87.4637 +Physical time=1538.0000 s, CPU time=17.5830 s, Time Ratio=87.4709 +Physical time=1539.0000 s, CPU time=17.5910 s, Time Ratio=87.4879 +Physical time=1540.0000 s, CPU time=17.5990 s, Time Ratio=87.5050 +Physical time=1541.0000 s, CPU time=17.6050 s, Time Ratio=87.5320 +Physical time=1542.0000 s, CPU time=17.6100 s, Time Ratio=87.5639 +Physical time=1543.0000 s, CPU time=17.6160 s, Time Ratio=87.5908 +Physical time=1544.0000 s, CPU time=17.6210 s, Time Ratio=87.6227 +Physical time=1545.0000 s, CPU time=17.6260 s, Time Ratio=87.6546 +Physical time=1546.0000 s, CPU time=17.6320 s, Time Ratio=87.6815 +Physical time=1547.0000 s, CPU time=17.6380 s, Time Ratio=87.7084 +Physical time=1548.0000 s, CPU time=17.6450 s, Time Ratio=87.7302 +Physical time=1549.0000 s, CPU time=17.6520 s, Time Ratio=87.7521 +Physical time=1550.0000 s, CPU time=17.6580 s, Time Ratio=87.7789 +Physical time=1551.0000 s, CPU time=17.6640 s, Time Ratio=87.8057 +Physical time=1552.0000 s, CPU time=17.6710 s, Time Ratio=87.8275 +Physical time=1553.0000 s, CPU time=17.6770 s, Time Ratio=87.8543 +Physical time=1554.0000 s, CPU time=17.6820 s, Time Ratio=87.8860 +Physical time=1555.0000 s, CPU time=17.6880 s, Time Ratio=87.9127 +Physical time=1556.0000 s, CPU time=17.6930 s, Time Ratio=87.9444 +Physical time=1557.0000 s, CPU time=17.6990 s, Time Ratio=87.9711 +Physical time=1558.0000 s, CPU time=17.7040 s, Time Ratio=88.0027 +Physical time=1559.0000 s, CPU time=17.7120 s, Time Ratio=88.0194 +Physical time=1560.0000 s, CPU time=17.7190 s, Time Ratio=88.0411 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.853225[degC] + North Wall: T=19.853246[degC] + Ceiling: T=19.852545[degC] + Floor: T=19.854343[degC] + West Wall: T=19.854209[degC] + West Wall (glass, unshaded): T=2.357325[degC] + East Wall: T=19.854109[degC] + East Wall (glass, unshaded): T=2.356772[degC] + East Wall (frame): T=8.610432[degC] + West Wall (frame): T=8.611375[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1560.000000[s] + Averaged room temperature 17.369292[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.257160[W] + North Wall: -1.264453[W] + Ceiling: -1.235463[W] + Floor: -1.365738[W] + West Wall: -0.676108[W] + West Wall (glass, unshaded): 3.097779[W] + East Wall: -0.670089[W] + East Wall (glass, unshaded): 3.102032[W] + East Wall (frame): 0.451388[W] + West Wall (frame): 0.448683[W] + Sensor Information: + Occupied zone air temperature: 290.519292 + Velocity: 0.018012 +ffd_solver(): Synchronized data at t=1560.000000[s] + +Physical time=1561.0000 s, CPU time=17.8170 s, Time Ratio=87.6130 +Physical time=1562.0000 s, CPU time=17.8220 s, Time Ratio=87.6445 +Physical time=1563.0000 s, CPU time=17.8280 s, Time Ratio=87.6711 +Physical time=1564.0000 s, CPU time=17.8330 s, Time Ratio=87.7026 +Physical time=1565.0000 s, CPU time=17.8380 s, Time Ratio=87.7341 +Physical time=1566.0000 s, CPU time=17.8430 s, Time Ratio=87.7655 +Physical time=1567.0000 s, CPU time=17.8480 s, Time Ratio=87.7970 +Physical time=1568.0000 s, CPU time=17.8540 s, Time Ratio=87.8235 +Physical time=1569.0000 s, CPU time=17.8590 s, Time Ratio=87.8549 +Physical time=1570.0000 s, CPU time=17.8640 s, Time Ratio=87.8863 +Physical time=1571.0000 s, CPU time=17.8690 s, Time Ratio=87.9176 +Physical time=1572.0000 s, CPU time=17.8740 s, Time Ratio=87.9490 +Physical time=1573.0000 s, CPU time=17.8810 s, Time Ratio=87.9705 +Physical time=1574.0000 s, CPU time=17.8870 s, Time Ratio=87.9969 +Physical time=1575.0000 s, CPU time=17.8920 s, Time Ratio=88.0282 +Physical time=1576.0000 s, CPU time=17.8980 s, Time Ratio=88.0545 +Physical time=1577.0000 s, CPU time=17.9030 s, Time Ratio=88.0858 +Physical time=1578.0000 s, CPU time=17.9080 s, Time Ratio=88.1170 +Physical time=1579.0000 s, CPU time=17.9160 s, Time Ratio=88.1335 +Physical time=1580.0000 s, CPU time=17.9220 s, Time Ratio=88.1598 +Physical time=1581.0000 s, CPU time=17.9280 s, Time Ratio=88.1861 +Physical time=1582.0000 s, CPU time=17.9330 s, Time Ratio=88.2173 +Physical time=1583.0000 s, CPU time=17.9380 s, Time Ratio=88.2484 +Physical time=1584.0000 s, CPU time=17.9440 s, Time Ratio=88.2746 +Physical time=1585.0000 s, CPU time=17.9500 s, Time Ratio=88.3008 +Physical time=1586.0000 s, CPU time=17.9550 s, Time Ratio=88.3319 +Physical time=1587.0000 s, CPU time=17.9620 s, Time Ratio=88.3532 +Physical time=1588.0000 s, CPU time=17.9680 s, Time Ratio=88.3793 +Physical time=1589.0000 s, CPU time=17.9750 s, Time Ratio=88.4006 +Physical time=1590.0000 s, CPU time=17.9800 s, Time Ratio=88.4316 +Physical time=1591.0000 s, CPU time=17.9880 s, Time Ratio=88.4479 +Physical time=1592.0000 s, CPU time=17.9930 s, Time Ratio=88.4789 +Physical time=1593.0000 s, CPU time=17.9980 s, Time Ratio=88.5098 +Physical time=1594.0000 s, CPU time=18.0030 s, Time Ratio=88.5408 +Physical time=1595.0000 s, CPU time=18.0080 s, Time Ratio=88.5717 +Physical time=1596.0000 s, CPU time=18.0180 s, Time Ratio=88.5781 +Physical time=1597.0000 s, CPU time=18.0280 s, Time Ratio=88.5844 +Physical time=1598.0000 s, CPU time=18.0360 s, Time Ratio=88.6006 +Physical time=1599.0000 s, CPU time=18.0440 s, Time Ratio=88.6167 +Physical time=1600.0000 s, CPU time=18.0510 s, Time Ratio=88.6377 +Physical time=1601.0000 s, CPU time=18.0590 s, Time Ratio=88.6539 +Physical time=1602.0000 s, CPU time=18.0680 s, Time Ratio=88.6650 +Physical time=1603.0000 s, CPU time=18.0740 s, Time Ratio=88.6909 +Physical time=1604.0000 s, CPU time=18.0870 s, Time Ratio=88.6825 +Physical time=1605.0000 s, CPU time=18.0940 s, Time Ratio=88.7034 +Physical time=1606.0000 s, CPU time=18.1000 s, Time Ratio=88.7293 +Physical time=1607.0000 s, CPU time=18.1080 s, Time Ratio=88.7453 +Physical time=1608.0000 s, CPU time=18.1140 s, Time Ratio=88.7711 +Physical time=1609.0000 s, CPU time=18.1220 s, Time Ratio=88.7871 +Physical time=1610.0000 s, CPU time=18.1290 s, Time Ratio=88.8080 +Physical time=1611.0000 s, CPU time=18.1360 s, Time Ratio=88.8288 +Physical time=1612.0000 s, CPU time=18.1440 s, Time Ratio=88.8448 +Physical time=1613.0000 s, CPU time=18.1510 s, Time Ratio=88.8656 +Physical time=1614.0000 s, CPU time=18.1590 s, Time Ratio=88.8815 +Physical time=1615.0000 s, CPU time=18.1690 s, Time Ratio=88.8877 +Physical time=1616.0000 s, CPU time=18.1770 s, Time Ratio=88.9036 +Physical time=1617.0000 s, CPU time=18.1860 s, Time Ratio=88.9145 +Physical time=1618.0000 s, CPU time=18.1960 s, Time Ratio=88.9206 +Physical time=1619.0000 s, CPU time=18.2050 s, Time Ratio=88.9316 +Physical time=1620.0000 s, CPU time=18.2130 s, Time Ratio=88.9475 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.847839[degC] + North Wall: T=19.847862[degC] + Ceiling: T=19.847142[degC] + Floor: T=19.849003[degC] + West Wall: T=19.848856[degC] + West Wall (glass, unshaded): T=2.342988[degC] + East Wall: T=19.848757[degC] + East Wall (glass, unshaded): T=2.342409[degC] + East Wall (frame): T=8.598248[degC] + West Wall (frame): T=8.599205[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1620.000000[s] + Averaged room temperature 17.372649[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.258592[W] + North Wall: -1.252430[W] + Ceiling: -1.202885[W] + Floor: -1.348181[W] + West Wall: -0.658455[W] + West Wall (glass, unshaded): 3.105922[W] + East Wall: -0.669660[W] + East Wall (glass, unshaded): 3.105721[W] + East Wall (frame): 0.451205[W] + West Wall (frame): 0.453719[W] + Sensor Information: + Occupied zone air temperature: 290.522649 + Velocity: 0.011318 +ffd_solver(): Synchronized data at t=1620.000000[s] + +Physical time=1621.0000 s, CPU time=18.3140 s, Time Ratio=88.5115 +Physical time=1622.0000 s, CPU time=18.3210 s, Time Ratio=88.5323 +Physical time=1623.0000 s, CPU time=18.3280 s, Time Ratio=88.5530 +Physical time=1624.0000 s, CPU time=18.3340 s, Time Ratio=88.5786 +Physical time=1625.0000 s, CPU time=18.3390 s, Time Ratio=88.6090 +Physical time=1626.0000 s, CPU time=18.3460 s, Time Ratio=88.6297 +Physical time=1627.0000 s, CPU time=18.3510 s, Time Ratio=88.6600 +Physical time=1628.0000 s, CPU time=18.3570 s, Time Ratio=88.6855 +Physical time=1629.0000 s, CPU time=18.3630 s, Time Ratio=88.7110 +Physical time=1630.0000 s, CPU time=18.3680 s, Time Ratio=88.7413 +Physical time=1631.0000 s, CPU time=18.3750 s, Time Ratio=88.7619 +Physical time=1632.0000 s, CPU time=18.3840 s, Time Ratio=88.7728 +Physical time=1633.0000 s, CPU time=18.3910 s, Time Ratio=88.7934 +Physical time=1634.0000 s, CPU time=18.3990 s, Time Ratio=88.8092 +Physical time=1635.0000 s, CPU time=18.4080 s, Time Ratio=88.8201 +Physical time=1636.0000 s, CPU time=18.4170 s, Time Ratio=88.8310 +Physical time=1637.0000 s, CPU time=18.4240 s, Time Ratio=88.8515 +Physical time=1638.0000 s, CPU time=18.4300 s, Time Ratio=88.8768 +Physical time=1639.0000 s, CPU time=18.4360 s, Time Ratio=88.9021 +Physical time=1640.0000 s, CPU time=18.4410 s, Time Ratio=88.9323 +Physical time=1641.0000 s, CPU time=18.4460 s, Time Ratio=88.9624 +Physical time=1642.0000 s, CPU time=18.4510 s, Time Ratio=88.9925 +Physical time=1643.0000 s, CPU time=18.4570 s, Time Ratio=89.0177 +Physical time=1644.0000 s, CPU time=18.4620 s, Time Ratio=89.0478 +Physical time=1645.0000 s, CPU time=18.4670 s, Time Ratio=89.0778 +Physical time=1646.0000 s, CPU time=18.4720 s, Time Ratio=89.1078 +Physical time=1647.0000 s, CPU time=18.4790 s, Time Ratio=89.1282 +Physical time=1648.0000 s, CPU time=18.4840 s, Time Ratio=89.1582 +Physical time=1649.0000 s, CPU time=18.4890 s, Time Ratio=89.1882 +Physical time=1650.0000 s, CPU time=18.4950 s, Time Ratio=89.2133 +Physical time=1651.0000 s, CPU time=18.5030 s, Time Ratio=89.2288 +Physical time=1652.0000 s, CPU time=18.5100 s, Time Ratio=89.2491 +Physical time=1653.0000 s, CPU time=18.5150 s, Time Ratio=89.2790 +Physical time=1654.0000 s, CPU time=18.5210 s, Time Ratio=89.3040 +Physical time=1655.0000 s, CPU time=18.5260 s, Time Ratio=89.3339 +Physical time=1656.0000 s, CPU time=18.5320 s, Time Ratio=89.3589 +Physical time=1657.0000 s, CPU time=18.5370 s, Time Ratio=89.3888 +Physical time=1658.0000 s, CPU time=18.5440 s, Time Ratio=89.4090 +Physical time=1659.0000 s, CPU time=18.5530 s, Time Ratio=89.4195 +Physical time=1660.0000 s, CPU time=18.5590 s, Time Ratio=89.4445 +Physical time=1661.0000 s, CPU time=18.5670 s, Time Ratio=89.4598 +Physical time=1662.0000 s, CPU time=18.5780 s, Time Ratio=89.4607 +Physical time=1663.0000 s, CPU time=18.5850 s, Time Ratio=89.4808 +Physical time=1664.0000 s, CPU time=18.5910 s, Time Ratio=89.5057 +Physical time=1665.0000 s, CPU time=18.5990 s, Time Ratio=89.5209 +Physical time=1666.0000 s, CPU time=18.6040 s, Time Ratio=89.5506 +Physical time=1667.0000 s, CPU time=18.6110 s, Time Ratio=89.5707 +Physical time=1668.0000 s, CPU time=18.6190 s, Time Ratio=89.5859 +Physical time=1669.0000 s, CPU time=18.6250 s, Time Ratio=89.6107 +Physical time=1670.0000 s, CPU time=18.6320 s, Time Ratio=89.6307 +Physical time=1671.0000 s, CPU time=18.6380 s, Time Ratio=89.6555 +Physical time=1672.0000 s, CPU time=18.6440 s, Time Ratio=89.6803 +Physical time=1673.0000 s, CPU time=18.6510 s, Time Ratio=89.7003 +Physical time=1674.0000 s, CPU time=18.6560 s, Time Ratio=89.7298 +Physical time=1675.0000 s, CPU time=18.6620 s, Time Ratio=89.7546 +Physical time=1676.0000 s, CPU time=18.6670 s, Time Ratio=89.7841 +Physical time=1677.0000 s, CPU time=18.6720 s, Time Ratio=89.8136 +Physical time=1678.0000 s, CPU time=18.6780 s, Time Ratio=89.8383 +Physical time=1679.0000 s, CPU time=18.6840 s, Time Ratio=89.8630 +Physical time=1680.0000 s, CPU time=18.6890 s, Time Ratio=89.8925 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.842502[degC] + North Wall: T=19.842526[degC] + Ceiling: T=19.841792[degC] + Floor: T=19.843710[degC] + West Wall: T=19.843549[degC] + West Wall (glass, unshaded): T=2.329456[degC] + East Wall: T=19.843458[degC] + East Wall (glass, unshaded): T=2.328882[degC] + East Wall (frame): T=8.586180[degC] + West Wall (frame): T=8.587121[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1680.000000[s] + Averaged room temperature 17.363429[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.259722[W] + North Wall: -1.266847[W] + Ceiling: -1.185181[W] + Floor: -1.367213[W] + West Wall: -0.668054[W] + West Wall (glass, unshaded): 3.103072[W] + East Wall: -0.665462[W] + East Wall (glass, unshaded): 3.105655[W] + East Wall (frame): 0.452058[W] + West Wall (frame): 0.452575[W] + Sensor Information: + Occupied zone air temperature: 290.513429 + Velocity: 0.013901 +ffd_solver(): Synchronized data at t=1680.000000[s] + +Physical time=1681.0000 s, CPU time=18.7910 s, Time Ratio=89.4577 +Physical time=1682.0000 s, CPU time=18.7970 s, Time Ratio=89.4824 +Physical time=1683.0000 s, CPU time=18.8030 s, Time Ratio=89.5070 +Physical time=1684.0000 s, CPU time=18.8080 s, Time Ratio=89.5364 +Physical time=1685.0000 s, CPU time=18.8130 s, Time Ratio=89.5657 +Physical time=1686.0000 s, CPU time=18.8190 s, Time Ratio=89.5903 +Physical time=1687.0000 s, CPU time=18.8250 s, Time Ratio=89.6149 +Physical time=1688.0000 s, CPU time=18.8310 s, Time Ratio=89.6394 +Physical time=1689.0000 s, CPU time=18.8370 s, Time Ratio=89.6640 +Physical time=1690.0000 s, CPU time=18.8420 s, Time Ratio=89.6932 +Physical time=1691.0000 s, CPU time=18.8480 s, Time Ratio=89.7177 +Physical time=1692.0000 s, CPU time=18.8530 s, Time Ratio=89.7470 +Physical time=1693.0000 s, CPU time=18.8580 s, Time Ratio=89.7762 +Physical time=1694.0000 s, CPU time=18.8630 s, Time Ratio=89.8054 +Physical time=1695.0000 s, CPU time=18.8680 s, Time Ratio=89.8346 +Physical time=1696.0000 s, CPU time=18.8730 s, Time Ratio=89.8638 +Physical time=1697.0000 s, CPU time=18.8780 s, Time Ratio=89.8930 +Physical time=1698.0000 s, CPU time=18.8830 s, Time Ratio=89.9222 +Physical time=1699.0000 s, CPU time=18.8880 s, Time Ratio=89.9513 +Physical time=1700.0000 s, CPU time=18.8940 s, Time Ratio=89.9757 +Physical time=1701.0000 s, CPU time=18.8990 s, Time Ratio=90.0048 +Physical time=1702.0000 s, CPU time=18.9030 s, Time Ratio=90.0386 +Physical time=1703.0000 s, CPU time=18.9090 s, Time Ratio=90.0629 +Physical time=1704.0000 s, CPU time=18.9140 s, Time Ratio=90.0920 +Physical time=1705.0000 s, CPU time=18.9190 s, Time Ratio=90.1210 +Physical time=1706.0000 s, CPU time=18.9240 s, Time Ratio=90.1501 +Physical time=1707.0000 s, CPU time=18.9290 s, Time Ratio=90.1791 +Physical time=1708.0000 s, CPU time=18.9390 s, Time Ratio=90.1843 +Physical time=1709.0000 s, CPU time=18.9450 s, Time Ratio=90.2085 +Physical time=1710.0000 s, CPU time=18.9540 s, Time Ratio=90.2184 +Physical time=1711.0000 s, CPU time=18.9620 s, Time Ratio=90.2331 +Physical time=1712.0000 s, CPU time=18.9680 s, Time Ratio=90.2573 +Physical time=1713.0000 s, CPU time=18.9770 s, Time Ratio=90.2672 +Physical time=1714.0000 s, CPU time=18.9830 s, Time Ratio=90.2913 +Physical time=1715.0000 s, CPU time=18.9890 s, Time Ratio=90.3154 +Physical time=1716.0000 s, CPU time=18.9990 s, Time Ratio=90.3205 +Physical time=1717.0000 s, CPU time=19.0050 s, Time Ratio=90.3446 +Physical time=1718.0000 s, CPU time=19.0110 s, Time Ratio=90.3687 +Physical time=1719.0000 s, CPU time=19.0220 s, Time Ratio=90.3690 +Physical time=1720.0000 s, CPU time=19.0300 s, Time Ratio=90.3836 +Physical time=1721.0000 s, CPU time=19.0360 s, Time Ratio=90.4076 +Physical time=1722.0000 s, CPU time=19.0410 s, Time Ratio=90.4364 +Physical time=1723.0000 s, CPU time=19.0500 s, Time Ratio=90.4462 +Physical time=1724.0000 s, CPU time=19.0560 s, Time Ratio=90.4702 +Physical time=1725.0000 s, CPU time=19.0620 s, Time Ratio=90.4942 +Physical time=1726.0000 s, CPU time=19.0730 s, Time Ratio=90.4944 +Physical time=1727.0000 s, CPU time=19.0810 s, Time Ratio=90.5089 +Physical time=1728.0000 s, CPU time=19.0910 s, Time Ratio=90.5139 +Physical time=1729.0000 s, CPU time=19.1000 s, Time Ratio=90.5236 +Physical time=1730.0000 s, CPU time=19.1070 s, Time Ratio=90.5427 +Physical time=1731.0000 s, CPU time=19.1120 s, Time Ratio=90.5714 +Physical time=1732.0000 s, CPU time=19.1180 s, Time Ratio=90.5953 +Physical time=1733.0000 s, CPU time=19.1250 s, Time Ratio=90.6144 +Physical time=1734.0000 s, CPU time=19.1320 s, Time Ratio=90.6335 +Physical time=1735.0000 s, CPU time=19.1440 s, Time Ratio=90.6289 +Physical time=1736.0000 s, CPU time=19.1560 s, Time Ratio=90.6243 +Physical time=1737.0000 s, CPU time=19.1670 s, Time Ratio=90.6245 +Physical time=1738.0000 s, CPU time=19.1770 s, Time Ratio=90.6294 +Physical time=1739.0000 s, CPU time=19.1840 s, Time Ratio=90.6485 +Physical time=1740.0000 s, CPU time=19.1920 s, Time Ratio=90.6628 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.837219[degC] + North Wall: T=19.837242[degC] + Ceiling: T=19.836478[degC] + Floor: T=19.838469[degC] + West Wall: T=19.838290[degC] + West Wall (glass, unshaded): T=2.316832[degC] + East Wall: T=19.838207[degC] + East Wall (glass, unshaded): T=2.316283[degC] + East Wall (frame): T=8.574238[degC] + West Wall (frame): T=8.575115[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1740.000000[s] + Averaged room temperature 17.374095[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.250085[W] + North Wall: -1.253431[W] + Ceiling: -1.214538[W] + Floor: -1.359810[W] + West Wall: -0.670801[W] + West Wall (glass, unshaded): 3.107203[W] + East Wall: -0.669314[W] + East Wall (glass, unshaded): 3.108095[W] + East Wall (frame): 0.452137[W] + West Wall (frame): 0.450768[W] + Sensor Information: + Occupied zone air temperature: 290.524095 + Velocity: 0.031753 +ffd_solver(): Synchronized data at t=1740.000000[s] + +Physical time=1741.0000 s, CPU time=19.3050 s, Time Ratio=90.1839 +Physical time=1742.0000 s, CPU time=19.3100 s, Time Ratio=90.2123 +Physical time=1743.0000 s, CPU time=19.3170 s, Time Ratio=90.2314 +Physical time=1744.0000 s, CPU time=19.3270 s, Time Ratio=90.2365 +Physical time=1745.0000 s, CPU time=19.3380 s, Time Ratio=90.2368 +Physical time=1746.0000 s, CPU time=19.3430 s, Time Ratio=90.2652 +Physical time=1747.0000 s, CPU time=19.3510 s, Time Ratio=90.2796 +Physical time=1748.0000 s, CPU time=19.3590 s, Time Ratio=90.2939 +Physical time=1749.0000 s, CPU time=19.3650 s, Time Ratio=90.3176 +Physical time=1750.0000 s, CPU time=19.3710 s, Time Ratio=90.3412 +Physical time=1751.0000 s, CPU time=19.3780 s, Time Ratio=90.3602 +Physical time=1752.0000 s, CPU time=19.3850 s, Time Ratio=90.3792 +Physical time=1753.0000 s, CPU time=19.3950 s, Time Ratio=90.3841 +Physical time=1754.0000 s, CPU time=19.4010 s, Time Ratio=90.4077 +Physical time=1755.0000 s, CPU time=19.4110 s, Time Ratio=90.4127 +Physical time=1756.0000 s, CPU time=19.4160 s, Time Ratio=90.4409 +Physical time=1757.0000 s, CPU time=19.4280 s, Time Ratio=90.4365 +Physical time=1758.0000 s, CPU time=19.4390 s, Time Ratio=90.4368 +Physical time=1759.0000 s, CPU time=19.4490 s, Time Ratio=90.4417 +Physical time=1760.0000 s, CPU time=19.4600 s, Time Ratio=90.4419 +Physical time=1761.0000 s, CPU time=19.4660 s, Time Ratio=90.4654 +Physical time=1762.0000 s, CPU time=19.4720 s, Time Ratio=90.4889 +Physical time=1763.0000 s, CPU time=19.4850 s, Time Ratio=90.4799 +Physical time=1764.0000 s, CPU time=19.4910 s, Time Ratio=90.5033 +Physical time=1765.0000 s, CPU time=19.5010 s, Time Ratio=90.5082 +Physical time=1766.0000 s, CPU time=19.5080 s, Time Ratio=90.5270 +Physical time=1767.0000 s, CPU time=19.5140 s, Time Ratio=90.5504 +Physical time=1768.0000 s, CPU time=19.5210 s, Time Ratio=90.5691 +Physical time=1769.0000 s, CPU time=19.5270 s, Time Ratio=90.5925 +Physical time=1770.0000 s, CPU time=19.5330 s, Time Ratio=90.6159 +Physical time=1771.0000 s, CPU time=19.5410 s, Time Ratio=90.6300 +Physical time=1772.0000 s, CPU time=19.5480 s, Time Ratio=90.6487 +Physical time=1773.0000 s, CPU time=19.5560 s, Time Ratio=90.6627 +Physical time=1774.0000 s, CPU time=19.5630 s, Time Ratio=90.6814 +Physical time=1775.0000 s, CPU time=19.5720 s, Time Ratio=90.6908 +Physical time=1776.0000 s, CPU time=19.5790 s, Time Ratio=90.7094 +Physical time=1777.0000 s, CPU time=19.5880 s, Time Ratio=90.7188 +Physical time=1778.0000 s, CPU time=19.5950 s, Time Ratio=90.7374 +Physical time=1779.0000 s, CPU time=19.6030 s, Time Ratio=90.7514 +Physical time=1780.0000 s, CPU time=19.6100 s, Time Ratio=90.7700 +Physical time=1781.0000 s, CPU time=19.6180 s, Time Ratio=90.7840 +Physical time=1782.0000 s, CPU time=19.6250 s, Time Ratio=90.8025 +Physical time=1783.0000 s, CPU time=19.6310 s, Time Ratio=90.8257 +Physical time=1784.0000 s, CPU time=19.6370 s, Time Ratio=90.8489 +Physical time=1785.0000 s, CPU time=19.6440 s, Time Ratio=90.8674 +Physical time=1786.0000 s, CPU time=19.6500 s, Time Ratio=90.8906 +Physical time=1787.0000 s, CPU time=19.6560 s, Time Ratio=90.9137 +Physical time=1788.0000 s, CPU time=19.6610 s, Time Ratio=90.9415 +Physical time=1789.0000 s, CPU time=19.6670 s, Time Ratio=90.9646 +Physical time=1790.0000 s, CPU time=19.6720 s, Time Ratio=90.9923 +Physical time=1791.0000 s, CPU time=19.6770 s, Time Ratio=91.0200 +Physical time=1792.0000 s, CPU time=19.6820 s, Time Ratio=91.0477 +Physical time=1793.0000 s, CPU time=19.6870 s, Time Ratio=91.0753 +Physical time=1794.0000 s, CPU time=19.6930 s, Time Ratio=91.0984 +Physical time=1795.0000 s, CPU time=19.6990 s, Time Ratio=91.1214 +Physical time=1796.0000 s, CPU time=19.7050 s, Time Ratio=91.1444 +Physical time=1797.0000 s, CPU time=19.7120 s, Time Ratio=91.1627 +Physical time=1798.0000 s, CPU time=19.7190 s, Time Ratio=91.1811 +Physical time=1799.0000 s, CPU time=19.7250 s, Time Ratio=91.2041 +Physical time=1800.0000 s, CPU time=19.7320 s, Time Ratio=91.2224 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.831984[degC] + North Wall: T=19.832010[degC] + Ceiling: T=19.831220[degC] + Floor: T=19.833282[degC] + West Wall: T=19.833089[degC] + West Wall (glass, unshaded): T=2.305092[degC] + East Wall: T=19.833007[degC] + East Wall (glass, unshaded): T=2.304552[degC] + East Wall (frame): T=8.562419[degC] + West Wall (frame): T=8.563292[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1800.000000[s] + Averaged room temperature 17.379742[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.242290[W] + North Wall: -1.242870[W] + Ceiling: -1.193273[W] + Floor: -1.321120[W] + West Wall: -0.656737[W] + West Wall (glass, unshaded): 3.116978[W] + East Wall: -0.652799[W] + East Wall (glass, unshaded): 3.120900[W] + East Wall (frame): 0.455865[W] + West Wall (frame): 0.454923[W] + Sensor Information: + Occupied zone air temperature: 290.529742 + Velocity: 0.051978 +ffd_solver(): Synchronized data at t=1800.000000[s] + +Physical time=1801.0000 s, CPU time=19.8280 s, Time Ratio=90.8311 +Physical time=1802.0000 s, CPU time=19.8330 s, Time Ratio=90.8587 +Physical time=1803.0000 s, CPU time=19.8380 s, Time Ratio=90.8862 +Physical time=1804.0000 s, CPU time=19.8440 s, Time Ratio=90.9091 +Physical time=1805.0000 s, CPU time=19.8560 s, Time Ratio=90.9045 +Physical time=1806.0000 s, CPU time=19.8670 s, Time Ratio=90.9045 +Physical time=1807.0000 s, CPU time=19.8720 s, Time Ratio=90.9320 +Physical time=1808.0000 s, CPU time=19.8810 s, Time Ratio=90.9411 +Physical time=1809.0000 s, CPU time=19.8880 s, Time Ratio=90.9594 +Physical time=1810.0000 s, CPU time=19.8950 s, Time Ratio=90.9776 +Physical time=1811.0000 s, CPU time=19.9010 s, Time Ratio=91.0005 +Physical time=1812.0000 s, CPU time=19.9070 s, Time Ratio=91.0233 +Physical time=1813.0000 s, CPU time=19.9120 s, Time Ratio=91.0506 +Physical time=1814.0000 s, CPU time=19.9180 s, Time Ratio=91.0734 +Physical time=1815.0000 s, CPU time=19.9230 s, Time Ratio=91.1007 +Physical time=1816.0000 s, CPU time=19.9290 s, Time Ratio=91.1235 +Physical time=1817.0000 s, CPU time=19.9370 s, Time Ratio=91.1371 +Physical time=1818.0000 s, CPU time=19.9420 s, Time Ratio=91.1644 +Physical time=1819.0000 s, CPU time=19.9500 s, Time Ratio=91.1779 +Physical time=1820.0000 s, CPU time=19.9580 s, Time Ratio=91.1915 +Physical time=1821.0000 s, CPU time=19.9640 s, Time Ratio=91.2142 +Physical time=1822.0000 s, CPU time=19.9700 s, Time Ratio=91.2369 +Physical time=1823.0000 s, CPU time=19.9790 s, Time Ratio=91.2458 +Physical time=1824.0000 s, CPU time=19.9990 s, Time Ratio=91.2046 +Physical time=1825.0000 s, CPU time=20.0100 s, Time Ratio=91.2044 +Physical time=1826.0000 s, CPU time=20.0190 s, Time Ratio=91.2133 +Physical time=1827.0000 s, CPU time=20.0270 s, Time Ratio=91.2268 +Physical time=1828.0000 s, CPU time=20.0330 s, Time Ratio=91.2494 +Physical time=1829.0000 s, CPU time=20.0390 s, Time Ratio=91.2720 +Physical time=1830.0000 s, CPU time=20.0430 s, Time Ratio=91.3037 +Physical time=1831.0000 s, CPU time=20.0480 s, Time Ratio=91.3308 +Physical time=1832.0000 s, CPU time=20.0530 s, Time Ratio=91.3579 +Physical time=1833.0000 s, CPU time=20.0650 s, Time Ratio=91.3531 +Physical time=1834.0000 s, CPU time=20.0700 s, Time Ratio=91.3802 +Physical time=1835.0000 s, CPU time=20.0760 s, Time Ratio=91.4027 +Physical time=1836.0000 s, CPU time=20.0850 s, Time Ratio=91.4115 +Physical time=1837.0000 s, CPU time=20.0900 s, Time Ratio=91.4385 +Physical time=1838.0000 s, CPU time=20.0950 s, Time Ratio=91.4655 +Physical time=1839.0000 s, CPU time=20.1010 s, Time Ratio=91.4880 +Physical time=1840.0000 s, CPU time=20.1060 s, Time Ratio=91.5150 +Physical time=1841.0000 s, CPU time=20.1110 s, Time Ratio=91.5419 +Physical time=1842.0000 s, CPU time=20.1160 s, Time Ratio=91.5689 +Physical time=1843.0000 s, CPU time=20.1210 s, Time Ratio=91.5958 +Physical time=1844.0000 s, CPU time=20.1320 s, Time Ratio=91.5955 +Physical time=1845.0000 s, CPU time=20.1370 s, Time Ratio=91.6224 +Physical time=1846.0000 s, CPU time=20.1470 s, Time Ratio=91.6265 +Physical time=1847.0000 s, CPU time=20.1580 s, Time Ratio=91.6262 +Physical time=1848.0000 s, CPU time=20.1740 s, Time Ratio=91.6031 +Physical time=1849.0000 s, CPU time=20.1890 s, Time Ratio=91.5845 +Physical time=1850.0000 s, CPU time=20.2060 s, Time Ratio=91.5570 +Physical time=1851.0000 s, CPU time=20.2210 s, Time Ratio=91.5385 +Physical time=1852.0000 s, CPU time=20.2350 s, Time Ratio=91.5246 +Physical time=1853.0000 s, CPU time=20.2470 s, Time Ratio=91.5197 +Physical time=1854.0000 s, CPU time=20.2580 s, Time Ratio=91.5194 +Physical time=1855.0000 s, CPU time=20.2660 s, Time Ratio=91.5326 +Physical time=1856.0000 s, CPU time=20.2740 s, Time Ratio=91.5458 +Physical time=1857.0000 s, CPU time=20.2810 s, Time Ratio=91.5635 +Physical time=1858.0000 s, CPU time=20.2870 s, Time Ratio=91.5857 +Physical time=1859.0000 s, CPU time=20.2920 s, Time Ratio=91.6125 +Physical time=1860.0000 s, CPU time=20.2970 s, Time Ratio=91.6392 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.826793[degC] + North Wall: T=19.826820[degC] + Ceiling: T=19.826014[degC] + Floor: T=19.828130[degC] + West Wall: T=19.827930[degC] + West Wall (glass, unshaded): T=2.293991[degC] + East Wall: T=19.827849[degC] + East Wall (glass, unshaded): T=2.293440[degC] + East Wall (frame): T=8.550680[degC] + West Wall (frame): T=8.551572[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1860.000000[s] + Averaged room temperature 17.359196[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.257151[W] + North Wall: -1.258167[W] + Ceiling: -1.185965[W] + Floor: -1.361553[W] + West Wall: -0.661234[W] + West Wall (glass, unshaded): 3.108270[W] + East Wall: -0.668272[W] + East Wall (glass, unshaded): 3.109280[W] + East Wall (frame): 0.453418[W] + West Wall (frame): 0.454483[W] + Sensor Information: + Occupied zone air temperature: 290.509196 + Velocity: 0.016735 +ffd_solver(): Synchronized data at t=1860.000000[s] + +Physical time=1861.0000 s, CPU time=20.4640 s, Time Ratio=90.9402 +Physical time=1862.0000 s, CPU time=20.4700 s, Time Ratio=90.9624 +Physical time=1863.0000 s, CPU time=20.4800 s, Time Ratio=90.9668 +Physical time=1864.0000 s, CPU time=20.4910 s, Time Ratio=90.9668 +Physical time=1865.0000 s, CPU time=20.5010 s, Time Ratio=90.9712 +Physical time=1866.0000 s, CPU time=20.5090 s, Time Ratio=90.9844 +Physical time=1867.0000 s, CPU time=20.5160 s, Time Ratio=91.0021 +Physical time=1868.0000 s, CPU time=20.5210 s, Time Ratio=91.0287 +Physical time=1869.0000 s, CPU time=20.5260 s, Time Ratio=91.0552 +Physical time=1870.0000 s, CPU time=20.5310 s, Time Ratio=91.0818 +Physical time=1871.0000 s, CPU time=20.5370 s, Time Ratio=91.1039 +Physical time=1872.0000 s, CPU time=20.5420 s, Time Ratio=91.1304 +Physical time=1873.0000 s, CPU time=20.5490 s, Time Ratio=91.1480 +Physical time=1874.0000 s, CPU time=20.5550 s, Time Ratio=91.1700 +Physical time=1875.0000 s, CPU time=20.5610 s, Time Ratio=91.1921 +Physical time=1876.0000 s, CPU time=20.5690 s, Time Ratio=91.2052 +Physical time=1877.0000 s, CPU time=20.5800 s, Time Ratio=91.2051 +Physical time=1878.0000 s, CPU time=20.5910 s, Time Ratio=91.2049 +Physical time=1879.0000 s, CPU time=20.5970 s, Time Ratio=91.2269 +Physical time=1880.0000 s, CPU time=20.6030 s, Time Ratio=91.2488 +Physical time=1881.0000 s, CPU time=20.6130 s, Time Ratio=91.2531 +Physical time=1882.0000 s, CPU time=20.6210 s, Time Ratio=91.2662 +Physical time=1883.0000 s, CPU time=20.6290 s, Time Ratio=91.2793 +Physical time=1884.0000 s, CPU time=20.6350 s, Time Ratio=91.3012 +Physical time=1885.0000 s, CPU time=20.6430 s, Time Ratio=91.3142 +Physical time=1886.0000 s, CPU time=20.6510 s, Time Ratio=91.3273 +Physical time=1887.0000 s, CPU time=20.6570 s, Time Ratio=91.3492 +Physical time=1888.0000 s, CPU time=20.6650 s, Time Ratio=91.3622 +Physical time=1889.0000 s, CPU time=20.6730 s, Time Ratio=91.3752 +Physical time=1890.0000 s, CPU time=20.6810 s, Time Ratio=91.3882 +Physical time=1891.0000 s, CPU time=20.6880 s, Time Ratio=91.4056 +Physical time=1892.0000 s, CPU time=20.6970 s, Time Ratio=91.4142 +Physical time=1893.0000 s, CPU time=20.7050 s, Time Ratio=91.4272 +Physical time=1894.0000 s, CPU time=20.7130 s, Time Ratio=91.4402 +Physical time=1895.0000 s, CPU time=20.7200 s, Time Ratio=91.4575 +Physical time=1896.0000 s, CPU time=20.7270 s, Time Ratio=91.4749 +Physical time=1897.0000 s, CPU time=20.7330 s, Time Ratio=91.4966 +Physical time=1898.0000 s, CPU time=20.7380 s, Time Ratio=91.5228 +Physical time=1899.0000 s, CPU time=20.7430 s, Time Ratio=91.5490 +Physical time=1900.0000 s, CPU time=20.7490 s, Time Ratio=91.5707 +Physical time=1901.0000 s, CPU time=20.7540 s, Time Ratio=91.5968 +Physical time=1902.0000 s, CPU time=20.7600 s, Time Ratio=91.6185 +Physical time=1903.0000 s, CPU time=20.7650 s, Time Ratio=91.6446 +Physical time=1904.0000 s, CPU time=20.7700 s, Time Ratio=91.6707 +Physical time=1905.0000 s, CPU time=20.7750 s, Time Ratio=91.6968 +Physical time=1906.0000 s, CPU time=20.7810 s, Time Ratio=91.7184 +Physical time=1907.0000 s, CPU time=20.7890 s, Time Ratio=91.7312 +Physical time=1908.0000 s, CPU time=20.7960 s, Time Ratio=91.7484 +Physical time=1909.0000 s, CPU time=20.8010 s, Time Ratio=91.7744 +Physical time=1910.0000 s, CPU time=20.8070 s, Time Ratio=91.7960 +Physical time=1911.0000 s, CPU time=20.8130 s, Time Ratio=91.8176 +Physical time=1912.0000 s, CPU time=20.8180 s, Time Ratio=91.8436 +Physical time=1913.0000 s, CPU time=20.8230 s, Time Ratio=91.8696 +Physical time=1914.0000 s, CPU time=20.8280 s, Time Ratio=91.8955 +Physical time=1915.0000 s, CPU time=20.8330 s, Time Ratio=91.9215 +Physical time=1916.0000 s, CPU time=20.8390 s, Time Ratio=91.9430 +Physical time=1917.0000 s, CPU time=20.8470 s, Time Ratio=91.9557 +Physical time=1918.0000 s, CPU time=20.8530 s, Time Ratio=91.9772 +Physical time=1919.0000 s, CPU time=20.8640 s, Time Ratio=91.9766 +Physical time=1920.0000 s, CPU time=20.8750 s, Time Ratio=91.9760 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.821652[degC] + North Wall: T=19.821680[degC] + Ceiling: T=19.820847[degC] + Floor: T=19.823026[degC] + West Wall: T=19.822813[degC] + West Wall (glass, unshaded): T=2.283661[degC] + East Wall: T=19.822737[degC] + East Wall (glass, unshaded): T=2.283099[degC] + East Wall (frame): T=8.539061[degC] + West Wall (frame): T=8.539934[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1920.000000[s] + Averaged room temperature 17.363977[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.246641[W] + North Wall: -1.247247[W] + Ceiling: -1.221412[W] + Floor: -1.355274[W] + West Wall: -0.667025[W] + West Wall (glass, unshaded): 3.113597[W] + East Wall: -0.668763[W] + East Wall (glass, unshaded): 3.116066[W] + East Wall (frame): 0.452837[W] + West Wall (frame): 0.453606[W] + Sensor Information: + Occupied zone air temperature: 290.513977 + Velocity: 0.013817 +ffd_solver(): Synchronized data at t=1920.000000[s] + +Physical time=1921.0000 s, CPU time=20.9880 s, Time Ratio=91.5285 +Physical time=1922.0000 s, CPU time=20.9930 s, Time Ratio=91.5543 +Physical time=1923.0000 s, CPU time=20.9980 s, Time Ratio=91.5802 +Physical time=1924.0000 s, CPU time=21.0030 s, Time Ratio=91.6060 +Physical time=1925.0000 s, CPU time=21.0190 s, Time Ratio=91.5838 +Physical time=1926.0000 s, CPU time=21.0260 s, Time Ratio=91.6009 +Physical time=1927.0000 s, CPU time=21.0330 s, Time Ratio=91.6179 +Physical time=1928.0000 s, CPU time=21.0390 s, Time Ratio=91.6393 +Physical time=1929.0000 s, CPU time=21.0520 s, Time Ratio=91.6302 +Physical time=1930.0000 s, CPU time=21.0640 s, Time Ratio=91.6255 +Physical time=1931.0000 s, CPU time=21.0730 s, Time Ratio=91.6338 +Physical time=1932.0000 s, CPU time=21.0780 s, Time Ratio=91.6596 +Physical time=1933.0000 s, CPU time=21.0830 s, Time Ratio=91.6852 +Physical time=1934.0000 s, CPU time=21.0890 s, Time Ratio=91.7066 +Physical time=1935.0000 s, CPU time=21.0940 s, Time Ratio=91.7322 +Physical time=1936.0000 s, CPU time=21.0990 s, Time Ratio=91.7579 +Physical time=1937.0000 s, CPU time=21.1040 s, Time Ratio=91.7835 +Physical time=1938.0000 s, CPU time=21.1090 s, Time Ratio=91.8092 +Physical time=1939.0000 s, CPU time=21.1190 s, Time Ratio=91.8131 +Physical time=1940.0000 s, CPU time=21.1240 s, Time Ratio=91.8387 +Physical time=1941.0000 s, CPU time=21.1300 s, Time Ratio=91.8599 +Physical time=1942.0000 s, CPU time=21.1350 s, Time Ratio=91.8855 +Physical time=1943.0000 s, CPU time=21.1400 s, Time Ratio=91.9111 +Physical time=1944.0000 s, CPU time=21.1490 s, Time Ratio=91.9192 +Physical time=1945.0000 s, CPU time=21.1590 s, Time Ratio=91.9231 +Physical time=1946.0000 s, CPU time=21.1690 s, Time Ratio=91.9269 +Physical time=1947.0000 s, CPU time=21.1780 s, Time Ratio=91.9350 +Physical time=1948.0000 s, CPU time=21.1890 s, Time Ratio=91.9345 +Physical time=1949.0000 s, CPU time=21.1980 s, Time Ratio=91.9426 +Physical time=1950.0000 s, CPU time=21.2110 s, Time Ratio=91.9334 +Physical time=1951.0000 s, CPU time=21.2200 s, Time Ratio=91.9416 +Physical time=1952.0000 s, CPU time=21.2300 s, Time Ratio=91.9454 +Physical time=1953.0000 s, CPU time=21.2400 s, Time Ratio=91.9492 +Physical time=1954.0000 s, CPU time=21.2490 s, Time Ratio=91.9573 +Physical time=1955.0000 s, CPU time=21.2590 s, Time Ratio=91.9611 +Physical time=1956.0000 s, CPU time=21.2700 s, Time Ratio=91.9605 +Physical time=1957.0000 s, CPU time=21.2800 s, Time Ratio=91.9643 +Physical time=1958.0000 s, CPU time=21.2890 s, Time Ratio=91.9724 +Physical time=1959.0000 s, CPU time=21.2960 s, Time Ratio=91.9891 +Physical time=1960.0000 s, CPU time=21.3040 s, Time Ratio=92.0015 +Physical time=1961.0000 s, CPU time=21.3090 s, Time Ratio=92.0268 +Physical time=1962.0000 s, CPU time=21.3180 s, Time Ratio=92.0349 +Physical time=1963.0000 s, CPU time=21.3230 s, Time Ratio=92.0602 +Physical time=1964.0000 s, CPU time=21.3280 s, Time Ratio=92.0855 +Physical time=1965.0000 s, CPU time=21.3340 s, Time Ratio=92.1065 +Physical time=1966.0000 s, CPU time=21.3400 s, Time Ratio=92.1275 +Physical time=1967.0000 s, CPU time=21.3450 s, Time Ratio=92.1527 +Physical time=1968.0000 s, CPU time=21.3520 s, Time Ratio=92.1694 +Physical time=1969.0000 s, CPU time=21.3570 s, Time Ratio=92.1946 +Physical time=1970.0000 s, CPU time=21.3630 s, Time Ratio=92.2155 +Physical time=1971.0000 s, CPU time=21.3700 s, Time Ratio=92.2321 +Physical time=1972.0000 s, CPU time=21.3760 s, Time Ratio=92.2530 +Physical time=1973.0000 s, CPU time=21.3830 s, Time Ratio=92.2696 +Physical time=1974.0000 s, CPU time=21.3910 s, Time Ratio=92.2818 +Physical time=1975.0000 s, CPU time=21.3980 s, Time Ratio=92.2983 +Physical time=1976.0000 s, CPU time=21.4060 s, Time Ratio=92.3106 +Physical time=1977.0000 s, CPU time=21.4140 s, Time Ratio=92.3228 +Physical time=1978.0000 s, CPU time=21.4230 s, Time Ratio=92.3307 +Physical time=1979.0000 s, CPU time=21.4280 s, Time Ratio=92.3558 +Physical time=1980.0000 s, CPU time=21.4400 s, Time Ratio=92.3507 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.816560[degC] + North Wall: T=19.816587[degC] + Ceiling: T=19.815736[degC] + Floor: T=19.817979[degC] + West Wall: T=19.817748[degC] + West Wall (glass, unshaded): T=2.274095[degC] + East Wall: T=19.817682[degC] + East Wall (glass, unshaded): T=2.273543[degC] + East Wall (frame): T=8.527628[degC] + West Wall (frame): T=8.528456[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=1980.000000[s] + Averaged room temperature 17.363558[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.239448[W] + North Wall: -1.246953[W] + Ceiling: -1.188117[W] + Floor: -1.321431[W] + West Wall: -0.658424[W] + West Wall (glass, unshaded): 3.124597[W] + East Wall: -0.650730[W] + East Wall (glass, unshaded): 3.122656[W] + East Wall (frame): 0.457364[W] + West Wall (frame): 0.455225[W] + Sensor Information: + Occupied zone air temperature: 290.513558 + Velocity: 0.041311 +ffd_solver(): Synchronized data at t=1980.000000[s] + +Physical time=1981.0000 s, CPU time=21.5640 s, Time Ratio=91.8661 +Physical time=1982.0000 s, CPU time=21.5750 s, Time Ratio=91.8656 +Physical time=1983.0000 s, CPU time=21.5810 s, Time Ratio=91.8864 +Physical time=1984.0000 s, CPU time=21.5910 s, Time Ratio=91.8901 +Physical time=1985.0000 s, CPU time=21.5970 s, Time Ratio=91.9109 +Physical time=1986.0000 s, CPU time=21.6060 s, Time Ratio=91.9189 +Physical time=1987.0000 s, CPU time=21.6120 s, Time Ratio=91.9397 +Physical time=1988.0000 s, CPU time=21.6180 s, Time Ratio=91.9604 +Physical time=1989.0000 s, CPU time=21.6240 s, Time Ratio=91.9811 +Physical time=1990.0000 s, CPU time=21.6300 s, Time Ratio=92.0018 +Physical time=1991.0000 s, CPU time=21.6360 s, Time Ratio=92.0226 +Physical time=1992.0000 s, CPU time=21.6420 s, Time Ratio=92.0432 +Physical time=1993.0000 s, CPU time=21.6490 s, Time Ratio=92.0597 +Physical time=1994.0000 s, CPU time=21.6550 s, Time Ratio=92.0804 +Physical time=1995.0000 s, CPU time=21.6610 s, Time Ratio=92.1010 +Physical time=1996.0000 s, CPU time=21.6660 s, Time Ratio=92.1259 +Physical time=1997.0000 s, CPU time=21.6710 s, Time Ratio=92.1508 +Physical time=1998.0000 s, CPU time=21.6770 s, Time Ratio=92.1714 +Physical time=1999.0000 s, CPU time=21.6820 s, Time Ratio=92.1963 +Physical time=2000.0000 s, CPU time=21.6880 s, Time Ratio=92.2169 +Physical time=2001.0000 s, CPU time=21.6940 s, Time Ratio=92.2375 +Physical time=2002.0000 s, CPU time=21.7000 s, Time Ratio=92.2581 +Physical time=2003.0000 s, CPU time=21.7060 s, Time Ratio=92.2786 +Physical time=2004.0000 s, CPU time=21.7140 s, Time Ratio=92.2907 +Physical time=2005.0000 s, CPU time=21.7200 s, Time Ratio=92.3112 +Physical time=2006.0000 s, CPU time=21.7260 s, Time Ratio=92.3318 +Physical time=2007.0000 s, CPU time=21.7320 s, Time Ratio=92.3523 +Physical time=2008.0000 s, CPU time=21.7370 s, Time Ratio=92.3771 +Physical time=2009.0000 s, CPU time=21.7430 s, Time Ratio=92.3976 +Physical time=2010.0000 s, CPU time=21.7480 s, Time Ratio=92.4223 +Physical time=2011.0000 s, CPU time=21.7530 s, Time Ratio=92.4470 +Physical time=2012.0000 s, CPU time=21.7580 s, Time Ratio=92.4717 +Physical time=2013.0000 s, CPU time=21.7630 s, Time Ratio=92.4964 +Physical time=2014.0000 s, CPU time=21.7680 s, Time Ratio=92.5211 +Physical time=2015.0000 s, CPU time=21.7740 s, Time Ratio=92.5416 +Physical time=2016.0000 s, CPU time=21.7790 s, Time Ratio=92.5662 +Physical time=2017.0000 s, CPU time=21.7840 s, Time Ratio=92.5909 +Physical time=2018.0000 s, CPU time=21.7890 s, Time Ratio=92.6155 +Physical time=2019.0000 s, CPU time=21.7950 s, Time Ratio=92.6359 +Physical time=2020.0000 s, CPU time=21.8000 s, Time Ratio=92.6606 +Physical time=2021.0000 s, CPU time=21.8060 s, Time Ratio=92.6809 +Physical time=2022.0000 s, CPU time=21.8120 s, Time Ratio=92.7013 +Physical time=2023.0000 s, CPU time=21.8200 s, Time Ratio=92.7131 +Physical time=2024.0000 s, CPU time=21.8260 s, Time Ratio=92.7334 +Physical time=2025.0000 s, CPU time=21.8320 s, Time Ratio=92.7538 +Physical time=2026.0000 s, CPU time=21.8390 s, Time Ratio=92.7698 +Physical time=2027.0000 s, CPU time=21.8490 s, Time Ratio=92.7731 +Physical time=2028.0000 s, CPU time=21.8550 s, Time Ratio=92.7934 +Physical time=2029.0000 s, CPU time=21.8610 s, Time Ratio=92.8137 +Physical time=2030.0000 s, CPU time=21.8660 s, Time Ratio=92.8382 +Physical time=2031.0000 s, CPU time=21.8720 s, Time Ratio=92.8584 +Physical time=2032.0000 s, CPU time=21.8770 s, Time Ratio=92.8829 +Physical time=2033.0000 s, CPU time=21.8870 s, Time Ratio=92.8862 +Physical time=2034.0000 s, CPU time=21.8990 s, Time Ratio=92.8810 +Physical time=2035.0000 s, CPU time=21.9120 s, Time Ratio=92.8715 +Physical time=2036.0000 s, CPU time=21.9210 s, Time Ratio=92.8790 +Physical time=2037.0000 s, CPU time=21.9280 s, Time Ratio=92.8949 +Physical time=2038.0000 s, CPU time=21.9330 s, Time Ratio=92.9193 +Physical time=2039.0000 s, CPU time=21.9380 s, Time Ratio=92.9438 +Physical time=2040.0000 s, CPU time=21.9440 s, Time Ratio=92.9639 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.811507[degC] + North Wall: T=19.811537[degC] + Ceiling: T=19.810671[degC] + Floor: T=19.812964[degC] + West Wall: T=19.812727[degC] + West Wall (glass, unshaded): T=2.264972[degC] + East Wall: T=19.812661[degC] + East Wall (glass, unshaded): T=2.264469[degC] + East Wall (frame): T=8.516275[degC] + West Wall (frame): T=8.517108[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2040.000000[s] + Averaged room temperature 17.354316[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.254358[W] + North Wall: -1.251561[W] + Ceiling: -1.182638[W] + Floor: -1.350068[W] + West Wall: -0.661662[W] + West Wall (glass, unshaded): 3.112295[W] + East Wall: -0.663157[W] + East Wall (glass, unshaded): 3.112554[W] + East Wall (frame): 0.455280[W] + West Wall (frame): 0.455039[W] + Sensor Information: + Occupied zone air temperature: 290.504316 + Velocity: 0.048612 +ffd_solver(): Synchronized data at t=2040.000000[s] + +Physical time=2041.0000 s, CPU time=22.0460 s, Time Ratio=92.5792 +Physical time=2042.0000 s, CPU time=22.0540 s, Time Ratio=92.5909 +Physical time=2043.0000 s, CPU time=22.0600 s, Time Ratio=92.6111 +Physical time=2044.0000 s, CPU time=22.0700 s, Time Ratio=92.6144 +Physical time=2045.0000 s, CPU time=22.0780 s, Time Ratio=92.6261 +Physical time=2046.0000 s, CPU time=22.0860 s, Time Ratio=92.6379 +Physical time=2047.0000 s, CPU time=22.0920 s, Time Ratio=92.6580 +Physical time=2048.0000 s, CPU time=22.0980 s, Time Ratio=92.6781 +Physical time=2049.0000 s, CPU time=22.1030 s, Time Ratio=92.7023 +Physical time=2050.0000 s, CPU time=22.1080 s, Time Ratio=92.7266 +Physical time=2051.0000 s, CPU time=22.1140 s, Time Ratio=92.7467 +Physical time=2052.0000 s, CPU time=22.1210 s, Time Ratio=92.7625 +Physical time=2053.0000 s, CPU time=22.1280 s, Time Ratio=92.7784 +Physical time=2054.0000 s, CPU time=22.1330 s, Time Ratio=92.8026 +Physical time=2055.0000 s, CPU time=22.1380 s, Time Ratio=92.8268 +Physical time=2056.0000 s, CPU time=22.1450 s, Time Ratio=92.8426 +Physical time=2057.0000 s, CPU time=22.1520 s, Time Ratio=92.8584 +Physical time=2058.0000 s, CPU time=22.1580 s, Time Ratio=92.8784 +Physical time=2059.0000 s, CPU time=22.1640 s, Time Ratio=92.8984 +Physical time=2060.0000 s, CPU time=22.1700 s, Time Ratio=92.9184 +Physical time=2061.0000 s, CPU time=22.1760 s, Time Ratio=92.9383 +Physical time=2062.0000 s, CPU time=22.1820 s, Time Ratio=92.9583 +Physical time=2063.0000 s, CPU time=22.1880 s, Time Ratio=92.9782 +Physical time=2064.0000 s, CPU time=22.1960 s, Time Ratio=92.9897 +Physical time=2065.0000 s, CPU time=22.2030 s, Time Ratio=93.0054 +Physical time=2066.0000 s, CPU time=22.2090 s, Time Ratio=93.0254 +Physical time=2067.0000 s, CPU time=22.2150 s, Time Ratio=93.0452 +Physical time=2068.0000 s, CPU time=22.2230 s, Time Ratio=93.0567 +Physical time=2069.0000 s, CPU time=22.2320 s, Time Ratio=93.0641 +Physical time=2070.0000 s, CPU time=22.2370 s, Time Ratio=93.0881 +Physical time=2071.0000 s, CPU time=22.2440 s, Time Ratio=93.1038 +Physical time=2072.0000 s, CPU time=22.2500 s, Time Ratio=93.1236 +Physical time=2073.0000 s, CPU time=22.2570 s, Time Ratio=93.1392 +Physical time=2074.0000 s, CPU time=22.2620 s, Time Ratio=93.1632 +Physical time=2075.0000 s, CPU time=22.2700 s, Time Ratio=93.1747 +Physical time=2076.0000 s, CPU time=22.2750 s, Time Ratio=93.1987 +Physical time=2077.0000 s, CPU time=22.2810 s, Time Ratio=93.2184 +Physical time=2078.0000 s, CPU time=22.2870 s, Time Ratio=93.2382 +Physical time=2079.0000 s, CPU time=22.2940 s, Time Ratio=93.2538 +Physical time=2080.0000 s, CPU time=22.3010 s, Time Ratio=93.2694 +Physical time=2081.0000 s, CPU time=22.3070 s, Time Ratio=93.2891 +Physical time=2082.0000 s, CPU time=22.3150 s, Time Ratio=93.3005 +Physical time=2083.0000 s, CPU time=22.3220 s, Time Ratio=93.3160 +Physical time=2084.0000 s, CPU time=22.3290 s, Time Ratio=93.3315 +Physical time=2085.0000 s, CPU time=22.3350 s, Time Ratio=93.3512 +Physical time=2086.0000 s, CPU time=22.3460 s, Time Ratio=93.3500 +Physical time=2087.0000 s, CPU time=22.3560 s, Time Ratio=93.3530 +Physical time=2088.0000 s, CPU time=22.3650 s, Time Ratio=93.3602 +Physical time=2089.0000 s, CPU time=22.3750 s, Time Ratio=93.3631 +Physical time=2090.0000 s, CPU time=22.3810 s, Time Ratio=93.3828 +Physical time=2091.0000 s, CPU time=22.3870 s, Time Ratio=93.4024 +Physical time=2092.0000 s, CPU time=22.3970 s, Time Ratio=93.4054 +Physical time=2093.0000 s, CPU time=22.4080 s, Time Ratio=93.4041 +Physical time=2094.0000 s, CPU time=22.4200 s, Time Ratio=93.3988 +Physical time=2095.0000 s, CPU time=22.4270 s, Time Ratio=93.4142 +Physical time=2096.0000 s, CPU time=22.4370 s, Time Ratio=93.4171 +Physical time=2097.0000 s, CPU time=22.4470 s, Time Ratio=93.4201 +Physical time=2098.0000 s, CPU time=22.4570 s, Time Ratio=93.4230 +Physical time=2099.0000 s, CPU time=22.4650 s, Time Ratio=93.4342 +Physical time=2100.0000 s, CPU time=22.4750 s, Time Ratio=93.4372 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.806502[degC] + North Wall: T=19.806532[degC] + Ceiling: T=19.805639[degC] + Floor: T=19.807992[degC] + West Wall: T=19.807747[degC] + West Wall (glass, unshaded): T=2.256503[degC] + East Wall: T=19.807680[degC] + East Wall (glass, unshaded): T=2.256074[degC] + East Wall (frame): T=8.505026[degC] + West Wall (frame): T=8.505879[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2100.000000[s] + Averaged room temperature 17.357081[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.237507[W] + North Wall: -1.244038[W] + Ceiling: -1.225384[W] + Floor: -1.349363[W] + West Wall: -0.663208[W] + West Wall (glass, unshaded): 3.121206[W] + East Wall: -0.664197[W] + East Wall (glass, unshaded): 3.125258[W] + East Wall (frame): 0.456180[W] + West Wall (frame): 0.455248[W] + Sensor Information: + Occupied zone air temperature: 290.507081 + Velocity: 0.024326 +ffd_solver(): Synchronized data at t=2100.000000[s] + +Physical time=2101.0000 s, CPU time=23.1730 s, Time Ratio=90.6659 +Physical time=2102.0000 s, CPU time=23.1800 s, Time Ratio=90.6816 +Physical time=2103.0000 s, CPU time=23.1870 s, Time Ratio=90.6974 +Physical time=2104.0000 s, CPU time=23.1930 s, Time Ratio=90.7170 +Physical time=2105.0000 s, CPU time=23.1980 s, Time Ratio=90.7406 +Physical time=2106.0000 s, CPU time=23.2050 s, Time Ratio=90.7563 +Physical time=2107.0000 s, CPU time=23.2110 s, Time Ratio=90.7759 +Physical time=2108.0000 s, CPU time=23.2170 s, Time Ratio=90.7955 +Physical time=2109.0000 s, CPU time=23.2230 s, Time Ratio=90.8151 +Physical time=2110.0000 s, CPU time=23.2290 s, Time Ratio=90.8347 +Physical time=2111.0000 s, CPU time=23.2350 s, Time Ratio=90.8543 +Physical time=2112.0000 s, CPU time=23.2410 s, Time Ratio=90.8739 +Physical time=2113.0000 s, CPU time=23.2460 s, Time Ratio=90.8974 +Physical time=2114.0000 s, CPU time=23.2520 s, Time Ratio=90.9169 +Physical time=2115.0000 s, CPU time=23.2580 s, Time Ratio=90.9365 +Physical time=2116.0000 s, CPU time=23.2630 s, Time Ratio=90.9599 +Physical time=2117.0000 s, CPU time=23.2750 s, Time Ratio=90.9560 +Physical time=2118.0000 s, CPU time=23.2800 s, Time Ratio=90.9794 +Physical time=2119.0000 s, CPU time=23.2920 s, Time Ratio=90.9754 +Physical time=2120.0000 s, CPU time=23.3010 s, Time Ratio=90.9832 +Physical time=2121.0000 s, CPU time=23.3150 s, Time Ratio=90.9715 +Physical time=2122.0000 s, CPU time=23.3220 s, Time Ratio=90.9871 +Physical time=2123.0000 s, CPU time=23.3280 s, Time Ratio=91.0065 +Physical time=2124.0000 s, CPU time=23.3340 s, Time Ratio=91.0260 +Physical time=2125.0000 s, CPU time=23.3410 s, Time Ratio=91.0415 +Physical time=2126.0000 s, CPU time=23.3520 s, Time Ratio=91.0415 +Physical time=2127.0000 s, CPU time=23.3590 s, Time Ratio=91.0570 +Physical time=2128.0000 s, CPU time=23.3660 s, Time Ratio=91.0725 +Physical time=2129.0000 s, CPU time=23.3760 s, Time Ratio=91.0763 +Physical time=2130.0000 s, CPU time=23.3880 s, Time Ratio=91.0723 +Physical time=2131.0000 s, CPU time=23.3980 s, Time Ratio=91.0762 +Physical time=2132.0000 s, CPU time=23.4120 s, Time Ratio=91.0644 +Physical time=2133.0000 s, CPU time=23.4230 s, Time Ratio=91.0643 +Physical time=2134.0000 s, CPU time=23.4370 s, Time Ratio=91.0526 +Physical time=2135.0000 s, CPU time=23.4520 s, Time Ratio=91.0370 +Physical time=2136.0000 s, CPU time=23.4670 s, Time Ratio=91.0214 +Physical time=2137.0000 s, CPU time=23.4800 s, Time Ratio=91.0136 +Physical time=2138.0000 s, CPU time=23.4920 s, Time Ratio=91.0097 +Physical time=2139.0000 s, CPU time=23.5030 s, Time Ratio=91.0097 +Physical time=2140.0000 s, CPU time=23.5130 s, Time Ratio=91.0135 +Physical time=2141.0000 s, CPU time=23.5260 s, Time Ratio=91.0057 +Physical time=2142.0000 s, CPU time=23.5360 s, Time Ratio=91.0095 +Physical time=2143.0000 s, CPU time=23.5460 s, Time Ratio=91.0133 +Physical time=2144.0000 s, CPU time=23.5550 s, Time Ratio=91.0210 +Physical time=2145.0000 s, CPU time=23.5690 s, Time Ratio=91.0094 +Physical time=2146.0000 s, CPU time=23.5770 s, Time Ratio=91.0209 +Physical time=2147.0000 s, CPU time=23.5940 s, Time Ratio=90.9977 +Physical time=2148.0000 s, CPU time=23.6050 s, Time Ratio=90.9977 +Physical time=2149.0000 s, CPU time=23.6150 s, Time Ratio=91.0015 +Physical time=2150.0000 s, CPU time=23.6240 s, Time Ratio=91.0091 +Physical time=2151.0000 s, CPU time=23.6330 s, Time Ratio=91.0168 +Physical time=2152.0000 s, CPU time=23.6410 s, Time Ratio=91.0283 +Physical time=2153.0000 s, CPU time=23.6530 s, Time Ratio=91.0244 +Physical time=2154.0000 s, CPU time=23.6650 s, Time Ratio=91.0205 +Physical time=2155.0000 s, CPU time=23.6780 s, Time Ratio=91.0128 +Physical time=2156.0000 s, CPU time=23.6880 s, Time Ratio=91.0165 +Physical time=2157.0000 s, CPU time=23.6960 s, Time Ratio=91.0280 +Physical time=2158.0000 s, CPU time=23.7040 s, Time Ratio=91.0395 +Physical time=2159.0000 s, CPU time=23.7120 s, Time Ratio=91.0509 +Physical time=2160.0000 s, CPU time=23.7170 s, Time Ratio=91.0739 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.801538[degC] + North Wall: T=19.801569[degC] + Ceiling: T=19.800661[degC] + Floor: T=19.803071[degC] + West Wall: T=19.802812[degC] + West Wall (glass, unshaded): T=2.248659[degC] + East Wall: T=19.802751[degC] + East Wall (glass, unshaded): T=2.248214[degC] + East Wall (frame): T=8.493936[degC] + West Wall (frame): T=8.494790[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2160.000000[s] + Averaged room temperature 17.342967[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.250214[W] + North Wall: -1.247614[W] + Ceiling: -1.181431[W] + Floor: -1.336536[W] + West Wall: -0.655583[W] + West Wall (glass, unshaded): 3.120469[W] + East Wall: -0.658631[W] + East Wall (glass, unshaded): 3.122564[W] + East Wall (frame): 0.456640[W] + West Wall (frame): 0.457163[W] + Sensor Information: + Occupied zone air temperature: 290.492967 + Velocity: 0.060636 +ffd_solver(): Synchronized data at t=2160.000000[s] + +Physical time=2161.0000 s, CPU time=23.8230 s, Time Ratio=90.7107 +Physical time=2162.0000 s, CPU time=23.8280 s, Time Ratio=90.7336 +Physical time=2163.0000 s, CPU time=23.8350 s, Time Ratio=90.7489 +Physical time=2164.0000 s, CPU time=23.8440 s, Time Ratio=90.7566 +Physical time=2165.0000 s, CPU time=23.8600 s, Time Ratio=90.7376 +Physical time=2166.0000 s, CPU time=23.8730 s, Time Ratio=90.7301 +Physical time=2167.0000 s, CPU time=23.8850 s, Time Ratio=90.7264 +Physical time=2168.0000 s, CPU time=23.8960 s, Time Ratio=90.7265 +Physical time=2169.0000 s, CPU time=23.9060 s, Time Ratio=90.7304 +Physical time=2170.0000 s, CPU time=23.9190 s, Time Ratio=90.7229 +Physical time=2171.0000 s, CPU time=23.9270 s, Time Ratio=90.7343 +Physical time=2172.0000 s, CPU time=23.9350 s, Time Ratio=90.7458 +Physical time=2173.0000 s, CPU time=23.9410 s, Time Ratio=90.7648 +Physical time=2174.0000 s, CPU time=23.9480 s, Time Ratio=90.7800 +Physical time=2175.0000 s, CPU time=23.9540 s, Time Ratio=90.7990 +Physical time=2176.0000 s, CPU time=23.9590 s, Time Ratio=90.8218 +Physical time=2177.0000 s, CPU time=23.9690 s, Time Ratio=90.8256 +Physical time=2178.0000 s, CPU time=23.9740 s, Time Ratio=90.8484 +Physical time=2179.0000 s, CPU time=23.9790 s, Time Ratio=90.8712 +Physical time=2180.0000 s, CPU time=23.9970 s, Time Ratio=90.8447 +Physical time=2181.0000 s, CPU time=24.0040 s, Time Ratio=90.8599 +Physical time=2182.0000 s, CPU time=24.0130 s, Time Ratio=90.8674 +Physical time=2183.0000 s, CPU time=24.0240 s, Time Ratio=90.8675 +Physical time=2184.0000 s, CPU time=24.0340 s, Time Ratio=90.8713 +Physical time=2185.0000 s, CPU time=24.0400 s, Time Ratio=90.8902 +Physical time=2186.0000 s, CPU time=24.0460 s, Time Ratio=90.9091 +Physical time=2187.0000 s, CPU time=24.0520 s, Time Ratio=90.9280 +Physical time=2188.0000 s, CPU time=24.0590 s, Time Ratio=90.9431 +Physical time=2189.0000 s, CPU time=24.0660 s, Time Ratio=90.9582 +Physical time=2190.0000 s, CPU time=24.0730 s, Time Ratio=90.9733 +Physical time=2191.0000 s, CPU time=24.0800 s, Time Ratio=90.9884 +Physical time=2192.0000 s, CPU time=24.0880 s, Time Ratio=90.9997 +Physical time=2193.0000 s, CPU time=24.0950 s, Time Ratio=91.0147 +Physical time=2194.0000 s, CPU time=24.1020 s, Time Ratio=91.0298 +Physical time=2195.0000 s, CPU time=24.1100 s, Time Ratio=91.0411 +Physical time=2196.0000 s, CPU time=24.1170 s, Time Ratio=91.0561 +Physical time=2197.0000 s, CPU time=24.1250 s, Time Ratio=91.0674 +Physical time=2198.0000 s, CPU time=24.1360 s, Time Ratio=91.0673 +Physical time=2199.0000 s, CPU time=24.1430 s, Time Ratio=91.0823 +Physical time=2200.0000 s, CPU time=24.1530 s, Time Ratio=91.0860 +Physical time=2201.0000 s, CPU time=24.1600 s, Time Ratio=91.1010 +Physical time=2202.0000 s, CPU time=24.1670 s, Time Ratio=91.1160 +Physical time=2203.0000 s, CPU time=24.1740 s, Time Ratio=91.1310 +Physical time=2204.0000 s, CPU time=24.1840 s, Time Ratio=91.1346 +Physical time=2205.0000 s, CPU time=24.1920 s, Time Ratio=91.1458 +Physical time=2206.0000 s, CPU time=24.2000 s, Time Ratio=91.1570 +Physical time=2207.0000 s, CPU time=24.2130 s, Time Ratio=91.1494 +Physical time=2208.0000 s, CPU time=24.2250 s, Time Ratio=91.1455 +Physical time=2209.0000 s, CPU time=24.2350 s, Time Ratio=91.1492 +Physical time=2210.0000 s, CPU time=24.2470 s, Time Ratio=91.1453 +Physical time=2211.0000 s, CPU time=24.2550 s, Time Ratio=91.1565 +Physical time=2212.0000 s, CPU time=24.2670 s, Time Ratio=91.1526 +Physical time=2213.0000 s, CPU time=24.2790 s, Time Ratio=91.1487 +Physical time=2214.0000 s, CPU time=24.2870 s, Time Ratio=91.1599 +Physical time=2215.0000 s, CPU time=24.2950 s, Time Ratio=91.1710 +Physical time=2216.0000 s, CPU time=24.3070 s, Time Ratio=91.1672 +Physical time=2217.0000 s, CPU time=24.3190 s, Time Ratio=91.1633 +Physical time=2218.0000 s, CPU time=24.3270 s, Time Ratio=91.1744 +Physical time=2219.0000 s, CPU time=24.3330 s, Time Ratio=91.1930 +Physical time=2220.0000 s, CPU time=24.3400 s, Time Ratio=91.2079 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.796615[degC] + North Wall: T=19.796646[degC] + Ceiling: T=19.795724[degC] + Floor: T=19.798188[degC] + West Wall: T=19.797914[degC] + West Wall (glass, unshaded): T=2.241246[degC] + East Wall: T=19.797860[degC] + East Wall (glass, unshaded): T=2.240763[degC] + East Wall (frame): T=8.482968[degC] + West Wall (frame): T=8.483812[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2220.000000[s] + Averaged room temperature 17.330767[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.250558[W] + North Wall: -1.257528[W] + Ceiling: -1.187568[W] + Floor: -1.367921[W] + West Wall: -0.666697[W] + West Wall (glass, unshaded): 3.112687[W] + East Wall: -0.668997[W] + East Wall (glass, unshaded): 3.114436[W] + East Wall (frame): 0.454911[W] + West Wall (frame): 0.455524[W] + Sensor Information: + Occupied zone air temperature: 290.480767 + Velocity: 0.032439 +ffd_solver(): Synchronized data at t=2220.000000[s] + +Physical time=2221.0000 s, CPU time=24.4950 s, Time Ratio=90.6716 +Physical time=2222.0000 s, CPU time=24.5060 s, Time Ratio=90.6717 +Physical time=2223.0000 s, CPU time=24.5160 s, Time Ratio=90.6755 +Physical time=2224.0000 s, CPU time=24.5250 s, Time Ratio=90.6830 +Physical time=2225.0000 s, CPU time=24.5400 s, Time Ratio=90.6683 +Physical time=2226.0000 s, CPU time=24.5490 s, Time Ratio=90.6758 +Physical time=2227.0000 s, CPU time=24.5560 s, Time Ratio=90.6907 +Physical time=2228.0000 s, CPU time=24.5640 s, Time Ratio=90.7018 +Physical time=2229.0000 s, CPU time=24.5710 s, Time Ratio=90.7167 +Physical time=2230.0000 s, CPU time=24.5770 s, Time Ratio=90.7352 +Physical time=2231.0000 s, CPU time=24.5860 s, Time Ratio=90.7427 +Physical time=2232.0000 s, CPU time=24.5970 s, Time Ratio=90.7428 +Physical time=2233.0000 s, CPU time=24.6030 s, Time Ratio=90.7613 +Physical time=2234.0000 s, CPU time=24.6090 s, Time Ratio=90.7798 +Physical time=2235.0000 s, CPU time=24.6140 s, Time Ratio=90.8020 +Physical time=2236.0000 s, CPU time=24.6190 s, Time Ratio=90.8242 +Physical time=2237.0000 s, CPU time=24.6240 s, Time Ratio=90.8463 +Physical time=2238.0000 s, CPU time=24.6300 s, Time Ratio=90.8648 +Physical time=2239.0000 s, CPU time=24.6350 s, Time Ratio=90.8869 +Physical time=2240.0000 s, CPU time=24.6400 s, Time Ratio=90.9091 +Physical time=2241.0000 s, CPU time=24.6520 s, Time Ratio=90.9054 +Physical time=2242.0000 s, CPU time=24.6580 s, Time Ratio=90.9238 +Physical time=2243.0000 s, CPU time=24.6650 s, Time Ratio=90.9386 +Physical time=2244.0000 s, CPU time=24.6700 s, Time Ratio=90.9607 +Physical time=2245.0000 s, CPU time=24.6750 s, Time Ratio=90.9828 +Physical time=2246.0000 s, CPU time=24.6810 s, Time Ratio=91.0012 +Physical time=2247.0000 s, CPU time=24.6880 s, Time Ratio=91.0159 +Physical time=2248.0000 s, CPU time=24.7080 s, Time Ratio=90.9827 +Physical time=2249.0000 s, CPU time=24.7140 s, Time Ratio=91.0011 +Physical time=2250.0000 s, CPU time=24.7220 s, Time Ratio=91.0121 +Physical time=2251.0000 s, CPU time=24.7270 s, Time Ratio=91.0341 +Physical time=2252.0000 s, CPU time=24.7340 s, Time Ratio=91.0488 +Physical time=2253.0000 s, CPU time=24.7420 s, Time Ratio=91.0597 +Physical time=2254.0000 s, CPU time=24.7500 s, Time Ratio=91.0707 +Physical time=2255.0000 s, CPU time=24.7570 s, Time Ratio=91.0853 +Physical time=2256.0000 s, CPU time=24.7640 s, Time Ratio=91.1000 +Physical time=2257.0000 s, CPU time=24.7710 s, Time Ratio=91.1146 +Physical time=2258.0000 s, CPU time=24.7780 s, Time Ratio=91.1292 +Physical time=2259.0000 s, CPU time=24.7860 s, Time Ratio=91.1402 +Physical time=2260.0000 s, CPU time=24.7920 s, Time Ratio=91.1584 +Physical time=2261.0000 s, CPU time=24.7980 s, Time Ratio=91.1767 +Physical time=2262.0000 s, CPU time=24.8030 s, Time Ratio=91.1986 +Physical time=2263.0000 s, CPU time=24.8080 s, Time Ratio=91.2206 +Physical time=2264.0000 s, CPU time=24.8200 s, Time Ratio=91.2168 +Physical time=2265.0000 s, CPU time=24.8310 s, Time Ratio=91.2166 +Physical time=2266.0000 s, CPU time=24.8400 s, Time Ratio=91.2238 +Physical time=2267.0000 s, CPU time=24.8470 s, Time Ratio=91.2384 +Physical time=2268.0000 s, CPU time=24.8550 s, Time Ratio=91.2492 +Physical time=2269.0000 s, CPU time=24.8610 s, Time Ratio=91.2674 +Physical time=2270.0000 s, CPU time=24.8680 s, Time Ratio=91.2820 +Physical time=2271.0000 s, CPU time=24.8780 s, Time Ratio=91.2855 +Physical time=2272.0000 s, CPU time=24.8840 s, Time Ratio=91.3036 +Physical time=2273.0000 s, CPU time=24.8900 s, Time Ratio=91.3218 +Physical time=2274.0000 s, CPU time=24.8960 s, Time Ratio=91.3400 +Physical time=2275.0000 s, CPU time=24.9030 s, Time Ratio=91.3545 +Physical time=2276.0000 s, CPU time=24.9110 s, Time Ratio=91.3653 +Physical time=2277.0000 s, CPU time=24.9160 s, Time Ratio=91.3871 +Physical time=2278.0000 s, CPU time=24.9220 s, Time Ratio=91.4052 +Physical time=2279.0000 s, CPU time=24.9330 s, Time Ratio=91.4050 +Physical time=2280.0000 s, CPU time=24.9400 s, Time Ratio=91.4194 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.791736[degC] + North Wall: T=19.791769[degC] + Ceiling: T=19.790816[degC] + Floor: T=19.793350[degC] + West Wall: T=19.793059[degC] + West Wall (glass, unshaded): T=2.234460[degC] + East Wall: T=19.793012[degC] + East Wall (glass, unshaded): T=2.233974[degC] + East Wall (frame): T=8.472161[degC] + West Wall (frame): T=8.472971[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2280.000000[s] + Averaged room temperature 17.338027[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.239121[W] + North Wall: -1.247784[W] + Ceiling: -1.213971[W] + Floor: -1.336924[W] + West Wall: -0.664739[W] + West Wall (glass, unshaded): 3.121602[W] + East Wall: -0.661640[W] + East Wall (glass, unshaded): 3.127094[W] + East Wall (frame): 0.456830[W] + West Wall (frame): 0.454736[W] + Sensor Information: + Occupied zone air temperature: 290.488027 + Velocity: 0.021534 +ffd_solver(): Synchronized data at t=2280.000000[s] + +Physical time=2281.0000 s, CPU time=25.0730 s, Time Ratio=90.9744 +Physical time=2282.0000 s, CPU time=25.0780 s, Time Ratio=90.9961 +Physical time=2283.0000 s, CPU time=25.0840 s, Time Ratio=91.0142 +Physical time=2284.0000 s, CPU time=25.0890 s, Time Ratio=91.0359 +Physical time=2285.0000 s, CPU time=25.0940 s, Time Ratio=91.0576 +Physical time=2286.0000 s, CPU time=25.0990 s, Time Ratio=91.0793 +Physical time=2287.0000 s, CPU time=25.1040 s, Time Ratio=91.1010 +Physical time=2288.0000 s, CPU time=25.1090 s, Time Ratio=91.1227 +Physical time=2289.0000 s, CPU time=25.1150 s, Time Ratio=91.1408 +Physical time=2290.0000 s, CPU time=25.1200 s, Time Ratio=91.1624 +Physical time=2291.0000 s, CPU time=25.1250 s, Time Ratio=91.1841 +Physical time=2292.0000 s, CPU time=25.1350 s, Time Ratio=91.1876 +Physical time=2293.0000 s, CPU time=25.1460 s, Time Ratio=91.1875 +Physical time=2294.0000 s, CPU time=25.1520 s, Time Ratio=91.2055 +Physical time=2295.0000 s, CPU time=25.1640 s, Time Ratio=91.2017 +Physical time=2296.0000 s, CPU time=25.1740 s, Time Ratio=91.2052 +Physical time=2297.0000 s, CPU time=25.1820 s, Time Ratio=91.2159 +Physical time=2298.0000 s, CPU time=25.1920 s, Time Ratio=91.2194 +Physical time=2299.0000 s, CPU time=25.2040 s, Time Ratio=91.2157 +Physical time=2300.0000 s, CPU time=25.2140 s, Time Ratio=91.2192 +Physical time=2301.0000 s, CPU time=25.2220 s, Time Ratio=91.2299 +Physical time=2302.0000 s, CPU time=25.2290 s, Time Ratio=91.2442 +Physical time=2303.0000 s, CPU time=25.2360 s, Time Ratio=91.2585 +Physical time=2304.0000 s, CPU time=25.2420 s, Time Ratio=91.2764 +Physical time=2305.0000 s, CPU time=25.2480 s, Time Ratio=91.2944 +Physical time=2306.0000 s, CPU time=25.2540 s, Time Ratio=91.3123 +Physical time=2307.0000 s, CPU time=25.2650 s, Time Ratio=91.3121 +Physical time=2308.0000 s, CPU time=25.2740 s, Time Ratio=91.3191 +Physical time=2309.0000 s, CPU time=25.2870 s, Time Ratio=91.3117 +Physical time=2310.0000 s, CPU time=25.3000 s, Time Ratio=91.3043 +Physical time=2311.0000 s, CPU time=25.3110 s, Time Ratio=91.3042 +Physical time=2312.0000 s, CPU time=25.3280 s, Time Ratio=91.2824 +Physical time=2313.0000 s, CPU time=25.3410 s, Time Ratio=91.2750 +Physical time=2314.0000 s, CPU time=25.3540 s, Time Ratio=91.2677 +Physical time=2315.0000 s, CPU time=25.3690 s, Time Ratio=91.2531 +Physical time=2316.0000 s, CPU time=25.3780 s, Time Ratio=91.2601 +Physical time=2317.0000 s, CPU time=25.3870 s, Time Ratio=91.2672 +Physical time=2318.0000 s, CPU time=25.3970 s, Time Ratio=91.2706 +Physical time=2319.0000 s, CPU time=25.4100 s, Time Ratio=91.2633 +Physical time=2320.0000 s, CPU time=25.4200 s, Time Ratio=91.2667 +Physical time=2321.0000 s, CPU time=25.4270 s, Time Ratio=91.2809 +Physical time=2322.0000 s, CPU time=25.4370 s, Time Ratio=91.2843 +Physical time=2323.0000 s, CPU time=25.4470 s, Time Ratio=91.2878 +Physical time=2324.0000 s, CPU time=25.4550 s, Time Ratio=91.2984 +Physical time=2325.0000 s, CPU time=25.4630 s, Time Ratio=91.3090 +Physical time=2326.0000 s, CPU time=25.4700 s, Time Ratio=91.3231 +Physical time=2327.0000 s, CPU time=25.4770 s, Time Ratio=91.3373 +Physical time=2328.0000 s, CPU time=25.4850 s, Time Ratio=91.3479 +Physical time=2329.0000 s, CPU time=25.4910 s, Time Ratio=91.3656 +Physical time=2330.0000 s, CPU time=25.4970 s, Time Ratio=91.3833 +Physical time=2331.0000 s, CPU time=25.5050 s, Time Ratio=91.3938 +Physical time=2332.0000 s, CPU time=25.5120 s, Time Ratio=91.4080 +Physical time=2333.0000 s, CPU time=25.5190 s, Time Ratio=91.4221 +Physical time=2334.0000 s, CPU time=25.5260 s, Time Ratio=91.4362 +Physical time=2335.0000 s, CPU time=25.5340 s, Time Ratio=91.4467 +Physical time=2336.0000 s, CPU time=25.5440 s, Time Ratio=91.4500 +Physical time=2337.0000 s, CPU time=25.5540 s, Time Ratio=91.4534 +Physical time=2338.0000 s, CPU time=25.5670 s, Time Ratio=91.4460 +Physical time=2339.0000 s, CPU time=25.5750 s, Time Ratio=91.4565 +Physical time=2340.0000 s, CPU time=25.5880 s, Time Ratio=91.4491 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.786894[degC] + North Wall: T=19.786930[degC] + Ceiling: T=19.785958[degC] + Floor: T=19.788551[degC] + West Wall: T=19.788249[degC] + West Wall (glass, unshaded): T=2.228119[degC] + East Wall: T=19.788205[degC] + East Wall (glass, unshaded): T=2.227584[degC] + East Wall (frame): T=8.461492[degC] + West Wall (frame): T=8.462310[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2340.000000[s] + Averaged room temperature 17.325371[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.250789[W] + North Wall: -1.252845[W] + Ceiling: -1.190913[W] + Floor: -1.333517[W] + West Wall: -0.655617[W] + West Wall (glass, unshaded): 3.118140[W] + East Wall: -0.653720[W] + East Wall (glass, unshaded): 3.119674[W] + East Wall (frame): 0.457664[W] + West Wall (frame): 0.458191[W] + Sensor Information: + Occupied zone air temperature: 290.475371 + Velocity: 0.027421 +ffd_solver(): Synchronized data at t=2340.000000[s] + +Physical time=2341.0000 s, CPU time=25.6990 s, Time Ratio=91.0930 +Physical time=2342.0000 s, CPU time=25.7040 s, Time Ratio=91.1142 +Physical time=2343.0000 s, CPU time=25.7100 s, Time Ratio=91.1319 +Physical time=2344.0000 s, CPU time=25.7170 s, Time Ratio=91.1459 +Physical time=2345.0000 s, CPU time=25.7230 s, Time Ratio=91.1636 +Physical time=2346.0000 s, CPU time=25.7280 s, Time Ratio=91.1847 +Physical time=2347.0000 s, CPU time=25.7350 s, Time Ratio=91.1988 +Physical time=2348.0000 s, CPU time=25.7430 s, Time Ratio=91.2093 +Physical time=2349.0000 s, CPU time=25.7490 s, Time Ratio=91.2268 +Physical time=2350.0000 s, CPU time=25.7560 s, Time Ratio=91.2409 +Physical time=2351.0000 s, CPU time=25.7620 s, Time Ratio=91.2584 +Physical time=2352.0000 s, CPU time=25.7670 s, Time Ratio=91.2795 +Physical time=2353.0000 s, CPU time=25.7720 s, Time Ratio=91.3006 +Physical time=2354.0000 s, CPU time=25.7770 s, Time Ratio=91.3217 +Physical time=2355.0000 s, CPU time=25.7830 s, Time Ratio=91.3393 +Physical time=2356.0000 s, CPU time=25.7880 s, Time Ratio=91.3603 +Physical time=2357.0000 s, CPU time=25.7940 s, Time Ratio=91.3778 +Physical time=2358.0000 s, CPU time=25.7990 s, Time Ratio=91.3989 +Physical time=2359.0000 s, CPU time=25.8040 s, Time Ratio=91.4199 +Physical time=2360.0000 s, CPU time=25.8090 s, Time Ratio=91.4410 +Physical time=2361.0000 s, CPU time=25.8160 s, Time Ratio=91.4549 +Physical time=2362.0000 s, CPU time=25.8230 s, Time Ratio=91.4688 +Physical time=2363.0000 s, CPU time=25.8280 s, Time Ratio=91.4899 +Physical time=2364.0000 s, CPU time=25.8340 s, Time Ratio=91.5073 +Physical time=2365.0000 s, CPU time=25.8390 s, Time Ratio=91.5283 +Physical time=2366.0000 s, CPU time=25.8460 s, Time Ratio=91.5422 +Physical time=2367.0000 s, CPU time=25.8560 s, Time Ratio=91.5455 +Physical time=2368.0000 s, CPU time=25.8630 s, Time Ratio=91.5594 +Physical time=2369.0000 s, CPU time=25.8710 s, Time Ratio=91.5697 +Physical time=2370.0000 s, CPU time=25.8790 s, Time Ratio=91.5800 +Physical time=2371.0000 s, CPU time=25.8850 s, Time Ratio=91.5975 +Physical time=2372.0000 s, CPU time=25.8920 s, Time Ratio=91.6113 +Physical time=2373.0000 s, CPU time=25.8980 s, Time Ratio=91.6287 +Physical time=2374.0000 s, CPU time=25.9060 s, Time Ratio=91.6390 +Physical time=2375.0000 s, CPU time=25.9150 s, Time Ratio=91.6458 +Physical time=2376.0000 s, CPU time=25.9210 s, Time Ratio=91.6631 +Physical time=2377.0000 s, CPU time=25.9270 s, Time Ratio=91.6805 +Physical time=2378.0000 s, CPU time=25.9360 s, Time Ratio=91.6872 +Physical time=2379.0000 s, CPU time=25.9460 s, Time Ratio=91.6904 +Physical time=2380.0000 s, CPU time=25.9550 s, Time Ratio=91.6972 +Physical time=2381.0000 s, CPU time=25.9640 s, Time Ratio=91.7039 +Physical time=2382.0000 s, CPU time=25.9750 s, Time Ratio=91.7036 +Physical time=2383.0000 s, CPU time=25.9870 s, Time Ratio=91.6997 +Physical time=2384.0000 s, CPU time=25.9960 s, Time Ratio=91.7064 +Physical time=2385.0000 s, CPU time=26.0040 s, Time Ratio=91.7167 +Physical time=2386.0000 s, CPU time=26.0110 s, Time Ratio=91.7304 +Physical time=2387.0000 s, CPU time=26.0190 s, Time Ratio=91.7407 +Physical time=2388.0000 s, CPU time=26.0270 s, Time Ratio=91.7509 +Physical time=2389.0000 s, CPU time=26.0370 s, Time Ratio=91.7540 +Physical time=2390.0000 s, CPU time=26.0480 s, Time Ratio=91.7537 +Physical time=2391.0000 s, CPU time=26.0580 s, Time Ratio=91.7569 +Physical time=2392.0000 s, CPU time=26.0660 s, Time Ratio=91.7671 +Physical time=2393.0000 s, CPU time=26.0760 s, Time Ratio=91.7702 +Physical time=2394.0000 s, CPU time=26.0830 s, Time Ratio=91.7839 +Physical time=2395.0000 s, CPU time=26.0900 s, Time Ratio=91.7976 +Physical time=2396.0000 s, CPU time=26.0950 s, Time Ratio=91.8184 +Physical time=2397.0000 s, CPU time=26.1000 s, Time Ratio=91.8391 +Physical time=2398.0000 s, CPU time=26.1050 s, Time Ratio=91.8598 +Physical time=2399.0000 s, CPU time=26.1120 s, Time Ratio=91.8735 +Physical time=2400.0000 s, CPU time=26.1170 s, Time Ratio=91.8942 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.782089[degC] + North Wall: T=19.782129[degC] + Ceiling: T=19.781139[degC] + Floor: T=19.783779[degC] + West Wall: T=19.783469[degC] + West Wall (glass, unshaded): T=2.222142[degC] + East Wall: T=19.783427[degC] + East Wall (glass, unshaded): T=2.221566[degC] + East Wall (frame): T=8.450924[degC] + West Wall (frame): T=8.451749[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2400.000000[s] + Averaged room temperature 17.317427[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.250356[W] + North Wall: -1.253159[W] + Ceiling: -1.207820[W] + Floor: -1.366740[W] + West Wall: -0.670691[W] + West Wall (glass, unshaded): 3.113504[W] + East Wall: -0.669422[W] + East Wall (glass, unshaded): 3.115796[W] + East Wall (frame): 0.457018[W] + West Wall (frame): 0.454720[W] + Sensor Information: + Occupied zone air temperature: 290.467427 + Velocity: 0.012424 +ffd_solver(): Synchronized data at t=2400.000000[s] + +Physical time=2401.0000 s, CPU time=26.2340 s, Time Ratio=91.5225 +Physical time=2402.0000 s, CPU time=26.2390 s, Time Ratio=91.5431 +Physical time=2403.0000 s, CPU time=26.2460 s, Time Ratio=91.5568 +Physical time=2404.0000 s, CPU time=26.2550 s, Time Ratio=91.5635 +Physical time=2405.0000 s, CPU time=26.2630 s, Time Ratio=91.5737 +Physical time=2406.0000 s, CPU time=26.2720 s, Time Ratio=91.5804 +Physical time=2407.0000 s, CPU time=26.2770 s, Time Ratio=91.6010 +Physical time=2408.0000 s, CPU time=26.2870 s, Time Ratio=91.6042 +Physical time=2409.0000 s, CPU time=26.2930 s, Time Ratio=91.6213 +Physical time=2410.0000 s, CPU time=26.3000 s, Time Ratio=91.6350 +Physical time=2411.0000 s, CPU time=26.3060 s, Time Ratio=91.6521 +Physical time=2412.0000 s, CPU time=26.3120 s, Time Ratio=91.6692 +Physical time=2413.0000 s, CPU time=26.3180 s, Time Ratio=91.6863 +Physical time=2414.0000 s, CPU time=26.3250 s, Time Ratio=91.6999 +Physical time=2415.0000 s, CPU time=26.3310 s, Time Ratio=91.7170 +Physical time=2416.0000 s, CPU time=26.3430 s, Time Ratio=91.7132 +Physical time=2417.0000 s, CPU time=26.3570 s, Time Ratio=91.7024 +Physical time=2418.0000 s, CPU time=26.3690 s, Time Ratio=91.6986 +Physical time=2419.0000 s, CPU time=26.3800 s, Time Ratio=91.6983 +Physical time=2420.0000 s, CPU time=26.3880 s, Time Ratio=91.7084 +Physical time=2421.0000 s, CPU time=26.4000 s, Time Ratio=91.7045 +Physical time=2422.0000 s, CPU time=26.4070 s, Time Ratio=91.7181 +Physical time=2423.0000 s, CPU time=26.4150 s, Time Ratio=91.7282 +Physical time=2424.0000 s, CPU time=26.4280 s, Time Ratio=91.7209 +Physical time=2425.0000 s, CPU time=26.4400 s, Time Ratio=91.7171 +Physical time=2426.0000 s, CPU time=26.4470 s, Time Ratio=91.7306 +Physical time=2427.0000 s, CPU time=26.4560 s, Time Ratio=91.7372 +Physical time=2428.0000 s, CPU time=26.4620 s, Time Ratio=91.7542 +Physical time=2429.0000 s, CPU time=26.4690 s, Time Ratio=91.7677 +Physical time=2430.0000 s, CPU time=26.4760 s, Time Ratio=91.7812 +Physical time=2431.0000 s, CPU time=26.4830 s, Time Ratio=91.7947 +Physical time=2432.0000 s, CPU time=26.4910 s, Time Ratio=91.8048 +Physical time=2433.0000 s, CPU time=26.4980 s, Time Ratio=91.8183 +Physical time=2434.0000 s, CPU time=26.5030 s, Time Ratio=91.8387 +Physical time=2435.0000 s, CPU time=26.5100 s, Time Ratio=91.8521 +Physical time=2436.0000 s, CPU time=26.5200 s, Time Ratio=91.8552 +Physical time=2437.0000 s, CPU time=26.5310 s, Time Ratio=91.8548 +Physical time=2438.0000 s, CPU time=26.5430 s, Time Ratio=91.8510 +Physical time=2439.0000 s, CPU time=26.5550 s, Time Ratio=91.8471 +Physical time=2440.0000 s, CPU time=26.5640 s, Time Ratio=91.8536 +Physical time=2441.0000 s, CPU time=26.5730 s, Time Ratio=91.8602 +Physical time=2442.0000 s, CPU time=26.5830 s, Time Ratio=91.8632 +Physical time=2443.0000 s, CPU time=26.5980 s, Time Ratio=91.8490 +Physical time=2444.0000 s, CPU time=26.6100 s, Time Ratio=91.8452 +Physical time=2445.0000 s, CPU time=26.6190 s, Time Ratio=91.8517 +Physical time=2446.0000 s, CPU time=26.6280 s, Time Ratio=91.8582 +Physical time=2447.0000 s, CPU time=26.6350 s, Time Ratio=91.8716 +Physical time=2448.0000 s, CPU time=26.6410 s, Time Ratio=91.8884 +Physical time=2449.0000 s, CPU time=26.6480 s, Time Ratio=91.9018 +Physical time=2450.0000 s, CPU time=26.6570 s, Time Ratio=91.9083 +Physical time=2451.0000 s, CPU time=26.6640 s, Time Ratio=91.9217 +Physical time=2452.0000 s, CPU time=26.6710 s, Time Ratio=91.9351 +Physical time=2453.0000 s, CPU time=26.6770 s, Time Ratio=91.9519 +Physical time=2454.0000 s, CPU time=26.6860 s, Time Ratio=91.9583 +Physical time=2455.0000 s, CPU time=26.6960 s, Time Ratio=91.9613 +Physical time=2456.0000 s, CPU time=26.7040 s, Time Ratio=91.9712 +Physical time=2457.0000 s, CPU time=26.7100 s, Time Ratio=91.9880 +Physical time=2458.0000 s, CPU time=26.7200 s, Time Ratio=91.9910 +Physical time=2459.0000 s, CPU time=26.7280 s, Time Ratio=92.0009 +Physical time=2460.0000 s, CPU time=26.7350 s, Time Ratio=92.0142 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.777325[degC] + North Wall: T=19.777366[degC] + Ceiling: T=19.776356[degC] + Floor: T=19.779054[degC] + West Wall: T=19.778730[degC] + West Wall (glass, unshaded): T=2.216689[degC] + East Wall: T=19.778690[degC] + East Wall (glass, unshaded): T=2.216120[degC] + East Wall (frame): T=8.440494[degC] + West Wall (frame): T=8.441330[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2460.000000[s] + Averaged room temperature 17.317039[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.248454[W] + North Wall: -1.250325[W] + Ceiling: -1.204489[W] + Floor: -1.353517[W] + West Wall: -0.659349[W] + West Wall (glass, unshaded): 3.123184[W] + East Wall: -0.669326[W] + East Wall (glass, unshaded): 3.124873[W] + East Wall (frame): 0.455532[W] + West Wall (frame): 0.457867[W] + Sensor Information: + Occupied zone air temperature: 290.467039 + Velocity: 0.003728 +ffd_solver(): Synchronized data at t=2460.000000[s] + +Physical time=2461.0000 s, CPU time=26.8590 s, Time Ratio=91.6266 +Physical time=2462.0000 s, CPU time=26.8700 s, Time Ratio=91.6263 +Physical time=2463.0000 s, CPU time=26.8750 s, Time Ratio=91.6465 +Physical time=2464.0000 s, CPU time=26.8830 s, Time Ratio=91.6564 +Physical time=2465.0000 s, CPU time=26.8890 s, Time Ratio=91.6732 +Physical time=2466.0000 s, CPU time=26.8960 s, Time Ratio=91.6865 +Physical time=2467.0000 s, CPU time=26.9010 s, Time Ratio=91.7066 +Physical time=2468.0000 s, CPU time=26.9130 s, Time Ratio=91.7029 +Physical time=2469.0000 s, CPU time=26.9240 s, Time Ratio=91.7026 +Physical time=2470.0000 s, CPU time=26.9350 s, Time Ratio=91.7022 +Physical time=2471.0000 s, CPU time=26.9460 s, Time Ratio=91.7019 +Physical time=2472.0000 s, CPU time=26.9570 s, Time Ratio=91.7016 +Physical time=2473.0000 s, CPU time=26.9690 s, Time Ratio=91.6979 +Physical time=2474.0000 s, CPU time=26.9790 s, Time Ratio=91.7010 +Physical time=2475.0000 s, CPU time=26.9880 s, Time Ratio=91.7074 +Physical time=2476.0000 s, CPU time=26.9960 s, Time Ratio=91.7173 +Physical time=2477.0000 s, CPU time=27.0060 s, Time Ratio=91.7204 +Physical time=2478.0000 s, CPU time=27.0180 s, Time Ratio=91.7166 +Physical time=2479.0000 s, CPU time=27.0290 s, Time Ratio=91.7163 +Physical time=2480.0000 s, CPU time=27.0350 s, Time Ratio=91.7329 +Physical time=2481.0000 s, CPU time=27.0430 s, Time Ratio=91.7428 +Physical time=2482.0000 s, CPU time=27.0520 s, Time Ratio=91.7492 +Physical time=2483.0000 s, CPU time=27.0590 s, Time Ratio=91.7624 +Physical time=2484.0000 s, CPU time=27.0700 s, Time Ratio=91.7621 +Physical time=2485.0000 s, CPU time=27.0780 s, Time Ratio=91.7719 +Physical time=2486.0000 s, CPU time=27.0920 s, Time Ratio=91.7614 +Physical time=2487.0000 s, CPU time=27.1030 s, Time Ratio=91.7611 +Physical time=2488.0000 s, CPU time=27.1110 s, Time Ratio=91.7709 +Physical time=2489.0000 s, CPU time=27.1180 s, Time Ratio=91.7841 +Physical time=2490.0000 s, CPU time=27.1260 s, Time Ratio=91.7939 +Physical time=2491.0000 s, CPU time=27.1350 s, Time Ratio=91.8003 +Physical time=2492.0000 s, CPU time=27.1410 s, Time Ratio=91.8168 +Physical time=2493.0000 s, CPU time=27.1460 s, Time Ratio=91.8367 +Physical time=2494.0000 s, CPU time=27.1520 s, Time Ratio=91.8533 +Physical time=2495.0000 s, CPU time=27.1580 s, Time Ratio=91.8698 +Physical time=2496.0000 s, CPU time=27.1630 s, Time Ratio=91.8897 +Physical time=2497.0000 s, CPU time=27.1680 s, Time Ratio=91.9096 +Physical time=2498.0000 s, CPU time=27.1740 s, Time Ratio=91.9261 +Physical time=2499.0000 s, CPU time=27.1790 s, Time Ratio=91.9460 +Physical time=2500.0000 s, CPU time=27.1850 s, Time Ratio=91.9625 +Physical time=2501.0000 s, CPU time=27.1910 s, Time Ratio=91.9790 +Physical time=2502.0000 s, CPU time=27.1970 s, Time Ratio=91.9954 +Physical time=2503.0000 s, CPU time=27.2020 s, Time Ratio=92.0153 +Physical time=2504.0000 s, CPU time=27.2100 s, Time Ratio=92.0250 +Physical time=2505.0000 s, CPU time=27.2160 s, Time Ratio=92.0414 +Physical time=2506.0000 s, CPU time=27.2230 s, Time Ratio=92.0545 +Physical time=2507.0000 s, CPU time=27.2300 s, Time Ratio=92.0676 +Physical time=2508.0000 s, CPU time=27.2380 s, Time Ratio=92.0772 +Physical time=2509.0000 s, CPU time=27.2440 s, Time Ratio=92.0937 +Physical time=2510.0000 s, CPU time=27.2510 s, Time Ratio=92.1067 +Physical time=2511.0000 s, CPU time=27.2590 s, Time Ratio=92.1164 +Physical time=2512.0000 s, CPU time=27.2670 s, Time Ratio=92.1260 +Physical time=2513.0000 s, CPU time=27.2740 s, Time Ratio=92.1390 +Physical time=2514.0000 s, CPU time=27.2810 s, Time Ratio=92.1520 +Physical time=2515.0000 s, CPU time=27.2880 s, Time Ratio=92.1651 +Physical time=2516.0000 s, CPU time=27.2970 s, Time Ratio=92.1713 +Physical time=2517.0000 s, CPU time=27.3050 s, Time Ratio=92.1809 +Physical time=2518.0000 s, CPU time=27.3100 s, Time Ratio=92.2007 +Physical time=2519.0000 s, CPU time=27.3170 s, Time Ratio=92.2136 +Physical time=2520.0000 s, CPU time=27.3240 s, Time Ratio=92.2266 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.772596[degC] + North Wall: T=19.772638[degC] + Ceiling: T=19.771612[degC] + Floor: T=19.774370[degC] + West Wall: T=19.774029[degC] + West Wall (glass, unshaded): T=2.211545[degC] + East Wall: T=19.773999[degC] + East Wall (glass, unshaded): T=2.210979[degC] + East Wall (frame): T=8.430239[degC] + West Wall (frame): T=8.431058[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2520.000000[s] + Averaged room temperature 17.303544[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.254783[W] + North Wall: -1.257203[W] + Ceiling: -1.176601[W] + Floor: -1.346205[W] + West Wall: -0.661078[W] + West Wall (glass, unshaded): 3.117953[W] + East Wall: -0.658417[W] + East Wall (glass, unshaded): 3.120869[W] + East Wall (frame): 0.458493[W] + West Wall (frame): 0.457761[W] + Sensor Information: + Occupied zone air temperature: 290.453544 + Velocity: 0.041778 +ffd_solver(): Synchronized data at t=2520.000000[s] + +Physical time=2521.0000 s, CPU time=27.4440 s, Time Ratio=91.8598 +Physical time=2522.0000 s, CPU time=27.4560 s, Time Ratio=91.8561 +Physical time=2523.0000 s, CPU time=27.4670 s, Time Ratio=91.8557 +Physical time=2524.0000 s, CPU time=27.4780 s, Time Ratio=91.8553 +Physical time=2525.0000 s, CPU time=27.4880 s, Time Ratio=91.8583 +Physical time=2526.0000 s, CPU time=27.4970 s, Time Ratio=91.8646 +Physical time=2527.0000 s, CPU time=27.5050 s, Time Ratio=91.8742 +Physical time=2528.0000 s, CPU time=27.5180 s, Time Ratio=91.8671 +Physical time=2529.0000 s, CPU time=27.5300 s, Time Ratio=91.8634 +Physical time=2530.0000 s, CPU time=27.5390 s, Time Ratio=91.8697 +Physical time=2531.0000 s, CPU time=27.5530 s, Time Ratio=91.8593 +Physical time=2532.0000 s, CPU time=27.5650 s, Time Ratio=91.8556 +Physical time=2533.0000 s, CPU time=27.5760 s, Time Ratio=91.8552 +Physical time=2534.0000 s, CPU time=27.5930 s, Time Ratio=91.8349 +Physical time=2535.0000 s, CPU time=27.6110 s, Time Ratio=91.8112 +Physical time=2536.0000 s, CPU time=27.6290 s, Time Ratio=91.7876 +Physical time=2537.0000 s, CPU time=27.6400 s, Time Ratio=91.7873 +Physical time=2538.0000 s, CPU time=27.6490 s, Time Ratio=91.7936 +Physical time=2539.0000 s, CPU time=27.6560 s, Time Ratio=91.8065 +Physical time=2540.0000 s, CPU time=27.6620 s, Time Ratio=91.8227 +Physical time=2541.0000 s, CPU time=27.6700 s, Time Ratio=91.8323 +Physical time=2542.0000 s, CPU time=27.6790 s, Time Ratio=91.8386 +Physical time=2543.0000 s, CPU time=27.6850 s, Time Ratio=91.8548 +Physical time=2544.0000 s, CPU time=27.6920 s, Time Ratio=91.8677 +Physical time=2545.0000 s, CPU time=27.7000 s, Time Ratio=91.8773 +Physical time=2546.0000 s, CPU time=27.7070 s, Time Ratio=91.8901 +Physical time=2547.0000 s, CPU time=27.7130 s, Time Ratio=91.9063 +Physical time=2548.0000 s, CPU time=27.7230 s, Time Ratio=91.9092 +Physical time=2549.0000 s, CPU time=27.7310 s, Time Ratio=91.9188 +Physical time=2550.0000 s, CPU time=27.7390 s, Time Ratio=91.9283 +Physical time=2551.0000 s, CPU time=27.7460 s, Time Ratio=91.9412 +Physical time=2552.0000 s, CPU time=27.7590 s, Time Ratio=91.9341 +Physical time=2553.0000 s, CPU time=27.7670 s, Time Ratio=91.9437 +Physical time=2554.0000 s, CPU time=27.7730 s, Time Ratio=91.9598 +Physical time=2555.0000 s, CPU time=27.7790 s, Time Ratio=91.9760 +Physical time=2556.0000 s, CPU time=27.7850 s, Time Ratio=91.9921 +Physical time=2557.0000 s, CPU time=27.7900 s, Time Ratio=92.0115 +Physical time=2558.0000 s, CPU time=27.7950 s, Time Ratio=92.0309 +Physical time=2559.0000 s, CPU time=27.7990 s, Time Ratio=92.0537 +Physical time=2560.0000 s, CPU time=27.8040 s, Time Ratio=92.0731 +Physical time=2561.0000 s, CPU time=27.8090 s, Time Ratio=92.0925 +Physical time=2562.0000 s, CPU time=27.8140 s, Time Ratio=92.1119 +Physical time=2563.0000 s, CPU time=27.8190 s, Time Ratio=92.1313 +Physical time=2564.0000 s, CPU time=27.8240 s, Time Ratio=92.1507 +Physical time=2565.0000 s, CPU time=27.8350 s, Time Ratio=92.1502 +Physical time=2566.0000 s, CPU time=27.8420 s, Time Ratio=92.1629 +Physical time=2567.0000 s, CPU time=27.8530 s, Time Ratio=92.1624 +Physical time=2568.0000 s, CPU time=27.8670 s, Time Ratio=92.1520 +Physical time=2569.0000 s, CPU time=27.8760 s, Time Ratio=92.1581 +Physical time=2570.0000 s, CPU time=27.8860 s, Time Ratio=92.1609 +Physical time=2571.0000 s, CPU time=27.8950 s, Time Ratio=92.1671 +Physical time=2572.0000 s, CPU time=27.9060 s, Time Ratio=92.1666 +Physical time=2573.0000 s, CPU time=27.9170 s, Time Ratio=92.1661 +Physical time=2574.0000 s, CPU time=27.9250 s, Time Ratio=92.1755 +Physical time=2575.0000 s, CPU time=27.9340 s, Time Ratio=92.1816 +Physical time=2576.0000 s, CPU time=27.9400 s, Time Ratio=92.1976 +Physical time=2577.0000 s, CPU time=27.9490 s, Time Ratio=92.2037 +Physical time=2578.0000 s, CPU time=27.9590 s, Time Ratio=92.2064 +Physical time=2579.0000 s, CPU time=27.9660 s, Time Ratio=92.2191 +Physical time=2580.0000 s, CPU time=27.9730 s, Time Ratio=92.2318 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.767904[degC] + North Wall: T=19.767946[degC] + Ceiling: T=19.766894[degC] + Floor: T=19.769715[degC] + West Wall: T=19.769356[degC] + West Wall (glass, unshaded): T=2.206707[degC] + East Wall: T=19.769335[degC] + East Wall (glass, unshaded): T=2.206136[degC] + East Wall (frame): T=8.420103[degC] + West Wall (frame): T=8.420883[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2580.000000[s] + Averaged room temperature 17.304217[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.254005[W] + North Wall: -1.252705[W] + Ceiling: -1.195943[W] + Floor: -1.366610[W] + West Wall: -0.669476[W] + West Wall (glass, unshaded): 3.112548[W] + East Wall: -0.670673[W] + East Wall (glass, unshaded): 3.116457[W] + East Wall (frame): 0.456606[W] + West Wall (frame): 0.456330[W] + Sensor Information: + Occupied zone air temperature: 290.454217 + Velocity: 0.050402 +ffd_solver(): Synchronized data at t=2580.000000[s] + +Physical time=2581.0000 s, CPU time=28.1200 s, Time Ratio=91.7852 +Physical time=2582.0000 s, CPU time=28.1310 s, Time Ratio=91.7849 +Physical time=2583.0000 s, CPU time=28.1420 s, Time Ratio=91.7845 +Physical time=2584.0000 s, CPU time=28.1500 s, Time Ratio=91.7940 +Physical time=2585.0000 s, CPU time=28.1580 s, Time Ratio=91.8034 +Physical time=2586.0000 s, CPU time=28.1660 s, Time Ratio=91.8128 +Physical time=2587.0000 s, CPU time=28.1740 s, Time Ratio=91.8222 +Physical time=2588.0000 s, CPU time=28.1790 s, Time Ratio=91.8414 +Physical time=2589.0000 s, CPU time=28.1850 s, Time Ratio=91.8574 +Physical time=2590.0000 s, CPU time=28.1920 s, Time Ratio=91.8700 +Physical time=2591.0000 s, CPU time=28.2000 s, Time Ratio=91.8794 +Physical time=2592.0000 s, CPU time=28.2070 s, Time Ratio=91.8921 +Physical time=2593.0000 s, CPU time=28.2130 s, Time Ratio=91.9080 +Physical time=2594.0000 s, CPU time=28.2190 s, Time Ratio=91.9239 +Physical time=2595.0000 s, CPU time=28.2240 s, Time Ratio=91.9430 +Physical time=2596.0000 s, CPU time=28.2310 s, Time Ratio=91.9557 +Physical time=2597.0000 s, CPU time=28.2380 s, Time Ratio=91.9683 +Physical time=2598.0000 s, CPU time=28.2440 s, Time Ratio=91.9841 +Physical time=2599.0000 s, CPU time=28.2500 s, Time Ratio=92.0000 +Physical time=2600.0000 s, CPU time=28.2560 s, Time Ratio=92.0159 +Physical time=2601.0000 s, CPU time=28.2660 s, Time Ratio=92.0187 +Physical time=2602.0000 s, CPU time=28.2720 s, Time Ratio=92.0345 +Physical time=2603.0000 s, CPU time=28.2790 s, Time Ratio=92.0471 +Physical time=2604.0000 s, CPU time=28.2880 s, Time Ratio=92.0532 +Physical time=2605.0000 s, CPU time=28.2960 s, Time Ratio=92.0625 +Physical time=2606.0000 s, CPU time=28.3090 s, Time Ratio=92.0555 +Physical time=2607.0000 s, CPU time=28.3190 s, Time Ratio=92.0583 +Physical time=2608.0000 s, CPU time=28.3280 s, Time Ratio=92.0644 +Physical time=2609.0000 s, CPU time=28.3370 s, Time Ratio=92.0704 +Physical time=2610.0000 s, CPU time=28.3470 s, Time Ratio=92.0732 +Physical time=2611.0000 s, CPU time=28.3570 s, Time Ratio=92.0760 +Physical time=2612.0000 s, CPU time=28.3680 s, Time Ratio=92.0756 +Physical time=2613.0000 s, CPU time=28.3740 s, Time Ratio=92.0914 +Physical time=2614.0000 s, CPU time=28.3830 s, Time Ratio=92.0974 +Physical time=2615.0000 s, CPU time=28.3920 s, Time Ratio=92.1034 +Physical time=2616.0000 s, CPU time=28.4010 s, Time Ratio=92.1094 +Physical time=2617.0000 s, CPU time=28.4110 s, Time Ratio=92.1122 +Physical time=2618.0000 s, CPU time=28.4170 s, Time Ratio=92.1280 +Physical time=2619.0000 s, CPU time=28.4240 s, Time Ratio=92.1404 +Physical time=2620.0000 s, CPU time=28.4360 s, Time Ratio=92.1367 +Physical time=2621.0000 s, CPU time=28.4440 s, Time Ratio=92.1460 +Physical time=2622.0000 s, CPU time=28.4520 s, Time Ratio=92.1552 +Physical time=2623.0000 s, CPU time=28.4620 s, Time Ratio=92.1580 +Physical time=2624.0000 s, CPU time=28.4730 s, Time Ratio=92.1575 +Physical time=2625.0000 s, CPU time=28.4800 s, Time Ratio=92.1699 +Physical time=2626.0000 s, CPU time=28.4870 s, Time Ratio=92.1824 +Physical time=2627.0000 s, CPU time=28.4930 s, Time Ratio=92.1981 +Physical time=2628.0000 s, CPU time=28.5030 s, Time Ratio=92.2008 +Physical time=2629.0000 s, CPU time=28.5110 s, Time Ratio=92.2100 +Physical time=2630.0000 s, CPU time=28.5190 s, Time Ratio=92.2192 +Physical time=2631.0000 s, CPU time=28.5270 s, Time Ratio=92.2284 +Physical time=2632.0000 s, CPU time=28.5360 s, Time Ratio=92.2344 +Physical time=2633.0000 s, CPU time=28.5460 s, Time Ratio=92.2371 +Physical time=2634.0000 s, CPU time=28.5560 s, Time Ratio=92.2398 +Physical time=2635.0000 s, CPU time=28.5660 s, Time Ratio=92.2425 +Physical time=2636.0000 s, CPU time=28.5740 s, Time Ratio=92.2517 +Physical time=2637.0000 s, CPU time=28.5830 s, Time Ratio=92.2576 +Physical time=2638.0000 s, CPU time=28.5920 s, Time Ratio=92.2636 +Physical time=2639.0000 s, CPU time=28.5990 s, Time Ratio=92.2760 +Physical time=2640.0000 s, CPU time=28.6060 s, Time Ratio=92.2883 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.763247[degC] + North Wall: T=19.763289[degC] + Ceiling: T=19.762206[degC] + Floor: T=19.765097[degC] + West Wall: T=19.764724[degC] + West Wall (glass, unshaded): T=2.202362[degC] + East Wall: T=19.764706[degC] + East Wall (glass, unshaded): T=2.201756[degC] + East Wall (frame): T=8.410093[degC] + West Wall (frame): T=8.410872[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2640.000000[s] + Averaged room temperature 17.314214[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.238133[W] + North Wall: -1.243245[W] + Ceiling: -1.207803[W] + Floor: -1.336674[W] + West Wall: -0.663320[W] + West Wall (glass, unshaded): 3.125827[W] + East Wall: -0.659486[W] + East Wall (glass, unshaded): 3.129765[W] + East Wall (frame): 0.459370[W] + West Wall (frame): 0.457763[W] + Sensor Information: + Occupied zone air temperature: 290.464214 + Velocity: 0.032712 +ffd_solver(): Synchronized data at t=2640.000000[s] + +Physical time=2641.0000 s, CPU time=28.7080 s, Time Ratio=91.9953 +Physical time=2642.0000 s, CPU time=28.7150 s, Time Ratio=92.0077 +Physical time=2643.0000 s, CPU time=28.7200 s, Time Ratio=92.0265 +Physical time=2644.0000 s, CPU time=28.7260 s, Time Ratio=92.0421 +Physical time=2645.0000 s, CPU time=28.7310 s, Time Ratio=92.0608 +Physical time=2646.0000 s, CPU time=28.7360 s, Time Ratio=92.0796 +Physical time=2647.0000 s, CPU time=28.7420 s, Time Ratio=92.0952 +Physical time=2648.0000 s, CPU time=28.7470 s, Time Ratio=92.1140 +Physical time=2649.0000 s, CPU time=28.7520 s, Time Ratio=92.1327 +Physical time=2650.0000 s, CPU time=28.7820 s, Time Ratio=92.0714 +Physical time=2651.0000 s, CPU time=28.7900 s, Time Ratio=92.0806 +Physical time=2652.0000 s, CPU time=28.7960 s, Time Ratio=92.0961 +Physical time=2653.0000 s, CPU time=28.8040 s, Time Ratio=92.1053 +Physical time=2654.0000 s, CPU time=28.8120 s, Time Ratio=92.1144 +Physical time=2655.0000 s, CPU time=28.8190 s, Time Ratio=92.1267 +Physical time=2656.0000 s, CPU time=28.8240 s, Time Ratio=92.1454 +Physical time=2657.0000 s, CPU time=28.8330 s, Time Ratio=92.1514 +Physical time=2658.0000 s, CPU time=28.8380 s, Time Ratio=92.1701 +Physical time=2659.0000 s, CPU time=28.8440 s, Time Ratio=92.1855 +Physical time=2660.0000 s, CPU time=28.8490 s, Time Ratio=92.2042 +Physical time=2661.0000 s, CPU time=28.8540 s, Time Ratio=92.2229 +Physical time=2662.0000 s, CPU time=28.8600 s, Time Ratio=92.2384 +Physical time=2663.0000 s, CPU time=28.8650 s, Time Ratio=92.2571 +Physical time=2664.0000 s, CPU time=28.8700 s, Time Ratio=92.2757 +Physical time=2665.0000 s, CPU time=28.8760 s, Time Ratio=92.2912 +Physical time=2666.0000 s, CPU time=28.8810 s, Time Ratio=92.3098 +Physical time=2667.0000 s, CPU time=28.8870 s, Time Ratio=92.3253 +Physical time=2668.0000 s, CPU time=28.8930 s, Time Ratio=92.3407 +Physical time=2669.0000 s, CPU time=28.8980 s, Time Ratio=92.3593 +Physical time=2670.0000 s, CPU time=28.9040 s, Time Ratio=92.3748 +Physical time=2671.0000 s, CPU time=28.9130 s, Time Ratio=92.3806 +Physical time=2672.0000 s, CPU time=28.9200 s, Time Ratio=92.3928 +Physical time=2673.0000 s, CPU time=28.9280 s, Time Ratio=92.4018 +Physical time=2674.0000 s, CPU time=28.9350 s, Time Ratio=92.4140 +Physical time=2675.0000 s, CPU time=28.9430 s, Time Ratio=92.4230 +Physical time=2676.0000 s, CPU time=28.9490 s, Time Ratio=92.4384 +Physical time=2677.0000 s, CPU time=28.9580 s, Time Ratio=92.4442 +Physical time=2678.0000 s, CPU time=28.9640 s, Time Ratio=92.4596 +Physical time=2679.0000 s, CPU time=28.9690 s, Time Ratio=92.4782 +Physical time=2680.0000 s, CPU time=28.9770 s, Time Ratio=92.4871 +Physical time=2681.0000 s, CPU time=28.9850 s, Time Ratio=92.4961 +Physical time=2682.0000 s, CPU time=28.9900 s, Time Ratio=92.5147 +Physical time=2683.0000 s, CPU time=28.9980 s, Time Ratio=92.5236 +Physical time=2684.0000 s, CPU time=29.0070 s, Time Ratio=92.5294 +Physical time=2685.0000 s, CPU time=29.0140 s, Time Ratio=92.5415 +Physical time=2686.0000 s, CPU time=29.0210 s, Time Ratio=92.5537 +Physical time=2687.0000 s, CPU time=29.0280 s, Time Ratio=92.5658 +Physical time=2688.0000 s, CPU time=29.0420 s, Time Ratio=92.5556 +Physical time=2689.0000 s, CPU time=29.0550 s, Time Ratio=92.5486 +Physical time=2690.0000 s, CPU time=29.0640 s, Time Ratio=92.5544 +Physical time=2691.0000 s, CPU time=29.0750 s, Time Ratio=92.5537 +Physical time=2692.0000 s, CPU time=29.0850 s, Time Ratio=92.5563 +Physical time=2693.0000 s, CPU time=29.0960 s, Time Ratio=92.5557 +Physical time=2694.0000 s, CPU time=29.1080 s, Time Ratio=92.5519 +Physical time=2695.0000 s, CPU time=29.1180 s, Time Ratio=92.5544 +Physical time=2696.0000 s, CPU time=29.1320 s, Time Ratio=92.5443 +Physical time=2697.0000 s, CPU time=29.1410 s, Time Ratio=92.5500 +Physical time=2698.0000 s, CPU time=29.1470 s, Time Ratio=92.5653 +Physical time=2699.0000 s, CPU time=29.1530 s, Time Ratio=92.5805 +Physical time=2700.0000 s, CPU time=29.1640 s, Time Ratio=92.5799 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.758618[degC] + North Wall: T=19.758660[degC] + Ceiling: T=19.757562[degC] + Floor: T=19.760509[degC] + West Wall: T=19.760125[degC] + West Wall (glass, unshaded): T=2.198223[degC] + East Wall: T=19.760110[degC] + East Wall (glass, unshaded): T=2.197572[degC] + East Wall (frame): T=8.400210[degC] + West Wall (frame): T=8.401003[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2700.000000[s] + Averaged room temperature 17.299935[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.253054[W] + North Wall: -1.251282[W] + Ceiling: -1.178191[W] + Floor: -1.331783[W] + West Wall: -0.651592[W] + West Wall (glass, unshaded): 3.121210[W] + East Wall: -0.656392[W] + East Wall (glass, unshaded): 3.119661[W] + East Wall (frame): 0.459461[W] + West Wall (frame): 0.460361[W] + Sensor Information: + Occupied zone air temperature: 290.449935 + Velocity: 0.044401 +ffd_solver(): Synchronized data at t=2700.000000[s] + +Physical time=2701.0000 s, CPU time=29.3010 s, Time Ratio=92.1812 +Physical time=2702.0000 s, CPU time=29.3070 s, Time Ratio=92.1964 +Physical time=2703.0000 s, CPU time=29.3120 s, Time Ratio=92.2148 +Physical time=2704.0000 s, CPU time=29.3190 s, Time Ratio=92.2269 +Physical time=2705.0000 s, CPU time=29.3250 s, Time Ratio=92.2421 +Physical time=2706.0000 s, CPU time=29.3330 s, Time Ratio=92.2510 +Physical time=2707.0000 s, CPU time=29.3390 s, Time Ratio=92.2663 +Physical time=2708.0000 s, CPU time=29.3460 s, Time Ratio=92.2783 +Physical time=2709.0000 s, CPU time=29.3530 s, Time Ratio=92.2904 +Physical time=2710.0000 s, CPU time=29.3610 s, Time Ratio=92.2993 +Physical time=2711.0000 s, CPU time=29.3660 s, Time Ratio=92.3176 +Physical time=2712.0000 s, CPU time=29.3710 s, Time Ratio=92.3360 +Physical time=2713.0000 s, CPU time=29.3820 s, Time Ratio=92.3354 +Physical time=2714.0000 s, CPU time=29.3920 s, Time Ratio=92.3381 +Physical time=2715.0000 s, CPU time=29.4000 s, Time Ratio=92.3469 +Physical time=2716.0000 s, CPU time=29.4070 s, Time Ratio=92.3590 +Physical time=2717.0000 s, CPU time=29.4150 s, Time Ratio=92.3678 +Physical time=2718.0000 s, CPU time=29.4240 s, Time Ratio=92.3736 +Physical time=2719.0000 s, CPU time=29.4290 s, Time Ratio=92.3919 +Physical time=2720.0000 s, CPU time=29.4350 s, Time Ratio=92.4070 +Physical time=2721.0000 s, CPU time=29.4410 s, Time Ratio=92.4221 +Physical time=2722.0000 s, CPU time=29.4470 s, Time Ratio=92.4373 +Physical time=2723.0000 s, CPU time=29.4540 s, Time Ratio=92.4492 +Physical time=2724.0000 s, CPU time=29.4610 s, Time Ratio=92.4612 +Physical time=2725.0000 s, CPU time=29.4670 s, Time Ratio=92.4763 +Physical time=2726.0000 s, CPU time=29.4730 s, Time Ratio=92.4914 +Physical time=2727.0000 s, CPU time=29.4780 s, Time Ratio=92.5097 +Physical time=2728.0000 s, CPU time=29.4870 s, Time Ratio=92.5153 +Physical time=2729.0000 s, CPU time=29.4970 s, Time Ratio=92.5179 +Physical time=2730.0000 s, CPU time=29.5050 s, Time Ratio=92.5267 +Physical time=2731.0000 s, CPU time=29.5120 s, Time Ratio=92.5386 +Physical time=2732.0000 s, CPU time=29.5180 s, Time Ratio=92.5537 +Physical time=2733.0000 s, CPU time=29.5240 s, Time Ratio=92.5688 +Physical time=2734.0000 s, CPU time=29.5290 s, Time Ratio=92.5869 +Physical time=2735.0000 s, CPU time=29.5370 s, Time Ratio=92.5957 +Physical time=2736.0000 s, CPU time=29.5430 s, Time Ratio=92.6108 +Physical time=2737.0000 s, CPU time=29.5510 s, Time Ratio=92.6195 +Physical time=2738.0000 s, CPU time=29.5580 s, Time Ratio=92.6314 +Physical time=2739.0000 s, CPU time=29.5640 s, Time Ratio=92.6465 +Physical time=2740.0000 s, CPU time=29.5690 s, Time Ratio=92.6646 +Physical time=2741.0000 s, CPU time=29.5750 s, Time Ratio=92.6796 +Physical time=2742.0000 s, CPU time=29.5800 s, Time Ratio=92.6978 +Physical time=2743.0000 s, CPU time=29.5870 s, Time Ratio=92.7096 +Physical time=2744.0000 s, CPU time=29.5920 s, Time Ratio=92.7278 +Physical time=2745.0000 s, CPU time=29.5980 s, Time Ratio=92.7428 +Physical time=2746.0000 s, CPU time=29.6030 s, Time Ratio=92.7609 +Physical time=2747.0000 s, CPU time=29.6110 s, Time Ratio=92.7696 +Physical time=2748.0000 s, CPU time=29.6160 s, Time Ratio=92.7877 +Physical time=2749.0000 s, CPU time=29.6210 s, Time Ratio=92.8058 +Physical time=2750.0000 s, CPU time=29.6270 s, Time Ratio=92.8207 +Physical time=2751.0000 s, CPU time=29.6320 s, Time Ratio=92.8388 +Physical time=2752.0000 s, CPU time=29.6380 s, Time Ratio=92.8538 +Physical time=2753.0000 s, CPU time=29.6430 s, Time Ratio=92.8718 +Physical time=2754.0000 s, CPU time=29.6490 s, Time Ratio=92.8868 +Physical time=2755.0000 s, CPU time=29.6550 s, Time Ratio=92.9017 +Physical time=2756.0000 s, CPU time=29.6610 s, Time Ratio=92.9166 +Physical time=2757.0000 s, CPU time=29.6670 s, Time Ratio=92.9315 +Physical time=2758.0000 s, CPU time=29.6730 s, Time Ratio=92.9464 +Physical time=2759.0000 s, CPU time=29.6780 s, Time Ratio=92.9645 +Physical time=2760.0000 s, CPU time=29.6850 s, Time Ratio=92.9763 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.754020[degC] + North Wall: T=19.754063[degC] + Ceiling: T=19.752944[degC] + Floor: T=19.755941[degC] + West Wall: T=19.755547[degC] + West Wall (glass, unshaded): T=2.194281[degC] + East Wall: T=19.755537[degC] + East Wall (glass, unshaded): T=2.193665[degC] + East Wall (frame): T=8.390426[degC] + West Wall (frame): T=8.391215[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2760.000000[s] + Averaged room temperature 17.290945[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.249208[W] + North Wall: -1.251313[W] + Ceiling: -1.205465[W] + Floor: -1.368677[W] + West Wall: -0.671192[W] + West Wall (glass, unshaded): 3.117448[W] + East Wall: -0.671831[W] + East Wall (glass, unshaded): 3.117723[W] + East Wall (frame): 0.457310[W] + West Wall (frame): 0.457347[W] + Sensor Information: + Occupied zone air temperature: 290.440945 + Velocity: 0.065274 +ffd_solver(): Synchronized data at t=2760.000000[s] + +Physical time=2761.0000 s, CPU time=29.7910 s, Time Ratio=92.6790 +Physical time=2762.0000 s, CPU time=29.7960 s, Time Ratio=92.6970 +Physical time=2763.0000 s, CPU time=29.8020 s, Time Ratio=92.7119 +Physical time=2764.0000 s, CPU time=29.8070 s, Time Ratio=92.7299 +Physical time=2765.0000 s, CPU time=29.8120 s, Time Ratio=92.7479 +Physical time=2766.0000 s, CPU time=29.8170 s, Time Ratio=92.7659 +Physical time=2767.0000 s, CPU time=29.8230 s, Time Ratio=92.7807 +Physical time=2768.0000 s, CPU time=29.8280 s, Time Ratio=92.7987 +Physical time=2769.0000 s, CPU time=29.8340 s, Time Ratio=92.8136 +Physical time=2770.0000 s, CPU time=29.8410 s, Time Ratio=92.8253 +Physical time=2771.0000 s, CPU time=29.8470 s, Time Ratio=92.8402 +Physical time=2772.0000 s, CPU time=29.8530 s, Time Ratio=92.8550 +Physical time=2773.0000 s, CPU time=29.8600 s, Time Ratio=92.8667 +Physical time=2774.0000 s, CPU time=29.8650 s, Time Ratio=92.8846 +Physical time=2775.0000 s, CPU time=29.8720 s, Time Ratio=92.8964 +Physical time=2776.0000 s, CPU time=29.8790 s, Time Ratio=92.9081 +Physical time=2777.0000 s, CPU time=29.8850 s, Time Ratio=92.9229 +Physical time=2778.0000 s, CPU time=29.8920 s, Time Ratio=92.9346 +Physical time=2779.0000 s, CPU time=29.8990 s, Time Ratio=92.9463 +Physical time=2780.0000 s, CPU time=29.9050 s, Time Ratio=92.9610 +Physical time=2781.0000 s, CPU time=29.9120 s, Time Ratio=92.9727 +Physical time=2782.0000 s, CPU time=29.9210 s, Time Ratio=92.9782 +Physical time=2783.0000 s, CPU time=29.9310 s, Time Ratio=92.9805 +Physical time=2784.0000 s, CPU time=29.9400 s, Time Ratio=92.9860 +Physical time=2785.0000 s, CPU time=29.9470 s, Time Ratio=92.9976 +Physical time=2786.0000 s, CPU time=29.9540 s, Time Ratio=93.0093 +Physical time=2787.0000 s, CPU time=29.9600 s, Time Ratio=93.0240 +Physical time=2788.0000 s, CPU time=29.9660 s, Time Ratio=93.0388 +Physical time=2789.0000 s, CPU time=29.9700 s, Time Ratio=93.0597 +Physical time=2790.0000 s, CPU time=29.9760 s, Time Ratio=93.0745 +Physical time=2791.0000 s, CPU time=29.9810 s, Time Ratio=93.0923 +Physical time=2792.0000 s, CPU time=29.9860 s, Time Ratio=93.1101 +Physical time=2793.0000 s, CPU time=29.9920 s, Time Ratio=93.1248 +Physical time=2794.0000 s, CPU time=29.9980 s, Time Ratio=93.1395 +Physical time=2795.0000 s, CPU time=30.0050 s, Time Ratio=93.1511 +Physical time=2796.0000 s, CPU time=30.0160 s, Time Ratio=93.1503 +Physical time=2797.0000 s, CPU time=30.0250 s, Time Ratio=93.1557 +Physical time=2798.0000 s, CPU time=30.0320 s, Time Ratio=93.1673 +Physical time=2799.0000 s, CPU time=30.0380 s, Time Ratio=93.1820 +Physical time=2800.0000 s, CPU time=30.0450 s, Time Ratio=93.1935 +Physical time=2801.0000 s, CPU time=30.0530 s, Time Ratio=93.2020 +Physical time=2802.0000 s, CPU time=30.0600 s, Time Ratio=93.2136 +Physical time=2803.0000 s, CPU time=30.0670 s, Time Ratio=93.2251 +Physical time=2804.0000 s, CPU time=30.0790 s, Time Ratio=93.2212 +Physical time=2805.0000 s, CPU time=30.0860 s, Time Ratio=93.2327 +Physical time=2806.0000 s, CPU time=30.0980 s, Time Ratio=93.2288 +Physical time=2807.0000 s, CPU time=30.1070 s, Time Ratio=93.2341 +Physical time=2808.0000 s, CPU time=30.1140 s, Time Ratio=93.2457 +Physical time=2809.0000 s, CPU time=30.1250 s, Time Ratio=93.2448 +Physical time=2810.0000 s, CPU time=30.1340 s, Time Ratio=93.2501 +Physical time=2811.0000 s, CPU time=30.1430 s, Time Ratio=93.2555 +Physical time=2812.0000 s, CPU time=30.1520 s, Time Ratio=93.2608 +Physical time=2813.0000 s, CPU time=30.1600 s, Time Ratio=93.2692 +Physical time=2814.0000 s, CPU time=30.1720 s, Time Ratio=93.2653 +Physical time=2815.0000 s, CPU time=30.1810 s, Time Ratio=93.2706 +Physical time=2816.0000 s, CPU time=30.1930 s, Time Ratio=93.2667 +Physical time=2817.0000 s, CPU time=30.2010 s, Time Ratio=93.2751 +Physical time=2818.0000 s, CPU time=30.2120 s, Time Ratio=93.2742 +Physical time=2819.0000 s, CPU time=30.2210 s, Time Ratio=93.2795 +Physical time=2820.0000 s, CPU time=30.2300 s, Time Ratio=93.2848 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.749457[degC] + North Wall: T=19.749499[degC] + Ceiling: T=19.748357[degC] + Floor: T=19.751415[degC] + West Wall: T=19.751004[degC] + West Wall (glass, unshaded): T=2.190761[degC] + East Wall: T=19.751002[degC] + East Wall (glass, unshaded): T=2.190225[degC] + East Wall (frame): T=8.380816[degC] + West Wall (frame): T=8.381575[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2820.000000[s] + Averaged room temperature 17.292287[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.241859[W] + North Wall: -1.245543[W] + Ceiling: -1.205046[W] + Floor: -1.332127[W] + West Wall: -0.662037[W] + West Wall (glass, unshaded): 3.125710[W] + East Wall: -0.659494[W] + East Wall (glass, unshaded): 3.128437[W] + East Wall (frame): 0.459426[W] + West Wall (frame): 0.458937[W] + Sensor Information: + Occupied zone air temperature: 290.442287 + Velocity: 0.031456 +ffd_solver(): Synchronized data at t=2820.000000[s] + +Physical time=2821.0000 s, CPU time=30.3360 s, Time Ratio=92.9918 +Physical time=2822.0000 s, CPU time=30.3450 s, Time Ratio=92.9972 +Physical time=2823.0000 s, CPU time=30.3550 s, Time Ratio=92.9995 +Physical time=2824.0000 s, CPU time=30.3620 s, Time Ratio=93.0110 +Physical time=2825.0000 s, CPU time=30.3700 s, Time Ratio=93.0194 +Physical time=2826.0000 s, CPU time=30.3750 s, Time Ratio=93.0370 +Physical time=2827.0000 s, CPU time=30.3870 s, Time Ratio=93.0332 +Physical time=2828.0000 s, CPU time=30.3940 s, Time Ratio=93.0447 +Physical time=2829.0000 s, CPU time=30.4020 s, Time Ratio=93.0531 +Physical time=2830.0000 s, CPU time=30.4090 s, Time Ratio=93.0646 +Physical time=2831.0000 s, CPU time=30.4200 s, Time Ratio=93.0638 +Physical time=2832.0000 s, CPU time=30.4270 s, Time Ratio=93.0752 +Physical time=2833.0000 s, CPU time=30.4350 s, Time Ratio=93.0836 +Physical time=2834.0000 s, CPU time=30.4520 s, Time Ratio=93.0645 +Physical time=2835.0000 s, CPU time=30.4670 s, Time Ratio=93.0515 +Physical time=2836.0000 s, CPU time=30.4810 s, Time Ratio=93.0416 +Physical time=2837.0000 s, CPU time=30.4980 s, Time Ratio=93.0225 +Physical time=2838.0000 s, CPU time=30.5100 s, Time Ratio=93.0187 +Physical time=2839.0000 s, CPU time=30.5200 s, Time Ratio=93.0210 +Physical time=2840.0000 s, CPU time=30.5320 s, Time Ratio=93.0172 +Physical time=2841.0000 s, CPU time=30.5430 s, Time Ratio=93.0164 +Physical time=2842.0000 s, CPU time=30.5540 s, Time Ratio=93.0156 +Physical time=2843.0000 s, CPU time=30.5640 s, Time Ratio=93.0179 +Physical time=2844.0000 s, CPU time=30.5730 s, Time Ratio=93.0233 +Physical time=2845.0000 s, CPU time=30.5810 s, Time Ratio=93.0316 +Physical time=2846.0000 s, CPU time=30.5880 s, Time Ratio=93.0430 +Physical time=2847.0000 s, CPU time=30.5950 s, Time Ratio=93.0544 +Physical time=2848.0000 s, CPU time=30.6010 s, Time Ratio=93.0689 +Physical time=2849.0000 s, CPU time=30.6070 s, Time Ratio=93.0833 +Physical time=2850.0000 s, CPU time=30.6120 s, Time Ratio=93.1007 +Physical time=2851.0000 s, CPU time=30.6170 s, Time Ratio=93.1182 +Physical time=2852.0000 s, CPU time=30.6230 s, Time Ratio=93.1326 +Physical time=2853.0000 s, CPU time=30.6280 s, Time Ratio=93.1501 +Physical time=2854.0000 s, CPU time=30.6330 s, Time Ratio=93.1675 +Physical time=2855.0000 s, CPU time=30.6380 s, Time Ratio=93.1849 +Physical time=2856.0000 s, CPU time=30.6430 s, Time Ratio=93.2024 +Physical time=2857.0000 s, CPU time=30.6490 s, Time Ratio=93.2167 +Physical time=2858.0000 s, CPU time=30.6540 s, Time Ratio=93.2342 +Physical time=2859.0000 s, CPU time=30.6590 s, Time Ratio=93.2516 +Physical time=2860.0000 s, CPU time=30.6650 s, Time Ratio=93.2659 +Physical time=2861.0000 s, CPU time=30.6700 s, Time Ratio=93.2833 +Physical time=2862.0000 s, CPU time=30.6760 s, Time Ratio=93.2977 +Physical time=2863.0000 s, CPU time=30.6810 s, Time Ratio=93.3151 +Physical time=2864.0000 s, CPU time=30.6870 s, Time Ratio=93.3294 +Physical time=2865.0000 s, CPU time=30.6930 s, Time Ratio=93.3438 +Physical time=2866.0000 s, CPU time=30.7000 s, Time Ratio=93.3550 +Physical time=2867.0000 s, CPU time=30.7070 s, Time Ratio=93.3663 +Physical time=2868.0000 s, CPU time=30.7130 s, Time Ratio=93.3807 +Physical time=2869.0000 s, CPU time=30.7190 s, Time Ratio=93.3950 +Physical time=2870.0000 s, CPU time=30.7240 s, Time Ratio=93.4123 +Physical time=2871.0000 s, CPU time=30.7300 s, Time Ratio=93.4266 +Physical time=2872.0000 s, CPU time=30.7350 s, Time Ratio=93.4440 +Physical time=2873.0000 s, CPU time=30.7410 s, Time Ratio=93.4582 +Physical time=2874.0000 s, CPU time=30.7480 s, Time Ratio=93.4695 +Physical time=2875.0000 s, CPU time=30.7550 s, Time Ratio=93.4807 +Physical time=2876.0000 s, CPU time=30.7620 s, Time Ratio=93.4920 +Physical time=2877.0000 s, CPU time=30.7700 s, Time Ratio=93.5002 +Physical time=2878.0000 s, CPU time=30.7790 s, Time Ratio=93.5053 +Physical time=2879.0000 s, CPU time=30.7850 s, Time Ratio=93.5196 +Physical time=2880.0000 s, CPU time=30.7950 s, Time Ratio=93.5217 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.744921[degC] + North Wall: T=19.744964[degC] + Ceiling: T=19.743808[degC] + Floor: T=19.746919[degC] + West Wall: T=19.746498[degC] + West Wall (glass, unshaded): T=2.187462[degC] + East Wall: T=19.746500[degC] + East Wall (glass, unshaded): T=2.186938[degC] + East Wall (frame): T=8.371348[degC] + West Wall (frame): T=8.372099[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2880.000000[s] + Averaged room temperature 17.278569[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.254048[W] + North Wall: -1.257792[W] + Ceiling: -1.181750[W] + Floor: -1.341728[W] + West Wall: -0.657934[W] + West Wall (glass, unshaded): 3.115412[W] + East Wall: -0.657590[W] + East Wall (glass, unshaded): 3.116085[W] + East Wall (frame): 0.460040[W] + West Wall (frame): 0.460120[W] + Sensor Information: + Occupied zone air temperature: 290.428569 + Velocity: 0.063966 +ffd_solver(): Synchronized data at t=2880.000000[s] + +Physical time=2881.0000 s, CPU time=30.9040 s, Time Ratio=93.2242 +Physical time=2882.0000 s, CPU time=30.9090 s, Time Ratio=93.2415 +Physical time=2883.0000 s, CPU time=30.9150 s, Time Ratio=93.2557 +Physical time=2884.0000 s, CPU time=30.9200 s, Time Ratio=93.2730 +Physical time=2885.0000 s, CPU time=30.9250 s, Time Ratio=93.2902 +Physical time=2886.0000 s, CPU time=30.9310 s, Time Ratio=93.3045 +Physical time=2887.0000 s, CPU time=30.9360 s, Time Ratio=93.3217 +Physical time=2888.0000 s, CPU time=30.9480 s, Time Ratio=93.3178 +Physical time=2889.0000 s, CPU time=30.9540 s, Time Ratio=93.3320 +Physical time=2890.0000 s, CPU time=30.9650 s, Time Ratio=93.3312 +Physical time=2891.0000 s, CPU time=30.9710 s, Time Ratio=93.3454 +Physical time=2892.0000 s, CPU time=30.9780 s, Time Ratio=93.3566 +Physical time=2893.0000 s, CPU time=30.9840 s, Time Ratio=93.3708 +Physical time=2894.0000 s, CPU time=30.9910 s, Time Ratio=93.3819 +Physical time=2895.0000 s, CPU time=31.0020 s, Time Ratio=93.3811 +Physical time=2896.0000 s, CPU time=31.0090 s, Time Ratio=93.3922 +Physical time=2897.0000 s, CPU time=31.0160 s, Time Ratio=93.4034 +Physical time=2898.0000 s, CPU time=31.0240 s, Time Ratio=93.4116 +Physical time=2899.0000 s, CPU time=31.0330 s, Time Ratio=93.4167 +Physical time=2900.0000 s, CPU time=31.0410 s, Time Ratio=93.4248 +Physical time=2901.0000 s, CPU time=31.0500 s, Time Ratio=93.4300 +Physical time=2902.0000 s, CPU time=31.0610 s, Time Ratio=93.4291 +Physical time=2903.0000 s, CPU time=31.0730 s, Time Ratio=93.4252 +Physical time=2904.0000 s, CPU time=31.0890 s, Time Ratio=93.4092 +Physical time=2905.0000 s, CPU time=31.1000 s, Time Ratio=93.4084 +Physical time=2906.0000 s, CPU time=31.1150 s, Time Ratio=93.3955 +Physical time=2907.0000 s, CPU time=31.1220 s, Time Ratio=93.4066 +Physical time=2908.0000 s, CPU time=31.1320 s, Time Ratio=93.4087 +Physical time=2909.0000 s, CPU time=31.1410 s, Time Ratio=93.4138 +Physical time=2910.0000 s, CPU time=31.1480 s, Time Ratio=93.4249 +Physical time=2911.0000 s, CPU time=31.1580 s, Time Ratio=93.4270 +Physical time=2912.0000 s, CPU time=31.1670 s, Time Ratio=93.4322 +Physical time=2913.0000 s, CPU time=31.1730 s, Time Ratio=93.4463 +Physical time=2914.0000 s, CPU time=31.1810 s, Time Ratio=93.4543 +Physical time=2915.0000 s, CPU time=31.1860 s, Time Ratio=93.4714 +Physical time=2916.0000 s, CPU time=31.1930 s, Time Ratio=93.4825 +Physical time=2917.0000 s, CPU time=31.1990 s, Time Ratio=93.4966 +Physical time=2918.0000 s, CPU time=31.2040 s, Time Ratio=93.5137 +Physical time=2919.0000 s, CPU time=31.2090 s, Time Ratio=93.5307 +Physical time=2920.0000 s, CPU time=31.2160 s, Time Ratio=93.5418 +Physical time=2921.0000 s, CPU time=31.2230 s, Time Ratio=93.5528 +Physical time=2922.0000 s, CPU time=31.2310 s, Time Ratio=93.5609 +Physical time=2923.0000 s, CPU time=31.2420 s, Time Ratio=93.5600 +Physical time=2924.0000 s, CPU time=31.2490 s, Time Ratio=93.5710 +Physical time=2925.0000 s, CPU time=31.2610 s, Time Ratio=93.5671 +Physical time=2926.0000 s, CPU time=31.2660 s, Time Ratio=93.5841 +Physical time=2927.0000 s, CPU time=31.2760 s, Time Ratio=93.5861 +Physical time=2928.0000 s, CPU time=31.2860 s, Time Ratio=93.5882 +Physical time=2929.0000 s, CPU time=31.2960 s, Time Ratio=93.5902 +Physical time=2930.0000 s, CPU time=31.3050 s, Time Ratio=93.5953 +Physical time=2931.0000 s, CPU time=31.3110 s, Time Ratio=93.6093 +Physical time=2932.0000 s, CPU time=31.3180 s, Time Ratio=93.6203 +Physical time=2933.0000 s, CPU time=31.3260 s, Time Ratio=93.6283 +Physical time=2934.0000 s, CPU time=31.3330 s, Time Ratio=93.6393 +Physical time=2935.0000 s, CPU time=31.3400 s, Time Ratio=93.6503 +Physical time=2936.0000 s, CPU time=31.3470 s, Time Ratio=93.6613 +Physical time=2937.0000 s, CPU time=31.3530 s, Time Ratio=93.6752 +Physical time=2938.0000 s, CPU time=31.3600 s, Time Ratio=93.6862 +Physical time=2939.0000 s, CPU time=31.3680 s, Time Ratio=93.6942 +Physical time=2940.0000 s, CPU time=31.3760 s, Time Ratio=93.7022 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.740415[degC] + North Wall: T=19.740460[degC] + Ceiling: T=19.739281[degC] + Floor: T=19.742443[degC] + West Wall: T=19.742013[degC] + West Wall (glass, unshaded): T=2.184470[degC] + East Wall: T=19.742017[degC] + East Wall (glass, unshaded): T=2.183954[degC] + East Wall (frame): T=8.361979[degC] + West Wall (frame): T=8.362722[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=2940.000000[s] + Averaged room temperature 17.285173[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.236809[W] + North Wall: -1.251412[W] + Ceiling: -1.219086[W] + Floor: -1.348720[W] + West Wall: -0.672871[W] + West Wall (glass, unshaded): 3.120334[W] + East Wall: -0.663751[W] + East Wall (glass, unshaded): 3.126307[W] + East Wall (frame): 0.460373[W] + West Wall (frame): 0.456481[W] + Sensor Information: + Occupied zone air temperature: 290.435173 + Velocity: 0.019398 +ffd_solver(): Synchronized data at t=2940.000000[s] + +Physical time=2941.0000 s, CPU time=31.4840 s, Time Ratio=93.4125 +Physical time=2942.0000 s, CPU time=31.4960 s, Time Ratio=93.4087 +Physical time=2943.0000 s, CPU time=31.5060 s, Time Ratio=93.4108 +Physical time=2944.0000 s, CPU time=31.5130 s, Time Ratio=93.4218 +Physical time=2945.0000 s, CPU time=31.5190 s, Time Ratio=93.4357 +Physical time=2946.0000 s, CPU time=31.5250 s, Time Ratio=93.4496 +Physical time=2947.0000 s, CPU time=31.5320 s, Time Ratio=93.4606 +Physical time=2948.0000 s, CPU time=31.5390 s, Time Ratio=93.4716 +Physical time=2949.0000 s, CPU time=31.5470 s, Time Ratio=93.4796 +Physical time=2950.0000 s, CPU time=31.5570 s, Time Ratio=93.4816 +Physical time=2951.0000 s, CPU time=31.5680 s, Time Ratio=93.4807 +Physical time=2952.0000 s, CPU time=31.5740 s, Time Ratio=93.4946 +Physical time=2953.0000 s, CPU time=31.5840 s, Time Ratio=93.4967 +Physical time=2954.0000 s, CPU time=31.5920 s, Time Ratio=93.5047 +Physical time=2955.0000 s, CPU time=31.5980 s, Time Ratio=93.5186 +Physical time=2956.0000 s, CPU time=31.6030 s, Time Ratio=93.5354 +Physical time=2957.0000 s, CPU time=31.6090 s, Time Ratio=93.5493 +Physical time=2958.0000 s, CPU time=31.6140 s, Time Ratio=93.5661 +Physical time=2959.0000 s, CPU time=31.6200 s, Time Ratio=93.5800 +Physical time=2960.0000 s, CPU time=31.6250 s, Time Ratio=93.5968 +Physical time=2961.0000 s, CPU time=31.6310 s, Time Ratio=93.6107 +Physical time=2962.0000 s, CPU time=31.6370 s, Time Ratio=93.6246 +Physical time=2963.0000 s, CPU time=31.6420 s, Time Ratio=93.6414 +Physical time=2964.0000 s, CPU time=31.6480 s, Time Ratio=93.6552 +Physical time=2965.0000 s, CPU time=31.6540 s, Time Ratio=93.6690 +Physical time=2966.0000 s, CPU time=31.6590 s, Time Ratio=93.6858 +Physical time=2967.0000 s, CPU time=31.6640 s, Time Ratio=93.7026 +Physical time=2968.0000 s, CPU time=31.6700 s, Time Ratio=93.7165 +Physical time=2969.0000 s, CPU time=31.6760 s, Time Ratio=93.7303 +Physical time=2970.0000 s, CPU time=31.6820 s, Time Ratio=93.7441 +Physical time=2971.0000 s, CPU time=31.6870 s, Time Ratio=93.7608 +Physical time=2972.0000 s, CPU time=31.6920 s, Time Ratio=93.7776 +Physical time=2973.0000 s, CPU time=31.6980 s, Time Ratio=93.7914 +Physical time=2974.0000 s, CPU time=31.7030 s, Time Ratio=93.8082 +Physical time=2975.0000 s, CPU time=31.7090 s, Time Ratio=93.8219 +Physical time=2976.0000 s, CPU time=31.7140 s, Time Ratio=93.8387 +Physical time=2977.0000 s, CPU time=31.7210 s, Time Ratio=93.8495 +Physical time=2978.0000 s, CPU time=31.7280 s, Time Ratio=93.8603 +Physical time=2979.0000 s, CPU time=31.7360 s, Time Ratio=93.8682 +Physical time=2980.0000 s, CPU time=31.7450 s, Time Ratio=93.8731 +Physical time=2981.0000 s, CPU time=31.7520 s, Time Ratio=93.8838 +Physical time=2982.0000 s, CPU time=31.7580 s, Time Ratio=93.8976 +Physical time=2983.0000 s, CPU time=31.7640 s, Time Ratio=93.9113 +Physical time=2984.0000 s, CPU time=31.7690 s, Time Ratio=93.9280 +Physical time=2985.0000 s, CPU time=31.7740 s, Time Ratio=93.9447 +Physical time=2986.0000 s, CPU time=31.7800 s, Time Ratio=93.9585 +Physical time=2987.0000 s, CPU time=31.7850 s, Time Ratio=93.9751 +Physical time=2988.0000 s, CPU time=31.7900 s, Time Ratio=93.9918 +Physical time=2989.0000 s, CPU time=31.7940 s, Time Ratio=94.0114 +Physical time=2990.0000 s, CPU time=31.8010 s, Time Ratio=94.0222 +Physical time=2991.0000 s, CPU time=31.8100 s, Time Ratio=94.0270 +Physical time=2992.0000 s, CPU time=31.8180 s, Time Ratio=94.0348 +Physical time=2993.0000 s, CPU time=31.8260 s, Time Ratio=94.0426 +Physical time=2994.0000 s, CPU time=31.8320 s, Time Ratio=94.0563 +Physical time=2995.0000 s, CPU time=31.8390 s, Time Ratio=94.0670 +Physical time=2996.0000 s, CPU time=31.8460 s, Time Ratio=94.0777 +Physical time=2997.0000 s, CPU time=31.8590 s, Time Ratio=94.0707 +Physical time=2998.0000 s, CPU time=31.8690 s, Time Ratio=94.0726 +Physical time=2999.0000 s, CPU time=31.8770 s, Time Ratio=94.0804 +Physical time=3000.0000 s, CPU time=31.8860 s, Time Ratio=94.0852 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.735936[degC] + North Wall: T=19.735986[degC] + Ceiling: T=19.734787[degC] + Floor: T=19.738001[degC] + West Wall: T=19.737562[degC] + West Wall (glass, unshaded): T=2.181812[degC] + East Wall: T=19.737565[degC] + East Wall (glass, unshaded): T=2.181257[degC] + East Wall (frame): T=8.352738[degC] + West Wall (frame): T=8.353524[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3000.000000[s] + Averaged room temperature 17.277281[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.250553[W] + North Wall: -1.246701[W] + Ceiling: -1.214424[W] + Floor: -1.344796[W] + West Wall: -0.658766[W] + West Wall (glass, unshaded): 3.116811[W] + East Wall: -0.659887[W] + East Wall (glass, unshaded): 3.124450[W] + East Wall (frame): 0.461335[W] + West Wall (frame): 0.461157[W] + Sensor Information: + Occupied zone air temperature: 290.427281 + Velocity: 0.036499 +ffd_solver(): Synchronized data at t=3000.000000[s] + +Physical time=3001.0000 s, CPU time=32.0120 s, Time Ratio=93.7461 +Physical time=3002.0000 s, CPU time=32.0180 s, Time Ratio=93.7598 +Physical time=3003.0000 s, CPU time=32.0250 s, Time Ratio=93.7705 +Physical time=3004.0000 s, CPU time=32.0310 s, Time Ratio=93.7841 +Physical time=3005.0000 s, CPU time=32.0370 s, Time Ratio=93.7978 +Physical time=3006.0000 s, CPU time=32.0460 s, Time Ratio=93.8027 +Physical time=3007.0000 s, CPU time=32.0510 s, Time Ratio=93.8192 +Physical time=3008.0000 s, CPU time=32.0560 s, Time Ratio=93.8358 +Physical time=3009.0000 s, CPU time=32.0610 s, Time Ratio=93.8523 +Physical time=3010.0000 s, CPU time=32.0660 s, Time Ratio=93.8689 +Physical time=3011.0000 s, CPU time=32.0720 s, Time Ratio=93.8825 +Physical time=3012.0000 s, CPU time=32.0780 s, Time Ratio=93.8961 +Physical time=3013.0000 s, CPU time=32.0850 s, Time Ratio=93.9068 +Physical time=3014.0000 s, CPU time=32.0910 s, Time Ratio=93.9204 +Physical time=3015.0000 s, CPU time=32.0970 s, Time Ratio=93.9340 +Physical time=3016.0000 s, CPU time=32.1030 s, Time Ratio=93.9476 +Physical time=3017.0000 s, CPU time=32.1080 s, Time Ratio=93.9641 +Physical time=3018.0000 s, CPU time=32.1190 s, Time Ratio=93.9631 +Physical time=3019.0000 s, CPU time=32.1250 s, Time Ratio=93.9767 +Physical time=3020.0000 s, CPU time=32.1310 s, Time Ratio=93.9902 +Physical time=3021.0000 s, CPU time=32.1360 s, Time Ratio=94.0067 +Physical time=3022.0000 s, CPU time=32.1420 s, Time Ratio=94.0203 +Physical time=3023.0000 s, CPU time=32.1470 s, Time Ratio=94.0368 +Physical time=3024.0000 s, CPU time=32.1520 s, Time Ratio=94.0532 +Physical time=3025.0000 s, CPU time=32.1570 s, Time Ratio=94.0697 +Physical time=3026.0000 s, CPU time=32.1620 s, Time Ratio=94.0862 +Physical time=3027.0000 s, CPU time=32.1670 s, Time Ratio=94.1027 +Physical time=3028.0000 s, CPU time=32.1720 s, Time Ratio=94.1191 +Physical time=3029.0000 s, CPU time=32.1770 s, Time Ratio=94.1356 +Physical time=3030.0000 s, CPU time=32.1820 s, Time Ratio=94.1520 +Physical time=3031.0000 s, CPU time=32.1870 s, Time Ratio=94.1685 +Physical time=3032.0000 s, CPU time=32.1920 s, Time Ratio=94.1849 +Physical time=3033.0000 s, CPU time=32.1990 s, Time Ratio=94.1955 +Physical time=3034.0000 s, CPU time=32.2060 s, Time Ratio=94.2060 +Physical time=3035.0000 s, CPU time=32.2140 s, Time Ratio=94.2137 +Physical time=3036.0000 s, CPU time=32.2230 s, Time Ratio=94.2184 +Physical time=3037.0000 s, CPU time=32.2350 s, Time Ratio=94.2144 +Physical time=3038.0000 s, CPU time=32.2510 s, Time Ratio=94.1986 +Physical time=3039.0000 s, CPU time=32.2670 s, Time Ratio=94.1829 +Physical time=3040.0000 s, CPU time=32.2830 s, Time Ratio=94.1672 +Physical time=3041.0000 s, CPU time=32.2970 s, Time Ratio=94.1574 +Physical time=3042.0000 s, CPU time=32.3090 s, Time Ratio=94.1533 +Physical time=3043.0000 s, CPU time=32.3190 s, Time Ratio=94.1551 +Physical time=3044.0000 s, CPU time=32.3270 s, Time Ratio=94.1628 +Physical time=3045.0000 s, CPU time=32.3340 s, Time Ratio=94.1733 +Physical time=3046.0000 s, CPU time=32.3400 s, Time Ratio=94.1868 +Physical time=3047.0000 s, CPU time=32.3460 s, Time Ratio=94.2002 +Physical time=3048.0000 s, CPU time=32.3510 s, Time Ratio=94.2166 +Physical time=3049.0000 s, CPU time=32.3560 s, Time Ratio=94.2329 +Physical time=3050.0000 s, CPU time=32.3610 s, Time Ratio=94.2493 +Physical time=3051.0000 s, CPU time=32.3660 s, Time Ratio=94.2656 +Physical time=3052.0000 s, CPU time=32.3710 s, Time Ratio=94.2819 +Physical time=3053.0000 s, CPU time=32.3760 s, Time Ratio=94.2982 +Physical time=3054.0000 s, CPU time=32.3870 s, Time Ratio=94.2971 +Physical time=3055.0000 s, CPU time=32.3920 s, Time Ratio=94.3134 +Physical time=3056.0000 s, CPU time=32.3970 s, Time Ratio=94.3297 +Physical time=3057.0000 s, CPU time=32.4020 s, Time Ratio=94.3460 +Physical time=3058.0000 s, CPU time=32.4070 s, Time Ratio=94.3623 +Physical time=3059.0000 s, CPU time=32.4120 s, Time Ratio=94.3786 +Physical time=3060.0000 s, CPU time=32.4290 s, Time Ratio=94.3600 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.731484[degC] + North Wall: T=19.731537[degC] + Ceiling: T=19.730330[degC] + Floor: T=19.733587[degC] + West Wall: T=19.733140[degC] + West Wall (glass, unshaded): T=2.179383[degC] + East Wall: T=19.733142[degC] + East Wall (glass, unshaded): T=2.178700[degC] + East Wall (frame): T=8.343619[degC] + West Wall (frame): T=8.344451[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3060.000000[s] + Averaged room temperature 17.257992[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.253787[W] + North Wall: -1.259032[W] + Ceiling: -1.207243[W] + Floor: -1.374840[W] + West Wall: -0.672647[W] + West Wall (glass, unshaded): 3.110590[W] + East Wall: -0.666300[W] + East Wall (glass, unshaded): 3.117802[W] + East Wall (frame): 0.460954[W] + West Wall (frame): 0.458175[W] + Sensor Information: + Occupied zone air temperature: 290.407992 + Velocity: 0.013926 +ffd_solver(): Synchronized data at t=3060.000000[s] + +Physical time=3061.0000 s, CPU time=32.5780 s, Time Ratio=93.9591 +Physical time=3062.0000 s, CPU time=32.5840 s, Time Ratio=93.9725 +Physical time=3063.0000 s, CPU time=32.5940 s, Time Ratio=93.9744 +Physical time=3064.0000 s, CPU time=32.5990 s, Time Ratio=93.9906 +Physical time=3065.0000 s, CPU time=32.6050 s, Time Ratio=94.0040 +Physical time=3066.0000 s, CPU time=32.6130 s, Time Ratio=94.0116 +Physical time=3067.0000 s, CPU time=32.6200 s, Time Ratio=94.0221 +Physical time=3068.0000 s, CPU time=32.6260 s, Time Ratio=94.0354 +Physical time=3069.0000 s, CPU time=32.6320 s, Time Ratio=94.0488 +Physical time=3070.0000 s, CPU time=32.6380 s, Time Ratio=94.0621 +Physical time=3071.0000 s, CPU time=32.6430 s, Time Ratio=94.0784 +Physical time=3072.0000 s, CPU time=32.6490 s, Time Ratio=94.0917 +Physical time=3073.0000 s, CPU time=32.6550 s, Time Ratio=94.1050 +Physical time=3074.0000 s, CPU time=32.6600 s, Time Ratio=94.1212 +Physical time=3075.0000 s, CPU time=32.6660 s, Time Ratio=94.1346 +Physical time=3076.0000 s, CPU time=32.6720 s, Time Ratio=94.1479 +Physical time=3077.0000 s, CPU time=32.6770 s, Time Ratio=94.1641 +Physical time=3078.0000 s, CPU time=32.6820 s, Time Ratio=94.1803 +Physical time=3079.0000 s, CPU time=32.6870 s, Time Ratio=94.1965 +Physical time=3080.0000 s, CPU time=32.6930 s, Time Ratio=94.2098 +Physical time=3081.0000 s, CPU time=32.7000 s, Time Ratio=94.2202 +Physical time=3082.0000 s, CPU time=32.7060 s, Time Ratio=94.2335 +Physical time=3083.0000 s, CPU time=32.7120 s, Time Ratio=94.2468 +Physical time=3084.0000 s, CPU time=32.7200 s, Time Ratio=94.2543 +Physical time=3085.0000 s, CPU time=32.7270 s, Time Ratio=94.2647 +Physical time=3086.0000 s, CPU time=32.7340 s, Time Ratio=94.2751 +Physical time=3087.0000 s, CPU time=32.7410 s, Time Ratio=94.2855 +Physical time=3088.0000 s, CPU time=32.7470 s, Time Ratio=94.2987 +Physical time=3089.0000 s, CPU time=32.7530 s, Time Ratio=94.3120 +Physical time=3090.0000 s, CPU time=32.7610 s, Time Ratio=94.3195 +Physical time=3091.0000 s, CPU time=32.7670 s, Time Ratio=94.3327 +Physical time=3092.0000 s, CPU time=32.7730 s, Time Ratio=94.3460 +Physical time=3093.0000 s, CPU time=32.7800 s, Time Ratio=94.3563 +Physical time=3094.0000 s, CPU time=32.7850 s, Time Ratio=94.3724 +Physical time=3095.0000 s, CPU time=32.7920 s, Time Ratio=94.3828 +Physical time=3096.0000 s, CPU time=32.7980 s, Time Ratio=94.3960 +Physical time=3097.0000 s, CPU time=32.8050 s, Time Ratio=94.4063 +Physical time=3098.0000 s, CPU time=32.8130 s, Time Ratio=94.4138 +Physical time=3099.0000 s, CPU time=32.8190 s, Time Ratio=94.4270 +Physical time=3100.0000 s, CPU time=32.8270 s, Time Ratio=94.4345 +Physical time=3101.0000 s, CPU time=32.8360 s, Time Ratio=94.4390 +Physical time=3102.0000 s, CPU time=32.8470 s, Time Ratio=94.4378 +Physical time=3103.0000 s, CPU time=32.8610 s, Time Ratio=94.4280 +Physical time=3104.0000 s, CPU time=32.8750 s, Time Ratio=94.4183 +Physical time=3105.0000 s, CPU time=32.8830 s, Time Ratio=94.4257 +Physical time=3106.0000 s, CPU time=32.8940 s, Time Ratio=94.4245 +Physical time=3107.0000 s, CPU time=32.9010 s, Time Ratio=94.4348 +Physical time=3108.0000 s, CPU time=32.9090 s, Time Ratio=94.4422 +Physical time=3109.0000 s, CPU time=32.9170 s, Time Ratio=94.4497 +Physical time=3110.0000 s, CPU time=32.9280 s, Time Ratio=94.4485 +Physical time=3111.0000 s, CPU time=32.9360 s, Time Ratio=94.4559 +Physical time=3112.0000 s, CPU time=32.9440 s, Time Ratio=94.4633 +Physical time=3113.0000 s, CPU time=32.9540 s, Time Ratio=94.4650 +Physical time=3114.0000 s, CPU time=32.9610 s, Time Ratio=94.4753 +Physical time=3115.0000 s, CPU time=32.9700 s, Time Ratio=94.4798 +Physical time=3116.0000 s, CPU time=32.9810 s, Time Ratio=94.4786 +Physical time=3117.0000 s, CPU time=32.9900 s, Time Ratio=94.4832 +Physical time=3118.0000 s, CPU time=32.9980 s, Time Ratio=94.4906 +Physical time=3119.0000 s, CPU time=33.0120 s, Time Ratio=94.4808 +Physical time=3120.0000 s, CPU time=33.0220 s, Time Ratio=94.4825 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.727064[degC] + North Wall: T=19.727116[degC] + Ceiling: T=19.725897[degC] + Floor: T=19.729208[degC] + West Wall: T=19.728744[degC] + West Wall (glass, unshaded): T=2.177329[degC] + East Wall: T=19.728748[degC] + East Wall (glass, unshaded): T=2.176514[degC] + East Wall (frame): T=8.334633[degC] + West Wall (frame): T=8.335495[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3120.000000[s] + Averaged room temperature 17.251322[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.258418[W] + North Wall: -1.261888[W] + Ceiling: -1.203549[W] + Floor: -1.367028[W] + West Wall: -0.674805[W] + West Wall (glass, unshaded): 3.111584[W] + East Wall: -0.662975[W] + East Wall (glass, unshaded): 3.113250[W] + East Wall (frame): 0.460755[W] + West Wall (frame): 0.455427[W] + Sensor Information: + Occupied zone air temperature: 290.401322 + Velocity: 0.018440 +ffd_solver(): Synchronized data at t=3120.000000[s] + +Physical time=3121.0000 s, CPU time=33.1440 s, Time Ratio=94.1649 +Physical time=3122.0000 s, CPU time=33.1500 s, Time Ratio=94.1780 +Physical time=3123.0000 s, CPU time=33.1560 s, Time Ratio=94.1911 +Physical time=3124.0000 s, CPU time=33.1670 s, Time Ratio=94.1900 +Physical time=3125.0000 s, CPU time=33.1890 s, Time Ratio=94.1577 +Physical time=3126.0000 s, CPU time=33.2040 s, Time Ratio=94.1453 +Physical time=3127.0000 s, CPU time=33.2200 s, Time Ratio=94.1300 +Physical time=3128.0000 s, CPU time=33.2330 s, Time Ratio=94.1233 +Physical time=3129.0000 s, CPU time=33.2450 s, Time Ratio=94.1194 +Physical time=3130.0000 s, CPU time=33.2580 s, Time Ratio=94.1127 +Physical time=3131.0000 s, CPU time=33.2690 s, Time Ratio=94.1116 +Physical time=3132.0000 s, CPU time=33.2790 s, Time Ratio=94.1134 +Physical time=3133.0000 s, CPU time=33.2870 s, Time Ratio=94.1208 +Physical time=3134.0000 s, CPU time=33.2940 s, Time Ratio=94.1311 +Physical time=3135.0000 s, CPU time=33.3010 s, Time Ratio=94.1413 +Physical time=3136.0000 s, CPU time=33.3130 s, Time Ratio=94.1374 +Physical time=3137.0000 s, CPU time=33.3250 s, Time Ratio=94.1335 +Physical time=3138.0000 s, CPU time=33.3350 s, Time Ratio=94.1353 +Physical time=3139.0000 s, CPU time=33.3420 s, Time Ratio=94.1455 +Physical time=3140.0000 s, CPU time=33.3510 s, Time Ratio=94.1501 +Physical time=3141.0000 s, CPU time=33.3630 s, Time Ratio=94.1462 +Physical time=3142.0000 s, CPU time=33.3760 s, Time Ratio=94.1395 +Physical time=3143.0000 s, CPU time=33.3880 s, Time Ratio=94.1356 +Physical time=3144.0000 s, CPU time=33.4000 s, Time Ratio=94.1317 +Physical time=3145.0000 s, CPU time=33.4100 s, Time Ratio=94.1335 +Physical time=3146.0000 s, CPU time=33.4190 s, Time Ratio=94.1381 +Physical time=3147.0000 s, CPU time=33.4270 s, Time Ratio=94.1455 +Physical time=3148.0000 s, CPU time=33.4340 s, Time Ratio=94.1556 +Physical time=3149.0000 s, CPU time=33.4400 s, Time Ratio=94.1687 +Physical time=3150.0000 s, CPU time=33.4450 s, Time Ratio=94.1845 +Physical time=3151.0000 s, CPU time=33.4510 s, Time Ratio=94.1975 +Physical time=3152.0000 s, CPU time=33.4620 s, Time Ratio=94.1964 +Physical time=3153.0000 s, CPU time=33.4670 s, Time Ratio=94.2122 +Physical time=3154.0000 s, CPU time=33.4720 s, Time Ratio=94.2280 +Physical time=3155.0000 s, CPU time=33.4830 s, Time Ratio=94.2269 +Physical time=3156.0000 s, CPU time=33.4890 s, Time Ratio=94.2399 +Physical time=3157.0000 s, CPU time=33.4960 s, Time Ratio=94.2501 +Physical time=3158.0000 s, CPU time=33.5020 s, Time Ratio=94.2630 +Physical time=3159.0000 s, CPU time=33.5130 s, Time Ratio=94.2619 +Physical time=3160.0000 s, CPU time=33.5200 s, Time Ratio=94.2721 +Physical time=3161.0000 s, CPU time=33.5270 s, Time Ratio=94.2822 +Physical time=3162.0000 s, CPU time=33.5340 s, Time Ratio=94.2924 +Physical time=3163.0000 s, CPU time=33.5450 s, Time Ratio=94.2913 +Physical time=3164.0000 s, CPU time=33.5570 s, Time Ratio=94.2873 +Physical time=3165.0000 s, CPU time=33.5670 s, Time Ratio=94.2890 +Physical time=3166.0000 s, CPU time=33.5790 s, Time Ratio=94.2851 +Physical time=3167.0000 s, CPU time=33.5900 s, Time Ratio=94.2840 +Physical time=3168.0000 s, CPU time=33.5990 s, Time Ratio=94.2885 +Physical time=3169.0000 s, CPU time=33.6120 s, Time Ratio=94.2818 +Physical time=3170.0000 s, CPU time=33.6200 s, Time Ratio=94.2891 +Physical time=3171.0000 s, CPU time=33.6270 s, Time Ratio=94.2992 +Physical time=3172.0000 s, CPU time=33.6330 s, Time Ratio=94.3121 +Physical time=3173.0000 s, CPU time=33.6380 s, Time Ratio=94.3278 +Physical time=3174.0000 s, CPU time=33.6460 s, Time Ratio=94.3351 +Physical time=3175.0000 s, CPU time=33.6540 s, Time Ratio=94.3424 +Physical time=3176.0000 s, CPU time=33.6590 s, Time Ratio=94.3581 +Physical time=3177.0000 s, CPU time=33.6640 s, Time Ratio=94.3738 +Physical time=3178.0000 s, CPU time=33.6700 s, Time Ratio=94.3867 +Physical time=3179.0000 s, CPU time=33.6750 s, Time Ratio=94.4024 +Physical time=3180.0000 s, CPU time=33.6800 s, Time Ratio=94.4181 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.722673[degC] + North Wall: T=19.722727[degC] + Ceiling: T=19.721486[degC] + Floor: T=19.724862[degC] + West Wall: T=19.724384[degC] + West Wall (glass, unshaded): T=2.175567[degC] + East Wall: T=19.724382[degC] + East Wall (glass, unshaded): T=2.174715[degC] + East Wall (frame): T=8.325799[degC] + West Wall (frame): T=8.326766[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3180.000000[s] + Averaged room temperature 17.241258[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.259755[W] + North Wall: -1.258809[W] + Ceiling: -1.211364[W] + Floor: -1.365498[W] + West Wall: -0.671934[W] + West Wall (glass, unshaded): 3.115933[W] + East Wall: -0.662330[W] + East Wall (glass, unshaded): 3.114019[W] + East Wall (frame): 0.461054[W] + West Wall (frame): 0.459170[W] + Sensor Information: + Occupied zone air temperature: 290.391258 + Velocity: 0.007653 +ffd_solver(): Synchronized data at t=3180.000000[s] + +Physical time=3181.0000 s, CPU time=33.7920 s, Time Ratio=94.1347 +Physical time=3182.0000 s, CPU time=33.7980 s, Time Ratio=94.1476 +Physical time=3183.0000 s, CPU time=33.8030 s, Time Ratio=94.1632 +Physical time=3184.0000 s, CPU time=33.8090 s, Time Ratio=94.1761 +Physical time=3185.0000 s, CPU time=33.8150 s, Time Ratio=94.1890 +Physical time=3186.0000 s, CPU time=33.8200 s, Time Ratio=94.2046 +Physical time=3187.0000 s, CPU time=33.8260 s, Time Ratio=94.2175 +Physical time=3188.0000 s, CPU time=33.8320 s, Time Ratio=94.2303 +Physical time=3189.0000 s, CPU time=33.8390 s, Time Ratio=94.2404 +Physical time=3190.0000 s, CPU time=33.8460 s, Time Ratio=94.2504 +Physical time=3191.0000 s, CPU time=33.8530 s, Time Ratio=94.2605 +Physical time=3192.0000 s, CPU time=33.8600 s, Time Ratio=94.2705 +Physical time=3193.0000 s, CPU time=33.8650 s, Time Ratio=94.2861 +Physical time=3194.0000 s, CPU time=33.8720 s, Time Ratio=94.2962 +Physical time=3195.0000 s, CPU time=33.8790 s, Time Ratio=94.3062 +Physical time=3196.0000 s, CPU time=33.8860 s, Time Ratio=94.3162 +Physical time=3197.0000 s, CPU time=33.8950 s, Time Ratio=94.3207 +Physical time=3198.0000 s, CPU time=33.9040 s, Time Ratio=94.3252 +Physical time=3199.0000 s, CPU time=33.9120 s, Time Ratio=94.3324 +Physical time=3200.0000 s, CPU time=33.9190 s, Time Ratio=94.3424 +Physical time=3201.0000 s, CPU time=33.9260 s, Time Ratio=94.3524 +Physical time=3202.0000 s, CPU time=33.9330 s, Time Ratio=94.3624 +Physical time=3203.0000 s, CPU time=33.9430 s, Time Ratio=94.3641 +Physical time=3204.0000 s, CPU time=33.9490 s, Time Ratio=94.3769 +Physical time=3205.0000 s, CPU time=33.9570 s, Time Ratio=94.3841 +Physical time=3206.0000 s, CPU time=33.9630 s, Time Ratio=94.3968 +Physical time=3207.0000 s, CPU time=33.9700 s, Time Ratio=94.4068 +Physical time=3208.0000 s, CPU time=33.9770 s, Time Ratio=94.4168 +Physical time=3209.0000 s, CPU time=33.9830 s, Time Ratio=94.4296 +Physical time=3210.0000 s, CPU time=33.9900 s, Time Ratio=94.4395 +Physical time=3211.0000 s, CPU time=33.9970 s, Time Ratio=94.4495 +Physical time=3212.0000 s, CPU time=34.0020 s, Time Ratio=94.4650 +Physical time=3213.0000 s, CPU time=34.0080 s, Time Ratio=94.4778 +Physical time=3214.0000 s, CPU time=34.0140 s, Time Ratio=94.4905 +Physical time=3215.0000 s, CPU time=34.0190 s, Time Ratio=94.5060 +Physical time=3216.0000 s, CPU time=34.0250 s, Time Ratio=94.5187 +Physical time=3217.0000 s, CPU time=34.0300 s, Time Ratio=94.5342 +Physical time=3218.0000 s, CPU time=34.0350 s, Time Ratio=94.5497 +Physical time=3219.0000 s, CPU time=34.0410 s, Time Ratio=94.5624 +Physical time=3220.0000 s, CPU time=34.0460 s, Time Ratio=94.5779 +Physical time=3221.0000 s, CPU time=34.0520 s, Time Ratio=94.5906 +Physical time=3222.0000 s, CPU time=34.0590 s, Time Ratio=94.6005 +Physical time=3223.0000 s, CPU time=34.0640 s, Time Ratio=94.6160 +Physical time=3224.0000 s, CPU time=34.0690 s, Time Ratio=94.6315 +Physical time=3225.0000 s, CPU time=34.0740 s, Time Ratio=94.6469 +Physical time=3226.0000 s, CPU time=34.0790 s, Time Ratio=94.6624 +Physical time=3227.0000 s, CPU time=34.0850 s, Time Ratio=94.6751 +Physical time=3228.0000 s, CPU time=34.0900 s, Time Ratio=94.6905 +Physical time=3229.0000 s, CPU time=34.0950 s, Time Ratio=94.7060 +Physical time=3230.0000 s, CPU time=34.1010 s, Time Ratio=94.7186 +Physical time=3231.0000 s, CPU time=34.1070 s, Time Ratio=94.7313 +Physical time=3232.0000 s, CPU time=34.1120 s, Time Ratio=94.7467 +Physical time=3233.0000 s, CPU time=34.1200 s, Time Ratio=94.7538 +Physical time=3234.0000 s, CPU time=34.1270 s, Time Ratio=94.7637 +Physical time=3235.0000 s, CPU time=34.1340 s, Time Ratio=94.7735 +Physical time=3236.0000 s, CPU time=34.1410 s, Time Ratio=94.7834 +Physical time=3237.0000 s, CPU time=34.1470 s, Time Ratio=94.7960 +Physical time=3238.0000 s, CPU time=34.1520 s, Time Ratio=94.8114 +Physical time=3239.0000 s, CPU time=34.1580 s, Time Ratio=94.8241 +Physical time=3240.0000 s, CPU time=34.1630 s, Time Ratio=94.8394 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.718309[degC] + North Wall: T=19.718363[degC] + Ceiling: T=19.717102[degC] + Floor: T=19.720538[degC] + West Wall: T=19.720048[degC] + West Wall (glass, unshaded): T=2.173940[degC] + East Wall: T=19.720038[degC] + East Wall (glass, unshaded): T=2.173179[degC] + East Wall (frame): T=8.317104[degC] + West Wall (frame): T=8.318162[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3240.000000[s] + Averaged room temperature 17.236155[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.265034[W] + North Wall: -1.260742[W] + Ceiling: -1.192757[W] + Floor: -1.375872[W] + West Wall: -0.671170[W] + West Wall (glass, unshaded): 3.110684[W] + East Wall: -0.671030[W] + East Wall (glass, unshaded): 3.107864[W] + East Wall (frame): 0.460345[W] + West Wall (frame): 0.459174[W] + Sensor Information: + Occupied zone air temperature: 290.386155 + Velocity: 0.010556 +ffd_solver(): Synchronized data at t=3240.000000[s] + +Physical time=3241.0000 s, CPU time=34.2610 s, Time Ratio=94.5974 +Physical time=3242.0000 s, CPU time=34.2660 s, Time Ratio=94.6127 +Physical time=3243.0000 s, CPU time=34.2720 s, Time Ratio=94.6254 +Physical time=3244.0000 s, CPU time=34.2770 s, Time Ratio=94.6407 +Physical time=3245.0000 s, CPU time=34.2830 s, Time Ratio=94.6533 +Physical time=3246.0000 s, CPU time=34.2880 s, Time Ratio=94.6687 +Physical time=3247.0000 s, CPU time=34.2950 s, Time Ratio=94.6785 +Physical time=3248.0000 s, CPU time=34.3010 s, Time Ratio=94.6911 +Physical time=3249.0000 s, CPU time=34.3070 s, Time Ratio=94.7037 +Physical time=3250.0000 s, CPU time=34.3170 s, Time Ratio=94.7052 +Physical time=3251.0000 s, CPU time=34.3270 s, Time Ratio=94.7068 +Physical time=3252.0000 s, CPU time=34.3350 s, Time Ratio=94.7138 +Physical time=3253.0000 s, CPU time=34.3420 s, Time Ratio=94.7237 +Physical time=3254.0000 s, CPU time=34.3490 s, Time Ratio=94.7335 +Physical time=3255.0000 s, CPU time=34.3580 s, Time Ratio=94.7378 +Physical time=3256.0000 s, CPU time=34.3670 s, Time Ratio=94.7420 +Physical time=3257.0000 s, CPU time=34.3760 s, Time Ratio=94.7463 +Physical time=3258.0000 s, CPU time=34.3820 s, Time Ratio=94.7589 +Physical time=3259.0000 s, CPU time=34.3900 s, Time Ratio=94.7659 +Physical time=3260.0000 s, CPU time=34.3960 s, Time Ratio=94.7785 +Physical time=3261.0000 s, CPU time=34.4010 s, Time Ratio=94.7938 +Physical time=3262.0000 s, CPU time=34.4080 s, Time Ratio=94.8035 +Physical time=3263.0000 s, CPU time=34.4140 s, Time Ratio=94.8161 +Physical time=3264.0000 s, CPU time=34.4200 s, Time Ratio=94.8286 +Physical time=3265.0000 s, CPU time=34.4250 s, Time Ratio=94.8439 +Physical time=3266.0000 s, CPU time=34.4320 s, Time Ratio=94.8536 +Physical time=3267.0000 s, CPU time=34.4380 s, Time Ratio=94.8661 +Physical time=3268.0000 s, CPU time=34.4450 s, Time Ratio=94.8759 +Physical time=3269.0000 s, CPU time=34.4510 s, Time Ratio=94.8884 +Physical time=3270.0000 s, CPU time=34.4570 s, Time Ratio=94.9009 +Physical time=3271.0000 s, CPU time=34.4620 s, Time Ratio=94.9161 +Physical time=3272.0000 s, CPU time=34.4670 s, Time Ratio=94.9314 +Physical time=3273.0000 s, CPU time=34.4730 s, Time Ratio=94.9439 +Physical time=3274.0000 s, CPU time=34.4780 s, Time Ratio=94.9591 +Physical time=3275.0000 s, CPU time=34.4830 s, Time Ratio=94.9743 +Physical time=3276.0000 s, CPU time=34.4890 s, Time Ratio=94.9868 +Physical time=3277.0000 s, CPU time=34.4940 s, Time Ratio=95.0020 +Physical time=3278.0000 s, CPU time=34.4990 s, Time Ratio=95.0172 +Physical time=3279.0000 s, CPU time=34.5040 s, Time Ratio=95.0325 +Physical time=3280.0000 s, CPU time=34.5090 s, Time Ratio=95.0477 +Physical time=3281.0000 s, CPU time=34.5150 s, Time Ratio=95.0601 +Physical time=3282.0000 s, CPU time=34.5200 s, Time Ratio=95.0753 +Physical time=3283.0000 s, CPU time=34.5250 s, Time Ratio=95.0905 +Physical time=3284.0000 s, CPU time=34.5300 s, Time Ratio=95.1057 +Physical time=3285.0000 s, CPU time=34.5350 s, Time Ratio=95.1209 +Physical time=3286.0000 s, CPU time=34.5400 s, Time Ratio=95.1361 +Physical time=3287.0000 s, CPU time=34.5460 s, Time Ratio=95.1485 +Physical time=3288.0000 s, CPU time=34.5520 s, Time Ratio=95.1609 +Physical time=3289.0000 s, CPU time=34.5580 s, Time Ratio=95.1733 +Physical time=3290.0000 s, CPU time=34.5630 s, Time Ratio=95.1885 +Physical time=3291.0000 s, CPU time=34.5700 s, Time Ratio=95.1981 +Physical time=3292.0000 s, CPU time=34.5780 s, Time Ratio=95.2050 +Physical time=3293.0000 s, CPU time=34.5830 s, Time Ratio=95.2202 +Physical time=3294.0000 s, CPU time=34.5930 s, Time Ratio=95.2216 +Physical time=3295.0000 s, CPU time=34.5990 s, Time Ratio=95.2340 +Physical time=3296.0000 s, CPU time=34.6060 s, Time Ratio=95.2436 +Physical time=3297.0000 s, CPU time=34.6120 s, Time Ratio=95.2560 +Physical time=3298.0000 s, CPU time=34.6180 s, Time Ratio=95.2684 +Physical time=3299.0000 s, CPU time=34.6240 s, Time Ratio=95.2807 +Physical time=3300.0000 s, CPU time=34.6290 s, Time Ratio=95.2959 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.713972[degC] + North Wall: T=19.714023[degC] + Ceiling: T=19.712739[degC] + Floor: T=19.716242[degC] + West Wall: T=19.715735[degC] + West Wall (glass, unshaded): T=2.172544[degC] + East Wall: T=19.715724[degC] + East Wall (glass, unshaded): T=2.171924[degC] + East Wall (frame): T=8.308558[degC] + West Wall (frame): T=8.309642[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3300.000000[s] + Averaged room temperature 17.231800[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.262247[W] + North Wall: -1.262298[W] + Ceiling: -1.217745[W] + Floor: -1.381005[W] + West Wall: -0.675496[W] + West Wall (glass, unshaded): 3.109372[W] + East Wall: -0.673677[W] + East Wall (glass, unshaded): 3.110277[W] + East Wall (frame): 0.458706[W] + West Wall (frame): 0.458548[W] + Sensor Information: + Occupied zone air temperature: 290.381800 + Velocity: 0.076503 +ffd_solver(): Synchronized data at t=3300.000000[s] + +Physical time=3301.0000 s, CPU time=34.7270 s, Time Ratio=95.0557 +Physical time=3302.0000 s, CPU time=34.7320 s, Time Ratio=95.0708 +Physical time=3303.0000 s, CPU time=34.7410 s, Time Ratio=95.0750 +Physical time=3304.0000 s, CPU time=34.7470 s, Time Ratio=95.0873 +Physical time=3305.0000 s, CPU time=34.7520 s, Time Ratio=95.1024 +Physical time=3306.0000 s, CPU time=34.7580 s, Time Ratio=95.1148 +Physical time=3307.0000 s, CPU time=34.7630 s, Time Ratio=95.1299 +Physical time=3308.0000 s, CPU time=34.7680 s, Time Ratio=95.1450 +Physical time=3309.0000 s, CPU time=34.7730 s, Time Ratio=95.1600 +Physical time=3310.0000 s, CPU time=34.7820 s, Time Ratio=95.1642 +Physical time=3311.0000 s, CPU time=34.7900 s, Time Ratio=95.1710 +Physical time=3312.0000 s, CPU time=34.8000 s, Time Ratio=95.1724 +Physical time=3313.0000 s, CPU time=34.8080 s, Time Ratio=95.1793 +Physical time=3314.0000 s, CPU time=34.8160 s, Time Ratio=95.1861 +Physical time=3315.0000 s, CPU time=34.8230 s, Time Ratio=95.1957 +Physical time=3316.0000 s, CPU time=34.8290 s, Time Ratio=95.2080 +Physical time=3317.0000 s, CPU time=34.8380 s, Time Ratio=95.2121 +Physical time=3318.0000 s, CPU time=34.8440 s, Time Ratio=95.2244 +Physical time=3319.0000 s, CPU time=34.8490 s, Time Ratio=95.2395 +Physical time=3320.0000 s, CPU time=34.8540 s, Time Ratio=95.2545 +Physical time=3321.0000 s, CPU time=34.8590 s, Time Ratio=95.2695 +Physical time=3322.0000 s, CPU time=34.8650 s, Time Ratio=95.2818 +Physical time=3323.0000 s, CPU time=34.8700 s, Time Ratio=95.2968 +Physical time=3324.0000 s, CPU time=34.8760 s, Time Ratio=95.3091 +Physical time=3325.0000 s, CPU time=34.8830 s, Time Ratio=95.3186 +Physical time=3326.0000 s, CPU time=34.8880 s, Time Ratio=95.3336 +Physical time=3327.0000 s, CPU time=34.8940 s, Time Ratio=95.3459 +Physical time=3328.0000 s, CPU time=34.9000 s, Time Ratio=95.3582 +Physical time=3329.0000 s, CPU time=34.9080 s, Time Ratio=95.3650 +Physical time=3330.0000 s, CPU time=34.9150 s, Time Ratio=95.3745 +Physical time=3331.0000 s, CPU time=34.9210 s, Time Ratio=95.3867 +Physical time=3332.0000 s, CPU time=34.9280 s, Time Ratio=95.3962 +Physical time=3333.0000 s, CPU time=34.9380 s, Time Ratio=95.3976 +Physical time=3334.0000 s, CPU time=34.9440 s, Time Ratio=95.4098 +Physical time=3335.0000 s, CPU time=34.9510 s, Time Ratio=95.4193 +Physical time=3336.0000 s, CPU time=34.9630 s, Time Ratio=95.4152 +Physical time=3337.0000 s, CPU time=34.9770 s, Time Ratio=95.4056 +Physical time=3338.0000 s, CPU time=34.9890 s, Time Ratio=95.4014 +Physical time=3339.0000 s, CPU time=34.9980 s, Time Ratio=95.4055 +Physical time=3340.0000 s, CPU time=35.0100 s, Time Ratio=95.4013 +Physical time=3341.0000 s, CPU time=35.0180 s, Time Ratio=95.4081 +Physical time=3342.0000 s, CPU time=35.0240 s, Time Ratio=95.4203 +Physical time=3343.0000 s, CPU time=35.0310 s, Time Ratio=95.4298 +Physical time=3344.0000 s, CPU time=35.0380 s, Time Ratio=95.4392 +Physical time=3345.0000 s, CPU time=35.0450 s, Time Ratio=95.4487 +Physical time=3346.0000 s, CPU time=35.0570 s, Time Ratio=95.4446 +Physical time=3347.0000 s, CPU time=35.0660 s, Time Ratio=95.4486 +Physical time=3348.0000 s, CPU time=35.0730 s, Time Ratio=95.4580 +Physical time=3349.0000 s, CPU time=35.0820 s, Time Ratio=95.4621 +Physical time=3350.0000 s, CPU time=35.0890 s, Time Ratio=95.4715 +Physical time=3351.0000 s, CPU time=35.1000 s, Time Ratio=95.4701 +Physical time=3352.0000 s, CPU time=35.1060 s, Time Ratio=95.4823 +Physical time=3353.0000 s, CPU time=35.1120 s, Time Ratio=95.4944 +Physical time=3354.0000 s, CPU time=35.1210 s, Time Ratio=95.4984 +Physical time=3355.0000 s, CPU time=35.1280 s, Time Ratio=95.5079 +Physical time=3356.0000 s, CPU time=35.1340 s, Time Ratio=95.5200 +Physical time=3357.0000 s, CPU time=35.1440 s, Time Ratio=95.5213 +Physical time=3358.0000 s, CPU time=35.1520 s, Time Ratio=95.5280 +Physical time=3359.0000 s, CPU time=35.1610 s, Time Ratio=95.5320 +Physical time=3360.0000 s, CPU time=35.1690 s, Time Ratio=95.5387 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.709659[degC] + North Wall: T=19.709708[degC] + Ceiling: T=19.708402[degC] + Floor: T=19.711974[degC] + West Wall: T=19.711447[degC] + West Wall (glass, unshaded): T=2.171445[degC] + East Wall: T=19.711441[degC] + East Wall (glass, unshaded): T=2.170913[degC] + East Wall (frame): T=8.300189[degC] + West Wall (frame): T=8.301272[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3360.000000[s] + Averaged room temperature 17.241677[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.252448[W] + North Wall: -1.252659[W] + Ceiling: -1.181666[W] + Floor: -1.344927[W] + West Wall: -0.663715[W] + West Wall (glass, unshaded): 3.117939[W] + East Wall: -0.662766[W] + East Wall (glass, unshaded): 3.118964[W] + East Wall (frame): 0.460998[W] + West Wall (frame): 0.460894[W] + Sensor Information: + Occupied zone air temperature: 290.391677 + Velocity: 0.075735 +ffd_solver(): Synchronized data at t=3360.000000[s] + +Physical time=3361.0000 s, CPU time=35.3080 s, Time Ratio=95.1909 +Physical time=3362.0000 s, CPU time=35.3160 s, Time Ratio=95.1976 +Physical time=3363.0000 s, CPU time=35.3240 s, Time Ratio=95.2044 +Physical time=3364.0000 s, CPU time=35.3310 s, Time Ratio=95.2138 +Physical time=3365.0000 s, CPU time=35.3390 s, Time Ratio=95.2206 +Physical time=3366.0000 s, CPU time=35.3470 s, Time Ratio=95.2273 +Physical time=3367.0000 s, CPU time=35.3590 s, Time Ratio=95.2233 +Physical time=3368.0000 s, CPU time=35.3710 s, Time Ratio=95.2192 +Physical time=3369.0000 s, CPU time=35.3840 s, Time Ratio=95.2125 +Physical time=3370.0000 s, CPU time=35.4000 s, Time Ratio=95.1977 +Physical time=3371.0000 s, CPU time=35.4120 s, Time Ratio=95.1937 +Physical time=3372.0000 s, CPU time=35.4220 s, Time Ratio=95.1951 +Physical time=3373.0000 s, CPU time=35.4310 s, Time Ratio=95.1991 +Physical time=3374.0000 s, CPU time=35.4380 s, Time Ratio=95.2085 +Physical time=3375.0000 s, CPU time=35.4440 s, Time Ratio=95.2206 +Physical time=3376.0000 s, CPU time=35.4500 s, Time Ratio=95.2327 +Physical time=3377.0000 s, CPU time=35.4560 s, Time Ratio=95.2448 +Physical time=3378.0000 s, CPU time=35.4610 s, Time Ratio=95.2596 +Physical time=3379.0000 s, CPU time=35.4660 s, Time Ratio=95.2743 +Physical time=3380.0000 s, CPU time=35.4720 s, Time Ratio=95.2864 +Physical time=3381.0000 s, CPU time=35.4770 s, Time Ratio=95.3012 +Physical time=3382.0000 s, CPU time=35.4820 s, Time Ratio=95.3159 +Physical time=3383.0000 s, CPU time=35.4880 s, Time Ratio=95.3280 +Physical time=3384.0000 s, CPU time=35.4930 s, Time Ratio=95.3427 +Physical time=3385.0000 s, CPU time=35.4990 s, Time Ratio=95.3548 +Physical time=3386.0000 s, CPU time=35.5040 s, Time Ratio=95.3695 +Physical time=3387.0000 s, CPU time=35.5100 s, Time Ratio=95.3816 +Physical time=3388.0000 s, CPU time=35.5160 s, Time Ratio=95.3936 +Physical time=3389.0000 s, CPU time=35.5220 s, Time Ratio=95.4057 +Physical time=3390.0000 s, CPU time=35.5280 s, Time Ratio=95.4177 +Physical time=3391.0000 s, CPU time=35.5360 s, Time Ratio=95.4244 +Physical time=3392.0000 s, CPU time=35.5440 s, Time Ratio=95.4310 +Physical time=3393.0000 s, CPU time=35.5510 s, Time Ratio=95.4404 +Physical time=3394.0000 s, CPU time=35.5570 s, Time Ratio=95.4524 +Physical time=3395.0000 s, CPU time=35.5640 s, Time Ratio=95.4617 +Physical time=3396.0000 s, CPU time=35.5690 s, Time Ratio=95.4764 +Physical time=3397.0000 s, CPU time=35.5760 s, Time Ratio=95.4857 +Physical time=3398.0000 s, CPU time=35.5830 s, Time Ratio=95.4950 +Physical time=3399.0000 s, CPU time=35.5890 s, Time Ratio=95.5070 +Physical time=3400.0000 s, CPU time=35.5940 s, Time Ratio=95.5217 +Physical time=3401.0000 s, CPU time=35.6040 s, Time Ratio=95.5230 +Physical time=3402.0000 s, CPU time=35.6130 s, Time Ratio=95.5269 +Physical time=3403.0000 s, CPU time=35.6210 s, Time Ratio=95.5335 +Physical time=3404.0000 s, CPU time=35.6270 s, Time Ratio=95.5455 +Physical time=3405.0000 s, CPU time=35.6330 s, Time Ratio=95.5575 +Physical time=3406.0000 s, CPU time=35.6390 s, Time Ratio=95.5695 +Physical time=3407.0000 s, CPU time=35.6460 s, Time Ratio=95.5787 +Physical time=3408.0000 s, CPU time=35.6530 s, Time Ratio=95.5880 +Physical time=3409.0000 s, CPU time=35.6610 s, Time Ratio=95.5946 +Physical time=3410.0000 s, CPU time=35.6680 s, Time Ratio=95.6039 +Physical time=3411.0000 s, CPU time=35.6750 s, Time Ratio=95.6132 +Physical time=3412.0000 s, CPU time=35.6810 s, Time Ratio=95.6251 +Physical time=3413.0000 s, CPU time=35.6870 s, Time Ratio=95.6371 +Physical time=3414.0000 s, CPU time=35.6940 s, Time Ratio=95.6463 +Physical time=3415.0000 s, CPU time=35.7000 s, Time Ratio=95.6583 +Physical time=3416.0000 s, CPU time=35.7060 s, Time Ratio=95.6702 +Physical time=3417.0000 s, CPU time=35.7120 s, Time Ratio=95.6821 +Physical time=3418.0000 s, CPU time=35.7180 s, Time Ratio=95.6940 +Physical time=3419.0000 s, CPU time=35.7230 s, Time Ratio=95.7086 +Physical time=3420.0000 s, CPU time=35.7290 s, Time Ratio=95.7206 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.705366[degC] + North Wall: T=19.705414[degC] + Ceiling: T=19.704085[degC] + Floor: T=19.707719[degC] + West Wall: T=19.707177[degC] + West Wall (glass, unshaded): T=2.170441[degC] + East Wall: T=19.707175[degC] + East Wall (glass, unshaded): T=2.169937[degC] + East Wall (frame): T=8.291948[degC] + West Wall (frame): T=8.293015[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3420.000000[s] + Averaged room temperature 17.233635[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.259196[W] + North Wall: -1.259347[W] + Ceiling: -1.178893[W] + Floor: -1.356729[W] + West Wall: -0.662760[W] + West Wall (glass, unshaded): 3.110540[W] + East Wall: -0.665360[W] + East Wall (glass, unshaded): 3.108240[W] + East Wall (frame): 0.460879[W] + West Wall (frame): 0.461064[W] + Sensor Information: + Occupied zone air temperature: 290.383635 + Velocity: 0.018051 +ffd_solver(): Synchronized data at t=3420.000000[s] + +Physical time=3421.0000 s, CPU time=35.8590 s, Time Ratio=95.4014 +Physical time=3422.0000 s, CPU time=35.8710 s, Time Ratio=95.3974 +Physical time=3423.0000 s, CPU time=35.8780 s, Time Ratio=95.4067 +Physical time=3424.0000 s, CPU time=35.8840 s, Time Ratio=95.4186 +Physical time=3425.0000 s, CPU time=35.8910 s, Time Ratio=95.4278 +Physical time=3426.0000 s, CPU time=35.8980 s, Time Ratio=95.4371 +Physical time=3427.0000 s, CPU time=35.9050 s, Time Ratio=95.4463 +Physical time=3428.0000 s, CPU time=35.9110 s, Time Ratio=95.4582 +Physical time=3429.0000 s, CPU time=35.9180 s, Time Ratio=95.4675 +Physical time=3430.0000 s, CPU time=35.9240 s, Time Ratio=95.4793 +Physical time=3431.0000 s, CPU time=35.9310 s, Time Ratio=95.4886 +Physical time=3432.0000 s, CPU time=35.9370 s, Time Ratio=95.5005 +Physical time=3433.0000 s, CPU time=35.9450 s, Time Ratio=95.5070 +Physical time=3434.0000 s, CPU time=35.9500 s, Time Ratio=95.5216 +Physical time=3435.0000 s, CPU time=35.9590 s, Time Ratio=95.5255 +Physical time=3436.0000 s, CPU time=35.9650 s, Time Ratio=95.5373 +Physical time=3437.0000 s, CPU time=35.9720 s, Time Ratio=95.5465 +Physical time=3438.0000 s, CPU time=35.9780 s, Time Ratio=95.5584 +Physical time=3439.0000 s, CPU time=35.9840 s, Time Ratio=95.5703 +Physical time=3440.0000 s, CPU time=35.9900 s, Time Ratio=95.5821 +Physical time=3441.0000 s, CPU time=35.9970 s, Time Ratio=95.5913 +Physical time=3442.0000 s, CPU time=36.0030 s, Time Ratio=95.6031 +Physical time=3443.0000 s, CPU time=36.0100 s, Time Ratio=95.6123 +Physical time=3444.0000 s, CPU time=36.0160 s, Time Ratio=95.6242 +Physical time=3445.0000 s, CPU time=36.0220 s, Time Ratio=95.6360 +Physical time=3446.0000 s, CPU time=36.0280 s, Time Ratio=95.6478 +Physical time=3447.0000 s, CPU time=36.0340 s, Time Ratio=95.6597 +Physical time=3448.0000 s, CPU time=36.0400 s, Time Ratio=95.6715 +Physical time=3449.0000 s, CPU time=36.0460 s, Time Ratio=95.6833 +Physical time=3450.0000 s, CPU time=36.0510 s, Time Ratio=95.6978 +Physical time=3451.0000 s, CPU time=36.0580 s, Time Ratio=95.7069 +Physical time=3452.0000 s, CPU time=36.0650 s, Time Ratio=95.7161 +Physical time=3453.0000 s, CPU time=36.0700 s, Time Ratio=95.7305 +Physical time=3454.0000 s, CPU time=36.0760 s, Time Ratio=95.7423 +Physical time=3455.0000 s, CPU time=36.0830 s, Time Ratio=95.7515 +Physical time=3456.0000 s, CPU time=36.0900 s, Time Ratio=95.7606 +Physical time=3457.0000 s, CPU time=36.0970 s, Time Ratio=95.7697 +Physical time=3458.0000 s, CPU time=36.1040 s, Time Ratio=95.7789 +Physical time=3459.0000 s, CPU time=36.1110 s, Time Ratio=95.7880 +Physical time=3460.0000 s, CPU time=36.1190 s, Time Ratio=95.7945 +Physical time=3461.0000 s, CPU time=36.1270 s, Time Ratio=95.8009 +Physical time=3462.0000 s, CPU time=36.1330 s, Time Ratio=95.8127 +Physical time=3463.0000 s, CPU time=36.1410 s, Time Ratio=95.8192 +Physical time=3464.0000 s, CPU time=36.1470 s, Time Ratio=95.8309 +Physical time=3465.0000 s, CPU time=36.1570 s, Time Ratio=95.8321 +Physical time=3466.0000 s, CPU time=36.1630 s, Time Ratio=95.8438 +Physical time=3467.0000 s, CPU time=36.1690 s, Time Ratio=95.8556 +Physical time=3468.0000 s, CPU time=36.1750 s, Time Ratio=95.8673 +Physical time=3469.0000 s, CPU time=36.1820 s, Time Ratio=95.8764 +Physical time=3470.0000 s, CPU time=36.1920 s, Time Ratio=95.8775 +Physical time=3471.0000 s, CPU time=36.2000 s, Time Ratio=95.8840 +Physical time=3472.0000 s, CPU time=36.2070 s, Time Ratio=95.8931 +Physical time=3473.0000 s, CPU time=36.2170 s, Time Ratio=95.8942 +Physical time=3474.0000 s, CPU time=36.2230 s, Time Ratio=95.9059 +Physical time=3475.0000 s, CPU time=36.2320 s, Time Ratio=95.9097 +Physical time=3476.0000 s, CPU time=36.2430 s, Time Ratio=95.9082 +Physical time=3477.0000 s, CPU time=36.2520 s, Time Ratio=95.9119 +Physical time=3478.0000 s, CPU time=36.2620 s, Time Ratio=95.9131 +Physical time=3479.0000 s, CPU time=36.2710 s, Time Ratio=95.9168 +Physical time=3480.0000 s, CPU time=36.2800 s, Time Ratio=95.9206 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.701094[degC] + North Wall: T=19.701142[degC] + Ceiling: T=19.699779[degC] + Floor: T=19.703479[degC] + West Wall: T=19.702923[degC] + West Wall (glass, unshaded): T=2.169633[degC] + East Wall: T=19.702927[degC] + East Wall (glass, unshaded): T=2.169197[degC] + East Wall (frame): T=8.283818[degC] + West Wall (frame): T=8.284863[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3480.000000[s] + Averaged room temperature 17.236046[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.251636[W] + North Wall: -1.249385[W] + Ceiling: -1.221005[W] + Floor: -1.358599[W] + West Wall: -0.671183[W] + West Wall (glass, unshaded): 3.114431[W] + East Wall: -0.670223[W] + East Wall (glass, unshaded): 3.114143[W] + East Wall (frame): 0.459957[W] + West Wall (frame): 0.459872[W] + Sensor Information: + Occupied zone air temperature: 290.386046 + Velocity: 0.029601 +ffd_solver(): Synchronized data at t=3480.000000[s] + +Physical time=3481.0000 s, CPU time=36.3890 s, Time Ratio=95.6608 +Physical time=3482.0000 s, CPU time=36.3980 s, Time Ratio=95.6646 +Physical time=3483.0000 s, CPU time=36.4090 s, Time Ratio=95.6632 +Physical time=3484.0000 s, CPU time=36.4190 s, Time Ratio=95.6644 +Physical time=3485.0000 s, CPU time=36.4270 s, Time Ratio=95.6708 +Physical time=3486.0000 s, CPU time=36.4330 s, Time Ratio=95.6825 +Physical time=3487.0000 s, CPU time=36.4400 s, Time Ratio=95.6915 +Physical time=3488.0000 s, CPU time=36.4460 s, Time Ratio=95.7032 +Physical time=3489.0000 s, CPU time=36.4520 s, Time Ratio=95.7149 +Physical time=3490.0000 s, CPU time=36.4590 s, Time Ratio=95.7240 +Physical time=3491.0000 s, CPU time=36.4670 s, Time Ratio=95.7304 +Physical time=3492.0000 s, CPU time=36.4750 s, Time Ratio=95.7368 +Physical time=3493.0000 s, CPU time=36.4830 s, Time Ratio=95.7432 +Physical time=3494.0000 s, CPU time=36.4880 s, Time Ratio=95.7575 +Physical time=3495.0000 s, CPU time=36.4940 s, Time Ratio=95.7692 +Physical time=3496.0000 s, CPU time=36.4990 s, Time Ratio=95.7834 +Physical time=3497.0000 s, CPU time=36.5070 s, Time Ratio=95.7898 +Physical time=3498.0000 s, CPU time=36.5150 s, Time Ratio=95.7962 +Physical time=3499.0000 s, CPU time=36.5200 s, Time Ratio=95.8105 +Physical time=3500.0000 s, CPU time=36.5270 s, Time Ratio=95.8195 +Physical time=3501.0000 s, CPU time=36.5360 s, Time Ratio=95.8233 +Physical time=3502.0000 s, CPU time=36.5440 s, Time Ratio=95.8297 +Physical time=3503.0000 s, CPU time=36.5530 s, Time Ratio=95.8334 +Physical time=3504.0000 s, CPU time=36.5610 s, Time Ratio=95.8398 +Physical time=3505.0000 s, CPU time=36.5680 s, Time Ratio=95.8488 +Physical time=3506.0000 s, CPU time=36.5740 s, Time Ratio=95.8604 +Physical time=3507.0000 s, CPU time=36.5810 s, Time Ratio=95.8694 +Physical time=3508.0000 s, CPU time=36.5880 s, Time Ratio=95.8784 +Physical time=3509.0000 s, CPU time=36.5960 s, Time Ratio=95.8848 +Physical time=3510.0000 s, CPU time=36.6040 s, Time Ratio=95.8912 +Physical time=3511.0000 s, CPU time=36.6120 s, Time Ratio=95.8975 +Physical time=3512.0000 s, CPU time=36.6180 s, Time Ratio=95.9091 +Physical time=3513.0000 s, CPU time=36.6250 s, Time Ratio=95.9181 +Physical time=3514.0000 s, CPU time=36.6330 s, Time Ratio=95.9244 +Physical time=3515.0000 s, CPU time=36.6410 s, Time Ratio=95.9308 +Physical time=3516.0000 s, CPU time=36.6500 s, Time Ratio=95.9345 +Physical time=3517.0000 s, CPU time=36.6570 s, Time Ratio=95.9435 +Physical time=3518.0000 s, CPU time=36.6630 s, Time Ratio=95.9551 +Physical time=3519.0000 s, CPU time=36.6690 s, Time Ratio=95.9666 +Physical time=3520.0000 s, CPU time=36.6750 s, Time Ratio=95.9782 +Physical time=3521.0000 s, CPU time=36.6840 s, Time Ratio=95.9819 +Physical time=3522.0000 s, CPU time=36.6900 s, Time Ratio=95.9935 +Physical time=3523.0000 s, CPU time=36.6980 s, Time Ratio=95.9998 +Physical time=3524.0000 s, CPU time=36.7040 s, Time Ratio=96.0113 +Physical time=3525.0000 s, CPU time=36.7090 s, Time Ratio=96.0255 +Physical time=3526.0000 s, CPU time=36.7150 s, Time Ratio=96.0370 +Physical time=3527.0000 s, CPU time=36.7220 s, Time Ratio=96.0460 +Physical time=3528.0000 s, CPU time=36.7280 s, Time Ratio=96.0575 +Physical time=3529.0000 s, CPU time=36.7330 s, Time Ratio=96.0717 +Physical time=3530.0000 s, CPU time=36.7380 s, Time Ratio=96.0858 +Physical time=3531.0000 s, CPU time=36.7450 s, Time Ratio=96.0947 +Physical time=3532.0000 s, CPU time=36.7510 s, Time Ratio=96.1062 +Physical time=3533.0000 s, CPU time=36.7570 s, Time Ratio=96.1177 +Physical time=3534.0000 s, CPU time=36.7630 s, Time Ratio=96.1293 +Physical time=3535.0000 s, CPU time=36.7700 s, Time Ratio=96.1382 +Physical time=3536.0000 s, CPU time=36.7770 s, Time Ratio=96.1470 +Physical time=3537.0000 s, CPU time=36.7840 s, Time Ratio=96.1559 +Physical time=3538.0000 s, CPU time=36.7900 s, Time Ratio=96.1674 +Physical time=3539.0000 s, CPU time=36.7960 s, Time Ratio=96.1789 +Physical time=3540.0000 s, CPU time=36.8020 s, Time Ratio=96.1904 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.696844[degC] + North Wall: T=19.696891[degC] + Ceiling: T=19.695507[degC] + Floor: T=19.699266[degC] + West Wall: T=19.698694[degC] + West Wall (glass, unshaded): T=2.169072[degC] + East Wall: T=19.698706[degC] + East Wall (glass, unshaded): T=2.168716[degC] + East Wall (frame): T=8.275843[degC] + West Wall (frame): T=8.276866[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3540.000000[s] + Averaged room temperature 17.227709[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.247427[W] + North Wall: -1.254360[W] + Ceiling: -1.196749[W] + Floor: -1.322853[W] + West Wall: -0.660517[W] + West Wall (glass, unshaded): 3.116797[W] + East Wall: -0.655077[W] + East Wall (glass, unshaded): 3.121706[W] + East Wall (frame): 0.463321[W] + West Wall (frame): 0.461945[W] + Sensor Information: + Occupied zone air temperature: 290.377709 + Velocity: 0.055736 +ffd_solver(): Synchronized data at t=3540.000000[s] + +Physical time=3541.0000 s, CPU time=36.9180 s, Time Ratio=95.9153 +Physical time=3542.0000 s, CPU time=36.9230 s, Time Ratio=95.9294 +Physical time=3543.0000 s, CPU time=36.9290 s, Time Ratio=95.9409 +Physical time=3544.0000 s, CPU time=36.9360 s, Time Ratio=95.9498 +Physical time=3545.0000 s, CPU time=36.9410 s, Time Ratio=95.9638 +Physical time=3546.0000 s, CPU time=36.9470 s, Time Ratio=95.9753 +Physical time=3547.0000 s, CPU time=36.9520 s, Time Ratio=95.9894 +Physical time=3548.0000 s, CPU time=36.9580 s, Time Ratio=96.0009 +Physical time=3549.0000 s, CPU time=36.9640 s, Time Ratio=96.0123 +Physical time=3550.0000 s, CPU time=36.9720 s, Time Ratio=96.0186 +Physical time=3551.0000 s, CPU time=36.9770 s, Time Ratio=96.0327 +Physical time=3552.0000 s, CPU time=36.9830 s, Time Ratio=96.0441 +Physical time=3553.0000 s, CPU time=36.9890 s, Time Ratio=96.0556 +Physical time=3554.0000 s, CPU time=36.9940 s, Time Ratio=96.0696 +Physical time=3555.0000 s, CPU time=37.0000 s, Time Ratio=96.0811 +Physical time=3556.0000 s, CPU time=37.0060 s, Time Ratio=96.0925 +Physical time=3557.0000 s, CPU time=37.0110 s, Time Ratio=96.1066 +Physical time=3558.0000 s, CPU time=37.0170 s, Time Ratio=96.1180 +Physical time=3559.0000 s, CPU time=37.0230 s, Time Ratio=96.1294 +Physical time=3560.0000 s, CPU time=37.0290 s, Time Ratio=96.1409 +Physical time=3561.0000 s, CPU time=37.0340 s, Time Ratio=96.1549 +Physical time=3562.0000 s, CPU time=37.0400 s, Time Ratio=96.1663 +Physical time=3563.0000 s, CPU time=37.0450 s, Time Ratio=96.1803 +Physical time=3564.0000 s, CPU time=37.0510 s, Time Ratio=96.1917 +Physical time=3565.0000 s, CPU time=37.0560 s, Time Ratio=96.2057 +Physical time=3566.0000 s, CPU time=37.0610 s, Time Ratio=96.2197 +Physical time=3567.0000 s, CPU time=37.0670 s, Time Ratio=96.2311 +Physical time=3568.0000 s, CPU time=37.0720 s, Time Ratio=96.2451 +Physical time=3569.0000 s, CPU time=37.0780 s, Time Ratio=96.2565 +Physical time=3570.0000 s, CPU time=37.0830 s, Time Ratio=96.2705 +Physical time=3571.0000 s, CPU time=37.0890 s, Time Ratio=96.2819 +Physical time=3572.0000 s, CPU time=37.0940 s, Time Ratio=96.2959 +Physical time=3573.0000 s, CPU time=37.1010 s, Time Ratio=96.3047 +Physical time=3574.0000 s, CPU time=37.1070 s, Time Ratio=96.3161 +Physical time=3575.0000 s, CPU time=37.1140 s, Time Ratio=96.3248 +Physical time=3576.0000 s, CPU time=37.1200 s, Time Ratio=96.3362 +Physical time=3577.0000 s, CPU time=37.1260 s, Time Ratio=96.3476 +Physical time=3578.0000 s, CPU time=37.1310 s, Time Ratio=96.3615 +Physical time=3579.0000 s, CPU time=37.1370 s, Time Ratio=96.3729 +Physical time=3580.0000 s, CPU time=37.1420 s, Time Ratio=96.3868 +Physical time=3581.0000 s, CPU time=37.1480 s, Time Ratio=96.3982 +Physical time=3582.0000 s, CPU time=37.1560 s, Time Ratio=96.4043 +Physical time=3583.0000 s, CPU time=37.1620 s, Time Ratio=96.4157 +Physical time=3584.0000 s, CPU time=37.1700 s, Time Ratio=96.4218 +Physical time=3585.0000 s, CPU time=37.1830 s, Time Ratio=96.4150 +Physical time=3586.0000 s, CPU time=37.2000 s, Time Ratio=96.3978 +Physical time=3587.0000 s, CPU time=37.2160 s, Time Ratio=96.3833 +Physical time=3588.0000 s, CPU time=37.2330 s, Time Ratio=96.3661 +Physical time=3589.0000 s, CPU time=37.2500 s, Time Ratio=96.3490 +Physical time=3590.0000 s, CPU time=37.2640 s, Time Ratio=96.3396 +Physical time=3591.0000 s, CPU time=37.2760 s, Time Ratio=96.3354 +Physical time=3592.0000 s, CPU time=37.2850 s, Time Ratio=96.3390 +Physical time=3593.0000 s, CPU time=37.2960 s, Time Ratio=96.3374 +Physical time=3594.0000 s, CPU time=37.3020 s, Time Ratio=96.3487 +Physical time=3595.0000 s, CPU time=37.3070 s, Time Ratio=96.3626 +Physical time=3596.0000 s, CPU time=37.3130 s, Time Ratio=96.3739 +Physical time=3597.0000 s, CPU time=37.3210 s, Time Ratio=96.3801 +Physical time=3598.0000 s, CPU time=37.3280 s, Time Ratio=96.3888 +Physical time=3599.0000 s, CPU time=37.3360 s, Time Ratio=96.3949 +Physical time=3600.0000 s, CPU time=37.3430 s, Time Ratio=96.4036 +------------------------------------------------------------------- +assign_thermal_bc(): Thermal conditions for solid surfaces: + South Wall: T=19.692612[degC] + North Wall: T=19.692659[degC] + Ceiling: T=19.691262[degC] + Floor: T=19.695063[degC] + West Wall: T=19.694486[degC] + West Wall (glass, unshaded): T=2.168622[degC] + East Wall: T=19.694499[degC] + East Wall (glass, unshaded): T=2.168238[degC] + East Wall (frame): T=8.267970[degC] + West Wall (frame): T=8.268995[degC] +Convective sensible heat received by FFD is 0.000000 +Latent heat received by FFD is 0.000000 +------------------------------------------------------------------- +write_cosim_data(): Start to write FFD data to Modelica at t=3600.000000[s] + Averaged room temperature 17.212346[degC] + Flow information at the ports: + Information at solid surfaces: + South Wall: -1.264934[W] + North Wall: -1.263711[W] + Ceiling: -1.196408[W] + Floor: -1.362823[W] + West Wall: -0.666467[W] + West Wall (glass, unshaded): 3.105217[W] + East Wall: -0.668351[W] + East Wall (glass, unshaded): 3.104958[W] + East Wall (frame): 0.461175[W] + West Wall (frame): 0.461041[W] + Sensor Information: + Occupied zone air temperature: 290.362346 + Velocity: 0.050523 +ffd_solver(): Synchronized data at t=3600.000000[s] + +Physical time=3601.0000 s, CPU time=37.4650 s, Time Ratio=96.1164 +Physical time=3602.0000 s, CPU time=37.4700 s, Time Ratio=96.1302 +Physical time=3603.0000 s, CPU time=37.4780 s, Time Ratio=96.1364 +Physical time=3604.0000 s, CPU time=37.4860 s, Time Ratio=96.1426 +Physical time=3605.0000 s, CPU time=37.4930 s, Time Ratio=96.1513 +Physical time=3606.0000 s, CPU time=37.5000 s, Time Ratio=96.1600 +Physical time=3607.0000 s, CPU time=37.5050 s, Time Ratio=96.1738 +Physical time=3608.0000 s, CPU time=37.5110 s, Time Ratio=96.1851 +Physical time=3609.0000 s, CPU time=37.5160 s, Time Ratio=96.1990 +Physical time=3610.0000 s, CPU time=37.5220 s, Time Ratio=96.2102 +Physical time=3611.0000 s, CPU time=37.5280 s, Time Ratio=96.2215 +Physical time=3612.0000 s, CPU time=37.5330 s, Time Ratio=96.2353 +Physical time=3613.0000 s, CPU time=37.5390 s, Time Ratio=96.2466 +Physical time=3614.0000 s, CPU time=37.5450 s, Time Ratio=96.2578 +Physical time=3615.0000 s, CPU time=37.5500 s, Time Ratio=96.2716 +Physical time=3616.0000 s, CPU time=37.5550 s, Time Ratio=96.2854 +Physical time=3617.0000 s, CPU time=37.5600 s, Time Ratio=96.2993 +Physical time=3618.0000 s, CPU time=37.5650 s, Time Ratio=96.3131 +Physical time=3619.0000 s, CPU time=37.5700 s, Time Ratio=96.3269 +Physical time=3620.0000 s, CPU time=37.5750 s, Time Ratio=96.3407 +Physical time=3621.0000 s, CPU time=37.5820 s, Time Ratio=96.3493 +Physical time=3622.0000 s, CPU time=37.5880 s, Time Ratio=96.3605 +Physical time=3623.0000 s, CPU time=37.5950 s, Time Ratio=96.3692 +Physical time=3624.0000 s, CPU time=37.6000 s, Time Ratio=96.3830 +Physical time=3625.0000 s, CPU time=37.6070 s, Time Ratio=96.3916 +Physical time=3626.0000 s, CPU time=37.6120 s, Time Ratio=96.4054 +Physical time=3627.0000 s, CPU time=37.6170 s, Time Ratio=96.4192 +Physical time=3628.0000 s, CPU time=37.6230 s, Time Ratio=96.4304 +Physical time=3629.0000 s, CPU time=37.6280 s, Time Ratio=96.4441 +Physical time=3630.0000 s, CPU time=37.6330 s, Time Ratio=96.4579 +Physical time=3631.0000 s, CPU time=37.6380 s, Time Ratio=96.4717 +Physical time=3632.0000 s, CPU time=37.6440 s, Time Ratio=96.4828 +Physical time=3633.0000 s, CPU time=37.6510 s, Time Ratio=96.4915 +Physical time=3634.0000 s, CPU time=37.6570 s, Time Ratio=96.5026 +Physical time=3635.0000 s, CPU time=37.6640 s, Time Ratio=96.5113 +Physical time=3636.0000 s, CPU time=37.6710 s, Time Ratio=96.5199 +Physical time=3637.0000 s, CPU time=37.6770 s, Time Ratio=96.5310 +Physical time=3638.0000 s, CPU time=37.6840 s, Time Ratio=96.5396 +Physical time=3639.0000 s, CPU time=37.6900 s, Time Ratio=96.5508 +Physical time=3640.0000 s, CPU time=37.6980 s, Time Ratio=96.5568 +Physical time=3641.0000 s, CPU time=37.7040 s, Time Ratio=96.5680 +Physical time=3642.0000 s, CPU time=37.7110 s, Time Ratio=96.5766 +Physical time=3643.0000 s, CPU time=37.7170 s, Time Ratio=96.5877 +Physical time=3644.0000 s, CPU time=37.7220 s, Time Ratio=96.6015 +Physical time=3645.0000 s, CPU time=37.7270 s, Time Ratio=96.6152 +Physical time=3646.0000 s, CPU time=37.7350 s, Time Ratio=96.6212 +Physical time=3647.0000 s, CPU time=37.7420 s, Time Ratio=96.6297 +Physical time=3648.0000 s, CPU time=37.7480 s, Time Ratio=96.6409 +Physical time=3649.0000 s, CPU time=37.7550 s, Time Ratio=96.6495 +Physical time=3650.0000 s, CPU time=37.7630 s, Time Ratio=96.6555 +Physical time=3651.0000 s, CPU time=37.7690 s, Time Ratio=96.6666 +Physical time=3652.0000 s, CPU time=37.7740 s, Time Ratio=96.6803 +Physical time=3653.0000 s, CPU time=37.7800 s, Time Ratio=96.6914 +Physical time=3654.0000 s, CPU time=37.7850 s, Time Ratio=96.7050 +Physical time=3655.0000 s, CPU time=37.7900 s, Time Ratio=96.7187 +Physical time=3656.0000 s, CPU time=37.7950 s, Time Ratio=96.7324 +Physical time=3657.0000 s, CPU time=37.7990 s, Time Ratio=96.7486 +Physical time=3658.0000 s, CPU time=37.8040 s, Time Ratio=96.7622 +Physical time=3659.0000 s, CPU time=37.8090 s, Time Ratio=96.7759 +Physical time=3660.0000 s, CPU time=37.8140 s, Time Ratio=96.7895 +ffd_solver(): Received stop command from Modelica at FFD time: 3660.000000[s], Modelica Time: 3600.000000[s]. +ffd_solver(): Received stop command from Modelica at FFD time: 3660.000000[s], Modelica Time: 3600.000000[s]. +write_unsteady(): Wrote the unsteady data file unsteady.plt. +write_tecplot_data(): Wrote file result.plt. +wrtie_SCI(): Wrote the SCI data file output.cfd. +ffd(): Sent stopping signal to Modelica +Successfully exit FFD. diff --git a/Buildings/output.cfd b/Buildings/output.cfd new file mode 100644 index 00000000000..2cb6721545a --- /dev/null +++ b/Buildings/output.cfd @@ -0,0 +1,707 @@ +1.000000e+00 1.000000e+00 1.000000e+00 +10 10 10 +1 1 1 1 1 0 +0 0 0 0 0 0 +5.000000e-02 1.500000e-01 2.500000e-01 3.500000e-01 4.500000e-01 5.500000e-01 6.500000e-01 7.500000e-01 8.500000e-01 9.500000e-01 +5.000000e-02 1.500000e-01 2.500000e-01 3.500000e-01 4.500000e-01 5.500000e-01 6.500000e-01 7.500000e-01 8.500000e-01 9.500000e-01 +5.000000e-02 1.500000e-01 2.500000e-01 3.500000e-01 4.500000e-01 5.500000e-01 6.500000e-01 7.500000e-01 8.500000e-01 9.500000e-01 +1 1 +4.893592e-02 3.891833e-02 2.730713e-02 1.641241e-02 6.071404e-03 -3.811776e-03 -1.333129e-02 -2.253509e-02 -3.168653e-02 -4.145751e-02 +-1.508873e-02 -1.068564e-02 -8.201434e-03 -6.601400e-03 -5.478667e-03 -4.233382e-03 -2.651821e-03 -5.712216e-04 1.762145e-03 -7.070079e-04 +3.075129e-03 4.978245e-03 5.708833e-03 5.749782e-03 5.566696e-03 5.455079e-03 5.428491e-03 5.179431e-03 4.865628e-03 6.454033e-03 +1.201584e-02 4.175662e-02 6.768437e-02 7.923301e-02 8.334303e-02 8.279734e-02 7.748852e-02 6.610387e-02 4.748133e-02 2.386927e-02 +1.732510e+01 1.731806e+01 1.731663e+01 1.732099e+01 1.733009e+01 1.728410e+01 1.720771e+01 1.711745e+01 1.698488e+01 1.679468e+01 +1.732510e+01 1.731806e+01 1.731663e+01 1.732099e+01 1.733009e+01 1.728410e+01 1.720771e+01 1.711745e+01 1.698488e+01 1.679468e+01 +2 1 +4.752224e-02 3.712050e-02 2.616865e-02 1.581149e-02 5.722511e-03 -4.154505e-03 -1.375220e-02 -2.301213e-02 -3.209694e-02 -4.121476e-02 +-5.158842e-02 -3.603296e-02 -2.520329e-02 -1.931214e-02 -1.564458e-02 -1.240423e-02 -8.585976e-03 -3.270419e-03 2.584276e-03 -1.782446e-03 +-5.119888e-04 1.563373e-03 6.626768e-04 -7.603990e-04 -1.155065e-03 -4.535265e-04 1.281095e-03 2.558175e-03 3.458074e-03 7.235846e-03 +6.838686e-03 2.293239e-02 3.454260e-02 3.710646e-02 3.794898e-02 3.910433e-02 3.913195e-02 3.698464e-02 3.357210e-02 2.348136e-02 +1.723036e+01 1.721519e+01 1.723124e+01 1.724992e+01 1.726996e+01 1.729813e+01 1.732899e+01 1.735768e+01 1.737295e+01 1.740072e+01 +1.723036e+01 1.721519e+01 1.723124e+01 1.724992e+01 1.726996e+01 1.729813e+01 1.732899e+01 1.735768e+01 1.737295e+01 1.740072e+01 +3 1 +4.648263e-02 3.593335e-02 2.552034e-02 1.563449e-02 5.639134e-03 -4.206962e-03 -1.383912e-02 -2.317711e-02 -3.224923e-02 -4.110787e-02 +-8.240480e-02 -5.462117e-02 -3.215311e-02 -2.273109e-02 -1.813861e-02 -1.528776e-02 -1.226731e-02 -7.286939e-03 -1.900625e-03 -2.791773e-03 +1.049790e-04 7.583007e-04 -3.010072e-03 -4.221808e-03 -2.846507e-03 -1.882785e-03 -9.106780e-04 8.102799e-04 2.796716e-03 6.555163e-03 +2.981676e-03 8.139976e-03 1.007381e-02 1.241757e-02 1.847308e-02 2.451094e-02 2.888240e-02 3.088392e-02 2.864862e-02 1.868333e-02 +1.719627e+01 1.719605e+01 1.724434e+01 1.725053e+01 1.728455e+01 1.732318e+01 1.736000e+01 1.739645e+01 1.743824e+01 1.752698e+01 +1.719627e+01 1.719605e+01 1.724434e+01 1.725053e+01 1.728455e+01 1.732318e+01 1.736000e+01 1.739645e+01 1.743824e+01 1.752698e+01 +4 1 +4.592216e-02 3.542354e-02 2.541309e-02 1.564746e-02 5.677309e-03 -4.151678e-03 -1.380394e-02 -2.323043e-02 -3.231583e-02 -4.103265e-02 +-9.597932e-02 -5.758220e-02 -2.591589e-02 -1.641456e-02 -1.387083e-02 -1.312332e-02 -1.220393e-02 -9.580879e-03 -6.594558e-03 -5.041363e-03 +1.835845e-03 6.193146e-04 -4.709615e-03 -4.460532e-03 -2.867796e-03 -2.046499e-03 -1.463895e-03 9.871539e-05 3.014895e-03 6.537046e-03 +-7.476984e-04 -3.776835e-03 -4.818696e-03 2.226827e-03 1.325978e-02 2.237419e-02 2.918657e-02 3.331740e-02 3.178765e-02 2.043428e-02 +1.716762e+01 1.720230e+01 1.726312e+01 1.726789e+01 1.730682e+01 1.734407e+01 1.737795e+01 1.741441e+01 1.745757e+01 1.759615e+01 +1.716762e+01 1.720230e+01 1.726312e+01 1.726789e+01 1.730682e+01 1.734407e+01 1.737795e+01 1.741441e+01 1.745757e+01 1.759615e+01 +5 1 +4.587399e-02 3.534332e-02 2.542593e-02 1.565341e-02 5.742019e-03 -4.076115e-03 -1.375242e-02 -2.323555e-02 -3.233570e-02 -4.097849e-02 +-1.012771e-01 -5.550982e-02 -1.941113e-02 -1.123852e-02 -1.107390e-02 -1.151088e-02 -1.135174e-02 -1.019247e-02 -8.285387e-03 -6.919137e-03 +3.612418e-03 3.466380e-04 -4.246061e-03 -3.609272e-03 -2.595834e-03 -2.048288e-03 -1.608486e-03 -7.144174e-05 2.859019e-03 6.554616e-03 +-3.568384e-03 -1.124201e-02 -1.181929e-02 -7.401018e-04 1.284248e-02 2.331627e-02 3.110439e-02 3.610130e-02 3.533105e-02 2.336998e-02 +1.714130e+01 1.720158e+01 1.727754e+01 1.729559e+01 1.732790e+01 1.735867e+01 1.738881e+01 1.742440e+01 1.746438e+01 1.760819e+01 +1.714130e+01 1.720158e+01 1.727754e+01 1.729559e+01 1.732790e+01 1.735867e+01 1.738881e+01 1.742440e+01 1.746438e+01 1.760819e+01 +6 1 +4.633435e-02 3.550949e-02 2.544652e-02 1.565829e-02 5.794404e-03 -4.024748e-03 -1.370508e-02 -2.317729e-02 -3.230517e-02 -4.096588e-02 +-1.019028e-01 -5.492240e-02 -1.823597e-02 -1.012135e-02 -1.054195e-02 -1.087949e-02 -1.075043e-02 -1.032044e-02 -8.465969e-03 -5.134720e-03 +5.200041e-03 1.145739e-03 -3.802323e-03 -3.344752e-03 -2.562321e-03 -2.013973e-03 -1.476692e-03 -7.123177e-04 1.283632e-03 5.824691e-03 +-5.745307e-03 -1.767144e-02 -1.936217e-02 -6.048252e-03 9.474465e-03 2.100649e-02 2.929486e-02 3.467350e-02 3.521636e-02 2.443635e-02 +1.711142e+01 1.717578e+01 1.728054e+01 1.731224e+01 1.734138e+01 1.737099e+01 1.740134e+01 1.743291e+01 1.746962e+01 1.760450e+01 +1.711142e+01 1.717578e+01 1.728054e+01 1.731224e+01 1.734138e+01 1.737099e+01 1.740134e+01 1.743291e+01 1.746962e+01 1.760450e+01 +7 1 +4.734133e-02 3.600229e-02 2.552707e-02 1.568086e-02 5.819890e-03 -4.002876e-03 -1.367157e-02 -2.313430e-02 -3.232581e-02 -4.107296e-02 +-9.922240e-02 -5.706198e-02 -2.233239e-02 -1.233874e-02 -1.147290e-02 -1.094862e-02 -1.030771e-02 -9.460288e-03 -6.440420e-03 1.034666e-03 +6.383601e-03 2.751114e-03 -2.884612e-03 -3.421580e-03 -2.450240e-03 -1.919750e-03 -1.756396e-03 -1.658521e-03 -5.534760e-04 4.476784e-03 +-8.015133e-03 -2.588713e-02 -3.267292e-02 -2.003920e-02 -2.877847e-03 9.766405e-03 1.848496e-02 2.482095e-02 2.805581e-02 2.121342e-02 +1.707993e+01 1.712014e+01 1.724731e+01 1.729977e+01 1.733395e+01 1.736763e+01 1.740140e+01 1.743531e+01 1.747315e+01 1.760750e+01 +1.707993e+01 1.712014e+01 1.724731e+01 1.729977e+01 1.733395e+01 1.736763e+01 1.740140e+01 1.743531e+01 1.747315e+01 1.760750e+01 +8 1 +4.905746e-02 3.706217e-02 2.583629e-02 1.573210e-02 5.827881e-03 -4.007509e-03 -1.367275e-02 -2.313449e-02 -3.240145e-02 -4.131196e-02 +-9.174293e-02 -5.888570e-02 -2.934336e-02 -1.717966e-02 -1.385171e-02 -1.181028e-02 -9.735257e-03 -7.241479e-03 -2.345001e-03 9.895132e-03 +6.752684e-03 3.893654e-03 -9.266688e-04 -2.659198e-03 -2.443685e-03 -2.438394e-03 -2.842234e-03 -3.370272e-03 -2.708168e-03 2.920315e-03 +-1.042295e-02 -3.586928e-02 -5.273940e-02 -4.734861e-02 -3.204752e-02 -1.748289e-02 -5.381696e-03 5.401126e-03 1.443236e-02 1.438294e-02 +1.705277e+01 1.703643e+01 1.715389e+01 1.723048e+01 1.728113e+01 1.733028e+01 1.738190e+01 1.743210e+01 1.747998e+01 1.762493e+01 +1.705277e+01 1.703643e+01 1.715389e+01 1.723048e+01 1.728113e+01 1.733028e+01 1.738190e+01 1.743210e+01 1.747998e+01 1.762493e+01 +9 1 +5.156816e-02 3.882364e-02 2.674274e-02 1.611463e-02 6.028214e-03 -3.880200e-03 -1.360142e-02 -2.313808e-02 -3.249036e-02 -4.165257e-02 +-7.574225e-02 -5.379652e-02 -3.351482e-02 -2.212398e-02 -1.699507e-02 -1.329678e-02 -9.312139e-03 -4.629590e-03 2.442619e-03 1.941069e-02 +5.894947e-03 3.022373e-03 -1.079547e-03 -3.121211e-03 -3.630186e-03 -3.906480e-03 -4.551275e-03 -5.358482e-03 -5.093551e-03 1.784684e-03 +-1.292294e-02 -4.637805e-02 -7.495520e-02 -8.025454e-02 -7.033169e-02 -5.491466e-02 -3.779994e-02 -1.924516e-02 -4.159492e-04 8.600279e-03 +1.703628e+01 1.695231e+01 1.700631e+01 1.707114e+01 1.713451e+01 1.720840e+01 1.729529e+01 1.738943e+01 1.747600e+01 1.764073e+01 +1.703628e+01 1.695231e+01 1.700631e+01 1.707114e+01 1.713451e+01 1.720840e+01 1.729529e+01 1.738943e+01 1.747600e+01 1.764073e+01 +10 1 +5.186765e-02 3.937581e-02 2.737888e-02 1.663906e-02 6.472423e-03 -3.442754e-03 -1.322284e-02 -2.280546e-02 -3.215808e-02 -4.199056e-02 +-4.526859e-02 -3.408458e-02 -2.461443e-02 -1.803991e-02 -1.405876e-02 -1.075958e-02 -6.962921e-03 -2.436300e-03 4.095949e-03 1.936070e-02 +3.889037e-03 -7.968470e-04 -4.593549e-03 -6.409588e-03 -6.875720e-03 -6.764423e-03 -6.359166e-03 -5.640011e-03 -4.305967e-03 -1.061004e-03 +-1.663542e-02 -5.894230e-02 -9.675717e-02 -1.116336e-01 -1.119265e-01 -1.043572e-01 -9.215331e-02 -7.613732e-02 -5.626242e-02 -3.099553e-02 +1.703392e+01 1.690778e+01 1.687772e+01 1.686570e+01 1.686371e+01 1.686046e+01 1.691467e+01 1.700976e+01 1.712984e+01 1.727127e+01 +1.703392e+01 1.690778e+01 1.687772e+01 1.686570e+01 1.686371e+01 1.686046e+01 1.691467e+01 1.700976e+01 1.712984e+01 1.727127e+01 +1 2 +4.854910e-02 3.832066e-02 2.701755e-02 1.631408e-02 6.029586e-03 -3.847608e-03 -1.331626e-02 -2.246024e-02 -3.162244e-02 -4.152645e-02 +-1.297582e-02 -6.998712e-03 -4.178427e-03 -2.792775e-03 -1.894862e-03 -7.133912e-04 1.621930e-03 3.796441e-03 5.055199e-03 2.114881e-04 +1.195417e-02 1.649610e-02 1.832202e-02 1.841294e-02 1.805451e-02 1.792899e-02 1.782634e-02 1.728476e-02 1.709982e-02 2.288414e-02 +1.025163e-02 3.619605e-02 6.031560e-02 7.335877e-02 8.014697e-02 8.200938e-02 7.768623e-02 6.496559e-02 4.315618e-02 1.876079e-02 +1.724208e+01 1.725467e+01 1.727051e+01 1.728384e+01 1.729645e+01 1.725172e+01 1.716988e+01 1.707058e+01 1.692251e+01 1.672676e+01 +1.724208e+01 1.725467e+01 1.727051e+01 1.728384e+01 1.729645e+01 1.725172e+01 1.716988e+01 1.707058e+01 1.692251e+01 1.672676e+01 +2 2 +4.749044e-02 3.688768e-02 2.615717e-02 1.586412e-02 5.722732e-03 -4.252162e-03 -1.396946e-02 -2.312960e-02 -3.211653e-02 -4.139835e-02 +-4.443170e-02 -2.359152e-02 -1.142170e-02 -6.328721e-03 -2.861830e-03 -9.338723e-04 3.128931e-03 9.435713e-03 1.275186e-02 2.178675e-04 +7.416568e-04 4.278720e-03 9.558145e-04 -3.131178e-03 -3.513794e-03 -2.277633e-04 3.990380e-03 8.596756e-03 1.255034e-02 2.483575e-02 +3.232708e-03 1.271001e-02 2.188877e-02 2.354771e-02 1.830153e-02 9.217799e-03 3.354612e-03 5.223518e-03 9.109723e-03 7.900735e-03 +1.711853e+01 1.712166e+01 1.711629e+01 1.710581e+01 1.711737e+01 1.714987e+01 1.721485e+01 1.722044e+01 1.719086e+01 1.733219e+01 +1.711853e+01 1.712166e+01 1.711629e+01 1.710581e+01 1.711737e+01 1.714987e+01 1.721485e+01 1.722044e+01 1.719086e+01 1.733219e+01 +3 2 +4.675529e-02 3.608537e-02 2.571670e-02 1.574551e-02 5.627892e-03 -4.248740e-03 -1.390856e-02 -2.328422e-02 -3.234150e-02 -4.122041e-02 +-7.172581e-02 -3.643694e-02 -1.144855e-02 -2.421014e-03 1.258626e-03 -4.763570e-05 9.306206e-06 6.529378e-03 1.011708e-02 -1.096505e-03 +1.969922e-03 1.563539e-03 -9.210288e-03 -1.249999e-02 -7.524647e-03 -5.101756e-03 -2.370850e-03 2.880951e-03 9.874671e-03 2.238667e-02 +1.659181e-03 6.348319e-03 9.006922e-03 4.127632e-03 -4.530971e-03 -9.800988e-03 -9.749345e-03 -5.328615e-03 1.642227e-03 4.710928e-03 +1.711577e+01 1.712595e+01 1.710661e+01 1.708669e+01 1.719744e+01 1.728506e+01 1.733523e+01 1.737083e+01 1.739424e+01 1.750016e+01 +1.711577e+01 1.712595e+01 1.710661e+01 1.708669e+01 1.719744e+01 1.728506e+01 1.733523e+01 1.737083e+01 1.739424e+01 1.750016e+01 +4 2 +4.627203e-02 3.560594e-02 2.553368e-02 1.566071e-02 5.625187e-03 -4.205521e-03 -1.385324e-02 -2.334214e-02 -3.249668e-02 -4.113887e-02 +-8.551536e-02 -4.015289e-02 -4.844545e-03 5.604625e-03 4.539443e-03 -9.885461e-04 -4.339430e-03 -1.295440e-03 1.095357e-03 -3.527669e-03 +7.294921e-03 1.510500e-03 -1.356161e-02 -1.301737e-02 -8.781310e-03 -6.647437e-03 -5.275694e-03 -1.405530e-03 9.729962e-03 2.155451e-02 +-1.188752e-04 -1.985094e-04 -2.209151e-03 -7.605015e-03 -1.163060e-02 -1.082414e-02 -7.351750e-03 -2.426394e-03 2.689555e-03 3.748126e-03 +1.710758e+01 1.713263e+01 1.710803e+01 1.711481e+01 1.721801e+01 1.728330e+01 1.732378e+01 1.737181e+01 1.744558e+01 1.759643e+01 +1.710758e+01 1.713263e+01 1.710803e+01 1.711481e+01 1.721801e+01 1.728330e+01 1.732378e+01 1.737181e+01 1.744558e+01 1.759643e+01 +5 2 +4.616574e-02 3.549022e-02 2.549041e-02 1.562632e-02 5.675330e-03 -4.126674e-03 -1.380602e-02 -2.337758e-02 -3.257392e-02 -4.111902e-02 +-9.249588e-02 -4.016538e-02 4.464020e-04 9.226830e-03 4.315066e-03 -1.812801e-03 -4.229741e-03 -4.410249e-03 -4.769023e-03 -5.257608e-03 +1.303475e-02 1.195373e-03 -1.172157e-02 -1.077570e-02 -8.598426e-03 -7.375869e-03 -6.831655e-03 -2.817289e-03 9.385672e-03 2.084102e-02 +-1.856672e-03 -5.985577e-03 -9.773639e-03 -1.191709e-02 -1.123197e-02 -8.881433e-03 -7.171539e-03 -3.664474e-03 1.957212e-03 3.771033e-03 +1.709201e+01 1.713082e+01 1.713375e+01 1.714255e+01 1.720147e+01 1.723629e+01 1.728323e+01 1.736355e+01 1.744969e+01 1.762494e+01 +1.709201e+01 1.713082e+01 1.713375e+01 1.714255e+01 1.720147e+01 1.723629e+01 1.728323e+01 1.736355e+01 1.744969e+01 1.762494e+01 +6 2 +4.645346e-02 3.559753e-02 2.550745e-02 1.562846e-02 5.715246e-03 -4.100766e-03 -1.378072e-02 -2.326964e-02 -3.247508e-02 -4.113158e-02 +-9.422165e-02 -3.956915e-02 1.810767e-03 7.834117e-03 3.843558e-03 -6.996391e-05 -1.562365e-03 -4.304158e-03 -7.387780e-03 -3.957489e-03 +1.824426e-02 3.134906e-03 -1.064154e-02 -9.880971e-03 -8.652034e-03 -7.222046e-03 -5.355937e-03 -3.125283e-03 3.433812e-03 1.784902e-02 +-3.262099e-03 -9.367428e-03 -1.211447e-02 -1.138216e-02 -8.696783e-03 -4.580962e-03 -2.980588e-04 4.241104e-03 7.326720e-03 5.907201e-03 +1.706974e+01 1.712385e+01 1.717097e+01 1.718109e+01 1.722282e+01 1.727512e+01 1.733613e+01 1.738691e+01 1.743934e+01 1.762158e+01 +1.706974e+01 1.712385e+01 1.717097e+01 1.718109e+01 1.722282e+01 1.727512e+01 1.733613e+01 1.738691e+01 1.743934e+01 1.762158e+01 +7 2 +4.712833e-02 3.581376e-02 2.553431e-02 1.565244e-02 5.739269e-03 -4.074072e-03 -1.372150e-02 -2.316918e-02 -3.237741e-02 -4.118818e-02 +-9.171710e-02 -3.980093e-02 -1.569969e-05 4.556958e-03 2.923531e-03 9.195819e-04 -6.731845e-04 -3.553960e-03 -5.358233e-03 1.683581e-03 +2.240022e-02 7.064846e-03 -1.007461e-02 -1.066761e-02 -8.352181e-03 -6.581168e-03 -5.875869e-03 -5.631426e-03 -2.134764e-03 1.308416e-02 +-4.855866e-03 -1.312047e-02 -1.264083e-02 -5.387727e-03 5.326000e-04 5.984776e-03 1.075877e-02 1.320333e-02 1.240496e-02 7.619796e-03 +1.704196e+01 1.709975e+01 1.719964e+01 1.721184e+01 1.725742e+01 1.730939e+01 1.736042e+01 1.740880e+01 1.744529e+01 1.762217e+01 +1.704196e+01 1.709975e+01 1.719964e+01 1.721184e+01 1.725742e+01 1.730939e+01 1.736042e+01 1.740880e+01 1.744529e+01 1.762217e+01 +8 2 +4.836849e-02 3.628260e-02 2.560902e-02 1.567778e-02 5.772888e-03 -4.044892e-03 -1.367840e-02 -2.311801e-02 -3.239704e-02 -4.135429e-02 +-8.477021e-02 -3.994467e-02 -4.446057e-03 1.421052e-03 1.383407e-03 7.409944e-04 -1.896486e-04 -8.689654e-04 1.075939e-03 1.091909e-02 +2.466141e-02 1.006496e-02 -6.497543e-03 -9.849814e-03 -8.703206e-03 -8.209027e-03 -8.916016e-03 -1.075054e-02 -9.658506e-03 8.165818e-03 +-7.517867e-03 -2.142933e-02 -2.104015e-02 -5.752937e-03 7.112653e-03 1.337096e-02 1.522160e-02 1.400619e-02 1.151927e-02 7.362164e-03 +1.700829e+01 1.704867e+01 1.720371e+01 1.724272e+01 1.727854e+01 1.732207e+01 1.737466e+01 1.742662e+01 1.747161e+01 1.763488e+01 +1.700829e+01 1.704867e+01 1.720371e+01 1.724272e+01 1.727854e+01 1.732207e+01 1.737466e+01 1.742662e+01 1.747161e+01 1.763488e+01 +9 2 +5.045860e-02 3.727761e-02 2.589469e-02 1.575088e-02 5.794663e-03 -4.055515e-03 -1.365580e-02 -2.310619e-02 -3.249308e-02 -4.168744e-02 +-7.094974e-02 -3.646423e-02 -1.087658e-02 -3.549282e-03 -1.542007e-03 4.922820e-05 1.341984e-03 3.029527e-03 7.519184e-03 2.159800e-02 +2.405603e-02 8.350773e-03 -6.450707e-03 -1.166153e-02 -1.270339e-02 -1.261619e-02 -1.354270e-02 -1.608642e-02 -1.633062e-02 4.111595e-03 +-1.235457e-02 -3.910464e-02 -5.080665e-02 -3.858748e-02 -2.045921e-02 -5.884432e-03 2.228796e-03 3.921466e-03 3.667572e-03 3.208034e-03 +1.696801e+01 1.694577e+01 1.709236e+01 1.717350e+01 1.723792e+01 1.732611e+01 1.737501e+01 1.739972e+01 1.742610e+01 1.765140e+01 +1.696801e+01 1.694577e+01 1.709236e+01 1.717350e+01 1.723792e+01 1.732611e+01 1.737501e+01 1.739972e+01 1.742610e+01 1.765140e+01 +10 2 +5.100239e-02 3.796645e-02 2.642785e-02 1.612460e-02 6.143384e-03 -3.694539e-03 -1.340650e-02 -2.285093e-02 -3.187306e-02 -4.205035e-02 +-4.339616e-02 -2.353342e-02 -1.151878e-02 -6.513255e-03 -3.766734e-03 -1.163509e-03 1.502934e-03 3.855498e-03 7.756803e-03 2.149057e-02 +1.974425e-02 -1.842518e-03 -1.562203e-02 -2.171419e-02 -2.373079e-02 -2.351741e-02 -2.229873e-02 -2.023370e-02 -1.639351e-02 -7.995428e-03 +-2.054713e-02 -6.911491e-02 -1.071162e-01 -1.201230e-01 -1.224894e-01 -1.182377e-01 -1.085431e-01 -9.400498e-02 -7.462101e-02 -4.465229e-02 +1.693471e+01 1.678479e+01 1.676191e+01 1.670870e+01 1.668210e+01 1.667148e+01 1.672453e+01 1.682651e+01 1.695073e+01 1.709481e+01 +1.693471e+01 1.678479e+01 1.676191e+01 1.670870e+01 1.668210e+01 1.667148e+01 1.672453e+01 1.682651e+01 1.695073e+01 1.709481e+01 +1 3 +4.793539e-02 3.778250e-02 2.668843e-02 1.614553e-02 5.885711e-03 -3.979304e-03 -1.343544e-02 -2.261133e-02 -3.192216e-02 -4.215676e-02 +-1.311869e-02 -7.488414e-03 -4.369254e-03 -2.834558e-03 -1.646241e-03 2.563450e-04 2.855010e-03 5.206595e-03 6.275680e-03 6.720043e-04 +2.402072e-02 2.727962e-02 2.816738e-02 2.749828e-02 2.703712e-02 2.698541e-02 2.656264e-02 2.626605e-02 2.820263e-02 3.866625e-02 +9.588722e-03 3.357527e-02 5.540827e-02 6.729707e-02 7.451799e-02 7.749482e-02 7.389280e-02 6.148393e-02 3.986333e-02 1.637634e-02 +1.720798e+01 1.721664e+01 1.723544e+01 1.725417e+01 1.727270e+01 1.723058e+01 1.714457e+01 1.703706e+01 1.687495e+01 1.667923e+01 +1.720798e+01 1.721664e+01 1.723544e+01 1.725417e+01 1.727270e+01 1.723058e+01 1.714457e+01 1.703706e+01 1.687495e+01 1.667923e+01 +2 3 +4.731671e-02 3.682047e-02 2.620819e-02 1.597571e-02 5.771464e-03 -4.302245e-03 -1.390637e-02 -2.306139e-02 -3.222228e-02 -4.199634e-02 +-4.331620e-02 -2.373375e-02 -1.242981e-02 -7.039934e-03 -2.117487e-03 3.783424e-04 6.998298e-03 1.442472e-02 1.731638e-02 5.318905e-04 +3.466264e-03 4.575081e-03 -3.586602e-06 -4.520472e-03 -2.739479e-03 1.415117e-03 6.001170e-03 1.385570e-02 2.217501e-02 4.003832e-02 +5.283590e-03 1.756749e-02 2.516701e-02 2.211545e-02 1.108410e-02 -5.840904e-04 -3.181290e-03 -2.204536e-05 1.480733e-03 9.838966e-04 +1.709032e+01 1.708413e+01 1.708039e+01 1.707782e+01 1.712246e+01 1.718149e+01 1.717225e+01 1.712961e+01 1.706414e+01 1.726943e+01 +1.709032e+01 1.708413e+01 1.708039e+01 1.707782e+01 1.712246e+01 1.718149e+01 1.717225e+01 1.712961e+01 1.706414e+01 1.726943e+01 +3 3 +4.704674e-02 3.629587e-02 2.595380e-02 1.594989e-02 5.710569e-03 -4.196640e-03 -1.382362e-02 -2.318564e-02 -3.240837e-02 -4.167220e-02 +-6.577306e-02 -3.173086e-02 -1.290823e-02 -3.774490e-03 1.438782e-03 1.958395e-04 5.834647e-03 1.462569e-02 1.663171e-02 -2.271801e-03 +2.626338e-03 -1.853378e-03 -1.230384e-02 -1.476152e-02 -7.723219e-03 -5.425460e-03 -1.880681e-03 5.656777e-03 1.706731e-02 3.546597e-02 +4.179955e-03 1.326676e-02 1.609056e-02 6.396244e-03 -6.194861e-03 -1.216231e-02 -1.375324e-02 -1.260129e-02 -6.785109e-03 -7.873592e-04 +1.708194e+01 1.709204e+01 1.708033e+01 1.707336e+01 1.721915e+01 1.728056e+01 1.729276e+01 1.728903e+01 1.731844e+01 1.747619e+01 +1.708194e+01 1.709204e+01 1.708033e+01 1.707336e+01 1.721915e+01 1.728056e+01 1.729276e+01 1.728903e+01 1.731844e+01 1.747619e+01 +4 3 +4.662042e-02 3.579227e-02 2.571003e-02 1.582109e-02 5.723311e-03 -4.164029e-03 -1.381289e-02 -2.330917e-02 -3.253771e-02 -4.142192e-02 +-7.413655e-02 -2.760188e-02 -5.960280e-03 5.034612e-03 4.010758e-03 8.053293e-06 7.809069e-04 5.855846e-03 5.864686e-03 -5.203511e-03 +1.230633e-02 -2.832040e-05 -1.611156e-02 -1.521632e-02 -1.157499e-02 -9.217299e-03 -8.139079e-03 -3.994546e-03 1.481002e-02 3.232827e-02 +1.968903e-03 6.030612e-03 6.022502e-03 -8.371032e-04 -9.191354e-03 -1.386028e-02 -1.359847e-02 -9.289300e-03 -4.005167e-03 -9.297812e-04 +1.707670e+01 1.712064e+01 1.708660e+01 1.708246e+01 1.718143e+01 1.726183e+01 1.731921e+01 1.737962e+01 1.745653e+01 1.759458e+01 +1.707670e+01 1.712064e+01 1.708660e+01 1.708246e+01 1.718143e+01 1.726183e+01 1.731921e+01 1.737962e+01 1.745653e+01 1.759458e+01 +5 3 +4.635237e-02 3.554879e-02 2.555360e-02 1.568391e-02 5.727688e-03 -4.086398e-03 -1.375512e-02 -2.340037e-02 -3.262614e-02 -4.128619e-02 +-7.902226e-02 -2.277069e-02 -1.431800e-03 9.141852e-03 4.659953e-03 4.833860e-04 -1.298135e-03 -7.395885e-04 -3.309278e-03 -6.622296e-03 +2.150785e-02 1.540343e-03 -1.269444e-02 -1.349406e-02 -1.284258e-02 -1.212735e-02 -1.254057e-02 -9.107154e-03 1.395815e-02 2.917113e-02 +-1.318222e-04 -2.036743e-04 -7.856538e-04 -1.983425e-03 -2.064456e-03 -2.250566e-03 -5.922121e-03 -1.078185e-02 -9.945696e-03 -4.254647e-03 +1.706473e+01 1.715116e+01 1.711979e+01 1.710584e+01 1.714352e+01 1.716252e+01 1.720876e+01 1.736995e+01 1.751181e+01 1.764605e+01 +1.706473e+01 1.715116e+01 1.711979e+01 1.710584e+01 1.714352e+01 1.716252e+01 1.720876e+01 1.736995e+01 1.751181e+01 1.764605e+01 +6 3 +4.634015e-02 3.558816e-02 2.556605e-02 1.564008e-02 5.739849e-03 -4.083414e-03 -1.379087e-02 -2.332734e-02 -3.249215e-02 -4.119285e-02 +-8.053893e-02 -2.085949e-02 -9.302191e-04 7.294642e-03 5.233888e-03 2.587790e-03 8.701336e-04 -2.511497e-03 -8.692994e-03 -5.920531e-03 +2.986686e-02 2.882693e-03 -1.156197e-02 -1.244992e-02 -1.349326e-02 -1.220185e-02 -9.199413e-03 -6.580521e-03 3.407163e-03 2.309951e-02 +-1.850192e-03 -5.085451e-03 -7.472494e-03 -9.697008e-03 -1.061607e-02 -1.004255e-02 -8.454074e-03 -4.419794e-03 -5.711309e-04 1.834024e-04 +1.704827e+01 1.714994e+01 1.715007e+01 1.714623e+01 1.717259e+01 1.723307e+01 1.733053e+01 1.742982e+01 1.750917e+01 1.765898e+01 +1.704827e+01 1.714994e+01 1.715007e+01 1.714623e+01 1.717259e+01 1.723307e+01 1.733053e+01 1.742982e+01 1.750917e+01 1.765898e+01 +7 3 +4.659106e-02 3.569551e-02 2.560741e-02 1.564090e-02 5.726018e-03 -4.080812e-03 -1.372808e-02 -2.316995e-02 -3.237847e-02 -4.115252e-02 +-7.777008e-02 -1.957601e-02 -5.470230e-04 4.441555e-03 4.701221e-03 3.542162e-03 1.743762e-03 -2.648334e-03 -7.146506e-03 -1.184152e-03 +3.675274e-02 5.050865e-03 -1.503473e-02 -1.501205e-02 -1.298156e-02 -1.039007e-02 -9.233449e-03 -9.512460e-03 -5.753405e-03 1.533028e-02 +-3.138731e-03 -7.534953e-03 -8.238784e-03 -8.541951e-03 -7.818511e-03 -3.958248e-03 5.645764e-05 2.423034e-03 3.116418e-03 2.380380e-03 +1.702486e+01 1.714449e+01 1.716357e+01 1.719070e+01 1.724323e+01 1.731390e+01 1.739197e+01 1.745968e+01 1.751924e+01 1.766726e+01 +1.702486e+01 1.714449e+01 1.716357e+01 1.719070e+01 1.724323e+01 1.731390e+01 1.739197e+01 1.745968e+01 1.751924e+01 1.766726e+01 +8 3 +4.714493e-02 3.583597e-02 2.563064e-02 1.567386e-02 5.772878e-03 -4.021793e-03 -1.363635e-02 -2.304211e-02 -3.231238e-02 -4.124767e-02 +-7.076258e-02 -1.747042e-02 3.759841e-05 1.390766e-03 1.581593e-03 1.851074e-03 1.516481e-03 -2.155258e-04 3.196123e-04 7.763648e-03 +4.206813e-02 7.180841e-03 -1.509165e-02 -1.613087e-02 -1.370002e-02 -1.238913e-02 -1.239641e-02 -1.530772e-02 -1.643110e-02 4.894008e-03 +-4.800262e-03 -1.162030e-02 -9.978031e-03 -3.935607e-03 1.285871e-03 5.649790e-03 6.488746e-03 3.255598e-03 -2.252397e-03 -4.545280e-03 +1.699632e+01 1.713382e+01 1.718697e+01 1.722658e+01 1.727823e+01 1.733343e+01 1.739738e+01 1.743920e+01 1.747237e+01 1.767292e+01 +1.699632e+01 1.713382e+01 1.718697e+01 1.722658e+01 1.727823e+01 1.733343e+01 1.739738e+01 1.743920e+01 1.747237e+01 1.767292e+01 +9 3 +4.816528e-02 3.602842e-02 2.569293e-02 1.577902e-02 5.860585e-03 -3.994635e-03 -1.358981e-02 -2.300010e-02 -3.233558e-02 -4.156770e-02 +-5.807520e-02 -1.386105e-02 -1.767812e-03 -3.882155e-03 -4.102899e-03 -7.955006e-04 2.646811e-03 4.480025e-03 8.124042e-03 1.980460e-02 +4.510393e-02 6.801386e-03 -1.396979e-02 -1.807475e-02 -1.962457e-02 -1.915481e-02 -1.808733e-02 -2.108625e-02 -2.385552e-02 -2.758996e-03 +-7.521748e-03 -2.099956e-02 -2.431121e-02 -2.022372e-02 -1.707592e-02 -1.193220e-02 -6.043237e-03 -4.293016e-03 -6.853778e-03 -6.941139e-03 +1.696696e+01 1.710726e+01 1.717764e+01 1.717394e+01 1.718469e+01 1.726718e+01 1.735307e+01 1.736613e+01 1.736592e+01 1.754778e+01 +1.696696e+01 1.710726e+01 1.717764e+01 1.717394e+01 1.718469e+01 1.726718e+01 1.735307e+01 1.736613e+01 1.736592e+01 1.754778e+01 +10 3 +4.813105e-02 3.602998e-02 2.570130e-02 1.591831e-02 6.128246e-03 -3.694252e-03 -1.341277e-02 -2.284934e-02 -3.192343e-02 -4.229496e-02 +-3.495164e-02 -7.855605e-03 -3.144344e-03 -6.216857e-03 -6.325486e-03 -2.345497e-03 2.356001e-03 5.391257e-03 9.222753e-03 2.163372e-02 +4.239920e-02 -3.522806e-03 -2.393719e-02 -3.118145e-02 -3.522631e-02 -3.700001e-02 -3.624154e-02 -3.396065e-02 -2.989388e-02 -2.298816e-02 +-1.255758e-02 -3.778740e-02 -5.193931e-02 -5.932774e-02 -7.403713e-02 -8.802875e-02 -9.227393e-02 -8.596839e-02 -7.143066e-02 -4.384039e-02 +1.695610e+01 1.704623e+01 1.704718e+01 1.692823e+01 1.673849e+01 1.661097e+01 1.661398e+01 1.667307e+01 1.675645e+01 1.686829e+01 +1.695610e+01 1.704623e+01 1.704718e+01 1.692823e+01 1.673849e+01 1.661097e+01 1.661398e+01 1.667307e+01 1.675645e+01 1.686829e+01 +1 4 +4.700836e-02 3.710267e-02 2.636528e-02 1.606115e-02 5.844734e-03 -3.945561e-03 -1.335847e-02 -2.262749e-02 -3.217157e-02 -4.266733e-02 +4.436280e-04 -8.856775e-04 -2.050535e-03 -2.535138e-03 -1.574593e-03 8.029304e-04 3.579809e-03 5.633424e-03 6.185000e-03 -3.790086e-06 +2.053315e-02 3.248109e-02 3.369136e-02 3.198200e-02 3.077739e-02 2.977083e-02 2.819511e-02 2.833097e-02 3.413287e-02 4.848764e-02 +1.284342e-02 4.114335e-02 6.042773e-02 6.670312e-02 7.098671e-02 7.234931e-02 6.757979e-02 5.473047e-02 3.369359e-02 1.233268e-02 +1.730803e+01 1.726840e+01 1.725362e+01 1.725413e+01 1.726633e+01 1.721735e+01 1.712094e+01 1.699866e+01 1.681883e+01 1.663303e+01 +1.730803e+01 1.726840e+01 1.725362e+01 1.725413e+01 1.726633e+01 1.721735e+01 1.712094e+01 1.699866e+01 1.681883e+01 1.663303e+01 +2 4 +4.711203e-02 3.664712e-02 2.624553e-02 1.610904e-02 5.775084e-03 -4.247301e-03 -1.373739e-02 -2.292213e-02 -3.229150e-02 -4.233815e-02 +2.853725e-04 -4.086986e-03 -6.674348e-03 -7.178569e-03 -3.227208e-03 1.448858e-03 9.414704e-03 1.578684e-02 1.697801e-02 -2.172070e-03 +-5.558726e-03 5.215770e-03 3.785152e-03 1.200934e-03 3.136214e-03 3.069823e-03 7.429040e-03 1.745304e-02 2.982467e-02 4.721889e-02 +9.714533e-03 2.863607e-02 3.392411e-02 2.173875e-02 5.250040e-03 -6.240014e-03 -8.493352e-03 -6.413166e-03 -5.464117e-03 -4.319455e-03 +1.712111e+01 1.710817e+01 1.708950e+01 1.707738e+01 1.716733e+01 1.717147e+01 1.712681e+01 1.706121e+01 1.699819e+01 1.723141e+01 +1.712111e+01 1.710817e+01 1.708950e+01 1.707738e+01 1.716733e+01 1.717147e+01 1.712681e+01 1.706121e+01 1.699819e+01 1.723141e+01 +3 4 +4.761476e-02 3.679441e-02 2.624067e-02 1.622567e-02 5.816699e-03 -4.102983e-03 -1.366740e-02 -2.302632e-02 -3.240581e-02 -4.186373e-02 +-9.913206e-03 -1.117044e-02 -9.338436e-03 -5.445705e-03 -2.606456e-03 8.190118e-04 9.288260e-03 1.631039e-02 1.655955e-02 -6.699026e-03 +-5.617179e-03 -4.104040e-03 -7.139877e-03 -5.884955e-03 -3.485296e-03 -3.026381e-03 8.826802e-04 9.486198e-03 2.245482e-02 4.022203e-02 +1.293522e-02 3.817982e-02 4.464184e-02 2.470664e-02 5.633192e-04 -1.208965e-02 -1.608433e-02 -1.583629e-02 -1.015672e-02 -3.391665e-03 +1.709027e+01 1.708172e+01 1.707680e+01 1.706985e+01 1.723158e+01 1.727804e+01 1.726050e+01 1.724260e+01 1.726695e+01 1.745809e+01 +1.709027e+01 1.708172e+01 1.707680e+01 1.706985e+01 1.723158e+01 1.727804e+01 1.726050e+01 1.724260e+01 1.726695e+01 1.745809e+01 +4 4 +4.717012e-02 3.624144e-02 2.596974e-02 1.599364e-02 5.919419e-03 -4.086080e-03 -1.372115e-02 -2.318157e-02 -3.248837e-02 -4.146836e-02 +-3.440807e-02 -2.051721e-02 -8.202955e-03 1.714094e-03 -6.392009e-04 3.978520e-04 3.102194e-03 5.776415e-03 5.932000e-03 -9.360310e-03 +1.209653e-02 -1.281616e-03 -1.115442e-02 -8.644160e-03 -7.621991e-03 -7.413458e-03 -6.956462e-03 -2.604786e-03 1.752923e-02 3.434417e-02 +7.547331e-03 2.186336e-02 2.471968e-02 1.462694e-02 6.169471e-05 -1.455392e-02 -2.025974e-02 -1.632368e-02 -9.411886e-03 -3.680081e-03 +1.706636e+01 1.707003e+01 1.707067e+01 1.707082e+01 1.711598e+01 1.723617e+01 1.730647e+01 1.737627e+01 1.746447e+01 1.758221e+01 +1.706636e+01 1.707003e+01 1.707067e+01 1.707082e+01 1.711598e+01 1.723617e+01 1.730647e+01 1.737627e+01 1.746447e+01 1.758221e+01 +5 4 +4.682601e-02 3.573742e-02 2.560943e-02 1.576332e-02 5.867410e-03 -3.962189e-03 -1.359550e-02 -2.315372e-02 -3.255095e-02 -4.124091e-02 +-5.629279e-02 -2.406773e-02 -6.579311e-03 3.927545e-03 2.303134e-03 8.385457e-04 -3.140793e-04 -1.512670e-03 -3.950534e-03 -9.922334e-03 +2.124216e-02 -1.579960e-03 -1.015976e-02 -1.171022e-02 -1.258041e-02 -1.262924e-02 -1.309164e-02 -1.261996e-02 1.413492e-02 2.737494e-02 +4.034908e-03 1.248596e-02 1.864157e-02 2.258911e-02 2.491176e-02 2.225359e-02 1.267503e-02 -2.917933e-03 -1.276994e-02 -8.899151e-03 +1.705190e+01 1.710105e+01 1.710826e+01 1.710751e+01 1.710937e+01 1.711887e+01 1.713371e+01 1.731166e+01 1.755534e+01 1.764621e+01 +1.705190e+01 1.710105e+01 1.710826e+01 1.710751e+01 1.710937e+01 1.711887e+01 1.713371e+01 1.731166e+01 1.755534e+01 1.764621e+01 +6 4 +4.650517e-02 3.551498e-02 2.552857e-02 1.561405e-02 5.799439e-03 -3.971856e-03 -1.370298e-02 -2.323189e-02 -3.240089e-02 -4.110232e-02 +-6.365985e-02 -1.870108e-02 -5.785024e-03 2.148708e-03 4.441854e-03 3.132926e-03 2.587809e-03 -8.600939e-04 -9.294350e-03 -8.871028e-03 +3.376246e-02 4.441338e-04 -8.645905e-03 -1.186164e-02 -1.519235e-02 -1.442642e-02 -9.765394e-03 -8.121241e-03 5.745496e-04 1.657869e-02 +7.583560e-04 7.555560e-04 -1.768757e-03 -3.609812e-03 -4.344868e-03 -7.074470e-03 -1.116546e-02 -1.343500e-02 -1.277235e-02 -8.696214e-03 +1.703870e+01 1.715406e+01 1.712123e+01 1.711280e+01 1.712215e+01 1.717476e+01 1.730305e+01 1.745324e+01 1.755782e+01 1.764305e+01 +1.703870e+01 1.715406e+01 1.712123e+01 1.711280e+01 1.712215e+01 1.717476e+01 1.730305e+01 1.745324e+01 1.755782e+01 1.764305e+01 +7 4 +4.639335e-02 3.560148e-02 2.560924e-02 1.563613e-02 5.758908e-03 -4.013552e-03 -1.365960e-02 -2.309797e-02 -3.220172e-02 -4.107820e-02 +-6.206128e-02 -1.105723e-02 -3.363536e-03 2.150360e-03 4.882216e-03 4.654404e-03 4.074183e-03 8.807000e-05 -6.603826e-03 -2.960428e-03 +4.284086e-02 -1.579663e-03 -1.481081e-02 -1.598765e-02 -1.415693e-02 -1.095524e-02 -9.528297e-03 -1.153055e-02 -1.226421e-02 3.602326e-03 +-1.618317e-03 -5.426454e-03 -9.532361e-03 -1.279598e-02 -1.344547e-02 -1.133095e-02 -9.882966e-03 -1.203833e-02 -1.661018e-02 -1.468739e-02 +1.702539e+01 1.714901e+01 1.712556e+01 1.715513e+01 1.721733e+01 1.730049e+01 1.738792e+01 1.745090e+01 1.747240e+01 1.754263e+01 +1.702539e+01 1.714901e+01 1.712556e+01 1.715513e+01 1.721733e+01 1.730049e+01 1.738792e+01 1.745090e+01 1.747240e+01 1.754263e+01 +8 4 +4.652013e-02 3.568375e-02 2.565203e-02 1.566166e-02 5.805192e-03 -3.924501e-03 -1.353431e-02 -2.296140e-02 -3.219307e-02 -4.136436e-02 +-5.532746e-02 -5.100796e-03 1.975346e-04 1.848787e-03 1.468981e-03 1.128111e-03 2.534270e-03 1.404406e-03 9.764325e-04 6.434805e-03 +4.993902e-02 -3.327999e-03 -1.916064e-02 -1.773908e-02 -1.371212e-02 -1.187352e-02 -1.122657e-02 -1.469559e-02 -2.014612e-02 -1.097050e-02 +-2.807196e-03 -8.034543e-03 -1.048806e-02 -9.646369e-03 -5.948856e-03 -1.241301e-03 -1.698164e-04 -3.951835e-03 -9.670600e-03 -9.792562e-03 +1.701064e+01 1.715176e+01 1.715171e+01 1.720807e+01 1.727164e+01 1.732373e+01 1.738459e+01 1.739802e+01 1.735834e+01 1.737273e+01 +1.701064e+01 1.715176e+01 1.715171e+01 1.720807e+01 1.727164e+01 1.732373e+01 1.738459e+01 1.739802e+01 1.735834e+01 1.737273e+01 +9 4 +4.675278e-02 3.568930e-02 2.564451e-02 1.566236e-02 5.928464e-03 -3.752000e-03 -1.343713e-02 -2.290755e-02 -3.231541e-02 -4.189156e-02 +-4.300608e-02 2.050881e-03 3.459759e-03 -8.413261e-04 -6.429784e-03 -6.307527e-03 1.898729e-06 3.607012e-03 6.631855e-03 1.528615e-02 +5.548415e-02 -3.445075e-03 -1.777950e-02 -1.720845e-02 -1.838741e-02 -2.006697e-02 -1.847209e-02 -2.013521e-02 -2.623029e-02 -2.065806e-02 +-3.719116e-03 -1.099236e-02 -1.523549e-02 -1.693992e-02 -1.849640e-02 -1.846500e-02 -1.496502e-02 -9.964068e-03 -7.816706e-03 -5.819052e-03 +1.700235e+01 1.715980e+01 1.716782e+01 1.719247e+01 1.718002e+01 1.716784e+01 1.726600e+01 1.728820e+01 1.722008e+01 1.721713e+01 +1.700235e+01 1.715980e+01 1.716782e+01 1.719247e+01 1.718002e+01 1.716784e+01 1.726600e+01 1.728820e+01 1.722008e+01 1.721713e+01 +10 4 +4.624985e-02 3.541677e-02 2.555022e-02 1.573385e-02 6.168558e-03 -3.385902e-03 -1.320317e-02 -2.288353e-02 -3.237598e-02 -4.277493e-02 +-2.431363e-02 6.457259e-03 4.598999e-03 -2.114408e-03 -9.206423e-03 -9.258416e-03 -2.469333e-03 2.878440e-03 6.688007e-03 1.568800e-02 +5.423894e-02 -9.645074e-03 -2.656233e-02 -3.040864e-02 -3.276663e-02 -3.686899e-02 -3.994414e-02 -4.016015e-02 -3.932265e-02 -3.968614e-02 +-5.132481e-03 -9.504679e-03 -1.401140e-04 1.090521e-02 6.949160e-03 -1.342904e-02 -3.852696e-02 -5.207991e-02 -4.976487e-02 -3.179770e-02 +1.701954e+01 1.724686e+01 1.725832e+01 1.726693e+01 1.719361e+01 1.683251e+01 1.665555e+01 1.662701e+01 1.664193e+01 1.669732e+01 +1.701954e+01 1.724686e+01 1.725832e+01 1.726693e+01 1.719361e+01 1.683251e+01 1.665555e+01 1.662701e+01 1.664193e+01 1.669732e+01 +1 5 +4.639059e-02 3.582649e-02 2.587524e-02 1.585689e-02 5.822522e-03 -3.778585e-03 -1.311968e-02 -2.258037e-02 -3.240749e-02 -4.304623e-02 +2.596957e-03 2.043721e-04 -1.863366e-03 -2.241099e-03 -8.899993e-04 2.089320e-03 4.815559e-03 5.810682e-03 4.558892e-03 -2.107449e-03 +-1.088079e-02 2.771960e-02 3.581462e-02 3.565926e-02 3.356068e-02 3.023591e-02 2.647706e-02 2.863448e-02 3.898283e-02 5.424202e-02 +5.784847e-03 2.114597e-02 3.767545e-02 4.997013e-02 5.824896e-02 6.041166e-02 5.451259e-02 3.939247e-02 1.674581e-02 -5.262056e-05 +1.709415e+01 1.720346e+01 1.724070e+01 1.725249e+01 1.726819e+01 1.720488e+01 1.707992e+01 1.691617e+01 1.670514e+01 1.661324e+01 +1.709415e+01 1.720346e+01 1.724070e+01 1.725249e+01 1.726819e+01 1.720488e+01 1.707992e+01 1.691617e+01 1.670514e+01 1.661324e+01 +2 5 +4.660041e-02 3.580176e-02 2.593899e-02 1.587815e-02 5.674910e-03 -4.123936e-03 -1.343762e-02 -2.276623e-02 -3.238776e-02 -4.250553e-02 +9.768019e-03 -2.869685e-05 -6.507949e-03 -6.137523e-03 -2.019795e-03 5.717549e-03 1.349128e-02 1.591008e-02 1.165807e-02 -8.507996e-03 +-2.968453e-02 1.102780e-02 1.429018e-02 1.256786e-02 9.191996e-03 5.366520e-03 1.024389e-02 2.264943e-02 3.675397e-02 4.882251e-02 +3.501871e-03 8.774195e-03 7.542195e-03 1.246250e-03 -5.006553e-03 -9.097318e-03 -1.102739e-02 -1.332244e-02 -1.511692e-02 -1.126405e-02 +1.703806e+01 1.707952e+01 1.707785e+01 1.710488e+01 1.717767e+01 1.715547e+01 1.707617e+01 1.699763e+01 1.699041e+01 1.723607e+01 +1.703806e+01 1.707952e+01 1.707785e+01 1.710488e+01 1.717767e+01 1.715547e+01 1.707617e+01 1.699763e+01 1.699041e+01 1.723607e+01 +3 5 +4.692489e-02 3.593011e-02 2.602064e-02 1.597433e-02 5.809157e-03 -3.984910e-03 -1.350691e-02 -2.292661e-02 -3.239303e-02 -4.186992e-02 +1.738610e-02 -8.713130e-04 -9.383624e-03 -5.174379e-03 -1.144262e-03 6.398999e-03 1.374112e-02 1.472740e-02 9.757599e-03 -1.439675e-02 +-2.374758e-02 2.982080e-03 5.770286e-03 7.691945e-03 1.699079e-03 6.016313e-04 5.611989e-03 1.490270e-02 2.657310e-02 3.945593e-02 +5.543792e-03 1.448865e-02 1.187202e-02 -1.096258e-03 -1.218072e-02 -1.838679e-02 -2.077830e-02 -1.830702e-02 -1.159046e-02 -4.833386e-03 +1.703218e+01 1.705520e+01 1.706685e+01 1.712650e+01 1.723176e+01 1.724045e+01 1.723596e+01 1.724393e+01 1.727232e+01 1.744936e+01 +1.703218e+01 1.705520e+01 1.706685e+01 1.712650e+01 1.723176e+01 1.724045e+01 1.723596e+01 1.724393e+01 1.727232e+01 1.744936e+01 +4 5 +4.727634e-02 3.638984e-02 2.619242e-02 1.601029e-02 5.901610e-03 -3.966806e-03 -1.363406e-02 -2.309534e-02 -3.242595e-02 -4.142006e-02 +1.980947e-02 6.646844e-04 -4.712034e-03 1.051052e-03 1.315019e-03 4.245184e-03 5.339082e-03 1.898842e-03 8.454370e-04 -1.500980e-02 +-1.669456e-03 2.070654e-03 -8.110156e-05 1.681895e-03 -1.129207e-04 -2.942162e-03 -1.821799e-03 4.022724e-03 1.951496e-02 3.096974e-02 +1.265753e-02 3.549421e-02 3.388298e-02 8.696026e-03 -1.020208e-02 -1.745730e-02 -1.951843e-02 -1.898016e-02 -1.527002e-02 -8.280137e-03 +1.705931e+01 1.706093e+01 1.706223e+01 1.710855e+01 1.717836e+01 1.722775e+01 1.727881e+01 1.735963e+01 1.747407e+01 1.756009e+01 +1.705931e+01 1.706093e+01 1.706223e+01 1.710855e+01 1.717836e+01 1.722775e+01 1.727881e+01 1.735963e+01 1.747407e+01 1.756009e+01 +5 5 +4.756843e-02 3.687082e-02 2.593213e-02 1.592252e-02 5.993369e-03 -3.809314e-03 -1.348269e-02 -2.283747e-02 -3.247151e-02 -4.119581e-02 +4.034158e-03 -1.618786e-03 3.199459e-05 3.976806e-03 2.624499e-03 1.688934e-03 9.297655e-04 -3.430566e-03 -6.154290e-03 -1.247304e-02 +9.164190e-03 -2.655517e-03 -5.436498e-03 -5.925165e-03 -6.589769e-03 -7.056055e-03 -6.374425e-03 -5.570299e-03 1.054068e-02 1.796111e-02 +1.922207e-02 5.905698e-02 7.961732e-02 7.569401e-02 6.654234e-02 5.528610e-02 4.012582e-02 1.361067e-02 -1.246592e-02 -1.464857e-02 +1.712457e+01 1.711536e+01 1.711182e+01 1.710790e+01 1.710835e+01 1.711139e+01 1.712274e+01 1.720606e+01 1.754718e+01 1.759973e+01 +1.712457e+01 1.711536e+01 1.711182e+01 1.710790e+01 1.710835e+01 1.711139e+01 1.712274e+01 1.720606e+01 1.754718e+01 1.759973e+01 +6 5 +4.704975e-02 3.589114e-02 2.556658e-02 1.567154e-02 5.931925e-03 -3.787968e-03 -1.362867e-02 -2.315816e-02 -3.235754e-02 -4.115812e-02 +-2.610298e-02 -1.062496e-02 -3.304836e-03 1.604977e-03 3.419936e-03 2.717369e-03 4.242911e-03 3.088495e-03 -7.394805e-03 -7.303888e-03 +2.749801e-02 -2.946657e-03 -8.809022e-03 -1.194800e-02 -1.417420e-02 -1.322831e-02 -5.047077e-03 -5.076208e-03 -5.761935e-03 4.563902e-04 +6.879828e-03 2.098966e-02 2.833002e-02 2.718259e-02 2.172185e-02 1.030299e-02 -3.809800e-03 -1.447997e-02 -1.799337e-02 -1.271659e-02 +1.705128e+01 1.706890e+01 1.708263e+01 1.709101e+01 1.709857e+01 1.711754e+01 1.723907e+01 1.739874e+01 1.750464e+01 1.754562e+01 +1.705128e+01 1.706890e+01 1.708263e+01 1.709101e+01 1.709857e+01 1.711754e+01 1.723907e+01 1.739874e+01 1.750464e+01 1.754562e+01 +7 5 +4.661839e-02 3.555693e-02 2.559408e-02 1.568497e-02 5.836225e-03 -3.931952e-03 -1.361694e-02 -2.310830e-02 -3.228819e-02 -4.137177e-02 +-4.197569e-02 -1.191451e-02 -4.165209e-03 1.529444e-03 5.682009e-03 5.565103e-03 6.172445e-03 5.677114e-03 -4.240480e-03 -1.950658e-03 +4.106895e-02 -5.218515e-03 -1.420005e-02 -1.672273e-02 -1.309418e-02 -8.291134e-03 -5.908681e-03 -1.040173e-02 -1.801592e-02 -1.702310e-02 +2.414410e-03 4.817601e-03 9.555097e-04 -5.431701e-03 -9.652063e-03 -1.132598e-02 -1.115359e-02 -1.157487e-02 -1.239248e-02 -9.505517e-03 +1.703826e+01 1.709735e+01 1.707770e+01 1.710229e+01 1.716655e+01 1.725681e+01 1.733942e+01 1.740013e+01 1.738889e+01 1.740093e+01 +1.703826e+01 1.709735e+01 1.707770e+01 1.710229e+01 1.716655e+01 1.725681e+01 1.733942e+01 1.740013e+01 1.738889e+01 1.740093e+01 +8 5 +4.641089e-02 3.564698e-02 2.568348e-02 1.572082e-02 5.816310e-03 -3.880886e-03 -1.347110e-02 -2.295291e-02 -3.228647e-02 -4.171001e-02 +-3.963175e-02 -4.345961e-03 1.071091e-03 3.645076e-03 4.575389e-03 1.245412e-03 1.709590e-03 2.115111e-03 -2.229742e-03 3.847958e-04 +4.942124e-02 -1.034534e-02 -1.949691e-02 -1.770343e-02 -1.077542e-02 -7.264522e-03 -6.681158e-03 -1.124557e-02 -2.135154e-02 -2.850313e-02 +-6.977950e-04 -3.956783e-03 -9.029262e-03 -1.151590e-02 -9.383111e-03 -4.889591e-03 -1.355301e-03 -5.307788e-04 -1.590394e-03 -1.850074e-03 +1.703350e+01 1.710008e+01 1.710473e+01 1.716355e+01 1.724935e+01 1.729349e+01 1.734876e+01 1.737071e+01 1.728980e+01 1.724751e+01 +1.703350e+01 1.710008e+01 1.710473e+01 1.716355e+01 1.724935e+01 1.729349e+01 1.734876e+01 1.737071e+01 1.728980e+01 1.724751e+01 +9 5 +4.634126e-02 3.568106e-02 2.570165e-02 1.570549e-02 5.748528e-03 -3.787622e-03 -1.325658e-02 -2.284437e-02 -3.240846e-02 -4.226626e-02 +-2.993562e-02 4.560538e-03 6.347853e-03 4.608204e-03 -7.612512e-04 -8.349838e-03 -6.366563e-03 -1.827724e-03 -1.844732e-03 3.811365e-03 +5.412087e-02 -1.411535e-02 -2.016418e-02 -1.586758e-02 -1.303783e-02 -1.552065e-02 -1.712143e-02 -1.948333e-02 -2.890442e-02 -3.747623e-02 +-1.702144e-03 -7.176716e-03 -1.330222e-02 -1.587569e-02 -1.571898e-02 -1.525343e-02 -1.452203e-02 -1.129704e-02 -6.179356e-03 -2.321362e-03 +1.704149e+01 1.710601e+01 1.712320e+01 1.716827e+01 1.719105e+01 1.716372e+01 1.714544e+01 1.717420e+01 1.710382e+01 1.708904e+01 +1.704149e+01 1.710601e+01 1.712320e+01 1.716827e+01 1.719105e+01 1.716372e+01 1.714544e+01 1.717420e+01 1.710382e+01 1.708904e+01 +10 5 +4.589183e-02 3.539020e-02 2.562112e-02 1.572963e-02 5.952626e-03 -3.562344e-03 -1.302185e-02 -2.284270e-02 -3.269793e-02 -4.307038e-02 +-1.567894e-02 8.591692e-03 7.390871e-03 4.309215e-03 -2.954386e-03 -1.071779e-02 -9.518707e-03 -3.874794e-03 -1.104841e-03 5.738945e-03 +5.128873e-02 -1.668251e-02 -2.862815e-02 -3.075154e-02 -2.871141e-02 -3.023901e-02 -3.512524e-02 -3.984908e-02 -4.449507e-02 -5.179056e-02 +-1.300650e-03 -3.698616e-04 8.977509e-03 2.256973e-02 3.307111e-02 3.493277e-02 2.308619e-02 3.492723e-03 -1.024769e-02 -1.071181e-02 +1.707510e+01 1.722431e+01 1.724387e+01 1.726371e+01 1.728638e+01 1.716299e+01 1.690782e+01 1.676116e+01 1.667117e+01 1.665619e+01 +1.707510e+01 1.722431e+01 1.724387e+01 1.726371e+01 1.728638e+01 1.716299e+01 1.690782e+01 1.676116e+01 1.667117e+01 1.665619e+01 +1 6 +4.599193e-02 3.521566e-02 2.553202e-02 1.566237e-02 5.904651e-03 -3.461175e-03 -1.281443e-02 -2.260761e-02 -3.249699e-02 -4.307573e-02 +3.895226e-03 -3.962710e-03 -3.096074e-03 -1.938121e-03 1.063044e-03 4.715276e-03 6.529977e-03 4.268576e-03 4.100796e-04 -5.759395e-03 +-4.377608e-02 1.807833e-02 3.264913e-02 3.596910e-02 3.313408e-02 2.706650e-02 2.684629e-02 3.287536e-02 4.284635e-02 5.312133e-02 +-1.042169e-03 7.652570e-04 1.201189e-02 2.797051e-02 3.918965e-02 4.106367e-02 2.719041e-02 -2.225193e-03 -2.710100e-02 -2.595271e-02 +1.702075e+01 1.719666e+01 1.722870e+01 1.725132e+01 1.727468e+01 1.717517e+01 1.691692e+01 1.667293e+01 1.657889e+01 1.665612e+01 +1.702075e+01 1.719666e+01 1.722870e+01 1.725132e+01 1.727468e+01 1.717517e+01 1.691692e+01 1.667293e+01 1.657889e+01 1.665612e+01 +2 6 +4.642626e-02 3.559933e-02 2.567240e-02 1.565625e-02 5.647537e-03 -3.813844e-03 -1.314963e-02 -2.284912e-02 -3.255763e-02 -4.238625e-02 +1.538228e-02 -9.261367e-03 -8.213524e-03 -4.654350e-03 3.129450e-03 1.328179e-02 1.762975e-02 1.085625e-02 -3.198294e-04 -1.804174e-02 +-5.102177e-02 1.638820e-02 2.142972e-02 1.859608e-02 1.170505e-02 1.040648e-02 1.807340e-02 3.053440e-02 4.036517e-02 4.274894e-02 +-1.976553e-03 -7.225037e-03 -1.168954e-02 -1.266340e-02 -1.233697e-02 -1.406199e-02 -2.005822e-02 -2.670183e-02 -2.668695e-02 -1.682581e-02 +1.699558e+01 1.709163e+01 1.710898e+01 1.714981e+01 1.717231e+01 1.710724e+01 1.699159e+01 1.698291e+01 1.710083e+01 1.729389e+01 +1.699558e+01 1.709163e+01 1.710898e+01 1.714981e+01 1.717231e+01 1.710724e+01 1.699159e+01 1.698291e+01 1.710083e+01 1.729389e+01 +3 6 +4.652430e-02 3.565469e-02 2.574896e-02 1.576482e-02 5.826260e-03 -3.854729e-03 -1.344250e-02 -2.302071e-02 -3.244016e-02 -4.174267e-02 +2.967358e-02 -5.920365e-03 -7.823723e-03 -3.091626e-03 4.074422e-03 1.432673e-02 1.661809e-02 8.363660e-03 -3.529637e-03 -2.371020e-02 +-4.302027e-02 1.076474e-02 1.618661e-02 1.435552e-02 5.708135e-03 6.563883e-03 1.311221e-02 2.124343e-02 2.856623e-02 3.201679e-02 +-1.328979e-03 -6.039354e-03 -1.233123e-02 -1.640651e-02 -1.871637e-02 -2.115765e-02 -2.182411e-02 -1.862774e-02 -1.381885e-02 -8.300781e-03 +1.699599e+01 1.708622e+01 1.711516e+01 1.718217e+01 1.722338e+01 1.721836e+01 1.723595e+01 1.728948e+01 1.733955e+01 1.746586e+01 +1.699599e+01 1.708622e+01 1.711516e+01 1.718217e+01 1.722338e+01 1.721836e+01 1.723595e+01 1.728948e+01 1.733955e+01 1.746586e+01 +4 6 +4.667784e-02 3.555706e-02 2.576216e-02 1.581002e-02 5.889338e-03 -3.912912e-03 -1.361705e-02 -2.317055e-02 -3.244893e-02 -4.135910e-02 +4.012285e-02 3.080443e-03 -1.355256e-03 1.151142e-03 3.475022e-03 7.867528e-03 5.727076e-03 -5.215891e-04 -5.895904e-03 -1.910147e-02 +-2.740290e-02 6.566147e-03 1.291393e-02 9.280711e-03 4.771977e-03 2.867957e-03 5.714462e-03 1.219690e-02 1.886341e-02 1.965133e-02 +1.849419e-03 2.347923e-03 -4.842213e-03 -1.348043e-02 -1.643784e-02 -1.671726e-02 -1.726526e-02 -1.811544e-02 -1.757999e-02 -1.192727e-02 +1.700476e+01 1.707664e+01 1.709837e+01 1.716126e+01 1.720876e+01 1.725432e+01 1.731646e+01 1.739371e+01 1.749557e+01 1.756203e+01 +1.700476e+01 1.707664e+01 1.709837e+01 1.716126e+01 1.720876e+01 1.725432e+01 1.731646e+01 1.739371e+01 1.749557e+01 1.756203e+01 +5 6 +4.706968e-02 3.584529e-02 2.567370e-02 1.582398e-02 5.962106e-03 -3.835956e-03 -1.360066e-02 -2.318697e-02 -3.254993e-02 -4.128028e-02 +4.317043e-02 1.104311e-02 5.903475e-03 4.201421e-03 2.324574e-03 9.325759e-04 6.693693e-04 -2.634171e-03 -5.656191e-03 -1.108660e-02 +-1.113937e-02 3.004867e-03 5.579186e-03 4.450487e-03 2.616026e-03 2.488929e-03 4.342778e-03 8.235729e-03 2.641894e-03 1.009628e-03 +6.849017e-03 1.994679e-02 2.395010e-02 1.877680e-02 1.408228e-02 1.185125e-02 7.465720e-03 -4.595486e-03 -1.425592e-02 -1.049287e-02 +1.702267e+01 1.705030e+01 1.708092e+01 1.710689e+01 1.712473e+01 1.712843e+01 1.714525e+01 1.732729e+01 1.755691e+01 1.760484e+01 +1.702267e+01 1.705030e+01 1.708092e+01 1.710689e+01 1.712473e+01 1.712843e+01 1.714525e+01 1.732729e+01 1.755691e+01 1.760484e+01 +6 6 +4.751886e-02 3.686010e-02 2.586155e-02 1.593588e-02 6.129637e-03 -3.572272e-03 -1.366196e-02 -2.327693e-02 -3.248346e-02 -4.138274e-02 +2.713948e-02 1.038431e-02 6.387704e-03 4.536012e-03 3.303249e-03 9.455119e-04 3.300581e-03 1.282928e-03 -5.163535e-03 -5.498258e-03 +9.688194e-03 -2.367735e-03 -4.823177e-03 -6.433360e-03 -6.689863e-03 -4.695466e-03 3.193718e-03 1.129070e-04 -1.303748e-02 -1.812328e-02 +1.994327e-02 6.136690e-02 8.222123e-02 7.555590e-02 5.934241e-02 3.257681e-02 3.308104e-03 -1.104378e-02 -1.170735e-02 -7.871413e-03 +1.711751e+01 1.711278e+01 1.711141e+01 1.710901e+01 1.710643e+01 1.711295e+01 1.727214e+01 1.741234e+01 1.746915e+01 1.752665e+01 +1.711751e+01 1.711278e+01 1.711141e+01 1.710901e+01 1.710643e+01 1.711295e+01 1.727214e+01 1.741234e+01 1.746915e+01 1.752665e+01 +7 6 +4.720750e-02 3.630318e-02 2.587205e-02 1.590712e-02 5.942377e-03 -3.906636e-03 -1.365655e-02 -2.312901e-02 -3.239316e-02 -4.160493e-02 +-3.039228e-03 2.213052e-03 2.415487e-03 3.761066e-03 7.065208e-03 7.062341e-03 3.995018e-03 7.927593e-04 -5.784791e-03 -5.379323e-03 +2.422793e-02 -6.271248e-03 -1.227609e-02 -1.404270e-02 -8.392881e-03 -1.819611e-03 -1.314411e-04 -7.008272e-03 -1.897996e-02 -3.134531e-02 +1.163213e-02 3.365575e-02 3.829032e-02 2.383520e-02 7.675711e-03 -3.916720e-03 -7.801189e-03 -5.918484e-03 -4.418963e-03 -3.753670e-03 +1.708518e+01 1.707281e+01 1.706459e+01 1.707148e+01 1.711750e+01 1.722721e+01 1.734981e+01 1.738869e+01 1.736418e+01 1.738211e+01 +1.708518e+01 1.707281e+01 1.706459e+01 1.707148e+01 1.711750e+01 1.722721e+01 1.734981e+01 1.738869e+01 1.736418e+01 1.738211e+01 +8 6 +4.673229e-02 3.585619e-02 2.589684e-02 1.591793e-02 5.866559e-03 -3.935864e-03 -1.350413e-02 -2.294929e-02 -3.233750e-02 -4.192509e-02 +-1.867077e-02 7.614356e-04 4.266325e-03 5.574141e-03 7.446028e-03 5.281764e-03 -1.706918e-03 -3.517735e-03 -7.496239e-03 -6.415092e-03 +4.053787e-02 -1.082727e-02 -1.818430e-02 -1.650686e-02 -6.662957e-03 -3.387351e-04 -2.658366e-04 -6.615098e-03 -2.079689e-02 -3.830808e-02 +4.646542e-03 1.224954e-02 1.049202e-02 8.313085e-04 -5.282840e-03 -4.890665e-03 -2.074909e-03 -8.484961e-04 -8.553499e-04 -3.720217e-04 +1.706857e+01 1.707144e+01 1.706632e+01 1.710461e+01 1.721469e+01 1.728956e+01 1.731143e+01 1.732286e+01 1.723953e+01 1.722627e+01 +1.706857e+01 1.707144e+01 1.706632e+01 1.710461e+01 1.721469e+01 1.728956e+01 1.731143e+01 1.732286e+01 1.723953e+01 1.722627e+01 +9 6 +4.648275e-02 3.584847e-02 2.593345e-02 1.590142e-02 5.801432e-03 -4.003059e-03 -1.342616e-02 -2.286190e-02 -3.242460e-02 -4.240074e-02 +-1.674794e-02 4.725013e-03 8.819244e-03 8.218889e-03 4.120164e-03 -2.529861e-03 -8.788369e-03 -8.168906e-03 -1.039406e-02 -5.203304e-03 +4.476240e-02 -1.861519e-02 -2.231117e-02 -1.700114e-02 -9.993859e-03 -9.708002e-03 -1.306229e-02 -1.884720e-02 -3.136585e-02 -4.607974e-02 +1.732751e-03 3.483596e-03 6.115820e-04 -4.293231e-03 -8.083561e-03 -1.017381e-02 -9.428543e-03 -6.473779e-03 -2.507989e-03 -2.069340e-05 +1.708364e+01 1.708569e+01 1.708164e+01 1.712078e+01 1.717788e+01 1.717605e+01 1.713749e+01 1.710759e+01 1.703779e+01 1.703924e+01 +1.708364e+01 1.708569e+01 1.708164e+01 1.712078e+01 1.717788e+01 1.717605e+01 1.713749e+01 1.710759e+01 1.703779e+01 1.703924e+01 +10 6 +4.621984e-02 3.574796e-02 2.587800e-02 1.590485e-02 5.905615e-03 -3.735614e-03 -1.319128e-02 -2.275832e-02 -3.252091e-02 -4.290652e-02 +-9.274861e-03 5.154212e-03 7.841778e-03 7.005028e-03 2.329888e-03 -4.629959e-03 -9.475351e-03 -9.293285e-03 -9.544554e-03 -2.896460e-03 +3.915055e-02 -1.965966e-02 -3.126894e-02 -3.381698e-02 -3.131440e-02 -2.911035e-02 -2.985876e-02 -3.607494e-02 -4.478856e-02 -5.653478e-02 +3.144861e-03 1.245150e-02 2.504375e-02 3.760502e-02 4.786155e-02 5.262061e-02 5.018002e-02 4.065912e-02 2.543425e-02 1.017752e-02 +1.713891e+01 1.721678e+01 1.724640e+01 1.726100e+01 1.727831e+01 1.720750e+01 1.708195e+01 1.694744e+01 1.679957e+01 1.667833e+01 +1.713891e+01 1.721678e+01 1.724640e+01 1.726100e+01 1.727831e+01 1.720750e+01 1.708195e+01 1.694744e+01 1.679957e+01 1.667833e+01 +1 7 +4.645938e-02 3.539083e-02 2.550389e-02 1.564890e-02 6.076353e-03 -3.054881e-03 -1.301268e-02 -2.289036e-02 -3.214953e-02 -4.269502e-02 +6.122772e-03 -4.033865e-03 -2.766637e-03 7.903396e-05 4.286092e-03 6.650345e-03 4.182032e-03 6.458035e-04 -2.967189e-03 -8.840161e-03 +-5.851798e-02 1.171659e-02 2.775592e-02 3.218781e-02 3.091990e-02 2.818781e-02 3.471453e-02 3.933475e-02 4.107157e-02 4.288749e-02 +-5.464037e-03 -9.846729e-03 1.325507e-03 1.649080e-02 1.782751e-02 -4.164235e-03 -4.232614e-02 -6.895743e-02 -7.001004e-02 -4.551749e-02 +1.697105e+01 1.723552e+01 1.724414e+01 1.726701e+01 1.726074e+01 1.683627e+01 1.658564e+01 1.656443e+01 1.667108e+01 1.679795e+01 +1.697105e+01 1.723552e+01 1.724414e+01 1.726701e+01 1.726074e+01 1.683627e+01 1.658564e+01 1.656443e+01 1.667108e+01 1.679795e+01 +2 7 +4.698661e-02 3.574405e-02 2.565922e-02 1.560845e-02 5.909945e-03 -3.597656e-03 -1.345134e-02 -2.322507e-02 -3.268101e-02 -4.210862e-02 +2.306123e-02 -8.539064e-03 -6.222340e-03 8.714561e-04 1.172435e-02 1.755905e-02 1.057531e-02 7.235424e-04 -9.282290e-03 -2.481136e-02 +-5.991215e-02 1.214488e-02 1.988688e-02 1.768190e-02 1.552679e-02 2.074566e-02 2.979115e-02 3.640797e-02 3.745784e-02 2.670299e-02 +-4.716838e-03 -1.375583e-02 -1.838240e-02 -2.022054e-02 -2.485366e-02 -3.204073e-02 -3.753673e-02 -3.658812e-02 -2.974106e-02 -1.766428e-02 +1.695947e+01 1.713977e+01 1.714365e+01 1.714426e+01 1.710217e+01 1.699162e+01 1.700525e+01 1.712686e+01 1.726645e+01 1.746122e+01 +1.695947e+01 1.713977e+01 1.714365e+01 1.714426e+01 1.710217e+01 1.699162e+01 1.700525e+01 1.712686e+01 1.726645e+01 1.746122e+01 +3 7 +4.673789e-02 3.576011e-02 2.571145e-02 1.574073e-02 5.925153e-03 -3.844328e-03 -1.362675e-02 -2.324868e-02 -3.262529e-02 -4.165533e-02 +4.194094e-02 -3.393702e-03 -3.923610e-03 2.151134e-03 1.218209e-02 1.720701e-02 9.074143e-03 -1.202435e-03 -1.139317e-02 -2.700051e-02 +-5.242096e-02 1.072506e-02 1.786445e-02 1.380510e-02 9.806802e-03 1.454573e-02 2.084276e-02 2.590442e-02 2.682287e-02 1.579548e-02 +-3.926371e-03 -1.188201e-02 -1.650808e-02 -1.768726e-02 -1.863040e-02 -1.890581e-02 -1.742169e-02 -1.487455e-02 -1.338179e-02 -9.659656e-03 +1.697491e+01 1.713857e+01 1.716148e+01 1.720382e+01 1.721119e+01 1.721929e+01 1.728828e+01 1.735472e+01 1.743717e+01 1.759433e+01 +1.697491e+01 1.713857e+01 1.716148e+01 1.720382e+01 1.721119e+01 1.721929e+01 1.728828e+01 1.735472e+01 1.743717e+01 1.759433e+01 +4 7 +4.650015e-02 3.562225e-02 2.566180e-02 1.574124e-02 5.887221e-03 -3.951010e-03 -1.371669e-02 -2.334776e-02 -3.266495e-02 -4.146571e-02 +5.526454e-02 5.696374e-03 1.336935e-03 1.781157e-03 6.027914e-03 8.939782e-03 2.965958e-03 -2.651339e-03 -6.980511e-03 -1.622033e-02 +-4.283635e-02 8.519487e-03 1.770767e-02 1.069125e-02 7.322122e-03 8.971288e-03 1.260126e-02 1.747346e-02 1.359729e-02 1.786431e-03 +-2.617313e-03 -8.598406e-03 -1.366233e-02 -1.547419e-02 -1.377937e-02 -1.068259e-02 -9.206458e-03 -9.235204e-03 -8.412211e-03 -4.974679e-03 +1.699514e+01 1.712753e+01 1.713997e+01 1.718355e+01 1.722211e+01 1.727352e+01 1.734559e+01 1.742628e+01 1.754364e+01 1.765301e+01 +1.699514e+01 1.712753e+01 1.713997e+01 1.718355e+01 1.722211e+01 1.727352e+01 1.734559e+01 1.742628e+01 1.754364e+01 1.765301e+01 +5 7 +4.652371e-02 3.546608e-02 2.554757e-02 1.573461e-02 5.882584e-03 -3.973409e-03 -1.375595e-02 -2.343091e-02 -3.269620e-02 -4.145759e-02 +6.261054e-02 1.224284e-02 5.710832e-03 3.756606e-04 -2.253640e-04 2.506956e-03 1.179828e-03 -1.895959e-03 -3.619275e-03 -7.566327e-03 +-2.801595e-02 5.645463e-03 1.256887e-02 1.074005e-02 8.360071e-03 9.537691e-03 1.261129e-02 1.564891e-02 -5.608801e-03 -1.523452e-02 +1.235682e-04 -9.174112e-04 -3.365800e-03 -4.945882e-03 -5.529359e-03 -5.022588e-03 -5.436727e-03 -8.953318e-03 -9.980475e-03 -5.723956e-03 +1.700936e+01 1.712315e+01 1.712256e+01 1.712356e+01 1.713851e+01 1.716664e+01 1.722841e+01 1.738953e+01 1.752959e+01 1.762925e+01 +1.700936e+01 1.712315e+01 1.712256e+01 1.712356e+01 1.713851e+01 1.716664e+01 1.722841e+01 1.738953e+01 1.752959e+01 1.762925e+01 +6 7 +4.683945e-02 3.566463e-02 2.554601e-02 1.579374e-02 5.946886e-03 -3.934085e-03 -1.379960e-02 -2.334363e-02 -3.256935e-02 -4.153742e-02 +6.340564e-02 1.919321e-02 8.615238e-03 -5.043303e-06 -2.230638e-03 1.048848e-03 2.380369e-03 -1.644988e-03 -4.228260e-03 -5.333430e-03 +-1.032464e-02 2.171394e-03 4.990487e-03 4.939525e-03 5.511785e-03 8.382781e-03 9.414502e-03 2.493479e-03 -1.470069e-02 -2.868605e-02 +4.010037e-03 1.201880e-02 1.643502e-02 1.689951e-02 1.340088e-02 3.278063e-03 -5.919334e-03 -5.872965e-03 -3.069665e-03 -3.068040e-03 +1.702599e+01 1.707800e+01 1.709934e+01 1.709919e+01 1.710625e+01 1.717242e+01 1.732152e+01 1.741838e+01 1.745232e+01 1.754938e+01 +1.702599e+01 1.707800e+01 1.709934e+01 1.709919e+01 1.710625e+01 1.717242e+01 1.732152e+01 1.741838e+01 1.745232e+01 1.754938e+01 +7 7 +4.728015e-02 3.632695e-02 2.588874e-02 1.600742e-02 5.920262e-03 -4.038605e-03 -1.372088e-02 -2.316050e-02 -3.248986e-02 -4.170915e-02 +5.120704e-02 2.263230e-02 9.279682e-03 9.036596e-04 1.549806e-03 3.250716e-03 4.600279e-04 -4.613420e-03 -5.455403e-03 -7.400652e-03 +-8.251802e-05 -4.362633e-03 -4.017681e-03 -4.371934e-03 5.361043e-04 5.987963e-03 4.522231e-03 -3.263655e-03 -1.632926e-02 -3.612576e-02 +9.367113e-03 2.783771e-02 3.338608e-02 2.159669e-02 4.579333e-03 -6.877185e-03 -7.317506e-03 -4.272804e-03 -3.591919e-03 -2.730030e-03 +1.705228e+01 1.705583e+01 1.706537e+01 1.707013e+01 1.713911e+01 1.726934e+01 1.734813e+01 1.735250e+01 1.737210e+01 1.741382e+01 +1.705228e+01 1.705583e+01 1.706537e+01 1.707013e+01 1.713911e+01 1.726934e+01 1.734813e+01 1.735250e+01 1.737210e+01 1.741382e+01 +8 7 +4.733235e-02 3.668237e-02 2.621211e-02 1.615281e-02 5.868429e-03 -4.030159e-03 -1.361691e-02 -2.304604e-02 -3.245341e-02 -4.197671e-02 +2.510502e-02 1.828931e-02 9.764160e-03 4.558828e-03 4.276543e-03 2.041327e-03 -3.978694e-03 -7.938534e-03 -9.052557e-03 -9.828966e-03 +2.237540e-02 -6.046209e-03 -1.023841e-02 -9.264793e-03 -1.015511e-03 5.637410e-03 5.150171e-03 -2.887495e-03 -1.948876e-02 -4.113662e-02 +1.236060e-02 3.579025e-02 4.018486e-02 2.190944e-02 3.915880e-03 -2.873958e-03 -4.092709e-03 -5.817010e-03 -5.193349e-03 -1.834865e-03 +1.711092e+01 1.709034e+01 1.707478e+01 1.707273e+01 1.719946e+01 1.727505e+01 1.727827e+01 1.725138e+01 1.723527e+01 1.725071e+01 +1.711092e+01 1.709034e+01 1.707478e+01 1.707273e+01 1.719946e+01 1.727505e+01 1.727827e+01 1.725138e+01 1.723527e+01 1.725071e+01 +9 7 +4.698365e-02 3.653175e-02 2.628117e-02 1.612608e-02 5.876344e-03 -4.074422e-03 -1.363363e-02 -2.298460e-02 -3.240742e-02 -4.224935e-02 +4.349639e-03 1.086885e-02 1.009285e-02 8.626042e-03 3.547701e-03 -7.728174e-04 -7.112587e-03 -1.075924e-02 -1.507224e-02 -1.070257e-02 +2.727173e-02 -1.571473e-02 -1.823504e-02 -1.395153e-02 -8.148676e-03 -7.167672e-03 -9.826648e-03 -1.725787e-02 -3.096122e-02 -4.752178e-02 +6.632677e-03 1.985720e-02 2.400018e-02 1.641345e-02 6.153819e-03 -1.384356e-03 -2.783117e-03 8.501196e-04 4.793339e-03 4.467801e-03 +1.713335e+01 1.710521e+01 1.708417e+01 1.708343e+01 1.716242e+01 1.717869e+01 1.716574e+01 1.713457e+01 1.706535e+01 1.704784e+01 +1.713335e+01 1.710521e+01 1.708417e+01 1.708343e+01 1.716242e+01 1.717869e+01 1.716574e+01 1.713457e+01 1.706535e+01 1.704784e+01 +10 7 +4.686265e-02 3.676150e-02 2.634769e-02 1.614094e-02 5.985684e-03 -3.799480e-03 -1.330171e-02 -2.271393e-02 -3.227513e-02 -4.248612e-02 +-8.002226e-04 4.378692e-03 6.788021e-03 7.157622e-03 2.869072e-03 -1.319607e-03 -6.797883e-03 -1.042133e-02 -1.379580e-02 -7.812813e-03 +1.615268e-02 -2.382700e-02 -3.352503e-02 -3.495886e-02 -3.391920e-02 -3.189133e-02 -3.023646e-02 -3.364726e-02 -4.151421e-02 -5.386190e-02 +9.371668e-03 3.136015e-02 4.934284e-02 5.856453e-02 6.503084e-02 6.786187e-02 6.502334e-02 5.539517e-02 3.888904e-02 1.882788e-02 +1.725764e+01 1.726943e+01 1.727443e+01 1.727646e+01 1.728548e+01 1.722918e+01 1.712885e+01 1.701494e+01 1.687205e+01 1.672097e+01 +1.725764e+01 1.726943e+01 1.727443e+01 1.727646e+01 1.728548e+01 1.722918e+01 1.712885e+01 1.701494e+01 1.687205e+01 1.672097e+01 +1 8 +4.857389e-02 3.610103e-02 2.571045e-02 1.596569e-02 6.233404e-03 -3.633812e-03 -1.348166e-02 -2.310401e-02 -3.207010e-02 -4.244492e-02 +9.399735e-03 1.432262e-03 1.563022e-03 3.776138e-03 4.546893e-03 3.115122e-03 8.380172e-04 -1.257234e-03 -2.986117e-03 -8.417380e-03 +-5.892961e-02 4.698379e-03 2.458589e-02 2.997211e-02 3.323381e-02 3.681760e-02 4.002663e-02 3.752803e-02 3.193610e-02 2.556664e-02 +-1.315750e-02 -3.883808e-02 -5.208654e-02 -6.006589e-02 -7.977686e-02 -1.001947e-01 -1.070472e-01 -9.869439e-02 -8.007719e-02 -4.821062e-02 +1.690829e+01 1.702532e+01 1.703481e+01 1.691293e+01 1.668861e+01 1.656748e+01 1.661058e+01 1.674060e+01 1.688471e+01 1.703477e+01 +1.690829e+01 1.702532e+01 1.703481e+01 1.691293e+01 1.668861e+01 1.656748e+01 1.661058e+01 1.674060e+01 1.688471e+01 1.703477e+01 +2 8 +4.864691e-02 3.626276e-02 2.584089e-02 1.590803e-02 6.004600e-03 -3.959727e-03 -1.382299e-02 -2.345587e-02 -3.295532e-02 -4.214250e-02 +3.366770e-02 6.688944e-03 4.876194e-03 1.013106e-02 1.190265e-02 7.940580e-03 1.438832e-03 -4.267457e-03 -9.603248e-03 -2.298289e-02 +-5.780936e-02 9.381319e-04 1.686505e-02 1.929134e-02 2.394665e-02 3.116398e-02 3.529879e-02 3.529012e-02 3.002788e-02 5.112752e-03 +-9.243571e-03 -2.816283e-02 -3.937195e-02 -4.329549e-02 -4.679083e-02 -4.560469e-02 -3.822032e-02 -2.788556e-02 -1.772132e-02 -8.266232e-03 +1.692193e+01 1.706277e+01 1.708812e+01 1.704622e+01 1.701457e+01 1.705234e+01 1.716803e+01 1.727044e+01 1.740155e+01 1.765865e+01 +1.692193e+01 1.706277e+01 1.708812e+01 1.704622e+01 1.701457e+01 1.705234e+01 1.716803e+01 1.727044e+01 1.740155e+01 1.765865e+01 +3 8 +4.752367e-02 3.601423e-02 2.575762e-02 1.581606e-02 5.924744e-03 -3.981815e-03 -1.378865e-02 -2.341373e-02 -3.286051e-02 -4.182049e-02 +5.726729e-02 1.379884e-02 6.044249e-03 9.394403e-03 1.122749e-02 7.958017e-03 7.174563e-04 -5.498974e-03 -1.232613e-02 -2.412739e-02 +-4.981557e-02 4.062056e-03 1.682737e-02 1.444031e-02 1.497332e-02 2.013718e-02 2.366939e-02 2.609400e-02 2.075846e-02 -3.720606e-03 +-6.433115e-03 -1.743241e-02 -1.963964e-02 -1.587009e-02 -1.246044e-02 -8.562008e-03 -5.322326e-03 -3.203951e-03 -1.601529e-03 -2.990758e-04 +1.695734e+01 1.712693e+01 1.718031e+01 1.720643e+01 1.722228e+01 1.725973e+01 1.734002e+01 1.738886e+01 1.747080e+01 1.765159e+01 +1.695734e+01 1.712693e+01 1.718031e+01 1.720643e+01 1.722228e+01 1.725973e+01 1.734002e+01 1.738886e+01 1.747080e+01 1.765159e+01 +4 8 +4.678822e-02 3.575558e-02 2.565214e-02 1.574472e-02 5.850675e-03 -4.022913e-03 -1.379790e-02 -2.341403e-02 -3.276087e-02 -4.162961e-02 +7.102743e-02 1.893767e-02 4.957088e-03 2.198058e-03 4.093320e-03 5.105475e-03 7.083891e-04 -3.473431e-03 -8.196596e-03 -1.399904e-02 +-4.140157e-02 5.577474e-03 1.718456e-02 1.096550e-02 1.011832e-02 1.288603e-02 1.559554e-02 1.744123e-02 6.440217e-03 -1.357944e-02 +-4.341825e-03 -1.146596e-02 -1.333422e-02 -1.209064e-02 -9.272206e-03 -4.255109e-03 -8.688078e-06 3.337764e-03 4.744476e-03 2.819334e-03 +1.699240e+01 1.714442e+01 1.716582e+01 1.718766e+01 1.722598e+01 1.728274e+01 1.735390e+01 1.741934e+01 1.748485e+01 1.763985e+01 +1.699240e+01 1.714442e+01 1.716582e+01 1.718766e+01 1.722598e+01 1.728274e+01 1.735390e+01 1.741934e+01 1.748485e+01 1.763985e+01 +5 8 +4.640590e-02 3.553708e-02 2.554580e-02 1.571386e-02 5.797279e-03 -4.065987e-03 -1.382685e-02 -2.345401e-02 -3.273920e-02 -4.158361e-02 +7.839454e-02 2.180811e-02 4.193705e-03 -3.602736e-03 -2.016441e-03 2.405677e-03 1.670805e-03 -1.711947e-03 -3.048427e-03 -6.208979e-03 +-3.208654e-02 2.843864e-03 1.349885e-02 1.220841e-02 1.071801e-02 1.192978e-02 1.533154e-02 1.407502e-02 -7.684572e-03 -2.426952e-02 +-2.546964e-03 -6.396517e-03 -7.188947e-03 -8.072093e-03 -9.619356e-03 -8.329674e-03 -5.820384e-03 -2.741971e-03 -4.698729e-04 -9.710492e-04 +1.701963e+01 1.714672e+01 1.715209e+01 1.713625e+01 1.717498e+01 1.722269e+01 1.729012e+01 1.739552e+01 1.746272e+01 1.763515e+01 +1.701963e+01 1.714672e+01 1.715209e+01 1.713625e+01 1.717498e+01 1.722269e+01 1.729012e+01 1.739552e+01 1.746272e+01 1.763515e+01 +6 8 +4.640487e-02 3.549266e-02 2.549097e-02 1.572208e-02 5.776472e-03 -4.102585e-03 -1.384182e-02 -2.335322e-02 -3.264656e-02 -4.157155e-02 +8.056245e-02 2.304375e-02 2.983964e-03 -5.696053e-03 -4.084276e-03 9.572679e-04 1.659500e-03 -2.750096e-03 -4.768048e-04 -4.030495e-03 +-2.032840e-02 1.089265e-03 1.061894e-02 1.238692e-02 1.273797e-02 1.445960e-02 1.066594e-02 2.160548e-03 -1.138546e-02 -3.207815e-02 +-3.592546e-04 -4.582581e-04 -4.087516e-04 -2.385537e-03 -5.661928e-03 -7.645755e-03 -6.465182e-03 -2.320097e-03 -2.162078e-04 -1.115122e-03 +1.703743e+01 1.713484e+01 1.712428e+01 1.710225e+01 1.716007e+01 1.724313e+01 1.734376e+01 1.739604e+01 1.745325e+01 1.758407e+01 +1.703743e+01 1.713484e+01 1.712428e+01 1.710225e+01 1.716007e+01 1.724313e+01 1.734376e+01 1.739604e+01 1.745325e+01 1.758407e+01 +7 8 +4.672547e-02 3.582578e-02 2.564698e-02 1.582200e-02 5.763365e-03 -4.124129e-03 -1.377758e-02 -2.324489e-02 -3.260072e-02 -4.166233e-02 +7.776750e-02 2.507164e-02 3.124525e-03 -4.755982e-03 -2.165110e-03 6.961024e-04 -8.784014e-04 -5.181422e-03 -1.027464e-03 -6.356769e-03 +-1.095077e-02 -1.171093e-03 5.883698e-03 7.630276e-03 8.394010e-03 1.010757e-02 7.478273e-03 7.800460e-04 -1.313218e-02 -3.700850e-02 +2.192240e-03 7.039142e-03 8.294082e-03 2.421133e-03 -5.285056e-03 -8.045698e-03 -5.930078e-03 -4.540747e-03 -4.541807e-03 -2.688688e-03 +1.705045e+01 1.709711e+01 1.708605e+01 1.707857e+01 1.718317e+01 1.727956e+01 1.733112e+01 1.733806e+01 1.740411e+01 1.746445e+01 +1.705045e+01 1.709711e+01 1.708605e+01 1.707857e+01 1.718317e+01 1.727956e+01 1.733112e+01 1.733806e+01 1.740411e+01 1.746445e+01 +8 8 +4.709867e-02 3.639630e-02 2.597897e-02 1.597712e-02 5.781801e-03 -4.101897e-03 -1.373682e-02 -2.319843e-02 -3.255044e-02 -4.183639e-02 +6.908192e-02 2.864583e-02 7.336866e-03 -3.936999e-04 -3.973549e-05 -4.023043e-04 -2.982512e-03 -7.123919e-03 -6.698475e-03 -9.915806e-03 +3.550596e-03 -1.022976e-03 1.331788e-03 3.026168e-03 4.063279e-03 8.599410e-03 8.080767e-03 -5.637547e-04 -1.754748e-02 -4.013262e-02 +5.006143e-03 1.600738e-02 2.079411e-02 1.343060e-02 3.271184e-03 -1.270434e-03 -3.287275e-03 -5.681577e-03 -4.512197e-03 -8.157947e-04 +1.706253e+01 1.707093e+01 1.707231e+01 1.707485e+01 1.719254e+01 1.725967e+01 1.727232e+01 1.726046e+01 1.728690e+01 1.730809e+01 +1.706253e+01 1.707093e+01 1.707231e+01 1.707485e+01 1.719254e+01 1.725967e+01 1.727232e+01 1.726046e+01 1.728690e+01 1.730809e+01 +9 8 +4.736142e-02 3.697733e-02 2.632033e-02 1.608238e-02 5.876611e-03 -4.097298e-03 -1.374748e-02 -2.309579e-02 -3.235404e-02 -4.193284e-02 +5.249294e-02 2.730890e-02 1.149531e-02 5.319748e-03 1.721877e-03 -7.840934e-04 -3.883912e-03 -1.018281e-02 -1.479295e-02 -1.170913e-02 +7.719570e-03 -8.512234e-03 -8.043504e-03 -4.819605e-03 -3.711198e-03 -5.210566e-03 -8.302756e-03 -1.519121e-02 -2.734262e-02 -4.389017e-02 +7.962583e-03 2.534149e-02 3.453256e-02 3.001588e-02 2.024330e-02 1.081339e-02 6.852120e-03 8.707588e-03 1.061639e-02 7.613164e-03 +1.709933e+01 1.709202e+01 1.708936e+01 1.708508e+01 1.711586e+01 1.716317e+01 1.719056e+01 1.717449e+01 1.712369e+01 1.710329e+01 +1.709933e+01 1.709202e+01 1.708936e+01 1.708508e+01 1.711586e+01 1.716317e+01 1.719056e+01 1.717449e+01 1.712369e+01 1.710329e+01 +10 8 +4.742497e-02 3.760076e-02 2.670699e-02 1.626616e-02 6.060587e-03 -3.780088e-03 -1.330071e-02 -2.263415e-02 -3.201395e-02 -4.201706e-02 +2.829938e-02 1.654589e-02 9.119393e-03 6.011185e-03 2.736942e-03 -3.173222e-04 -4.394945e-03 -1.008375e-02 -1.417169e-02 -8.552916e-03 +-1.166386e-02 -2.974821e-02 -3.402855e-02 -3.361114e-02 -3.277863e-02 -3.211701e-02 -3.141639e-02 -3.242999e-02 -3.699495e-02 -4.685491e-02 +1.061103e-02 3.612031e-02 5.749583e-02 6.766368e-02 7.353704e-02 7.569732e-02 7.239631e-02 6.190973e-02 4.362974e-02 2.119950e-02 +1.727865e+01 1.727246e+01 1.727572e+01 1.728196e+01 1.729190e+01 1.724238e+01 1.715169e+01 1.704715e+01 1.691088e+01 1.675398e+01 +1.727865e+01 1.727246e+01 1.727572e+01 1.728196e+01 1.729190e+01 1.724238e+01 1.715169e+01 1.704715e+01 1.691088e+01 1.675398e+01 +1 9 +5.167713e-02 3.835345e-02 2.663377e-02 1.627535e-02 6.253374e-03 -3.708740e-03 -1.360985e-02 -2.325217e-02 -3.246017e-02 -4.242882e-02 +1.222298e-02 6.315922e-03 4.440593e-03 3.574808e-03 2.511212e-03 1.145447e-03 -3.910550e-04 -1.525577e-03 -2.692084e-03 -7.613248e-03 +-4.139632e-02 -7.716103e-04 2.104920e-02 2.909858e-02 3.354157e-02 3.501090e-02 3.185602e-02 2.613474e-02 1.889304e-02 6.678720e-03 +-2.290155e-02 -7.619773e-02 -1.161766e-01 -1.279262e-01 -1.279713e-01 -1.200887e-01 -1.061412e-01 -8.821488e-02 -6.740937e-02 -3.928853e-02 +1.688822e+01 1.674649e+01 1.673774e+01 1.670272e+01 1.670454e+01 1.672790e+01 1.681441e+01 1.693738e+01 1.706560e+01 1.720016e+01 +1.688822e+01 1.674649e+01 1.673774e+01 1.670272e+01 1.670454e+01 1.672790e+01 1.681441e+01 1.693738e+01 1.706560e+01 1.720016e+01 +2 9 +5.102523e-02 3.778040e-02 2.626894e-02 1.599390e-02 5.948289e-03 -4.036161e-03 -1.382893e-02 -2.346660e-02 -3.301852e-02 -4.218131e-02 +4.299443e-02 2.226938e-02 1.346510e-02 9.938376e-03 6.625941e-03 2.583065e-03 -1.504312e-03 -4.694838e-03 -8.709078e-03 -2.101854e-02 +-4.166517e-02 -6.740256e-03 1.492701e-02 2.210064e-02 2.746330e-02 3.080321e-02 3.070283e-02 2.918096e-02 2.212910e-02 -9.836498e-03 +-1.489995e-02 -4.822506e-02 -6.793530e-02 -6.383421e-02 -5.140374e-02 -3.643489e-02 -2.181281e-02 -1.045550e-02 -1.470488e-03 3.309418e-03 +1.692392e+01 1.690165e+01 1.698853e+01 1.703528e+01 1.709535e+01 1.718688e+01 1.727933e+01 1.733363e+01 1.741011e+01 1.760679e+01 +1.692392e+01 1.690165e+01 1.698853e+01 1.703528e+01 1.709535e+01 1.718688e+01 1.727933e+01 1.733363e+01 1.741011e+01 1.760679e+01 +3 9 +4.872789e-02 3.663742e-02 2.581694e-02 1.580156e-02 5.879598e-03 -4.014275e-03 -1.377958e-02 -2.338936e-02 -3.283611e-02 -4.179524e-02 +7.111366e-02 3.577364e-02 1.617917e-02 9.395304e-03 6.026815e-03 2.564626e-03 -1.312143e-03 -4.978127e-03 -1.076376e-02 -2.214420e-02 +-3.678045e-02 -4.430576e-03 1.470168e-02 1.609295e-02 1.717420e-02 1.933594e-02 2.040106e-02 2.144147e-02 1.323149e-02 -1.539516e-02 +-9.389555e-03 -2.769841e-02 -3.187615e-02 -1.941929e-02 -6.004297e-03 3.010116e-03 7.887858e-03 1.062678e-02 1.201363e-02 8.938027e-03 +1.697136e+01 1.702673e+01 1.716308e+01 1.721840e+01 1.725058e+01 1.729232e+01 1.734686e+01 1.738918e+01 1.743485e+01 1.760317e+01 +1.697136e+01 1.702673e+01 1.716308e+01 1.721840e+01 1.725058e+01 1.729232e+01 1.734686e+01 1.738918e+01 1.743485e+01 1.760317e+01 +4 9 +4.730532e-02 3.600194e-02 2.562453e-02 1.573870e-02 5.825660e-03 -4.040618e-03 -1.377545e-02 -2.335642e-02 -3.271085e-02 -4.155832e-02 +8.546982e-02 4.046771e-02 1.174746e-02 2.028842e-03 1.099602e-03 2.295449e-03 8.739357e-04 -1.590072e-03 -5.693006e-03 -1.222469e-02 +-3.106300e-02 -1.516569e-03 1.603912e-02 1.273675e-02 1.162339e-02 1.275057e-02 1.377880e-02 1.312141e-02 2.201025e-03 -2.097119e-02 +-6.003095e-03 -1.691518e-02 -1.868864e-02 -1.219823e-02 -5.894462e-03 1.529560e-04 6.126014e-03 1.138882e-02 1.338886e-02 9.067947e-03 +1.701249e+01 1.709283e+01 1.718865e+01 1.720206e+01 1.723390e+01 1.728645e+01 1.734266e+01 1.739078e+01 1.742028e+01 1.760571e+01 +1.701249e+01 1.709283e+01 1.718865e+01 1.720206e+01 1.723390e+01 1.728645e+01 1.734266e+01 1.739078e+01 1.742028e+01 1.760571e+01 +5 9 +4.653393e-02 3.562850e-02 2.548204e-02 1.568143e-02 5.761301e-03 -4.088639e-03 -1.379965e-02 -2.336504e-02 -3.269862e-02 -4.144215e-02 +9.227572e-02 4.213696e-02 8.529596e-03 -3.873199e-03 -3.459258e-03 1.593489e-03 2.636929e-03 7.471431e-04 8.463632e-04 -3.817793e-03 +-2.500124e-02 -1.222128e-03 1.476406e-02 1.389468e-02 1.137679e-02 1.094759e-02 1.281096e-02 9.105457e-03 -5.540755e-03 -2.722266e-02 +-3.941759e-03 -1.129259e-02 -1.356278e-02 -1.159826e-02 -9.830968e-03 -6.928541e-03 -2.408557e-03 2.898526e-03 6.602251e-03 5.432834e-03 +1.704440e+01 1.712094e+01 1.717512e+01 1.716075e+01 1.720473e+01 1.726112e+01 1.732141e+01 1.738256e+01 1.743158e+01 1.761816e+01 +1.704440e+01 1.712094e+01 1.717512e+01 1.716075e+01 1.720473e+01 1.726112e+01 1.732141e+01 1.738256e+01 1.743158e+01 1.761816e+01 +6 9 +4.624249e-02 3.547620e-02 2.539082e-02 1.565481e-02 5.719859e-03 -4.135018e-03 -1.382059e-02 -2.334399e-02 -3.267545e-02 -4.136490e-02 +9.413319e-02 4.387939e-02 7.701325e-03 -6.008987e-03 -5.267986e-03 6.085365e-04 2.614078e-03 1.738416e-04 4.858256e-03 -6.427473e-04 +-1.786464e-02 -3.344500e-03 1.278825e-02 1.518716e-02 1.317841e-02 1.244360e-02 8.908277e-03 2.097576e-03 -8.698204e-03 -3.146461e-02 +-2.137925e-03 -6.097680e-03 -7.687477e-03 -7.859387e-03 -8.723854e-03 -8.278301e-03 -4.611703e-03 3.429063e-04 2.939742e-03 2.468098e-03 +1.706765e+01 1.712974e+01 1.715783e+01 1.712797e+01 1.719058e+01 1.726966e+01 1.733435e+01 1.735864e+01 1.744138e+01 1.760282e+01 +1.706765e+01 1.712974e+01 1.715783e+01 1.712797e+01 1.719058e+01 1.726966e+01 1.733435e+01 1.735864e+01 1.744138e+01 1.760282e+01 +7 9 +4.641418e-02 3.568577e-02 2.543443e-02 1.567842e-02 5.702708e-03 -4.153631e-03 -1.380091e-02 -2.332221e-02 -3.265657e-02 -4.137387e-02 +9.121273e-02 4.469955e-02 8.132140e-03 -5.023137e-03 -4.490979e-03 -1.804847e-04 5.838560e-04 -9.072975e-04 5.346706e-03 -2.740136e-03 +-9.228982e-03 -3.211716e-03 1.055876e-02 1.477263e-02 1.138466e-02 1.030633e-02 8.494754e-03 3.477448e-03 -1.109515e-02 -3.409375e-02 +-1.747400e-04 6.431410e-04 1.635225e-03 -1.049260e-03 -5.951623e-03 -7.884016e-03 -5.541492e-03 -2.573081e-03 -6.958256e-04 7.629114e-04 +1.708212e+01 1.712508e+01 1.713073e+01 1.710033e+01 1.718591e+01 1.727220e+01 1.731633e+01 1.733481e+01 1.742964e+01 1.751213e+01 +1.708212e+01 1.712508e+01 1.713073e+01 1.710033e+01 1.718591e+01 1.727220e+01 1.731633e+01 1.733481e+01 1.742964e+01 1.751213e+01 +8 9 +4.690674e-02 3.625059e-02 2.576952e-02 1.577809e-02 5.748707e-03 -4.148442e-03 -1.378920e-02 -2.330066e-02 -3.255252e-02 -4.143150e-02 +8.281581e-02 4.269911e-02 1.035806e-02 -8.692413e-04 -2.097249e-03 -6.895764e-04 -8.769100e-04 -1.712709e-03 3.867801e-04 -7.018851e-03 +-2.583459e-03 -1.489583e-03 6.721866e-03 1.135592e-02 7.241442e-03 9.049568e-03 8.338463e-03 7.598859e-04 -1.449729e-02 -3.534084e-02 +1.428926e-03 6.579473e-03 1.200201e-02 1.121547e-02 4.136436e-03 -3.399285e-03 -6.522295e-03 -5.302808e-03 -5.726697e-04 3.070743e-03 +1.708854e+01 1.711041e+01 1.710843e+01 1.709472e+01 1.715768e+01 1.725059e+01 1.727896e+01 1.730134e+01 1.736530e+01 1.737888e+01 +1.708854e+01 1.711041e+01 1.710843e+01 1.709472e+01 1.715768e+01 1.725059e+01 1.727896e+01 1.730134e+01 1.736530e+01 1.737888e+01 +9 9 +4.751061e-02 3.699351e-02 2.627485e-02 1.596002e-02 5.834900e-03 -4.097083e-03 -1.376873e-02 -2.313080e-02 -3.224445e-02 -4.141229e-02 +6.904196e-02 3.715229e-02 1.399751e-02 5.456916e-03 2.447699e-03 7.888056e-04 -1.022467e-03 -4.823514e-03 -8.111164e-03 -9.044980e-03 +-4.644780e-04 -4.012535e-03 -1.728970e-03 1.692919e-03 8.318203e-04 -2.271244e-03 -6.371578e-03 -1.241820e-02 -2.139833e-02 -3.647952e-02 +2.726513e-03 1.165849e-02 2.198002e-02 2.628556e-02 2.462765e-02 2.017790e-02 1.659337e-02 1.626942e-02 1.670524e-02 1.203205e-02 +1.709403e+01 1.710184e+01 1.710562e+01 1.710413e+01 1.711738e+01 1.715410e+01 1.720423e+01 1.723363e+01 1.722378e+01 1.719444e+01 +1.709403e+01 1.710184e+01 1.710562e+01 1.710413e+01 1.711738e+01 1.715410e+01 1.720423e+01 1.723363e+01 1.722378e+01 1.719444e+01 +10 9 +4.833142e-02 3.824460e-02 2.712475e-02 1.648804e-02 6.237593e-03 -3.625511e-03 -1.314850e-02 -2.244411e-02 -3.169932e-02 -4.145199e-02 +4.337622e-02 2.408026e-02 1.254157e-02 7.497989e-03 4.803570e-03 2.098402e-03 -1.314030e-03 -6.221173e-03 -1.000708e-02 -6.233362e-03 +-2.424846e-02 -2.993557e-02 -3.133218e-02 -3.040450e-02 -2.950217e-02 -2.907814e-02 -2.868359e-02 -2.874737e-02 -3.042866e-02 -3.704759e-02 +9.363220e-03 3.336995e-02 5.623027e-02 6.896527e-02 7.559253e-02 7.745111e-02 7.383275e-02 6.323079e-02 4.488424e-02 2.209464e-02 +1.725141e+01 1.726159e+01 1.727486e+01 1.728676e+01 1.729901e+01 1.725129e+01 1.716722e+01 1.707202e+01 1.694612e+01 1.678981e+01 +1.725141e+01 1.726159e+01 1.727486e+01 1.728676e+01 1.729901e+01 1.725129e+01 1.716722e+01 1.707202e+01 1.694612e+01 1.678981e+01 +1 10 +5.199513e-02 3.961955e-02 2.759644e-02 1.675707e-02 6.471269e-03 -3.597815e-03 -1.356512e-02 -2.333909e-02 -3.290804e-02 -4.241154e-02 +1.302665e-02 8.997757e-03 6.289883e-03 4.311698e-03 2.758274e-03 1.298579e-03 -3.354680e-04 -1.833549e-03 -3.170655e-03 -7.802642e-03 +-1.488262e-02 -6.591958e-04 1.269617e-02 1.903570e-02 2.078654e-02 1.908057e-02 1.610440e-02 1.249760e-02 7.378120e-03 -3.447536e-03 +-1.442991e-02 -5.211665e-02 -8.704287e-02 -1.006890e-01 -9.919777e-02 -8.963600e-02 -7.575308e-02 -5.886344e-02 -4.040839e-02 -2.101487e-02 +1.704362e+01 1.692590e+01 1.690249e+01 1.689816e+01 1.690049e+01 1.690090e+01 1.695755e+01 1.705613e+01 1.716284e+01 1.729672e+01 +1.704362e+01 1.692590e+01 1.690249e+01 1.689816e+01 1.690049e+01 1.690090e+01 1.695755e+01 1.705613e+01 1.716284e+01 1.729672e+01 +2 10 +5.166129e-02 3.902543e-02 2.699899e-02 1.630767e-02 6.131577e-03 -3.872256e-03 -1.370062e-02 -2.332719e-02 -3.288696e-02 -4.203229e-02 +4.615415e-02 3.181971e-02 2.097181e-02 1.367720e-02 8.677111e-03 4.386761e-03 4.916050e-05 -3.708796e-03 -7.867613e-03 -2.068788e-02 +-1.770281e-02 -6.274098e-03 8.898538e-03 1.548794e-02 1.802471e-02 1.861067e-02 1.867384e-02 1.823329e-02 1.295891e-02 -1.039791e-02 +-1.011986e-02 -3.721235e-02 -6.097071e-02 -6.405727e-02 -5.211734e-02 -3.461197e-02 -1.629952e-02 8.067746e-04 1.464419e-02 1.637353e-02 +1.704656e+01 1.696846e+01 1.702908e+01 1.709906e+01 1.717200e+01 1.725328e+01 1.734076e+01 1.739495e+01 1.744174e+01 1.759581e+01 +1.704656e+01 1.696846e+01 1.702908e+01 1.709906e+01 1.717200e+01 1.725328e+01 1.734076e+01 1.739495e+01 1.744174e+01 1.759581e+01 +3 10 +4.910955e-02 3.732035e-02 2.610174e-02 1.590175e-02 5.942498e-03 -3.937944e-03 -1.369181e-02 -2.328592e-02 -3.270187e-02 -4.159612e-02 +7.707251e-02 5.192345e-02 3.072568e-02 1.849134e-02 1.193771e-02 7.242836e-03 2.954146e-03 -6.126564e-04 -6.055610e-03 -2.026702e-02 +-1.753067e-02 -6.665891e-03 8.408003e-03 1.184386e-02 1.217752e-02 1.210259e-02 1.228250e-02 1.244274e-02 6.536413e-03 -1.354981e-02 +-7.541492e-03 -2.664075e-02 -3.942710e-02 -3.323966e-02 -1.715511e-02 -1.521004e-03 1.075354e-02 2.053422e-02 2.710201e-02 2.190258e-02 +1.706145e+01 1.703897e+01 1.715924e+01 1.723957e+01 1.729267e+01 1.733846e+01 1.738202e+01 1.741934e+01 1.745926e+01 1.759487e+01 +1.706145e+01 1.703897e+01 1.715924e+01 1.723957e+01 1.729267e+01 1.733846e+01 1.738202e+01 1.741934e+01 1.745926e+01 1.759487e+01 +4 10 +4.741681e-02 3.626436e-02 2.570005e-02 1.577548e-02 5.879659e-03 -3.965931e-03 -1.369253e-02 -2.326062e-02 -3.255643e-02 -4.132439e-02 +9.340858e-02 5.969888e-02 3.039761e-02 1.629974e-02 1.145680e-02 8.995524e-03 6.665737e-03 4.515709e-03 1.266792e-04 -9.501955e-03 +-1.578983e-02 -4.751031e-03 1.044574e-02 1.035939e-02 8.750765e-03 8.253213e-03 8.097809e-03 6.878874e-03 5.980790e-04 -1.689966e-02 +-5.553251e-03 -1.874752e-02 -2.454495e-02 -1.429041e-02 1.725715e-03 1.477600e-02 2.436446e-02 3.147380e-02 3.445681e-02 2.529283e-02 +1.708368e+01 1.710688e+01 1.724200e+01 1.730190e+01 1.733651e+01 1.736892e+01 1.740059e+01 1.743167e+01 1.746796e+01 1.759463e+01 +1.708368e+01 1.710688e+01 1.724200e+01 1.730190e+01 1.733651e+01 1.736892e+01 1.740059e+01 1.743167e+01 1.746796e+01 1.759463e+01 +5 10 +4.643476e-02 3.570054e-02 2.549923e-02 1.571405e-02 5.824821e-03 -4.013121e-03 -1.371439e-02 -2.326010e-02 -3.248998e-02 -4.123095e-02 +1.014108e-01 6.118171e-02 2.761800e-02 1.321540e-02 1.039717e-02 9.698577e-03 8.729025e-03 7.431625e-03 4.806999e-03 -6.507059e-04 +-1.294548e-02 -3.260939e-03 1.138853e-02 1.122858e-02 8.170793e-03 6.761488e-03 6.828980e-03 4.104749e-03 -3.588472e-03 -2.013489e-02 +-3.871264e-03 -1.301090e-02 -1.590850e-02 -5.813871e-03 8.682141e-03 2.028540e-02 2.867390e-02 3.446682e-02 3.539201e-02 2.455950e-02 +1.710926e+01 1.715641e+01 1.727840e+01 1.731090e+01 1.734239e+01 1.737371e+01 1.740295e+01 1.743296e+01 1.746800e+01 1.760143e+01 +1.710926e+01 1.715641e+01 1.727840e+01 1.731090e+01 1.734239e+01 1.737371e+01 1.740295e+01 1.743296e+01 1.746800e+01 1.760143e+01 +6 10 +4.600477e-02 3.545962e-02 2.536839e-02 1.567196e-02 5.785545e-03 -4.055832e-03 -1.374318e-02 -2.325919e-02 -3.247237e-02 -4.122984e-02 +1.044614e-01 6.133426e-02 2.690698e-02 1.264337e-02 1.024910e-02 9.984330e-03 9.602935e-03 8.862748e-03 7.738543e-03 3.580607e-03 +-9.095770e-03 -3.916638e-03 1.071965e-02 1.236375e-02 9.239616e-03 7.375854e-03 5.424647e-03 1.874537e-03 -6.259537e-03 -2.173328e-02 +-1.963560e-03 -7.637300e-03 -9.991247e-03 -2.065122e-03 1.042312e-02 2.053867e-02 2.784719e-02 3.277937e-02 3.244401e-02 2.141000e-02 +1.713477e+01 1.718194e+01 1.728973e+01 1.729864e+01 1.732748e+01 1.736104e+01 1.739322e+01 1.742422e+01 1.746178e+01 1.759935e+01 +1.713477e+01 1.718194e+01 1.728973e+01 1.729864e+01 1.732748e+01 1.736104e+01 1.739322e+01 1.742422e+01 1.746178e+01 1.759935e+01 +7 10 +4.612038e-02 3.556513e-02 2.531288e-02 1.563132e-02 5.747946e-03 -4.083289e-03 -1.374557e-02 -2.324800e-02 -3.246290e-02 -4.126363e-02 +1.033957e-01 6.227828e-02 2.899166e-02 1.544323e-02 1.223902e-02 1.146152e-02 1.079386e-02 1.008678e-02 9.355635e-03 2.277821e-03 +-4.291773e-03 -4.923443e-03 8.799020e-03 1.265365e-02 9.044274e-03 7.192224e-03 5.998068e-03 2.902886e-03 -7.806204e-03 -2.264074e-02 +8.252014e-04 2.960820e-05 -2.124745e-03 2.078435e-03 1.165175e-02 1.990528e-02 2.589392e-02 3.001155e-02 2.925458e-02 1.887278e-02 +1.716005e+01 1.717972e+01 1.728542e+01 1.727855e+01 1.730643e+01 1.734216e+01 1.737536e+01 1.740732e+01 1.744763e+01 1.754357e+01 +1.716005e+01 1.717972e+01 1.728542e+01 1.727855e+01 1.730643e+01 1.734216e+01 1.737536e+01 1.740732e+01 1.744763e+01 1.754357e+01 +8 10 +4.666811e-02 3.615408e-02 2.558293e-02 1.565153e-02 5.739700e-03 -4.090613e-03 -1.373659e-02 -2.320332e-02 -3.239751e-02 -4.129596e-02 +9.687552e-02 6.307789e-02 3.358213e-02 2.108670e-02 1.663995e-02 1.471812e-02 1.312032e-02 1.137116e-02 9.183991e-03 -2.005983e-03 +6.699921e-05 -2.936143e-03 5.037301e-03 1.007086e-02 7.169956e-03 6.455980e-03 5.514058e-03 7.226839e-04 -9.013045e-03 -2.265232e-02 +4.120337e-03 1.165579e-02 1.422774e-02 1.476358e-02 1.889470e-02 2.371833e-02 2.742676e-02 2.994136e-02 2.901866e-02 1.947498e-02 +1.718862e+01 1.717864e+01 1.724934e+01 1.726014e+01 1.728364e+01 1.731879e+01 1.735223e+01 1.738708e+01 1.742383e+01 1.744278e+01 +1.718862e+01 1.717864e+01 1.724934e+01 1.726014e+01 1.728364e+01 1.731879e+01 1.735223e+01 1.738708e+01 1.742383e+01 1.744278e+01 +9 10 +4.761061e-02 3.731039e-02 2.635088e-02 1.593751e-02 5.858165e-03 -3.994821e-03 -1.361470e-02 -2.300081e-02 -3.218006e-02 -4.125368e-02 +8.237643e-02 5.843362e-02 3.711631e-02 2.647359e-02 2.129802e-02 1.790082e-02 1.463864e-02 1.050795e-02 5.402504e-03 -4.010646e-03 +8.000172e-04 -3.370060e-03 -1.737766e-03 1.441571e-03 1.688773e-03 -4.540942e-04 -3.581116e-03 -7.508755e-03 -1.240303e-02 -2.245734e-02 +7.113928e-03 2.390103e-02 3.603764e-02 3.838334e-02 3.844303e-02 3.885380e-02 3.889101e-02 3.780310e-02 3.507298e-02 2.433766e-02 +1.722044e+01 1.720258e+01 1.722084e+01 1.724631e+01 1.726848e+01 1.729652e+01 1.732489e+01 1.735255e+01 1.737698e+01 1.730344e+01 +1.722044e+01 1.720258e+01 1.722084e+01 1.724631e+01 1.726848e+01 1.729652e+01 1.732489e+01 1.735255e+01 1.737698e+01 1.730344e+01 +10 10 +4.886490e-02 3.888780e-02 2.746470e-02 1.661286e-02 6.284216e-03 -3.600688e-03 -1.317943e-02 -2.252871e-02 -3.177077e-02 -4.141771e-02 +5.146574e-02 3.826129e-02 2.780070e-02 2.139031e-02 1.756256e-02 1.424213e-02 1.062710e-02 6.058000e-03 5.951864e-04 -2.157276e-03 +-1.620180e-02 -1.978401e-02 -2.100152e-02 -2.049470e-02 -1.966578e-02 -1.915760e-02 -1.874781e-02 -1.837467e-02 -1.836747e-02 -2.180103e-02 +1.087333e-02 3.808499e-02 6.234054e-02 7.353345e-02 7.756717e-02 7.718644e-02 7.264029e-02 6.298944e-02 4.704629e-02 2.511480e-02 +1.731839e+01 1.730895e+01 1.730722e+01 1.731300e+01 1.732434e+01 1.727714e+01 1.720004e+01 1.711677e+01 1.699755e+01 1.683846e+01 +1.731839e+01 1.730895e+01 1.730722e+01 1.731300e+01 1.732434e+01 1.727714e+01 1.720004e+01 1.711677e+01 1.699755e+01 1.683846e+01 diff --git a/Buildings/result.plt b/Buildings/result.plt new file mode 100644 index 00000000000..fada3251cc4 --- /dev/null +++ b/Buildings/result.plt @@ -0,0 +1,1731 @@ +TITLE = "dt=1.000000s, t=3660.000000s, nu=0.000016, Lx=1.000000, Ly=1.000000, Lz=1.000000, Nx=12, Ny=12, Nz=12 " +VARIABLES =X, Y, Z, I, J, K, U, V, W, T, Xi, FlagP, P +ZONE F=POINT, I=12, J=12, K=12 +0.000000 0.000000 0.000000 0 0 0 0.000000 0.000000 0.000000 19.693429 0.000000 1.000000 0.000000 +0.050000 0.000000 0.000000 1 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.150000 0.000000 0.000000 2 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.250000 0.000000 0.000000 3 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.350000 0.000000 0.000000 4 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.450000 0.000000 0.000000 5 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.550000 0.000000 0.000000 6 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.650000 0.000000 0.000000 7 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.750000 0.000000 0.000000 8 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.850000 0.000000 0.000000 9 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.950000 0.000000 0.000000 10 0 0 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +1.000000 0.000000 0.000000 11 0 0 0.000000 0.000000 0.000000 19.693429 0.000000 1.000000 0.000000 +0.000000 0.050000 0.000000 0 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.050000 0.000000 1 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048936 +0.150000 0.050000 0.000000 2 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047522 +0.250000 0.050000 0.000000 3 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046483 +0.350000 0.050000 0.000000 4 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.045922 +0.450000 0.050000 0.000000 5 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.045874 +0.550000 0.050000 0.000000 6 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046334 +0.650000 0.050000 0.000000 7 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047341 +0.750000 0.050000 0.000000 8 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.049057 +0.850000 0.050000 0.000000 9 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051568 +0.950000 0.050000 0.000000 10 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051868 +1.000000 0.050000 0.000000 11 1 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.150000 0.000000 0 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.150000 0.000000 1 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048549 +0.150000 0.150000 0.000000 2 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047490 +0.250000 0.150000 0.000000 3 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046755 +0.350000 0.150000 0.000000 4 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046272 +0.450000 0.150000 0.000000 5 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046166 +0.550000 0.150000 0.000000 6 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046453 +0.650000 0.150000 0.000000 7 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047128 +0.750000 0.150000 0.000000 8 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048368 +0.850000 0.150000 0.000000 9 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.050459 +0.950000 0.150000 0.000000 10 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051002 +1.000000 0.150000 0.000000 11 2 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.250000 0.000000 0 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.250000 0.000000 1 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047935 +0.150000 0.250000 0.000000 2 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047317 +0.250000 0.250000 0.000000 3 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047047 +0.350000 0.250000 0.000000 4 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046620 +0.450000 0.250000 0.000000 5 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046352 +0.550000 0.250000 0.000000 6 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046340 +0.650000 0.250000 0.000000 7 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046591 +0.750000 0.250000 0.000000 8 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047145 +0.850000 0.250000 0.000000 9 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048165 +0.950000 0.250000 0.000000 10 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048131 +1.000000 0.250000 0.000000 11 3 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.350000 0.000000 0 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.350000 0.000000 1 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047008 +0.150000 0.350000 0.000000 2 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047112 +0.250000 0.350000 0.000000 3 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047615 +0.350000 0.350000 0.000000 4 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047170 +0.450000 0.350000 0.000000 5 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046826 +0.550000 0.350000 0.000000 6 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046505 +0.650000 0.350000 0.000000 7 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046393 +0.750000 0.350000 0.000000 8 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046520 +0.850000 0.350000 0.000000 9 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046753 +0.950000 0.350000 0.000000 10 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046250 +1.000000 0.350000 0.000000 11 4 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.450000 0.000000 0 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.450000 0.000000 1 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046391 +0.150000 0.450000 0.000000 2 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046600 +0.250000 0.450000 0.000000 3 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046925 +0.350000 0.450000 0.000000 4 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047276 +0.450000 0.450000 0.000000 5 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047568 +0.550000 0.450000 0.000000 6 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047050 +0.650000 0.450000 0.000000 7 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046618 +0.750000 0.450000 0.000000 8 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046411 +0.850000 0.450000 0.000000 9 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046341 +0.950000 0.450000 0.000000 10 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.045892 +1.000000 0.450000 0.000000 11 5 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.550000 0.000000 0 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.550000 0.000000 1 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.045992 +0.150000 0.550000 0.000000 2 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046426 +0.250000 0.550000 0.000000 3 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046524 +0.350000 0.550000 0.000000 4 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046678 +0.450000 0.550000 0.000000 5 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047070 +0.550000 0.550000 0.000000 6 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047519 +0.650000 0.550000 0.000000 7 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047207 +0.750000 0.550000 0.000000 8 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046732 +0.850000 0.550000 0.000000 9 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046483 +0.950000 0.550000 0.000000 10 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046220 +1.000000 0.550000 0.000000 11 6 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.650000 0.000000 0 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.650000 0.000000 1 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046459 +0.150000 0.650000 0.000000 2 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046987 +0.250000 0.650000 0.000000 3 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046738 +0.350000 0.650000 0.000000 4 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046500 +0.450000 0.650000 0.000000 5 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046524 +0.550000 0.650000 0.000000 6 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046839 +0.650000 0.650000 0.000000 7 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047280 +0.750000 0.650000 0.000000 8 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047332 +0.850000 0.650000 0.000000 9 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046984 +0.950000 0.650000 0.000000 10 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046863 +1.000000 0.650000 0.000000 11 7 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.750000 0.000000 0 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.750000 0.000000 1 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048574 +0.150000 0.750000 0.000000 2 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048647 +0.250000 0.750000 0.000000 3 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047524 +0.350000 0.750000 0.000000 4 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046788 +0.450000 0.750000 0.000000 5 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046406 +0.550000 0.750000 0.000000 6 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046405 +0.650000 0.750000 0.000000 7 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046725 +0.750000 0.750000 0.000000 8 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047099 +0.850000 0.750000 0.000000 9 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047361 +0.950000 0.750000 0.000000 10 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047425 +1.000000 0.750000 0.000000 11 8 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.850000 0.000000 0 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.850000 0.000000 1 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051677 +0.150000 0.850000 0.000000 2 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051025 +0.250000 0.850000 0.000000 3 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048728 +0.350000 0.850000 0.000000 4 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047305 +0.450000 0.850000 0.000000 5 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046534 +0.550000 0.850000 0.000000 6 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046242 +0.650000 0.850000 0.000000 7 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046414 +0.750000 0.850000 0.000000 8 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046907 +0.850000 0.850000 0.000000 9 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047511 +0.950000 0.850000 0.000000 10 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048331 +1.000000 0.850000 0.000000 11 9 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 0.950000 0.000000 0 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.050000 0.950000 0.000000 1 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051995 +0.150000 0.950000 0.000000 2 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.051661 +0.250000 0.950000 0.000000 3 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.049110 +0.350000 0.950000 0.000000 4 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047417 +0.450000 0.950000 0.000000 5 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046435 +0.550000 0.950000 0.000000 6 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046005 +0.650000 0.950000 0.000000 7 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046120 +0.750000 0.950000 0.000000 8 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.046668 +0.850000 0.950000 0.000000 9 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.047611 +0.950000 0.950000 0.000000 10 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.048865 +1.000000 0.950000 0.000000 11 10 0 0.000000 0.000000 0.000000 19.695063 0.000000 1.000000 0.000000 +0.000000 1.000000 0.000000 0 11 0 0.000000 0.000000 0.000000 19.693461 0.000000 1.000000 0.000000 +0.050000 1.000000 0.000000 1 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.150000 1.000000 0.000000 2 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.250000 1.000000 0.000000 3 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.350000 1.000000 0.000000 4 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.450000 1.000000 0.000000 5 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.550000 1.000000 0.000000 6 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.650000 1.000000 0.000000 7 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.750000 1.000000 0.000000 8 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.850000 1.000000 0.000000 9 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.950000 1.000000 0.000000 10 11 0 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +1.000000 1.000000 0.000000 11 11 0 0.000000 0.000000 0.000000 19.693461 0.000000 1.000000 0.000000 +0.000000 0.000000 0.050000 0 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.050000 1 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.048936 +0.150000 0.000000 0.050000 2 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.047522 +0.250000 0.000000 0.050000 3 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.046483 +0.350000 0.000000 0.050000 4 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.045922 +0.450000 0.000000 0.050000 5 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.045874 +0.550000 0.000000 0.050000 6 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.046334 +0.650000 0.000000 0.050000 7 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.047341 +0.750000 0.000000 0.050000 8 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.049057 +0.850000 0.000000 0.050000 9 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.051568 +0.950000 0.000000 0.050000 10 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.051868 +1.000000 0.000000 0.050000 11 0 1 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.050000 0 1 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.048936 +0.050000 0.050000 0.050000 1 1 1 -0.030177 0.006150 0.024032 17.325099 0.000000 -1.000000 0.048936 +0.150000 0.050000 0.050000 2 1 1 -0.072999 -0.001024 0.013677 17.230362 0.000000 -1.000000 0.047522 +0.250000 0.050000 0.050000 3 1 1 -0.091810 0.000210 0.005963 17.196275 0.000000 -1.000000 0.046483 +0.350000 0.050000 0.050000 4 1 1 -0.100148 0.003672 -0.001495 17.167622 0.000000 -1.000000 0.045922 +0.450000 0.050000 0.050000 5 1 1 -0.102406 0.007225 -0.007137 17.141302 0.000000 -1.000000 0.045874 +0.550000 0.050000 0.050000 6 1 1 -0.101400 0.010400 -0.011491 17.111420 0.000000 -1.000000 0.046334 +0.650000 0.050000 0.050000 7 1 1 -0.097045 0.012767 -0.016030 17.079933 0.000000 -1.000000 0.047341 +0.750000 0.050000 0.050000 8 1 1 -0.086441 0.013505 -0.020846 17.052767 0.000000 -1.000000 0.049057 +0.850000 0.050000 0.050000 9 1 1 -0.065044 0.011790 -0.025846 17.036278 0.000000 -1.000000 0.051568 +0.950000 0.050000 0.050000 10 1 1 -0.025494 0.007778 -0.033271 17.033915 0.000000 -1.000000 0.051868 +1.000000 0.050000 0.050000 11 1 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.051868 +0.000000 0.150000 0.050000 0 2 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.048549 +0.050000 0.150000 0.050000 1 2 1 -0.025952 0.017758 0.020503 17.242075 0.000000 -1.000000 0.048549 +0.150000 0.150000 0.050000 2 2 1 -0.062912 0.002507 0.006465 17.118529 0.000000 -1.000000 0.047490 +0.250000 0.150000 0.050000 3 2 1 -0.080540 0.003730 0.003318 17.115775 0.000000 -1.000000 0.046755 +0.350000 0.150000 0.050000 4 2 1 -0.090491 0.010918 -0.000238 17.107582 0.000000 -1.000000 0.046272 +0.450000 0.150000 0.050000 5 2 1 -0.094501 0.018845 -0.003713 17.092009 0.000000 -1.000000 0.046166 +0.550000 0.150000 0.050000 6 2 1 -0.093942 0.026088 -0.006524 17.069735 0.000000 -1.000000 0.046453 +0.650000 0.150000 0.050000 7 2 1 -0.089492 0.032033 -0.009712 17.041961 0.000000 -1.000000 0.047128 +0.750000 0.150000 0.050000 8 2 1 -0.080049 0.035817 -0.015036 17.008286 0.000000 -1.000000 0.048368 +0.850000 0.150000 0.050000 9 2 1 -0.061851 0.036322 -0.024709 16.968014 0.000000 -1.000000 0.050459 +0.950000 0.150000 0.050000 10 2 1 -0.024941 0.031710 -0.041094 16.934711 0.000000 -1.000000 0.051002 +1.000000 0.150000 0.050000 11 2 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.051002 +0.000000 0.250000 0.050000 0 3 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.047935 +0.050000 0.250000 0.050000 1 3 1 -0.026237 0.030283 0.019177 17.207984 0.000000 -1.000000 0.047935 +0.150000 0.250000 0.050000 2 3 1 -0.060395 0.004425 0.010567 17.090322 0.000000 -1.000000 0.047317 +0.250000 0.250000 0.050000 3 3 1 -0.071151 0.001523 0.008360 17.081935 0.000000 -1.000000 0.047047 +0.350000 0.250000 0.050000 4 3 1 -0.077122 0.013695 0.003938 17.076699 0.000000 -1.000000 0.046620 +0.450000 0.250000 0.050000 5 3 1 -0.080923 0.024171 -0.000264 17.064728 0.000000 -1.000000 0.046352 +0.550000 0.250000 0.050000 6 3 1 -0.080155 0.033645 -0.003700 17.048272 0.000000 -1.000000 0.046340 +0.650000 0.250000 0.050000 7 3 1 -0.075385 0.041472 -0.006277 17.024856 0.000000 -1.000000 0.046591 +0.750000 0.250000 0.050000 8 3 1 -0.066140 0.048319 -0.009601 16.996320 0.000000 -1.000000 0.047145 +0.850000 0.250000 0.050000 9 3 1 -0.050010 0.053886 -0.015043 16.966964 0.000000 -1.000000 0.048165 +0.950000 0.250000 0.050000 10 3 1 -0.019893 0.053088 -0.025115 16.956101 0.000000 -1.000000 0.048131 +1.000000 0.250000 0.050000 11 3 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.048131 +0.000000 0.350000 0.050000 0 4 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.047008 +0.050000 0.350000 0.050000 1 4 1 0.000887 0.010783 0.025687 17.308025 0.000000 -1.000000 0.047008 +0.150000 0.350000 0.050000 2 4 1 -0.000317 -0.015543 0.019429 17.121106 0.000000 -1.000000 0.047112 +0.250000 0.350000 0.050000 3 4 1 -0.019510 -0.012757 0.025870 17.090268 0.000000 -1.000000 0.047615 +0.350000 0.350000 0.050000 4 4 1 -0.049306 0.010499 0.015095 17.066364 0.000000 -1.000000 0.047170 +0.450000 0.350000 0.050000 5 4 1 -0.063279 0.018313 0.008070 17.051901 0.000000 -1.000000 0.046826 +0.550000 0.350000 0.050000 6 4 1 -0.064040 0.033880 0.001517 17.038704 0.000000 -1.000000 0.046505 +0.650000 0.350000 0.050000 7 4 1 -0.060082 0.044209 -0.003237 17.025389 0.000000 -1.000000 0.046393 +0.750000 0.350000 0.050000 8 4 1 -0.050573 0.051559 -0.005614 17.010643 0.000000 -1.000000 0.046520 +0.850000 0.350000 0.050000 9 4 1 -0.035439 0.057083 -0.007438 17.002354 0.000000 -1.000000 0.046753 +0.950000 0.350000 0.050000 10 4 1 -0.013188 0.055390 -0.010265 17.019536 0.000000 -1.000000 0.046250 +1.000000 0.350000 0.050000 11 4 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.046250 +0.000000 0.450000 0.050000 0 5 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.046391 +0.050000 0.450000 0.050000 1 5 1 0.005194 -0.032545 0.011570 17.094148 0.000000 -1.000000 0.046391 +0.150000 0.450000 0.050000 2 5 1 0.014342 -0.043826 0.007004 17.038058 0.000000 -1.000000 0.046600 +0.250000 0.450000 0.050000 3 5 1 0.020430 -0.034738 0.011088 17.032181 0.000000 -1.000000 0.046925 +0.350000 0.450000 0.050000 4 5 1 0.019189 -0.013837 0.025315 17.059312 0.000000 -1.000000 0.047276 +0.450000 0.450000 0.050000 5 5 1 -0.011121 0.000015 0.038444 17.124565 0.000000 -1.000000 0.047568 +0.550000 0.450000 0.050000 6 5 1 -0.041085 0.021116 0.013760 17.051282 0.000000 -1.000000 0.047050 +0.650000 0.450000 0.050000 7 5 1 -0.042866 0.037928 0.004829 17.038258 0.000000 -1.000000 0.046618 +0.750000 0.450000 0.050000 8 5 1 -0.036398 0.047283 -0.001396 17.033498 0.000000 -1.000000 0.046411 +0.850000 0.450000 0.050000 9 5 1 -0.023474 0.051159 -0.003404 17.041493 0.000000 -1.000000 0.046341 +0.950000 0.450000 0.050000 10 5 1 -0.007884 0.047188 -0.002601 17.075098 0.000000 -1.000000 0.045892 +1.000000 0.450000 0.050000 11 5 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.045892 +0.000000 0.550000 0.050000 0 6 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.045992 +0.050000 0.550000 0.050000 1 6 1 0.007790 -0.055008 -0.002084 17.020748 0.000000 -1.000000 0.045992 +0.150000 0.550000 0.050000 2 6 1 0.022974 -0.058217 -0.003953 16.995576 0.000000 -1.000000 0.046426 +0.250000 0.550000 0.050000 3 6 1 0.036373 -0.051303 -0.002658 16.995993 0.000000 -1.000000 0.046524 +0.350000 0.550000 0.050000 4 6 1 0.043873 -0.040968 0.003699 17.004759 0.000000 -1.000000 0.046678 +0.450000 0.550000 0.050000 5 6 1 0.042468 -0.022294 0.013698 17.022671 0.000000 -1.000000 0.047070 +0.550000 0.550000 0.050000 6 6 1 0.011811 -0.001740 0.039887 17.117508 0.000000 -1.000000 0.047519 +0.650000 0.550000 0.050000 7 6 1 -0.017889 0.010527 0.023264 17.085176 0.000000 -1.000000 0.047207 +0.750000 0.550000 0.050000 8 6 1 -0.019452 0.033793 0.009293 17.068566 0.000000 -1.000000 0.046732 +0.850000 0.550000 0.050000 9 6 1 -0.014044 0.038366 0.003466 17.083641 0.000000 -1.000000 0.046483 +0.950000 0.550000 0.050000 10 6 1 -0.004506 0.031114 0.006290 17.138909 0.000000 -1.000000 0.046220 +1.000000 0.550000 0.050000 11 6 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.046220 +0.000000 0.650000 0.050000 0 7 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.046459 +0.050000 0.650000 0.050000 1 7 1 0.012246 -0.062028 -0.010928 16.971053 0.000000 -1.000000 0.046459 +0.150000 0.650000 0.050000 2 7 1 0.033877 -0.061607 -0.009434 16.959471 0.000000 -1.000000 0.046987 +0.250000 0.650000 0.050000 3 7 1 0.050005 -0.053539 -0.007853 16.974913 0.000000 -1.000000 0.046738 +0.350000 0.650000 0.050000 4 7 1 0.060524 -0.044704 -0.005235 16.995143 0.000000 -1.000000 0.046500 +0.450000 0.650000 0.050000 5 7 1 0.064697 -0.033738 0.000247 17.009357 0.000000 -1.000000 0.046524 +0.550000 0.650000 0.050000 6 7 1 0.062114 -0.018909 0.008020 17.025994 0.000000 -1.000000 0.046839 +0.650000 0.650000 0.050000 7 7 1 0.040300 -0.010692 0.018734 17.052275 0.000000 -1.000000 0.047280 +0.750000 0.650000 0.050000 8 7 1 0.009910 0.010958 0.024721 17.110919 0.000000 -1.000000 0.047332 +0.850000 0.650000 0.050000 9 7 1 -0.001211 0.016178 0.013265 17.133354 0.000000 -1.000000 0.046984 +0.950000 0.650000 0.050000 10 7 1 -0.000389 0.001192 0.018743 17.257640 0.000000 -1.000000 0.046863 +1.000000 0.650000 0.050000 11 7 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.046863 +0.000000 0.750000 0.050000 0 8 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.048574 +0.050000 0.750000 0.050000 1 8 1 0.018799 -0.055831 -0.026315 16.908288 0.000000 -1.000000 0.048574 +0.150000 0.750000 0.050000 2 8 1 0.048536 -0.054012 -0.018487 16.921929 0.000000 -1.000000 0.048647 +0.250000 0.750000 0.050000 3 8 1 0.065999 -0.046092 -0.012866 16.957339 0.000000 -1.000000 0.047524 +0.350000 0.750000 0.050000 4 8 1 0.076056 -0.038099 -0.008684 16.992399 0.000000 -1.000000 0.046788 +0.450000 0.750000 0.050000 5 8 1 0.080733 -0.030435 -0.005094 17.019634 0.000000 -1.000000 0.046406 +0.550000 0.750000 0.050000 6 8 1 0.080392 -0.021748 -0.000719 17.037434 0.000000 -1.000000 0.046405 +0.650000 0.750000 0.050000 7 8 1 0.075143 -0.011209 0.004384 17.050450 0.000000 -1.000000 0.046725 +0.750000 0.750000 0.050000 8 8 1 0.063021 -0.003857 0.010012 17.062527 0.000000 -1.000000 0.047099 +0.850000 0.750000 0.050000 9 8 1 0.041965 -0.000739 0.015925 17.099330 0.000000 -1.000000 0.047361 +0.950000 0.750000 0.050000 10 8 1 0.014634 -0.024520 0.021222 17.278649 0.000000 -1.000000 0.047425 +1.000000 0.750000 0.050000 11 8 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.047425 +0.000000 0.850000 0.050000 0 9 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.051677 +0.050000 0.850000 0.050000 1 9 1 0.024446 -0.026962 -0.045803 16.888216 0.000000 -1.000000 0.051677 +0.150000 0.850000 0.050000 2 9 1 0.061543 -0.029319 -0.029800 16.923921 0.000000 -1.000000 0.051025 +0.250000 0.850000 0.050000 3 9 1 0.080684 -0.027469 -0.018779 16.971362 0.000000 -1.000000 0.048728 +0.350000 0.850000 0.050000 4 9 1 0.090255 -0.024027 -0.012006 17.012488 0.000000 -1.000000 0.047305 +0.450000 0.850000 0.050000 5 9 1 0.094296 -0.019567 -0.007884 17.044399 0.000000 -1.000000 0.046534 +0.550000 0.850000 0.050000 6 9 1 0.093970 -0.013982 -0.004276 17.067655 0.000000 -1.000000 0.046242 +0.650000 0.850000 0.050000 7 9 1 0.088455 -0.007249 -0.000349 17.082118 0.000000 -1.000000 0.046414 +0.750000 0.850000 0.050000 8 9 1 0.077176 -0.001310 0.002858 17.088541 0.000000 -1.000000 0.046907 +0.850000 0.850000 0.050000 9 9 1 0.060908 -0.000190 0.005453 17.094030 0.000000 -1.000000 0.047511 +0.950000 0.850000 0.050000 10 9 1 0.025845 -0.023977 0.018726 17.251410 0.000000 -1.000000 0.048331 +1.000000 0.850000 0.050000 11 9 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.048331 +0.000000 0.950000 0.050000 0 10 1 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.051995 +0.050000 0.950000 0.050000 1 10 1 0.026053 -0.002803 -0.028860 17.043619 0.000000 -1.000000 0.051995 +0.150000 0.950000 0.050000 2 10 1 0.066255 -0.006087 -0.020240 17.046561 0.000000 -1.000000 0.051661 +0.250000 0.950000 0.050000 3 10 1 0.087890 -0.007592 -0.015083 17.061451 0.000000 -1.000000 0.049110 +0.350000 0.950000 0.050000 4 10 1 0.098927 -0.007552 -0.011107 17.083682 0.000000 -1.000000 0.047417 +0.450000 0.950000 0.050000 5 10 1 0.103894 -0.006324 -0.007743 17.109263 0.000000 -1.000000 0.046435 +0.550000 0.950000 0.050000 6 10 1 0.105028 -0.004210 -0.003927 17.134773 0.000000 -1.000000 0.046005 +0.650000 0.950000 0.050000 7 10 1 0.101763 -0.001335 0.001650 17.160049 0.000000 -1.000000 0.046120 +0.750000 0.950000 0.050000 8 10 1 0.091988 0.001444 0.008241 17.188617 0.000000 -1.000000 0.046668 +0.850000 0.950000 0.050000 9 10 1 0.072765 0.001790 0.014228 17.220438 0.000000 -1.000000 0.047611 +0.950000 0.950000 0.050000 10 10 1 0.030167 -0.008426 0.021747 17.318386 0.000000 -1.000000 0.048865 +1.000000 0.950000 0.050000 11 10 1 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.048865 +0.000000 1.000000 0.050000 0 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.050000 1 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.051995 +0.150000 1.000000 0.050000 2 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.051661 +0.250000 1.000000 0.050000 3 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.049110 +0.350000 1.000000 0.050000 4 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.047417 +0.450000 1.000000 0.050000 5 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.046435 +0.550000 1.000000 0.050000 6 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.046005 +0.650000 1.000000 0.050000 7 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.046120 +0.750000 1.000000 0.050000 8 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.046668 +0.850000 1.000000 0.050000 9 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.047611 +0.950000 1.000000 0.050000 10 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.048865 +1.000000 1.000000 0.050000 11 11 1 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.150000 0 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.150000 1 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.038918 +0.150000 0.000000 0.150000 2 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.037121 +0.250000 0.000000 0.150000 3 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.035933 +0.350000 0.000000 0.150000 4 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.035424 +0.450000 0.000000 0.150000 5 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.035343 +0.550000 0.000000 0.150000 6 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.035509 +0.650000 0.000000 0.150000 7 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.036002 +0.750000 0.000000 0.150000 8 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.037062 +0.850000 0.000000 0.150000 9 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.038824 +0.950000 0.000000 0.150000 10 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.039376 +1.000000 0.000000 0.150000 11 0 2 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.150000 0 1 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.038918 +0.050000 0.050000 0.150000 1 1 2 -0.021371 0.009956 0.059482 17.318064 0.000000 -1.000000 0.038918 +0.150000 0.050000 0.150000 2 1 2 -0.050695 0.003127 0.032187 17.215193 0.000000 -1.000000 0.037121 +0.250000 0.050000 0.150000 3 1 2 -0.058548 0.001517 0.010317 17.196046 0.000000 -1.000000 0.035933 +0.350000 0.050000 0.150000 4 1 2 -0.056617 0.001239 -0.006058 17.202300 0.000000 -1.000000 0.035424 +0.450000 0.050000 0.150000 5 1 2 -0.054403 0.000693 -0.015347 17.201577 0.000000 -1.000000 0.035343 +0.550000 0.050000 0.150000 6 1 2 -0.055442 0.002291 -0.023852 17.175776 0.000000 -1.000000 0.035509 +0.650000 0.050000 0.150000 7 1 2 -0.058682 0.005502 -0.035744 17.120136 0.000000 -1.000000 0.036002 +0.750000 0.050000 0.150000 8 1 2 -0.059089 0.007787 -0.050893 17.036429 0.000000 -1.000000 0.037062 +0.850000 0.050000 0.150000 9 1 2 -0.048504 0.006045 -0.066910 16.952313 0.000000 -1.000000 0.038824 +0.950000 0.050000 0.150000 10 1 2 -0.019665 -0.001594 -0.084614 16.907780 0.000000 -1.000000 0.039376 +1.000000 0.050000 0.150000 11 1 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.039376 +0.000000 0.150000 0.150000 0 2 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.038321 +0.050000 0.150000 0.150000 1 2 2 -0.013997 0.023036 0.051889 17.254673 0.000000 -1.000000 0.038321 +0.150000 0.150000 0.150000 2 2 2 -0.033186 0.005431 0.018955 17.121660 0.000000 -1.000000 0.036888 +0.250000 0.150000 0.150000 3 2 2 -0.039688 0.001610 0.009378 17.125954 0.000000 -1.000000 0.036085 +0.350000 0.150000 0.150000 4 2 2 -0.040618 0.001782 -0.000159 17.132627 0.000000 -1.000000 0.035606 +0.450000 0.150000 0.150000 5 2 2 -0.039713 0.001697 -0.008258 17.130824 0.000000 -1.000000 0.035490 +0.550000 0.150000 0.150000 6 2 2 -0.039425 0.003978 -0.012211 17.123853 0.000000 -1.000000 0.035598 +0.650000 0.150000 0.150000 7 2 2 -0.040177 0.008627 -0.016529 17.099750 0.000000 -1.000000 0.035814 +0.750000 0.150000 0.150000 8 2 2 -0.039713 0.012343 -0.027823 17.048670 0.000000 -1.000000 0.036283 +0.850000 0.150000 0.150000 9 2 2 -0.033216 0.010657 -0.053500 16.945767 0.000000 -1.000000 0.037278 +0.950000 0.150000 0.150000 10 2 2 -0.013851 -0.002091 -0.097136 16.784790 0.000000 -1.000000 0.037966 +1.000000 0.150000 0.150000 11 2 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.037966 +0.000000 0.250000 0.150000 0 3 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.037782 +0.050000 0.250000 0.150000 1 3 2 -0.014977 0.031524 0.047973 17.216637 0.000000 -1.000000 0.037782 +0.150000 0.250000 0.150000 2 3 2 -0.032491 0.003719 0.024568 17.084135 0.000000 -1.000000 0.036820 +0.250000 0.250000 0.150000 3 3 2 -0.030971 -0.005317 0.018174 17.092038 0.000000 -1.000000 0.036296 +0.350000 0.250000 0.150000 4 3 2 -0.024233 -0.001839 0.008123 17.120635 0.000000 -1.000000 0.035792 +0.450000 0.250000 0.150000 5 3 2 -0.021309 0.001383 -0.000144 17.151165 0.000000 -1.000000 0.035549 +0.550000 0.250000 0.150000 6 3 2 -0.020410 0.001787 -0.006471 17.149945 0.000000 -1.000000 0.035588 +0.650000 0.250000 0.150000 7 3 2 -0.018742 0.001474 -0.008792 17.144495 0.000000 -1.000000 0.035696 +0.750000 0.250000 0.150000 8 3 2 -0.016199 0.002019 -0.013640 17.133820 0.000000 -1.000000 0.035836 +0.850000 0.250000 0.150000 9 3 2 -0.011523 0.002946 -0.026956 17.107259 0.000000 -1.000000 0.036028 +0.950000 0.250000 0.150000 10 3 2 -0.004188 -0.004954 -0.050460 17.046230 0.000000 -1.000000 0.036030 +1.000000 0.250000 0.150000 11 3 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.036030 +0.000000 0.350000 0.150000 0 4 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.037103 +0.050000 0.350000 0.150000 1 4 2 -0.001771 0.033439 0.056600 17.268397 0.000000 -1.000000 0.037103 +0.150000 0.350000 0.150000 2 4 2 -0.006403 0.006712 0.037843 17.108175 0.000000 -1.000000 0.036647 +0.250000 0.350000 0.150000 3 4 2 -0.015938 -0.002891 0.050489 17.081717 0.000000 -1.000000 0.036794 +0.350000 0.350000 0.150000 4 4 2 -0.025096 -0.000724 0.028632 17.070030 0.000000 -1.000000 0.036241 +0.450000 0.350000 0.150000 5 4 2 -0.023039 -0.004543 0.016902 17.101047 0.000000 -1.000000 0.035737 +0.550000 0.350000 0.150000 6 4 2 -0.014363 -0.000899 -0.000006 17.154057 0.000000 -1.000000 0.035515 +0.650000 0.350000 0.150000 7 4 2 -0.007752 -0.004634 -0.007616 17.149014 0.000000 -1.000000 0.035601 +0.750000 0.350000 0.150000 8 4 2 -0.002450 -0.008675 -0.010455 17.151758 0.000000 -1.000000 0.035684 +0.850000 0.350000 0.150000 9 4 2 0.006552 -0.009836 -0.014546 17.159797 0.000000 -1.000000 0.035689 +0.950000 0.350000 0.150000 10 4 2 0.006363 -0.014336 -0.008744 17.246859 0.000000 -1.000000 0.035417 +1.000000 0.350000 0.150000 11 4 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.035417 +0.000000 0.450000 0.150000 0 5 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.035826 +0.050000 0.450000 0.150000 1 5 2 0.000409 0.022001 0.030722 17.203459 0.000000 -1.000000 0.035826 +0.150000 0.450000 0.150000 2 5 2 -0.000466 0.015344 0.010545 17.079523 0.000000 -1.000000 0.035802 +0.250000 0.450000 0.150000 3 5 2 -0.001276 0.008855 0.017890 17.055203 0.000000 -1.000000 0.035930 +0.350000 0.450000 0.150000 4 5 2 0.002606 0.004866 0.045673 17.060928 0.000000 -1.000000 0.036390 +0.450000 0.450000 0.150000 5 5 2 -0.005843 -0.000768 0.079670 17.115360 0.000000 -1.000000 0.036871 +0.550000 0.450000 0.150000 6 5 2 -0.015406 -0.004995 0.028220 17.068898 0.000000 -1.000000 0.035891 +0.650000 0.450000 0.150000 7 5 2 -0.008423 -0.005803 0.004806 17.097350 0.000000 -1.000000 0.035557 +0.750000 0.450000 0.150000 8 5 2 -0.000269 -0.012016 -0.006518 17.100084 0.000000 -1.000000 0.035647 +0.850000 0.450000 0.150000 9 5 2 0.009390 -0.018395 -0.010949 17.106009 0.000000 -1.000000 0.035681 +0.950000 0.450000 0.150000 10 5 2 0.007793 -0.019029 0.001862 17.224308 0.000000 -1.000000 0.035390 +1.000000 0.450000 0.150000 11 5 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.035390 +0.000000 0.550000 0.150000 0 6 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.035216 +0.050000 0.550000 0.150000 1 6 2 -0.007925 0.014156 0.003615 17.196658 0.000000 -1.000000 0.035216 +0.150000 0.550000 0.150000 2 6 2 -0.010597 0.017433 -0.010497 17.091634 0.000000 -1.000000 0.035599 +0.250000 0.550000 0.150000 3 6 2 -0.001243 0.012674 -0.009421 17.086220 0.000000 -1.000000 0.035655 +0.350000 0.550000 0.150000 4 6 2 0.007404 0.008267 0.000997 17.076643 0.000000 -1.000000 0.035557 +0.450000 0.550000 0.150000 5 6 2 0.014682 0.006778 0.026196 17.050297 0.000000 -1.000000 0.035845 +0.550000 0.550000 0.150000 6 6 2 0.006087 0.000259 0.082847 17.112783 0.000000 -1.000000 0.036860 +0.650000 0.550000 0.150000 7 6 2 -0.001661 -0.006739 0.044047 17.072810 0.000000 -1.000000 0.036303 +0.750000 0.550000 0.150000 8 6 2 0.003183 -0.009639 0.015206 17.071443 0.000000 -1.000000 0.035856 +0.850000 0.550000 0.150000 9 6 2 0.006267 -0.018836 0.003502 17.085685 0.000000 -1.000000 0.035848 +0.950000 0.550000 0.150000 10 6 2 0.004042 -0.020290 0.018613 17.216775 0.000000 -1.000000 0.035748 +1.000000 0.550000 0.150000 11 6 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.035748 +0.000000 0.650000 0.150000 0 7 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.035391 +0.050000 0.650000 0.150000 1 7 2 -0.008068 0.009277 -0.008765 17.235521 0.000000 -1.000000 0.035391 +0.150000 0.650000 0.150000 2 7 2 -0.009010 0.006857 -0.018078 17.139766 0.000000 -1.000000 0.035744 +0.250000 0.650000 0.150000 3 7 2 0.002223 0.008776 -0.015911 17.138573 0.000000 -1.000000 0.035760 +0.350000 0.650000 0.150000 4 7 2 0.009170 0.008772 -0.011962 17.127528 0.000000 -1.000000 0.035622 +0.450000 0.650000 0.150000 5 7 2 0.015316 0.004513 -0.002082 17.123150 0.000000 -1.000000 0.035466 +0.550000 0.650000 0.150000 6 7 2 0.023070 0.004084 0.016018 17.078001 0.000000 -1.000000 0.035665 +0.650000 0.650000 0.150000 7 7 2 0.022194 -0.001986 0.036941 17.055825 0.000000 -1.000000 0.036327 +0.750000 0.650000 0.150000 8 7 2 0.014385 -0.002453 0.046859 17.090342 0.000000 -1.000000 0.036682 +0.850000 0.650000 0.150000 9 7 2 0.007353 -0.012594 0.026449 17.105212 0.000000 -1.000000 0.036532 +0.950000 0.650000 0.150000 10 7 2 0.001404 -0.027364 0.043977 17.269428 0.000000 -1.000000 0.036761 +1.000000 0.650000 0.150000 11 7 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.036761 +0.000000 0.750000 0.150000 0 8 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.036101 +0.050000 0.750000 0.150000 1 8 2 0.002865 0.000120 -0.051361 17.025316 0.000000 -1.000000 0.036101 +0.150000 0.750000 0.150000 2 8 2 0.010513 -0.004981 -0.037839 17.062766 0.000000 -1.000000 0.036263 +0.250000 0.750000 0.150000 3 8 2 0.017084 -0.000652 -0.021999 17.126927 0.000000 -1.000000 0.036014 +0.350000 0.750000 0.150000 4 8 2 0.020791 0.002383 -0.014248 17.144417 0.000000 -1.000000 0.035756 +0.450000 0.750000 0.150000 5 8 2 0.022825 0.001174 -0.007699 17.146716 0.000000 -1.000000 0.035537 +0.550000 0.750000 0.150000 6 8 2 0.023262 -0.001905 -0.000198 17.134844 0.000000 -1.000000 0.035493 +0.650000 0.750000 0.150000 7 8 2 0.026881 -0.000356 0.009694 17.097113 0.000000 -1.000000 0.035826 +0.750000 0.750000 0.150000 8 8 2 0.030411 0.000408 0.022002 17.070926 0.000000 -1.000000 0.036396 +0.850000 0.750000 0.150000 9 8 2 0.024207 -0.004431 0.034758 17.092015 0.000000 -1.000000 0.036977 +0.950000 0.750000 0.150000 10 8 2 0.008885 -0.032133 0.051019 17.272465 0.000000 -1.000000 0.037601 +1.000000 0.750000 0.150000 11 8 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.037601 +0.000000 0.850000 0.150000 0 9 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.038353 +0.050000 0.850000 0.150000 1 9 2 0.012632 -0.001663 -0.106592 16.746490 0.000000 -1.000000 0.038353 +0.150000 0.850000 0.150000 2 9 2 0.031907 -0.008500 -0.066650 16.901653 0.000000 -1.000000 0.037780 +0.250000 0.850000 0.150000 3 9 2 0.039640 -0.008210 -0.036618 17.026730 0.000000 -1.000000 0.036637 +0.350000 0.850000 0.150000 4 9 2 0.041295 -0.005416 -0.021824 17.092825 0.000000 -1.000000 0.036002 +0.450000 0.850000 0.150000 5 9 2 0.042979 -0.003619 -0.014702 17.120937 0.000000 -1.000000 0.035629 +0.550000 0.850000 0.150000 6 9 2 0.044780 -0.004784 -0.007920 17.129743 0.000000 -1.000000 0.035476 +0.650000 0.850000 0.150000 7 9 2 0.044619 -0.006067 0.001636 17.125083 0.000000 -1.000000 0.035686 +0.750000 0.850000 0.150000 8 9 2 0.040779 -0.003387 0.010301 17.110411 0.000000 -1.000000 0.036251 +0.850000 0.850000 0.150000 9 9 2 0.033526 -0.003594 0.017864 17.101839 0.000000 -1.000000 0.036994 +0.950000 0.850000 0.150000 10 9 2 0.014635 -0.027739 0.048013 17.261595 0.000000 -1.000000 0.038245 +1.000000 0.850000 0.150000 11 9 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.038245 +0.000000 0.950000 0.150000 0 10 2 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.039620 +0.050000 0.950000 0.150000 1 10 2 0.017996 0.000345 -0.075373 16.925897 0.000000 -1.000000 0.039620 +0.150000 0.950000 0.150000 2 10 2 0.045644 -0.004048 -0.054185 16.968464 0.000000 -1.000000 0.039025 +0.250000 0.950000 0.150000 3 10 2 0.058203 -0.005122 -0.038199 17.038971 0.000000 -1.000000 0.037320 +0.350000 0.950000 0.150000 4 10 2 0.061195 -0.004086 -0.026389 17.106880 0.000000 -1.000000 0.036264 +0.450000 0.950000 0.150000 5 10 2 0.061169 -0.002903 -0.018279 17.156406 0.000000 -1.000000 0.035701 +0.550000 0.950000 0.150000 6 10 2 0.061500 -0.003049 -0.011347 17.181943 0.000000 -1.000000 0.035460 +0.650000 0.950000 0.150000 7 10 2 0.063057 -0.003779 -0.001591 17.179723 0.000000 -1.000000 0.035565 +0.750000 0.950000 0.150000 8 10 2 0.063099 -0.002486 0.015071 17.178645 0.000000 -1.000000 0.036154 +0.850000 0.950000 0.150000 9 10 2 0.053768 -0.003146 0.033574 17.202577 0.000000 -1.000000 0.037310 +0.950000 0.950000 0.150000 10 10 2 0.022754 -0.011829 0.054423 17.308950 0.000000 -1.000000 0.038888 +1.000000 0.950000 0.150000 11 10 2 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.038888 +0.000000 1.000000 0.150000 0 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.150000 1 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.039620 +0.150000 1.000000 0.150000 2 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.039025 +0.250000 1.000000 0.150000 3 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.037320 +0.350000 1.000000 0.150000 4 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.036264 +0.450000 1.000000 0.150000 5 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.035701 +0.550000 1.000000 0.150000 6 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.035460 +0.650000 1.000000 0.150000 7 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.035565 +0.750000 1.000000 0.150000 8 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.036154 +0.850000 1.000000 0.150000 9 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.037310 +0.950000 1.000000 0.150000 10 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.038888 +1.000000 1.000000 0.150000 11 11 2 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.250000 0 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.250000 1 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.027307 +0.150000 0.000000 0.250000 2 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.026169 +0.250000 0.000000 0.250000 3 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.025520 +0.350000 0.000000 0.250000 4 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.025413 +0.450000 0.000000 0.250000 5 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.025426 +0.550000 0.000000 0.250000 6 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.025447 +0.650000 0.000000 0.250000 7 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.025527 +0.750000 0.000000 0.250000 8 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.025836 +0.850000 0.000000 0.250000 9 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.026743 +0.950000 0.000000 0.250000 10 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.027379 +1.000000 0.000000 0.250000 11 0 3 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.250000 0 1 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.027307 +0.050000 0.050000 0.250000 1 1 3 -0.016403 0.011418 0.075887 17.316632 0.000000 -1.000000 0.027307 +0.150000 0.050000 0.250000 2 1 3 -0.034004 0.001325 0.036898 17.231238 0.000000 -1.000000 0.026169 +0.250000 0.050000 0.250000 3 1 3 -0.030303 -0.006020 0.009831 17.244342 0.000000 -1.000000 0.025520 +0.350000 0.050000 0.250000 4 1 3 -0.021529 -0.009419 -0.003579 17.263121 0.000000 -1.000000 0.025413 +0.450000 0.050000 0.250000 5 1 3 -0.017293 -0.008492 -0.008291 17.277537 0.000000 -1.000000 0.025426 +0.550000 0.050000 0.250000 6 1 3 -0.019179 -0.007605 -0.014872 17.280538 0.000000 -1.000000 0.025447 +0.650000 0.050000 0.250000 7 1 3 -0.025486 -0.005769 -0.029602 17.247315 0.000000 -1.000000 0.025527 +0.750000 0.050000 0.250000 8 1 3 -0.033201 -0.001853 -0.054586 17.153892 0.000000 -1.000000 0.025836 +0.850000 0.050000 0.250000 9 1 3 -0.033829 -0.002159 -0.083000 17.006306 0.000000 -1.000000 0.026743 +0.950000 0.050000 0.250000 10 1 3 -0.015400 -0.009187 -0.108901 16.877723 0.000000 -1.000000 0.027379 +1.000000 0.050000 0.250000 11 1 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.027379 +0.000000 0.150000 0.250000 0 2 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.027018 +0.050000 0.150000 0.250000 1 2 3 -0.008357 0.025226 0.068742 17.270513 0.000000 -1.000000 0.027018 +0.150000 0.150000 0.250000 2 2 3 -0.014487 0.000586 0.024823 17.116293 0.000000 -1.000000 0.026157 +0.250000 0.150000 0.250000 3 2 3 -0.008411 -0.012400 0.008636 17.106610 0.000000 -1.000000 0.025717 +0.350000 0.150000 0.250000 4 2 3 -0.001279 -0.017704 -0.004259 17.108035 0.000000 -1.000000 0.025534 +0.450000 0.150000 0.250000 5 2 3 0.002171 -0.014951 -0.011289 17.133746 0.000000 -1.000000 0.025490 +0.550000 0.150000 0.250000 6 2 3 0.001450 -0.013678 -0.012018 17.170966 0.000000 -1.000000 0.025507 +0.650000 0.150000 0.250000 7 2 3 -0.001482 -0.014380 -0.008752 17.199635 0.000000 -1.000000 0.025534 +0.750000 0.150000 0.250000 8 2 3 -0.007411 -0.011142 -0.014257 17.203715 0.000000 -1.000000 0.025609 +0.850000 0.150000 0.250000 9 2 3 -0.014343 -0.010742 -0.048113 17.092360 0.000000 -1.000000 0.025895 +0.950000 0.150000 0.250000 10 2 3 -0.008695 -0.022057 -0.117097 16.761909 0.000000 -1.000000 0.026428 +1.000000 0.150000 0.250000 11 2 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.026428 +0.000000 0.250000 0.250000 0 3 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.026688 +0.050000 0.250000 0.250000 1 3 3 -0.008739 0.031108 0.062843 17.235440 0.000000 -1.000000 0.026688 +0.150000 0.250000 0.250000 2 3 3 -0.016121 -0.000593 0.025766 17.080389 0.000000 -1.000000 0.026208 +0.250000 0.250000 0.250000 3 3 3 -0.009695 -0.012207 0.014008 17.080329 0.000000 -1.000000 0.025954 +0.350000 0.250000 0.250000 4 3 3 -0.002225 -0.014519 0.003922 17.086604 0.000000 -1.000000 0.025710 +0.450000 0.250000 0.250000 5 3 3 -0.000638 -0.010438 -0.001428 17.119791 0.000000 -1.000000 0.025554 +0.550000 0.250000 0.250000 6 3 3 -0.001222 -0.009445 -0.008474 17.150070 0.000000 -1.000000 0.025566 +0.650000 0.250000 0.250000 7 3 3 0.000128 -0.015689 -0.007685 17.163570 0.000000 -1.000000 0.025607 +0.750000 0.250000 0.250000 8 3 3 -0.000053 -0.019042 -0.006316 17.186969 0.000000 -1.000000 0.025631 +0.850000 0.250000 0.250000 9 3 3 -0.003483 -0.017197 -0.021667 17.177640 0.000000 -1.000000 0.025693 +0.950000 0.250000 0.250000 10 3 3 -0.002806 -0.025817 -0.053419 17.047179 0.000000 -1.000000 0.025701 +1.000000 0.250000 0.250000 11 3 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.025701 +0.000000 0.350000 0.250000 0 4 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.026365 +0.050000 0.350000 0.250000 1 4 3 -0.004101 0.036274 0.064256 17.253621 0.000000 -1.000000 0.026365 +0.150000 0.350000 0.250000 2 4 3 -0.009248 0.008164 0.030005 17.089501 0.000000 -1.000000 0.026246 +0.250000 0.350000 0.250000 3 4 3 -0.009429 -0.002073 0.038794 17.076800 0.000000 -1.000000 0.026241 +0.350000 0.350000 0.250000 4 4 3 -0.006977 -0.007790 0.020807 17.070671 0.000000 -1.000000 0.025970 +0.450000 0.350000 0.250000 5 4 3 -0.006182 -0.009882 0.020381 17.108260 0.000000 -1.000000 0.025609 +0.550000 0.350000 0.250000 6 4 3 -0.005388 -0.007846 -0.003532 17.121229 0.000000 -1.000000 0.025529 +0.650000 0.350000 0.250000 7 4 3 -0.001339 -0.013932 -0.011448 17.125561 0.000000 -1.000000 0.025609 +0.750000 0.350000 0.250000 8 4 3 0.001734 -0.019280 -0.010521 17.151706 0.000000 -1.000000 0.025652 +0.850000 0.350000 0.250000 9 4 3 0.005185 -0.018362 -0.015924 17.167816 0.000000 -1.000000 0.025645 +0.950000 0.350000 0.250000 10 4 3 0.004013 -0.027307 0.008464 17.258320 0.000000 -1.000000 0.025550 +1.000000 0.350000 0.250000 11 4 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.025550 +0.000000 0.450000 0.250000 0 5 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.025875 +0.050000 0.450000 0.250000 1 5 3 -0.003727 0.035355 0.044629 17.240696 0.000000 -1.000000 0.025875 +0.150000 0.450000 0.250000 2 5 3 -0.009289 0.020417 0.004540 17.077855 0.000000 -1.000000 0.025939 +0.250000 0.450000 0.250000 3 5 3 -0.009478 0.013613 0.005854 17.066845 0.000000 -1.000000 0.026021 +0.350000 0.450000 0.250000 4 5 3 0.000054 0.007628 0.022093 17.062234 0.000000 -1.000000 0.026192 +0.450000 0.450000 0.250000 5 5 3 0.000010 -0.000991 0.079565 17.111818 0.000000 -1.000000 0.025932 +0.550000 0.450000 0.250000 6 5 3 -0.006620 -0.009772 0.028440 17.082629 0.000000 -1.000000 0.025567 +0.650000 0.450000 0.250000 7 5 3 -0.001711 -0.014468 -0.002895 17.077702 0.000000 -1.000000 0.025594 +0.750000 0.450000 0.250000 8 5 3 0.003853 -0.019714 -0.011541 17.104730 0.000000 -1.000000 0.025683 +0.850000 0.450000 0.250000 9 5 3 0.008843 -0.021967 -0.015655 17.123202 0.000000 -1.000000 0.025702 +0.950000 0.450000 0.250000 10 5 3 0.005939 -0.029949 0.016093 17.243869 0.000000 -1.000000 0.025621 +1.000000 0.450000 0.250000 11 5 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.025621 +0.000000 0.550000 0.250000 0 6 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.025532 +0.050000 0.550000 0.250000 1 6 3 -0.006192 0.029943 0.020409 17.228701 0.000000 -1.000000 0.025532 +0.150000 0.550000 0.250000 2 6 3 -0.010235 0.022443 -0.012882 17.108984 0.000000 -1.000000 0.025672 +0.250000 0.550000 0.250000 3 6 3 -0.005413 0.018760 -0.015242 17.115156 0.000000 -1.000000 0.025749 +0.350000 0.550000 0.250000 4 6 3 0.002702 0.018200 -0.010681 17.098374 0.000000 -1.000000 0.025762 +0.450000 0.550000 0.250000 5 6 3 0.009105 0.012150 0.021705 17.080917 0.000000 -1.000000 0.025674 +0.550000 0.550000 0.250000 6 6 3 0.003670 0.000125 0.081595 17.111413 0.000000 -1.000000 0.025862 +0.650000 0.550000 0.250000 7 6 3 0.001160 -0.010084 0.032533 17.064586 0.000000 -1.000000 0.025872 +0.750000 0.550000 0.250000 8 6 3 0.007372 -0.016655 0.005778 17.066320 0.000000 -1.000000 0.025897 +0.850000 0.550000 0.250000 9 6 3 0.010266 -0.022656 -0.002279 17.081644 0.000000 -1.000000 0.025933 +0.950000 0.550000 0.250000 10 6 3 0.005417 -0.032589 0.031474 17.246403 0.000000 -1.000000 0.025878 +1.000000 0.550000 0.250000 11 6 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.025878 +0.000000 0.650000 0.250000 0 7 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.025504 +0.050000 0.650000 0.250000 1 7 3 -0.005533 0.025568 0.011416 17.244139 0.000000 -1.000000 0.025504 +0.150000 0.650000 0.250000 2 7 3 -0.006911 0.017331 -0.018687 17.143655 0.000000 -1.000000 0.025659 +0.250000 0.650000 0.250000 3 7 3 -0.000936 0.016969 -0.017105 17.161481 0.000000 -1.000000 0.025711 +0.350000 0.650000 0.250000 4 7 3 0.003610 0.017215 -0.015362 17.139972 0.000000 -1.000000 0.025662 +0.450000 0.650000 0.250000 5 7 3 0.007812 0.012988 -0.004650 17.122565 0.000000 -1.000000 0.025548 +0.550000 0.650000 0.250000 6 7 3 0.009418 0.009856 0.016853 17.099340 0.000000 -1.000000 0.025546 +0.650000 0.650000 0.250000 7 7 3 0.009141 0.002049 0.029831 17.065371 0.000000 -1.000000 0.025889 +0.750000 0.650000 0.250000 8 7 3 0.010387 -0.003822 0.033510 17.074777 0.000000 -1.000000 0.026212 +0.850000 0.650000 0.250000 9 7 3 0.009798 -0.013814 0.021551 17.084170 0.000000 -1.000000 0.026281 +0.950000 0.650000 0.250000 10 7 3 0.003778 -0.034461 0.054709 17.274433 0.000000 -1.000000 0.026348 +1.000000 0.650000 0.250000 11 7 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.026348 +0.000000 0.750000 0.250000 0 8 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.025710 +0.050000 0.750000 0.250000 1 8 3 0.003126 0.023603 -0.052812 17.034811 0.000000 -1.000000 0.025710 +0.150000 0.750000 0.250000 2 8 3 0.006626 0.016399 -0.040905 17.088118 0.000000 -1.000000 0.025841 +0.250000 0.750000 0.250000 3 8 3 0.005462 0.016686 -0.017281 17.180313 0.000000 -1.000000 0.025758 +0.350000 0.750000 0.250000 4 8 3 0.004452 0.017154 -0.012420 17.165823 0.000000 -1.000000 0.025652 +0.450000 0.750000 0.250000 5 8 3 0.003935 0.014010 -0.006679 17.152089 0.000000 -1.000000 0.025546 +0.550000 0.750000 0.250000 6 8 3 0.002033 0.011382 -0.000619 17.124280 0.000000 -1.000000 0.025491 +0.650000 0.750000 0.250000 7 8 3 0.004217 0.009719 0.006894 17.086047 0.000000 -1.000000 0.025647 +0.750000 0.750000 0.250000 8 8 3 0.010457 0.006486 0.019586 17.072312 0.000000 -1.000000 0.025979 +0.850000 0.750000 0.250000 9 8 3 0.012533 -0.002273 0.034307 17.089355 0.000000 -1.000000 0.026320 +0.950000 0.750000 0.250000 10 8 3 0.005705 -0.033596 0.063973 17.275721 0.000000 -1.000000 0.026707 +1.000000 0.750000 0.250000 11 8 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.026707 +0.000000 0.850000 0.250000 0 9 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.026634 +0.050000 0.850000 0.250000 1 9 3 0.008881 0.018495 -0.125761 16.737743 0.000000 -1.000000 0.026634 +0.150000 0.850000 0.250000 2 9 3 0.018049 0.013455 -0.069220 16.988527 0.000000 -1.000000 0.026269 +0.250000 0.850000 0.250000 3 9 3 0.014309 0.012717 -0.027135 17.163075 0.000000 -1.000000 0.025817 +0.350000 0.850000 0.250000 4 9 3 0.009186 0.014924 -0.015553 17.188646 0.000000 -1.000000 0.025625 +0.450000 0.850000 0.250000 5 9 3 0.007874 0.015518 -0.012424 17.175125 0.000000 -1.000000 0.025482 +0.550000 0.850000 0.250000 6 9 3 0.007529 0.014194 -0.007455 17.157834 0.000000 -1.000000 0.025391 +0.650000 0.850000 0.250000 7 9 3 0.008735 0.011399 0.001635 17.130734 0.000000 -1.000000 0.025434 +0.750000 0.850000 0.250000 8 9 3 0.011981 0.006958 0.013703 17.108427 0.000000 -1.000000 0.025770 +0.850000 0.850000 0.250000 9 9 3 0.016014 -0.001185 0.026096 17.105619 0.000000 -1.000000 0.026275 +0.950000 0.850000 0.250000 10 9 3 0.009069 -0.029069 0.064447 17.274864 0.000000 -1.000000 0.027125 +1.000000 0.850000 0.250000 11 9 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.027125 +0.000000 0.950000 0.250000 0 10 3 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.027596 +0.050000 0.950000 0.250000 1 10 3 0.012580 0.006897 -0.098712 16.902494 0.000000 -1.000000 0.027596 +0.150000 0.950000 0.250000 2 10 3 0.029364 0.004342 -0.067756 17.029083 0.000000 -1.000000 0.026999 +0.250000 0.950000 0.250000 3 10 3 0.032088 0.004099 -0.040656 17.159237 0.000000 -1.000000 0.026102 +0.350000 0.950000 0.250000 4 10 3 0.028708 0.005967 -0.022701 17.241995 0.000000 -1.000000 0.025700 +0.450000 0.950000 0.250000 5 10 3 0.026528 0.007259 -0.013538 17.278396 0.000000 -1.000000 0.025499 +0.550000 0.950000 0.250000 6 10 3 0.027286 0.007245 -0.008635 17.289727 0.000000 -1.000000 0.025368 +0.650000 0.950000 0.250000 7 10 3 0.030698 0.006199 -0.002658 17.285417 0.000000 -1.000000 0.025313 +0.750000 0.950000 0.250000 8 10 3 0.036467 0.003117 0.013385 17.249337 0.000000 -1.000000 0.025583 +0.850000 0.950000 0.250000 9 10 3 0.037766 -0.002290 0.038501 17.220840 0.000000 -1.000000 0.026351 +0.950000 0.950000 0.250000 10 10 3 0.017835 -0.012935 0.070258 17.307216 0.000000 -1.000000 0.027465 +1.000000 0.950000 0.250000 11 10 3 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.027465 +0.000000 1.000000 0.250000 0 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.250000 1 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.027596 +0.150000 1.000000 0.250000 2 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.026999 +0.250000 1.000000 0.250000 3 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.026102 +0.350000 1.000000 0.250000 4 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.025700 +0.450000 1.000000 0.250000 5 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.025499 +0.550000 1.000000 0.250000 6 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.025368 +0.650000 1.000000 0.250000 7 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.025313 +0.750000 1.000000 0.250000 8 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.025583 +0.850000 1.000000 0.250000 9 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.026351 +0.950000 1.000000 0.250000 10 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.027465 +1.000000 1.000000 0.250000 11 11 3 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.350000 0 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.350000 1 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.016412 +0.150000 0.000000 0.350000 2 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015811 +0.250000 0.000000 0.350000 3 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015634 +0.350000 0.000000 0.350000 4 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015647 +0.450000 0.000000 0.350000 5 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015653 +0.550000 0.000000 0.350000 6 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015658 +0.650000 0.000000 0.350000 7 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015681 +0.750000 0.000000 0.350000 8 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.015732 +0.850000 0.000000 0.350000 9 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.016115 +0.950000 0.000000 0.350000 10 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.016639 +1.000000 0.000000 0.350000 11 0 4 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.350000 0 1 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.016412 +0.050000 0.050000 0.350000 1 1 4 -0.013203 0.011500 0.082579 17.320985 0.000000 -1.000000 0.016412 +0.150000 0.050000 0.350000 2 1 4 -0.025421 -0.001521 0.037315 17.249918 0.000000 -1.000000 0.015811 +0.250000 0.050000 0.350000 3 1 4 -0.020041 -0.008444 0.015004 17.250529 0.000000 -1.000000 0.015634 +0.350000 0.050000 0.350000 4 1 4 -0.012788 -0.008921 0.008033 17.267894 0.000000 -1.000000 0.015647 +0.450000 0.050000 0.350000 5 1 4 -0.009689 -0.007219 0.006811 17.295592 0.000000 -1.000000 0.015653 +0.550000 0.050000 0.350000 6 1 4 -0.010554 -0.006690 0.002776 17.312243 0.000000 -1.000000 0.015658 +0.650000 0.050000 0.350000 7 1 4 -0.014123 -0.006843 -0.010477 17.299772 0.000000 -1.000000 0.015681 +0.750000 0.050000 0.350000 8 1 4 -0.020236 -0.005318 -0.040111 17.230483 0.000000 -1.000000 0.015732 +0.850000 0.050000 0.350000 9 1 4 -0.024012 -0.006242 -0.077509 17.071140 0.000000 -1.000000 0.016115 +0.950000 0.050000 0.350000 10 1 4 -0.012068 -0.012819 -0.114367 16.865696 0.000000 -1.000000 0.016639 +1.000000 0.050000 0.350000 11 1 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.016639 +0.000000 0.150000 0.350000 0 2 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.016314 +0.050000 0.150000 0.350000 1 2 4 -0.005586 0.025326 0.077975 17.283841 0.000000 -1.000000 0.016314 +0.150000 0.150000 0.350000 2 2 4 -0.007072 -0.004742 0.022272 17.105811 0.000000 -1.000000 0.015864 +0.250000 0.150000 0.350000 3 2 4 0.002230 -0.016556 -0.000380 17.086694 0.000000 -1.000000 0.015746 +0.350000 0.150000 0.350000 4 2 4 0.008979 -0.017114 -0.010951 17.114811 0.000000 -1.000000 0.015661 +0.450000 0.150000 0.350000 5 2 4 0.009474 -0.014333 -0.012545 17.142547 0.000000 -1.000000 0.015626 +0.550000 0.150000 0.350000 6 2 4 0.006194 -0.013072 -0.010746 17.181094 0.000000 -1.000000 0.015628 +0.650000 0.150000 0.350000 7 2 4 0.002920 -0.014492 -0.002023 17.211837 0.000000 -1.000000 0.015652 +0.750000 0.150000 0.350000 8 2 4 -0.000078 -0.014381 0.002752 17.242723 0.000000 -1.000000 0.015678 +0.850000 0.150000 0.350000 9 2 4 -0.007021 -0.017081 -0.029062 17.173502 0.000000 -1.000000 0.015751 +0.950000 0.150000 0.350000 10 2 4 -0.006006 -0.030609 -0.123149 16.708700 0.000000 -1.000000 0.016125 +1.000000 0.150000 0.350000 11 2 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.016125 +0.000000 0.250000 0.350000 0 3 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.016146 +0.050000 0.250000 0.350000 1 3 4 -0.005669 0.029670 0.071751 17.254174 0.000000 -1.000000 0.016146 +0.150000 0.250000 0.350000 2 3 4 -0.008411 -0.004299 0.018465 17.077823 0.000000 -1.000000 0.015976 +0.250000 0.250000 0.350000 3 3 4 0.000862 -0.012967 -0.001215 17.073360 0.000000 -1.000000 0.015950 +0.350000 0.250000 0.350000 4 3 4 0.009207 -0.013319 -0.005596 17.082456 0.000000 -1.000000 0.015821 +0.450000 0.250000 0.350000 5 3 4 0.009076 -0.012655 -0.002539 17.105840 0.000000 -1.000000 0.015684 +0.550000 0.250000 0.350000 6 3 4 0.005513 -0.011827 -0.010920 17.146230 0.000000 -1.000000 0.015640 +0.650000 0.250000 0.350000 7 3 4 0.003370 -0.015532 -0.009399 17.190697 0.000000 -1.000000 0.015641 +0.750000 0.250000 0.350000 8 3 4 -0.000589 -0.017881 -0.001555 17.226582 0.000000 -1.000000 0.015674 +0.850000 0.250000 0.350000 9 3 4 -0.007176 -0.019069 -0.018781 17.173938 0.000000 -1.000000 0.015779 +0.950000 0.250000 0.350000 10 3 4 -0.005258 -0.031754 -0.065237 16.928235 0.000000 -1.000000 0.015918 +1.000000 0.250000 0.350000 11 3 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.015918 +0.000000 0.350000 0.350000 0 4 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.016061 +0.050000 0.350000 0.350000 1 4 4 -0.005070 0.034294 0.069151 17.254128 0.000000 -1.000000 0.016061 +0.150000 0.350000 0.350000 2 4 4 -0.009287 0.006701 0.013472 17.077377 0.000000 -1.000000 0.016109 +0.250000 0.350000 0.350000 3 4 4 -0.001605 0.001197 0.010619 17.069852 0.000000 -1.000000 0.016226 +0.350000 0.350000 0.350000 4 4 4 0.005033 -0.003969 0.008447 17.070824 0.000000 -1.000000 0.015994 +0.450000 0.350000 0.350000 5 4 4 0.002822 -0.010765 0.024797 17.107505 0.000000 -1.000000 0.015763 +0.550000 0.350000 0.350000 6 4 4 0.001475 -0.011896 -0.003688 17.112798 0.000000 -1.000000 0.015614 +0.650000 0.350000 0.350000 7 4 4 0.002826 -0.016443 -0.014144 17.155133 0.000000 -1.000000 0.015636 +0.750000 0.350000 0.350000 8 4 4 0.000872 -0.017598 -0.008771 17.208072 0.000000 -1.000000 0.015662 +0.850000 0.350000 0.350000 9 4 4 -0.002555 -0.015348 -0.017955 17.192475 0.000000 -1.000000 0.015662 +0.950000 0.350000 0.350000 10 4 4 -0.001674 -0.029064 0.013346 17.266927 0.000000 -1.000000 0.015734 +1.000000 0.350000 0.350000 11 4 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.015734 +0.000000 0.450000 0.350000 0 5 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.015857 +0.050000 0.450000 0.350000 1 5 4 -0.004482 0.037025 0.055312 17.252488 0.000000 -1.000000 0.015857 +0.150000 0.450000 0.350000 2 5 4 -0.007793 0.018434 -0.002047 17.104877 0.000000 -1.000000 0.015878 +0.250000 0.450000 0.350000 3 5 4 -0.002556 0.014187 -0.008047 17.126502 0.000000 -1.000000 0.015974 +0.350000 0.450000 0.350000 4 5 4 0.004658 0.007333 -0.004701 17.108547 0.000000 -1.000000 0.016010 +0.450000 0.450000 0.350000 5 5 4 0.003296 -0.001085 0.071823 17.107897 0.000000 -1.000000 0.015923 +0.550000 0.450000 0.350000 6 5 4 -0.000086 -0.012000 0.025925 17.091008 0.000000 -1.000000 0.015672 +0.650000 0.450000 0.350000 7 5 4 0.003145 -0.017002 -0.007968 17.102292 0.000000 -1.000000 0.015685 +0.750000 0.450000 0.350000 8 5 4 0.004146 -0.017809 -0.011491 17.163554 0.000000 -1.000000 0.015721 +0.850000 0.450000 0.350000 9 5 4 0.005071 -0.016387 -0.016096 17.168265 0.000000 -1.000000 0.015705 +0.950000 0.450000 0.350000 10 5 4 0.003548 -0.032440 0.029046 17.263711 0.000000 -1.000000 0.015730 +1.000000 0.450000 0.350000 11 5 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.015730 +0.000000 0.550000 0.350000 0 6 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.015662 +0.050000 0.550000 0.350000 1 6 4 -0.003876 0.034913 0.035532 17.251320 0.000000 -1.000000 0.015662 +0.150000 0.550000 0.350000 2 6 4 -0.005432 0.018758 -0.012445 17.149810 0.000000 -1.000000 0.015656 +0.250000 0.550000 0.350000 3 6 4 -0.000751 0.014524 -0.017571 17.182173 0.000000 -1.000000 0.015765 +0.350000 0.550000 0.350000 4 6 4 0.003053 0.011228 -0.016279 17.161261 0.000000 -1.000000 0.015810 +0.450000 0.550000 0.350000 5 6 4 0.005350 0.009986 0.015849 17.106893 0.000000 -1.000000 0.015824 +0.550000 0.550000 0.350000 6 6 4 0.003722 -0.000867 0.069517 17.109007 0.000000 -1.000000 0.015936 +0.650000 0.550000 0.350000 7 6 4 0.003800 -0.011083 0.015137 17.071480 0.000000 -1.000000 0.015907 +0.750000 0.550000 0.350000 8 6 4 0.007348 -0.015205 -0.004115 17.104608 0.000000 -1.000000 0.015918 +0.850000 0.550000 0.350000 9 6 4 0.009089 -0.017615 -0.006308 17.120780 0.000000 -1.000000 0.015901 +0.950000 0.550000 0.350000 10 6 4 0.004921 -0.035194 0.043736 17.260995 0.000000 -1.000000 0.015905 +1.000000 0.550000 0.350000 11 6 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.015905 +0.000000 0.650000 0.350000 0 7 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.015649 +0.050000 0.650000 0.350000 1 7 4 0.000158 0.029462 0.021565 17.267013 0.000000 -1.000000 0.015649 +0.150000 0.650000 0.350000 2 7 4 0.001585 0.016606 -0.021754 17.144261 0.000000 -1.000000 0.015608 +0.250000 0.650000 0.350000 3 7 4 0.002717 0.013086 -0.018270 17.203816 0.000000 -1.000000 0.015741 +0.350000 0.650000 0.350000 4 7 4 0.000845 0.010154 -0.015586 17.183547 0.000000 -1.000000 0.015741 +0.450000 0.650000 0.350000 5 7 4 -0.000094 0.011494 -0.005242 17.123560 0.000000 -1.000000 0.015735 +0.550000 0.650000 0.350000 6 7 4 0.000083 0.010746 0.016946 17.099194 0.000000 -1.000000 0.015794 +0.650000 0.650000 0.350000 7 7 4 0.001724 0.002339 0.013362 17.070131 0.000000 -1.000000 0.016007 +0.750000 0.650000 0.350000 8 7 4 0.007394 -0.003325 0.010308 17.072732 0.000000 -1.000000 0.016153 +0.850000 0.650000 0.350000 9 7 4 0.009858 -0.010288 0.011276 17.083432 0.000000 -1.000000 0.016126 +0.950000 0.650000 0.350000 10 7 4 0.004457 -0.034723 0.062420 17.276465 0.000000 -1.000000 0.016141 +1.000000 0.650000 0.350000 11 7 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.016141 +0.000000 0.750000 0.350000 0 8 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.015966 +0.050000 0.750000 0.350000 1 8 4 0.007552 0.030482 -0.067320 16.912933 0.000000 -1.000000 0.015966 +0.150000 0.750000 0.350000 2 8 4 0.012710 0.021977 -0.045686 17.046220 0.000000 -1.000000 0.015908 +0.250000 0.750000 0.350000 3 8 4 0.006079 0.015794 -0.014459 17.206429 0.000000 -1.000000 0.015816 +0.350000 0.750000 0.350000 4 8 4 -0.001683 0.011777 -0.011761 17.187655 0.000000 -1.000000 0.015745 +0.450000 0.750000 0.350000 5 8 4 -0.005523 0.012923 -0.009465 17.136247 0.000000 -1.000000 0.015714 +0.550000 0.750000 0.350000 6 8 4 -0.005869 0.014028 -0.004152 17.102248 0.000000 -1.000000 0.015722 +0.650000 0.750000 0.350000 7 8 4 -0.003642 0.012921 -0.002052 17.078570 0.000000 -1.000000 0.015822 +0.750000 0.750000 0.350000 8 8 4 0.002855 0.009377 0.007275 17.074854 0.000000 -1.000000 0.015977 +0.850000 0.750000 0.350000 9 8 4 0.007784 0.000649 0.025724 17.085082 0.000000 -1.000000 0.016082 +0.950000 0.750000 0.350000 10 8 4 0.004238 -0.032499 0.071354 17.281957 0.000000 -1.000000 0.016266 +1.000000 0.750000 0.350000 11 8 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.016266 +0.000000 0.850000 0.350000 0 9 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.016275 +0.050000 0.850000 0.350000 1 9 4 0.007150 0.027715 -0.130092 16.702719 0.000000 -1.000000 0.016275 +0.150000 0.850000 0.350000 2 9 4 0.012727 0.022225 -0.058448 17.035278 0.000000 -1.000000 0.015994 +0.250000 0.850000 0.350000 3 9 4 0.006063 0.016392 -0.011704 17.218401 0.000000 -1.000000 0.015802 +0.350000 0.850000 0.350000 4 9 4 -0.002006 0.013697 -0.008843 17.202062 0.000000 -1.000000 0.015739 +0.450000 0.850000 0.350000 5 9 4 -0.005741 0.014867 -0.010773 17.160750 0.000000 -1.000000 0.015681 +0.550000 0.850000 0.350000 6 9 4 -0.006277 0.016346 -0.008263 17.127967 0.000000 -1.000000 0.015655 +0.650000 0.850000 0.350000 7 9 4 -0.003769 0.016624 -0.003733 17.100326 0.000000 -1.000000 0.015678 +0.750000 0.850000 0.350000 8 9 4 0.002030 0.013334 0.008728 17.094721 0.000000 -1.000000 0.015778 +0.850000 0.850000 0.350000 9 9 4 0.008883 0.002737 0.026475 17.104126 0.000000 -1.000000 0.015960 +0.950000 0.850000 0.350000 10 9 4 0.006113 -0.028310 0.073483 17.286757 0.000000 -1.000000 0.016488 +1.000000 0.850000 0.350000 11 9 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.016488 +0.000000 0.950000 0.350000 0 10 4 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.016757 +0.050000 0.950000 0.350000 1 10 4 0.008623 0.010356 -0.102666 16.898157 0.000000 -1.000000 0.016757 +0.150000 0.950000 0.350000 2 10 4 0.018731 0.008751 -0.060358 17.099060 0.000000 -1.000000 0.016308 +0.250000 0.950000 0.350000 3 10 4 0.018252 0.007296 -0.025824 17.239566 0.000000 -1.000000 0.015902 +0.350000 0.950000 0.350000 4 10 4 0.014348 0.007022 -0.005879 17.301904 0.000000 -1.000000 0.015775 +0.450000 0.950000 0.350000 5 10 4 0.012083 0.007591 0.001910 17.310896 0.000000 -1.000000 0.015714 +0.550000 0.950000 0.350000 6 10 4 0.013204 0.008381 0.004505 17.298640 0.000000 -1.000000 0.015672 +0.650000 0.950000 0.350000 7 10 4 0.017683 0.008683 0.006815 17.278555 0.000000 -1.000000 0.015631 +0.750000 0.950000 0.350000 8 10 4 0.024491 0.006807 0.016143 17.260144 0.000000 -1.000000 0.015652 +0.850000 0.950000 0.350000 9 10 4 0.028457 0.000146 0.038266 17.246312 0.000000 -1.000000 0.015938 +0.950000 0.950000 0.350000 10 10 4 0.014324 -0.012679 0.076809 17.313000 0.000000 -1.000000 0.016613 +1.000000 0.950000 0.350000 11 10 4 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.016613 +0.000000 1.000000 0.350000 0 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.350000 1 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.016757 +0.150000 1.000000 0.350000 2 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.016308 +0.250000 1.000000 0.350000 3 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015902 +0.350000 1.000000 0.350000 4 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015775 +0.450000 1.000000 0.350000 5 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015714 +0.550000 1.000000 0.350000 6 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015672 +0.650000 1.000000 0.350000 7 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015631 +0.750000 1.000000 0.350000 8 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015652 +0.850000 1.000000 0.350000 9 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.015938 +0.950000 1.000000 0.350000 10 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.016613 +1.000000 1.000000 0.350000 11 11 4 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.450000 0 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.450000 1 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.006071 +0.150000 0.000000 0.450000 2 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005723 +0.250000 0.000000 0.450000 3 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005639 +0.350000 0.000000 0.450000 4 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005677 +0.450000 0.000000 0.450000 5 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005742 +0.550000 0.000000 0.450000 6 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005794 +0.650000 0.000000 0.450000 7 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005820 +0.750000 0.000000 0.450000 8 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.005828 +0.850000 0.000000 0.450000 9 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.006028 +0.950000 0.000000 0.450000 10 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.006472 +1.000000 0.000000 0.450000 11 0 5 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.450000 0 1 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.006071 +0.050000 0.050000 0.450000 1 1 5 -0.010957 0.011133 0.084107 17.330085 0.000000 -1.000000 0.006071 +0.150000 0.050000 0.450000 2 1 5 -0.020332 -0.002310 0.038583 17.269958 0.000000 -1.000000 0.005723 +0.250000 0.050000 0.450000 3 1 5 -0.015945 -0.005693 0.021942 17.284547 0.000000 -1.000000 0.005639 +0.350000 0.050000 0.450000 4 1 5 -0.011796 -0.005736 0.018487 17.306818 0.000000 -1.000000 0.005677 +0.450000 0.050000 0.450000 5 1 5 -0.010352 -0.005192 0.018874 17.327902 0.000000 -1.000000 0.005742 +0.550000 0.050000 0.450000 6 1 5 -0.010732 -0.005125 0.016173 17.341379 0.000000 -1.000000 0.005794 +0.650000 0.050000 0.450000 7 1 5 -0.012213 -0.004900 0.004721 17.333952 0.000000 -1.000000 0.005820 +0.750000 0.050000 0.450000 8 1 5 -0.015490 -0.004887 -0.023984 17.281127 0.000000 -1.000000 0.005828 +0.850000 0.050000 0.450000 9 1 5 -0.018500 -0.007260 -0.063154 17.134508 0.000000 -1.000000 0.006028 +0.950000 0.050000 0.450000 10 1 5 -0.009617 -0.013751 -0.109487 16.863709 0.000000 -1.000000 0.006472 +1.000000 0.050000 0.450000 11 1 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006472 +0.000000 0.150000 0.450000 0 2 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.006030 +0.050000 0.150000 0.450000 1 2 5 -0.003790 0.024976 0.082319 17.296451 0.000000 -1.000000 0.006030 +0.150000 0.150000 0.450000 2 2 5 -0.001934 -0.004717 0.014331 17.117366 0.000000 -1.000000 0.005723 +0.250000 0.150000 0.450000 3 2 5 0.004451 -0.009356 -0.008682 17.197440 0.000000 -1.000000 0.005628 +0.350000 0.150000 0.450000 4 2 5 0.004628 -0.011827 -0.012310 17.218005 0.000000 -1.000000 0.005625 +0.450000 0.150000 0.450000 5 2 5 0.004002 -0.012005 -0.009919 17.201466 0.000000 -1.000000 0.005675 +0.550000 0.150000 0.450000 6 2 5 0.003685 -0.012179 -0.006648 17.222821 0.000000 -1.000000 0.005715 +0.650000 0.150000 0.450000 7 2 5 0.002162 -0.011804 0.003088 17.257424 0.000000 -1.000000 0.005739 +0.750000 0.150000 0.450000 8 2 5 0.000604 -0.012519 0.011474 17.278543 0.000000 -1.000000 0.005773 +0.850000 0.150000 0.450000 9 2 5 -0.003688 -0.018146 -0.011857 17.237921 0.000000 -1.000000 0.005795 +0.950000 0.150000 0.450000 10 2 5 -0.003845 -0.033710 -0.121829 16.682100 0.000000 -1.000000 0.006143 +1.000000 0.150000 0.450000 11 2 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006143 +0.000000 0.250000 0.450000 0 3 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.005886 +0.050000 0.250000 0.450000 1 3 5 -0.003292 0.029099 0.077285 17.272700 0.000000 -1.000000 0.005886 +0.150000 0.250000 0.450000 2 3 5 -0.000942 -0.000761 0.003704 17.122465 0.000000 -1.000000 0.005771 +0.250000 0.250000 0.450000 3 3 5 0.003820 -0.006090 -0.011175 17.219152 0.000000 -1.000000 0.005711 +0.350000 0.250000 0.450000 4 3 5 0.004201 -0.011323 -0.012787 17.181434 0.000000 -1.000000 0.005723 +0.450000 0.250000 0.450000 5 3 5 0.005118 -0.013680 -0.001590 17.143515 0.000000 -1.000000 0.005728 +0.550000 0.250000 0.450000 6 3 5 0.005349 -0.014807 -0.010313 17.172588 0.000000 -1.000000 0.005740 +0.650000 0.250000 0.450000 7 3 5 0.004053 -0.014159 -0.006238 17.243232 0.000000 -1.000000 0.005726 +0.750000 0.250000 0.450000 8 3 5 -0.000890 -0.014881 0.004127 17.278230 0.000000 -1.000000 0.005773 +0.850000 0.250000 0.450000 9 3 5 -0.007316 -0.021103 -0.015371 17.184686 0.000000 -1.000000 0.005861 +0.950000 0.250000 0.450000 10 3 5 -0.005335 -0.036742 -0.082838 16.738493 0.000000 -1.000000 0.006128 +1.000000 0.250000 0.450000 11 3 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006128 +0.000000 0.350000 0.450000 0 4 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.005845 +0.050000 0.350000 0.450000 1 4 5 -0.003149 0.032456 0.072823 17.266330 0.000000 -1.000000 0.005845 +0.150000 0.350000 0.450000 2 4 5 -0.003305 0.007034 -0.002972 17.167329 0.000000 -1.000000 0.005775 +0.250000 0.350000 0.450000 3 4 5 -0.001908 -0.000880 -0.009492 17.231580 0.000000 -1.000000 0.005817 +0.350000 0.350000 0.450000 4 4 5 0.000629 -0.003921 -0.008323 17.115983 0.000000 -1.000000 0.005919 +0.450000 0.350000 0.450000 5 4 5 0.003977 -0.011481 0.025026 17.109370 0.000000 -1.000000 0.005867 +0.550000 0.350000 0.450000 6 4 5 0.004907 -0.015578 -0.005002 17.122147 0.000000 -1.000000 0.005799 +0.650000 0.350000 0.450000 7 4 5 0.004858 -0.014155 -0.012747 17.217328 0.000000 -1.000000 0.005759 +0.750000 0.350000 0.450000 8 4 5 -0.001920 -0.012543 -0.003126 17.271644 0.000000 -1.000000 0.005805 +0.850000 0.350000 0.450000 9 4 5 -0.010940 -0.015672 -0.019037 17.180024 0.000000 -1.000000 0.005928 +0.950000 0.350000 0.450000 10 4 5 -0.007473 -0.028791 0.000552 17.193613 0.000000 -1.000000 0.006169 +1.000000 0.350000 0.450000 11 4 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006169 +0.000000 0.450000 0.450000 0 5 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.005823 +0.050000 0.450000 0.450000 1 5 5 -0.001780 0.034665 0.061186 17.268195 0.000000 -1.000000 0.005823 +0.150000 0.450000 0.450000 2 5 5 -0.002260 0.011350 -0.007966 17.177670 0.000000 -1.000000 0.005675 +0.250000 0.450000 0.450000 3 5 5 -0.000029 0.004279 -0.016315 17.231761 0.000000 -1.000000 0.005809 +0.350000 0.450000 0.450000 4 5 5 0.002659 0.003695 -0.015704 17.178364 0.000000 -1.000000 0.005902 +0.450000 0.450000 0.450000 5 5 5 0.002590 -0.001699 0.061261 17.108350 0.000000 -1.000000 0.005993 +0.550000 0.450000 0.450000 6 5 5 0.004250 -0.012771 0.017519 17.098565 0.000000 -1.000000 0.005932 +0.650000 0.450000 0.450000 7 5 5 0.007114 -0.012034 -0.011336 17.166553 0.000000 -1.000000 0.005836 +0.750000 0.450000 0.450000 8 5 5 0.002037 -0.009008 -0.007275 17.249353 0.000000 -1.000000 0.005816 +0.850000 0.450000 0.450000 9 5 5 -0.003559 -0.010404 -0.015342 17.191052 0.000000 -1.000000 0.005749 +0.950000 0.450000 0.450000 10 5 5 -0.002350 -0.028632 0.037096 17.286378 0.000000 -1.000000 0.005953 +1.000000 0.450000 0.450000 11 5 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.005953 +0.000000 0.550000 0.450000 0 6 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.005905 +0.050000 0.550000 0.450000 1 6 5 0.002126 0.031603 0.042847 17.274684 0.000000 -1.000000 0.005905 +0.150000 0.550000 0.450000 2 6 5 0.004133 0.012060 -0.012229 17.172312 0.000000 -1.000000 0.005648 +0.250000 0.550000 0.450000 3 6 5 0.004016 0.007138 -0.019861 17.223379 0.000000 -1.000000 0.005826 +0.350000 0.550000 0.450000 4 6 5 0.002934 0.005849 -0.016596 17.208757 0.000000 -1.000000 0.005889 +0.450000 0.550000 0.450000 5 6 5 0.001715 0.006931 0.012316 17.124729 0.000000 -1.000000 0.005962 +0.550000 0.550000 0.450000 6 6 5 0.004891 -0.000609 0.049168 17.106429 0.000000 -1.000000 0.006130 +0.650000 0.550000 0.450000 7 6 5 0.009239 -0.004752 0.000214 17.117500 0.000000 -1.000000 0.005942 +0.750000 0.550000 0.450000 8 6 5 0.005653 -0.004318 -0.006450 17.214691 0.000000 -1.000000 0.005867 +0.850000 0.550000 0.450000 9 6 5 0.002587 -0.009584 -0.009859 17.177878 0.000000 -1.000000 0.005801 +0.950000 0.550000 0.450000 10 6 5 0.002072 -0.033997 0.051987 17.278314 0.000000 -1.000000 0.005906 +1.000000 0.550000 0.450000 11 6 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.005906 +0.000000 0.650000 0.450000 0 7 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.006076 +0.050000 0.650000 0.450000 1 7 5 0.008572 0.030237 0.014090 17.260738 0.000000 -1.000000 0.006076 +0.150000 0.650000 0.450000 2 7 5 0.014877 0.018994 -0.027953 17.102169 0.000000 -1.000000 0.005910 +0.250000 0.650000 0.450000 3 7 5 0.009488 0.012476 -0.018991 17.211193 0.000000 -1.000000 0.005925 +0.350000 0.650000 0.450000 4 7 5 0.002568 0.008795 -0.011973 17.222109 0.000000 -1.000000 0.005887 +0.450000 0.650000 0.450000 5 7 5 -0.003019 0.009789 -0.005817 17.138508 0.000000 -1.000000 0.005883 +0.550000 0.650000 0.450000 6 7 5 -0.001442 0.011632 0.009855 17.106247 0.000000 -1.000000 0.005947 +0.650000 0.650000 0.450000 7 7 5 0.004542 0.005824 -0.004204 17.139113 0.000000 -1.000000 0.005920 +0.750000 0.650000 0.450000 8 7 5 0.004011 0.002287 -0.002477 17.199459 0.000000 -1.000000 0.005868 +0.850000 0.650000 0.450000 9 7 5 0.003084 -0.006713 0.001032 17.162416 0.000000 -1.000000 0.005876 +0.950000 0.650000 0.450000 10 7 5 0.002654 -0.033842 0.067641 17.285478 0.000000 -1.000000 0.005986 +1.000000 0.650000 0.450000 11 7 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.005986 +0.000000 0.750000 0.450000 0 8 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.006233 +0.050000 0.750000 0.450000 1 8 5 0.009094 0.036231 -0.092234 16.688610 0.000000 -1.000000 0.006233 +0.150000 0.750000 0.450000 2 8 5 0.014712 0.028900 -0.047896 17.014569 0.000000 -1.000000 0.006005 +0.250000 0.750000 0.450000 3 8 5 0.007743 0.017471 -0.010461 17.222276 0.000000 -1.000000 0.005925 +0.350000 0.750000 0.450000 4 8 5 0.000443 0.011441 -0.006783 17.225983 0.000000 -1.000000 0.005851 +0.450000 0.750000 0.450000 5 8 5 -0.004476 0.011647 -0.009773 17.174975 0.000000 -1.000000 0.005797 +0.550000 0.750000 0.450000 6 8 5 -0.003692 0.013843 -0.007172 17.160071 0.000000 -1.000000 0.005776 +0.650000 0.750000 0.450000 7 8 5 -0.000638 0.010964 -0.008518 17.183174 0.000000 -1.000000 0.005763 +0.750000 0.750000 0.450000 8 8 5 0.000558 0.005839 -0.000733 17.192544 0.000000 -1.000000 0.005782 +0.850000 0.750000 0.450000 9 8 5 0.002885 -0.000709 0.014762 17.115859 0.000000 -1.000000 0.005877 +0.950000 0.750000 0.450000 10 8 5 0.002588 -0.031716 0.075720 17.291898 0.000000 -1.000000 0.006061 +1.000000 0.750000 0.450000 11 8 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006061 +0.000000 0.850000 0.450000 0 9 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.006253 +0.050000 0.850000 0.450000 1 9 5 0.005022 0.030852 -0.125851 16.704539 0.000000 -1.000000 0.006253 +0.150000 0.850000 0.450000 2 9 5 0.008229 0.026027 -0.044359 17.095354 0.000000 -1.000000 0.005948 +0.250000 0.850000 0.450000 3 9 5 0.003824 0.016878 -0.000305 17.250580 0.000000 -1.000000 0.005880 +0.350000 0.850000 0.450000 4 9 5 -0.001625 0.011806 -0.002946 17.233900 0.000000 -1.000000 0.005826 +0.450000 0.850000 0.450000 5 9 5 -0.005294 0.011107 -0.008889 17.204731 0.000000 -1.000000 0.005761 +0.550000 0.850000 0.450000 6 9 5 -0.005242 0.012513 -0.009184 17.190580 0.000000 -1.000000 0.005720 +0.650000 0.850000 0.450000 7 9 5 -0.003740 0.011806 -0.008170 17.185911 0.000000 -1.000000 0.005703 +0.750000 0.850000 0.450000 8 9 5 -0.000455 0.008644 -0.000455 17.157675 0.000000 -1.000000 0.005749 +0.850000 0.850000 0.450000 9 9 5 0.005350 0.002373 0.022780 17.117378 0.000000 -1.000000 0.005835 +0.950000 0.850000 0.450000 10 9 5 0.004257 -0.027289 0.077702 17.299011 0.000000 -1.000000 0.006238 +1.000000 0.850000 0.450000 11 9 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006238 +0.000000 0.950000 0.450000 0 10 5 0.000000 0.000000 0.000000 19.694486 0.000000 1.000000 0.006471 +0.050000 0.950000 0.450000 1 10 5 0.005517 0.010721 -0.095730 16.900486 0.000000 -1.000000 0.006471 +0.150000 0.950000 0.450000 2 10 5 0.011838 0.010023 -0.043877 17.171995 0.000000 -1.000000 0.006132 +0.250000 0.950000 0.450000 3 10 5 0.012038 0.007477 -0.008487 17.292667 0.000000 -1.000000 0.005942 +0.350000 0.950000 0.450000 4 10 5 0.010876 0.005696 0.009331 17.336513 0.000000 -1.000000 0.005880 +0.450000 0.950000 0.450000 5 10 5 0.009918 0.005235 0.015454 17.342392 0.000000 -1.000000 0.005825 +0.550000 0.950000 0.450000 6 10 5 0.010580 0.005966 0.016341 17.327480 0.000000 -1.000000 0.005786 +0.650000 0.950000 0.450000 7 10 5 0.013898 0.006283 0.016488 17.306435 0.000000 -1.000000 0.005748 +0.750000 0.950000 0.450000 8 10 5 0.019382 0.005696 0.021647 17.283636 0.000000 -1.000000 0.005740 +0.850000 0.950000 0.450000 9 10 5 0.023214 0.001005 0.038620 17.268479 0.000000 -1.000000 0.005858 +0.950000 0.950000 0.450000 10 10 5 0.011911 -0.012043 0.078325 17.324341 0.000000 -1.000000 0.006284 +1.000000 0.950000 0.450000 11 10 5 0.000000 0.000000 0.000000 19.694499 0.000000 1.000000 0.006284 +0.000000 1.000000 0.450000 0 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.450000 1 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.006471 +0.150000 1.000000 0.450000 2 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.006132 +0.250000 1.000000 0.450000 3 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005942 +0.350000 1.000000 0.450000 4 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005880 +0.450000 1.000000 0.450000 5 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005825 +0.550000 1.000000 0.450000 6 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005786 +0.650000 1.000000 0.450000 7 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005748 +0.750000 1.000000 0.450000 8 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005740 +0.850000 1.000000 0.450000 9 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.005858 +0.950000 1.000000 0.450000 10 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.006284 +1.000000 1.000000 0.450000 11 11 5 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.550000 0 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.550000 1 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.003812 +0.150000 0.000000 0.550000 2 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004155 +0.250000 0.000000 0.550000 3 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004207 +0.350000 0.000000 0.550000 4 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004152 +0.450000 0.000000 0.550000 5 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004076 +0.550000 0.000000 0.550000 6 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004025 +0.650000 0.000000 0.550000 7 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004003 +0.750000 0.000000 0.550000 8 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.004008 +0.850000 0.000000 0.550000 9 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.003880 +0.950000 0.000000 0.550000 10 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.003443 +1.000000 0.000000 0.550000 11 0 6 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.550000 0 1 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003812 +0.050000 0.050000 0.550000 1 1 6 -0.008467 0.010910 0.081487 17.284099 0.000000 -1.000000 -0.003812 +0.150000 0.050000 0.550000 2 1 6 -0.016342 -0.000907 0.039626 17.298126 0.000000 -1.000000 -0.004155 +0.250000 0.050000 0.550000 3 1 6 -0.014234 -0.003766 0.027080 17.323183 0.000000 -1.000000 -0.004207 +0.350000 0.050000 0.550000 4 1 6 -0.012013 -0.004093 0.026262 17.344074 0.000000 -1.000000 -0.004152 +0.450000 0.050000 0.550000 5 1 6 -0.011009 -0.004097 0.027759 17.358672 0.000000 -1.000000 -0.004076 +0.550000 0.050000 0.550000 6 1 6 -0.010750 -0.004028 0.025840 17.370990 0.000000 -1.000000 -0.004025 +0.650000 0.050000 0.550000 7 1 6 -0.011147 -0.003840 0.014812 17.367632 0.000000 -1.000000 -0.004003 +0.750000 0.050000 0.550000 8 1 6 -0.012473 -0.004877 -0.010982 17.330277 0.000000 -1.000000 -0.004008 +0.850000 0.050000 0.550000 9 1 6 -0.014120 -0.007813 -0.046675 17.208399 0.000000 -1.000000 -0.003880 +0.950000 0.050000 0.550000 10 1 6 -0.007399 -0.013529 -0.099228 16.860461 0.000000 -1.000000 -0.003443 +1.000000 0.050000 0.550000 11 1 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003443 +0.000000 0.150000 0.550000 0 2 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003848 +0.050000 0.150000 0.550000 1 2 6 -0.001427 0.024948 0.081700 17.251723 0.000000 -1.000000 -0.003848 +0.150000 0.150000 0.550000 2 2 6 -0.000441 0.000452 0.004105 17.149870 0.000000 -1.000000 -0.004252 +0.250000 0.150000 0.550000 3 2 6 0.000346 -0.006438 -0.010920 17.285059 0.000000 -1.000000 -0.004249 +0.350000 0.150000 0.550000 4 2 6 -0.002323 -0.009202 -0.009338 17.283301 0.000000 -1.000000 -0.004206 +0.450000 0.150000 0.550000 5 2 6 -0.001303 -0.010655 -0.007844 17.236288 0.000000 -1.000000 -0.004127 +0.550000 0.150000 0.550000 6 2 6 0.001163 -0.010416 -0.002514 17.275118 0.000000 -1.000000 -0.004101 +0.650000 0.150000 0.550000 7 2 6 0.000676 -0.009323 0.008881 17.309385 0.000000 -1.000000 -0.004074 +0.750000 0.150000 0.550000 8 2 6 0.000806 -0.011541 0.015268 17.322065 0.000000 -1.000000 -0.004045 +0.850000 0.150000 0.550000 9 2 6 -0.000707 -0.017419 0.000088 17.326111 0.000000 -1.000000 -0.004056 +0.950000 0.150000 0.550000 10 2 6 -0.001620 -0.033506 -0.114646 16.671480 0.000000 -1.000000 -0.003695 +1.000000 0.150000 0.550000 11 2 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003695 +0.000000 0.250000 0.550000 0 3 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003979 +0.050000 0.250000 0.550000 1 3 6 0.000513 0.029023 0.077704 17.230584 0.000000 -1.000000 -0.003979 +0.150000 0.250000 0.550000 2 3 6 0.000244 0.002379 -0.004872 17.181492 0.000000 -1.000000 -0.004302 +0.250000 0.250000 0.550000 3 3 6 0.000148 -0.004413 -0.013150 17.280556 0.000000 -1.000000 -0.004197 +0.350000 0.250000 0.550000 4 3 6 -0.000132 -0.009233 -0.014934 17.261827 0.000000 -1.000000 -0.004164 +0.450000 0.250000 0.550000 5 3 6 0.001098 -0.013600 -0.002911 17.162516 0.000000 -1.000000 -0.004086 +0.550000 0.250000 0.550000 6 3 6 0.004077 -0.013988 -0.009773 17.233070 0.000000 -1.000000 -0.004083 +0.650000 0.250000 0.550000 7 3 6 0.003007 -0.011457 -0.001678 17.313902 0.000000 -1.000000 -0.004081 +0.750000 0.250000 0.550000 8 3 6 0.000695 -0.013237 0.007173 17.333427 0.000000 -1.000000 -0.004022 +0.850000 0.250000 0.550000 9 3 6 -0.002286 -0.020890 -0.008493 17.267179 0.000000 -1.000000 -0.003995 +0.950000 0.250000 0.550000 10 3 6 -0.002405 -0.040494 -0.093220 16.610969 0.000000 -1.000000 -0.003694 +1.000000 0.250000 0.550000 11 3 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003694 +0.000000 0.350000 0.550000 0 4 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003946 +0.050000 0.350000 0.550000 1 4 6 0.001606 0.030519 0.071876 17.217346 0.000000 -1.000000 -0.003946 +0.150000 0.350000 0.550000 2 4 6 0.001292 0.003761 -0.009508 17.171468 0.000000 -1.000000 -0.004247 +0.250000 0.350000 0.550000 3 4 6 0.000346 -0.001640 -0.014687 17.278037 0.000000 -1.000000 -0.004103 +0.350000 0.350000 0.550000 4 4 6 0.000450 -0.005594 -0.020785 17.236168 0.000000 -1.000000 -0.004086 +0.450000 0.350000 0.550000 5 4 6 0.001228 -0.011659 0.019481 17.118870 0.000000 -1.000000 -0.003962 +0.550000 0.350000 0.550000 6 4 6 0.005038 -0.014865 -0.009147 17.174759 0.000000 -1.000000 -0.003972 +0.650000 0.350000 0.550000 7 4 6 0.004271 -0.010453 -0.009914 17.300495 0.000000 -1.000000 -0.004014 +0.750000 0.350000 0.550000 8 4 6 -0.002014 -0.010510 0.000644 17.323729 0.000000 -1.000000 -0.003925 +0.850000 0.350000 0.550000 9 4 6 -0.010601 -0.019244 -0.017893 17.167838 0.000000 -1.000000 -0.003752 +0.950000 0.350000 0.550000 10 4 6 -0.007916 -0.033244 -0.027410 16.832507 0.000000 -1.000000 -0.003386 +1.000000 0.350000 0.550000 11 4 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003386 +0.000000 0.450000 0.550000 0 5 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003779 +0.050000 0.450000 0.550000 1 5 6 0.004179 0.029953 0.059637 17.204883 0.000000 -1.000000 -0.003779 +0.150000 0.450000 0.550000 2 5 6 0.007256 0.006972 -0.010229 17.155470 0.000000 -1.000000 -0.004124 +0.250000 0.450000 0.550000 3 5 6 0.005542 0.002843 -0.020459 17.240453 0.000000 -1.000000 -0.003985 +0.350000 0.450000 0.550000 4 5 6 0.002949 -0.000290 -0.019211 17.227748 0.000000 -1.000000 -0.003967 +0.450000 0.450000 0.550000 5 5 6 0.000429 -0.002453 0.049311 17.111390 0.000000 -1.000000 -0.003809 +0.550000 0.450000 0.550000 6 5 6 0.005006 -0.011591 0.003087 17.117543 0.000000 -1.000000 -0.003788 +0.650000 0.450000 0.550000 7 5 6 0.006125 -0.006129 -0.011316 17.256814 0.000000 -1.000000 -0.003932 +0.750000 0.450000 0.550000 8 5 6 -0.003634 -0.004019 -0.002504 17.293486 0.000000 -1.000000 -0.003881 +0.850000 0.450000 0.550000 9 5 6 -0.013066 -0.011798 -0.015165 17.163724 0.000000 -1.000000 -0.003788 +0.950000 0.450000 0.550000 10 5 6 -0.008370 -0.027234 0.032769 17.162992 0.000000 -1.000000 -0.003562 +1.000000 0.450000 0.550000 11 5 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003562 +0.000000 0.550000 0.550000 0 6 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003461 +0.050000 0.550000 0.550000 1 6 6 0.009431 0.024180 0.039280 17.175171 0.000000 -1.000000 -0.003461 +0.150000 0.550000 0.550000 2 6 6 0.017133 0.013841 -0.015895 17.107243 0.000000 -1.000000 -0.003814 +0.250000 0.550000 0.550000 3 6 6 0.011520 0.010285 -0.022454 17.218356 0.000000 -1.000000 -0.003855 +0.350000 0.550000 0.550000 4 6 6 0.004215 0.006026 -0.016838 17.254320 0.000000 -1.000000 -0.003913 +0.450000 0.550000 0.550000 5 6 6 -0.002349 0.007431 0.011387 17.128427 0.000000 -1.000000 -0.003836 +0.550000 0.550000 0.550000 6 6 6 0.004240 0.002200 0.015985 17.112950 0.000000 -1.000000 -0.003572 +0.650000 0.550000 0.550000 7 6 6 0.009884 0.002490 -0.008048 17.227208 0.000000 -1.000000 -0.003907 +0.750000 0.550000 0.550000 8 6 6 0.000679 0.003342 -0.003331 17.289557 0.000000 -1.000000 -0.003936 +0.850000 0.550000 0.550000 9 6 6 -0.005739 -0.007618 -0.010488 17.176051 0.000000 -1.000000 -0.004003 +0.950000 0.550000 0.550000 10 6 6 -0.003521 -0.030987 0.053254 17.207503 0.000000 -1.000000 -0.003736 +1.000000 0.550000 0.550000 11 6 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003736 +0.000000 0.650000 0.550000 0 7 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003055 +0.050000 0.650000 0.550000 1 7 6 0.013301 0.032196 -0.022418 16.836271 0.000000 -1.000000 -0.003055 +0.150000 0.650000 0.550000 2 7 6 0.021817 0.027650 -0.036128 16.991616 0.000000 -1.000000 -0.003598 +0.250000 0.650000 0.550000 3 7 6 0.012597 0.018807 -0.018820 17.219285 0.000000 -1.000000 -0.003844 +0.350000 0.650000 0.550000 4 7 6 0.005283 0.011917 -0.009392 17.273516 0.000000 -1.000000 -0.003951 +0.450000 0.650000 0.550000 5 7 6 -0.000269 0.011644 -0.004229 17.166640 0.000000 -1.000000 -0.003973 +0.550000 0.650000 0.550000 6 7 6 0.002367 0.014565 -0.003299 17.172416 0.000000 -1.000000 -0.003934 +0.650000 0.650000 0.550000 7 7 6 0.004135 0.009486 -0.009551 17.269342 0.000000 -1.000000 -0.004039 +0.750000 0.650000 0.550000 8 7 6 -0.000052 0.007933 -0.003271 17.275052 0.000000 -1.000000 -0.004030 +0.850000 0.650000 0.550000 9 7 6 -0.001494 -0.006717 -0.003801 17.178685 0.000000 -1.000000 -0.004074 +0.950000 0.650000 0.550000 10 7 6 -0.001146 -0.032796 0.068082 17.229183 0.000000 -1.000000 -0.003799 +1.000000 0.650000 0.550000 11 7 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003799 +0.000000 0.750000 0.550000 0 8 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003634 +0.050000 0.750000 0.550000 1 8 6 0.006230 0.041439 -0.108156 16.567476 0.000000 -1.000000 -0.003634 +0.150000 0.750000 0.550000 2 8 6 0.009651 0.034677 -0.043313 17.052342 0.000000 -1.000000 -0.003960 +0.250000 0.750000 0.550000 3 8 6 0.006265 0.021468 -0.006663 17.259735 0.000000 -1.000000 -0.003982 +0.350000 0.750000 0.550000 4 8 6 0.003946 0.013856 -0.001727 17.282740 0.000000 -1.000000 -0.004023 +0.450000 0.750000 0.550000 5 8 6 0.000866 0.012215 -0.006886 17.222695 0.000000 -1.000000 -0.004066 +0.550000 0.750000 0.550000 6 8 6 0.001049 0.014354 -0.008119 17.243133 0.000000 -1.000000 -0.004103 +0.650000 0.750000 0.550000 7 8 6 0.000343 0.010729 -0.007573 17.279561 0.000000 -1.000000 -0.004124 +0.750000 0.750000 0.550000 8 8 6 -0.001148 0.009266 -0.001808 17.259670 0.000000 -1.000000 -0.004102 +0.850000 0.750000 0.550000 9 8 6 -0.000420 -0.003704 0.006865 17.163175 0.000000 -1.000000 -0.004097 +0.950000 0.750000 0.550000 10 8 6 -0.000214 -0.031438 0.075675 17.242378 0.000000 -1.000000 -0.003780 +1.000000 0.750000 0.550000 11 8 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003780 +0.000000 0.850000 0.550000 0 9 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003709 +0.050000 0.850000 0.550000 1 9 6 0.002291 0.028582 -0.114326 16.727896 0.000000 -1.000000 -0.003709 +0.150000 0.850000 0.550000 2 9 6 0.002875 0.026929 -0.028510 17.186885 0.000000 -1.000000 -0.004036 +0.250000 0.850000 0.550000 3 9 6 0.002254 0.017204 0.006325 17.292322 0.000000 -1.000000 -0.004014 +0.350000 0.850000 0.550000 4 9 6 0.002337 0.011646 0.003251 17.286448 0.000000 -1.000000 -0.004041 +0.450000 0.850000 0.550000 5 9 6 0.000850 0.009680 -0.004968 17.261119 0.000000 -1.000000 -0.004089 +0.550000 0.850000 0.550000 6 9 6 0.000367 0.010533 -0.007372 17.269656 0.000000 -1.000000 -0.004135 +0.650000 0.850000 0.550000 7 9 6 -0.000728 0.009884 -0.007598 17.272202 0.000000 -1.000000 -0.004154 +0.750000 0.850000 0.550000 8 9 6 -0.000651 0.008834 -0.006343 17.250591 0.000000 -1.000000 -0.004148 +0.850000 0.850000 0.550000 9 9 6 0.002229 -0.000838 0.017576 17.154099 0.000000 -1.000000 -0.004097 +0.950000 0.850000 0.550000 10 9 6 0.001968 -0.026718 0.077201 17.251294 0.000000 -1.000000 -0.003626 +1.000000 0.850000 0.550000 11 9 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003626 +0.000000 0.950000 0.550000 0 10 6 0.000000 0.000000 0.000000 8.268995 0.000000 1.000000 -0.003598 +0.050000 0.950000 0.550000 1 10 6 0.002597 0.009579 -0.083542 16.900899 0.000000 -1.000000 -0.003598 +0.150000 0.950000 0.550000 2 10 6 0.006176 0.010292 -0.025347 17.253280 0.000000 -1.000000 -0.003872 +0.250000 0.950000 0.550000 3 10 6 0.008309 0.007001 0.005445 17.338461 0.000000 -1.000000 -0.003938 +0.350000 0.950000 0.550000 4 10 6 0.009682 0.004861 0.020221 17.368921 0.000000 -1.000000 -0.003966 +0.450000 0.950000 0.550000 5 10 6 0.009715 0.003843 0.025117 17.373705 0.000000 -1.000000 -0.004013 +0.550000 0.950000 0.550000 6 10 6 0.010253 0.004219 0.024736 17.361045 0.000000 -1.000000 -0.004056 +0.650000 0.950000 0.550000 7 10 6 0.012670 0.004501 0.023322 17.342160 0.000000 -1.000000 -0.004083 +0.750000 0.950000 0.550000 8 10 6 0.016766 0.004078 0.025790 17.318790 0.000000 -1.000000 -0.004091 +0.850000 0.950000 0.550000 9 10 6 0.019035 -0.000070 0.039087 17.296524 0.000000 -1.000000 -0.003995 +0.950000 0.950000 0.550000 10 10 6 0.009449 -0.011597 0.076048 17.277141 0.000000 -1.000000 -0.003601 +1.000000 0.950000 0.550000 11 10 6 0.000000 0.000000 0.000000 8.267970 0.000000 1.000000 -0.003601 +0.000000 1.000000 0.550000 0 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.550000 1 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.003598 +0.150000 1.000000 0.550000 2 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.003872 +0.250000 1.000000 0.550000 3 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.003938 +0.350000 1.000000 0.550000 4 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.003966 +0.450000 1.000000 0.550000 5 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.004013 +0.550000 1.000000 0.550000 6 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.004056 +0.650000 1.000000 0.550000 7 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.004083 +0.750000 1.000000 0.550000 8 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.004091 +0.850000 1.000000 0.550000 9 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.003995 +0.950000 1.000000 0.550000 10 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.003601 +1.000000 1.000000 0.550000 11 11 6 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.650000 0 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.650000 1 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013331 +0.150000 0.000000 0.650000 2 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013752 +0.250000 0.000000 0.650000 3 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013839 +0.350000 0.000000 0.650000 4 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013804 +0.450000 0.000000 0.650000 5 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013752 +0.550000 0.000000 0.650000 6 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013705 +0.650000 0.000000 0.650000 7 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013672 +0.750000 0.000000 0.650000 8 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013673 +0.850000 0.000000 0.650000 9 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013601 +0.950000 0.000000 0.650000 10 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.013223 +1.000000 0.000000 0.650000 11 0 7 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.650000 0 1 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013331 +0.050000 0.050000 0.650000 1 1 7 -0.005304 0.010857 0.073490 17.207710 0.000000 -1.000000 -0.013331 +0.150000 0.050000 0.650000 2 1 7 -0.011868 0.002562 0.038638 17.328988 0.000000 -1.000000 -0.013752 +0.250000 0.050000 0.650000 3 1 7 -0.012666 -0.001821 0.030685 17.360003 0.000000 -1.000000 -0.013839 +0.350000 0.050000 0.650000 4 1 7 -0.011742 -0.002928 0.032112 17.377946 0.000000 -1.000000 -0.013804 +0.450000 0.050000 0.650000 5 1 7 -0.010962 -0.003217 0.034450 17.388809 0.000000 -1.000000 -0.013752 +0.550000 0.050000 0.650000 6 1 7 -0.010539 -0.002953 0.032750 17.401336 0.000000 -1.000000 -0.013705 +0.650000 0.050000 0.650000 7 1 7 -0.010076 -0.003513 0.022158 17.401400 0.000000 -1.000000 -0.013672 +0.750000 0.050000 0.650000 8 1 7 -0.009394 -0.005684 0.000218 17.381899 0.000000 -1.000000 -0.013673 +0.850000 0.050000 0.650000 9 1 7 -0.009230 -0.009103 -0.028925 17.295288 0.000000 -1.000000 -0.013601 +0.950000 0.050000 0.650000 10 1 7 -0.004696 -0.012718 -0.085079 16.914665 0.000000 -1.000000 -0.013223 +1.000000 0.050000 0.650000 11 1 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013223 +0.000000 0.150000 0.650000 0 2 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013316 +0.050000 0.150000 0.650000 1 2 7 0.003244 0.024796 0.073672 17.169884 0.000000 -1.000000 -0.013316 +0.150000 0.150000 0.650000 2 2 7 0.003014 0.005419 0.002604 17.214848 0.000000 -1.000000 -0.013969 +0.250000 0.150000 0.650000 3 2 7 -0.002995 -0.002920 -0.008578 17.335233 0.000000 -1.000000 -0.013909 +0.350000 0.150000 0.650000 4 2 7 -0.005683 -0.007624 -0.005365 17.323780 0.000000 -1.000000 -0.013853 +0.450000 0.150000 0.650000 5 2 7 -0.002776 -0.010446 -0.006499 17.283234 0.000000 -1.000000 -0.013806 +0.550000 0.150000 0.650000 6 2 7 -0.000349 -0.007758 0.001918 17.336127 0.000000 -1.000000 -0.013781 +0.650000 0.150000 0.650000 7 2 7 -0.000998 -0.008239 0.012636 17.360423 0.000000 -1.000000 -0.013721 +0.750000 0.150000 0.650000 8 2 7 0.000618 -0.012148 0.015175 17.374663 0.000000 -1.000000 -0.013678 +0.850000 0.150000 0.650000 9 2 7 0.002066 -0.017983 0.004370 17.375010 0.000000 -1.000000 -0.013656 +0.950000 0.150000 0.650000 10 2 7 0.000940 -0.031879 -0.102440 16.724526 0.000000 -1.000000 -0.013406 +1.000000 0.150000 0.650000 11 2 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013406 +0.000000 0.250000 0.650000 0 3 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013435 +0.050000 0.250000 0.650000 1 3 7 0.005710 0.028330 0.070081 17.144569 0.000000 -1.000000 -0.013435 +0.150000 0.250000 0.650000 2 3 7 0.008287 0.006584 -0.001491 17.172250 0.000000 -1.000000 -0.013906 +0.250000 0.250000 0.650000 3 3 7 0.003383 -0.000841 -0.014357 17.292760 0.000000 -1.000000 -0.013824 +0.350000 0.250000 0.650000 4 3 7 -0.001821 -0.008655 -0.012263 17.319207 0.000000 -1.000000 -0.013813 +0.450000 0.250000 0.650000 5 3 7 -0.000775 -0.014635 -0.008933 17.208763 0.000000 -1.000000 -0.013755 +0.550000 0.250000 0.650000 6 3 7 0.002516 -0.010640 -0.007136 17.330533 0.000000 -1.000000 -0.013791 +0.650000 0.250000 0.650000 7 3 7 0.000972 -0.010228 0.001791 17.391970 0.000000 -1.000000 -0.013728 +0.750000 0.250000 0.650000 8 3 7 0.002061 -0.012645 0.005805 17.397376 0.000000 -1.000000 -0.013636 +0.850000 0.250000 0.650000 9 3 7 0.003233 -0.018192 -0.003593 17.353065 0.000000 -1.000000 -0.013590 +0.950000 0.250000 0.650000 10 3 7 0.001479 -0.040604 -0.091328 16.613980 0.000000 -1.000000 -0.013413 +1.000000 0.250000 0.650000 11 3 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013413 +0.000000 0.350000 0.650000 0 4 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013358 +0.050000 0.350000 0.650000 1 4 7 0.007160 0.028061 0.063284 17.120941 0.000000 -1.000000 -0.013358 +0.150000 0.350000 0.650000 2 4 7 0.011670 0.008274 -0.007479 17.126809 0.000000 -1.000000 -0.013737 +0.250000 0.350000 0.650000 3 4 7 0.006907 0.002606 -0.017482 17.260500 0.000000 -1.000000 -0.013667 +0.350000 0.350000 0.650000 4 4 7 -0.000702 -0.005258 -0.019735 17.306470 0.000000 -1.000000 -0.013721 +0.450000 0.350000 0.650000 5 4 7 0.000074 -0.011548 0.005869 17.133714 0.000000 -1.000000 -0.013595 +0.550000 0.350000 0.650000 6 4 7 0.005101 -0.008890 -0.013184 17.303047 0.000000 -1.000000 -0.013703 +0.650000 0.350000 0.650000 7 4 7 0.003047 -0.008829 -0.009851 17.387923 0.000000 -1.000000 -0.013660 +0.750000 0.350000 0.650000 8 4 7 0.002022 -0.009808 -0.000983 17.384590 0.000000 -1.000000 -0.013534 +0.850000 0.350000 0.650000 9 4 7 -0.002018 -0.018752 -0.012037 17.265997 0.000000 -1.000000 -0.013437 +0.950000 0.350000 0.650000 10 4 7 -0.002921 -0.039284 -0.049644 16.655545 0.000000 -1.000000 -0.013203 +1.000000 0.350000 0.650000 11 4 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013203 +0.000000 0.450000 0.650000 0 5 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013120 +0.050000 0.450000 0.650000 1 5 7 0.009631 0.024893 0.049388 17.079923 0.000000 -1.000000 -0.013120 +0.150000 0.450000 0.650000 2 5 7 0.017351 0.012213 -0.011826 17.076174 0.000000 -1.000000 -0.013438 +0.250000 0.450000 0.650000 3 5 7 0.010131 0.008618 -0.021098 17.235959 0.000000 -1.000000 -0.013507 +0.350000 0.450000 0.650000 4 5 7 0.000547 0.001615 -0.019826 17.278814 0.000000 -1.000000 -0.013634 +0.450000 0.450000 0.650000 5 5 7 0.001312 -0.001200 0.030941 17.122736 0.000000 -1.000000 -0.013483 +0.550000 0.450000 0.650000 6 5 7 0.007174 -0.001204 -0.010707 17.239072 0.000000 -1.000000 -0.013629 +0.650000 0.450000 0.650000 7 5 7 0.005171 -0.002989 -0.010991 17.339417 0.000000 -1.000000 -0.013617 +0.750000 0.450000 0.650000 8 5 7 -0.001752 -0.003554 -0.000206 17.348761 0.000000 -1.000000 -0.013471 +0.850000 0.450000 0.650000 9 5 7 -0.010981 -0.015490 -0.013879 17.145437 0.000000 -1.000000 -0.013257 +0.950000 0.450000 0.650000 10 5 7 -0.008056 -0.030966 0.013403 16.907820 0.000000 -1.000000 -0.013022 +1.000000 0.450000 0.650000 11 5 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013022 +0.000000 0.550000 0.650000 0 6 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.012814 +0.050000 0.550000 0.650000 1 6 7 0.013060 0.028799 0.015101 16.916921 0.000000 -1.000000 -0.012814 +0.150000 0.550000 0.650000 2 6 7 0.022200 0.023933 -0.024222 16.991589 0.000000 -1.000000 -0.013150 +0.250000 0.550000 0.650000 3 6 7 0.011037 0.017607 -0.021194 17.235947 0.000000 -1.000000 -0.013442 +0.350000 0.550000 0.650000 4 6 7 0.000418 0.009814 -0.017692 17.316464 0.000000 -1.000000 -0.013617 +0.450000 0.550000 0.650000 5 6 7 0.000921 0.009886 0.003545 17.145253 0.000000 -1.000000 -0.013601 +0.550000 0.550000 0.650000 6 6 7 0.005680 0.007591 -0.009369 17.272143 0.000000 -1.000000 -0.013662 +0.650000 0.550000 0.650000 7 6 7 0.002310 0.002726 -0.007555 17.349808 0.000000 -1.000000 -0.013657 +0.750000 0.550000 0.650000 8 6 7 -0.005724 0.003023 -0.000819 17.311425 0.000000 -1.000000 -0.013504 +0.850000 0.550000 0.650000 9 6 7 -0.011853 -0.010634 -0.008369 17.137492 0.000000 -1.000000 -0.013426 +0.950000 0.550000 0.650000 10 6 7 -0.007098 -0.028751 0.047106 17.081951 0.000000 -1.000000 -0.013191 +1.000000 0.550000 0.650000 11 6 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013191 +0.000000 0.650000 0.650000 0 7 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013013 +0.050000 0.650000 0.650000 1 7 7 0.008364 0.040630 -0.062234 16.585640 0.000000 -1.000000 -0.013013 +0.150000 0.650000 0.650000 2 7 7 0.012787 0.035649 -0.038945 17.005251 0.000000 -1.000000 -0.013451 +0.250000 0.650000 0.650000 3 7 7 0.005362 0.024079 -0.016023 17.288275 0.000000 -1.000000 -0.013627 +0.350000 0.650000 0.650000 4 7 7 0.000570 0.015388 -0.009021 17.345594 0.000000 -1.000000 -0.013717 +0.450000 0.650000 0.650000 5 7 7 0.001789 0.015337 -0.006645 17.228406 0.000000 -1.000000 -0.013756 +0.550000 0.650000 0.650000 6 7 7 0.002971 0.011238 -0.008540 17.321515 0.000000 -1.000000 -0.013800 +0.650000 0.650000 0.650000 7 7 7 -0.002051 0.006319 -0.005084 17.348130 0.000000 -1.000000 -0.013721 +0.750000 0.650000 0.650000 8 7 7 -0.005906 0.007278 -0.004914 17.278273 0.000000 -1.000000 -0.013617 +0.850000 0.650000 0.650000 9 7 7 -0.008319 -0.009019 -0.001765 17.165741 0.000000 -1.000000 -0.013634 +0.950000 0.650000 0.650000 10 7 7 -0.005277 -0.031722 0.061964 17.128848 0.000000 -1.000000 -0.013302 +1.000000 0.650000 0.650000 11 7 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013302 +0.000000 0.750000 0.650000 0 8 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013482 +0.050000 0.750000 0.650000 1 8 7 0.001676 0.039423 -0.105939 16.610577 0.000000 -1.000000 -0.013482 +0.150000 0.750000 0.650000 2 8 7 0.001202 0.034949 -0.033127 17.168026 0.000000 -1.000000 -0.013823 +0.250000 0.750000 0.650000 3 8 7 0.000233 0.023260 -0.003982 17.340019 0.000000 -1.000000 -0.013789 +0.350000 0.750000 0.650000 4 8 7 0.001183 0.015803 0.001710 17.353900 0.000000 -1.000000 -0.013798 +0.450000 0.750000 0.650000 5 8 7 0.002158 0.015326 -0.004755 17.290124 0.000000 -1.000000 -0.013827 +0.550000 0.750000 0.650000 6 8 7 0.001161 0.010094 -0.004811 17.343756 0.000000 -1.000000 -0.013842 +0.650000 0.750000 0.650000 7 8 7 -0.002918 0.008638 -0.004287 17.331124 0.000000 -1.000000 -0.013778 +0.750000 0.750000 0.650000 8 8 7 -0.003047 0.008884 -0.004767 17.272322 0.000000 -1.000000 -0.013737 +0.850000 0.750000 0.650000 9 8 7 -0.004720 -0.007586 0.006840 17.190561 0.000000 -1.000000 -0.013747 +0.950000 0.750000 0.650000 10 8 7 -0.004069 -0.031111 0.069118 17.151692 0.000000 -1.000000 -0.013301 +1.000000 0.750000 0.650000 11 8 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013301 +0.000000 0.850000 0.650000 0 9 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013610 +0.050000 0.850000 0.650000 1 9 7 -0.000782 0.024289 -0.097956 16.814410 0.000000 -1.000000 -0.013610 +0.150000 0.850000 0.650000 2 9 7 -0.002227 0.026457 -0.015115 17.279330 0.000000 -1.000000 -0.013829 +0.250000 0.850000 0.650000 3 9 7 -0.000398 0.017542 0.009451 17.346864 0.000000 -1.000000 -0.013780 +0.350000 0.850000 0.650000 4 9 7 0.002146 0.011755 0.009001 17.342657 0.000000 -1.000000 -0.013775 +0.450000 0.850000 0.650000 5 9 7 0.003128 0.010296 0.000151 17.321410 0.000000 -1.000000 -0.013800 +0.550000 0.850000 0.650000 6 9 7 0.002100 0.007723 -0.001851 17.334347 0.000000 -1.000000 -0.013821 +0.650000 0.850000 0.650000 7 9 7 -0.000932 0.008352 -0.003485 17.316331 0.000000 -1.000000 -0.013801 +0.750000 0.850000 0.650000 8 9 7 -0.000822 0.007793 -0.006701 17.278956 0.000000 -1.000000 -0.013789 +0.850000 0.850000 0.650000 9 9 7 -0.001223 -0.005157 0.015611 17.204229 0.000000 -1.000000 -0.013769 +0.950000 0.850000 0.650000 10 9 7 -0.001405 -0.026256 0.070465 17.167225 0.000000 -1.000000 -0.013148 +1.000000 0.850000 0.650000 11 9 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013148 +0.000000 0.950000 0.650000 0 10 7 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.013565 +0.050000 0.950000 0.650000 1 10 7 -0.000671 0.007920 -0.067964 16.957547 0.000000 -1.000000 -0.013565 +0.150000 0.950000 0.650000 2 10 7 0.000769 0.010891 -0.007252 17.340762 0.000000 -1.000000 -0.013701 +0.250000 0.950000 0.650000 3 10 7 0.005139 0.007023 0.016063 17.382025 0.000000 -1.000000 -0.013692 +0.350000 0.950000 0.650000 4 10 7 0.008192 0.004441 0.028508 17.400587 0.000000 -1.000000 -0.013693 +0.450000 0.950000 0.650000 5 10 7 0.009266 0.003362 0.032231 17.402951 0.000000 -1.000000 -0.013714 +0.550000 0.950000 0.650000 6 10 7 0.009940 0.003127 0.030959 17.393221 0.000000 -1.000000 -0.013743 +0.650000 0.950000 0.650000 7 10 7 0.011647 0.003645 0.028466 17.375356 0.000000 -1.000000 -0.013746 +0.750000 0.950000 0.650000 8 10 7 0.014593 0.003235 0.029064 17.352235 0.000000 -1.000000 -0.013737 +0.850000 0.950000 0.650000 9 10 7 0.014684 -0.002005 0.038695 17.324894 0.000000 -1.000000 -0.013615 +0.950000 0.950000 0.650000 10 10 7 0.006570 -0.011240 0.069233 17.200043 0.000000 -1.000000 -0.013179 +1.000000 0.950000 0.650000 11 10 7 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.013179 +0.000000 1.000000 0.650000 0 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.650000 1 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013565 +0.150000 1.000000 0.650000 2 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013701 +0.250000 1.000000 0.650000 3 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013692 +0.350000 1.000000 0.650000 4 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013693 +0.450000 1.000000 0.650000 5 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013714 +0.550000 1.000000 0.650000 6 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013743 +0.650000 1.000000 0.650000 7 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013746 +0.750000 1.000000 0.650000 8 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013737 +0.850000 1.000000 0.650000 9 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013615 +0.950000 1.000000 0.650000 10 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.013179 +1.000000 1.000000 0.650000 11 11 7 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.750000 0 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.750000 1 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.022535 +0.150000 0.000000 0.750000 2 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023012 +0.250000 0.000000 0.750000 3 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023177 +0.350000 0.000000 0.750000 4 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023230 +0.450000 0.000000 0.750000 5 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023236 +0.550000 0.000000 0.750000 6 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023177 +0.650000 0.000000 0.750000 7 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023134 +0.750000 0.000000 0.750000 8 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023134 +0.850000 0.000000 0.750000 9 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.023138 +0.950000 0.000000 0.750000 10 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.022805 +1.000000 0.000000 0.750000 11 0 8 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.750000 0 1 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022535 +0.050000 0.050000 0.750000 1 1 8 -0.001142 0.010359 0.058718 17.117452 0.000000 -1.000000 -0.022535 +0.150000 0.050000 0.750000 2 1 8 -0.005398 0.005116 0.035331 17.357678 0.000000 -1.000000 -0.023012 +0.250000 0.050000 0.750000 3 1 8 -0.009175 0.001621 0.031083 17.396453 0.000000 -1.000000 -0.023177 +0.350000 0.050000 0.750000 4 1 8 -0.009986 0.000197 0.034523 17.414414 0.000000 -1.000000 -0.023230 +0.450000 0.050000 0.750000 5 1 8 -0.010399 -0.000143 0.037753 17.424397 0.000000 -1.000000 -0.023236 +0.550000 0.050000 0.750000 6 1 8 -0.010242 -0.001425 0.036597 17.432908 0.000000 -1.000000 -0.023177 +0.650000 0.050000 0.750000 7 1 8 -0.008678 -0.003317 0.027484 17.435307 0.000000 -1.000000 -0.023134 +0.750000 0.050000 0.750000 8 1 8 -0.005805 -0.006741 0.010584 17.432102 0.000000 -1.000000 -0.023134 +0.850000 0.050000 0.750000 9 1 8 -0.003455 -0.010717 -0.009565 17.389426 0.000000 -1.000000 -0.023138 +0.950000 0.050000 0.750000 10 1 8 -0.001418 -0.011280 -0.067196 17.009763 0.000000 -1.000000 -0.022805 +1.000000 0.050000 0.750000 11 1 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022805 +0.000000 0.150000 0.750000 0 2 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022460 +0.050000 0.150000 0.750000 1 2 8 0.007593 0.024211 0.056259 17.070585 0.000000 -1.000000 -0.022460 +0.150000 0.150000 0.750000 2 2 8 0.011279 0.012077 0.007843 17.220444 0.000000 -1.000000 -0.023130 +0.250000 0.150000 0.750000 3 2 8 0.001780 0.004141 -0.002079 17.370829 0.000000 -1.000000 -0.023284 +0.350000 0.150000 0.750000 4 2 8 -0.004371 -0.003008 0.000513 17.371811 0.000000 -1.000000 -0.023342 +0.450000 0.150000 0.750000 5 2 8 -0.004449 -0.005492 -0.000830 17.363555 0.000000 -1.000000 -0.023378 +0.550000 0.150000 0.750000 6 2 8 -0.004159 -0.004826 0.006564 17.386913 0.000000 -1.000000 -0.023270 +0.650000 0.150000 0.750000 7 2 8 -0.002949 -0.007946 0.013770 17.408799 0.000000 -1.000000 -0.023169 +0.750000 0.150000 0.750000 8 2 8 0.001211 -0.014761 0.012837 17.426616 0.000000 -1.000000 -0.023118 +0.850000 0.150000 0.750000 9 2 8 0.004848 -0.021456 0.003473 17.399719 0.000000 -1.000000 -0.023106 +0.950000 0.150000 0.750000 10 2 8 0.002863 -0.029187 -0.085570 16.826507 0.000000 -1.000000 -0.022851 +1.000000 0.150000 0.750000 11 2 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022851 +0.000000 0.250000 0.750000 0 3 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022611 +0.050000 0.250000 0.750000 1 3 8 0.010413 0.028321 0.052887 17.037063 0.000000 -1.000000 -0.022611 +0.150000 0.250000 0.750000 2 3 8 0.018436 0.015634 0.001447 17.129614 0.000000 -1.000000 -0.023061 +0.250000 0.250000 0.750000 3 3 8 0.010815 0.007172 -0.010846 17.289030 0.000000 -1.000000 -0.023186 +0.350000 0.250000 0.750000 4 3 8 0.000897 -0.004981 -0.006315 17.379616 0.000000 -1.000000 -0.023309 +0.450000 0.250000 0.750000 5 3 8 -0.002376 -0.012723 -0.012631 17.369946 0.000000 -1.000000 -0.023400 +0.550000 0.250000 0.750000 6 3 8 -0.002647 -0.008335 -0.001704 17.429818 0.000000 -1.000000 -0.023327 +0.650000 0.250000 0.750000 7 3 8 -0.002649 -0.011079 0.003055 17.459678 0.000000 -1.000000 -0.023170 +0.750000 0.250000 0.750000 8 3 8 0.002218 -0.015855 0.000706 17.439199 0.000000 -1.000000 -0.023042 +0.850000 0.250000 0.750000 9 3 8 0.006742 -0.020717 -0.004993 17.366133 0.000000 -1.000000 -0.023000 +0.950000 0.250000 0.750000 10 3 8 0.004041 -0.038734 -0.080609 16.673066 0.000000 -1.000000 -0.022849 +1.000000 0.250000 0.750000 11 3 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022849 +0.000000 0.350000 0.750000 0 4 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022627 +0.050000 0.350000 0.750000 1 4 8 0.011267 0.028340 0.046177 16.998662 0.000000 -1.000000 -0.022627 +0.150000 0.350000 0.750000 2 4 8 0.020307 0.019272 -0.005347 17.061212 0.000000 -1.000000 -0.022922 +0.250000 0.350000 0.750000 3 4 8 0.012314 0.011800 -0.014191 17.242596 0.000000 -1.000000 -0.023026 +0.350000 0.350000 0.750000 4 4 8 -0.000761 -0.000229 -0.012912 17.376269 0.000000 -1.000000 -0.023182 +0.450000 0.350000 0.750000 5 4 8 -0.002264 -0.012517 -0.011705 17.311665 0.000000 -1.000000 -0.023154 +0.550000 0.350000 0.750000 6 4 8 0.000544 -0.007907 -0.013686 17.453238 0.000000 -1.000000 -0.023232 +0.650000 0.350000 0.750000 7 4 8 -0.000368 -0.011982 -0.014225 17.450895 0.000000 -1.000000 -0.023098 +0.750000 0.350000 0.750000 8 4 8 0.003177 -0.013536 -0.006920 17.398021 0.000000 -1.000000 -0.022961 +0.850000 0.350000 0.750000 9 4 8 0.004037 -0.019554 -0.007891 17.288204 0.000000 -1.000000 -0.022908 +0.950000 0.350000 0.750000 10 4 8 0.001720 -0.041586 -0.054516 16.627011 0.000000 -1.000000 -0.022884 +1.000000 0.350000 0.750000 11 4 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022884 +0.000000 0.450000 0.750000 0 5 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022580 +0.050000 0.450000 0.750000 1 5 8 0.011621 0.028928 0.029397 16.916173 0.000000 -1.000000 -0.022580 +0.150000 0.450000 0.750000 2 5 8 0.020199 0.026027 -0.014819 16.997629 0.000000 -1.000000 -0.022766 +0.250000 0.450000 0.750000 3 5 8 0.009256 0.018005 -0.015516 17.243927 0.000000 -1.000000 -0.022927 +0.350000 0.450000 0.750000 4 5 8 -0.005458 0.008274 -0.018134 17.359630 0.000000 -1.000000 -0.023095 +0.450000 0.450000 0.750000 5 5 8 -0.001403 0.001377 -0.003720 17.206057 0.000000 -1.000000 -0.022837 +0.550000 0.450000 0.750000 6 5 8 0.007580 -0.002245 -0.018253 17.398739 0.000000 -1.000000 -0.023158 +0.650000 0.450000 0.750000 7 5 8 0.003774 -0.008821 -0.012158 17.400132 0.000000 -1.000000 -0.023108 +0.750000 0.450000 0.750000 8 5 8 0.000456 -0.008955 -0.000855 17.370708 0.000000 -1.000000 -0.022953 +0.850000 0.450000 0.750000 9 5 8 -0.004111 -0.019413 -0.008715 17.174199 0.000000 -1.000000 -0.022844 +0.950000 0.450000 0.750000 10 5 8 -0.003638 -0.038112 -0.006418 16.761156 0.000000 -1.000000 -0.022843 +1.000000 0.450000 0.750000 11 5 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022843 +0.000000 0.550000 0.750000 0 6 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022608 +0.050000 0.550000 0.750000 1 6 8 0.008537 0.036822 -0.019551 16.672928 0.000000 -1.000000 -0.022608 +0.150000 0.550000 0.750000 2 6 8 0.013175 0.035042 -0.029182 16.982909 0.000000 -1.000000 -0.022849 +0.250000 0.550000 0.750000 3 6 8 0.003552 0.024482 -0.016061 17.289481 0.000000 -1.000000 -0.023021 +0.350000 0.550000 0.750000 4 6 8 -0.004595 0.016119 -0.018539 17.393706 0.000000 -1.000000 -0.023171 +0.450000 0.550000 0.750000 5 6 8 -0.000673 0.015095 -0.012736 17.327285 0.000000 -1.000000 -0.023187 +0.550000 0.550000 0.750000 6 6 8 0.003239 0.002471 -0.012718 17.412343 0.000000 -1.000000 -0.023277 +0.650000 0.550000 0.750000 7 6 8 -0.001654 -0.005195 -0.004282 17.388687 0.000000 -1.000000 -0.023129 +0.750000 0.550000 0.750000 8 6 8 -0.005382 -0.004275 -0.000878 17.322864 0.000000 -1.000000 -0.022949 +0.850000 0.550000 0.750000 9 6 8 -0.010956 -0.018282 -0.004579 17.107588 0.000000 -1.000000 -0.022862 +0.950000 0.550000 0.750000 10 6 8 -0.007631 -0.034038 0.034212 16.947436 0.000000 -1.000000 -0.022758 +1.000000 0.550000 0.750000 11 6 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022758 +0.000000 0.650000 0.750000 0 7 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.022890 +0.050000 0.650000 0.750000 1 7 8 0.001292 0.041847 -0.075681 16.564435 0.000000 -1.000000 -0.022890 +0.150000 0.650000 0.750000 2 7 8 0.000155 0.037774 -0.034231 17.126858 0.000000 -1.000000 -0.023225 +0.250000 0.650000 0.750000 3 7 8 -0.002560 0.027327 -0.013726 17.354720 0.000000 -1.000000 -0.023249 +0.350000 0.650000 0.750000 4 7 8 -0.002742 0.018828 -0.009450 17.426278 0.000000 -1.000000 -0.023348 +0.450000 0.650000 0.750000 5 7 8 -0.001050 0.016203 -0.011262 17.389535 0.000000 -1.000000 -0.023431 +0.550000 0.650000 0.750000 6 7 8 -0.002240 0.002516 -0.003206 17.418380 0.000000 -1.000000 -0.023344 +0.650000 0.650000 0.750000 7 7 8 -0.006986 -0.001332 -0.003461 17.352503 0.000000 -1.000000 -0.023160 +0.750000 0.650000 0.750000 8 7 8 -0.008891 -0.001500 -0.006720 17.251383 0.000000 -1.000000 -0.023046 +0.850000 0.650000 0.750000 9 7 8 -0.012628 -0.016234 0.003466 17.134575 0.000000 -1.000000 -0.022985 +0.950000 0.650000 0.750000 10 7 8 -0.008215 -0.033256 0.048826 17.014939 0.000000 -1.000000 -0.022714 +1.000000 0.650000 0.750000 11 7 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022714 +0.000000 0.750000 0.750000 0 8 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.023104 +0.050000 0.750000 0.750000 1 8 8 -0.002514 0.033209 -0.091450 16.740603 0.000000 -1.000000 -0.023104 +0.150000 0.750000 0.750000 2 8 8 -0.006020 0.032806 -0.022644 17.270439 0.000000 -1.000000 -0.023456 +0.250000 0.750000 0.750000 3 8 8 -0.004978 0.024861 -0.002426 17.388862 0.000000 -1.000000 -0.023414 +0.350000 0.750000 0.750000 4 8 8 -0.001969 0.016055 0.004966 17.419345 0.000000 -1.000000 -0.023414 +0.450000 0.750000 0.750000 5 8 8 -0.001455 0.011947 -0.000729 17.395521 0.000000 -1.000000 -0.023454 +0.550000 0.750000 0.750000 6 8 8 -0.004046 0.001805 0.000171 17.396045 0.000000 -1.000000 -0.023353 +0.650000 0.750000 0.750000 7 8 8 -0.006317 0.002892 -0.004795 17.338061 0.000000 -1.000000 -0.023245 +0.750000 0.750000 0.750000 8 8 8 -0.007931 0.000372 -0.006596 17.260460 0.000000 -1.000000 -0.023198 +0.850000 0.750000 0.750000 9 8 8 -0.012435 -0.014148 0.010576 17.174489 0.000000 -1.000000 -0.023096 +0.950000 0.750000 0.750000 10 8 8 -0.007733 -0.031604 0.054702 17.047149 0.000000 -1.000000 -0.022634 +1.000000 0.750000 0.750000 11 8 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022634 +0.000000 0.850000 0.750000 0 9 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.023252 +0.050000 0.850000 0.750000 1 9 8 -0.003051 0.019061 -0.078474 16.937378 0.000000 -1.000000 -0.023252 +0.150000 0.850000 0.750000 2 9 8 -0.006339 0.025556 -0.005796 17.333632 0.000000 -1.000000 -0.023467 +0.250000 0.850000 0.750000 3 9 8 -0.003618 0.018022 0.011803 17.389184 0.000000 -1.000000 -0.023389 +0.350000 0.850000 0.750000 4 9 8 0.000438 0.010188 0.013777 17.390780 0.000000 -1.000000 -0.023356 +0.450000 0.850000 0.750000 5 9 8 0.001057 0.006264 0.005646 17.382562 0.000000 -1.000000 -0.023365 +0.550000 0.850000 0.750000 6 9 8 -0.000709 0.002390 0.002537 17.358638 0.000000 -1.000000 -0.023344 +0.650000 0.850000 0.750000 7 9 8 -0.001106 0.004063 -0.001661 17.334806 0.000000 -1.000000 -0.023322 +0.750000 0.850000 0.750000 8 9 8 -0.002320 0.001148 -0.003904 17.301339 0.000000 -1.000000 -0.023301 +0.850000 0.850000 0.750000 9 9 8 -0.007327 -0.010688 0.016928 17.233626 0.000000 -1.000000 -0.023131 +0.950000 0.850000 0.750000 10 9 8 -0.005115 -0.025891 0.055997 17.072017 0.000000 -1.000000 -0.022444 +1.000000 0.850000 0.750000 11 9 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022444 +0.000000 0.950000 0.750000 0 10 8 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.023339 +0.050000 0.950000 0.750000 1 10 8 -0.003667 0.005935 -0.049763 17.056126 0.000000 -1.000000 -0.023339 +0.150000 0.950000 0.750000 2 10 8 -0.003750 0.010911 0.008865 17.394955 0.000000 -1.000000 -0.023327 +0.250000 0.950000 0.750000 3 10 8 0.002525 0.006863 0.025006 17.419336 0.000000 -1.000000 -0.023286 +0.350000 0.950000 0.750000 4 10 8 0.006506 0.003570 0.034440 17.431675 0.000000 -1.000000 -0.023261 +0.450000 0.950000 0.750000 5 10 8 0.008357 0.001946 0.036702 17.432957 0.000000 -1.000000 -0.023260 +0.550000 0.950000 0.750000 6 10 8 0.009368 0.001359 0.034600 17.424216 0.000000 -1.000000 -0.023259 +0.650000 0.950000 0.750000 7 10 8 0.010805 0.001743 0.031558 17.407324 0.000000 -1.000000 -0.023248 +0.750000 0.950000 0.750000 8 10 8 0.011937 0.000298 0.030819 17.387082 0.000000 -1.000000 -0.023203 +0.850000 0.950000 0.750000 9 10 8 0.009079 -0.004329 0.036911 17.352548 0.000000 -1.000000 -0.023001 +0.950000 0.950000 0.750000 10 10 8 0.003037 -0.010858 0.056746 17.116771 0.000000 -1.000000 -0.022529 +1.000000 0.950000 0.750000 11 10 8 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.022529 +0.000000 1.000000 0.750000 0 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.750000 1 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023339 +0.150000 1.000000 0.750000 2 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023327 +0.250000 1.000000 0.750000 3 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023286 +0.350000 1.000000 0.750000 4 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023261 +0.450000 1.000000 0.750000 5 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023260 +0.550000 1.000000 0.750000 6 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023259 +0.650000 1.000000 0.750000 7 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023248 +0.750000 1.000000 0.750000 8 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023203 +0.850000 1.000000 0.750000 9 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.023001 +0.950000 1.000000 0.750000 10 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.022529 +1.000000 1.000000 0.750000 11 11 8 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.850000 0 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.850000 1 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.031687 +0.150000 0.000000 0.850000 2 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032097 +0.250000 0.000000 0.850000 3 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032249 +0.350000 0.000000 0.850000 4 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032316 +0.450000 0.000000 0.850000 5 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032336 +0.550000 0.000000 0.850000 6 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032305 +0.650000 0.000000 0.850000 7 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032326 +0.750000 0.000000 0.850000 8 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032401 +0.850000 0.000000 0.850000 9 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032490 +0.950000 0.000000 0.850000 10 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.032158 +1.000000 0.000000 0.850000 11 0 9 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.850000 0 1 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.031687 +0.050000 0.050000 0.850000 1 1 9 0.003524 0.009731 0.036244 16.984877 0.000000 -1.000000 -0.031687 +0.150000 0.050000 0.850000 2 1 9 0.001644 0.006916 0.031813 17.372951 0.000000 -1.000000 -0.032097 +0.250000 0.050000 0.850000 3 1 9 -0.005446 0.005593 0.026214 17.438239 0.000000 -1.000000 -0.032249 +0.350000 0.050000 0.850000 4 1 9 -0.007744 0.006030 0.029052 17.457575 0.000000 -1.000000 -0.032316 +0.450000 0.050000 0.850000 5 1 9 -0.008827 0.005718 0.032910 17.464379 0.000000 -1.000000 -0.032336 +0.550000 0.050000 0.850000 6 1 9 -0.008105 0.002567 0.033836 17.469616 0.000000 -1.000000 -0.032305 +0.650000 0.050000 0.850000 7 1 9 -0.004776 -0.001107 0.028628 17.473152 0.000000 -1.000000 -0.032326 +0.750000 0.050000 0.850000 8 1 9 0.000086 -0.005416 0.018281 17.479984 0.000000 -1.000000 -0.032401 +0.850000 0.050000 0.850000 9 1 9 0.004799 -0.010187 0.008733 17.476000 0.000000 -1.000000 -0.032490 +0.950000 0.050000 0.850000 10 1 9 0.003393 -0.008612 -0.045329 17.129844 0.000000 -1.000000 -0.032158 +1.000000 0.050000 0.850000 11 1 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.032158 +0.000000 0.150000 0.850000 0 2 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.031622 +0.050000 0.150000 0.850000 1 2 9 0.010110 0.024468 0.030054 16.922510 0.000000 -1.000000 -0.031622 +0.150000 0.150000 0.850000 2 2 9 0.015393 0.018185 0.010377 17.190857 0.000000 -1.000000 -0.032117 +0.250000 0.150000 0.850000 3 2 9 0.004841 0.014156 0.005363 17.394241 0.000000 -1.000000 -0.032342 +0.350000 0.150000 0.850000 4 2 9 -0.002650 0.013430 0.004866 17.445578 0.000000 -1.000000 -0.032497 +0.450000 0.150000 0.850000 5 2 9 -0.006888 0.013053 0.004744 17.449691 0.000000 -1.000000 -0.032574 +0.550000 0.150000 0.850000 6 2 9 -0.007888 0.004300 0.008090 17.439343 0.000000 -1.000000 -0.032475 +0.650000 0.150000 0.850000 7 2 9 -0.002829 -0.003163 0.011039 17.445285 0.000000 -1.000000 -0.032377 +0.750000 0.150000 0.850000 8 2 9 0.004981 -0.013901 0.010201 17.471611 0.000000 -1.000000 -0.032397 +0.850000 0.150000 0.850000 9 2 9 0.010058 -0.022474 0.003862 17.426097 0.000000 -1.000000 -0.032493 +0.950000 0.150000 0.850000 10 2 9 0.005456 -0.024175 -0.063672 16.950729 0.000000 -1.000000 -0.031873 +1.000000 0.150000 0.850000 11 2 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.031873 +0.000000 0.250000 0.850000 0 3 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.031922 +0.050000 0.250000 0.850000 1 3 9 0.012551 0.031937 0.026840 16.874946 0.000000 -1.000000 -0.031922 +0.150000 0.250000 0.850000 2 3 9 0.022081 0.026165 0.001515 17.064143 0.000000 -1.000000 -0.032222 +0.250000 0.250000 0.850000 3 3 9 0.011182 0.019979 -0.002724 17.318437 0.000000 -1.000000 -0.032408 +0.350000 0.250000 0.850000 4 3 9 0.000547 0.016190 -0.001695 17.456530 0.000000 -1.000000 -0.032538 +0.450000 0.250000 0.850000 5 3 9 -0.007166 0.014863 -0.007260 17.511810 0.000000 -1.000000 -0.032626 +0.550000 0.250000 0.850000 6 3 9 -0.010220 0.002514 0.000562 17.509168 0.000000 -1.000000 -0.032492 +0.650000 0.250000 0.850000 7 3 9 -0.004073 -0.008344 0.003178 17.519237 0.000000 -1.000000 -0.032378 +0.750000 0.250000 0.850000 8 3 9 0.004712 -0.018962 -0.005211 17.472374 0.000000 -1.000000 -0.032312 +0.850000 0.250000 0.850000 9 3 9 0.011536 -0.025237 -0.008715 17.365918 0.000000 -1.000000 -0.032336 +0.950000 0.250000 0.850000 10 3 9 0.006910 -0.035613 -0.062253 16.756449 0.000000 -1.000000 -0.031923 +1.000000 0.250000 0.850000 11 3 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.031923 +0.000000 0.350000 0.850000 0 4 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032172 +0.050000 0.350000 0.850000 1 4 9 0.012370 0.036329 0.021210 16.818831 0.000000 -1.000000 -0.032172 +0.150000 0.350000 0.850000 2 4 9 0.021586 0.033484 -0.005581 16.998188 0.000000 -1.000000 -0.032291 +0.250000 0.350000 0.850000 3 4 9 0.011533 0.024931 -0.006122 17.266953 0.000000 -1.000000 -0.032406 +0.350000 0.350000 0.850000 4 4 9 0.000331 0.018869 -0.005911 17.464473 0.000000 -1.000000 -0.032488 +0.450000 0.350000 0.850000 5 4 9 -0.008232 0.013407 -0.013835 17.555342 0.000000 -1.000000 -0.032551 +0.550000 0.350000 0.850000 6 4 9 -0.010357 -0.001365 -0.011859 17.557818 0.000000 -1.000000 -0.032401 +0.650000 0.350000 0.850000 7 4 9 -0.002851 -0.016184 -0.018995 17.472395 0.000000 -1.000000 -0.032202 +0.750000 0.350000 0.850000 8 4 9 0.004804 -0.021331 -0.012421 17.358345 0.000000 -1.000000 -0.032193 +0.850000 0.350000 0.850000 9 4 9 0.008460 -0.027224 -0.007743 17.220084 0.000000 -1.000000 -0.032315 +0.950000 0.350000 0.850000 10 4 9 0.004916 -0.043033 -0.045014 16.641926 0.000000 -1.000000 -0.032376 +1.000000 0.350000 0.850000 11 4 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.032376 +0.000000 0.450000 0.850000 0 5 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032407 +0.050000 0.450000 0.850000 1 5 9 0.009118 0.041637 0.004095 16.705142 0.000000 -1.000000 -0.032407 +0.150000 0.450000 0.850000 2 5 9 0.014198 0.040024 -0.015415 16.990407 0.000000 -1.000000 -0.032388 +0.250000 0.450000 0.850000 3 5 9 0.005317 0.028215 -0.007664 17.272324 0.000000 -1.000000 -0.032393 +0.350000 0.450000 0.850000 4 5 9 -0.003626 0.020161 -0.012406 17.474068 0.000000 -1.000000 -0.032426 +0.450000 0.450000 0.850000 5 5 9 -0.008683 0.007675 -0.021212 17.547180 0.000000 -1.000000 -0.032472 +0.550000 0.450000 0.850000 6 5 9 -0.006107 -0.010159 -0.017734 17.504644 0.000000 -1.000000 -0.032358 +0.650000 0.450000 0.850000 7 5 9 -0.002374 -0.019848 -0.012627 17.388893 0.000000 -1.000000 -0.032288 +0.750000 0.450000 0.850000 8 5 9 -0.002086 -0.021372 -0.002326 17.289801 0.000000 -1.000000 -0.032286 +0.850000 0.450000 0.850000 9 5 9 -0.001604 -0.030585 -0.003644 17.103824 0.000000 -1.000000 -0.032408 +0.950000 0.450000 0.850000 10 5 9 -0.000606 -0.045958 -0.014078 16.671167 0.000000 -1.000000 -0.032698 +1.000000 0.450000 0.850000 11 5 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.032698 +0.000000 0.550000 0.850000 0 6 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032497 +0.050000 0.550000 0.850000 1 6 9 0.000820 0.044056 -0.034651 16.578888 0.000000 -1.000000 -0.032497 +0.150000 0.550000 0.850000 2 6 9 -0.001460 0.040706 -0.024192 17.100832 0.000000 -1.000000 -0.032558 +0.250000 0.550000 0.850000 3 6 9 -0.005599 0.028917 -0.011577 17.339545 0.000000 -1.000000 -0.032440 +0.350000 0.550000 0.850000 4 6 9 -0.006192 0.017565 -0.016621 17.495565 0.000000 -1.000000 -0.032449 +0.450000 0.550000 0.850000 5 6 9 -0.005120 -0.002391 -0.015776 17.556907 0.000000 -1.000000 -0.032550 +0.550000 0.550000 0.850000 6 6 9 -0.005207 -0.015916 -0.010696 17.469145 0.000000 -1.000000 -0.032483 +0.650000 0.550000 0.850000 7 6 9 -0.006363 -0.018112 -0.004555 17.364181 0.000000 -1.000000 -0.032393 +0.750000 0.550000 0.850000 8 6 9 -0.008630 -0.020221 -0.000832 17.239526 0.000000 -1.000000 -0.032338 +0.850000 0.550000 0.850000 9 6 9 -0.012158 -0.032147 -0.000437 17.037790 0.000000 -1.000000 -0.032425 +0.950000 0.550000 0.850000 10 6 9 -0.006931 -0.043620 0.016656 16.799571 0.000000 -1.000000 -0.032521 +1.000000 0.550000 0.850000 11 6 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.032521 +0.000000 0.650000 0.850000 0 7 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032150 +0.050000 0.650000 0.850000 1 7 9 -0.005934 0.038087 -0.064339 16.671082 0.000000 -1.000000 -0.032150 +0.150000 0.650000 0.850000 2 7 9 -0.012630 0.034209 -0.025251 17.266450 0.000000 -1.000000 -0.032681 +0.250000 0.650000 0.850000 3 7 9 -0.010156 0.024729 -0.013037 17.437165 0.000000 -1.000000 -0.032625 +0.350000 0.650000 0.850000 4 7 9 -0.003805 0.009629 -0.007375 17.543643 0.000000 -1.000000 -0.032665 +0.450000 0.650000 0.850000 5 7 9 -0.003434 -0.008827 -0.008699 17.529586 0.000000 -1.000000 -0.032696 +0.550000 0.650000 0.850000 6 7 9 -0.005023 -0.013485 -0.002933 17.452322 0.000000 -1.000000 -0.032569 +0.650000 0.650000 0.850000 7 7 9 -0.005888 -0.014546 -0.003723 17.372103 0.000000 -1.000000 -0.032490 +0.750000 0.650000 0.850000 8 7 9 -0.012217 -0.018756 -0.003667 17.235273 0.000000 -1.000000 -0.032453 +0.850000 0.650000 0.850000 9 7 9 -0.017927 -0.029776 0.006121 17.065350 0.000000 -1.000000 -0.032407 +0.950000 0.650000 0.850000 10 7 9 -0.009664 -0.039409 0.028952 16.872049 0.000000 -1.000000 -0.032275 +1.000000 0.650000 0.850000 11 7 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.032275 +0.000000 0.750000 0.850000 0 8 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032070 +0.050000 0.750000 0.850000 1 8 9 -0.005972 0.025785 -0.068704 16.884707 0.000000 -1.000000 -0.032070 +0.150000 0.750000 0.850000 2 8 9 -0.013234 0.025846 -0.012799 17.401554 0.000000 -1.000000 -0.032955 +0.250000 0.750000 0.850000 3 8 9 -0.011418 0.016788 -0.000777 17.470801 0.000000 -1.000000 -0.032861 +0.350000 0.750000 0.850000 4 8 9 -0.004975 0.003251 0.004523 17.484853 0.000000 -1.000000 -0.032761 +0.450000 0.750000 0.850000 5 8 9 -0.001122 -0.006542 -0.000211 17.462717 0.000000 -1.000000 -0.032739 +0.550000 0.750000 0.850000 6 8 9 0.000168 -0.009285 -0.000603 17.453246 0.000000 -1.000000 -0.032647 +0.650000 0.750000 0.850000 7 8 9 -0.002223 -0.011718 -0.004289 17.404112 0.000000 -1.000000 -0.032601 +0.750000 0.750000 0.850000 8 8 9 -0.011174 -0.016339 -0.002428 17.286903 0.000000 -1.000000 -0.032550 +0.850000 0.750000 0.850000 9 8 9 -0.018412 -0.024909 0.010657 17.123693 0.000000 -1.000000 -0.032354 +0.950000 0.750000 0.850000 10 8 9 -0.009931 -0.034581 0.032558 16.910882 0.000000 -1.000000 -0.032014 +1.000000 0.750000 0.850000 11 8 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.032014 +0.000000 0.850000 0.850000 0 9 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032460 +0.050000 0.850000 0.850000 1 9 9 -0.005384 0.012001 -0.056345 17.065601 0.000000 -1.000000 -0.032460 +0.150000 0.850000 0.850000 2 9 9 -0.012034 0.018412 0.002855 17.410109 0.000000 -1.000000 -0.033019 +0.250000 0.850000 0.850000 3 9 9 -0.009494 0.009675 0.012225 17.434855 0.000000 -1.000000 -0.032836 +0.350000 0.850000 0.850000 4 9 9 -0.001892 0.001151 0.013001 17.420278 0.000000 -1.000000 -0.032711 +0.450000 0.850000 0.850000 5 9 9 0.003585 -0.004539 0.007558 17.431580 0.000000 -1.000000 -0.032699 +0.550000 0.850000 0.850000 6 9 9 0.006131 -0.008111 0.003342 17.441383 0.000000 -1.000000 -0.032675 +0.650000 0.850000 0.850000 7 9 9 0.004562 -0.010472 0.000270 17.429643 0.000000 -1.000000 -0.032657 +0.750000 0.850000 0.850000 8 9 9 -0.003789 -0.012656 0.002759 17.365298 0.000000 -1.000000 -0.032553 +0.850000 0.850000 0.850000 9 9 9 -0.012434 -0.017887 0.016483 17.223785 0.000000 -1.000000 -0.032244 +0.950000 0.850000 0.850000 10 9 9 -0.007580 -0.026276 0.033772 16.946121 0.000000 -1.000000 -0.031699 +1.000000 0.850000 0.850000 11 9 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.031699 +0.000000 0.950000 0.850000 0 10 9 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.032908 +0.050000 0.950000 0.850000 1 10 9 -0.006341 0.002755 -0.031054 17.162839 0.000000 -1.000000 -0.032908 +0.150000 0.950000 0.850000 2 10 9 -0.009394 0.007506 0.020423 17.441738 0.000000 -1.000000 -0.032887 +0.250000 0.950000 0.850000 3 10 9 -0.002717 0.003398 0.029198 17.459256 0.000000 -1.000000 -0.032702 +0.350000 0.950000 0.850000 4 10 9 0.002971 0.000045 0.034474 17.467961 0.000000 -1.000000 -0.032556 +0.450000 0.950000 0.850000 5 10 9 0.006643 -0.002638 0.034082 17.468001 0.000000 -1.000000 -0.032490 +0.550000 0.950000 0.850000 6 10 9 0.008834 -0.004408 0.030288 17.461784 0.000000 -1.000000 -0.032472 +0.650000 0.950000 0.850000 7 10 9 0.009878 -0.005140 0.026952 17.447628 0.000000 -1.000000 -0.032463 +0.750000 0.950000 0.850000 8 10 9 0.008490 -0.005370 0.027218 17.423829 0.000000 -1.000000 -0.032398 +0.850000 0.950000 0.850000 9 10 9 0.002315 -0.006919 0.033235 17.376976 0.000000 -1.000000 -0.032180 +0.950000 0.950000 0.850000 10 10 9 -0.001124 -0.010459 0.037347 16.997555 0.000000 -1.000000 -0.031771 +1.000000 0.950000 0.850000 11 10 9 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.031771 +0.000000 1.000000 0.850000 0 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.850000 1 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032908 +0.150000 1.000000 0.850000 2 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032887 +0.250000 1.000000 0.850000 3 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032702 +0.350000 1.000000 0.850000 4 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032556 +0.450000 1.000000 0.850000 5 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032490 +0.550000 1.000000 0.850000 6 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032472 +0.650000 1.000000 0.850000 7 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032463 +0.750000 1.000000 0.850000 8 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032398 +0.850000 1.000000 0.850000 9 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.032180 +0.950000 1.000000 0.850000 10 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.031771 +1.000000 1.000000 0.850000 11 11 9 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 0.950000 0 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.050000 0.000000 0.950000 1 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041458 +0.150000 0.000000 0.950000 2 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041215 +0.250000 0.000000 0.950000 3 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041108 +0.350000 0.000000 0.950000 4 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041033 +0.450000 0.000000 0.950000 5 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.040978 +0.550000 0.000000 0.950000 6 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.040966 +0.650000 0.000000 0.950000 7 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041073 +0.750000 0.000000 0.950000 8 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041312 +0.850000 0.000000 0.950000 9 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041653 +0.950000 0.000000 0.950000 10 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 -0.041991 +1.000000 0.000000 0.950000 11 0 10 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.000000 0.050000 0.950000 0 1 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.041458 +0.050000 0.050000 0.950000 1 1 10 -0.001414 0.012908 0.011494 16.794681 0.000000 -1.000000 -0.041458 +0.150000 0.050000 0.950000 2 1 10 -0.002151 0.014472 0.015150 17.400723 0.000000 -1.000000 -0.041215 +0.250000 0.050000 0.950000 3 1 10 -0.003433 0.013110 0.011152 17.526978 0.000000 -1.000000 -0.041108 +0.350000 0.050000 0.950000 4 1 10 -0.006650 0.013074 0.011817 17.596151 0.000000 -1.000000 -0.041033 +0.450000 0.050000 0.950000 5 1 10 -0.007188 0.013109 0.013830 17.608188 0.000000 -1.000000 -0.040978 +0.550000 0.050000 0.950000 6 1 10 -0.003081 0.011649 0.015037 17.604499 0.000000 -1.000000 -0.040966 +0.650000 0.050000 0.950000 7 1 10 0.005151 0.008954 0.013799 17.607500 0.000000 -1.000000 -0.041073 +0.750000 0.050000 0.950000 8 1 10 0.014640 0.005841 0.010485 17.624925 0.000000 -1.000000 -0.041312 +0.850000 0.050000 0.950000 9 1 10 0.024182 0.003569 0.008467 17.640735 0.000000 -1.000000 -0.041653 +0.950000 0.050000 0.950000 10 1 10 0.014540 -0.002122 -0.016662 17.271269 0.000000 -1.000000 -0.041991 +1.000000 0.050000 0.950000 11 1 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.041991 +0.000000 0.150000 0.950000 0 2 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.041526 +0.050000 0.150000 0.950000 1 2 10 0.000423 0.032860 0.007468 16.726757 0.000000 -1.000000 -0.041526 +0.150000 0.150000 0.950000 2 2 10 0.000013 0.035200 0.005425 17.332192 0.000000 -1.000000 -0.041398 +0.250000 0.150000 0.950000 3 2 10 -0.002206 0.031663 0.004059 17.500156 0.000000 -1.000000 -0.041220 +0.350000 0.150000 0.950000 4 2 10 -0.004850 0.030035 0.002630 17.596427 0.000000 -1.000000 -0.041139 +0.450000 0.150000 0.950000 5 2 10 -0.005666 0.028573 0.002798 17.624939 0.000000 -1.000000 -0.041119 +0.550000 0.150000 0.950000 6 2 10 -0.002249 0.024049 0.003725 17.621582 0.000000 -1.000000 -0.041132 +0.650000 0.150000 0.950000 7 2 10 0.005616 0.017215 0.004200 17.622170 0.000000 -1.000000 -0.041188 +0.750000 0.150000 0.950000 8 2 10 0.016222 0.010491 0.004523 17.634884 0.000000 -1.000000 -0.041354 +0.850000 0.150000 0.950000 9 2 10 0.026974 0.004654 0.002554 17.651405 0.000000 -1.000000 -0.041687 +0.950000 0.150000 0.950000 10 2 10 0.016007 -0.013869 -0.025632 17.094810 0.000000 -1.000000 -0.042050 +1.000000 0.150000 0.950000 11 2 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.042050 +0.000000 0.250000 0.950000 0 3 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.042157 +0.050000 0.250000 0.950000 1 3 10 0.001344 0.044472 0.005913 16.679231 0.000000 -1.000000 -0.042157 +0.150000 0.250000 0.950000 2 3 10 -0.000280 0.044877 0.000453 17.269431 0.000000 -1.000000 -0.041996 +0.250000 0.250000 0.950000 3 3 10 -0.004263 0.039269 0.001149 17.476187 0.000000 -1.000000 -0.041672 +0.350000 0.250000 0.950000 4 3 10 -0.006144 0.034622 -0.000165 17.594585 0.000000 -1.000000 -0.041422 +0.450000 0.250000 0.950000 5 3 10 -0.007101 0.029769 -0.001249 17.646055 0.000000 -1.000000 -0.041286 +0.550000 0.250000 0.950000 6 3 10 -0.004740 0.022150 -0.000195 17.658975 0.000000 -1.000000 -0.041193 +0.650000 0.250000 0.950000 7 3 10 0.002372 0.013446 0.001583 17.667264 0.000000 -1.000000 -0.041153 +0.750000 0.250000 0.950000 8 3 10 0.013155 -0.000703 -0.003879 17.672917 0.000000 -1.000000 -0.041248 +0.850000 0.250000 0.950000 9 3 10 0.026454 -0.010172 -0.005167 17.547779 0.000000 -1.000000 -0.041568 +0.950000 0.250000 0.950000 10 3 10 0.016814 -0.032107 -0.025428 16.868288 0.000000 -1.000000 -0.042295 +1.000000 0.250000 0.950000 11 3 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.042295 +0.000000 0.350000 0.950000 0 4 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.042667 +0.050000 0.350000 0.950000 1 4 10 -0.000008 0.052503 0.003455 16.633035 0.000000 -1.000000 -0.042667 +0.150000 0.350000 0.950000 2 4 10 -0.004337 0.049561 -0.003058 17.231413 0.000000 -1.000000 -0.042338 +0.250000 0.350000 0.950000 3 4 10 -0.009061 0.041175 -0.000661 17.458095 0.000000 -1.000000 -0.041864 +0.350000 0.350000 0.950000 4 4 10 -0.009659 0.034067 -0.001449 17.582210 0.000000 -1.000000 -0.041468 +0.450000 0.350000 0.950000 5 4 10 -0.010186 0.024980 -0.003963 17.646208 0.000000 -1.000000 -0.041241 +0.550000 0.350000 0.950000 6 4 10 -0.007557 0.011007 -0.005534 17.643048 0.000000 -1.000000 -0.041102 +0.650000 0.350000 0.950000 7 4 10 0.001636 -0.006241 -0.010380 17.542629 0.000000 -1.000000 -0.041078 +0.750000 0.350000 0.950000 8 4 10 0.011234 -0.021238 -0.007164 17.372728 0.000000 -1.000000 -0.041364 +0.850000 0.350000 0.950000 9 4 10 0.019338 -0.031144 -0.003895 17.217128 0.000000 -1.000000 -0.041892 +0.950000 0.350000 0.950000 10 4 10 0.012038 -0.047265 -0.018582 16.697317 0.000000 -1.000000 -0.042775 +1.000000 0.350000 0.950000 11 4 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.042775 +0.000000 0.450000 0.950000 0 5 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.043046 +0.050000 0.450000 0.950000 1 5 10 -0.004215 0.055981 -0.004200 16.613238 0.000000 -1.000000 -0.043046 +0.150000 0.450000 0.950000 2 5 10 -0.012801 0.048084 -0.007113 17.236066 0.000000 -1.000000 -0.042506 +0.250000 0.450000 0.950000 3 5 10 -0.015992 0.037737 -0.002002 17.449365 0.000000 -1.000000 -0.041870 +0.350000 0.450000 0.950000 4 5 10 -0.014027 0.027873 -0.004155 17.560094 0.000000 -1.000000 -0.041420 +0.450000 0.450000 0.950000 5 5 10 -0.010919 0.010942 -0.008085 17.599733 0.000000 -1.000000 -0.041196 +0.550000 0.450000 0.950000 6 5 10 -0.003689 -0.010094 -0.007700 17.545624 0.000000 -1.000000 -0.041158 +0.650000 0.450000 0.950000 7 5 10 -0.000212 -0.027805 -0.006385 17.400928 0.000000 -1.000000 -0.041372 +0.750000 0.450000 0.950000 8 5 10 0.000982 -0.035768 -0.001375 17.247514 0.000000 -1.000000 -0.041710 +0.850000 0.450000 0.950000 9 5 10 0.006641 -0.043808 -0.000999 17.089044 0.000000 -1.000000 -0.042266 +0.950000 0.450000 0.950000 10 5 10 0.004837 -0.056316 -0.007346 16.656190 0.000000 -1.000000 -0.043070 +1.000000 0.450000 0.950000 11 5 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.043070 +0.000000 0.550000 0.950000 0 6 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.043076 +0.050000 0.550000 0.950000 1 6 10 -0.011519 0.050262 -0.017254 16.656118 0.000000 -1.000000 -0.043076 +0.150000 0.550000 0.950000 2 6 10 -0.024565 0.037414 -0.009460 17.293893 0.000000 -1.000000 -0.042386 +0.250000 0.550000 0.950000 3 6 10 -0.022856 0.026297 -0.005025 17.465863 0.000000 -1.000000 -0.041743 +0.350000 0.550000 0.950000 4 6 10 -0.015347 0.011430 -0.007233 17.562026 0.000000 -1.000000 -0.041359 +0.450000 0.550000 0.950000 5 6 10 -0.006826 -0.008923 -0.005209 17.604840 0.000000 -1.000000 -0.041280 +0.550000 0.550000 0.950000 6 6 10 -0.004171 -0.026152 -0.005047 17.526653 0.000000 -1.000000 -0.041383 +0.650000 0.550000 0.950000 7 6 10 -0.006588 -0.034886 -0.002952 17.382114 0.000000 -1.000000 -0.041605 +0.750000 0.550000 0.950000 8 6 10 -0.006242 -0.040848 0.000088 17.226274 0.000000 -1.000000 -0.041925 +0.850000 0.550000 0.950000 9 6 10 -0.004165 -0.048351 0.000396 17.039238 0.000000 -1.000000 -0.042401 +0.950000 0.550000 0.950000 10 6 10 -0.001628 -0.056753 0.003699 16.678334 0.000000 -1.000000 -0.042907 +1.000000 0.550000 0.950000 11 6 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.042907 +0.000000 0.650000 0.950000 0 7 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.042695 +0.050000 0.650000 0.950000 1 7 10 -0.017680 0.035513 -0.026696 16.797951 0.000000 -1.000000 -0.042695 +0.150000 0.650000 0.950000 2 7 10 -0.031942 0.015992 -0.010078 17.461224 0.000000 -1.000000 -0.042109 +0.250000 0.650000 0.950000 3 7 10 -0.022059 0.005294 -0.006282 17.594334 0.000000 -1.000000 -0.041655 +0.350000 0.650000 0.950000 4 7 10 -0.010382 -0.007857 -0.002575 17.653010 0.000000 -1.000000 -0.041466 +0.450000 0.650000 0.950000 5 7 10 -0.004751 -0.021547 -0.002749 17.629253 0.000000 -1.000000 -0.041458 +0.550000 0.650000 0.950000 6 7 10 -0.005916 -0.031220 -0.003203 17.549381 0.000000 -1.000000 -0.041537 +0.650000 0.650000 0.950000 7 7 10 -0.008885 -0.037366 -0.001737 17.413825 0.000000 -1.000000 -0.041709 +0.750000 0.650000 0.950000 8 7 10 -0.010773 -0.041425 -0.000003 17.250705 0.000000 -1.000000 -0.041977 +0.850000 0.650000 0.950000 9 7 10 -0.010632 -0.046692 0.002815 17.047838 0.000000 -1.000000 -0.042249 +0.950000 0.650000 0.950000 10 7 10 -0.004993 -0.050971 0.008704 16.720973 0.000000 -1.000000 -0.042486 +1.000000 0.650000 0.950000 11 7 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.042486 +0.000000 0.750000 0.950000 0 8 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.042445 +0.050000 0.750000 0.950000 1 8 10 -0.016835 0.015620 -0.027717 17.034767 0.000000 -1.000000 -0.042445 +0.150000 0.750000 0.950000 2 8 10 -0.029131 -0.005767 -0.003734 17.658645 0.000000 -1.000000 -0.042142 +0.250000 0.750000 0.950000 3 8 10 -0.019124 -0.012735 0.000179 17.651586 0.000000 -1.000000 -0.041820 +0.350000 0.750000 0.950000 4 8 10 -0.008874 -0.019302 0.001116 17.639846 0.000000 -1.000000 -0.041630 +0.450000 0.750000 0.950000 5 8 10 -0.003544 -0.026993 -0.001732 17.635149 0.000000 -1.000000 -0.041584 +0.550000 0.750000 0.950000 6 8 10 -0.004517 -0.032937 -0.001627 17.584068 0.000000 -1.000000 -0.041572 +0.650000 0.750000 0.950000 7 8 10 -0.008196 -0.036651 -0.001088 17.464453 0.000000 -1.000000 -0.041662 +0.750000 0.750000 0.950000 8 8 10 -0.011635 -0.038840 0.000796 17.308092 0.000000 -1.000000 -0.041836 +0.850000 0.750000 0.950000 9 8 10 -0.011783 -0.041088 0.004569 17.103288 0.000000 -1.000000 -0.041933 +0.950000 0.750000 0.950000 10 8 10 -0.005323 -0.042739 0.009841 16.753985 0.000000 -1.000000 -0.042017 +1.000000 0.750000 0.950000 11 8 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.042017 +0.000000 0.850000 0.950000 0 9 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.042429 +0.050000 0.850000 0.950000 1 9 10 -0.015226 -0.002262 -0.022232 17.200157 0.000000 -1.000000 -0.042429 +0.150000 0.850000 0.950000 2 9 10 -0.026811 -0.013906 0.003764 17.606787 0.000000 -1.000000 -0.042181 +0.250000 0.850000 0.950000 3 9 10 -0.017478 -0.018055 0.005651 17.603175 0.000000 -1.000000 -0.041795 +0.350000 0.850000 0.950000 4 9 10 -0.006972 -0.022641 0.005135 17.605713 0.000000 -1.000000 -0.041558 +0.450000 0.850000 0.950000 5 9 10 -0.000664 -0.027453 0.003308 17.618165 0.000000 -1.000000 -0.041442 +0.550000 0.850000 0.950000 6 9 10 -0.000621 -0.029993 0.001594 17.602825 0.000000 -1.000000 -0.041365 +0.650000 0.850000 0.950000 7 9 10 -0.004859 -0.031536 0.001256 17.512133 0.000000 -1.000000 -0.041374 +0.750000 0.850000 0.950000 8 9 10 -0.009179 -0.031842 0.003382 17.378885 0.000000 -1.000000 -0.041431 +0.850000 0.850000 0.950000 9 9 10 -0.008911 -0.031871 0.007581 17.194439 0.000000 -1.000000 -0.041412 +0.950000 0.850000 0.950000 10 9 10 -0.003556 -0.031356 0.010418 16.789808 0.000000 -1.000000 -0.041452 +1.000000 0.850000 0.950000 11 9 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.041452 +0.000000 0.950000 0.950000 0 10 10 0.000000 0.000000 0.000000 2.168622 0.000000 1.000000 -0.042412 +0.050000 0.950000 0.950000 1 10 10 -0.015605 -0.004633 -0.010976 17.296718 0.000000 -1.000000 -0.042412 +0.150000 0.950000 0.950000 2 10 10 -0.025770 -0.006889 0.012324 17.595810 0.000000 -1.000000 -0.042032 +0.250000 0.950000 0.950000 3 10 10 -0.014764 -0.009045 0.014607 17.594867 0.000000 -1.000000 -0.041596 +0.350000 0.950000 0.950000 4 10 10 -0.004240 -0.011159 0.016112 17.594629 0.000000 -1.000000 -0.041324 +0.450000 0.950000 0.950000 5 10 10 0.002939 -0.012817 0.015037 17.601427 0.000000 -1.000000 -0.041231 +0.550000 0.950000 0.950000 6 10 10 0.004222 -0.013474 0.012532 17.599345 0.000000 -1.000000 -0.041230 +0.650000 0.950000 0.950000 7 10 10 0.000333 -0.013745 0.010794 17.543570 0.000000 -1.000000 -0.041264 +0.750000 0.950000 0.950000 8 10 10 -0.004345 -0.013463 0.011732 17.442775 0.000000 -1.000000 -0.041296 +0.850000 0.950000 0.950000 9 10 10 -0.003676 -0.013044 0.015441 17.303438 0.000000 -1.000000 -0.041254 +0.950000 0.950000 0.950000 10 10 10 -0.000639 -0.012246 0.012883 16.838464 0.000000 -1.000000 -0.041418 +1.000000 0.950000 0.950000 11 10 10 0.000000 0.000000 0.000000 2.168238 0.000000 1.000000 -0.041418 +0.000000 1.000000 0.950000 0 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.050000 1.000000 0.950000 1 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.042412 +0.150000 1.000000 0.950000 2 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.042032 +0.250000 1.000000 0.950000 3 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041596 +0.350000 1.000000 0.950000 4 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041324 +0.450000 1.000000 0.950000 5 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041231 +0.550000 1.000000 0.950000 6 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041230 +0.650000 1.000000 0.950000 7 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041264 +0.750000 1.000000 0.950000 8 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041296 +0.850000 1.000000 0.950000 9 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041254 +0.950000 1.000000 0.950000 10 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 -0.041418 +1.000000 1.000000 0.950000 11 11 10 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.000000 0.000000 1.000000 0 0 11 0.000000 0.000000 0.000000 19.692162 0.000000 1.000000 0.000000 +0.050000 0.000000 1.000000 1 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.150000 0.000000 1.000000 2 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.250000 0.000000 1.000000 3 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.350000 0.000000 1.000000 4 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.450000 0.000000 1.000000 5 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.550000 0.000000 1.000000 6 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.650000 0.000000 1.000000 7 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.750000 0.000000 1.000000 8 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.850000 0.000000 1.000000 9 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +0.950000 0.000000 1.000000 10 0 11 0.000000 0.000000 0.000000 19.692612 0.000000 1.000000 0.000000 +1.000000 0.000000 1.000000 11 0 11 0.000000 0.000000 0.000000 19.692162 0.000000 1.000000 0.000000 +0.000000 0.050000 1.000000 0 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.050000 1.000000 1 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041458 +0.150000 0.050000 1.000000 2 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041215 +0.250000 0.050000 1.000000 3 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041108 +0.350000 0.050000 1.000000 4 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041033 +0.450000 0.050000 1.000000 5 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.040978 +0.550000 0.050000 1.000000 6 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.040966 +0.650000 0.050000 1.000000 7 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041073 +0.750000 0.050000 1.000000 8 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041312 +0.850000 0.050000 1.000000 9 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041653 +0.950000 0.050000 1.000000 10 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041991 +1.000000 0.050000 1.000000 11 1 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.150000 1.000000 0 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.150000 1.000000 1 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041526 +0.150000 0.150000 1.000000 2 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041398 +0.250000 0.150000 1.000000 3 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041220 +0.350000 0.150000 1.000000 4 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041139 +0.450000 0.150000 1.000000 5 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041119 +0.550000 0.150000 1.000000 6 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041132 +0.650000 0.150000 1.000000 7 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041188 +0.750000 0.150000 1.000000 8 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041354 +0.850000 0.150000 1.000000 9 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041687 +0.950000 0.150000 1.000000 10 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042050 +1.000000 0.150000 1.000000 11 2 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.250000 1.000000 0 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.250000 1.000000 1 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042157 +0.150000 0.250000 1.000000 2 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041996 +0.250000 0.250000 1.000000 3 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041672 +0.350000 0.250000 1.000000 4 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041422 +0.450000 0.250000 1.000000 5 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041286 +0.550000 0.250000 1.000000 6 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041193 +0.650000 0.250000 1.000000 7 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041153 +0.750000 0.250000 1.000000 8 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041248 +0.850000 0.250000 1.000000 9 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041568 +0.950000 0.250000 1.000000 10 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042295 +1.000000 0.250000 1.000000 11 3 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.350000 1.000000 0 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.350000 1.000000 1 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042667 +0.150000 0.350000 1.000000 2 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042338 +0.250000 0.350000 1.000000 3 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041864 +0.350000 0.350000 1.000000 4 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041468 +0.450000 0.350000 1.000000 5 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041241 +0.550000 0.350000 1.000000 6 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041102 +0.650000 0.350000 1.000000 7 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041078 +0.750000 0.350000 1.000000 8 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041364 +0.850000 0.350000 1.000000 9 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041892 +0.950000 0.350000 1.000000 10 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042775 +1.000000 0.350000 1.000000 11 4 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.450000 1.000000 0 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.450000 1.000000 1 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.043046 +0.150000 0.450000 1.000000 2 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042506 +0.250000 0.450000 1.000000 3 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041870 +0.350000 0.450000 1.000000 4 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041420 +0.450000 0.450000 1.000000 5 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041196 +0.550000 0.450000 1.000000 6 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041158 +0.650000 0.450000 1.000000 7 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041372 +0.750000 0.450000 1.000000 8 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041710 +0.850000 0.450000 1.000000 9 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042266 +0.950000 0.450000 1.000000 10 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.043070 +1.000000 0.450000 1.000000 11 5 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.550000 1.000000 0 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.550000 1.000000 1 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.043076 +0.150000 0.550000 1.000000 2 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042386 +0.250000 0.550000 1.000000 3 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041743 +0.350000 0.550000 1.000000 4 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041359 +0.450000 0.550000 1.000000 5 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041280 +0.550000 0.550000 1.000000 6 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041383 +0.650000 0.550000 1.000000 7 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041605 +0.750000 0.550000 1.000000 8 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041925 +0.850000 0.550000 1.000000 9 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042401 +0.950000 0.550000 1.000000 10 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042907 +1.000000 0.550000 1.000000 11 6 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.650000 1.000000 0 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.650000 1.000000 1 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042695 +0.150000 0.650000 1.000000 2 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042109 +0.250000 0.650000 1.000000 3 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041655 +0.350000 0.650000 1.000000 4 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041466 +0.450000 0.650000 1.000000 5 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041458 +0.550000 0.650000 1.000000 6 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041537 +0.650000 0.650000 1.000000 7 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041709 +0.750000 0.650000 1.000000 8 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041977 +0.850000 0.650000 1.000000 9 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042249 +0.950000 0.650000 1.000000 10 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042486 +1.000000 0.650000 1.000000 11 7 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.750000 1.000000 0 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.750000 1.000000 1 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042445 +0.150000 0.750000 1.000000 2 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042142 +0.250000 0.750000 1.000000 3 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041820 +0.350000 0.750000 1.000000 4 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041630 +0.450000 0.750000 1.000000 5 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041584 +0.550000 0.750000 1.000000 6 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041572 +0.650000 0.750000 1.000000 7 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041662 +0.750000 0.750000 1.000000 8 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041836 +0.850000 0.750000 1.000000 9 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041933 +0.950000 0.750000 1.000000 10 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042017 +1.000000 0.750000 1.000000 11 8 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.850000 1.000000 0 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.850000 1.000000 1 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042429 +0.150000 0.850000 1.000000 2 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042181 +0.250000 0.850000 1.000000 3 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041795 +0.350000 0.850000 1.000000 4 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041558 +0.450000 0.850000 1.000000 5 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041442 +0.550000 0.850000 1.000000 6 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041365 +0.650000 0.850000 1.000000 7 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041374 +0.750000 0.850000 1.000000 8 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041431 +0.850000 0.850000 1.000000 9 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041412 +0.950000 0.850000 1.000000 10 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041452 +1.000000 0.850000 1.000000 11 9 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 0.950000 1.000000 0 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.050000 0.950000 1.000000 1 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042412 +0.150000 0.950000 1.000000 2 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.042032 +0.250000 0.950000 1.000000 3 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041596 +0.350000 0.950000 1.000000 4 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041324 +0.450000 0.950000 1.000000 5 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041231 +0.550000 0.950000 1.000000 6 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041230 +0.650000 0.950000 1.000000 7 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041264 +0.750000 0.950000 1.000000 8 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041296 +0.850000 0.950000 1.000000 9 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041254 +0.950000 0.950000 1.000000 10 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 -0.041418 +1.000000 0.950000 1.000000 11 10 11 0.000000 0.000000 0.000000 19.691262 0.000000 1.000000 0.000000 +0.000000 1.000000 1.000000 0 11 11 0.000000 0.000000 0.000000 19.692193 0.000000 1.000000 0.000000 +0.050000 1.000000 1.000000 1 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.150000 1.000000 1.000000 2 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.250000 1.000000 1.000000 3 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.350000 1.000000 1.000000 4 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.450000 1.000000 1.000000 5 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.550000 1.000000 1.000000 6 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.650000 1.000000 1.000000 7 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.750000 1.000000 1.000000 8 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.850000 1.000000 1.000000 9 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +0.950000 1.000000 1.000000 10 11 11 0.000000 0.000000 0.000000 19.692659 0.000000 1.000000 0.000000 +1.000000 1.000000 1.000000 11 11 11 0.000000 0.000000 0.000000 19.693461 0.000000 1.000000 0.000000 diff --git a/Buildings/unsteady.plt b/Buildings/unsteady.plt new file mode 100644 index 00000000000..136f1582f42 --- /dev/null +++ b/Buildings/unsteady.plt @@ -0,0 +1,1728 @@ +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048936 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047522 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046483 +0.000000 0.000000 0.000000 19.695063 0.000000 0.045922 +0.000000 0.000000 0.000000 19.695063 0.000000 0.045874 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046334 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047341 +0.000000 0.000000 0.000000 19.695063 0.000000 0.049057 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051568 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051868 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048549 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047490 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046755 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046272 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046166 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046453 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047128 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048368 +0.000000 0.000000 0.000000 19.695063 0.000000 0.050459 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051002 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047935 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047317 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047047 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046620 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046352 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046340 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046591 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047145 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048165 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048131 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047008 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047112 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047615 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047170 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046826 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046505 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046393 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046520 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046753 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046250 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046391 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046600 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046925 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047276 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047568 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047050 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046618 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046411 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046341 +0.000000 0.000000 0.000000 19.695063 0.000000 0.045892 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.045992 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046426 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046524 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046678 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047070 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047519 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047207 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046732 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046483 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046220 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046459 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046987 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046738 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046500 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046524 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046839 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047280 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047332 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046984 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046863 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048574 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048647 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047524 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046788 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046406 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046405 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046725 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047099 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047361 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047425 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051677 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051025 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048728 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047305 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046534 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046242 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046414 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046907 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047511 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048331 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051995 +0.000000 0.000000 0.000000 19.695063 0.000000 0.051661 +0.000000 0.000000 0.000000 19.695063 0.000000 0.049110 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047417 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046435 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046005 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046120 +0.000000 0.000000 0.000000 19.695063 0.000000 0.046668 +0.000000 0.000000 0.000000 19.695063 0.000000 0.047611 +0.000000 0.000000 0.000000 19.695063 0.000000 0.048865 +0.000000 0.000000 0.000000 19.695063 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.048936 +0.000000 0.000000 0.000000 19.692612 0.000000 0.047522 +0.000000 0.000000 0.000000 19.692612 0.000000 0.046483 +0.000000 0.000000 0.000000 19.692612 0.000000 0.045922 +0.000000 0.000000 0.000000 19.692612 0.000000 0.045874 +0.000000 0.000000 0.000000 19.692612 0.000000 0.046334 +0.000000 0.000000 0.000000 19.692612 0.000000 0.047341 +0.000000 0.000000 0.000000 19.692612 0.000000 0.049057 +0.000000 0.000000 0.000000 19.692612 0.000000 0.051568 +0.000000 0.000000 0.000000 19.692612 0.000000 0.051868 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.694486 0.000000 0.048936 +-0.060355 0.012301 0.048063 17.325099 0.000000 0.048936 +-0.085644 -0.002048 0.027355 17.230362 0.000000 0.047522 +-0.097977 0.000420 0.011927 17.196275 0.000000 0.046483 +-0.102320 0.007343 -0.002991 17.167622 0.000000 0.045922 +-0.102491 0.014450 -0.014274 17.141302 0.000000 0.045874 +-0.100308 0.020800 -0.022981 17.111420 0.000000 0.046334 +-0.093782 0.025534 -0.032061 17.079933 0.000000 0.047341 +-0.079100 0.027011 -0.041692 17.052767 0.000000 0.049057 +-0.050987 0.023580 -0.051692 17.036278 0.000000 0.051568 +0.000000 0.015556 -0.066542 17.033915 0.000000 0.051868 +0.000000 0.000000 0.000000 19.694499 0.000000 0.051868 +0.000000 0.000000 0.000000 19.694486 0.000000 0.048549 +-0.051903 0.023216 0.041007 17.242075 0.000000 0.048549 +-0.073920 0.007063 0.012931 17.118529 0.000000 0.047490 +-0.087159 0.007040 0.006637 17.115775 0.000000 0.046755 +-0.093822 0.014493 -0.000476 17.107582 0.000000 0.046272 +-0.095180 0.023240 -0.007427 17.092009 0.000000 0.046166 +-0.092705 0.031377 -0.013048 17.069735 0.000000 0.046453 +-0.086278 0.038532 -0.019423 17.041961 0.000000 0.047128 +-0.073819 0.044624 -0.030071 17.008286 0.000000 0.048368 +-0.049883 0.049065 -0.049418 16.968014 0.000000 0.050459 +0.000000 0.047865 -0.082189 16.934711 0.000000 0.051002 +0.000000 0.000000 0.000000 19.694499 0.000000 0.051002 +0.000000 0.000000 0.000000 19.694486 0.000000 0.047935 +-0.052475 0.037351 0.038355 17.207984 0.000000 0.047935 +-0.068315 0.001788 0.021134 17.090322 0.000000 0.047317 +-0.073987 -0.003994 0.016720 17.081935 0.000000 0.047047 +-0.080257 0.012896 0.007876 17.076699 0.000000 0.046620 +-0.081588 0.025102 -0.000527 17.064728 0.000000 0.046352 +-0.078723 0.035914 -0.007401 17.048272 0.000000 0.046340 +-0.072047 0.044412 -0.012555 17.024856 0.000000 0.046591 +-0.060234 0.052013 -0.019201 16.996320 0.000000 0.047145 +-0.039786 0.058707 -0.030087 16.966964 0.000000 0.048165 +0.000000 0.058311 -0.050230 16.956101 0.000000 0.048131 +0.000000 0.000000 0.000000 19.694499 0.000000 0.048131 +0.000000 0.000000 0.000000 19.694486 0.000000 0.047008 +0.001775 -0.015785 0.051374 17.308025 0.000000 0.047008 +-0.002408 -0.032873 0.038858 17.121106 0.000000 0.047112 +-0.036612 -0.021520 0.051741 17.090268 0.000000 0.047615 +-0.062000 0.008101 0.030189 17.066364 0.000000 0.047170 +-0.064558 0.011524 0.016140 17.051901 0.000000 0.046826 +-0.063522 0.031845 0.003033 17.038704 0.000000 0.046505 +-0.056642 0.044007 -0.006473 17.025389 0.000000 0.046393 +-0.044503 0.051105 -0.011229 17.010643 0.000000 0.046520 +-0.026376 0.055458 -0.014876 17.002354 0.000000 0.046753 +0.000000 0.052469 -0.020530 17.019536 0.000000 0.046250 +0.000000 0.000000 0.000000 19.694499 0.000000 0.046250 +0.000000 0.000000 0.000000 19.694486 0.000000 0.046391 +0.010388 -0.049304 0.023139 17.094148 0.000000 0.046391 +0.018296 -0.054779 0.014007 17.038058 0.000000 0.046600 +0.022564 -0.047956 0.022175 17.032181 0.000000 0.046925 +0.015814 -0.035776 0.050630 17.059312 0.000000 0.047276 +-0.038055 -0.011494 0.076888 17.124565 0.000000 0.047568 +-0.044116 0.010387 0.027519 17.051282 0.000000 0.047050 +-0.041616 0.031850 0.009658 17.038258 0.000000 0.046618 +-0.031179 0.043461 -0.002791 17.033498 0.000000 0.046411 +-0.015768 0.046860 -0.006809 17.041493 0.000000 0.046341 +0.000000 0.041907 -0.005203 17.075098 0.000000 0.045892 +0.000000 0.000000 0.000000 19.694499 0.000000 0.045892 +0.000000 0.000000 0.000000 19.694486 0.000000 0.045992 +0.015581 -0.060711 -0.004169 17.020748 0.000000 0.045992 +0.030367 -0.061655 -0.007906 16.995576 0.000000 0.046426 +0.042379 -0.054649 -0.005316 16.995993 0.000000 0.046524 +0.045366 -0.046161 0.007398 17.004759 0.000000 0.046678 +0.039570 -0.033094 0.027396 17.022671 0.000000 0.047070 +-0.015948 -0.013867 0.079773 17.117508 0.000000 0.047519 +-0.019830 -0.010795 0.046529 17.085176 0.000000 0.047207 +-0.019075 0.024124 0.018586 17.068566 0.000000 0.046732 +-0.009012 0.029872 0.006931 17.083641 0.000000 0.046483 +0.000000 0.020320 0.012579 17.138909 0.000000 0.046220 +0.000000 0.000000 0.000000 19.694499 0.000000 0.046220 +0.000000 0.000000 0.000000 19.694486 0.000000 0.046459 +0.024491 -0.063345 -0.021856 16.971053 0.000000 0.046459 +0.043263 -0.061559 -0.018867 16.959471 0.000000 0.046987 +0.056747 -0.052430 -0.015705 16.974913 0.000000 0.046738 +0.064301 -0.043248 -0.010469 16.995143 0.000000 0.046500 +0.065093 -0.034382 0.000494 17.009357 0.000000 0.046524 +0.059136 -0.023951 0.016040 17.025994 0.000000 0.046839 +0.021464 -0.010590 0.037468 17.052275 0.000000 0.047280 +-0.001643 -0.002207 0.049442 17.110919 0.000000 0.047332 +-0.000779 0.002484 0.026531 17.133354 0.000000 0.046984 +0.000000 -0.017937 0.037487 17.257640 0.000000 0.046863 +0.000000 0.000000 0.000000 19.694499 0.000000 0.046863 +0.000000 0.000000 0.000000 19.694486 0.000000 0.048574 +0.037599 -0.048316 -0.052630 16.908288 0.000000 0.048574 +0.059473 -0.046464 -0.036974 16.921929 0.000000 0.048647 +0.072524 -0.039754 -0.025732 16.957339 0.000000 0.047524 +0.079588 -0.032950 -0.017367 16.992399 0.000000 0.046788 +0.081878 -0.026488 -0.010188 17.019634 0.000000 0.046406 +0.078906 -0.019544 -0.001437 17.037434 0.000000 0.046405 +0.071379 -0.011829 0.008769 17.050450 0.000000 0.046725 +0.054662 -0.005507 0.020025 17.062527 0.000000 0.047099 +0.029268 -0.003961 0.031850 17.099330 0.000000 0.047361 +0.000000 -0.031102 0.042444 17.278649 0.000000 0.047425 +0.000000 0.000000 0.000000 19.694499 0.000000 0.047425 +0.000000 0.000000 0.000000 19.694486 0.000000 0.051677 +0.048892 -0.005607 -0.091606 16.888216 0.000000 0.051677 +0.074194 -0.012174 -0.059600 16.923921 0.000000 0.051025 +0.087175 -0.015184 -0.037558 16.971362 0.000000 0.048728 +0.093336 -0.015105 -0.024012 17.012488 0.000000 0.047305 +0.095257 -0.012647 -0.015767 17.044399 0.000000 0.046534 +0.092683 -0.008420 -0.008552 17.067655 0.000000 0.046242 +0.084227 -0.002669 -0.000699 17.082118 0.000000 0.046414 +0.070125 0.002888 0.005716 17.088541 0.000000 0.046907 +0.051690 0.003581 0.010906 17.094030 0.000000 0.047511 +0.000000 -0.016852 0.037453 17.251410 0.000000 0.048331 +0.000000 0.000000 0.000000 19.694499 0.000000 0.048331 +0.000000 0.000000 0.000000 19.694486 0.000000 0.051995 +0.052107 0.000000 -0.057720 17.043619 0.000000 0.051995 +0.080403 0.000000 -0.040479 17.046561 0.000000 0.051661 +0.095377 0.000000 -0.030166 17.061451 0.000000 0.049110 +0.102478 0.000000 -0.022213 17.083682 0.000000 0.047417 +0.105311 0.000000 -0.015485 17.109263 0.000000 0.046435 +0.104746 0.000000 -0.007854 17.134773 0.000000 0.046005 +0.098780 0.000000 0.003301 17.160049 0.000000 0.046120 +0.085196 0.000000 0.016481 17.188617 0.000000 0.046668 +0.060333 0.000000 0.028456 17.220438 0.000000 0.047611 +0.000000 0.000000 0.043493 17.318386 0.000000 0.048865 +0.000000 0.000000 0.000000 19.694499 0.000000 0.048865 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.051995 +0.000000 0.000000 0.000000 19.692659 0.000000 0.051661 +0.000000 0.000000 0.000000 19.692659 0.000000 0.049110 +0.000000 0.000000 0.000000 19.692659 0.000000 0.047417 +0.000000 0.000000 0.000000 19.692659 0.000000 0.046435 +0.000000 0.000000 0.000000 19.692659 0.000000 0.046005 +0.000000 0.000000 0.000000 19.692659 0.000000 0.046120 +0.000000 0.000000 0.000000 19.692659 0.000000 0.046668 +0.000000 0.000000 0.000000 19.692659 0.000000 0.047611 +0.000000 0.000000 0.000000 19.692659 0.000000 0.048865 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.038918 +0.000000 0.000000 0.000000 19.692612 0.000000 0.037121 +0.000000 0.000000 0.000000 19.692612 0.000000 0.035933 +0.000000 0.000000 0.000000 19.692612 0.000000 0.035424 +0.000000 0.000000 0.000000 19.692612 0.000000 0.035343 +0.000000 0.000000 0.000000 19.692612 0.000000 0.035509 +0.000000 0.000000 0.000000 19.692612 0.000000 0.036002 +0.000000 0.000000 0.000000 19.692612 0.000000 0.037062 +0.000000 0.000000 0.000000 19.692612 0.000000 0.038824 +0.000000 0.000000 0.000000 19.692612 0.000000 0.039376 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.694486 0.000000 0.038918 +-0.042743 0.019913 0.070900 17.318064 0.000000 0.038918 +-0.058647 0.006253 0.037020 17.215193 0.000000 0.037121 +-0.058449 0.003033 0.008706 17.196046 0.000000 0.035933 +-0.054785 0.002477 -0.009126 17.202300 0.000000 0.035424 +-0.054021 0.001387 -0.016421 17.201577 0.000000 0.035343 +-0.056862 0.004583 -0.024723 17.175776 0.000000 0.035509 +-0.060502 0.011004 -0.039427 17.120136 0.000000 0.036002 +-0.057677 0.015575 -0.060093 17.036429 0.000000 0.037062 +-0.039331 0.012089 -0.082129 16.952313 0.000000 0.038824 +0.000000 -0.003187 -0.102686 16.907780 0.000000 0.039376 +0.000000 0.000000 0.000000 19.694499 0.000000 0.039376 +0.000000 0.000000 0.000000 19.694486 0.000000 0.038321 +-0.027995 0.026158 0.062771 17.254673 0.000000 0.038321 +-0.038376 0.004608 0.024978 17.121660 0.000000 0.036888 +-0.041000 0.000188 0.012120 17.125954 0.000000 0.036085 +-0.040235 0.001087 0.000157 17.132627 0.000000 0.035606 +-0.039192 0.002008 -0.009089 17.130824 0.000000 0.035490 +-0.039659 0.003374 -0.011373 17.123853 0.000000 0.035598 +-0.040695 0.006250 -0.013635 17.099750 0.000000 0.035814 +-0.038730 0.009111 -0.025574 17.048670 0.000000 0.036283 +-0.027702 0.009224 -0.057582 16.945767 0.000000 0.037278 +0.000000 -0.000995 -0.112083 16.784790 0.000000 0.037966 +0.000000 0.000000 0.000000 19.694499 0.000000 0.037966 +0.000000 0.000000 0.000000 19.694486 0.000000 0.037782 +-0.029954 0.036889 0.057591 17.216637 0.000000 0.037782 +-0.035028 0.002831 0.028001 17.084135 0.000000 0.036820 +-0.026914 -0.010822 0.019627 17.092038 0.000000 0.036296 +-0.021551 -0.004766 0.008371 17.120635 0.000000 0.035792 +-0.021066 0.000758 0.000240 17.151165 0.000000 0.035549 +-0.019754 0.000200 -0.005540 17.149945 0.000000 0.035588 +-0.017729 -0.003302 -0.005030 17.144495 0.000000 0.035696 +-0.014669 -0.005072 -0.008079 17.133820 0.000000 0.035836 +-0.008377 -0.003332 -0.023824 17.107259 0.000000 0.036028 +0.000000 -0.008913 -0.050689 17.046230 0.000000 0.036030 +0.000000 0.000000 0.000000 19.694499 0.000000 0.036030 +0.000000 0.000000 0.000000 19.694486 0.000000 0.037103 +-0.003543 0.029989 0.061826 17.268397 0.000000 0.037103 +-0.009263 0.010593 0.036828 17.108175 0.000000 0.036647 +-0.022614 0.005041 0.049238 17.081717 0.000000 0.036794 +-0.027578 0.003317 0.027075 17.070030 0.000000 0.036241 +-0.018500 -0.009844 0.017665 17.101047 0.000000 0.035737 +-0.010225 -0.001998 -0.003045 17.154057 0.000000 0.035515 +-0.005278 -0.005965 -0.008759 17.149014 0.000000 0.035601 +0.000378 -0.012278 -0.009681 17.151758 0.000000 0.035684 +0.012726 -0.016340 -0.014217 17.159797 0.000000 0.035689 +0.000000 -0.019759 0.003041 17.246859 0.000000 0.035417 +0.000000 0.000000 0.000000 19.694499 0.000000 0.035417 +0.000000 0.000000 0.000000 19.694486 0.000000 0.035826 +0.000817 0.014012 0.038305 17.203459 0.000000 0.035826 +-0.001750 0.020094 0.007082 17.079523 0.000000 0.035802 +-0.000803 0.012669 0.013604 17.055203 0.000000 0.035930 +0.006015 0.006414 0.040717 17.060928 0.000000 0.036390 +-0.017702 0.008309 0.082451 17.115360 0.000000 0.036871 +-0.013111 -0.007991 0.028920 17.068898 0.000000 0.035891 +-0.003734 -0.005642 -0.000045 17.097350 0.000000 0.035557 +0.003195 -0.011754 -0.010245 17.100084 0.000000 0.035647 +0.015586 -0.020449 -0.015090 17.106009 0.000000 0.035681 +0.000000 -0.018300 0.008926 17.224308 0.000000 0.035390 +0.000000 0.000000 0.000000 19.694499 0.000000 0.035390 +0.000000 0.000000 0.000000 19.694486 0.000000 0.035216 +-0.015851 0.014300 0.011398 17.196658 0.000000 0.035216 +-0.005344 0.014772 -0.013088 17.091634 0.000000 0.035599 +0.002857 0.012679 -0.013526 17.086220 0.000000 0.035655 +0.011952 0.010120 -0.005404 17.076643 0.000000 0.035557 +0.017412 0.005247 0.024995 17.050297 0.000000 0.035845 +-0.005239 0.008509 0.085921 17.112783 0.000000 0.036860 +0.001918 -0.007836 0.041566 17.072810 0.000000 0.036303 +0.004449 -0.007524 0.011826 17.071443 0.000000 0.035856 +0.008084 -0.017223 0.000072 17.085685 0.000000 0.035848 +0.000000 -0.022281 0.024647 17.216775 0.000000 0.035748 +0.000000 0.000000 0.000000 19.694499 0.000000 0.035748 +0.000000 0.000000 0.000000 19.694486 0.000000 0.035391 +-0.016135 0.004254 0.004325 17.235521 0.000000 0.035391 +-0.001885 -0.001058 -0.017289 17.139766 0.000000 0.035744 +0.006331 0.004872 -0.016117 17.138573 0.000000 0.035760 +0.012008 0.007425 -0.013455 17.127528 0.000000 0.035622 +0.018624 0.003780 -0.004658 17.123150 0.000000 0.035466 +0.027517 -0.000342 0.015995 17.078001 0.000000 0.035665 +0.016871 0.003864 0.036414 17.055825 0.000000 0.036327 +0.011898 0.002617 0.044276 17.090342 0.000000 0.036682 +0.002808 -0.007965 0.026367 17.105212 0.000000 0.036532 +0.000000 -0.032447 0.050467 17.269428 0.000000 0.036761 +0.000000 0.000000 0.000000 19.694499 0.000000 0.036761 +0.000000 0.000000 0.000000 19.694486 0.000000 0.036101 +0.005729 -0.004015 -0.050092 17.025316 0.000000 0.036101 +0.015298 -0.008903 -0.038703 17.062766 0.000000 0.036263 +0.018871 -0.006175 -0.018265 17.126927 0.000000 0.036014 +0.022711 -0.002659 -0.011129 17.144417 0.000000 0.035756 +0.022939 -0.001431 -0.005210 17.146716 0.000000 0.035537 +0.023585 -0.003469 0.001041 17.134844 0.000000 0.035493 +0.030177 -0.004576 0.010619 17.097113 0.000000 0.035826 +0.030645 -0.001802 0.023980 17.070926 0.000000 0.036396 +0.017769 -0.000897 0.037665 17.092015 0.000000 0.036977 +0.000000 -0.031818 0.059593 17.272465 0.000000 0.037601 +0.000000 0.000000 0.000000 19.694499 0.000000 0.037601 +0.000000 0.000000 0.000000 19.694486 0.000000 0.038353 +0.025264 0.000689 -0.121578 16.746490 0.000000 0.038353 +0.038550 -0.008097 -0.073701 16.901653 0.000000 0.037780 +0.040731 -0.010244 -0.035677 17.026730 0.000000 0.036637 +0.041860 -0.008172 -0.019636 17.092825 0.000000 0.036002 +0.044098 -0.005806 -0.013636 17.120937 0.000000 0.035629 +0.045462 -0.006099 -0.007287 17.129743 0.000000 0.035476 +0.043777 -0.007559 0.003970 17.125083 0.000000 0.035686 +0.037781 -0.004971 0.014886 17.110411 0.000000 0.036251 +0.029270 -0.006292 0.024822 17.101839 0.000000 0.036994 +0.000000 -0.023659 0.058574 17.261595 0.000000 0.038245 +0.000000 0.000000 0.000000 19.694499 0.000000 0.038245 +0.000000 0.000000 0.000000 19.694486 0.000000 0.039620 +0.035991 0.000000 -0.093027 16.925897 0.000000 0.039620 +0.055297 0.000000 -0.067891 16.968464 0.000000 0.039025 +0.061109 0.000000 -0.046231 17.038971 0.000000 0.037320 +0.061280 0.000000 -0.030564 17.106880 0.000000 0.036264 +0.061057 0.000000 -0.021073 17.156406 0.000000 0.035701 +0.061943 0.000000 -0.014841 17.181943 0.000000 0.035460 +0.064171 0.000000 -0.006483 17.179723 0.000000 0.035565 +0.062028 0.000000 0.013660 17.178645 0.000000 0.036154 +0.045509 0.000000 0.038693 17.202577 0.000000 0.037310 +0.000000 0.000000 0.065353 17.308950 0.000000 0.038888 +0.000000 0.000000 0.000000 19.694499 0.000000 0.038888 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.039620 +0.000000 0.000000 0.000000 19.692659 0.000000 0.039025 +0.000000 0.000000 0.000000 19.692659 0.000000 0.037320 +0.000000 0.000000 0.000000 19.692659 0.000000 0.036264 +0.000000 0.000000 0.000000 19.692659 0.000000 0.035701 +0.000000 0.000000 0.000000 19.692659 0.000000 0.035460 +0.000000 0.000000 0.000000 19.692659 0.000000 0.035565 +0.000000 0.000000 0.000000 19.692659 0.000000 0.036154 +0.000000 0.000000 0.000000 19.692659 0.000000 0.037310 +0.000000 0.000000 0.000000 19.692659 0.000000 0.038888 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.027307 +0.000000 0.000000 0.000000 19.692612 0.000000 0.026169 +0.000000 0.000000 0.000000 19.692612 0.000000 0.025520 +0.000000 0.000000 0.000000 19.692612 0.000000 0.025413 +0.000000 0.000000 0.000000 19.692612 0.000000 0.025426 +0.000000 0.000000 0.000000 19.692612 0.000000 0.025447 +0.000000 0.000000 0.000000 19.692612 0.000000 0.025527 +0.000000 0.000000 0.000000 19.692612 0.000000 0.025836 +0.000000 0.000000 0.000000 19.692612 0.000000 0.026743 +0.000000 0.000000 0.000000 19.692612 0.000000 0.027379 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.694486 0.000000 0.027307 +-0.032806 0.022835 0.080875 17.316632 0.000000 0.027307 +-0.035202 0.002651 0.036776 17.231238 0.000000 0.026169 +-0.025403 -0.012040 0.010956 17.244342 0.000000 0.025520 +-0.017655 -0.018838 0.001968 17.263121 0.000000 0.025413 +-0.016931 -0.016984 -0.000162 17.277537 0.000000 0.025426 +-0.021427 -0.015209 -0.005021 17.280538 0.000000 0.025447 +-0.029545 -0.011538 -0.019776 17.247315 0.000000 0.025527 +-0.036857 -0.003707 -0.049079 17.153892 0.000000 0.025836 +-0.030800 -0.004318 -0.083872 17.006306 0.000000 0.026743 +0.000000 -0.018374 -0.115115 16.877723 0.000000 0.027379 +0.000000 0.000000 0.000000 19.694499 0.000000 0.027379 +0.000000 0.000000 0.000000 19.694486 0.000000 0.027018 +-0.016714 0.027617 0.074714 17.270513 0.000000 0.027018 +-0.012259 -0.001478 0.024668 17.116293 0.000000 0.026157 +-0.004562 -0.012761 0.005151 17.106610 0.000000 0.025717 +0.002005 -0.016569 -0.008675 17.108035 0.000000 0.025534 +0.002338 -0.012918 -0.013490 17.133746 0.000000 0.025490 +0.000562 -0.012148 -0.012664 17.170966 0.000000 0.025507 +-0.003526 -0.017222 -0.003870 17.199635 0.000000 0.025534 +-0.011295 -0.018577 -0.002940 17.203715 0.000000 0.025609 +-0.017390 -0.017166 -0.038644 17.092360 0.000000 0.025895 +0.000000 -0.025740 -0.122111 16.761909 0.000000 0.026428 +0.000000 0.000000 0.000000 19.694499 0.000000 0.026428 +0.000000 0.000000 0.000000 19.694486 0.000000 0.026688 +-0.017477 0.034599 0.068096 17.235440 0.000000 0.026688 +-0.014765 0.000291 0.023531 17.080389 0.000000 0.026208 +-0.004625 -0.011654 0.008388 17.080329 0.000000 0.025954 +0.000175 -0.012469 -0.000528 17.086604 0.000000 0.025710 +-0.001452 -0.007958 -0.003095 17.119791 0.000000 0.025554 +-0.000992 -0.006743 -0.011409 17.150070 0.000000 0.025566 +0.001248 -0.014157 -0.010340 17.163570 0.000000 0.025607 +-0.001354 -0.019506 -0.004553 17.186969 0.000000 0.025631 +-0.005612 -0.017228 -0.019509 17.177640 0.000000 0.025693 +0.000000 -0.025895 -0.056149 17.047179 0.000000 0.025701 +0.000000 0.000000 0.000000 19.694499 0.000000 0.025701 +0.000000 0.000000 0.000000 19.694486 0.000000 0.026365 +-0.008202 0.037949 0.066685 17.253621 0.000000 0.026365 +-0.010293 0.016036 0.023182 17.089501 0.000000 0.026246 +-0.008565 0.007509 0.028351 17.076800 0.000000 0.026241 +-0.005388 -0.003111 0.014540 17.070671 0.000000 0.025970 +-0.006976 -0.011805 0.023097 17.108260 0.000000 0.025609 +-0.003800 -0.008949 -0.004019 17.121229 0.000000 0.025529 +0.001122 -0.013707 -0.014138 17.125561 0.000000 0.025609 +0.002346 -0.019053 -0.011362 17.151706 0.000000 0.025652 +0.008025 -0.019495 -0.017632 17.167816 0.000000 0.025645 +0.000000 -0.028719 0.013887 17.258320 0.000000 0.025550 +0.000000 0.000000 0.000000 19.694499 0.000000 0.025550 +0.000000 0.000000 0.000000 19.694486 0.000000 0.025875 +-0.007453 0.032761 0.050952 17.240696 0.000000 0.025875 +-0.011125 0.024797 0.001998 17.077855 0.000000 0.025939 +-0.007831 0.019717 -0.001896 17.066845 0.000000 0.026021 +0.007939 0.018366 0.003469 17.062234 0.000000 0.026192 +-0.007919 0.009823 0.076678 17.111818 0.000000 0.025932 +-0.005320 -0.010594 0.027961 17.082629 0.000000 0.025567 +0.001898 -0.015229 -0.005746 17.077702 0.000000 0.025594 +0.005808 -0.020375 -0.012836 17.104730 0.000000 0.025683 +0.011878 -0.024438 -0.016221 17.123202 0.000000 0.025702 +0.000000 -0.031179 0.023261 17.243869 0.000000 0.025621 +0.000000 0.000000 0.000000 19.694499 0.000000 0.025621 +0.000000 0.000000 0.000000 19.694486 0.000000 0.025532 +-0.012384 0.027126 0.029419 17.228701 0.000000 0.025532 +-0.008086 0.020089 -0.012676 17.108984 0.000000 0.025672 +-0.002740 0.017803 -0.016958 17.115156 0.000000 0.025749 +0.008144 0.018035 -0.015959 17.098374 0.000000 0.025762 +0.010066 0.014477 0.018414 17.080917 0.000000 0.025674 +-0.002725 0.010845 0.077269 17.111413 0.000000 0.025862 +0.005046 -0.004939 0.023501 17.064586 0.000000 0.025872 +0.009698 -0.012934 -0.000270 17.066320 0.000000 0.025897 +0.010834 -0.020874 -0.004629 17.081644 0.000000 0.025933 +0.000000 -0.033999 0.038301 17.246403 0.000000 0.025878 +0.000000 0.000000 0.000000 19.694499 0.000000 0.025878 +0.000000 0.000000 0.000000 19.694486 0.000000 0.025504 +-0.011067 0.024011 0.018507 17.244139 0.000000 0.025504 +-0.002756 0.014573 -0.020085 17.143655 0.000000 0.025659 +0.000885 0.016135 -0.018093 17.161481 0.000000 0.025711 +0.006335 0.016395 -0.017270 17.139972 0.000000 0.025662 +0.009289 0.011500 -0.004641 17.122565 0.000000 0.025548 +0.009548 0.008866 0.017710 17.099340 0.000000 0.025546 +0.008734 0.009037 0.023248 17.065371 0.000000 0.025889 +0.012041 0.005290 0.022745 17.074777 0.000000 0.026212 +0.007556 -0.006755 0.016735 17.084170 0.000000 0.026281 +0.000000 -0.034924 0.058950 17.274433 0.000000 0.026348 +0.000000 0.000000 0.000000 19.694499 0.000000 0.026348 +0.000000 0.000000 0.000000 19.694486 0.000000 0.025710 +0.006252 0.023196 -0.055532 17.034811 0.000000 0.025710 +0.007001 0.018225 -0.043108 17.088118 0.000000 0.025841 +0.003924 0.017237 -0.016297 17.180313 0.000000 0.025758 +0.004980 0.017913 -0.013711 17.165823 0.000000 0.025652 +0.002890 0.016520 -0.008147 17.152089 0.000000 0.025546 +0.001175 0.013898 -0.002280 17.124280 0.000000 0.025491 +0.007258 0.010400 0.003170 17.086047 0.000000 0.025647 +0.013656 0.007682 0.015191 17.072312 0.000000 0.025979 +0.011411 0.002210 0.030949 17.089355 0.000000 0.026320 +0.000000 -0.032268 0.068353 17.275721 0.000000 0.026707 +0.000000 0.000000 0.000000 19.694499 0.000000 0.026707 +0.000000 0.000000 0.000000 19.694486 0.000000 0.026634 +0.017762 0.013794 -0.129943 16.737743 0.000000 0.026634 +0.018336 0.008684 -0.064740 16.988527 0.000000 0.026269 +0.010283 0.008197 -0.018592 17.163075 0.000000 0.025817 +0.008088 0.011935 -0.011470 17.188646 0.000000 0.025625 +0.007659 0.014517 -0.011212 17.175125 0.000000 0.025482 +0.007399 0.014490 -0.007624 17.157834 0.000000 0.025391 +0.010071 0.012398 -0.000701 17.130734 0.000000 0.025434 +0.013890 0.006233 0.012519 17.108427 0.000000 0.025770 +0.018138 -0.004580 0.027370 17.105619 0.000000 0.026275 +0.000000 -0.025869 0.070320 17.274864 0.000000 0.027125 +0.000000 0.000000 0.000000 19.694499 0.000000 0.027125 +0.000000 0.000000 0.000000 19.694486 0.000000 0.027596 +0.025160 0.000000 -0.104397 16.902494 0.000000 0.027596 +0.033568 0.000000 -0.067622 17.029083 0.000000 0.026999 +0.030607 0.000000 -0.035080 17.159237 0.000000 0.026102 +0.026809 0.000000 -0.014839 17.241995 0.000000 0.025700 +0.026248 0.000000 -0.006002 17.278396 0.000000 0.025499 +0.028323 0.000000 -0.002429 17.289727 0.000000 0.025368 +0.033072 0.000000 0.001167 17.285417 0.000000 0.025313 +0.039861 0.000000 0.013109 17.249337 0.000000 0.025583 +0.035671 0.000000 0.038309 17.220840 0.000000 0.026351 +0.000000 0.000000 0.075162 17.307216 0.000000 0.027465 +0.000000 0.000000 0.000000 19.694499 0.000000 0.027465 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.027596 +0.000000 0.000000 0.000000 19.692659 0.000000 0.026999 +0.000000 0.000000 0.000000 19.692659 0.000000 0.026102 +0.000000 0.000000 0.000000 19.692659 0.000000 0.025700 +0.000000 0.000000 0.000000 19.692659 0.000000 0.025499 +0.000000 0.000000 0.000000 19.692659 0.000000 0.025368 +0.000000 0.000000 0.000000 19.692659 0.000000 0.025313 +0.000000 0.000000 0.000000 19.692659 0.000000 0.025583 +0.000000 0.000000 0.000000 19.692659 0.000000 0.026351 +0.000000 0.000000 0.000000 19.692659 0.000000 0.027465 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.016412 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015811 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015634 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015647 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015653 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015658 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015681 +0.000000 0.000000 0.000000 19.692612 0.000000 0.015732 +0.000000 0.000000 0.000000 19.692612 0.000000 0.016115 +0.000000 0.000000 0.000000 19.692612 0.000000 0.016639 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.694486 0.000000 0.016412 +-0.026406 0.022999 0.084283 17.320985 0.000000 0.016412 +-0.024437 -0.003042 0.037855 17.249918 0.000000 0.015811 +-0.015644 -0.016887 0.019053 17.250529 0.000000 0.015634 +-0.009933 -0.017842 0.014098 17.267894 0.000000 0.015647 +-0.009444 -0.014437 0.013784 17.295592 0.000000 0.015653 +-0.011664 -0.013379 0.010572 17.312243 0.000000 0.015658 +-0.016583 -0.013686 -0.001177 17.299772 0.000000 0.015681 +-0.023889 -0.010637 -0.031143 17.230483 0.000000 0.015732 +-0.024136 -0.012485 -0.071146 17.071140 0.000000 0.016115 +0.000000 -0.025638 -0.113618 16.865696 0.000000 0.016639 +0.000000 0.000000 0.000000 19.694499 0.000000 0.016639 +0.000000 0.000000 0.000000 19.694486 0.000000 0.016314 +-0.011171 0.027654 0.081237 17.283841 0.000000 0.016314 +-0.002973 -0.006442 0.019877 17.105811 0.000000 0.015864 +0.007432 -0.016226 -0.005912 17.086694 0.000000 0.015746 +0.010526 -0.016385 -0.013227 17.114811 0.000000 0.015661 +0.008422 -0.014229 -0.011599 17.142547 0.000000 0.015626 +0.003966 -0.012766 -0.008828 17.181094 0.000000 0.015628 +0.001874 -0.015298 -0.000176 17.211837 0.000000 0.015652 +-0.002030 -0.018126 0.008443 17.242723 0.000000 0.015678 +-0.012012 -0.021676 -0.019479 17.173502 0.000000 0.015751 +0.000000 -0.035580 -0.124188 16.708700 0.000000 0.016125 +0.000000 0.000000 0.000000 19.694499 0.000000 0.016125 +0.000000 0.000000 0.000000 19.694486 0.000000 0.016146 +-0.011338 0.031687 0.075406 17.254174 0.000000 0.016146 +-0.005483 -0.002157 0.013398 17.077823 0.000000 0.015976 +0.007207 -0.009708 -0.010818 17.073360 0.000000 0.015950 +0.011208 -0.010253 -0.010664 17.082456 0.000000 0.015821 +0.006944 -0.011082 -0.001983 17.105840 0.000000 0.015684 +0.004082 -0.010889 -0.010430 17.146230 0.000000 0.015640 +0.002659 -0.015766 -0.008457 17.190697 0.000000 0.015641 +-0.003836 -0.017635 0.001442 17.226582 0.000000 0.015674 +-0.010516 -0.016461 -0.018052 17.173938 0.000000 0.015779 +0.000000 -0.027927 -0.074324 16.928235 0.000000 0.015918 +0.000000 0.000000 0.000000 19.694499 0.000000 0.015918 +0.000000 0.000000 0.000000 19.694486 0.000000 0.016061 +-0.010141 0.036901 0.071616 17.254128 0.000000 0.016061 +-0.008433 0.015560 0.003762 17.077377 0.000000 0.016109 +0.005224 0.012101 -0.007114 17.069852 0.000000 0.016226 +0.004841 0.002314 0.002353 17.070824 0.000000 0.015994 +0.000803 -0.010448 0.026497 17.107505 0.000000 0.015763 +0.002147 -0.012903 -0.003356 17.112798 0.000000 0.015614 +0.003504 -0.017120 -0.014149 17.155133 0.000000 0.015636 +-0.001761 -0.017560 -0.006180 17.208072 0.000000 0.015662 +-0.003348 -0.014235 -0.018278 17.192475 0.000000 0.015662 +0.000000 -0.030200 0.012805 17.266927 0.000000 0.015734 +0.000000 0.000000 0.000000 19.694499 0.000000 0.015734 +0.000000 0.000000 0.000000 19.694486 0.000000 0.015857 +-0.008964 0.037149 0.059671 17.252488 0.000000 0.015857 +-0.006621 0.021309 -0.006092 17.104877 0.000000 0.015878 +0.001509 0.016273 -0.014198 17.126502 0.000000 0.015974 +0.007807 0.012352 -0.012870 17.108547 0.000000 0.016010 +-0.001215 0.008278 0.066968 17.107897 0.000000 0.015923 +0.001044 -0.011097 0.023889 17.091008 0.000000 0.015672 +0.005245 -0.016884 -0.010190 17.102292 0.000000 0.015685 +0.003046 -0.018058 -0.010146 17.163554 0.000000 0.015721 +0.007095 -0.018539 -0.015971 17.168265 0.000000 0.015705 +0.000000 -0.034679 0.034831 17.263711 0.000000 0.015730 +0.000000 0.000000 0.000000 19.694499 0.000000 0.015730 +0.000000 0.000000 0.000000 19.694486 0.000000 0.015662 +-0.007752 0.032678 0.041645 17.251320 0.000000 0.015662 +-0.003112 0.016206 -0.012213 17.149810 0.000000 0.015656 +0.001611 0.012775 -0.018185 17.182173 0.000000 0.015765 +0.004495 0.010104 -0.016600 17.161261 0.000000 0.015810 +0.006204 0.011694 0.013284 17.106893 0.000000 0.015824 +0.001240 0.009364 0.061764 17.109007 0.000000 0.015936 +0.006359 -0.005282 0.006773 17.071480 0.000000 0.015907 +0.008337 -0.012351 -0.007961 17.104608 0.000000 0.015918 +0.009841 -0.016691 -0.007986 17.120780 0.000000 0.015901 +0.000000 -0.035710 0.049170 17.260995 0.000000 0.015905 +0.000000 0.000000 0.000000 19.694499 0.000000 0.015905 +0.000000 0.000000 0.000000 19.694486 0.000000 0.015649 +0.000316 0.026246 0.024623 17.267013 0.000000 0.015649 +0.002854 0.017006 -0.023424 17.144261 0.000000 0.015608 +0.002581 0.013398 -0.018446 17.203816 0.000000 0.015741 +-0.000892 0.010204 -0.013902 17.183547 0.000000 0.015741 +0.000704 0.011294 -0.005843 17.123560 0.000000 0.015735 +-0.000537 0.012127 0.016183 17.099194 0.000000 0.015794 +0.003985 0.009961 0.003477 17.070131 0.000000 0.016007 +0.010803 0.005700 -0.002128 17.072732 0.000000 0.016153 +0.008914 -0.003885 0.005816 17.083432 0.000000 0.016126 +0.000000 -0.033737 0.065891 17.276465 0.000000 0.016141 +0.000000 0.000000 0.000000 19.694499 0.000000 0.016141 +0.000000 0.000000 0.000000 19.694486 0.000000 0.015966 +0.015105 0.034718 -0.079108 16.912933 0.000000 0.015966 +0.010315 0.026947 -0.048263 17.046220 0.000000 0.015908 +0.001843 0.018191 -0.012622 17.206429 0.000000 0.015816 +-0.005208 0.013349 -0.009811 17.187655 0.000000 0.015745 +-0.005837 0.014552 -0.010784 17.136247 0.000000 0.015714 +-0.005902 0.015929 -0.006023 17.102248 0.000000 0.015722 +-0.001383 0.015882 -0.007274 17.078570 0.000000 0.015822 +0.007093 0.013054 -0.000640 17.074854 0.000000 0.015977 +0.008476 0.005182 0.020500 17.085082 0.000000 0.016082 +0.000000 -0.031261 0.074355 17.281957 0.000000 0.016266 +0.000000 0.000000 0.000000 19.694499 0.000000 0.016266 +0.000000 0.000000 0.000000 19.694486 0.000000 0.016275 +0.014299 0.020713 -0.130240 16.702719 0.000000 0.016275 +0.011155 0.017502 -0.052156 17.035278 0.000000 0.015994 +0.000972 0.014592 -0.004816 17.218401 0.000000 0.015802 +-0.004983 0.014044 -0.006216 17.202062 0.000000 0.015739 +-0.006498 0.015181 -0.010334 17.160750 0.000000 0.015681 +-0.006057 0.016763 -0.008903 17.127967 0.000000 0.015655 +-0.001481 0.017367 -0.006765 17.100326 0.000000 0.015678 +0.005542 0.013615 0.004937 17.094721 0.000000 0.015778 +0.012225 0.000292 0.025580 17.104126 0.000000 0.015960 +0.000000 -0.025359 0.076647 17.286757 0.000000 0.016488 +0.000000 0.000000 0.000000 19.694499 0.000000 0.016488 +0.000000 0.000000 0.000000 19.694486 0.000000 0.016757 +0.017247 0.000000 -0.100934 16.898157 0.000000 0.016757 +0.020215 0.000000 -0.053094 17.099060 0.000000 0.016308 +0.016288 0.000000 -0.016567 17.239566 0.000000 0.015902 +0.012407 0.000000 0.003080 17.301904 0.000000 0.015775 +0.011759 0.000000 0.009822 17.310896 0.000000 0.015714 +0.014649 0.000000 0.011439 17.298640 0.000000 0.015672 +0.020717 0.000000 0.012464 17.278555 0.000000 0.015631 +0.028265 0.000000 0.019176 17.260144 0.000000 0.015652 +0.028648 0.000000 0.038222 17.246312 0.000000 0.015938 +0.000000 0.000000 0.078456 17.313000 0.000000 0.016613 +0.000000 0.000000 0.000000 19.694499 0.000000 0.016613 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.016757 +0.000000 0.000000 0.000000 19.692659 0.000000 0.016308 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015902 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015775 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015714 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015672 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015631 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015652 +0.000000 0.000000 0.000000 19.692659 0.000000 0.015938 +0.000000 0.000000 0.000000 19.692659 0.000000 0.016613 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.006071 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005723 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005639 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005677 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005742 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005794 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005820 +0.000000 0.000000 0.000000 19.692612 0.000000 0.005828 +0.000000 0.000000 0.000000 19.692612 0.000000 0.006028 +0.000000 0.000000 0.000000 19.692612 0.000000 0.006472 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.694486 0.000000 0.006071 +-0.021915 0.022267 0.083931 17.330085 0.000000 0.006071 +-0.018749 -0.004620 0.039311 17.269958 0.000000 0.005723 +-0.013142 -0.011386 0.024831 17.284547 0.000000 0.005639 +-0.010451 -0.011471 0.022876 17.306818 0.000000 0.005677 +-0.010252 -0.010383 0.023964 17.327902 0.000000 0.005742 +-0.011212 -0.010249 0.021775 17.341379 0.000000 0.005794 +-0.013214 -0.009801 0.010619 17.333952 0.000000 0.005820 +-0.017766 -0.009775 -0.016825 17.281127 0.000000 0.005828 +-0.019235 -0.014521 -0.055163 17.134508 0.000000 0.006028 +0.000000 -0.027503 -0.105355 16.863709 0.000000 0.006472 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006472 +0.000000 0.000000 0.000000 19.694486 0.000000 0.006030 +-0.007579 0.027684 0.083401 17.296451 0.000000 0.006030 +0.003712 -0.004815 0.008784 17.117366 0.000000 0.005723 +0.005191 -0.007327 -0.011451 17.197440 0.000000 0.005628 +0.004065 -0.012183 -0.011393 17.218005 0.000000 0.005625 +0.003940 -0.013627 -0.008239 17.201466 0.000000 0.005675 +0.003429 -0.014110 -0.004467 17.222821 0.000000 0.005715 +0.000896 -0.013807 0.006353 17.257424 0.000000 0.005739 +0.000313 -0.015263 0.014504 17.278543 0.000000 0.005773 +-0.007690 -0.021772 -0.004234 17.237921 0.000000 0.005795 +0.000000 -0.039917 -0.119471 16.682100 0.000000 0.006143 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006143 +0.000000 0.000000 0.000000 19.694486 0.000000 0.005886 +-0.006585 0.030513 0.079165 17.272700 0.000000 0.005886 +0.004700 0.003292 -0.005991 17.122465 0.000000 0.005771 +0.002940 -0.004854 -0.011532 17.219152 0.000000 0.005711 +0.005463 -0.010463 -0.014910 17.181434 0.000000 0.005723 +0.004774 -0.013733 -0.001196 17.143515 0.000000 0.005728 +0.005925 -0.015505 -0.010195 17.172588 0.000000 0.005740 +0.002182 -0.014512 -0.004019 17.243232 0.000000 0.005726 +-0.003962 -0.014499 0.006811 17.278230 0.000000 0.005773 +-0.010670 -0.020433 -0.012691 17.184686 0.000000 0.005861 +0.000000 -0.033568 -0.091351 16.738493 0.000000 0.006128 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006128 +0.000000 0.000000 0.000000 19.694486 0.000000 0.005845 +-0.006298 0.034400 0.074029 17.266330 0.000000 0.005845 +-0.000312 0.010776 -0.009707 17.167329 0.000000 0.005775 +-0.003503 0.003093 -0.011870 17.231580 0.000000 0.005817 +0.004762 0.002621 -0.019000 17.115983 0.000000 0.005919 +0.003192 -0.009229 0.023556 17.109370 0.000000 0.005867 +0.006621 -0.015651 -0.006648 17.122147 0.000000 0.005799 +0.003094 -0.013798 -0.011345 17.217328 0.000000 0.005759 +-0.006934 -0.010588 -0.000072 17.271644 0.000000 0.005805 +-0.014946 -0.010911 -0.019797 17.180024 0.000000 0.005928 +0.000000 -0.024014 -0.011701 17.193613 0.000000 0.006169 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006169 +0.000000 0.000000 0.000000 19.694486 0.000000 0.005823 +-0.003560 0.034931 0.062702 17.268195 0.000000 0.005823 +-0.000959 0.011924 -0.009840 17.177670 0.000000 0.005675 +0.000901 0.005464 -0.018431 17.231761 0.000000 0.005809 +0.004417 0.004769 -0.018537 17.178364 0.000000 0.005902 +0.000763 0.005831 0.055555 17.108350 0.000000 0.005993 +0.007736 -0.009891 0.011149 17.098565 0.000000 0.005932 +0.006492 -0.010270 -0.012482 17.166553 0.000000 0.005836 +-0.002419 -0.007427 -0.004404 17.249353 0.000000 0.005816 +-0.004699 -0.009896 -0.014712 17.191052 0.000000 0.005749 +0.000000 -0.033250 0.039361 17.286378 0.000000 0.005953 +0.000000 0.000000 0.000000 19.694499 0.000000 0.005953 +0.000000 0.000000 0.000000 19.694486 0.000000 0.005905 +0.004252 0.028275 0.044050 17.274684 0.000000 0.005905 +0.004013 0.012196 -0.012246 17.172312 0.000000 0.005648 +0.004019 0.008811 -0.021538 17.223379 0.000000 0.005826 +0.001849 0.006928 -0.016593 17.208757 0.000000 0.005889 +0.001581 0.008030 0.011348 17.124729 0.000000 0.005962 +0.008202 0.008673 0.036572 17.106429 0.000000 0.006130 +0.010276 0.000766 -0.006344 17.117500 0.000000 0.005942 +0.001030 -0.001209 -0.004939 17.214691 0.000000 0.005867 +0.004145 -0.009272 -0.011732 17.177878 0.000000 0.005801 +0.000000 -0.034744 0.054804 17.278314 0.000000 0.005906 +0.000000 0.000000 0.000000 19.694499 0.000000 0.005906 +0.000000 0.000000 0.000000 19.694486 0.000000 0.006076 +0.017144 0.032198 0.003557 17.260738 0.000000 0.006076 +0.012609 0.025791 -0.032483 17.102169 0.000000 0.005910 +0.006367 0.016141 -0.019536 17.211193 0.000000 0.005925 +-0.001230 0.010663 -0.010044 17.222109 0.000000 0.005887 +-0.004807 0.011549 -0.005790 17.138508 0.000000 0.005883 +0.001923 0.014592 0.003528 17.106247 0.000000 0.005947 +0.007161 0.010883 -0.011884 17.139113 0.000000 0.005920 +0.000861 0.005784 -0.002826 17.199459 0.000000 0.005868 +0.005308 -0.004155 -0.003752 17.162416 0.000000 0.005876 +0.000000 -0.032940 0.069392 17.285478 0.000000 0.005986 +0.000000 0.000000 0.000000 19.694499 0.000000 0.005986 +0.000000 0.000000 0.000000 19.694486 0.000000 0.006233 +0.018188 0.040263 -0.105359 16.688610 0.000000 0.006233 +0.011235 0.032009 -0.047529 17.014569 0.000000 0.006005 +0.004251 0.018801 -0.008300 17.222276 0.000000 0.005925 +-0.003365 0.012219 -0.003755 17.225983 0.000000 0.005851 +-0.005587 0.011745 -0.008763 17.174975 0.000000 0.005797 +-0.001798 0.013095 -0.008321 17.160071 0.000000 0.005776 +0.000522 0.011045 -0.009762 17.183174 0.000000 0.005763 +0.000594 0.005895 -0.000826 17.192544 0.000000 0.005782 +0.005177 0.002736 0.009025 17.115859 0.000000 0.005877 +0.000000 -0.030492 0.077084 17.291898 0.000000 0.006061 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006061 +0.000000 0.000000 0.000000 19.694486 0.000000 0.006253 +0.010045 0.021442 -0.121462 16.704539 0.000000 0.006253 +0.006414 0.020045 -0.036563 17.095354 0.000000 0.005948 +0.001234 0.014955 0.004207 17.250580 0.000000 0.005880 +-0.004484 0.011392 0.000325 17.233900 0.000000 0.005826 +-0.006103 0.010469 -0.007445 17.204731 0.000000 0.005761 +-0.004382 0.011932 -0.009466 17.190580 0.000000 0.005720 +-0.003097 0.012566 -0.009575 17.185911 0.000000 0.005703 +0.002187 0.011393 -0.005847 17.157675 0.000000 0.005749 +0.008514 0.002009 0.019981 17.117378 0.000000 0.005835 +0.000000 -0.024086 0.078756 17.299011 0.000000 0.006238 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006238 +0.000000 0.000000 0.000000 19.694486 0.000000 0.006471 +0.011033 0.000000 -0.090526 16.900486 0.000000 0.006471 +0.012642 0.000000 -0.034659 17.171995 0.000000 0.006132 +0.011433 0.000000 -0.000406 17.292667 0.000000 0.005942 +0.010318 0.000000 0.015582 17.336513 0.000000 0.005880 +0.009518 0.000000 0.021087 17.342392 0.000000 0.005825 +0.011641 0.000000 0.021244 17.327480 0.000000 0.005786 +0.016156 0.000000 0.020513 17.306435 0.000000 0.005748 +0.022608 0.000000 0.024117 17.283636 0.000000 0.005740 +0.023821 0.000000 0.039019 17.268479 0.000000 0.005858 +0.000000 0.000000 0.078194 17.324341 0.000000 0.006284 +0.000000 0.000000 0.000000 19.694499 0.000000 0.006284 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.006471 +0.000000 0.000000 0.000000 19.692659 0.000000 0.006132 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005942 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005880 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005825 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005786 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005748 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005740 +0.000000 0.000000 0.000000 19.692659 0.000000 0.005858 +0.000000 0.000000 0.000000 19.692659 0.000000 0.006284 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.003812 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004155 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004207 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004152 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004076 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004025 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004003 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.004008 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.003880 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.003443 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003812 +-0.016934 0.021820 0.079044 17.284099 0.000000 -0.003812 +-0.015750 -0.001814 0.039941 17.298126 0.000000 -0.004155 +-0.012718 -0.007531 0.029328 17.323183 0.000000 -0.004207 +-0.011308 -0.008186 0.029648 17.344074 0.000000 -0.004152 +-0.010710 -0.008193 0.031554 17.358672 0.000000 -0.004076 +-0.010790 -0.008056 0.029904 17.370990 0.000000 -0.004025 +-0.011504 -0.007679 0.019005 17.367632 0.000000 -0.004003 +-0.013442 -0.009754 -0.005139 17.330277 0.000000 -0.004008 +-0.014798 -0.015626 -0.038187 17.208399 0.000000 -0.003880 +0.000000 -0.027058 -0.093100 16.860461 0.000000 -0.003443 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003443 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003848 +-0.002854 0.028075 0.079999 17.251723 0.000000 -0.003848 +0.001972 0.002717 -0.000574 17.149870 0.000000 -0.004252 +-0.001280 -0.005345 -0.010389 17.285059 0.000000 -0.004249 +-0.003365 -0.010218 -0.007283 17.283301 0.000000 -0.004206 +0.000760 -0.013117 -0.007448 17.236288 0.000000 -0.004127 +0.001566 -0.012776 -0.000562 17.275118 0.000000 -0.004101 +-0.000214 -0.010967 0.011410 17.309385 0.000000 -0.004074 +0.001825 -0.013329 0.016032 17.322065 0.000000 -0.004045 +-0.003240 -0.019213 0.004410 17.326111 0.000000 -0.004056 +0.000000 -0.039954 -0.109821 16.671480 0.000000 -0.003695 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003695 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003979 +0.001025 0.029971 0.076244 17.230584 0.000000 -0.003979 +-0.000537 0.002040 -0.003752 17.181492 0.000000 -0.004302 +0.000833 -0.003481 -0.014768 17.280556 0.000000 -0.004197 +-0.001096 -0.008248 -0.014957 17.261827 0.000000 -0.004164 +0.003293 -0.014082 -0.004627 17.162516 0.000000 -0.004086 +0.004862 -0.015199 -0.009350 17.233070 0.000000 -0.004083 +0.001152 -0.011948 0.000663 17.313902 0.000000 -0.004081 +0.000238 -0.013145 0.007534 17.333427 0.000000 -0.004022 +-0.004810 -0.022567 -0.004296 17.267179 0.000000 -0.003995 +0.000000 -0.041034 -0.095088 16.610969 0.000000 -0.003694 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003694 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003946 +0.003212 0.031067 0.069722 17.217346 0.000000 -0.003946 +-0.000628 0.005482 -0.009309 17.171468 0.000000 -0.004247 +0.001320 0.000202 -0.017504 17.278037 0.000000 -0.004103 +-0.000421 -0.002941 -0.022569 17.236168 0.000000 -0.004086 +0.002876 -0.009236 0.015406 17.118870 0.000000 -0.003962 +0.007200 -0.014532 -0.011646 17.174759 0.000000 -0.003972 +0.001341 -0.008958 -0.008484 17.300495 0.000000 -0.004014 +-0.005369 -0.007875 0.001360 17.323729 0.000000 -0.003925 +-0.015832 -0.015920 -0.015988 17.167838 0.000000 -0.003752 +0.000000 -0.025454 -0.043119 16.832507 0.000000 -0.003386 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003386 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003779 +0.008357 0.028840 0.056572 17.204883 0.000000 -0.003779 +0.006156 0.008463 -0.010618 17.155470 0.000000 -0.004124 +0.004927 0.005484 -0.022487 17.240453 0.000000 -0.003985 +0.000970 0.002360 -0.019885 17.227748 0.000000 -0.003967 +-0.000112 0.004330 0.043066 17.111390 0.000000 -0.003809 +0.010124 -0.008651 -0.004975 17.117543 0.000000 -0.003788 +0.002125 -0.003300 -0.010150 17.256814 0.000000 -0.003932 +-0.009393 -0.000163 -0.000605 17.293486 0.000000 -0.003881 +-0.016739 -0.007675 -0.015617 17.163724 0.000000 -0.003788 +0.000000 -0.029014 0.026177 17.162992 0.000000 -0.003562 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003562 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003461 +0.018861 0.019520 0.034511 17.175171 0.000000 -0.003461 +0.015405 0.019219 -0.019544 17.107243 0.000000 -0.003814 +0.007636 0.015085 -0.023370 17.218356 0.000000 -0.003855 +0.000793 0.009692 -0.017084 17.254320 0.000000 -0.003913 +-0.005492 0.010532 0.011426 17.128427 0.000000 -0.003836 +0.013973 0.013052 -0.004601 17.112950 0.000000 -0.003572 +0.005795 0.008279 -0.009751 17.227208 0.000000 -0.003907 +-0.004436 0.006846 -0.001723 17.289557 0.000000 -0.003936 +-0.007042 -0.007562 -0.009245 17.176051 0.000000 -0.004003 +0.000000 -0.032959 0.051703 17.207503 0.000000 -0.003736 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003736 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003055 +0.026601 0.044872 -0.048393 16.836271 0.000000 -0.003055 +0.017033 0.036082 -0.039774 16.991616 0.000000 -0.003598 +0.008160 0.022529 -0.018105 17.219285 0.000000 -0.003844 +0.002406 0.014141 -0.008741 17.273516 0.000000 -0.003951 +-0.002944 0.012756 -0.002667 17.166640 0.000000 -0.003973 +0.007678 0.016079 -0.010126 17.172416 0.000000 -0.003934 +0.000592 0.010693 -0.007217 17.269342 0.000000 -0.004039 +-0.000696 0.009021 -0.003717 17.275052 0.000000 -0.004030 +-0.002291 -0.005872 -0.003850 17.178685 0.000000 -0.004074 +0.000000 -0.032633 0.066773 17.229183 0.000000 -0.003799 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003799 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003634 +0.012460 0.038007 -0.110952 16.567476 0.000000 -0.003634 +0.006841 0.033273 -0.039098 17.052342 0.000000 -0.003960 +0.005689 0.020407 -0.005025 17.259735 0.000000 -0.003982 +0.002203 0.013570 0.000302 17.282740 0.000000 -0.004023 +-0.000472 0.011674 -0.005009 17.222695 0.000000 -0.004066 +0.002570 0.012629 -0.007917 17.243133 0.000000 -0.004103 +-0.001883 0.010765 -0.005385 17.279561 0.000000 -0.004124 +-0.000412 0.009510 -0.002790 17.259670 0.000000 -0.004102 +-0.000429 -0.001537 0.004704 17.163175 0.000000 -0.004097 +0.000000 -0.030243 0.074265 17.242378 0.000000 -0.003780 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003780 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003709 +0.004582 0.019158 -0.107190 16.727896 0.000000 -0.003709 +0.001169 0.020585 -0.020458 17.186885 0.000000 -0.004036 +0.003339 0.014002 0.008443 17.292322 0.000000 -0.004014 +0.001334 0.009722 0.006178 17.286448 0.000000 -0.004041 +0.000366 0.007686 -0.002491 17.261119 0.000000 -0.004089 +0.000368 0.008437 -0.005279 17.269656 0.000000 -0.004135 +-0.001824 0.009002 -0.005621 17.272202 0.000000 -0.004154 +0.000522 0.008157 -0.006840 17.250591 0.000000 -0.004148 +0.003936 -0.000140 0.015170 17.154099 0.000000 -0.004097 +0.000000 -0.023194 0.075645 17.251294 0.000000 -0.003626 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003626 +0.000000 0.000000 0.000000 8.268995 0.000000 -0.003598 +0.005194 0.000000 -0.076559 16.900899 0.000000 -0.003598 +0.007158 0.000000 -0.016035 17.253280 0.000000 -0.003872 +0.009460 0.000000 0.011295 17.338461 0.000000 -0.003938 +0.009903 0.000000 0.024860 17.368921 0.000000 -0.003966 +0.009528 0.000000 0.029146 17.373705 0.000000 -0.004013 +0.010979 0.000000 0.028228 17.361045 0.000000 -0.004056 +0.014361 0.000000 0.026132 17.342160 0.000000 -0.004083 +0.019172 0.000000 0.027462 17.318790 0.000000 -0.004091 +0.018898 0.000000 0.039155 17.296524 0.000000 -0.003995 +0.000000 0.000000 0.073901 17.277141 0.000000 -0.003601 +0.000000 0.000000 0.000000 8.267970 0.000000 -0.003601 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.003598 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.003872 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.003938 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.003966 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.004013 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.004056 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.004083 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.004091 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.003995 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.003601 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013331 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013752 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013839 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013804 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013752 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013705 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013672 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013673 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013601 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.013223 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013331 +-0.010607 0.021714 0.067935 17.207710 0.000000 -0.013331 +-0.013129 0.005124 0.037336 17.328988 0.000000 -0.013752 +-0.012203 -0.003643 0.032042 17.360003 0.000000 -0.013839 +-0.011280 -0.005856 0.034575 17.377946 0.000000 -0.013804 +-0.010644 -0.006434 0.037347 17.388809 0.000000 -0.013752 +-0.010434 -0.005907 0.035596 17.401336 0.000000 -0.013705 +-0.009719 -0.007026 0.025311 17.401400 0.000000 -0.013672 +-0.009069 -0.011369 0.005576 17.381899 0.000000 -0.013673 +-0.009391 -0.018205 -0.019663 17.295288 0.000000 -0.013601 +0.000000 -0.025437 -0.077057 16.914665 0.000000 -0.013223 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013223 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013316 +0.006488 0.027877 0.067346 17.169884 0.000000 -0.013316 +-0.000460 0.005713 0.005782 17.214848 0.000000 -0.013969 +-0.005531 -0.002198 -0.006767 17.335233 0.000000 -0.013909 +-0.005836 -0.009392 -0.003448 17.323780 0.000000 -0.013853 +0.000284 -0.014459 -0.005551 17.283234 0.000000 -0.013806 +-0.000981 -0.009610 0.004399 17.336127 0.000000 -0.013781 +-0.001014 -0.009452 0.013862 17.360423 0.000000 -0.013721 +0.002251 -0.012926 0.014318 17.374663 0.000000 -0.013678 +0.001881 -0.017761 0.004330 17.375010 0.000000 -0.013656 +0.000000 -0.038322 -0.095060 16.724526 0.000000 -0.013406 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013406 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013435 +0.011420 0.028782 0.063918 17.144569 0.000000 -0.013435 +0.005153 0.007455 0.000770 17.172250 0.000000 -0.013906 +0.001612 0.000516 -0.013945 17.292760 0.000000 -0.013824 +-0.005254 -0.007917 -0.009570 17.319207 0.000000 -0.013813 +0.003703 -0.014811 -0.013239 17.208763 0.000000 -0.013755 +0.001328 -0.011670 -0.004921 17.330533 0.000000 -0.013791 +0.000616 -0.011004 0.002920 17.391970 0.000000 -0.013728 +0.003506 -0.012364 0.004076 17.397376 0.000000 -0.013636 +0.002959 -0.018623 -0.002891 17.353065 0.000000 -0.013590 +0.000000 -0.042886 -0.087568 16.613980 0.000000 -0.013413 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013413 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013358 +0.014319 0.027340 0.056845 17.120941 0.000000 -0.013358 +0.009020 0.009094 -0.005649 17.126809 0.000000 -0.013737 +0.004793 0.004697 -0.017459 17.260500 0.000000 -0.013667 +-0.006198 -0.002599 -0.016900 17.306470 0.000000 -0.013721 +0.006346 -0.008286 -0.003668 17.133714 0.000000 -0.013595 +0.003857 -0.006110 -0.014722 17.303047 0.000000 -0.013703 +0.002237 -0.006654 -0.011219 17.387923 0.000000 -0.013660 +0.001806 -0.007251 -0.003327 17.384590 0.000000 -0.013534 +-0.005842 -0.018882 -0.008086 17.265997 0.000000 -0.013437 +0.000000 -0.035682 -0.056168 16.655545 0.000000 -0.013203 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013203 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013120 +0.019262 0.022447 0.042204 17.079923 0.000000 -0.013120 +0.015441 0.015333 -0.013034 17.076174 0.000000 -0.013438 +0.004821 0.012538 -0.019708 17.235959 0.000000 -0.013507 +-0.003726 0.005829 -0.019767 17.278814 0.000000 -0.013634 +0.006350 0.005885 0.018815 17.122736 0.000000 -0.013483 +0.007997 0.003703 -0.016439 17.239072 0.000000 -0.013629 +0.002345 0.000676 -0.011833 17.339417 0.000000 -0.013617 +-0.005850 0.000143 0.000192 17.348761 0.000000 -0.013471 +-0.016113 -0.012099 -0.012141 17.145437 0.000000 -0.013257 +0.000000 -0.026250 0.000629 16.907820 0.000000 -0.013022 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013022 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.012814 +0.026120 0.035151 -0.004309 16.916921 0.000000 -0.012814 +0.018279 0.032534 -0.028899 16.991589 0.000000 -0.013150 +0.003794 0.022675 -0.019019 17.235947 0.000000 -0.013442 +-0.002959 0.013800 -0.018301 17.316464 0.000000 -0.013617 +0.004802 0.013887 -0.004337 17.145253 0.000000 -0.013601 +0.006558 0.011479 -0.014137 17.272143 0.000000 -0.013662 +-0.001938 0.004775 -0.005358 17.349808 0.000000 -0.013657 +-0.009510 0.005903 0.000085 17.311425 0.000000 -0.013504 +-0.014196 -0.009169 -0.007492 17.137492 0.000000 -0.013426 +0.000000 -0.031253 0.042509 17.081951 0.000000 -0.013191 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013191 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013013 +0.016728 0.046109 -0.076075 16.585640 0.000000 -0.013013 +0.008845 0.038764 -0.038116 17.005251 0.000000 -0.013451 +0.001878 0.025482 -0.013941 17.288275 0.000000 -0.013627 +-0.000738 0.016977 -0.009300 17.345594 0.000000 -0.013717 +0.004317 0.016787 -0.010623 17.228406 0.000000 -0.013756 +0.001625 0.010996 -0.006953 17.321515 0.000000 -0.013800 +-0.005728 0.007862 -0.002952 17.348130 0.000000 -0.013721 +-0.006084 0.008652 -0.006112 17.278273 0.000000 -0.013617 +-0.010554 -0.008870 0.000319 17.165741 0.000000 -0.013634 +0.000000 -0.032190 0.057156 17.128848 0.000000 -0.013302 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013302 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013482 +0.003352 0.032737 -0.100926 16.610577 0.000000 -0.013482 +-0.000949 0.031133 -0.027157 17.168026 0.000000 -0.013823 +0.001415 0.021038 -0.002939 17.340019 0.000000 -0.013789 +0.000952 0.014628 0.003117 17.353900 0.000000 -0.013798 +0.003365 0.013866 -0.004500 17.290124 0.000000 -0.013827 +-0.001043 0.009192 -0.001705 17.343756 0.000000 -0.013842 +-0.004793 0.009414 -0.003189 17.331124 0.000000 -0.013778 +-0.001302 0.009116 -0.006744 17.272322 0.000000 -0.013737 +-0.008139 -0.006303 0.008975 17.190561 0.000000 -0.013747 +0.000000 -0.030032 0.063970 17.151692 0.000000 -0.013301 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013301 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013610 +-0.001564 0.015840 -0.088722 16.814410 0.000000 -0.013610 +-0.002889 0.021781 -0.009773 17.279330 0.000000 -0.013829 +0.002093 0.014046 0.010459 17.346864 0.000000 -0.013780 +0.002198 0.008881 0.011823 17.342657 0.000000 -0.013775 +0.004058 0.006725 0.002792 17.321410 0.000000 -0.013800 +0.000141 0.006254 0.001576 17.334347 0.000000 -0.013821 +-0.002006 0.007289 -0.001349 17.316331 0.000000 -0.013801 +0.000363 0.006470 -0.006562 17.278956 0.000000 -0.013789 +-0.002809 -0.004011 0.016052 17.204229 0.000000 -0.013769 +0.000000 -0.022479 0.065285 17.167225 0.000000 -0.013148 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013148 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.013565 +-0.001342 0.000000 -0.059369 16.957547 0.000000 -0.013565 +0.002880 0.000000 0.001532 17.340762 0.000000 -0.013701 +0.007398 0.000000 0.020830 17.382025 0.000000 -0.013692 +0.008987 0.000000 0.032156 17.400587 0.000000 -0.013693 +0.009544 0.000000 0.035316 17.402951 0.000000 -0.013714 +0.010336 0.000000 0.033689 17.393221 0.000000 -0.013743 +0.012958 0.000000 0.030800 17.375356 0.000000 -0.013746 +0.016228 0.000000 0.030665 17.352235 0.000000 -0.013737 +0.013140 0.000000 0.038235 17.324894 0.000000 -0.013615 +0.000000 0.000000 0.064565 17.200043 0.000000 -0.013179 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.013179 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013565 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013701 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013692 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013693 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013714 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013743 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013746 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013737 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013615 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.013179 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.022535 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023012 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023177 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023230 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023236 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023177 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023134 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023134 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.023138 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.022805 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022535 +-0.002285 0.020718 0.049501 17.117452 0.000000 -0.022535 +-0.008512 0.010233 0.033327 17.357678 0.000000 -0.023012 +-0.009839 0.003241 0.030124 17.396453 0.000000 -0.023177 +-0.010133 0.000395 0.034471 17.414414 0.000000 -0.023230 +-0.010664 -0.000286 0.038158 17.424397 0.000000 -0.023236 +-0.009821 -0.002849 0.037598 17.432908 0.000000 -0.023177 +-0.007536 -0.006634 0.029657 17.435307 0.000000 -0.023134 +-0.004073 -0.013481 0.015592 17.432102 0.000000 -0.023134 +-0.002836 -0.021434 0.000533 17.389426 0.000000 -0.023138 +0.000000 -0.022560 -0.057334 17.009763 0.000000 -0.022805 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022805 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022460 +0.015186 0.027704 0.045172 17.070585 0.000000 -0.022460 +0.007371 0.013922 0.009904 17.220444 0.000000 -0.023130 +-0.003811 0.005042 0.002610 17.370829 0.000000 -0.023284 +-0.004931 -0.006412 0.004473 17.371811 0.000000 -0.023342 +-0.003968 -0.010698 0.003892 17.363555 0.000000 -0.023378 +-0.004350 -0.006803 0.008729 17.386913 0.000000 -0.023270 +-0.001548 -0.009258 0.013679 17.408799 0.000000 -0.023169 +0.003970 -0.016040 0.011356 17.426616 0.000000 -0.023118 +0.005726 -0.021478 0.002616 17.399719 0.000000 -0.023106 +0.000000 -0.035815 -0.076080 16.826507 0.000000 -0.022851 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022851 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022611 +0.020826 0.028939 0.041855 17.037063 0.000000 -0.022611 +0.016046 0.017347 0.002123 17.129614 0.000000 -0.023061 +0.005584 0.009303 -0.007747 17.289030 0.000000 -0.023186 +-0.003791 -0.003549 -0.003061 17.379616 0.000000 -0.023309 +-0.000961 -0.014748 -0.012023 17.369946 0.000000 -0.023400 +-0.004334 -0.009868 0.001513 17.429818 0.000000 -0.023327 +-0.000965 -0.012901 0.003190 17.459678 0.000000 -0.023170 +0.005402 -0.015670 -0.002663 17.439199 0.000000 -0.023042 +0.008082 -0.019955 -0.007095 17.366133 0.000000 -0.023000 +0.000000 -0.041653 -0.073649 16.673066 0.000000 -0.022849 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022849 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022627 +0.022534 0.027742 0.035509 16.998662 0.000000 -0.022627 +0.018080 0.021197 -0.005046 17.061212 0.000000 -0.022922 +0.006548 0.014298 -0.010923 17.242596 0.000000 -0.023026 +-0.008070 0.003091 -0.008925 17.376269 0.000000 -0.023182 +0.003542 -0.010287 -0.019743 17.311665 0.000000 -0.023154 +-0.002454 -0.005947 -0.012650 17.453238 0.000000 -0.023232 +0.001718 -0.011063 -0.017231 17.450895 0.000000 -0.023098 +0.004636 -0.011403 -0.010514 17.398021 0.000000 -0.022961 +0.003439 -0.019152 -0.007695 17.288204 0.000000 -0.022908 +0.000000 -0.041520 -0.052864 16.627011 0.000000 -0.022884 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022884 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022580 +0.023243 0.030115 0.016590 16.916173 0.000000 -0.022580 +0.017155 0.030857 -0.016604 16.997629 0.000000 -0.022766 +0.001357 0.021713 -0.011324 17.243927 0.000000 -0.022927 +-0.012274 0.013457 -0.016502 17.359630 0.000000 -0.023095 +0.009468 0.013040 -0.026255 17.206057 0.000000 -0.022837 +0.005691 0.001457 -0.020068 17.398739 0.000000 -0.023158 +0.001857 -0.006580 -0.012484 17.400132 0.000000 -0.023108 +-0.000946 -0.006507 -0.001902 17.370708 0.000000 -0.022953 +-0.007277 -0.019674 -0.005289 17.174199 0.000000 -0.022844 +0.000000 -0.034704 -0.013464 16.761156 0.000000 -0.022843 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022843 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022608 +0.017074 0.043529 -0.034793 16.672928 0.000000 -0.022608 +0.009276 0.039226 -0.029464 16.982909 0.000000 -0.022849 +-0.002172 0.027250 -0.013103 17.289481 0.000000 -0.023021 +-0.007018 0.018781 -0.018776 17.393706 0.000000 -0.023171 +0.005672 0.017149 -0.021134 17.327285 0.000000 -0.023187 +0.000807 0.003485 -0.011300 17.412343 0.000000 -0.023277 +-0.004114 -0.003810 -0.003207 17.388687 0.000000 -0.023129 +-0.006650 -0.002044 -0.001842 17.322864 0.000000 -0.022949 +-0.015261 -0.016890 -0.001665 17.107588 0.000000 -0.022862 +0.000000 -0.033372 0.025915 16.947436 0.000000 -0.022758 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022758 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.022890 +0.002583 0.040165 -0.075287 16.564435 0.000000 -0.022890 +-0.002272 0.036322 -0.030347 17.126858 0.000000 -0.023225 +-0.002848 0.027404 -0.013511 17.354720 0.000000 -0.023249 +-0.002636 0.018874 -0.009600 17.426278 0.000000 -0.023348 +0.000537 0.015257 -0.011901 17.389535 0.000000 -0.023431 +-0.005018 0.001548 0.000540 17.418380 0.000000 -0.023344 +-0.008955 0.001146 -0.003970 17.352503 0.000000 -0.023160 +-0.008826 -0.000956 -0.007328 17.251383 0.000000 -0.023046 +-0.016430 -0.015579 0.006613 17.134575 0.000000 -0.022985 +0.000000 -0.033141 0.040496 17.014939 0.000000 -0.022714 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022714 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.023104 +-0.005029 0.026252 -0.081975 16.740603 0.000000 -0.023104 +-0.007012 0.029290 -0.018131 17.270439 0.000000 -0.023456 +-0.002943 0.022318 -0.001912 17.388862 0.000000 -0.023414 +-0.000996 0.013236 0.006815 17.419345 0.000000 -0.023414 +-0.001913 0.008637 0.003042 17.395521 0.000000 -0.023454 +-0.006178 0.002062 0.002047 17.396045 0.000000 -0.023353 +-0.006456 0.004639 -0.006401 17.338061 0.000000 -0.023245 +-0.009405 0.001700 -0.006449 17.260460 0.000000 -0.023198 +-0.015465 -0.012718 0.012176 17.174489 0.000000 -0.023096 +0.000000 -0.030066 0.045433 17.047149 0.000000 -0.022634 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022634 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.023252 +-0.006102 0.011869 -0.068226 16.937378 0.000000 -0.023252 +-0.006575 0.021821 -0.001819 17.333632 0.000000 -0.023467 +-0.000661 0.013727 0.013146 17.389184 0.000000 -0.023389 +0.001536 0.007140 0.015731 17.390780 0.000000 -0.023356 +0.000578 0.003891 0.008501 17.382562 0.000000 -0.023365 +-0.001996 0.002718 0.003498 17.358638 0.000000 -0.023344 +-0.000216 0.003486 -0.001974 17.334806 0.000000 -0.023322 +-0.004424 0.000595 -0.001247 17.301339 0.000000 -0.023301 +-0.010230 -0.008659 0.017803 17.233626 0.000000 -0.023131 +0.000000 -0.021716 0.046709 17.072017 0.000000 -0.022444 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022444 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.023339 +-0.007334 0.000000 -0.040156 17.056126 0.000000 -0.023339 +-0.000167 0.000000 0.016198 17.394955 0.000000 -0.023327 +0.005217 0.000000 0.029182 17.419336 0.000000 -0.023286 +0.007795 0.000000 0.036724 17.431675 0.000000 -0.023261 +0.008919 0.000000 0.038089 17.432957 0.000000 -0.023260 +0.009818 0.000000 0.035511 17.424216 0.000000 -0.023259 +0.011792 0.000000 0.032315 17.407324 0.000000 -0.023248 +0.012083 0.000000 0.030973 17.387082 0.000000 -0.023203 +0.006075 0.000000 0.035588 17.352548 0.000000 -0.023001 +0.000000 0.000000 0.048927 17.116771 0.000000 -0.022529 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.022529 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023339 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023327 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023286 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023261 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023260 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023259 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023248 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023203 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.023001 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.022529 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.031687 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032097 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032249 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032316 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032336 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032305 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032326 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032401 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032490 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.032158 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.031687 +0.007049 0.019463 0.022988 16.984877 0.000000 -0.031687 +-0.003760 0.013832 0.030299 17.372951 0.000000 -0.032097 +-0.007131 0.011187 0.022305 17.438239 0.000000 -0.032249 +-0.008356 0.012060 0.023633 17.457575 0.000000 -0.032316 +-0.009298 0.011436 0.027661 17.464379 0.000000 -0.032336 +-0.006911 0.005135 0.030074 17.469616 0.000000 -0.032305 +-0.002641 -0.002214 0.027598 17.473152 0.000000 -0.032326 +0.002813 -0.010833 0.020970 17.479984 0.000000 -0.032401 +0.006785 -0.020374 0.016934 17.476000 0.000000 -0.032490 +0.000000 -0.017224 -0.033324 17.129844 0.000000 -0.032158 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.032158 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.031622 +0.020221 0.029474 0.014936 16.922510 0.000000 -0.031622 +0.010566 0.022537 0.010850 17.190857 0.000000 -0.032117 +-0.000884 0.017125 0.008117 17.394241 0.000000 -0.032342 +-0.004416 0.014801 0.005260 17.445578 0.000000 -0.032497 +-0.009360 0.014671 0.005596 17.449691 0.000000 -0.032574 +-0.006416 0.003466 0.007450 17.439343 0.000000 -0.032475 +0.000758 -0.004111 0.008400 17.445285 0.000000 -0.032377 +0.009203 -0.016969 0.009046 17.471611 0.000000 -0.032397 +0.010912 -0.024574 0.005108 17.426097 0.000000 -0.032493 +0.000000 -0.031126 -0.051265 16.950729 0.000000 -0.031873 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.031873 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.031922 +0.025103 0.034399 0.011825 16.874946 0.000000 -0.031922 +0.019060 0.029794 0.000906 17.064143 0.000000 -0.032222 +0.003304 0.022832 0.002299 17.318437 0.000000 -0.032408 +-0.002209 0.017579 -0.000329 17.456530 0.000000 -0.032538 +-0.012123 0.015055 -0.002498 17.511810 0.000000 -0.032626 +-0.008318 0.001562 -0.000390 17.509168 0.000000 -0.032492 +0.000172 -0.012577 0.003166 17.519237 0.000000 -0.032378 +0.009253 -0.020954 -0.007759 17.472374 0.000000 -0.032312 +0.013819 -0.025900 -0.010335 17.365918 0.000000 -0.032336 +0.000000 -0.040099 -0.050856 16.756449 0.000000 -0.031923 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.031923 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032172 +0.024740 0.038258 0.006911 16.818831 0.000000 -0.032172 +0.018432 0.037173 -0.006116 16.998188 0.000000 -0.032291 +0.004634 0.027029 -0.001322 17.266953 0.000000 -0.032406 +-0.003972 0.020158 -0.002898 17.464473 0.000000 -0.032488 +-0.012492 0.011758 -0.007927 17.555342 0.000000 -0.032551 +-0.008222 -0.004291 -0.011067 17.557818 0.000000 -0.032401 +0.002520 -0.019791 -0.020759 17.472395 0.000000 -0.032202 +0.007088 -0.021707 -0.014328 17.358345 0.000000 -0.032193 +0.009832 -0.028548 -0.007791 17.220084 0.000000 -0.032315 +0.000000 -0.045966 -0.037163 16.641926 0.000000 -0.032376 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.032376 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032407 +0.018236 0.045015 -0.008400 16.705142 0.000000 -0.032407 +0.010161 0.042875 -0.014226 16.990407 0.000000 -0.032388 +0.000473 0.029401 -0.004005 17.272324 0.000000 -0.032393 +-0.007724 0.020165 -0.008309 17.474068 0.000000 -0.032426 +-0.009641 0.003591 -0.016170 17.547180 0.000000 -0.032472 +-0.002573 -0.016027 -0.015399 17.504644 0.000000 -0.032358 +-0.002175 -0.019904 -0.012769 17.388893 0.000000 -0.032288 +-0.001996 -0.021038 -0.002749 17.289801 0.000000 -0.032286 +-0.001211 -0.032623 -0.001998 17.103824 0.000000 -0.032408 +0.000000 -0.045949 -0.014692 16.671167 0.000000 -0.032698 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.032698 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032497 +0.001640 0.043097 -0.034509 16.578888 0.000000 -0.032497 +-0.004560 0.038538 -0.018919 17.100832 0.000000 -0.032558 +-0.006639 0.028433 -0.010050 17.339545 0.000000 -0.032440 +-0.005746 0.014966 -0.014466 17.495565 0.000000 -0.032449 +-0.004494 -0.008372 -0.010419 17.556907 0.000000 -0.032550 +-0.005920 -0.015805 -0.010093 17.469145 0.000000 -0.032483 +-0.006805 -0.016320 -0.005904 17.364181 0.000000 -0.032393 +-0.010455 -0.019405 0.000177 17.239526 0.000000 -0.032338 +-0.013862 -0.031670 0.000791 17.037790 0.000000 -0.032425 +0.000000 -0.041290 0.007397 16.799571 0.000000 -0.032521 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.032521 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032150 +-0.011869 0.033078 -0.053391 16.671082 0.000000 -0.032150 +-0.013392 0.029881 -0.020155 17.266450 0.000000 -0.032681 +-0.006921 0.021024 -0.012564 17.437165 0.000000 -0.032625 +-0.000689 0.004292 -0.005150 17.543643 0.000000 -0.032665 +-0.006178 -0.009281 -0.005497 17.529586 0.000000 -0.032696 +-0.003868 -0.011165 -0.006406 17.452322 0.000000 -0.032569 +-0.007908 -0.012772 -0.003475 17.372103 0.000000 -0.032490 +-0.016526 -0.018107 -0.000006 17.235273 0.000000 -0.032453 +-0.019329 -0.027881 0.005629 17.065350 0.000000 -0.032407 +0.000000 -0.037527 0.017408 16.872049 0.000000 -0.032275 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.032275 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032070 +-0.011944 0.018492 -0.055434 16.884707 0.000000 -0.032070 +-0.014524 0.021812 -0.007467 17.401554 0.000000 -0.032955 +-0.008312 0.012553 0.000358 17.470801 0.000000 -0.032861 +-0.001638 0.002211 0.002231 17.484853 0.000000 -0.032761 +-0.000605 -0.003803 -0.003463 17.462717 0.000000 -0.032739 +0.000941 -0.007406 -0.003254 17.453246 0.000000 -0.032647 +-0.005387 -0.010664 -0.002177 17.404112 0.000000 -0.032601 +-0.016961 -0.014571 0.001593 17.286903 0.000000 -0.032550 +-0.019863 -0.021937 0.009138 17.123693 0.000000 -0.032354 +0.000000 -0.031635 0.019682 16.910882 0.000000 -0.032014 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.032014 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032460 +-0.010768 0.005510 -0.044464 17.065601 0.000000 -0.032460 +-0.013300 0.015012 0.007528 17.410109 0.000000 -0.033019 +-0.005687 0.006796 0.011303 17.434855 0.000000 -0.032836 +0.001902 0.000091 0.010271 17.420278 0.000000 -0.032711 +0.005268 -0.005275 0.006615 17.431580 0.000000 -0.032699 +0.006995 -0.008816 0.003187 17.441383 0.000000 -0.032675 +0.002130 -0.010280 0.002513 17.429643 0.000000 -0.032657 +-0.009707 -0.010741 0.006765 17.365298 0.000000 -0.032553 +-0.015161 -0.013837 0.015163 17.223785 0.000000 -0.032244 +0.000000 -0.020917 0.020835 16.946121 0.000000 -0.031699 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.031699 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.032908 +-0.012683 0.000000 -0.021952 17.162839 0.000000 -0.032908 +-0.006105 0.000000 0.024648 17.441738 0.000000 -0.032887 +0.000671 0.000000 0.029214 17.459256 0.000000 -0.032702 +0.005271 0.000000 0.032224 17.467961 0.000000 -0.032556 +0.008016 0.000000 0.030075 17.468001 0.000000 -0.032490 +0.009652 0.000000 0.025064 17.461784 0.000000 -0.032472 +0.010103 0.000000 0.021588 17.447628 0.000000 -0.032463 +0.006877 0.000000 0.023463 17.423829 0.000000 -0.032398 +-0.002248 0.000000 0.030881 17.376976 0.000000 -0.032180 +0.000000 0.000000 0.025766 16.997555 0.000000 -0.031771 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.031771 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032908 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032887 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032702 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032556 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032490 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032472 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032463 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032398 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.032180 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.031771 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041458 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041215 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041108 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041033 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.040978 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.040966 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041073 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041312 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041653 +0.000000 0.000000 0.000000 19.692612 0.000000 -0.041991 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.041458 +-0.002828 0.025816 0.000000 16.794681 0.000000 -0.041458 +-0.001474 0.028943 0.000000 17.400723 0.000000 -0.041215 +-0.005392 0.026221 0.000000 17.526978 0.000000 -0.041108 +-0.007908 0.026148 0.000000 17.596151 0.000000 -0.041033 +-0.006468 0.026218 0.000000 17.608188 0.000000 -0.040978 +0.000306 0.023299 0.000000 17.604499 0.000000 -0.040966 +0.009996 0.017907 0.000000 17.607500 0.000000 -0.041073 +0.019284 0.011681 0.000000 17.624925 0.000000 -0.041312 +0.029079 0.007139 0.000000 17.640735 0.000000 -0.041653 +0.000000 -0.004244 0.000000 17.271269 0.000000 -0.041991 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.041991 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.041526 +0.000846 0.039904 0.000000 16.726757 0.000000 -0.041526 +-0.000820 0.041456 0.000000 17.332192 0.000000 -0.041398 +-0.003591 0.037105 0.000000 17.500156 0.000000 -0.041220 +-0.006108 0.033922 0.000000 17.596427 0.000000 -0.041139 +-0.005223 0.030927 0.000000 17.624939 0.000000 -0.041119 +0.000725 0.024799 0.000000 17.621582 0.000000 -0.041132 +0.010508 0.016522 0.000000 17.622170 0.000000 -0.041188 +0.021935 0.009301 0.000000 17.634884 0.000000 -0.041354 +0.032014 0.002169 0.000000 17.651405 0.000000 -0.041687 +0.000000 -0.023494 0.000000 17.094810 0.000000 -0.042050 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.042050 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.042157 +0.002688 0.049040 0.000000 16.679231 0.000000 -0.042157 +-0.003248 0.048297 0.000000 17.269431 0.000000 -0.041996 +-0.005278 0.041432 0.000000 17.476187 0.000000 -0.041672 +-0.007009 0.035322 0.000000 17.594585 0.000000 -0.041422 +-0.007193 0.028612 0.000000 17.646055 0.000000 -0.041286 +-0.002287 0.019502 0.000000 17.658975 0.000000 -0.041193 +0.007031 0.010369 0.000000 17.667264 0.000000 -0.041153 +0.019280 -0.010707 0.000000 17.672917 0.000000 -0.041248 +0.033627 -0.022513 0.000000 17.547779 0.000000 -0.041568 +0.000000 -0.040721 0.000000 16.868288 0.000000 -0.042295 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.042295 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.042667 +-0.000015 0.055966 0.000000 16.633035 0.000000 -0.042667 +-0.008658 0.050824 0.000000 17.231413 0.000000 -0.042338 +-0.009465 0.040918 0.000000 17.458095 0.000000 -0.041864 +-0.009853 0.032812 0.000000 17.582210 0.000000 -0.041468 +-0.010518 0.021349 0.000000 17.646208 0.000000 -0.041241 +-0.004595 0.002512 0.000000 17.643048 0.000000 -0.041102 +0.007867 -0.022852 0.000000 17.542629 0.000000 -0.041078 +0.014601 -0.031769 0.000000 17.372728 0.000000 -0.041364 +0.024075 -0.039776 0.000000 17.217128 0.000000 -0.041892 +0.000000 -0.053808 0.000000 16.697317 0.000000 -0.042775 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.042775 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.043046 +-0.008430 0.055996 0.000000 16.613238 0.000000 -0.043046 +-0.017172 0.045344 0.000000 17.236066 0.000000 -0.042506 +-0.014812 0.034556 0.000000 17.449365 0.000000 -0.041870 +-0.013242 0.022934 0.000000 17.560094 0.000000 -0.041420 +-0.008596 0.000534 0.000000 17.599733 0.000000 -0.041196 +0.001218 -0.022700 0.000000 17.545624 0.000000 -0.041158 +-0.001643 -0.032759 0.000000 17.400928 0.000000 -0.041372 +0.003607 -0.039767 0.000000 17.247514 0.000000 -0.041710 +0.009674 -0.047840 0.000000 17.089044 0.000000 -0.042266 +0.000000 -0.058824 0.000000 16.656190 0.000000 -0.043070 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.043070 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.043076 +-0.023038 0.044527 0.000000 16.656118 0.000000 -0.043076 +-0.026092 0.029484 0.000000 17.293893 0.000000 -0.042386 +-0.019620 0.018038 0.000000 17.465863 0.000000 -0.041743 +-0.011075 -0.000074 0.000000 17.562026 0.000000 -0.041359 +-0.002577 -0.018379 0.000000 17.604840 0.000000 -0.041280 +-0.005764 -0.029604 0.000000 17.526653 0.000000 -0.041383 +-0.007412 -0.037013 0.000000 17.382114 0.000000 -0.041605 +-0.005072 -0.041929 0.000000 17.226274 0.000000 -0.041925 +-0.003257 -0.048862 0.000000 17.039238 0.000000 -0.042401 +0.000000 -0.054682 0.000000 16.678334 0.000000 -0.042907 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.042907 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.042695 +-0.035361 0.026500 0.000000 16.797951 0.000000 -0.042695 +-0.028524 0.002500 0.000000 17.461224 0.000000 -0.042109 +-0.015593 -0.007450 0.000000 17.594334 0.000000 -0.041655 +-0.005171 -0.015640 0.000000 17.653010 0.000000 -0.041466 +-0.004330 -0.024714 0.000000 17.629253 0.000000 -0.041458 +-0.007502 -0.032835 0.000000 17.549381 0.000000 -0.041537 +-0.010268 -0.037719 0.000000 17.413825 0.000000 -0.041709 +-0.011278 -0.040922 0.000000 17.250705 0.000000 -0.041977 +-0.009987 -0.044522 0.000000 17.047838 0.000000 -0.042249 +0.000000 -0.047259 0.000000 16.720973 0.000000 -0.042486 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.042486 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.042445 +-0.033670 0.004740 0.000000 17.034767 0.000000 -0.042445 +-0.024593 -0.014034 0.000000 17.658645 0.000000 -0.042142 +-0.013655 -0.018021 0.000000 17.651586 0.000000 -0.041820 +-0.004094 -0.022963 0.000000 17.639846 0.000000 -0.041630 +-0.002994 -0.029272 0.000000 17.635149 0.000000 -0.041584 +-0.006041 -0.033038 0.000000 17.584068 0.000000 -0.041572 +-0.010351 -0.035583 0.000000 17.464453 0.000000 -0.041662 +-0.012920 -0.036758 0.000000 17.308092 0.000000 -0.041836 +-0.010646 -0.037654 0.000000 17.103288 0.000000 -0.041933 +0.000000 -0.038220 0.000000 16.753985 0.000000 -0.042017 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.042017 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.042429 +-0.030453 -0.009265 0.000000 17.200157 0.000000 -0.042429 +-0.023168 -0.013779 0.000000 17.606787 0.000000 -0.042181 +-0.011787 -0.018089 0.000000 17.603175 0.000000 -0.041795 +-0.002156 -0.022318 0.000000 17.605713 0.000000 -0.041558 +0.000828 -0.025634 0.000000 17.618165 0.000000 -0.041442 +-0.002071 -0.026948 0.000000 17.602825 0.000000 -0.041365 +-0.007647 -0.027490 0.000000 17.512133 0.000000 -0.041374 +-0.010711 -0.026926 0.000000 17.378885 0.000000 -0.041431 +-0.007111 -0.026088 0.000000 17.194439 0.000000 -0.041412 +0.000000 -0.024492 0.000000 16.789808 0.000000 -0.041452 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.041452 +0.000000 0.000000 0.000000 2.168622 0.000000 -0.042412 +-0.031211 0.000000 0.000000 17.296718 0.000000 -0.042412 +-0.020330 0.000000 0.000000 17.595810 0.000000 -0.042032 +-0.009197 0.000000 0.000000 17.594867 0.000000 -0.041596 +0.000716 0.000000 0.000000 17.594629 0.000000 -0.041324 +0.005162 0.000000 0.000000 17.601427 0.000000 -0.041231 +0.003283 0.000000 0.000000 17.599345 0.000000 -0.041230 +-0.002616 0.000000 0.000000 17.543570 0.000000 -0.041264 +-0.006075 0.000000 0.000000 17.442775 0.000000 -0.041296 +-0.001277 0.000000 0.000000 17.303438 0.000000 -0.041254 +0.000000 0.000000 0.000000 16.838464 0.000000 -0.041418 +0.000000 0.000000 0.000000 2.168238 0.000000 -0.041418 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.042412 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.042032 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041596 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041324 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041231 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041230 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041264 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041296 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041254 +0.000000 0.000000 0.000000 19.692659 0.000000 -0.041418 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692612 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041458 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041215 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041108 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041033 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.040978 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.040966 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041073 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041312 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041653 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041991 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041526 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041398 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041220 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041139 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041119 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041132 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041188 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041354 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041687 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042050 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042157 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041996 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041672 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041422 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041286 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041193 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041153 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041248 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041568 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042295 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042667 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042338 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041864 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041468 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041241 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041102 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041078 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041364 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041892 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042775 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.043046 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042506 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041870 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041420 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041196 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041158 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041372 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041710 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042266 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.043070 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.043076 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042386 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041743 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041359 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041280 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041383 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041605 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041925 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042401 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042907 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042695 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042109 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041655 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041466 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041458 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041537 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041709 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041977 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042249 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042486 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042445 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042142 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041820 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041630 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041584 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041572 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041662 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041836 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041933 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042017 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042429 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042181 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041795 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041558 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041442 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041365 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041374 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041431 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041412 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041452 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042412 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.042032 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041596 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041324 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041231 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041230 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041264 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041296 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041254 +0.000000 0.000000 0.000000 19.691262 0.000000 -0.041418 +0.000000 0.000000 0.000000 19.691262 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 +0.000000 0.000000 0.000000 19.692659 0.000000 0.000000 From 70bb0c9008b78938f5b3bac9cca3dc24238760a8 Mon Sep 17 00:00:00 2001 From: xuhan425 Date: Wed, 8 Apr 2020 07:37:55 -0600 Subject: [PATCH 11/69] Update models and source codes for Buildings.ThermalZones.Detailed.ISAT --- .../Resources/C-Sources/cfdExchangeData.c | 53 +- .../Resources/C-Sources/isatCosimulation.h | 2 +- .../Resources/C-Sources/isatExchangeData.c | 49 +- .../Resources/C-Sources/isatSendStopCommand.c | 1 - .../FFD/Tutorial/MixedConvectionWithBox.cfd | 47 + .../FFD/Tutorial/MixedConvectionWithBox.dat | 320 ++ .../FFD/Tutorial/MixedConvectionWithBox.ffd | 67 + .../ISAT/DataCenter - Copy/existing.isat | 35 + .../Examples/ISAT/DataCenter - Copy/input.cfd | 85 + .../Examples/ISAT/DataCenter - Copy/input.ffd | 86 + .../Examples/ISAT/DataCenter - Copy/set.isat | 171 + .../ISAT/DataCenter - Copy/zeroone.dat | 320 ++ .../Examples/ISAT/DataCenter/existing.isat | 35 + .../Examples/ISAT/DataCenter/input.cfd | 85 + .../Examples/ISAT/DataCenter/input.ffd | 86 + .../Examples/ISAT/DataCenter/set.isat | 171 + .../Examples/ISAT/DataCenter/zeroone.dat | 320 ++ .../ISAT/ForcedConvection/existing.isat | 20 + .../Examples/ISAT/ForcedConvection/input.cfd | 45 + .../Examples/ISAT/ForcedConvection/input.ffd | 86 + .../Examples/ISAT/ForcedConvection/set.isat | 97 + .../ISAT/ForcedConvection/zeroone.dat | 320 ++ .../Examples/ISAT/DataCenterModel.png | Bin 0 -> 36210 bytes .../Examples/ISAT/DataCenterSchematic.png | Bin 0 -> 44950 bytes .../Examples/ISAT/ForcedConvectionModel.png | Bin 0 -> 40704 bytes .../Images/ThermalZones/Detailed/isat.png | Bin 0 -> 2082 bytes Buildings/Resources/Library/win32/ffd.dll | Bin 139264 -> 172544 bytes Buildings/Resources/Library/win32/ffd.lib | Bin 1646 -> 1646 bytes Buildings/Resources/Library/win32/isat.dll | Bin 0 -> 1065472 bytes Buildings/Resources/Library/win32/isat.lib | Bin 0 -> 1664 bytes Buildings/Resources/Library/win64/ffd.dll | Bin 0 -> 225792 bytes Buildings/Resources/Library/win64/ffd.lib | Bin 0 -> 1648 bytes .../FFD/Tutorial/MixedConvectionWithBox.mos | 46 + .../Detailed/Examples/ISAT/DataCenter.mos | 33 + .../Examples/ISAT/ForcedConvection.mos | 33 + .../src/FastFluidDynamics/Compile.bat | 54 +- .../src/FastFluidDynamics/advection.c | 2098 +++++++----- .../src/FastFluidDynamics/advection.h | 319 +- .../src/FastFluidDynamics/boundary.c | 1426 ++++++--- .../src/FastFluidDynamics/boundary.h | 311 +- .../FastFluidDynamics/chen_zero_equ_model.c | 179 +- .../FastFluidDynamics/chen_zero_equ_model.h | 96 +- .../src/FastFluidDynamics/cosimulation.c | 75 +- .../src/FastFluidDynamics/data_structure.h | 185 +- .../src/FastFluidDynamics/data_writer.c | 1084 +++++-- .../src/FastFluidDynamics/data_writer.h | 174 +- .../src/FastFluidDynamics/diffusion.c | 275 +- .../src/FastFluidDynamics/diffusion.h | 125 +- .../Resources/src/FastFluidDynamics/ffd.c | 337 +- .../Resources/src/FastFluidDynamics/ffd.h | 100 +- .../src/FastFluidDynamics/ffd_data_reader.c | 54 +- .../src/FastFluidDynamics/ffd_data_reader.h | 55 +- .../src/FastFluidDynamics/geometry.c | 333 +- .../src/FastFluidDynamics/geometry.h | 256 +- .../src/FastFluidDynamics/initialization.c | 1112 ++++--- .../src/FastFluidDynamics/initialization.h | 119 +- .../src/FastFluidDynamics/interpolation.c | 99 +- .../src/FastFluidDynamics/interpolation.h | 100 +- .../FastFluidDynamics/modelica_ffd_common.h | 25 +- .../src/FastFluidDynamics/parameter_reader.c | 555 +++- .../src/FastFluidDynamics/parameter_reader.h | 71 +- .../src/FastFluidDynamics/projection.c | 127 +- .../src/FastFluidDynamics/projection.h | 69 +- .../src/FastFluidDynamics/sci_reader.c | 2830 ++++++++++++----- .../src/FastFluidDynamics/sci_reader.h | 138 +- .../Resources/src/FastFluidDynamics/solver.c | 1573 ++++++--- .../Resources/src/FastFluidDynamics/solver.h | 279 +- .../src/FastFluidDynamics/solver_gs.c | 386 +-- .../src/FastFluidDynamics/solver_gs.h | 107 +- .../src/FastFluidDynamics/solver_tdma.c | 32 +- .../src/FastFluidDynamics/solver_tdma.h | 32 +- .../Resources/src/FastFluidDynamics/timing.c | 59 +- .../Resources/src/FastFluidDynamics/timing.h | 52 +- .../Resources/src/FastFluidDynamics/utility.c | 1369 ++++++-- .../Resources/src/FastFluidDynamics/utility.h | 534 ++-- Buildings/Resources/src/ISAT/common.h | 84 + Buildings/Resources/src/ISAT/cosimulation.c | 569 ++++ Buildings/Resources/src/ISAT/cosimulation.h | 83 + Buildings/Resources/src/ISAT/ffd_isat.c | 1100 +++++++ Buildings/Resources/src/ISAT/ffd_isat.h | 59 + Buildings/Resources/src/ISAT/ffd_wrap.c | 240 ++ Buildings/Resources/src/ISAT/ffd_wrap.h | 45 + Buildings/Resources/src/ISAT/isat_dll.c | 89 + Buildings/Resources/src/ISAT/isat_dll.h | 46 + Buildings/Resources/src/ISAT/libisatab_ser.a | Bin 0 -> 893202 bytes Buildings/Resources/src/ISAT/usrfgh.c | 59 + Buildings/Resources/src/ISAT/usrfgh.h | 26 + Buildings/Resources/src/ISAT/utarray.h | 232 ++ Buildings/Resources/src/ISAT/uthash.h | 960 ++++++ Buildings/Resources/src/ISAT/utility_isat.c | 418 +++ Buildings/Resources/src/ISAT/utility_isat.h | 55 + Buildings/Resources/src/ISAT/utlist.h | 757 +++++ Buildings/Resources/src/ISAT/utstring.h | 393 +++ .../Detailed/BaseClasses/CFDExchange.mo | 137 +- .../BaseClasses/ISATAirHeatMassBalance.mo | 2 +- .../Detailed/BaseClasses/ISATExchange.mo | 137 +- .../Detailed/BaseClasses/ISATThread.mo | 6 +- .../Detailed/BaseClasses/PartialCFD.mo | 182 ++ .../Detailed/BaseClasses/PartialExchange.mo | 64 +- .../BaseClasses/PartialExchangeData.mo | 7 +- .../BaseClasses/PartialStartCosimulation.mo | 8 +- .../Detailed/BaseClasses/cfdExchangeData.mo | 4 + .../BaseClasses/cfdStartCosimulation.mo | 6 +- .../Detailed/BaseClasses/isatExchangeData.mo | 2 +- .../BaseClasses/isatStartCosimulation.mo | 2 +- .../Detailed/BaseClasses/package.mo | 77 + .../Detailed/BaseClasses/package.order | 3 + Buildings/ThermalZones/Detailed/CFD.mo | 111 +- .../Examples/FFD/Tutorial/MixedConvection.mo | 4 +- .../FFD/Tutorial/MixedConvectionWithBox.mo | 400 +++ .../Examples/FFD/Tutorial/package.order | 1 + .../Examples/ISAT/BaseClasses/PartialRoom.mo | 89 + .../Examples/ISAT/BaseClasses/package.mo | 12 + .../Examples/ISAT/BaseClasses/package.order | 1 + .../Detailed/Examples/ISAT/DataCenter.mo | 86 + .../Examples/ISAT/ForcedConvection.mo | 270 ++ .../Detailed/Examples/ISAT/UsersGuide.mo | 54 + .../Detailed/Examples/ISAT/package.mo | 22 + .../Detailed/Examples/ISAT/package.order | 4 + .../Detailed/Examples/package.order | 1 + Buildings/ThermalZones/Detailed/ISAT.mo | 40 + Buildings/ThermalZones/Detailed/UsersGuide.mo | 43 +- Buildings/ThermalZones/Detailed/package.order | 1 + 123 files changed, 20765 insertions(+), 6043 deletions(-) create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.cfd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.dat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.ffd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/existing.isat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.cfd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.ffd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/set.isat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/zeroone.dat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/existing.isat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.cfd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.ffd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/set.isat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/zeroone.dat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/existing.isat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.cfd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.ffd create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/set.isat create mode 100644 Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/zeroone.dat create mode 100644 Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/DataCenterModel.png create mode 100644 Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/DataCenterSchematic.png create mode 100644 Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/ForcedConvectionModel.png create mode 100644 Buildings/Resources/Images/ThermalZones/Detailed/isat.png create mode 100644 Buildings/Resources/Library/win32/isat.dll create mode 100644 Buildings/Resources/Library/win32/isat.lib create mode 100644 Buildings/Resources/Library/win64/ffd.dll create mode 100644 Buildings/Resources/Library/win64/ffd.lib create mode 100644 Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.mos create mode 100644 Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/DataCenter.mos create mode 100644 Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/ForcedConvection.mos create mode 100644 Buildings/Resources/src/ISAT/common.h create mode 100644 Buildings/Resources/src/ISAT/cosimulation.c create mode 100644 Buildings/Resources/src/ISAT/cosimulation.h create mode 100644 Buildings/Resources/src/ISAT/ffd_isat.c create mode 100644 Buildings/Resources/src/ISAT/ffd_isat.h create mode 100644 Buildings/Resources/src/ISAT/ffd_wrap.c create mode 100644 Buildings/Resources/src/ISAT/ffd_wrap.h create mode 100644 Buildings/Resources/src/ISAT/isat_dll.c create mode 100644 Buildings/Resources/src/ISAT/isat_dll.h create mode 100644 Buildings/Resources/src/ISAT/libisatab_ser.a create mode 100644 Buildings/Resources/src/ISAT/usrfgh.c create mode 100644 Buildings/Resources/src/ISAT/usrfgh.h create mode 100644 Buildings/Resources/src/ISAT/utarray.h create mode 100644 Buildings/Resources/src/ISAT/uthash.h create mode 100644 Buildings/Resources/src/ISAT/utility_isat.c create mode 100644 Buildings/Resources/src/ISAT/utility_isat.h create mode 100644 Buildings/Resources/src/ISAT/utlist.h create mode 100644 Buildings/Resources/src/ISAT/utstring.h create mode 100644 Buildings/ThermalZones/Detailed/BaseClasses/PartialCFD.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/BaseClasses/PartialRoom.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/BaseClasses/package.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/BaseClasses/package.order create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/DataCenter.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/ForcedConvection.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/UsersGuide.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/package.mo create mode 100644 Buildings/ThermalZones/Detailed/Examples/ISAT/package.order create mode 100644 Buildings/ThermalZones/Detailed/ISAT.mo diff --git a/Buildings/Resources/C-Sources/cfdExchangeData.c b/Buildings/Resources/C-Sources/cfdExchangeData.c index d7dd988cba2..4b9411eccae 100644 --- a/Buildings/Resources/C-Sources/cfdExchangeData.c +++ b/Buildings/Resources/C-Sources/cfdExchangeData.c @@ -7,8 +7,11 @@ * \author Wangda Zuo * University of Miami * W.Zuo@miami.edu + * Xu Han + * University of Colorado Boulder + * xuha3556@colorado.edu * - * \date 8/3/2013 + * \date 4/5/2020 * */ #include "cfdCosimulation.h" @@ -33,7 +36,53 @@ int cfdExchangeData(double t0, double dt, double *u, size_t nU, size_t nY, /*check if current modelica time equals to last time*/ /*if yes, it means cfdExchangeData() was called multiple times at one synchronization point, then directly return*/ - if(abs(cosim->modelica->lt - t0) < 1E-6){ + if(cosim->modelica->lt - t0 < 1E-6 && t0 - cosim->modelica->lt < 1E-6){ + /**************************************************************************** + | Copy data from CFD + ****************************************************************************/ + /* Get the temperature/heat flux for solid surface*/ + for(i=0; ipara->nSur; i++) { + y[i] = cosim->ffd->temHea[i]; + } + + /* Get the averaged room temperature*/ + y[i] = cosim->ffd->TRoo; + i++; + + /* Get the temperature of shading device if there is a shading device*/ + if(cosim->para->sha==1) { + for(j=0; jpara->nConExtWin; i++, j++) { + y[i] = cosim->ffd->TSha[j]; + } + } + + /* Get the temperature fluid at the fluid ports*/ + for(j=0; jpara->nPorts; i++, j++) { + y[i] = cosim->ffd->TPor[j]; + } + + /* Get the mass fraction at fluid ports*/ + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nXi; k++, i++) { + y[i] = cosim->ffd->XiPor[j][k]; + } + + /* Get the trace substance at fluid ports*/ + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nC; k++, i++) { + y[i] = cosim->ffd->CPor[j][k]; + } + + /* Get the sensor data*/ + for(j=0; jpara->nSen; j++, i++) { + y[i] = cosim->ffd->senVal[j]; + } + + /* Update the data status + cosim->ffd->flag = 0;*/ + + *t1 = cosim->ffd->t; + return 0; } diff --git a/Buildings/Resources/C-Sources/isatCosimulation.h b/Buildings/Resources/C-Sources/isatCosimulation.h index 3520838b510..e6047b66ee1 100644 --- a/Buildings/Resources/C-Sources/isatCosimulation.h +++ b/Buildings/Resources/C-Sources/isatCosimulation.h @@ -29,7 +29,7 @@ #ifndef _MODELICA_FFD_COMMON_H #define _MODELICA_FFD_COMMON_H -#include "../src/ISAT/ffd_src/modelica_ffd_common.h" +#include "../src/FastFluidDynamics/modelica_ffd_common.h" #include /* Needed to detect 32 vs. 64 bit using UINTPTR_MAX*/ #endif diff --git a/Buildings/Resources/C-Sources/isatExchangeData.c b/Buildings/Resources/C-Sources/isatExchangeData.c index 6b5663324fc..e1260f2623e 100644 --- a/Buildings/Resources/C-Sources/isatExchangeData.c +++ b/Buildings/Resources/C-Sources/isatExchangeData.c @@ -8,7 +8,6 @@ * Xu Han * University of Colorado Boulder * xuha3556@colorado.edu - * * Wangda Zuo * University of Miami * W.Zuo@miami.edu @@ -38,7 +37,53 @@ int isatExchangeData(double t0, double dt, double *u, size_t nU, size_t nY, /*check if current modelica time equals to last time*/ /*if yes, it means cfdExchangeData() was called multiple times at one synchronization point, then directly return*/ - if(abs(cosim->modelica->lt - t0) < 1E-6){ + if(cosim->modelica->lt - t0 < 1E-6 && t0 - cosim->modelica->lt < 1E-6){ + /**************************************************************************** + | Copy data from CFD + ****************************************************************************/ + /* Get the temperature/heat flux for solid surface*/ + for(i=0; ipara->nSur; i++) { + y[i] = cosim->ffd->temHea[i]; + } + + /* Get the averaged room temperature*/ + y[i] = cosim->ffd->TRoo; + i++; + + /* Get the temperature of shading device if there is a shading device*/ + if(cosim->para->sha==1) { + for(j=0; jpara->nConExtWin; i++, j++) { + y[i] = cosim->ffd->TSha[j]; + } + } + + /* Get the temperature fluid at the fluid ports*/ + for(j=0; jpara->nPorts; i++, j++) { + y[i] = cosim->ffd->TPor[j]; + } + + /* Get the mass fraction at fluid ports*/ + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nXi; k++, i++) { + y[i] = cosim->ffd->XiPor[j][k]; + } + + /* Get the trace substance at fluid ports*/ + for(j=0; jpara->nPorts; j++) + for(k=0; kpara->nC; k++, i++) { + y[i] = cosim->ffd->CPor[j][k]; + } + + /* Get the sensor data*/ + for(j=0; jpara->nSen; j++, i++) { + y[i] = cosim->ffd->senVal[j]; + } + + /* Update the data status + cosim->ffd->flag = 0;*/ + + *t1 = cosim->ffd->t; + return 0; } diff --git a/Buildings/Resources/C-Sources/isatSendStopCommand.c b/Buildings/Resources/C-Sources/isatSendStopCommand.c index 7f301c5b8c3..e137484c719 100644 --- a/Buildings/Resources/C-Sources/isatSendStopCommand.c +++ b/Buildings/Resources/C-Sources/isatSendStopCommand.c @@ -8,7 +8,6 @@ * Xu Han * University of Colorado Boulder * xuha3556@colorado.edu - * * Wangda Zuo * University of Miami * W.Zuo@miami.edu diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.cfd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.cfd new file mode 100644 index 00000000000..a8b3df8a0ed --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.cfd @@ -0,0 +1,47 @@ +1.000000 1.000000 1.000000 +20 20 20 +0.005000 0.015000 0.025000 0.035000 0.045000 0.055000 0.070000 0.070000 0.085000 0.095000 0.095000 0.085000 0.070000 0.070000 0.055000 0.045000 0.035000 0.025000 0.015000 0.005000 +0.005000 0.015000 0.025000 0.035000 0.045000 0.055000 0.070000 0.070000 0.085000 0.095000 0.095000 0.085000 0.070000 0.070000 0.055000 0.045000 0.035000 0.025000 0.015000 0.005000 +0.002778 0.008333 0.013889 0.019444 0.025000 0.030556 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.025000 0.025000 0.019444 0.013889 0.008333 0.002778 +0 0 0 0 0 0 +9 +1 +Inlet +1 1 15 0 20 6 0.000000 0.000000 0.000000 0.000000 0.000000 +1 +Outlet +21 1 1 0 20 6 0.000000 0.000000 0.000000 0.000000 0.000000 +1 +Box +8 8 1 6 6 10 1 35.000000 +6 +West Wall +1 1 1 0 20 14 1 0.000000 +East Wall +21 1 7 0 20 14 1 0.000000 +South Wall +1 1 1 20 0 20 1 0.000000 +North Wall +1 21 1 20 0 20 1 0.000000 +Ceiling +1 1 21 20 20 0 1 0.000000 +Floor +1 1 1 20 20 0 1 0.000000 +0 +100 +0.010000 +1 +0.000000 0.000000 0.000000 0.000000 27.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 +-10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +1.000000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 +1 1 1 +1 1 1 +0 +1 +1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 +1.177400 0.000016 0.026240 0.000000 -9.810000 0.000000 0.003600 27.000000 1005.000000 +0.000000 0.100000 1000.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.710000 0.900000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.300000 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.dat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.dat new file mode 100644 index 00000000000..e17c108cb29 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.dat @@ -0,0 +1,320 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.ffd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.ffd new file mode 100644 index 00000000000..d94e44a108a --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.ffd @@ -0,0 +1,67 @@ +//------------------------------------------------------------------------------ +// The are key input file parameters +//------------------------------------------------------------------------------ + +inpu.parameter_file_format SCI // Format of extra parameter file: SCI +inpu.parameter_file_name MixedConvectionWithBox.cfd // Name of extra parameter file +inpu.block_file_name MixedConvectionWithBox.dat // Name of file defines the block in space + +//------------------------------------------------------------------------------ +// The following parameters may be overwritten by *.cfd file generated by SCI +//------------------------------------------------------------------------------ +geom.Lx 1 // Domain size in x-direction (meter) +geom.Ly 1 // Domain size in y-direction (meter) +geom.Lz 1 // Domain size in z-direction (meter) +geom.imax 10 // Number of interior cells in x-direction +geom.jmax 10 // Number of interior cells in y-direction +geom.kmax 10 // Number of interior cells in z-direction +geom.index 600 // Total number of boundary cells + +//------------------------------------------------------------------------------ +// The following parameters can only be defined in this file +//------------------------------------------------------------------------------ +inpu.read_old_ffd_file 0 // 1: Read previous FFD file; 0: False +geom.dx 0.1 // Length delta_x of one cell in x-direction for uniform grid only +geom.dy 0.1 // Length delta_y of one cell in y-direction for uniform grid only +geom.dz 0.1 // Length delta_z of one cell in z-direction for uniform grid only +geom.uniform 1 // Only for generating grid by FFD. 1: uniform grid; 0: non-uniform grid + +outp.version RUN // DEBUG, RUN + +prob.nu 0.000015 // Kinematic viscosity +prob.rho 1.205 // Density +prob.gravx 0 // Gravity in x direction +prob.gravy 0 // Gravity in y direction +prob.gravz -9.81 // Gravity in z direction +prob.cond 0.0257 // Conductivity +prob.Cp 1006.0 // Specific heat capacity +prob.beta 0.00343 // Thermal expansion coefficient +prob.diff 0.00001 // Diffusivity for contaminants +prob.coeff_h 0.0004 // Convective heat transfer coefficient near the wall +prob.force 1.0 // Force to be added in demo window when left-click on mouse +prob.source 1.0 // Source to be added in demo window for contaminants when right click on mouse +prob.movie 0 // Donot output data for making animation +prob.tur_model LAM // LAM, CHEN, CONSTANT +prob.chen_a 0.03874 // Coefficeint of Chen's zero euqation turbulence model +prob.Prt 0.9 // Turbulent Prandl number +prob.Temp_Buoyancy 10.0 // Reference temperature for calculating bouyance force + +mytime.t_steady 100.0 //Necessary time for reaching the steady state from initial condition + +bc.nb_Xi 1 // Total number of species +bc.C 0 // Total number of trace substances + +solv.solver GS // Solver type: GS, TDMA +solv.check_residual 0 // 1: check, 0: donot check +solv.advection_solver SEMI // Semi-Lagrangian method for advection +solv.interpolation BILINEAR // Bilinear internploation in semi-Lagrangian method +solv.cosimulation 1 // 0: single; 1: cosimulation + +sensor.nb_sensor 2 // Number of sensors +sensor.name OccupiedZoneAirTemperature // Name of sensor +sensor.name Velocity // Name of sensor + +init.T 10.0 // Initial condition for Temperature +init.u 0.0 // Initial condition for velocity u +init.v 0.0 // Initial condition for velocity v +init.w 0.0 // Initial condition for velocity w diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/existing.isat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/existing.isat new file mode 100644 index 00000000000..1704c0ef5d3 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/existing.isat @@ -0,0 +1,35 @@ +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +2000.000000 +25.000000 +299.524161 +293.711643 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +2007.500000 +25.000000 +299.544464 +293.715325 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +3003.750000 +25.000000 +302.393775 +295.464381 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +3492.490000 +25.000000 +303.699423 +296.409751 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +2500.000000 +25.000000 +300.968751 +294.234246 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.cfd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.cfd new file mode 100644 index 00000000000..aa7d5d6477c --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.cfd @@ -0,0 +1,85 @@ +5.486400 6.705600 3.657600 +36 44 24 +0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 +0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 +0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 +0 0 0 0 0 0 +28 +10 +Jet01 0.25 +17 17 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet02 0.25 +17 21 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet03 0.25 +17 25 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet04 0.25 +17 29 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet05 0.25 +17 33 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet06 0.25 +21 17 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet07 0.25 +21 21 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet08 0.25 +21 25 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet09 0.25 +21 29 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet10 0.25 +21 33 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +1 +Outlet +24 1 15 13 7 0 0.000000 0.000000 0.000000 0.000000 -1.116483 +11 +Rack01 -1 5000 0.000059 +10 17 1 7 4 14 1 20.000000 +Rack02 -1 5000 0.000059 +10 21 1 7 4 14 1 20.000000 +Rack03 -1 5000 0.000059 +10 25 1 7 4 14 1 20.000000 +Rack04 -1 5000 0.000059 +10 29 1 7 4 14 1 20.000000 +Rack05 -1 5000 0.000059 +10 33 1 7 4 14 1 20.000000 +Rack06 1 5000 0.000059 +25 17 1 7 4 14 1 20.000000 +Rack07 1 5000 0.000059 +25 21 1 7 4 14 1 20.000000 +Rack08 1 5000 0.000059 +25 25 1 7 4 14 1 20.000000 +Rack09 1 5000 0.000059 +25 29 1 7 4 14 1 20.000000 +Rack10 1 5000 0.000059 +25 33 1 7 4 14 1 20.000000 +CRAC +24 1 1 13 7 14 1 20.000000 +6 +Ceiling +1 1 25 36 44 0 1 20.000000 +EastWall +1 45 1 36 0 24 1 20.000000 +Floor +1 1 1 36 44 0 1 20.000000 +NorthWall +37 1 1 0 44 24 1 20.000000 +SouthWall +1 1 1 0 44 24 1 20.000000 +WestWall +1 1 1 36 0 24 1 20.000000 +0 +100 +0.010000 +1 +0.000000 0.000000 0.000000 0.000000 27.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 +-10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +1.000000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 +1 1 1 +1 1 1 +0 +1 +1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 +1.177400 0.000016 0.026240 0.000000 -9.810000 0.000000 0.003600 27.000000 1005.000000 +0.000000 0.100000 2000.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.710000 0.900000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.300000 \ No newline at end of file diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.ffd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.ffd new file mode 100644 index 00000000000..1163690b40d --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/input.ffd @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +// The are key input file parameters +//------------------------------------------------------------------------------ + +inpu.parameter_file_format SCI // Foramt of extra parameter file: SCI +inpu.parameter_file_name input.cfd // Name of extra parameter file +inpu.block_file_name zeroone.dat +inpu.old_ffd_file_name result.plt // Name of previous FFD simulation data file + + +//------------------------------------------------------------------------------ +// The following parameters may be overwritten by *.cfd file generated by SCI +//------------------------------------------------------------------------------ +geom.Lx 1 // Domain size in x-direction (meter) +geom.Ly 1 // Domain size in y-direction (meter) +geom.Lz 1 // Domain size in z-direction (meter) +geom.imax 10 // Number of interior cells in x-direction +geom.jmax 10 // Number of interior cells in y-direction +geom.kmax 10 // Number of interior cells in z-direction +geom.index 600 // Total number of boundary cells +prob.nu 0.000015 // Kinematic viscosity +prob.rho 1.205 // Density +prob.gravx 0 // Gravity in x direction +prob.gravy 0 // Gravity in y direction +prob.gravz -9.81 // Gravity in z direction +prob.cond 0.0257 // Conductivity +prob.Cp 1006.0 // Specific heat capacity + +//------------------------------------------------------------------------------ +// The following parameters can only be defined in this input.cfd +//------------------------------------------------------------------------------ +geom.dx 0.1 // Length delta_x of one cell in x-direction for uniform grid only +geom.dy 0.1 // Length delta_y of one cell in y-direction for uniform grid only +geom.dz 0.1 // Length delta_z of one cell in z-direction for uniform grid only +geom.uniform 1 // Only for generating grid by FFD. 1: uniform grid; 0: non-uniform grid + +inpu.read_old_ffd_file 0 // 1: Read previous FFD file; 0: False + +outp.cal_mean 1 // 1: Calculate mean value; 0: False +outp.v_ref 0.1 // Reference velocity for visualization +outp.Temp_ref 1.0 // Reference temperature for visualizations +outp.v_length 1 // Change of velocity vector length in demo window +outp.i_N 1 // Number of grids plotted in x direction +outp.j_N 1 // Number of grids plotted in y direction +outp.winx 600 // Resolution of screen at x direction in pixel +outp.winy 600 // Resolution of screen at y direction in pixel +outp.version RUN // DEMO, DEBUG, RUN +outp.result_file NO //PLT, VTK, NO + +prob.nu 1.5e-5 // +prob.diff 0.00001 // Diffusivity for contaminants +prob.alpha 1.96e-5 // Thermal diffusivity +prob.beta 0.00343 +prob.coeff_h 0.004 // Convective heat transfer coefficient near the wall +prob.force 1.0 // Force to be added in demo window when left-click on mouse +prob.source 1.0 // Source to be added in demo window for contaminants when right click on mouse +prob.movie 0 // Output data for making animation (1:yes, 0:no) +prob.tur_model CHEN // LAM, CHEN, CONSTANT +prob.chen_a 0.03874 // Coefficeint of Chen's zero euqation turbulence model +prob.Prt 0.9 // Turbulent Prandl number +prob.Temp_Buoyancy 10.0 // Reference temperature for calucating bouyance force + +bc.outlet_bc PRESCRIBED_VALUE // ZERO_GRADIENT, PRESCRIBED_VALUE +bc.hasTile 0 // To model data center plenum: 1: Has tile, 0: no tile + +mytime.t_steady 190.0 //Necessary time for reaching the steady state from initial condition + + +solv.solver GS // Solver type: GS, TDMA +solv.check_residual 0 // 1: check, 0: donot check +solv.advection_solver UPWIND // Tyep of advection solver: SEMI, LAX, UPWIND, UPWIND_NEW +solv.interpolation BILINEAR // Internploation in semi-Lagrangian method: BILINEAR, FSJ, HYBRID +solv.cosimulation 0 // 0: single; 1: cosimulation +solv.mass_conservation_on 1 // 1: Turn on mass balance; 0: Turn off mass balance +solv.tile_flow_correct PRESSURE_BASE // To model data center plenum: PRESSURE_BASE, NS_SOURCE + +sensor.nb_sensor 2 // Number of sensors +sensor.name OccupiedZoneAirTemperature // Name of sensor +sensor.name Velocity // Name of sensor + +init.T 20.0 // Initial condition for Temperature +init.u 0.3 // Initial condition for velocity u +init.v 0.0 // Initial condition for velocity v +init.w 0.0 // Initial condition for velocity w + + diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/set.isat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/set.isat new file mode 100644 index 00000000000..8defbb1cfd1 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/set.isat @@ -0,0 +1,171 @@ +/**************************************************************************** +| +| \file set.isat +| +| \brief Settings of isat and ffd defined by users +| +| \Note Please do not edit any comments +| +****************************************************************************/ + + +/******************************************************************************** +| Section 1: General settings of isat +********************************************************************************/ +isat.useISAT 1 /*If use ISAT*/ +isat.useBinarySelectedPoint 0 /*If use binary pre-training*/ +isat.digAftdec 2 /*Digitals after decimal*/ +isat.read_existing 1 /*1: read existing database; 0: train from scratch*/ +isat.write_existing 1 /*1: write ffd results to database; 0: do not write*/ +isat.err_global 0.3 /*user-defined global error tolerance*/ +isat.num_input 4 /*number of isat inputs*/ +isat.num_output 2 /*number of isat outputs*/ + + +/******************************************************************************** +| Section 2: Input settings of isat and ffd +********************************************************************************/ +//------------------------------------------------------------------------- +// Section 2.0: Settings of numbers +// Note: Users define numbers of inlets, blocks and walls, respectively, if +// there exist at least one inlet, block or wall that will be +// overwirtten by isat inputs. The number should be 0 if none of inlet +// block or wall that will be overwritten by isat inputs +//------------------------------------------------------------------------- +/*inpu.inpu_name: names of inputs including inlet_temp, inlet_mass, inlet_vel, block_temp, block_hea, rack_hea, sur_temp, sur_hea*/ +inpu.inpu_name inlet_temp +inpu.inpu_name inlet_mass +inpu.inpu_name rack_hea +inpu.inpu_name sur_temp +/*number of inlets, blocks and walls*/ +inpu.num_inlet 10 +inpu.num_block 10 +inpu.num_wall 6 + +//------------------------------------------------------------------------- +// Section 2.1: Settings of inlets +// Note: Users should define inlet_temp, inlet_u, inlet_v, inlet_w, +// respectively. The number of inlets should be consistent. +//------------------------------------------------------------------------- +/*inpu.dir_inlet: 1: x; 2: y; 3: z*/ +inpu.dir_inlet 3 + +/*inpu.default_mass_flowrate: reference massflow to update outflow for prescribed outlet bc*/ +inpu.default_mass_flowrate 28.3168 + +/*inlet_area_value: inlet area*/ +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 + +/*inpu.inlet_temp_re: inlet_temp will be overwritten or not*/ +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +/*inpu.inlet_vel_re: inlet_u will be overwritten or not*/ +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 + +/*inpu.inlet_temp_wh: value of inlet_temp will be assigned by which isat input*/ +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 + +/*inpu.inlet_vel_wh: value of inlet_u will be assigned by which isat input*/ +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 + +//------------------------------------------------------------------------- +// Section 2.2: Settings of blocks +// Note: The number of blocks should be consistent +//------------------------------------------------------------------------- +/*inpu.block_re: temperature or heat flux of blocks will be overwritten or not*/ +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 + +/*inpu.block_wh: temperature or heat flux of blocks will be assigned by which isat input*/ +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 + +//------------------------------------------------------------------------- +// Section 2.3: Settings of walls +// Note: The number of walls should be consistent +//------------------------------------------------------------------------- +/*inpu.wall_re: temperature or heat flux of walls will be overwritten or not*/ +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +/*inpu.wall_wh: temperature or heat flux of walls will be assigned by which isat input*/ +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 + + +/******************************************************************************** +| Section 3: Output settings of isat and ffd +********************************************************************************/ +/*outp.outp_name: names of outputs including temp_roo, temp_occ, vel_occ, temp_sen, vel_sen, temp_rack*/ +outp.outp_name temp_roo +outp.outp_name temp_rack +/*outp.outp_weight: weights for error control, when outputs have different order of magnitudes*/ +outp.outp_weight 1.0 +outp.outp_weight 1.0 \ No newline at end of file diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/zeroone.dat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/zeroone.dat new file mode 100644 index 00000000000..e17c108cb29 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter - Copy/zeroone.dat @@ -0,0 +1,320 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/existing.isat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/existing.isat new file mode 100644 index 00000000000..1704c0ef5d3 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/existing.isat @@ -0,0 +1,35 @@ +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +2000.000000 +25.000000 +299.524161 +293.711643 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +2007.500000 +25.000000 +299.544464 +293.715325 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +3003.750000 +25.000000 +302.393775 +295.464381 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +3492.490000 +25.000000 +303.699423 +296.409751 +/*num_input: 4 num_output: 2 */ +20.000000 +2.000000 +2500.000000 +25.000000 +300.968751 +294.234246 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.cfd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.cfd new file mode 100644 index 00000000000..552ea9e2786 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.cfd @@ -0,0 +1,85 @@ +5.486400 6.705600 3.657600 +36 44 24 +0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 +0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 +0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 0.152400 +0 0 0 0 0 0 +28 +10 +Jet01 0.25 +17 17 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet02 0.25 +17 21 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet03 0.25 +17 25 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet04 0.25 +17 29 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet05 0.25 +17 33 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet06 0.25 +21 17 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet07 0.25 +21 21 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet08 0.25 +21 25 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet09 0.25 +21 29 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +Jet10 0.25 +21 33 1 4 4 0 10.000000 0.000000 0.000000 0.000000 0.635000 +1 +Outlet +24 1 15 13 7 0 0.000000 0.000000 0.000000 0.000000 -1.116483 +11 +Rack01 -1 5000 0.000059 +10 17 1 7 4 14 1 20.000000 +Rack02 -1 5000 0.000059 +10 21 1 7 4 14 1 20.000000 +Rack03 -1 5000 0.000059 +10 25 1 7 4 14 1 20.000000 +Rack04 -1 5000 0.000059 +10 29 1 7 4 14 1 20.000000 +Rack05 -1 5000 0.000059 +10 33 1 7 4 14 1 20.000000 +Rack06 1 5000 0.000059 +25 17 1 7 4 14 1 20.000000 +Rack07 1 5000 0.000059 +25 21 1 7 4 14 1 20.000000 +Rack08 1 5000 0.000059 +25 25 1 7 4 14 1 20.000000 +Rack09 1 5000 0.000059 +25 29 1 7 4 14 1 20.000000 +Rack10 1 5000 0.000059 +25 33 1 7 4 14 1 20.000000 +CRAC +24 1 1 13 7 14 1 20.000000 +6 +Ceiling +1 1 25 36 44 0 1 20.000000 +EastWall +1 45 1 36 0 24 1 20.000000 +Floor +1 1 1 36 44 0 1 20.000000 +NorthWall +37 1 1 0 44 24 1 20.000000 +SouthWall +1 1 1 0 44 24 1 20.000000 +WestWall +1 1 1 36 0 24 1 20.000000 +0 +100 +0.010000 +1 +0.000000 0.000000 0.000000 0.000000 27.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 +-10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +1.000000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 +1 1 1 +1 1 1 +0 +1 +1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 +1.177400 0.000016 0.026240 0.000000 -9.810000 0.000000 0.003600 27.000000 1005.000000 +0.000000 0.100000 50.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.710000 0.900000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.300000 \ No newline at end of file diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.ffd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.ffd new file mode 100644 index 00000000000..5d8f1acf8d8 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/input.ffd @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +// The are key input file parameters +//------------------------------------------------------------------------------ + +inpu.parameter_file_format SCI // Foramt of extra parameter file: SCI +inpu.parameter_file_name input.cfd // Name of extra parameter file +inpu.block_file_name zeroone.dat +inpu.old_ffd_file_name result.plt // Name of previous FFD simulation data file + + +//------------------------------------------------------------------------------ +// The following parameters may be overwritten by *.cfd file generated by SCI +//------------------------------------------------------------------------------ +geom.Lx 1 // Domain size in x-direction (meter) +geom.Ly 1 // Domain size in y-direction (meter) +geom.Lz 1 // Domain size in z-direction (meter) +geom.imax 10 // Number of interior cells in x-direction +geom.jmax 10 // Number of interior cells in y-direction +geom.kmax 10 // Number of interior cells in z-direction +geom.index 600 // Total number of boundary cells +prob.nu 0.000015 // Kinematic viscosity +prob.rho 1.205 // Density +prob.gravx 0 // Gravity in x direction +prob.gravy 0 // Gravity in y direction +prob.gravz -9.81 // Gravity in z direction +prob.cond 0.0257 // Conductivity +prob.Cp 1006.0 // Specific heat capacity + +//------------------------------------------------------------------------------ +// The following parameters can only be defined in this input.cfd +//------------------------------------------------------------------------------ +geom.dx 0.1 // Length delta_x of one cell in x-direction for uniform grid only +geom.dy 0.1 // Length delta_y of one cell in y-direction for uniform grid only +geom.dz 0.1 // Length delta_z of one cell in z-direction for uniform grid only +geom.uniform 1 // Only for generating grid by FFD. 1: uniform grid; 0: non-uniform grid + +inpu.read_old_ffd_file 0 // 1: Read previous FFD file; 0: False + +outp.cal_mean 1 // 1: Calculate mean value; 0: False +outp.v_ref 0.1 // Reference velocity for visualization +outp.Temp_ref 1.0 // Reference temperature for visualizations +outp.v_length 1 // Change of velocity vector length in demo window +outp.i_N 1 // Number of grids plotted in x direction +outp.j_N 1 // Number of grids plotted in y direction +outp.winx 600 // Resolution of screen at x direction in pixel +outp.winy 600 // Resolution of screen at y direction in pixel +outp.version RUN // DEMO, DEBUG, RUN +outp.result_file NO //PLT, VTK, NO + +prob.nu 1.5e-5 // +prob.diff 0.00001 // Diffusivity for contaminants +prob.alpha 1.96e-5 // Thermal diffusivity +prob.beta 0.00343 +prob.coeff_h 0.004 // Convective heat transfer coefficient near the wall +prob.force 1.0 // Force to be added in demo window when left-click on mouse +prob.source 1.0 // Source to be added in demo window for contaminants when right click on mouse +prob.movie 0 // Output data for making animation (1:yes, 0:no) +prob.tur_model CHEN // LAM, CHEN, CONSTANT +prob.chen_a 0.03874 // Coefficeint of Chen's zero euqation turbulence model +prob.Prt 0.9 // Turbulent Prandl number +prob.Temp_Buoyancy 10.0 // Reference temperature for calucating bouyance force + +bc.outlet_bc PRESCRIBED_VALUE // ZERO_GRADIENT, PRESCRIBED_VALUE +bc.hasTile 0 // To model data center plenum: 1: Has tile, 0: no tile + +mytime.t_steady 4.0 //Necessary time for reaching the steady state from initial condition + + +solv.solver GS // Solver type: GS, TDMA +solv.check_residual 0 // 1: check, 0: donot check +solv.advection_solver UPWIND // Tyep of advection solver: SEMI, LAX, UPWIND, UPWIND_NEW +solv.interpolation BILINEAR // Internploation in semi-Lagrangian method: BILINEAR, FSJ, HYBRID +solv.cosimulation 0 // 0: single; 1: cosimulation +solv.mass_conservation_on 1 // 1: Turn on mass balance; 0: Turn off mass balance +solv.tile_flow_correct PRESSURE_BASE // To model data center plenum: PRESSURE_BASE, NS_SOURCE + +sensor.nb_sensor 2 // Number of sensors +sensor.name OccupiedZoneAirTemperature // Name of sensor +sensor.name Velocity // Name of sensor + +init.T 20.0 // Initial condition for Temperature +init.u 0.3 // Initial condition for velocity u +init.v 0.0 // Initial condition for velocity v +init.w 0.0 // Initial condition for velocity w + + diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/set.isat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/set.isat new file mode 100644 index 00000000000..e974205ecf9 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/set.isat @@ -0,0 +1,171 @@ +/**************************************************************************** +| +| \file set.isat +| +| \brief Settings of isat and ffd defined by users +| +| \Note Please do not edit any comments +| +****************************************************************************/ + + +/******************************************************************************** +| Section 1: General settings of isat +********************************************************************************/ +isat.useISAT 1 /*If use ISAT*/ +isat.useBinarySelectedPoint 0 /*If use binary pre-training*/ +isat.digAftdec 2 /*Digitals after decimal*/ +isat.read_existing 0 /*1: read existing database; 0: train from scratch*/ +isat.write_existing 0 /*1: write ffd results to database; 0: do not write*/ +isat.err_global 0.3 /*user-defined global error tolerance*/ +isat.num_input 4 /*number of isat inputs*/ +isat.num_output 2 /*number of isat outputs*/ + + +/******************************************************************************** +| Section 2: Input settings of isat and ffd +********************************************************************************/ +//------------------------------------------------------------------------- +// Section 2.0: Settings of numbers +// Note: Users define numbers of inlets, blocks and walls, respectively, if +// there exist at least one inlet, block or wall that will be +// overwirtten by isat inputs. The number should be 0 if none of inlet +// block or wall that will be overwritten by isat inputs +//------------------------------------------------------------------------- +/*inpu.inpu_name: names of inputs including inlet_temp, inlet_mass, inlet_vel, block_temp, block_hea, rack_hea, sur_temp, sur_hea*/ +inpu.inpu_name inlet_temp +inpu.inpu_name inlet_mass +inpu.inpu_name rack_hea +inpu.inpu_name sur_temp +/*number of inlets, blocks and walls*/ +inpu.num_inlet 10 +inpu.num_block 10 +inpu.num_wall 6 + +//------------------------------------------------------------------------- +// Section 2.1: Settings of inlets +// Note: Users should define inlet_temp, inlet_u, inlet_v, inlet_w, +// respectively. The number of inlets should be consistent. +//------------------------------------------------------------------------- +/*inpu.dir_inlet: 1: x; 2: y; 3: z*/ +inpu.dir_inlet 3 + +/*inpu.default_mass_flowrate: set a default mass flowrate if using prescribed outlet bc*/ +inpu.default_mass_flowrate 2.83168 + +/*inlet_area_value: inlet area*/ +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 +inpu.inlet_area_value 3.71612 + +/*inpu.inlet_temp_re: inlet_temp will be overwritten or not*/ +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +inpu.inlet_temp_re 1 +/*inpu.inlet_vel_re: inlet_u will be overwritten or not*/ +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 +inpu.inlet_vel_re 1 + +/*inpu.inlet_temp_wh: value of inlet_temp will be assigned by which isat input*/ +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 +inpu.inlet_temp_wh 1 + +/*inpu.inlet_vel_wh: value of inlet_u will be assigned by which isat input*/ +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 +inpu.inlet_vel_wh 2 + +//------------------------------------------------------------------------- +// Section 2.2: Settings of blocks +// Note: The number of blocks should be consistent +//------------------------------------------------------------------------- +/*inpu.block_re: temperature or heat flux of blocks will be overwritten or not*/ +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 +inpu.block_re 1 + +/*inpu.block_wh: temperature or heat flux of blocks will be assigned by which isat input*/ +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 +inpu.block_wh 3 + +//------------------------------------------------------------------------- +// Section 2.3: Settings of walls +// Note: The number of walls should be consistent +//------------------------------------------------------------------------- +/*inpu.wall_re: temperature or heat flux of walls will be overwritten or not*/ +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +/*inpu.wall_wh: temperature or heat flux of walls will be assigned by which isat input*/ +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 +inpu.wall_wh 4 + + +/******************************************************************************** +| Section 3: Output settings of isat and ffd +********************************************************************************/ +/*outp.outp_name: names of outputs including temp_roo, temp_occ, vel_occ, temp_sen, vel_sen, temp_rack*/ +outp.outp_name temp_roo +outp.outp_name temp_rack +/*outp.outp_weight: weights for error control, when outputs have different order of magnitudes*/ +outp.outp_weight 1.0 +outp.outp_weight 1.0 \ No newline at end of file diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/zeroone.dat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/zeroone.dat new file mode 100644 index 00000000000..e17c108cb29 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/DataCenter/zeroone.dat @@ -0,0 +1,320 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/existing.isat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/existing.isat new file mode 100644 index 00000000000..b088bc696c5 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/existing.isat @@ -0,0 +1,20 @@ +/*num_input: 2 num_output: 2 */ +20.000000 +20.000000 +293.150000 +0.091394 +/*num_input: 2 num_output: 2 */ +22.700000 +22.700000 +294.201356 +0.097384 +/*num_input: 2 num_output: 2 */ +25.700000 +25.700000 +295.356177 +0.104386 +/*num_input: 2 num_output: 2 */ +20.800000 +20.800000 +293.462120 +0.091449 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.cfd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.cfd new file mode 100644 index 00000000000..e57b7e8d68f --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.cfd @@ -0,0 +1,45 @@ +1.000000 1.000000 1.000000 +10 10 10 +0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 +0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 +0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 0.100000 +0 0 0 0 0 0 +8 +1 +Inlet +1 1 10 0 10 1 20.000000 0.000000 0.833333 0.000000 0.000000 +1 +Outlet +11 1 1 0 10 1 20.000000 0.000000 0.833333 0.000000 0.000000 +0 +6 +South Wall +1 1 1 10 0 10 1 20.000000 +North Wall +1 11 1 10 0 10 1 20.000000 +Ceiling +1 1 11 10 10 0 1 20.000000 +Floor +1 1 1 10 10 0 1 20.000000 +West Wall +1 1 1 0 10 9 1 20.000000 +East Wall +11 1 2 0 10 9 1 20.000000 +0 +100 +0.010000 +1 +0.000000 0.000000 0.000000 0.000000 27.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 +-10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 -10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 10000000000.000000 +1.000000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 0.700000 +1 1 1 +1 1 1 +0 +1 +1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 1 +1.177400 0.000016 0.026240 0.000000 -9.810000 0.000000 0.003600 27.000000 1005.000000 +0.000000 0.100000 2000.000000 +1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.710000 0.900000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.300000 diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.ffd b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.ffd new file mode 100644 index 00000000000..17c76743281 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/input.ffd @@ -0,0 +1,86 @@ +//------------------------------------------------------------------------------ +// The are key input file parameters +//------------------------------------------------------------------------------ + +inpu.parameter_file_format SCI // Foramt of extra parameter file: SCI +inpu.parameter_file_name input.cfd // Name of extra parameter file +inpu.block_file_name zeroone.dat +inpu.old_ffd_file_name result.plt // Name of previous FFD simulation data file + + +//------------------------------------------------------------------------------ +// The following parameters may be overwritten by *.cfd file generated by SCI +//------------------------------------------------------------------------------ +geom.Lx 1 // Domain size in x-direction (meter) +geom.Ly 1 // Domain size in y-direction (meter) +geom.Lz 1 // Domain size in z-direction (meter) +geom.imax 10 // Number of interior cells in x-direction +geom.jmax 10 // Number of interior cells in y-direction +geom.kmax 10 // Number of interior cells in z-direction +geom.index 600 // Total number of boundary cells +prob.nu 0.000015 // Kinematic viscosity +prob.rho 1.205 // Density +prob.gravx 0 // Gravity in x direction +prob.gravy 0 // Gravity in y direction +prob.gravz -9.81 // Gravity in z direction +prob.cond 0.0257 // Conductivity +prob.Cp 1006.0 // Specific heat capacity + +//------------------------------------------------------------------------------ +// The following parameters can only be defined in this input.cfd +//------------------------------------------------------------------------------ +geom.dx 0.1 // Length delta_x of one cell in x-direction for uniform grid only +geom.dy 0.1 // Length delta_y of one cell in y-direction for uniform grid only +geom.dz 0.1 // Length delta_z of one cell in z-direction for uniform grid only +geom.uniform 1 // Only for generating grid by FFD. 1: uniform grid; 0: non-uniform grid + +inpu.read_old_ffd_file 0 // 1: Read previous FFD file; 0: False + +outp.cal_mean 1 // 1: Calculate mean value; 0: False +outp.v_ref 0.1 // Reference velocity for visualization +outp.Temp_ref 1.0 // Reference temperature for visualizations +outp.v_length 1 // Change of velocity vector length in demo window +outp.i_N 1 // Number of grids plotted in x direction +outp.j_N 1 // Number of grids plotted in y direction +outp.winx 600 // Resolution of screen at x direction in pixel +outp.winy 600 // Resolution of screen at y direction in pixel +outp.version RUN // DEMO, DEBUG, RUN +outp.result_file NO //PLT, VTK, NO + +prob.nu 1.5e-5 // +prob.diff 0.00001 // Diffusivity for contaminants +prob.alpha 1.96e-5 // Thermal diffusivity +prob.beta 0.00343 +prob.coeff_h 0.004 // Convective heat transfer coefficient near the wall +prob.force 1.0 // Force to be added in demo window when left-click on mouse +prob.source 1.0 // Source to be added in demo window for contaminants when right click on mouse +prob.movie 0 // Output data for making animation (1:yes, 0:no) +prob.tur_model CHEN // LAM, CHEN, CONSTANT +prob.chen_a 0.03874 // Coefficeint of Chen's zero euqation turbulence model +prob.Prt 0.9 // Turbulent Prandl number +prob.Temp_Buoyancy 20.0 // Reference temperature for calucating bouyance force + +bc.outlet_bc ZERO_GRADIENT // ZERO_GRADIENT, PRESCRIBED_VALUE +bc.hasTile 0 // To model data center plenum: 1: Has tile, 0: no tile + +mytime.t_steady 190.0 //Necessary time for reaching the steady state from initial condition + + +solv.solver GS // Solver type: GS, TDMA +solv.check_residual 0 // 1: check, 0: donot check +solv.advection_solver UPWIND // Tyep of advection solver: SEMI, LAX, UPWIND, UPWIND_NEW +solv.interpolation BILINEAR // Internploation in semi-Lagrangian method: BILINEAR, FSJ, HYBRID +solv.cosimulation 0 // 0: single; 1: cosimulation +solv.mass_conservation_on 1 // 1: Turn on mass balance; 0: Turn off mass balance +solv.tile_flow_correct PRESSURE_BASE // To model data center plenum: PRESSURE_BASE, NS_SOURCE + +sensor.nb_sensor 2 // Number of sensors +sensor.name OccupiedZoneAirTemperature // Name of sensor +sensor.name Velocity // Name of sensor + +init.T 20.0 // Initial condition for Temperature +init.u 0.0 // Initial condition for velocity u +init.v 0.0 // Initial condition for velocity v +init.w 0.0 // Initial condition for velocity w + + diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/set.isat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/set.isat new file mode 100644 index 00000000000..48131953bf7 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/set.isat @@ -0,0 +1,97 @@ +/**************************************************************************** +| +| \file set.isat +| +| \brief Settings of isat and ffd defined by users +| +| \Note Please do not edit any comments +| +****************************************************************************/ + + +/******************************************************************************** +| Section 1: General settings of isat +********************************************************************************/ +isat.useISAT 1 /*If use ISAT*/ +isat.useBinarySelectedPoint 0 /*If use binary pre-training*/ +isat.digAftdec 1 /*Digitals after decimal*/ +isat.read_existing 1 /*1: read existing database; 0: train from scratch*/ +isat.write_existing 1 /*1: write ffd results to database; 0: do not write*/ +isat.err_global 0.2 /*user-defined global error tolerance*/ +isat.num_input 2 /*number of isat inputs*/ +isat.num_output 2 /*number of isat outputs*/ + +/******************************************************************************** +| Section 2: Input settings of isat and ffd +********************************************************************************/ +//------------------------------------------------------------------------- +// Section 2.0: Settings of numbers +// Note: Users define numbers of inlets, blocks and walls, respectively, if +// there exist at least one inlet, block or wall that will be +// overwirtten by isat inputs. The number should be 0 if none of inlet +// block or wall that will be overwritten by isat inputs +//------------------------------------------------------------------------- +/*inpu.inpu_name: names of inputs including inlet_temp, inlet_mass, inlet_vel, block_temp, block_hea, sur_temp, sur_hea*/ +inpu.inpu_name sur_temp +inpu.inpu_name sur_temp +/*number of inlets, blocks and walls*/ +inpu.num_inlet 0 +inpu.num_block 0 +inpu.num_wall 6 + +//------------------------------------------------------------------------- +// Section 2.1: Settings of inlets +// Note: Users should define inlet_temp, inlet_u, inlet_v, inlet_w, +// respectively. The number of inlets should be consistent. +//------------------------------------------------------------------------- +/*inpu.dir_inlet: 1: x; 2: y; 3: z*/ +inpu.dir_inlet 1 + +/*inpu.inlet_temp_re: inlet_temp will be overwritten or not*/ +inpu.inlet_temp_re 0 +/*inpu.inlet_vel_re: inlet_u will be overwritten or not*/ +inpu.inlet_vel_re 0 + +/*inpu.inlet_temp_wh: value of inlet_temp will be assigned by which isat input*/ +inpu.inlet_temp_wh 0 +/*inpu.inlet_vel_wh: value of inlet_u will be assigned by which isat input*/ +inpu.inlet_vel_wh 0 + +//------------------------------------------------------------------------- +// Section 2.2: Settings of blocks +// Note: The number of blocks should be consistent +//------------------------------------------------------------------------- +/*inpu.block_re: temperature or heat flux of blocks will be overwritten or not*/ +inpu.block_re 0 +/*inpu.block_wh: temperature or heat flux of blocks will be assigned by which isat input*/ +inpu.block_wh 0 + +//------------------------------------------------------------------------- +// Section 2.3: Settings of walls +// Note: The number of walls should be consistent +//------------------------------------------------------------------------- +/*inpu.wall_re: temperature or heat flux of walls will be overwritten or not*/ +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +inpu.wall_re 1 +/*inpu.wall_wh: temperature or heat flux of walls will be assigned by which isat input*/ +inpu.wall_wh 1 +inpu.wall_wh 1 +inpu.wall_wh 1 +inpu.wall_wh 1 +inpu.wall_wh 1 +inpu.wall_wh 2 + + +/******************************************************************************** +| Section 3: Output settings of isat and ffd +********************************************************************************/ +/*outp.outp_name: names of outputs including temp_occ, vel_occ, temp_sen, vel_sen, temp_rack*/ +outp.outp_name temp_occ +outp.outp_name vel_sen +/*outp.outp_weight: weights for error control, when outputs have different order of magnitudes*/ +outp.outp_weight 0.1 +outp.outp_weight 1.0 \ No newline at end of file diff --git a/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/zeroone.dat b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/zeroone.dat new file mode 100644 index 00000000000..e17c108cb29 --- /dev/null +++ b/Buildings/Resources/Data/ThermalZones/Detailed/Examples/ISAT/ForcedConvection/zeroone.dat @@ -0,0 +1,320 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/DataCenterModel.png b/Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/DataCenterModel.png new file mode 100644 index 0000000000000000000000000000000000000000..096af07d17e9270dfc882102571a0d047b4d024c GIT binary patch literal 36210 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 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/DataCenterSchematic.png b/Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/DataCenterSchematic.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cf9d7b2bf820543423799dd102a8f8cb337b44 GIT binary patch literal 44950 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�*S?^|(KVgqV0sC6JgH7n_N@O(;rbwoi=a{B!qt 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 E0lv&ps{jB1 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/ForcedConvectionModel.png b/Buildings/Resources/Images/ThermalZones/Detailed/Examples/ISAT/ForcedConvectionModel.png new file mode 100644 index 0000000000000000000000000000000000000000..ea50573d09e3da259bdc30be2d492c8e01b05566 GIT binary patch literal 40704 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

Xn}+8G)bG8c@X&`RS&4e_e6~< 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 literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Images/ThermalZones/Detailed/isat.png b/Buildings/Resources/Images/ThermalZones/Detailed/isat.png new file mode 100644 index 0000000000000000000000000000000000000000..5c0b0df73bd5a65edc6d995d1e7271bf7450e67e GIT binary patch literal 2082 zcmV+-2;KLIP)Px#1ZP1_K>z@;j|==^1poj6wopt|MU&1>kC2m=NQ0|yHC2@UiM z5b+HY2M!eP4;2Ux76=d)2@n?v5Etwa7zq&=2@)C#5*q0f8wwK}3lke?6&>al9}E{E z$m05o=T7WTIf-+lzl3j(5V2F%ii&0{WHe!p4V~sXskB4TGglCgE zX_Yx^nSX1VJ8hgiZJc~?pLuekK60XVbf!RbrgV3yL3gQfd8}@GuS0vUYkjjteY0tR zwnl)qW`en6guFZ?TK~!i% z?VJB!+e8@0JHO6)x=gK0S*K$IwH9TY4qg2Qx{0W$8!Ar65T^o)%x%CF2OSiu+pv`X z*yi%Ixm=#R+$EQQd-eT8pHIWnPd`1bX?jUBnH`?s7H8AnAY0&FJYkzGddqI=atpKR z1E_MZ1*q<(Ugzc}m3j~KVQ>?=Spy;NS%E6)VgAR$ z9%d>g-qQ`WiLi%3)bj&W2SLvgR0`TtYk+XUditQYKzjI=U=RKL^27BkPlI6b_Y|S} zVSD_06c4Yb{qYc>-Ge_31$t^*^d64e;~V+_Y-SOu_lSA20r zn~=SxoVLvy&m97#LSvFST595@37J0(-4{W4=-V{>Ib8H@(A`1D#$k#5_-LbRGjJV* zA3dAW90(pA8&U%iMA>GN`D6~FW>X~_+;Jp_g3U7Vj%q}N*-VhTprpub>bVh6O(MRi z(VS8Y0JW)Gmq4i!w5j4Fs`sMoE3^dRz7%lyY$`TrZ5SK5N$lz8(pqf5QMQqzY@_<3 zjxR{L4AsYL&z!hTAMDvg;2zYNHXeJ-W*>-HJdk-1R2&{M^O`y?IG)RQP@~Xx`TPio zD70Okk8?cScIi1O-&gxt8u2auv|QGA7Jda8PANA73h+i(zE5LVvAk6~K;Na21Hqv0 zf*m30ySS_5e)L_~wYwJDF5+beilWOR_fMwiyDWlW(RP_O<5C5|qU|!Z0fI%_1zoez zb_x03q~@}69)u4~mo04m>$=o%6FnD^iI&Tf@NiVaWt^TLLQ!`)eE|f5vWq1+XFySO zxkbJLg`(zCF7JE|5=F(ON^b4McIg-YZ(4-9TqW49fFs1Ep8pJ#6uC>;`%I5KF5~QK zLqwNFaupOMl1t6v&Q(egxOA66sDZkS+5Yngp&%|*G7pO7GE|hH%c%hnezZon?!0F( zbX;bIJH@}CqWE3&?Ii!B%uis~yW$o8ztqbonN67k*0p*icK@V|61 zGrE|Iy8_e1b3qqtJU)WTa^tC^AJfNrE)m##`gH>fLTx%OIQOB;BOv0iKl3oC-Dkg< zaWO+D3(g+Ta`q00v8*lvt z_e|2b{%IE>_9<-D&;^;hJ#mhz1k}o;a7A_jkwYq3*6cjCR>+e^mPvwMj}Rb*EOTTQ zR0t_#DTS}RxFnxtg9I<^!AU;LBEeSeG1ADQ@*Z+XKFi!5$}&ylU(`L)$by~Cz(_vJ z1@t@wM&el-_7JF063;T26JNl^k#LrOie1W4lFf2=fJ}l^A;B!QlBKtbm{^ud(Z;Vi z6q8Vv8LPJfQk^8SG=|Ag*zqKW`7DbCOLUD~2uPO0ubydg&b@Qa(PyqveT{154?k1= zMN@4JKmL;Xo0!AoxHKlL{Op2s*;IwqFHu5OJl;ezI3l=S&u&33}o3lZ{?>n zPg|kH%~Bg8-BHic@Wje8S0w#^fNpVz{yr@dk+alBNNzlE$(-RW*p7M%D>HB04P z(j}Rysb#5O%#&f&LuqX^vQ!305j$IK4Am_2y<{-40RdF9G%nfJnCd}5qVr`wpPK@y zLULKw`pJiSheZixsgIJr@E>%TL!4!;WT`Hk7($d~DQ~MT4;TZ_Qt2w_AI7^Fo-e-? zVvI>@p8*Q&r7SV%WWh0><)-v<8!7ko+*Qr8{oe8SfBzTmxFA`+J=PP0V@E)Qa`Zqp zn|YEek>?3r;5sPA3aa=1~y4&dy{10m)Lk*7n9Ov;Y7A M07*qoM6N<$f-iBUY5)KL literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Library/win32/ffd.dll b/Buildings/Resources/Library/win32/ffd.dll index 5fe85a8e809c94af491dedd2dcd2fd2732e77e5d..917930cdbb296cc6ba71a43507e68aa9714a2c57 100755 GIT binary patch literal 172544 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 z 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 N!hih#U;pP5_%}>*QgHwP literal 139264 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 diff --git a/Buildings/Resources/Library/win32/ffd.lib b/Buildings/Resources/Library/win32/ffd.lib index 9f7f9a76cefbf3ea568e8d190331e6886527c638..93c8058501b653d5774f191fea85f39cc154d583 100755 GIT binary patch delta 191 zcmaFI^NweN6o-YGv8jQDp~d70jA9clrl9g)%|qs^u{=7}8@G8E;|oS)VX?^vm<2dN zQd=1q7?>vSXOy1&h4}%B5=kR-0|f|3;PPQ)W&kO_2vu%2*^%`wit@=eY$9?XC4xXD X3=A9$@o8x(@hLeu3_w~BL~{WEo;Ww0 delta 191 zcmaFI^NweN6o;9ysfB@wvE}3mjA9clrl9g)%|qs^v4}?)#ctlk_<|8xSZwkEW&uu+ z)K&%t2ByjT8KozGVSa$3MAFFIKmh_0xO^Cy89>S}LY13Mc4WPaqI|Lqn}{4pi6Br3 W0|N&`d|Fycd`eCZ1CZ7O(Odv_z%eoa diff --git a/Buildings/Resources/Library/win32/isat.dll b/Buildings/Resources/Library/win32/isat.dll new file mode 100644 index 0000000000000000000000000000000000000000..d35f03546c62a528fb51f2c084ff4f3eefd1f663 GIT binary patch literal 1065472 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

xit(rkOW$_hEXcfh?z+5=|R^X2Vf zJ_TwFPSG%8^X04P=2*w{;*MpDwL+Wgv=9% z6;XcDKt}UfHLUqWpR^qb1{#zuS70iE3XBoQ+vD4$Yr`2mlPW%YNT#cO&k-VVc23Ud z`UsY#)knl1h8o=Xa{Uw*pU@NITEQqTngB}XxT*qh)sD&4GdySi*j+hI)!IG=qVeez zt*XyUPZ$r=KQ9|ZMh&x6#^mkky0h3y!$wqVB<}`AyMTj-y|4c61ph8M5q%yMa=d6i zSFi%#TAKje!wxPtdDsG#OTWD!dp5d`E9$>QnFKTRT9S5z%w1me`TD|4b>mbe1S%GU z$>cwzAvE1!<_5jm-kSPplw{MZe7-vQEzQL|#Ch(!z*l(Y{#-A5ysEw=12ByxXo1tR z48&z(Qc~MpQ(ra=aYhxmik7dGQLRj>halW$8lB zbA!x7>U-(26>8c88)Fd&4zkLIsp&HmWu-I=#cclEFydL-x^0qoFgp)`{R(j1r2vKP z0PrQLG%LH(FnM-J-V@n*031|+8!ij5Q!1VQy-_hdA$hl61W+vQtLisj3h-u&VNxo6 zXLNv}ACdQJb{-fmRe)PB1t?~bbU9BdRb^Ki?(#IrTW|BsK2a16B$yxcbw3ns<5veC zdhqwnJ70d;`M&p`$B+s3j@7`bNE-6a>V44h9p0AneYI|S(QQjJ(k0S>I2io2qH@w`EqdxB%iH!ziWe^h(W?4wLO;rJjVHq=3%u>Eu?YlICK(fvU~)xRsazQ3 zH{~3o^kNd|{f~*>-+$TK93J1!L)Ye*Oe+pXZ`s?9apT*@w_DA>KMntItANXW>b(nc zQqXzSwiIk^pNu=QrrHu{H}zW9tdgso!|B`7ssekRwekv(e6f%!PW+F7q8&`=c*~~l z={MY0A$Mgo+-mQBo?cchcCSp#Iax|NkXXcjHEdVHH!n)QEfz> zyDzO1+b4uTN4h{!0eJDLq*T>EEXc@+4{7%jaY0B%z|(J4Zbh>f4+%o$`CN7+58rYL zLNXO&P@Q9I@9hZ`~Tf>mzSO1EN7awFi?deV9BD$&b$ zxzhBD!cfu4&nR@`K@!a3khm5&m8aX@4Y<3{kn3*wNXo3rjm+RWUS`R}CEeG{Y`aPH zGNwDWPl_=RJETNgY@dM3H5H8dAQ?{lA3@6&LN)X~L7~&crH-gk;(PgGW)z|CNyIk@ zApW5$QvPf_&D|~OY(%sBMZTZik9Hw=8l7$AR71+OMW7x98Buu7GpYxPOHa*iY06X- zwY?P>cy)~8WU`82D@fN4&n5$DmNwkB7^aSER0>{K;UieEpp?+@e#sK8SOIa z= zR9QP`FWyT7RrQS{>B*E&@jM~jYTY?BBwu-p-q{w)HjsKlr)d0zRxW93u}`CT_-?AobVS`xoG`z zJOzrNdMiKJ7B^5Td8Y+@@xtCCd5>k~dGS^Sz4v0!y(2*1WI=aG^*2AQIA09)> z%`@>rsKOkd8&MwZZ2TiEr&2#rCNAqxV5hcl{z@n<>(4K;U-)yhMo}ui7^SIF&gXoI z^5gO|QGTL=V(>wqC7Z%aIG~Bo1{pWL9;lvvBBM$rW!Py>YB_pMR`t;69KA79)o*e| zRvmvANc}hZ>vu->cI?Y8?#%QNo$0pbZ%5XS=*&+(b=l6W)XvCfRsGfsMk6~D&#Hcz z&TPw6^*i%dS#{E#c?7kgo+47aMM0;ZR2p9Gf)v66c&wso8F8rha`2bOsPhek~%%cyV*a)$=fpp4p}s{bG7?T1+o8 zuAaLerm^Jp3g$9WN$UMG!%Eh8QYUEdr5(E7cIcp>b?j!pLj~F)`NYUR-Jzdq?j;>M zAvI6gnyFv*GuAhae!lNVJd^W%$Wc(qskDqmQ>q;o2Un}V7T7+$K#uujU+MUD7 z7b++?8-K(^=xil)t|-f4JXuwLPpZ)!fF|NnUv8nQ@`>nDRc7LXG$tl-Dd%jQB841vmaKA{HYaAN zHKm#C&YYsR6K0%SRRo#d;m(kAaydL63H`F{j)~%jiWiZ*4 zcT94U8*Y@|=8dqe9H+LGO&gMbrI{f!*~}D!7sckuHHeMkPZ?lS%<6)OCxzYMq*XyPxsRKh&ED** z#+b?COX>;wtF8;rr0`4ukO=A#NsvJ7)a!(qqOqJ=As_(N&S0md+QXz1kOQ>WfC?htm0iy;u8E zP5tx{`6s6+e9QKSH4SC5es9#e))_2&h2el%3J}{lA5pJzD=RE$Yhb9sE7w96Wpw6-c~EmbvK zswG{@d2XDDq5Ju;{S-Bf?gmTK-KchTJk!iA=hL7Kiz}C5c=_WpM0OamgsghW`!G8X zurDashc5@#x2#_wRaazJ9Ul4hlD92853p9|tRDtju{49K4|9XmE6A=l4D%()tIEy; zrtF_p^((Vrc4lBswcXz?^*U}Cwfo(Y_fd8pFzXfOnk<;D8JNCG?}*e}nO$!f&wj~! z$>!M;-hfOR`mL30(%Jg0_-`5L9}3Tb*WiDCJolP7KV02GRY0-_IafDJGp^d*GDr|frt8tMHLyN+-qhqje@wcHrb`c(zeCg2PrYGHmq1DWnbx(kfjy0< z^`&cNIIOOwywo3#VO`C0zn0fzpI+@AuP1Yr0;dt?#TCHBXqY(W%ZfSC(7Q94YTq!_WeIS$A4l%sjDBHSfY>S5i ztu;26ua_v9D_KVmCpeUgJ} zR+M$gJc}Dv$(roywUSvvxWH?PyYR`_ASzi0a%g)ypvu^lQt8thtuhu)T@k2gdi9PV}yA$+Xs0+)>7j?-}3y6x1EesTuluLGq64h0bylbCKB6{w`P6sM+;| zr@o?Q*W$Nf<+r=>SP2|(mrQXh@|1LNgQ*ZX?rwMPR6ZC}h7M0AXa1lUuM?!dfny9I zr>by{N%rI`?;9byS+|(oQa1UP=7;E{CsgECc5q1szuGA81WI3S3Upc$*pG2ER*?j5 z(LKgQJG}Y4IT`H6!g!*(HaI)(FEQUlm~;BBGjmJBsJ}`0I>H(B1~jcPHW5_yl9}Bt z{^j|iUAsGcKZ2Z=b%PW7CQ0ay>EQ*WEhsThQlGcwwSIz1@^xmUb}utcvC`Bkf2J3K zjK%D3Z{AR(ZS`!i(XZ@q<5f~(ZYhe&c4x=j5;Ol#J|e>0c(YG3+|anbYYdNO!e7;I zO7Kj~-t>_+$t365W3@TOS+++GvZ&ZO#=bKCw21NJU2i#6B{7vdYVe{aFpy1|jwZi! zoydjqOM;y!LymMNbfHRf&U3F|_GI*a*c|(`sN`Kwm>E~Xd>Y*ke4#fmvp|m;Rgab@ zrvO%@$-93jN;abmvf4T;@bD+j3g0X+`I8ef^M$pf{S~ru+<75gf7o>oIy=5m!u5+K zwfwu>c?F|XNX&$9Ukqw4&(fLvJa-=MS{8?}?>beDhaUb@&irHEzFl;r#stU6byO8T zU3L_PuM$k~YDi!Dk-YxeQD}FR@>prY{RD9GTCEZS>=xN2+$~3B+|&yLOL6?ODsbDl z)5UM=(!}cEC28gxQzf=fk*n7sPd-FMFCKs0F@O<@Y`wAtC*s>^Lc|$&_jbOyYUJg{ zcS^%sB!!)MpOi5(a_5FsmJ)q$Uf^iNLVeHJ!mH%u@`_QE?HT6QS137y2ydlaCUwzb z1!tPPrB&jicG`Ie)0CxZkYv^r43!5dEBOPg`K*oHD>LF zRY=;DV=ug!POuj?%Qp66o{aq^((wzD_pdfD*0LGV;`11mEA+HBd7Ho%xoC((Xk0)8 z7R9eN;(4utS#I)K3qvHM3+U|6s%jV2#eX79p@K8o2QU5-<*Vv<{tlof=+wkogRT}$ zE*%E^Te%F_B12Jp)_rj)e^~_tY?{Hj-OMX=D*N^Nq)sr>>kO7?WFFTiezF6sXD z$ycvr-Lj5F{)+9}Kn6X3OiInnjh)LiHAU{0<)k|CKc%m>1otPaS#PE*5uZXe83eOM zs=E80=eOQ)VAvk$G`l6=>=WQj@9a~0adJv7P6p)S3}XjIELxg5cNy;g0bX znPV$A^bLd8J|^O2v?_~^&0=QJKrcc-XJB5gO(!``k`)xIs^61EJ*FHh4@>a&R(0ld zcV0>I<_Svg&|~~+;Kuez0~q|jml-)`{55_UODWyr5!>B!-rW+UATrZ4edf7dtSAnee4<3n8d^Wpj2&LPDyO?M zE0RA8rN{QU8yMS^*wLgxrgjcb)*xL&(J2u1;t2jxK9%e=^GM`~!UYa>gd)j+g=#t5 z@L@COC*(!4^0lT)y>j3ER{TymFLB)6mH!JxSgZHT`qM$yn0l8*GXQng=^xn6JV5X?*R3jgot)H zJP#3Tp4FdSEe*`ICmnM*vhNLQd~=+cl=`8l@(&wsf44C|W}GMtRdR9TdVsZ`UZZTc zx;RZ$Fw$e!z7s#dA~U|5VJV(w5oy21O){E)qRnEez1iDxoSH-&C0Ueq!cVG`U)TIgj)i-q?%&zEsi|oL zamZ2|-<#d|#oMKCDqbG!5Ev7)+ON>|kB?}7AXkRvlJ=8Q_ZGkX>cR9d96OV~b9(1A zyV_t7w+TIG#oluo^9D3lbJL>(zle!r2j}6xIQ`2gR^5b^3o;V|&S1m+xU|g0$!reEO+8B5!jQpRbOZfnj-C2b% z8LTOp;>ojF1Bx1j8VO8;=!oYYtNX>S!flUX-r zFX^~s0t_&=-Kb;*D{Gq!gOxx8$-hSEQM_d`ye+*_qF$m82;Ne@IvLj@mkgqYA^3r< zo~nN@tL<*8W!c-(_Ihv2Qh_|eE;sp^k!|;D+hU9>ZAdk)}g^D&Qs246vMddQb`F``ed$oD_ymP4}C&s4-0a4DbxaY zcd7PFJ`vfndUn(3JzFD{t8L}f0YV*cKbx^H&&2C9#e@{7)Ue9sZq;##Vv&j8CMr!` zP+3Y)yw(3MaH&zfXf=~3$Pg=Yq8iRYnQ88FHoizlM3Fg}V-PQEI2$*U5PMRTn8M#o zvDlHv_LpHqK83akXInkg6k42|^&NPwhGxhg)A$udFW0Rqupu(Cl#)Jr8RaF(H5&mojakLw9D$e~x^eVbP z;<-?#D#%9sDDaK&9aF?nr5?lh6^l_VdFwR%LshbYcC&R$;IzDIXjkD@pe5syNzj#I zaltT)eHG*(fP?c+TZCMJRmEwZ(^w(QmR&EirK zpUp4BubBk}>csn|newst>x~7*#!ZyCT2tE1$IN{NW?`vWRT4h$)rly5!Tf@_4vFBM zz$DttD9XpikC|Pz6~Zel+Rr7VX(%v{mzsGc;a_szcr_7}jVLFwP7y;LRhw&WS1&cf zM5^LZyia^gi>>zY9@A?Ul!jk5i!gI$h+lG;)6)L5 z&aqfxJp3=jvnWWuoFmca^>)|=^!TdSSBUZudFl_Xx^aBMzb=lL$MOPa-MLe^9R7*y zB4)h%SdodiOQy=VQeG5!EDwLU`KK3iOZ?b$Z?n#Ijk(U9S(5xuw31B@2ER}u@a!sl z2}sE%$?YhlbK>Xpr06U+>OuB!R-oZ~IYu$p&r^Z9CiIC3wKHX7(AZ5hPnL#%>Fjt= zu7};wjfk)^mVSai9cF%eP^LH$YzG7$Qm7b-JaTvVA!OZ$L>(zLCqWqIw(x_b0Zmkl zH%aNl>~_^JmNTh>0h21_Qfm-r(vvDE>1>``T?*Anycf{0*1o7Ko1gxOs8UzqwAAdD zP3RjhUwj2J{*;M65NBJ_HO?!yD#5%5aAuoW zK0RCgH#AdpfAd85_dwN%7%f)%yB`V1e)~FyAd&RHVvypU#%s>D1)6FHUL}x1TWYLV zEh7FL(;X%dNdQvlCOE`|;%PXO7_6xumh$;s!li98`Pq-gN$ja2 zi9IC(JUeH3b#gMP#jj}18tYS2Q!ny*ay}Uh-E8qW`#J|41OeaeEF%xZPA*D2k5=Of zC$SY9dQ})0`)Lrze4`mi7IytM`Kk_Q)yb_NjbFa)N6F!b2n3ZOvyj+L z=1vT&fhLTto7u;C+S&M*B*dN&fj~urm&@4Wt3V)sv26B>3D%VS;-9l(1(JknLLOLw z!ywP!xDUvi0#g%XzhE)U#ACu*L|g|2!-dt!^XJD|c|bzyXecIN*%A9Uvb0a>2w{S} z24(tK8u>C)VD1z4#qz$d#4Ic@Q?ACt)(%p++h8T8v4s|eOc17;`b-d}#hiT8?PL#< z#$oy%IsPEsmv4HwE;}XHWxW2tb=leRM|lY4*BYLPly}qNiH?r%Nne+7X_9L}BxcE) z&oP#5v71|FwXnpjLZ?4TLovxFKQcKTifOueumEwv2KqpQAAW79NO5h1KAW80$XJ1TTXAo^gX)2p$wB;p&|J$ zP|$dJMR!)!w+@TrmFvY;E@3TVqPunqL4R*h7~&;5|6a*U**xw|DhScf)vVr<`ccV5 zR--|CS!|{|&-}3nY@Y0z*1=IHZb6Zm1GDTjPv(Zt`HqbmH^?Nc6OxT6WKMg{*Fp?I zXUD!~*>^QEPw+P3m56)SBD`rj{=9kfZ&UqeX+%wm8alW(ml|l5MIB`W5s4&bg|8w) zvDhmvf*aWq3qxiBAo6Cn4+{J{ZN-@CK~VS}myuK*hdJc;@eolEH6{}q6g~Y@dck9(r-1oQ9v&F1Kly zC%a!wLMIvD(&$T7^=~la%3U}Nw`QUiC<};gKOyAs%-K;%CDcmZPi!9d)L%U=o+XuM zL~12^#=*z}E?4e=G4l99aVuQ1QbLEgE&cvA%Y~Crdk2qV#9GcU`T;5Vq+YPhDQa3t zB6lk1MWNUg?o34Y%AlL3Gep*iy-SRbRxfneME4TcL?*ONZ&BLh79}Ar9s9XOiS98i zt&yfPPE6#{aJQ*E;}K-0Rx9+YBK)*$bN#9HP;VLX{G6LazEmLM*51RsiWa_A_&no@maV+cXk|dEBEji2B@sMIour} zB1jL&1&Dj2L2&W{Dj9J7(R7B8B9$jq67Rc~DV&K*Sztjf7g|k3Q|b4jy;b7yTJ2RH ztWLf;0M-~fEzFIdC5nm}D~q+N$dnhl(GyKqIXh}kq~v|iSWAD-lc!=WCvu&*UJbSM zGqV3A!#xl_ZKD0+>=R{(TcxXB@DvYk5HW0Ezudz&hC$xt4UuRkx9db`k)9Gu1xnPb ztI4xZ<;k^Ge?zM8lcN`PZlRE?;u96=*2m{0gA{#(uvwmQ0E*0_}UW|(S*4WZs~+1xK9xr=vo<} zmnJf8lY@70lT}O5CBhgnK__s+Y3ktoCG$h4qYzL3sxO%~;Bs|!j6hDT(m;D)zmIHf zs|<;q#KW>Sxyd>jsqB}yFqv*1M-kt2hG0|C6Z9zB?Jc^4#op~T-vLTQ<(epA(()=L z5JQN^?2;oQqnu5Zu>mBa9dt7%wOzk=>i50qP15OiGlo{;JBP$)zYQXlZ5n02h@D)S z-YhEZX7P$X?vY^vSemb|=JB?iYz7cNeR&43&*ljO=vD@BWCR1aQyIXKYzDw|X!xMt zCM^T#jkO$s0cc34Im!T5D+4&f1V=3cIFyLW)sdK9yG^@d??JG8yig~Rs7w<>H-Z7| z7Y2}k0W|GmnMGQTII+K{YWOIjl!y^V=q{-+s0`rzTy)j_DN){l1ns?H(Ulem-OJjGPKNS_ zGE~R}kfH9@(*s>N;~Vw^iB{LnE@)WgyTbhtTo2K*PGGCYJ2TI`Pd&HxIQ*t^r`z&| ziM|2jVZcnwaWA-%U0N;L59@M*cJqR_v(S`=!I|Ie(5C6+9HHg0k)~wBPY5;D_{A|q zP%u@y_?Uv;v5wV#6*|L(_1D)YYKujFt&6g!5FXvXmr39_eUBl+4#Y3r6x_)#cNqvR& zql29KDy!%6??1&(P8VknLcip>U+p*7#$Vw@V74)zgztJ+NZ1T=8knV_WDIAuy!of- z&9Vbe-ofbUax|;*NnW&{555&^>CJIA zyevc=?e(h0@WxT>Jh5X2H02<|g%`Tgo8N^jE@7!8mY}QvwFi<|f)K@XKi4IZgiE&( zmP*cq1HFV^3M6Ds%Z|CwMwuvf2w-+BP)mHS6PzSJMb~j>YJv?Pm+l;s?#@3tNE{*h z+{PWh5Y`bu0PuB62)gju=d_#=`*0Yd$RdeaT@y znhz7YXIW#{AfL@$BrkoF|8j_KJY1kfizwB2c&e5q>I`KIv@GdMc|vJv!iFvU>%N7V zhSFh7ifGO$($+3*g1~Wy3nUjnmjk*F_`D*uw3Gj@Iz=yk&AI+%`rpgIt|~FLjGvC2 zaHjk&k!V_yfy!>sRuOgC?6yIoBuRyazCIrRl95`*|D}Bp#>ubW6K;Y99vP}UIK=EW zP9LgpqesNZ<_f6W%qmFaK--)(`$udl9O*xJJ@vTcND=wh_xk1HnXq42`p4SS9C7a7 zKTP{~zoWE&%~~R%vjPq{>&9ONo$?++{2gGzkv3k7dXEr&&W69^G-vjs8))i?9UnxT z;si}NDmoexOQ*Un`MRQODxb|=)A^LGKX1_?NnUA!cyW@(iG3&$4T-CGnCNGRkrG!NCInjZVH>g1d0Nj8 zO~iZK8`R4DliuVZu!FCB#s2n;`j%W$t?oHhxYx3M!C%%v6A$@J&ulDsYmjnNY z^mWzL|EQnZqtjd?NRMP;GJQ@_uTw-sy-ug7@UT;~f&pbI5O&TED68QF|9{1Q;(RXS zW_W1_|NoW$NBMu4J7B_(EoCh%WvMT12N25wd2eZ(#0@>w@Ol5$F>?s)!kwmey%&_- zCe$raoeuaM1R-m$u8CI8jB=p5iX!tnh0h4vY+F5nYXIvXoth#Ym?d*Lzq8*j0AKxx zgKOVoRF7*wQr=h9`JOKv8unf8M%ODRltG%6Z%<;2q=mXgU3^YlB+MwAiJt->uIe!H z=z2K=_~5ddbSYu3S;vymg>sgK0-7uf-HaAne6f9AyqM)-#?*Jh+?UWkLH8C{*XMEK zs?V2?0zQydlXre)47=uDG@C+$qF2-ztC42@-6%5;)M5@wQEzp(jV+Zkd$ z)N{dk_P=t1POalZ*UsH6qWD?D20I&9l9q@bWD(_f3y4lB`@*l7Fx}o5AGhU%Ohfb_ zjAp}8ih0$U-R!?mm)S8*@YB<>A1xsOMmo%54VkK^_8N$S%zidQO1C8C@Iw@2p=r@v zBQeBZp$i1PTs=JzRm&c?@(4REJ0}(~b{kX5n4f?v!xMBHt2`pX1#8#4O&h$DJa!P_ zuHfCvU)|570k8Qqg3$&j+27Ne6fTDywzb)q0^hWje(V0$4N2uSYfRXZZsB9yy1yM8 zWGS&HvS2d%TX%sL6>itqt@~TI?r#zsma?S#`x|i{k2bKsWi_hpv243#f0NdhHD26= zuDr#A!_3B{}zn5R01Dv+)^11amIfAPeD>WXY-t z>h|i3MalpyJuziC)GAdmDSH0cAdH;d6dvSO_G0JhY?v+$RBk{FW-)qYs97&$2};+J zJ1i*m5*9>?LoEIH8?>Cz2-`CG0S>gB^%(`^UJW}sJap(#rBdK_Q)e&8kIV1Lls_=j?CY&pJ(tjozqok~BQ z)EcIr%gINbI@O&_`>=d;Na)8lGpvskwlDM}(%7=bi<^*Kp&u(BjSlp(@=;SS@=+xx z5W4=)vNpUBL)06PaIoFO^V{vB7kmq~- z^V3;l&rb*ghLd^TBH3ViIQ{yF)Gr;Y*iw6ozV73!6!FP8iJzOQ+pozwTWsHI2I4?T5KWC*PK zVt40cT_>!~3gk2#G44|oCEl!ra!UTe@ljPo60a%wZJWmw+ed&J*nvkZ4heaXiOsY` zJfywK6Zj3>Z!5}?W(CakZ1e<9105VHw6^)81`5msTUufk5MhwOh!lnW=O#ZlT)jnj z^8~IW+^_EC`DViU5>TlNb9xljXm(seWzRuf-6(rNn}4|f{i8yhs1#!@2T`ijOCGn^ zbMRo}V7&)*>bGf!O!P*RLCSRDzb01oJaC(@OiQj+v)*{9qn(f|XEq(DLccu?wRd;pH2DQ(%D`f&y`m!1#f z04#72BwIGSwcU6-$vKdtPs<(zs&H*5&Mw1t|97F&IuvUg8>#GWK<^^Ru)&IEs}_f% zb{o6WL^nig53ZUIKE!0M1VR^05W*bH?Y&E7w`~DLQIT>s*XYZY2T^q?%)UIeRL9H) zwK&5Y?XdG(*{TdE6a8q3IF$`gaAh~Ue)8TomGH1!pDFhN$F(Xg&6%#j7Bk_FmZW(m z0Kgz8nU}8UJSPUlsd>8p10nSSKS$Ch4*i)BM@wuxBSj>-Sz{V~^2} z6ryr@-=U5* zzGzQ;@O9A2gAz6*Non(1OQ6@y{(xlpw(>o{_^~GR<49^ z8NR-S-)4DjrQ^Nc42JMqb=f-o+Ne{iE?c+S_A~spfYacJ-V49Ycy9UpR^rS2(gGEJ zdkqZD#+P|C&8^wSmEmUGvzD0KWGrI)gFefho=glw__(mdRkTiwddk;Umd!Zg#xU^~rpTVc8rWl=83MQI6(XljnNaFes)$3PxtXfzdTh(xHsEcL&0zc4f&Bn=89%Ei3=Q7JZG>D9pxNSn3w=XWIdTtT$iyIl&+)4A zF9@XVIV0Mpg5DK!MdtH!?@5idO=xO(klqbUHZ2{Q%fUT7aY0cYSE${jPE*Q%Yd1xj zT33l`9z}i225`_oIaCyunJZE2)jz7K6_!c$TB|PTo0#UC-GRk=OK2HqW*Ng4GTu-y z&&?tkas|hpm%Q;+r5|yDdWFs-m#q`S9|o9F|1RH5wAG~jp4cp(StdIu-bR(rCuY1s zKIf}F=8MvA?tA50q0Oz_#8k<1FPr_LKk7Aq5!;WT>{C(ti}02goM*kQZTDd7Q${GskiC$sW0@Hhu# zT$Dz@JECq$%d_fa;iqm%TW#L(hJd@yv*Np8@77Zv@ZI|AT*I+!1fTMEh4pFA5L(V` zmE}Qo(|P}2v?u9ZL40(SKlf_-CA)&U=Uiy2JnpwQVpkB) z9BuUvMsGDqesZ&|nQGu_*7^fx*{jXg5x~%syEop!v!=V46PfW?9);lFV$m5SY!kLd zMS)k`$BsJ{N8RdvcgC42A~;nij~-zhj*r2TEU)c&kN^(y-W#uBmM2e2jv8jCjk2ej zl0vo1mgfwuUH0OnGk>IA_6@>$dGl>{;WX1O!JXP|aHpx%A#pl_P?H*4 z;Wk!RNIZuR&701S*9Kk>^qMIV?6ap}t~X5#rki<_U`nUC0n==bBA9RKYeA<2iST}} zk%&;Wx&Fy)tXW!OcuDU9W~zZT1?FW~qu8>V9HIz(9P6lQ43#^(D~RRkQh9U%KL;&I zyEDQcM&|SGBWifH>BXRGdTNn~xfp8C2UkJ6*qbpF>BgoPFVW1th@1;Y9Fifr?S{|Eg(r(JwFoJK$o#9*O-SM%mZ-Pw&}>Py=|w%Ve8~ zSt*v;1cF%UKR{XR&JoM(`==Vdm5Rl!T4tYeSBh^yNsSqgjkZRC`1vbJ3K=r+?XnvS z=O>R#7Dm|tC_o=abvDYKZzk9>Ryxmofr%H717bhSXQV<$y}E0yLG~Io$Yy4EF*Q_x zL3V{2WNShqC@TfS%%edfMPQJ9RDNpAhu_aNk#x+5hX@!k9)oNqr67DC^N$tc6X}=_ z2`WpinGuW|vBsuQPU;DnIS}zAQ+uEN9WU))g*xzoHO^7(DX3#^68d|GwYd|NqbDov<*&v;FnU_p~;4 zathi-;pa7l5cYhf?rUV@`aLD-YlNh;$T`m~DTK8JS-0{!Zej6ROrWvdcw&k(|EPig zuPO=@%L@4?MyU98iWV>!`D}ME4P6DZ{^M2Pt`$cuqtgVGb^-|vPG~!SQ@H(+ZsCZ5u19)= z3Lfbc&S=^LZEME;jSy~M$Xj={kcIvVCq>a5{}tq(>%}dHOu`|528UF34VS!P6MB38 zj@N)RSmWBV%ef;6X;QtBfEBJ4<`0LOAoAB>d{9jl6V;28j@P9cQ{}&Yh2U_8F zW54_|+kOy9EZ1BwSh*9;^}0pnrP(}rLCRpFZpOG;Mn@{M4W{Mm*vV3nC9sfpHv9#Y z`qMk7b9Hz7Rbx2nt`W*@b*B`X-c8!kSpy%K#Hg!v@R5YB*1^Def6rpIp4TxRK^@t9 zBP(2~qchMoyf=15-fZ}mnNsL}N&BUg5$h;@=t1*uzyC502cVRLOo!{L>ZHmFah_cy z7ZUbC>~i_4F*Cl9bHd46lDI;^NOuxf$N)+2lCN~)CxZA7obsyr3aTtgc94ej*Y_=d ze;idG^@0q@0ZiURZG+X1bN?a#3eI3!t%jSkf2ukftE0fbj1c)tSw4R5XKXH(zS*gH zno0nO_N&p_?vXA!_hwnr_5Z}`eGX7p zN%@wavMrPHl%LW&0?9wJsTlU+8FSwhtPsrDKlg1iI*Yr)SW$M|E0zn-?#)M6f(P)r zHGCOr>K$r&V`x?05DqMV_BJ_~WhV$iG(0F16*6X0Tu#sB1Qol$^U~+8W1j65HE&BV zNp84Xk6@6aJ``m&k8aZ$b5yUuypS6C@z{X44g|OzJr#S`aWH>=GB?Fmo#Gz(U&(Dg zoyX^j(^L6u9FXtJ2gGWjae(_~sul6sd|JM*IL-IE3qFA6Q(^(J;uK|<9^?N%OU={M z6$RG5wEY6+?`RdqpLVt3tS15R|P|O+? zv*yzRbGe`o9)eAyU;}0XUwT-#VgQ8d8U^{f<^hT?E2NKLNb<5q!E;&jDUz3B!?N^W z_;0NY_vd0Izk#0@TT9pw8H{`{Z^?iz%x_AUohW19n1%#2(3m$5`zYsWaf0Ns=|cFN zm#+p6?mh`iXQv$Fa=H{um?!cBwQpoS@}i);vcvAaItt6vvQLDBxHJem=~!lXl4BGY zFhZvwjZiv?D0vs6v5lqEw=+md4< zR$HMg#vGSrRfXKANZbk%@?I@4WA6=$`7*B%H$DHgO*k%KZ8pE1o7qL}+|1Us%j5;y z_?X`&leef%CQqLO5ANqtab5?$Wf89f-%_Wq17lUb7j)z~kN$@F22&4g%AXG(ODGmX zQ8eiV2VITK=!MS7>AHd)RW znIz;KJ4t^*$q}91_Wy8aou@x0O}1?N9UYFJwf1TZ#r4PO8t;B~I~$)-evLiQS;g5Y z!el$YRcEM|<44O2aLEJe=EdYNLxa%JS*K_UGj^P>SnVh;d&eol1UU6I=b>NnA1|8a zGLxquu7uFui8MXF?%Xmh;S?pQMj;^7y+iqbw^ea7YLw^fS0sc0c=f^PBht>(vZG4R z2rthih4!@9v=eQTMMPE(Si7FaqQp@KDiuDUOrzxmvs=DMpM(n>Hv6OwFTh`5MnH_o ztb3I%LTV4a&c+@th$$$(+tG|+ophR zYrUDKhDTYqarW>BWmo4#b$PY-J!LPj-|M6=m0Nw2^Kj)0s;?4XVEIo&#b@Efhw*QK z1M}y!&wE#*NaY>-H2WQDdZ8wK%-tdwB_IC+4{_^P6fgh}S3d6p8+a9Wk-#BW-5f1s zTSr?RZp7C1oB9@Zx&akfhFjx?H=kC3&ofE;eeBU~+HGcN)f7Zkx#=HjI>_tbHA78X z>sPXLYm$d>$&YnRg=wh^t8So9{BFoBe)h?SQ~)ayno|=9#VTC6HE=j=C-<_$@hus~ z%y5K{S$xs8>uqDQzC>}Y-zipH(GEhD$_-!gDRw8iK+DDEs6+^i9tkIGxaQb-Cg-o| zx!-3z(2xd)nvNu!Ei4qR!=;6ZO8717qN=yjfkRfvlgPbZkXH$m&Yt-;Ad6pN8?@2d zTKbt{mf{t{*ibUG9PvtWXA%q`p!>DZ%N=&{-jC0-x%#MB(*8m^ko$UE*t#<4S1U2W#=6j(B3 z{Jmz6{^f!Y6!8A3*>1(r`lNE?yz5(SxleTRxBjFiPRz%PZsOA1UP!zfUOMdJc@fpl^vn-IFCWQmD|-j1|#3C)>&9MEFmCqnNiWkw7jGRFx}k7 z7mF8W&cpVV_!bJ2$8NMtcIU~6q4@})%Vcr$V{-n0S0?TgH<2+#GJ472$K)vk7}?rN zpCwPE*5PNI$rCfzl8A1Ty~z%bbu#zL z^6)if81(JIKs$bEvEz=Z-R49SZgjhcj-q8NqVHhry>YmAW5>h*zrndq+)O@AtC6Oy z&W0&`5syv=uw}c`C+0fO}DQ0pIJyfO^vM z?ovj%lmFfPmwlC;eQ8KMA{HHGlUiDLluc^s@}q20p`(bMN0B{Ab8aCC`$0JQroM(z zkjU~cXV30tYwTu!1Q`SjwFm#-YID0C4)1<(%(zeXMYr-eBb&C6uiZwUgZRrPWni0n zMdAbWyNP zgcpI;-k`9KuDV_%lgh19UpRuE-y2S`u{}w2s;%K;sXxMI+2FC|@0C22-R$Sw%HS3s zNc|CiNcA_>7MFXZzvXs*tyn(~rTSzPT2r6U!ANapAY$i(%`;7x#qF(+@WhlcvQpLT z{duw0AOp}ZJ?(O04`@%dgx|ZahO?>JVorUa?@fC}_ILbJtrqShzJ*mI3_Tr=AeU%+ zph)D3&$0s1g7uS`9M~;tESzRuQrG2X()@DCw>9gMTmOPKs^x!QtEGCNEP8hfe=g|{ zYvr>2iDE4PYmyRK{rNnp(jP|i5EuKI&dBzM(O_0*(nw}HGexkv)po`j{OH?18>pi} z7lBZn%p1K&v!(7#TQ_yHjCAc*R_8GY6zWTpt2M(B0)a#)L856If=qpST*zE!)1$xl z=LO-5{==K6QlFy`bkg!|dfJugqDX)|tDM!vg3Nq<(#}_fpgDJ!4!qsP#Z01p>xeG? zp5|XNX)C1eL$+?}UWm|$4_1iYTw~8>d3b-oc_z|B66=FeN`%lE71&=qJ+cR zEep%387xJ;3RSI?mcH{(ilwbL9AS8awFv;Q#buueg~WHl64+?`y-#~5`;=f=qhS&fH|(3 zkft>R`J)YIeSJx5>QAW7QvFvix)s4HUlorb;e8)263&=^HoBD~_kwO@6I@$eEJ{J&sv49JaV;1oY3oc$vn<{ z!B(hFF3&3CPv1F0HiA_hIgoP*K0cHpl2| ze~|%ua&(^iB55L@{twYyMc2A7it5V;eC%(fH-_*3qty2_j-KuD#zE#3oh1-vSox?zxrtb0W0K%D zvZ=|9pY>I4f*dNhp(l$B@#BuEyjLNmt#=b)E%f}dGr8B+=)2O7{5K14^WRECZsmr7 zSKZ1^0t{E~#LlF0ou`p&+=>1Rfq9_mw(N3iJ4EU(#rSVO=08zl0K54n|II^9_|3{|9Rhd>7Ks9*L||N7D6FU)Gf&1PK9(aC@|tivl!|x;IUjza;U0BJ!#KjJzm*rq>su@=))^J&r!fD`@Vj8!JG?UkZ;lLE;>G(sanJ*f}PLV zaIFBT+^pk<@GrqIUcw^Bi5~L4ksE30cAo2!^8)S=r^R&-liqO*>1j^W`3Y=gS5GS* z(r^ZZ%)m*}G`$4e5F(duH=zr2iF$y!4m;{eLx~ooHJp~asRDz*<&iT3Cms$XNOCU$ zL%mGj&{H4oroGwcy@Lj)D?Mm&zMGVfuOwQx2YZ}b^0|bQ^Oqj=B=Q2uuW~>*gkPeh z>oJdX4i*o-#hKyIRGa>JFJHF)X&~`n3bo-Ob$PEm$^B!~NgjIu;RwDQ&-OxIvafZA z4-v<%>8eCDDFoNofEuj%Gy!i!upop8&uCY67QdoC+xZ6=EBZr6=~CdF+j4|aHZ9xf zMBuPjcFJJPEa5u5vO}hctvPS97n&jcxyO)1A)kQ+JYZ0L|OhZ&}~ z#)+yces=Xj{}>Ab!ERsMQo9ZY3kQ=M0FIlu2*d@Exttrmkn88Xx@<+ioL7Iz|9_$W z@`33JWxCccmHKimXD{UX{R_E+a(N|EW9k`(c2u+r1#K?a1ehYG7i{TEMMb93-V`c$ z>0lk#cYJbv$ERN3Ei0spASh@y3YyEB`$6pg;_iLmt2)a3;e?yg(BAfhngX`iM!jk< zsIkNvz1cQ}TuV!Cn}qzK+q8CF>|R;c#gL1vB$W0h%IV>>>@KWvt-HA58eO#P3M=gr zP12YIL^>ZvOCR-~RU9_vQ29t??e7U~Lo39&fJ0B3 z?1F=4^cfsa=nOnugiL7xJz1d^I(z(>1>4XtKa62#UF~#oT@5}LK}9ND2+3g=jNpDX z&dw)3$%V9NUm_O<-G$Wwvewnv@wU~}_Hd58C`BG)7pyP6&Mz*_1?Lj)gEl;l{-FR4 z{(!kwznr`vp{KbJ(AgyS4#-}J0Wrl^q^Yw5?XApG0hPIsT>P`pYhZ{$V^QL}Jko~} z;JtPm^VOK?W_d>ZKFKvfy?=xdHYf;*nOY@HA`!wSn0_w?qN_R>gqoJK{3$3$GzA-5 zxIHy8fb0&Aaq3Ozo$>m76N}Aos{MO0QJcW{WX%IQJvahJC<6ym%qlrdb4mD9U)^tm zp(Z1C0R7KVlH5*K6uP6#bvdAy6sG0uE5!^b^`rjoZL&wlPqx zYNseGcJ>+Q8924T2p#7B!Fw}<;cdp#jgn;>7%9&o*pt_*xDGZN;%K=R@H6bI_2I0h z@D6OP!73*=+QU)Vy5=KFCjxg<>Oi=abSMW_W#9y!nHk4;eZy(9agS1loO2K9*}~?< z{d97yR3IDxRV|ha<573NFMEpHTuMhcUn@t*NNPtg(`J>7fZNO}9U&vB93dmA9VtX_ z;tZD3F)pf(!Le04mLKcM#M;LX218TT1siJwOFko9@)_Zh&j=TBCI@rG1d>V>RE@4` z307@0Vh_-E#O4ufK~`V6HU%HbcJv(j9ZSP(2t8C8oR4s?NVdc~QO?-_G5CG>fL^5c zXHgE_KVandy7Y4xFdKK#{qsY(nyjVls1yVHTS%sX_!St~ z{YkGxLifCbytyp>xlagnbS8uHBEw@Zczvv(T{FHwaPFT#;Gq5ic3 zYS>%<%_;S7Cx~6&Q1wSQ%3i`Wq`7?KALWzZY}_pOIA?l3HK|YISxP%0{=0&h_@l{? z$`_=vkWaJI)K2Llh+7?`WYN^U+jowq{*1}%Kf%JcJN17ZF@)~?oYbD)hTecZy#(=H z{jj6&y9NhT;!KrrNAhH+MqGbB~3{m*9@K~>1Jq)&Nx8o{tPh%dtOM6PX2Wg|AMIgvY3uKxz0@tn(k?7&k6TjM5r5$AV#uVV z*Tfg8)Ik`Yw_?d>!9MUoacoiNXgr0ZG}WoD_QG^i_80|2L&npGs1ah*{O)?R*)Gb* zo+8l-eYDs^>R3)Wx}yn~<`^L?J+#<&V|iwy@$>)<_vl9KLJ76#r3ovF%ASEfY!@8k zLd7O%X1?etaB3_vVWGTnv$YQDJAQ0fg9~`MtjjiI2}+%8s}@Au3nDG-u4~*x#sP_w z<(Dmi^fCFni-Vz-x?cmRT76S~bU*aLYq-ffR~f492NdP%xCTJ96TAml2s~aC{~jB&#WC`a^cXp5UYwEmrYq!E3!%eXEhL{+ZNQ9wOkNdIV>WK zN36^$9VXJthl%vcVQ91vXG}+X@vIlo)*zy76rybuqAeTP*HXqUABButISP4IPifbn zq#f~H0em@Jf~^`fUoYrrbs0#;lH+|rGO!!$qT5WRYvAbOby*-D$YzPFphZpGK?aE0 zLC1){QD|W!XhH70xBb&d&Q(np#FJnbAQ+JB(Tp}h5qV++dLb6bEaf_Iy#O_E0PKhi zfTh55x9kOQtXe)E;bS=-@!2KRI*aVkHXKCRQURwzX56=mY3#wP%8&;}dAbSxa7K+>oITe0a=MZG zhEe$kqY9xkjHIfD1NX=H(3x(`D`LJ!ja5I-G%9hT&CsL9&k^#nsvSc;is+l4cc2u0 z4oIOA#_jx8a&?{o)L$Bvzc;G-jocDMm{bp9s2O##3Ja11#4PhxIz^nUfQa~yRo$7A zeWer3HToOY#A<>a#uIm9q|ltMM~&4y+-Yp!QDgmUPO#4lpmnPoM=ZeOH;gcqo6ysb z8lT0H5Up~U?`F{go48Ihgx<-K-cdbcRc!{58M(Je6W+jrl0q@}*Jy>px{56xF{%-3 z^ubs+nljo0?e+kW=>;-}i44xf1sJq$J)DJ`gP~2U7g(WI)aH@^PP>xxSvSjJzMDZ2 zX=|wbsg7)o+uo)81X$1+LFaMu_xyk+&*aX%uW(O0#_+Al7fLv-1k zH#Ys2W;h}son>GiIf{VpAvm@=kb)V`wnA;w?sjUM#?{)f zx>K<4jVIoXQN$z@Zx|-ZcW{j;j1s7N#wIc>3!Z85Y{B(-ACygLfUgHzrqK#4euoh+ z`Z}CPr>K6RRi8ir$)mE={VV#k`owlnR)hTo>6f1{{a_wCi|&bo%`dL;FJMHef0(g` z=ODj;o-yxgW8U3p+TCc`-O$2|87PE>enwIFWgYUIg>_gAVn$!xljIU-QhbFeTw)c- zD^kzLT0R=^h<_a?sensx(*6#U76FDTQWYyUaN}SV8E2tj=yAYoD2{#O95ZUPIGx++ z5Y_IJG;yjBGA1S&&PjdZZ>868uu9dCS=BDS=Uj+*GYaof{5%w1?4E~uZfB1zIOnU{ zoYyI4ur+-CmEZ_GN%xOpZXvX3j7NDl?lPJN$x^~Y4tnQb#>}aJrC|Fi!|M%-hUr#6^IT{LPF~Hxr=HLblz~~eLrlO{5DFw3{HKnI16e~|tSk|5{M8)~2 z*r>Tq{kc*7d58SLb+-_h=Rt#&=Rt(E=jkKDF-Kn={1nXD7u~_h408@q9wo=JVx71^lZ)m< z!QRy~G4TA#!P?K;63=l1>FrjZ*FM7`rX`28eTF+(=3;5yErlWOg8?`LNwm*k1h)2s zHnaB<6>zd(R!>5ww{tDLu^m2%&y!*u^4u%rd4S}30OVPVPtFOAI7LXv6X%3{f(5W) zLXqczRPw|!i6YM~MV{|XlIH;&j?JzWXN1rt+-mTxE4u8maL}7_LwwpL2OO!61L#@K zwQpGdO6YMan)|`vos(2D39(HD0G@|l7xi8_P~;?o1>i4-&jHMcgw%_9DyJY~a0Ts| z8H}nI&p=`~viF2~IZT6loioQ1pTelXO8+#54e<)iu-)-C3ipvRKoK#ajNLetH8)~n z02eGm_Y=_{G&+2Z!?fnVrJk&8^&?l%GKqEhdrydo7`$;H@Q_qcRqWc7F1;i zlb3fexxPb~nA{>!*+C|@yn{@vzM~M&(r&1MvueAUzOtL?4c$neaJVqsGYI8|s=xs4 z1{I*)sSg*%dj3s}U{F4|KDdBAw6Bf{hYlXuiEh6T-6L!InUP++MGo-M$KhCVEv2d) z_1c2gOVdLl@IAW*_WU0Xq_4xSfj!hd5h;9C1y{_O|Ld#D9V%8ViuvHp38!xXz70bcRX%n(65 z2+RH#=mDOHC;Aik>jf?;p8^lh!}4I`PM+==Zp9&+CIYju2Lueehil02GaMCv!oN}y zhx_%)>rSlIU;(+{pfB307Ld?7gk6lB4=8I}$||2^miP6x;avL&h>vvC`xO&5%#bGX!^aSvi$C0v2Qq8Z1j0sFA{-iYA( zCUhbMtJ*e?uZ-A(WareV75R?cRGb2GO?{=v_gazf%THqpOpIqlDCx3F?vGkl%l%Qy zur7pnMu>VOQp#gyAc>-Ws16oHmpbve+8T3Lc!$9+8KKd*2Pit6P_PENY*KWmET6VQ zeG${5l}HbP{(2e53G8S3MMB2`98oi?XUZhu>G~+0_${Li8@EZ?3Z$Vh)@BZJx%ky# z_6w~^KQ=2=Vj}0(Vj|}*??DHoHWV%DM2lcU&Z~uCH*dKZa0q>SLF}`-4*{Ol?W_;+ z-nT6H>Yel5x3MvBL@2`q_fHJN6v86m09o1t7+CDRJO&=d8yKouNWnNVy|D|TS#E5J zw&OeWGPrg^h#H;+xq{K=gbZ!-A$o(|k%2)#q%oGBAS!eHI3@o99M#Qp&v8~aT7+Y| zk<^d>ar~zzCwo7}xN<)Yu;p?Td;NY69%OS?DNUnU%jIPCdO2CWlqah%gN?WhCh;=F z5zox-g$KN{7sY2T@5R{9Ufv6D(9HT?0GVCin~UG2y#O=2w6~B(6v8{59TT{cAXwG) z`Fqd+kSbRny7GG21caTpqn%jZ<&n&AqV@8=oV{58#SxfTVn?3jsMB@t$Nf2{5nRe? z1J$hcE{5-BLoeIO>Ym5AONeMY-4#vC#0rBp?bXwqfKMLUMh|?E)rqdg-7y1hcve#H z>P2`~rx9B(LLQA*3Y%UE znfNeDKs_cq9efUv72M<@=O*!#~2vuax~-1XRJ$S8}ZGp^-)$M0|Toj;5q&sIbpJZP=XLTm~{k6P$4JPuYC zZ9U%udV4HNcT2`KcgH%j;EfnWps`(lCoI%w?CdYt>n{Wwx6|4H)3`4>17MK30E3WK$MBKDBoIF1Z1rntR=ZtS`Q;M(yTk6 z@0nZuz?ny*Zq39GW%SReFq`KydBA5j=i-MoJvdxp+Bx`X`+v&9rX9eGQQ8wp>tf6k z4j(-m-}QJpcCi-W1Du+U-y@QtzQ?~TAB)vTRgYw?xVD*zsB#YeL^7T15y?I`6_(%m zxI{h{q<+kjkN)@v&`iScx;f~wN#^XTskqbsi2d;25o6my9n35d*;5lh&dh|W#n%S`Q=-hM7Y(#qW zZPucq=P}F|)YT)2zl~vhnxzc`0Ky;9`IbV22^mN@Cm5$k-yLh?Yg+W(=bDL3di}cx z3&!PjvectOsTl`Ap+YkE9$wLYA@MF&h|3^w@|3aZTN_C{**wL-+})1`7@HnPl5`h% z+v>RpkqgdRFEB8B0fW!PFP~tsTozk@qqTJoaA6m09Rh^<*}JF>S^4J#nxcZqkxi;@!*=$pLjlPSNW4&-EmpGo|F92xv8t=>><#ADH&L3AhO6gbZ2-~VH&WQyG z$aTh;{}E=0&v=r#1J6lrsLqlbU$0_NKH-rXXYej%F8{aP5~v9%5f@P zmyJ?SZ)U0aE7GT|i#EJd7g}3WQxnNWpTxiTN3>|!4xLXGh0^Kv#t{dJbjDxE}2Mj&{` zT2f@KD>O>abPQnAh*8>U&9n^AOB?G<omsh&VK2dgti_=>Ue30CCn!0MBpetL+U<>ROR&?Fj~E*CjWrXn))iVtVlx)HT}HR=vO2-naYfx=?FVAP z4tId=#31nK!zG0n^`%AD4C{u3A2>LJQNI$iRJGEY;XBNx*hTlSrMSsesNuM`rROpD zY^G2ozF2LFG>%#7ORz_^S_U77$LzCiz`?zsffN04wKSMjy_F5N3ud@&W_x`y_Copp$c0RFyqX9`lO;{(R0qw8Ki(#d zaRY?RLu;!SH}p2f!x@SmbdHDY#t()NB*#Mr37xOT0s|nk5>rx5bj(VrGLZq)L|RSN^EPo%j!)LB;;jh&UN61mvHv$P27JHQ@{&bq;2b*}t;2k@R+ zelnyS5zM&z#f%OhTs!{onv2NK-s<=b8!jq83$^^*4X64f@)MVQTta@LCu`!rnah5h zAU`QN(dStr=alUHT?=zgEjt}4NZCojDbSyrtW1jRB;|Q!CnfGuk+_#3JE2cVU67r{ z6oL0%Qs|OfqB>8(5*D1P3WDb*WhaRtDLZ+yl*=z5J3$;uc2a#)vXk`pmdMW6QI*4> zUD+w>Z#`sZ*8eNA^C7{A3Mx3KlATi_@;@j$d*GgowNdE>R!VlNegZ$w`adH(D^aCu z8$fnmMkl=Wva=7`cC1YXgR(R0e?)dZD3yxo;mXeOef?I;&bVkpVuwW`JEd;QPBhpn zpWX^(VQSg=r}SodWas@@CUZL9Xj+ID(~+H7|KqZ=7h?RAq`^`XOSN&!5) z5fM%M*W9%t{f9K2Y1ew;3qZSSBd#&pR$g5lsig?}J>vZZVOX7r^a0(b4c-qhRhusb zXR{0E5yJWBN#I=Vgbq>e!7RzNZVMhXZO%e-HwVes^u9t;iVS5l(~YO=KEmMHZ$(emgqm{#H41r>g=Nbf{ux+i+zjc_0wh$P`jXmqhiYr;IbOK68Bt- zrB+d$)MjLy&|x@KVgsCD?&v6|)3suY_QE%|Iy*q$9^MpVa znp^o&eL-A47sP?0dP>!xya#L1s`%nBdFp|MU#NC<4_-xczYtB>bJpp=BE>t3Mrz6` z+>R&eisA&V>T3FIA`QB`p4_RS7rVA}bKU0<{89N?Ef|fa_aLI#(Uowv9v6@o72+&A zneSG<1#`61_HSjQgNMxB6yQd9#5c^iyH7&Xz|I#7n`^BP^9B=XvhAO(3|(f9H zE+`JK$Fh|sZ#FXw-fS+wbMPMPn6J0niP9mRGXJZ@wLX7d5~25||aDJr22x02%qYd8dIAtSME zW+|_kIE&+7nx?xnXGJ=Q#g-NzXMq}G#K~^!cIovixSCYYh9%j1)ND}vVCw+tus(({ zzTa#+f#0Z`h_$g9HTFH3<%p8CoB0I?764@Y+JEst6VfZU+fEWnR-TyNAUwX-T#%XI zB|MN59eNH^{kJt5P=IEnvOQ&@U~l!3Lc8*gbn9bw#w_0u(90XUTaCKeHbewvQb{+} zcMPjp#q_e8YBlI;a#7vJCSuwPpi-yFY+6M*jg|8FJFuHcPchF#YC8*Hc|t3yZ_z3y z=~fXk`#U*ZD!6ZHo%XjEd~~JJRijq2Zc}ABk&mxAZv}8Y*!x zR!-3Jvhv6dz*a4j8si1u)zuWEDHuYbKfA;LsX;)Cp<$DDt*foWrdX-xUsmp3rGD5Y znHNC4a7sVbw*nJrX@PR2naxxadz2u>bW^=nISO7yCjBFT1PA9_GNnpo0V{=4t?|`g zjmrUXnT9yr3W>s2GJG7WwItid^{%$eDeS=}ya>tBmYD@kPWr8m3?Qkz+?IWJ2tPs7 zBfHqQx4uMiSR|~xIt2U7tlE zwN-j6E%8xcEHt6|JMnLyLGN_)z%fMDskxcgQw%>T=)qc4VAl^1I~=DmUSqd0xu)92 zwaQKswnxRs#EOLTXJo-&<71R&Fq#H=DNhZx#&CV3R z5jRWsqv-nc@K(8WJwe{Fqap7GH0gf(kj{<%O)5ui zn^4y{p3Wq60`XDoXgp6p$?kj~R-4@VQy^~95FsDvrRF7y_fI+qP+ff`jO$E?yYr&XT*C517 zX>WObAbyYnld;!C2}q9Hcnjsn!<|@q zz$7WX6K0WN3eDyn1DKtJy0idi$|$V_CLW|FQ)}${GsBRa`@uD+Bx7+{#3qS8Ig8?- z!5IVYY*Y$IW4s*ILBGhdoA(e}r_TeSj8!{jW5j`RtM zBFnr6asYEwBem!o5Xd+E2?esV^7q&c9*e1#7Sk~c=kz!WpRTcV5G}y6tZ&Rp3-%bB z{u4eq1g}_Pf~#dp3)^k+UG;ge2j}q}b}XG6l;Y-?ETW@XZDPA)ldae>sisXc10EcU z2BwW#*N16idyE=pnN)!O8-iwCLZ86oIe)DZaE+QdM5&D_ zZ@P$t9GeyyWX8<>fCvqXAu+QL~r`PGZzB{Ys6R#j7+DDQaa~ z8GwxwfK1Y@n#`zK&i;9?M*yR@-zuXf0@z+T|H-5qsaPC;$}XVMn2R$;#8hyM1ki(+ z3BX38H6kkkE3yg?#f{D;*=A8<=plHL>`XKjW;ktdaS-5wzk=h?S(r{`q`VsH^ms-+ z_YE&qDm=WoA|<-Y4loBI%EAh}qsshhLxgs!Co9ey!0h+{I*3|gi^{q$?#y4xT0tgSuAO`cd4@3v+-daVC; zoJedJ?WS)^1)bnv9>jrkGYobVi$6U1IUh$F_-tCuLGk!Jc8ju2agso>xm$UmC}&Oa z0t{9-maCMovr)Pap){)GT$SH=c1Ss{>@^^0mbHckZ^D*Eo=z|cOqX+?_eo|51l)5d znt0yvg?0&?lv{IYZ&bxi;qi9E2m%w;inz@$5$6N zotoLD$7dq%E}*sJIHdCN+iYWs-9~sxhZMh*MFIdB{{ohaCrrCyLILllumUadRdYGc zJ=Fx4iWG6abGZf-KocBu2h(91)=!6Qf4;9HuMfZ)2zzOPseF44&{mXXQ`!l=C283( zTUoj2H0Ex48MLmDqj;Vz?wN9I?S!*eq43lSjRH7#fztbxYXuHo$zwP44PzkaIu`P$woOL+x9G|wMDbWHd094h5 zH)F}fAqQ862q|8U3@HSZNRbA$vs;5w#swn>lFn9fU!m?|UEo6g%VxlWG#tlc6jA_x5DPj_82^!2~#l#SPSj zD)~oKAZ8^wpGSKS{E3DzUiOHkBeF+``;xL}3u;P{J)4nW?q;&Ro4+A@GBxV|u|-#$ zW34W9tYPK9ygu&`)=|1pguF^bfnC`FMn!ICmyF<=3vmI91;K1smf!#toc1iJxO3~a zq;z#;kE|^zt6_j>DcM8Sp0A)aWyG_mAj-(|AWf<%wj+MvAIah)TesxZpXrvQm<_v6 z0h)ph(0su-2xwu%3bL9aYEfnmK*qoC5tSFU9f+QSG0t|Ft1-J8QJ#rkR(hOyMU-Nf zVJ@ts___>pfm3X7oVma>SLjS`E-Zsj>k{SyvrK9(#1h`wA=6UkxmV~Xom);2vh z6Gcuv>TpHQDx%cJl<^{mU*N$3$oSQNn7b14 zwxsk^egYVyDZNTRlkU&ZUX6IFoasZ=;`)iPM$_#_L&&$FiZ)n$?uyS4;UIawOQe2O3>0_l7gA+4NR>$-RWjK-KdtN13Oia%mqljEW{TG z5`i!FtQT7)NKOD`e1%8uU4|gxbQ&i}1~g_rM95=e>wVY}dM@!*{Bfd_>xcBp{R^`7 zTSZ&J+)ta-we z-asfGafH`#;z%hD2wp|V44m9$W${~UG@vWw&O+1PWDg4Bii0V@6|5A_Ij_rZtLE2<$~BOz=^t}$9u(|PxW5y0j$Vg zJQR<;J;^!6@<{4<5{8@=Y1di*W0$TqCvo)>sB2>M+IA`WW->v-^eF|&2L>)d@tbtT z3q2KUch_~VMHbJZVaS%-DKvu1G2*X{7rqT5wm8;;zZ=>C!o5x!%= z{gya8jZI~Y2vDA|W4^882@^^CztR&{28CmCPZ+;k#1nSv#3d%sBf7KG|J6f=t`)Hy z;608jzG?=i99I+BcBEVbf<~62v@6yF)qT0H))S96(G=Rk>K*UfX8bnWm@?iJ;ujo_ z2$1nNn{?edsCi1K*){^cw9|~)uGDGvKvHVWSH3dGZ$_`uC7fm}*@m^xdfFfZp`t0< z`hkrracCWYb1?}6GPToe6(OFRN`?)4AUZOPNg5&<-y}}6dIJ5r7wB8zG+PU(O5XhX zi@FC~(Iv+8<%q5ZK#6S7pw@j~gPL4)HR-HroijqfxI)Muv%(&57J28C!Scjlet_KoO`5u9vMx zd)W|=s=RCrBC?qc>+)nW1?Rb7=B)6zUbX{EbqgnY*)l2il3q5xUewE03j8Bwd{pX| ztV?>hQ;nl+K+|3}zFfk~whSQSVUL8q4C9CtI?gz%)tG%9k)MgRcX_;Q$8hjAj=zw& z$;&i`Ixo{0;`AJE3^DEE#t_+y6OlD>eV)XC0mgGuW9WusmzXGXbx*wSJDLa_?+{i( zN#K-h^Z;R|@Kv)tkCE(ZjAD>Hb*~0ArDV&|)$aVZ&OK4GaX+mq+0yXal#?CCOE!MN zx)Mp_UCE#?Lc1K_92ZecwI5!LA?ZXG zC2cSg#AG%Y)2Fn-zWw4QCfb`iDCmd(oUB;eU{tLy!vLkuQCac98k25brcjL}4Xk;cj^Mrj+GZklEK4>k~;o$Xu^Q-I3BWX|W z%zI~27^hlig(&V=XRMV5E0bJqB}-?{oJn=&Wuhq&KOb4TQ9r>|u#R&kRbCYXq*5*c zpD&PCGHaY=r+n?#R?fU^fQ*05BVI28ld z%l$KO&16S5>)!c2W?bUO+=h1<@JLLP!rP?b{R81eF9}c4$CU84Xn6M#-g`XT1SRDM#DF$iVM1SlJr$lTl4~&>pfFRfVH&>=GiVKVFKJJ)Ur^b1D%i@| zFGvEeE|UfImAdEtc&)ChSTl>Sf=wj?w|g8@pOyWB1;7I|@EvEr;Ni>KFSvo8C~O9m zFeghwtgKlQI7?yS!`*&oaI0SUkngk;`Ksc!#5ecYO)4_Wl-L^_ABHA4(XxMP9oG8? zF%;}n<%_k{u2*L#p_CB&OKlb$%+vb`C7;?;D6v5fcu!_a0)HHr+C}#l_9A@l5_?&g zWl~lD>J*z8oXm~B@q}}2*4v*y<_(@*l9d{YdlYq8AH(LtKKwA-ogH0Er@=?N-k;e6*8I9$V(VNFGiv&{}R zw}Y{B$Xa=MNwx;>^Hm`$7wrJ-`HHJ zY&>U+;a}WFAu}gWjzUzs?yRjGI;h8LP)ykaE}YG-JP!8*C(w`3DHohbRN>ERFP~k4 zErvK$rPp%IP zdKGC>arK%qs6Bkg&1J+>o{;E~1A358C3gWO8TVQNp|^+gRkJw7i9~x(Vcg%pPZOTr zd6;#PorfD(N9xW)u~TH{At$GrKIEv1k+Z#YI4-E^OVp& z>4gUS!UK zO7_pUJW}{Av38c};XIX$j&v6cXo!_T8t22`(9-Te^t4WBcm4-)wuJVT|;jglD+iuHdpJEmx zn3ql9{CBq;lKp@~F^6KH;iN_ofC32e&$pWC`cf{cj)4rj@^)-CBs;eKI5(WeAdc$C zrF6SX07Y$Hd5%sq-%{Cb*jE87tgV>e+L*(Z-_+EKO{B#d)Wcu|iI2RSj&V7|&}iy#wi}9yc)6Pn z(~_Z96E+tPdNr$$l9QsTI+hs>s8*!wDJf3yw%c@Dt|*F%Hsu_4#%)h(0I9}LJFs!tKKl_2h)L)aGW-j&HLW?U?%8^%{jh=(>dw~%c6nl26KS_X zClhD##I1*A=qP(DpBD*=n*M@!YE2@7&i>eKbkI|=GY5Fat!zDvpcafa|7Z$yq>@L8 z-C`y1kXP2 z2*LWEVY?(XCW<-B%c^&{<1-+T?XAp~Eb2;s9{`$p<_zU1On% zu#(0CU$xMg%EMM3)PS(t!|?_=Cc{NHA9ew{G8Tk0N=!h~ug0(A0-V^VQwBI;l_dUm zc^VZ7a1wKw{(0e_kPYBm&CXZN5l{80D^*BkxBrO++?s!Qvz&`ziSNM6N4%*IY zh~Q&<(XiAcO}YuFaF#_*658;GldS=TT!EX7&4pv%U7pcywzzJ4(SsWH70Z}YfD#$f zpbmdYgDOh=bPntlIVP@`t;8WIdC(D?`N9PW9%M+tSAp(RGoO}-5_>Q0^-hUNgvBmh z<@HbKDqZie78VCk6*`%JE+Q*e~c;%q#8S10io z>sNT%@*BRZy}A{d$pALUjtO2T_LF#>{NTB+*GbsQBwi=xnbPa@Sg!7_iLzr3N_u1m zUp3`8vO}hkD?8eOf250#Ufq%pCLPwPvLgr3wCvyuhD7*?Bb<_SuVlvofQ+YoD2eVx zWrrFxA~{ZW^l8j0mqB*q&7$lm#3=9z0j#3wv!Qp=>vWp2wGt6>c^eHwmnl`K_KlY+ zOuM*LS%zM^gj8XcNu|o)J$H#Iv_*H!PuA;BmW_s5C-hi7EjsttJh>-$tJVS?5kU1s zy-i-H@>VfRS>zcG^NeH+nmdW@wvB|96hM3(CxAHIF3*5l8`};03UpH_fG)>d#c5== z?E-WqfJE#-068vPA_*q}&()^tSm9FbYS-?WxHfbZ!vvJ_ttm*{Svg^peuf5U9w_rUvJ_dB;8w@ zq_D*>Td}Na`nZ@a{@J8lA8%TalC)_tnR{yo08C|CwDMaUbJ%VC4bx(S#yXJ6{EyUS&f+cbMi15@Jb%L@jsWrIQOcC{I9EF(CQAQ4_Mpp?qMwP@LeV6W- ziGtxQfO`Z3Um+L>RLSP?Mnw}ak8I>)lWxO}NiR3{6kcN4pQJP1r?pvwda?qX{7_39T+Pi%{cEO#_J&4a9vkTf7@u*_Ba4XvqY!x31_E+HY*S&xzbp z!BseStJ^2n)dhPSaGn;`yUEYK8obYOZOOfC&Usp+!9xxI-LtgB;=l+ZRLnU}>sa1? zEHpg=S%sliM`hQ@saom;ty1tLb&A_o=E22>6BVh=-@nAnDAS$#E%;%!$?H`146~F)mH}}5 z`BG0)F5>&zPVn@7i7F+>Zi)FJzArLkB?FjE`@Tr@TA6fZz(n8I>{~SokO3Dvc1yf% z`q(Y{zG~Tq+dr=Xq*^2=fQ>6esN91wF$u#$jFoE%l#n7s9wEeCQ;DTFJrK$J0g*`> zBAblqPDB;Mpcev>sRa5-FVM^LeMy6-^nFDDRT%->@6$ctN+z-095TPCWLgO*kyRSh z$C6xsa>-P$v;HuuYlSkTW|YvdNJZ5PX#84T!1feKyo7rc6<>h=8FH+`UgaJQdC)HC z;T0a}SzDfyuGGBp>?I~_fvz~)Q*lz1ao{dPlp$OE8%eF=ibdI80GLXY?cujJ=CIrN zn=3UM>syl1U$Rmo&QB*C&j9HW_{-$6 zjHzNQfU3udF(zRwh~9*qgCcR}vMYXfOR|2&_MENt^EE__D_=A$5saR&7UfvWA+&$= zLVHUbYXRN%UnN5)u2_KO0!n1Q2DLUBK|Q$u%hy@|>$AFlauWB@si8DW+1EaqX(fa) zRph|^*dyc`Y7~cRa(HaIQ#z`r$y2eGM{ja|U0NP7Tl{TFU1DlS+z^A2-tMjHavgDV zNfL0x&B0$&_Ep*P8;-cMx)F~pO!gi<*v=*!@A+Tih${dPI^xD{$`z|mrWP}}``E)mjcB$L=GpIin&##ed->qW)Yls>skjafUkF(kgsIIhD} zZWwIbpn6%9bYWn+mqQ!eE~dQj>}FD7ElQ8v^tNOlyK&;p1GtUNy@#gxy?D9!R>2am zB<;N9i|(kTTt}Tsw6m`w^`z6gZt_;0feua^w+FG*3z#n&Fq`YBp8yEpHIcQNOyh4) z0%nx;gw2B3{a26jm$6R}+X}O}t#FlOmmP5RlWi9K=eKCHAWrts&FH{vOSI5H|L<=W z%!)Kcr=Dl( zL96QQy|Iq5Xf3XTd^L3v=N*i_ zdiD92eEXZvt+{%^g}Z}eb$^I;X9iE#jleSzdp{uE72IF_@3bLy5A4p2_Ox{|9t>B_K}D+HeuJ^ zn`9-6X#1uO-m+pkV#>r2`D@?U7 z1yTT;nF>G_@w!vRj0frvY5~|UJkTcf#%f-6#t_q zKC*!)4u9@Z&8Bh^GzC*t2v7C~MhYzSWcR9eyR$LCn*H(xTvGU>M;a<%YD4t~LhJI# z*2Eb^zO!;AlRWxMy^byD`g9Um=SCFlx#kI==2kx`tc?;ljcGFOOiRIXj>gh%<44F; zCTU!is8ASWgQI6f*6PY1;V2jyz=m2dg#np=}F@=@gS4VEwxU>P7YO7S%02kt_);Yr>bjWr*alRz0S1GS~DT( z?jN-?{tH4T&3Lva)^5ZGhT`A)&*^Da7p36eK?*LoU^Wh!p_68`ACogSnrVfHKnxkZ z#-_iakPMv^0dD&X&2T*Ss$qluvUvQ!MoN@n{?H6Lf2pi9iST4mx zovc)gb>bsVB9&jO!vVTPC88N_*^jA|suR|5Y%JY)YA?;|ZaW+IOOYtM&8^gTV#9vp zsY-mZGu#hlE7EG>UtOIcJs`Reb~cB0ENHjw29z+dJmNPSoAQpEp;kmSGAXp(jBdo8 zD<89toqyR^wb88F5*r2JAY5{0bb|xiinb!Yi&)#NIJR^Zuc0$1GJMy1{7r9TlbUMyCnTld|_);Z_{N=EtuJtE$P)KI5y}UJ+kk zr;tb9Po!H_+kK5Yki)FnY*n>dL%ymlR(P{n)oO;f2SXc;C+-F^&$D(rw50;~h%Cvp zt4_e5v=Zrvdu8Y254-z9^kli!*i-`rW&oO$@$Xlq?Yka-Zp^@+$g5PYq8tB-e>dL9 z4Dl|MigguRja!;87)|p~NrZ|q)ZfsavdA{@>qy##rdYWdZn3LcDtgl112lRv zR`r!d`gAd}mZ}!3@nnU0jhSyY9*w^?!Y0jCwX{PsVC%~wg@kv#f@k#ruQ`KPV@mRe zC1i>h-16RzgvzX82=~s_`S^X^Fsd?gF}ojr0sr??$yrK+7TgoObmleQ>Fd<#8~_vP zcd;xpLoIf+rMl-6{kO1npEywjY*4yt10D};jK2#wqq2uKVl42tYJ(LzWeWv^3IN5b zI$3R|o8=jvGG~W%8NZYn-{RWTI&K(WN8%lzHmgbqI7|W#_Syc!W_Yu)>7$TCvBoW# z#-_goDS_EPE6ngF+kXbL z#}{rg!_PFgV=`HxoibBe)_h1!RTxOo4OY0tiaujCZbMTt4x^bF#}>j2I&C&?)6>(! zK!>-X@VQQ-{?Aom7OmQ(OB=Tqrx~|yKqs?5Ge+#)iBxec*0tv3o+?4nk^c6*8`)sKYcXYTEp5!jGfkjVo z#v`0=OU^0o65VWvHkU<)kXyLR$0Xf9o?zFq%%7_=n2in-RzieWB$fh$M_u_?Wu1zh z9Imce`uHjKg%z4(Jyc{hW?E4{Oq0q$b`K;2(r>Z-Ka(G`gGa0vjM7dc{IXdZm}52t zHXwaP`ikk1ji~uTGz%+oJMk;Bi;qpj=KSv{r2}S3V6GK{DQ{)QMsUx!5!&C}4j_I^ z5X4)=?npB>HQ(lB-x25%NY6#D}NM~-n{ zfAFUDGvp)gK!qy3V)~xVs2f49Ws$waq@9l~L?@!qv7Qmsr3OGjOQ=E__q|+v#&|#2 z)cc`_J=|fcT=BnvPKfubwgCc+;65u{w4i;VvA7SNlp~5{^JW9M^X+;xD$_2hxYn9& zJo^Hg-9Wz#t{_PZRtDx8o7STqs{`q4b-zjHq33#u<)=JluF~;^V*rNUvS+ zb9*8NWsw1bJL$rV2LTY62CV7UmcTQp&(~)>TNw!0{^AurXV8h0Z@=9X*op6Dky9uf z{7GcUg<*tWil2qY$eNWbVHZIU$f~I3WuCphk;pL1{2}sYvdk->!gw2s#ky9S83Ajr z438DcvTir)(Y^PlTWNN~oilvHcJ>-zm|>L!a*Sv9*+o6Zvt#xegw_-Ud?UUy!8h<_ ztr7mEuhVP@WZC}N!Jhynvo=s@)dn(xtjI2S8-5oWrKf}4ApJ%IMKW+YQb{1o>VQ&c z%^sYo`fR~IAv=t476voZu)jiO=NUoHUXo4(N^YKEJ(T710b-7w(QiE43988Sallyy z1VCmlB+4mM1~+pgcRzZ4J|8mfKmIL%-iqO7E)2BF2hVQ-vlQxlUt_-6x?5|6IEwkX z#LZ)uEX)83!555hfBY|yAN}bqV&99;hpli{d5!g9T+-(|7AZy9;E_m~3j#d?@`>k5 z;Q$BYYI`wC_1b0VISd1%ci*qkd}p#iD`9Y8EdF@ ztBD^<5Id>Bkb$H;vMv;29%)%qj?AR+SzG%Fx7prx9`W z1_v2K9Q=b|{0dlAV2W)?#>ggY_Ni*;!_FXpmXjxPI~xQs%q-DerNi_yvs1Uv1y z_ZZpr;9f&?eQ*(jt4*aF#Me$*vLvWH2(dp z^t4~p2CzjpvWoBDaNZ$;&_;05k^q&o>sm1b$cKZ))YQRK|rVk zROA9;r8ojJ=sN`ANjzzI0#LUb-JTZ?8PeuohM=Dq1@dpMcxErD%-wj#akLKMffU`4Qj-|O(5 z7Khu5iToLm`KTXx(*|#!0%;{~1@8@na$>f|8+^#^D&iunU?cPNtFE6boi!I)y>!+x z-C2t~o%K<--epc_xuA4+Z6?T1>uRya26XRr`sx}qphOy=dwl{RPZKr~*4vY?*aT~~ zH9aU&)v%w#!iE)|nla>0aiUMd*gi()T$E-}F^cap}ED8jV3y8ZiC=`q^?!A5?_y?o(55}`^ z_=bI`(Dz1gNT7tfgTqF+hYDCD(aU};Q*;IYU?vdD0dMi6f*kzLw(m{P>nNsJu|oN_ zzYkmsEHVHktcU@d&Wwr2O<2q&0R&W(U8oPtSLu)?yV!4ei2eoVD+w&S7rju4|I5(w zQdIHCigddY{34vsAYi*RP*z^?9LJy>*ISkZR+dHf5Wsid&5nP>x*A3NV4e;m%CReN zO1B;=u>DzfK_>2lyE(6a5x&i}9?A#CxpwJKhE0FKu76`##CgdJ!$=O;wMT}LYd)F* z3NETBt1e%PX@lNCmAS+pw?Lwwmd9^6$IdPgn+nHVmIO-kfd4`?ptKz8AkiXbUasaP zew6}ZZ3TWTQ$lhtaF4X}(ZyCAUCvglvXv6((0(DZ=U<4T$8wW!fDNY>tZtTD`4=o# z2yRJ7aq~*p-5#Ve0>CMEp_v^>qEx6s&H0Z16?UXJnf0kSn270ys}(^`%Wq32^*Y=0*wLJ3K&2y@J7YfZfD z^W$);L?;PSm72g&MsaBT5CJJ&bduP_iOs3UsA|+&(__Qw>+iQ30@;hz>qg`SW)5p+xjI~{xotpf6E!9(qav~-e(on2^V2duY) zTjae=+9cHj>P1J|AkVIZQMgn{{qc2?AsEyW~t2?O(P8#<{>W_ID3WV`K#Km#J` z9O7tD#8HDeGbwQZOh3UyhS&jT`4}ed=N`Et8mTUeyvbruePXs8fJz1*nRvt>6?{r!4bV2Cf9i@{S3hw?F2YeA4JDgp&KT)wKN3x* zDX;^L6dqNEE)^JP~? zlaG~UvDkem7VBDu+Dg)+^Hpt-EDk$$+f@b{XrShm!!kD!!2%YU7R{f!$QH4%SZXdy zoxGkkVW|)LZ7AOg7lI}mpx30CGgH)2IG-~Dpv)E1%OcA;ra#9r@Z((!3vm=y@fpa9 zQP1meCDFZrb%qOx=iE2ETuA&2-t7AKrcJV*5Ia@oEGC?^K5qMeq!ts7LwEKrCM^9q z7ZVojYsR(b#{Gxv3X~0`3@Sc*YFadFnbxmQtPt%LJFj#cIp2z4*xf;U$z%Rq^XK_8J)63Oe!9H)MqPW`W; zzg^E;2wwAC=5w6-t#(zbcIqD}W8tH(r8xETk;Y8%PD%HR^M0TrQiyaq?_0~`t?CQ3 z>FMHMFUBX5q!hE%#|hp#R@J7e;@XyH87tP&dx^Q%4c)jSF%u=QhD1g%_?(b-;@wDc8oYt&;-4Lgohr6MnPQJW zHHK6y@hNvK^oco`<)sit;jFx{AClG&shf$vbCH^jzXkZ84{4oi76c%GX@K~x7clLi zPvcWSCjNH;6dZJ}UGxjq3XLEi7R;Qy^O%+kUi1M{-iXq)d(QX6z@WeJ0%uuu<}nJr`IO0KGyqHXjgz9dn>jedRdTSB`Ui;GZ|Dxb4b*B?|B7YB{kbVaDxbt-qdHMLMV)V3#Ol!#;^P7xj zvTkcWhehdL<}WsMYeOra7rCDXG6b!o0?_vVvnaFDGYL#)Y38@pGqEs=m#c;$3XCuQ2Hht@qNlkZUl-sN zVTSmHs5fK~fyEX6JxnS$(|hg;q#b|^dCv(Yt|Y?7Zf0mrS!5$hsI2AjYa|1QO%Sk~ z2L$M5WC5CKZnj@R4}ns_Y{brPmILG?E#tE7RoQTR6e_Zt`NT50r@F7I4CCcp0df7Q ze47JJ=a$%oImT08!g80L(MHNaOas>L<3FwtR?&QJeO+t}Gx=fUa53j83LMqgt5{&p zZePIlxlTyNPE3lDPE3lD&iq(=X0W5~*Y;iM!J)bjsr*)VPxCOE#A@=e6z%kbA2)t7 znWTJJR`P(?J7X6R74bEk=imef5wG1G{P_DdYPr@y+>#a>LC*I}PETOQh3J-enw!(D z3x9(0VLhXfgevXc+WDPzL%%zDH2|ii>&B_nTQavymiy-y_7qo;0DlW$%v-i~)ys;9!m7$a@q33bD>< zsLL?s8L=KX)an@H6clKyKcK*%N!PLUHV1*#*!~X8hGIB_)7ezU9w7{fTgrEH$kD48 zR%gcF_cHamtez0pqtc+;J@r1i`VKm4o#=)I?WUc9{Frk4tR-{v7!q~W0BY)K&PFo$ zPnv0`;TIGe>}x;9?kCpR%htvWR`_JB;kh@b8BMjY4!FF(fQ`ePyqj!_a+9-|~!evFc!{#YTNrF~4V?PL1NKBhPHA-%R2|6j)cQ}~b7 zct2QvEhWZEN{j|2F%BC~)Dxqs?UqDYT7t4_d~pBjkE_;s8)B{V!;2SfA)fHm*JdDK zYi7nl#)F^omX_r)uDZ6OyDvmr1m#e zA2Q5}O4|6r&givlen8Izdhf!-J{d&cEbFTKy#h6uq4e{tZwiTpo;hPY)a6p#-FCsT zAU5VdWkT}<1Vx5tcn<>(BEW=KGXw&n*Z3j@=NY5C-CB}sug6*=BJ&@*YKXH=I0@vA z1P@}~cEoS>4ILgsEi(|d_SEa7Tyl&XXQFqP4 zSJ8^y&HL71qbdR>frx+9S)}og-W?pN`yHmZgdna%-)A3!f^i5VvHTF;RvrS~K8)^t z7?Fh!BeL*eMiwH7f?4J<%RFRJk%ccH8fk5M@VxQFy+AT=C^nKF%~)_@@B`Qc(QqDh zBghQAP{uF?v@4<6HA8H!H&eOzSD=t*gM>5A-&^c;}_+`28{aaTG2UgK!p=}wijdPgt6&Y zT;V_H8bJq9$5nCkesgAF4+kaSWHI;n@9)Wc5dK_^X!mh3?%AhC zp>BZ&1h7jA-jF^gZU!4y!idCU z;hDq6Q#oM5VCjMtjLOEijMkR{0kKXpK)z8^DvkXHaaF_i{W4r@n4vqb2NJ*~XGoZt zYnJph6IYqYA`i^1>=3lmk`I3+ikYHW`m47PQc z0kGS8LQUWrPzD%7ipxUyv`hGuEpCe9ze{l*YmBEEPd!CNBh<8DpVfCBGWPY8i1fps za~Qrq5>2LPmf5(;ZkUyh=xz|FozY{4HX`0UbTU@75dfxP4gD^==zK67ulsGRadVo{ z^l`uhSO1;T^kQRvE8K*Zuj~coTUZoU0j^YxTjD$JRyK5Fi!D9EU|Roi#E6@X&scAk zS;cG3@PK{KF#K#V!Z#bwN;B;6Gj`>);fnHj5$-#I>SXm;13+1U5Sz;U=2|oo)rwl< z7(V~dON^l%wT+oC`|ZsT6IeR5D(RT6msxF%01F4(qVn1<_U`*AMwnN%>Gq`LJB%LrU||j&8IA z8qd61Xgu?li^c;L`2{vYjGYpOPQ%hE#bA)ZiKQc|E**1Q7bDr)%8$1Hkk!Ulw1a-R z2f*l@SVmAHiNP8OMw^UHpWxtzS}?NVCZ*7@PkM)~X3i5|&)^Jry_j?ubOIG)9gG$; zbQGcr{xNKD2z9A8VyiSNk%We2}^vHXh_w%Ekj^ z;kJa+D(g&SoxP0mE<#4RHV2PoB#j7RtR;I~RtP|%_Yxo)6agK~j?BTYwV;LBYat?M zvdrvdg|YTx?1X&cb8Km-%K~!f!~4^*L-Jn8_(LXqlKx>cd;tE{o=_kA5)D98Z2t%y ztIj0Tpl?I1k;@i|fMumjA3ugo!iJ=2OVVUZ8+OUI(2y)NlI&QrO>EgF zw)`W;fCDqgX(Ssg*-oT=f6krJFPpSY``y=m|IldWKKHpl&OP_s^ZVu(7#jS{H8_I? zBcK7`Of=BKQsIsv0idt4Msd+`sUCOy-vLt3QjQE~a4tGK(94?k&FdIfdAooA{q3s%`e zG%4KEx*w?egcp0YbiC)ab0!XkCgA<9PMT!H+S|>6>24t=m4y%0;%b$aP!z+HCsW z?Vv7Cf=IAYRI(OOH~Kt1x`ooZHRB=N{7?M-%8R}J8Slc^0mv^aC%8Q&3wfd} z-2P}C7uZ^lPC_MAYt^VN(+6aE&Q{JYQw5MZ^D-TmWtn9{Q}JHU z$0*kVSZS3tVoli{fc`V(lnCgP%(k#BJLM_97|5n3dj=QbcYlCuko0bLgI4b7xaIUQ zO)@6yr%ZL#yS@Y!M|~SU{j}~D@`BxN_s2o0eCU8fBsiV=Z{ZF~7=&+n8ojV(65hnO zNF+oO_x@qhjBYR(%R`i}d1jae(F@E+;=dSw7 z(&OoMP*Q#OjfPQh9|d0Q6yJJ&2?sKr{-8YZH>XD@?ce46>zN97ebnz2bTL5r(XzR~^j+EFA0@U{SfE#8uvEoPeAPJjTs z?Z*|QSpQhIMdMw%@B_JA`~B)cE*Vw*&92TKQ>a5Lz4KY)4ShQZzjDjRYIjeO(4@gG%@AE*`onPxs& zp}O6Zgvz&UHX`0ntf6~s?{L<5u>)T01zx7=h;IY%VjJDtUX0_tYqzjY`jwaTLwig= zPy}>IRb@Y5Xu5XCFi~WF??I>XBPyX5Xhtd7%mIob=0Yqej(r9{upklbb)e&Yz(Ygt zJP_K${!`{c&ZT|ndoc9Voyqm!(AqJ>q4W{0TlyoT_G{l8 zfYEqoHVs*)C7PHh@@Y=t^gYL{?z{PiYVzS4m3@*Qwx;PR8tgd{CMUrTBw8fdSAK~M zoxvi6|C+&QPhS|8ZcN(J9Ub|8tvwZ5I`b~4{ddxIv2*lL&vdx!T7M8}?hd{?cucw|j+-97Ek%QQZE7TO2&0M#ow6VfnAG8)>LtJy8@jf5^Q-!_^t$I^U zeU@tIM+d_X3dbZ9znQ*;GFmzGh_hD`PttRwLMF>)!42q+!``3#4Rz(ycze{ZFYud+ zynhIv^=UMLXDwfSPIUT^xdO>SWaWxmZcP;uf!?#RA>*Opp0zblJ6qvVQoN4dJpZL@ z@I6@gQnvnEhfaUi);OoZ8XD}`*qG_jLL(L@i%WuvlEIv-8Tw##xSi@|&L9z_zRGog zu|7F)b`F-oYUe6-Cr@ro{RL%K^_E*)wYINQp85&JxT zUved8ikfNd{!F!vGbQbrlD?T2Kc0E9k4-XDtu|BbxtWrsnUZH`O5T%s@x{3>MlyxZ zsW5AYoA{oacxtBPXPFW#bN5&KyNT^JSDMZe8Fc2EX%44amYGPspgfhj#+8qr?X53` zHd{?PMk!?agZPLm}amRXCuhrgk^&zSOf$~RfA^n|lePx;SS-_M6d+0m_4 zYzpzdOetjC2z4Ir-RyMfgi$A-m(t6>4_`mNi)O9<cpCy72mF`Mnu-z5mf zT!L;=(VLkWd_pK@h8efGZlQ@SGc4`6)uE#Awn4=vzcv+Al_#HnK`V!K{JtX4(Yy%u z_*Tf^Wk|A|2N;roosu3{W8hM+?WO{fEgT}}DQ!##wuvf+NI%Wbq#-^o_-n-UVYl0) zPS3W1$@8Pz` zIRwc5F{#tzm-@*0F&|+*QsGa*3T~{DHDV_nnIdHc-T1p9H=Rflleib4k@lY#O0>%=(dDcXWMoJPB{~mP?(QJwwE$1Unc;@DxX$7-|GpU1yV!J(C*C&$am#w}?cX*)Pe1b_&>(M} zK&ndbx8^9J1%o+EQ+X)X-^qz&NK&mS-B>bf(7T#~xdy$xBsk=csxpX?~TzxA>DHVwgYF6)j`@;U!tXU+WMAEinYX)(x4d5nW#^&`T2y zgOls*U^D8dwOW`Q#u3rT8*QNR?HW?6)Dm>+rlDcPZ5XXKj0kgVZrm2-GrmppYSj$p ztEJJ~GNML}D6SE;W=4emnStCFV*{1Zky{CX$X0hNf#lO10Z?uw;Qx2C68FVy)@Or*`?!sR+XW^BY&wLSNWyu)0ILiAmwal!vj9Rw7U&(?j^NtLV(fE+9 z+K{c30uq>hXA&ut+u2IThh8AK{P%jh_(;eQV+4PrxBm5-5BK& z#K+liMVbOUG~Su}MT&vc6Y%BbBXj@mK9)99Qn%~vl0^m}HV4U_zyaW=%r{-5=HQz;Vg zFE(c_lRH-zSO&ZBc2R@AN?cZ&hgSWQNELrl4?~=A=-UdJ+5?%wqa&8Uqa)@#IzYL@ z{Jp)~!|>aZsme{t8_l+_HZmjuyFW{YG(zZ4zxRb&PD4?iD=yAZo*(mN?j)b*_uNVT zcYgEwPM-!>43|1B1^pOV3sHE-7St6N+N4D-WDUqKfCbpHidhtF#zw$A<+&1T)jZqx zXkRT%SCn;bQ58H~GVYKY;MSL;%J2`nfO?bDcRAXjFly+=}7sc;o_f$CgVp9^#}7wMx|=W`5mJm<5Jp&tRqF#fPk89dP#gS^mgiTKvM-~HU_{;m+5 zXx)IQMB{*{M0~*Zr<6p6bpxUXjRT?v@d2nob6DOwb(`3q&5fHxU*ns!KjBE~TB7~4>7idTTHC3}rI?6sLbqwiKIc}V#?JiMOS5Hf- z)q||u!6t0hmdqr?F>WSvj9#c?at3oVe2v(l&S!=!m-v2Ak zvcCiig;l^R4$Y zop3ui7Oz{ZFct1>hdcAuzhw?}#SBa*q&9-7uZ*MU8Q~$`zB<@$KP%-%XL# zI*DHRYZCo(j!S=c=B)Eg5gAmCle?sp+>EwKO8XJ%`zr^Y)oyX}jWHx9*lXtV1p6IJ zH&>brq(FfCViN2FPTV#{PU((B2UXUzZ<1O6$U>lUGG17h;F8Bz?H-oopkzAZ_V#e>QAr|S$gEuC!HgxPy~{!`lLe8UZ#&K zeN+qXo!Emj>XS2}&gbN~erD83{X3z~)3}7sS!B}*8R~rPJ--fhYBYuAn!<0t{|u;e zF8-NwS{3RXNIl_NoJE}j|L&->7boohBdAj&f8@7CodclG#~1(RsH5bNb5W;G&~DI2 zqduAi_Yd_L>Oh`MFzLl<+>F5403NfPi*U&x@2&qfo50xb2ieu7-F+F*``ah>E=6ej zzBUQF()9Y?&6_Gux{Znf$7qbP;YVgymB`i3zSQc=ZH~NWxbJtAly+|PrzT!^4(-667Wvisod*S5@QYPy4P`i-e2uCc&8b{c|5%Ne)s`Yy2;*@yxtKEr+> z4@}UzoM%*#V?m}0mt=EQZeHp-R|VziAj3jTVXi$dPdP_mf>IB8PIWp(a#2!b-8_J> zG384c->cS0tBYE}hH&1Xe_u&yH;Giug5d%P`;*VS$)4st-ohX3<}ElKB|D!yub=6; zl-NGbnv*0b^R{p-VUsl*DAZ4VN{9i6Gv242Y#p%xB>CP8|+V7Gc;938=yui%=D}$hj zepj>=?ZbmEPajb}0`oKh4Tq>b(vbRNqeE4G_jh}yLtQN{fQwv(+D8p-PqG4;py}m@ z0y{p5oBmxUhlR9F!}$8QT_D=?d75M<5bbGR%hXOiXcZz0ruFR1v>w-tzNL>R)ZP#B zXQa(XI4F%>yIGFInT7U;q!#afc2@s`D35c4t*=GVuwYtWi=wHsD4Ir#qKPYtra8Qa z4{g~VYm(i=(F?0Z{AT^DB(Oy5{y)Rdug~CT4O_!x*6b9XZ)eH;`wDD2>omL0 zb()ctYf?ZqK6g?ywO|=D*hyB~C$)m#)yLCX#$(=@u=BaO*tz(h!_ET@sRO^IW=_XW z@f0L_oP(Vs3$gQA4P)w?8SIQ2cIvaCZQ~s5eAOx}#Lnj&b~3Fo&FD>iOsc(NH!YE& zo3m2UxA5|vi=73g1)0$=Ta?%T3H8AvhE`2Dqq28$-+A%|3Y>7-nc{ZZ(OwZA}Fm3 zV}^c8g_EV9jDI)1ihdgSpzB6IrTR7ciRf$Jwe9ekKO_CLohOmNuYH0m2fUu{C&|?G z*Ay7;1`T=S6I>^*8EyG6r#~4NoT;R5^+g=A^R%)fqSlFM`R3eabNv*SBD}zRcV_2WMZsLn>_w`8`gvCM{BF9%i|9U~9C91N7DsFi< z*ur{ie1MJPq#~&@LhQBjniTWz?-;Coh{ri-nX)~*Ww-t({O*Um*gH)fdj~d^clK;@ z>R9yhJ36j(GYIY!euM{SWmKDwX<;G7+N@_~kCHHkwCrXjJ-QdWQp^SxwXFUpyc>Kc zav;X(&y;nRobk+Hky*r+7x;UTKd|CA!2d`5T0Gt|_}>cOl%dZ+!k8a-)I5I=^MgFw zUbxr3!$|0hZEii)Ito8Tt!F&@cbFM(6jO=ga1BiJ*u?A|CL~iaM)AYS__&Z!%vQ>> zibbxHR!gj3mhVHzH%4vs9{~#chFE;J@y^Q3*JCayguh(K53b~cfI9|OwPos0-B}RM zQKR~SZk+42_`(bS6{U0b1roENS;)L__52q=;|$_nZEA&%i(O0{9(xfwtF(X>Z~gb* zk|J@Ew!t2TSYty}T2~_E)_#runa(;lGQiZ9cNwofGn$+^75Z*VeaAiaYoDGQde?I@ z+;y)%z!vMyy4AsB%=(|oOK$*Qzj|yqwl)fT8o&jW_p01`safy71@C!1ckXBK^{M&q zrawk0PI>Zl{HCKJ>APN5k?N(-evPj?(^vh>{{8W*nbi7tIS%kdj;=NSrlmVGy$YLQ zlrE~-BWhkFc8TvrJp*ApI$x2)>ou=ixV2Wp`Oh9rUqum}zpPn&)Zcq=ZoWg5eVaLAiq4fXaEn4b+A}8@4 z|IuFxjq3Y2CXIrkC%&j=koeO@tmYe|B*~vsK~@a+1RadZE1%J)_k|xSqRmAjHUZD5 z3xqSLv>rChPK{;O%qWr2~DI^PuNGykt7KM zD%+@#ZA2qG$dJJHd4u6!;JcN!MZ@D_lR^Cc3o^dX*^Ln+4FiXx&>3jg-#@&KP;prw1S%n zPKF+ppyxaQ$V^3 zNr?0Q%-he{+t$9`7LI_Zb3i-#p3`fB)&#(1p+D|h4`e&;`RUIY%JY%}l$fh(A~YC! zUK25ZXRvq&%kd2Lbgx{ni-(}>2LDkhm=%nND>iy@y`gB)$)2ih#$D~CZoQq ztR8Hi*fjv-AVfM!tsb*8F6#bEI_cNyKwos z{cTp~@V{VnZcojw&f&LRo!_O_yw%B)`v0mE(H)LEbSiF6Ck_iq()VyU@@wD~`}dce zp`r{7D1*|MWgW@RNc1n9eL4rJME)K+r18oCEhI9kVa{^n=|A9!_V!o6o}c{d&*H-) z3(n%>=^Yg5EM_|Oe09#fB1`ZUpuIK$Xb;;S-s7m!c%?a0dOcU|p}J}M4d+!;!*%DI zWxYzDM->2c^e2L>tO<*{|3XyhGmo6XzkN1eB9|}0i{HFy_R6LI@TV@|SS}Wy zeON5|jYYGbPWMwV*VE|_Q~^&X9rws?$TAsEw@Z`Vc)HZ?6Sc(}r$;zeFQ<fpO>g#`gvoh|feqHC)HNPE+`7eZYfe8?SmUl}j5he#tZ<;I9X=R!uKtuM5ZavDv1>_uE2S#GBXr~td7Wjf2+&Eqy9 z|5_K}Xs)_l@?$CNGC$mQdELf;0SZ;XCbqPjJHcyU&rfK>`Sg<3hUy7(*fsauIR0SN z6i)uwYL)Xz-WzKaXye4or#0$whfwjSx;ssx9^ZwaTloXo4ME|<=HjTF5QU>kWG1)6 zxM0x|5mBNV;-g{e=vjuCGn&6V(8?v?%xjAYL(BA0K7(v+S1uAx2_=!Q$f3Yu8aNN} zMZA%49ZZ|+i2LvB;pX&77nhD9KZ`G(w*hBVC`=s!z(kpJe8|79nB+6eG|$~pb-`SD z&W+i?kX{U{YTqEO&qDk7_Z9eL_{y058+~w&{eieBrE!lkhO?FdAsNf>C&}mkf-}n@ zLnFMivK%H#Sb~n>M?U0Ju$UHA+CZnA)JX~cJG#7#whCo0W| zzz8f)_Y@`%G~Lp9t=xngcn3!mxe5QR*1LB0_5XW)gnQ?XbV0oO|6%`NL9%j}^A9%o z13)6^9Q;r758j1}r#sJ9`evPq+yb4=^z_lWrzQ)1wVuyg=qqiZ{iaOo&NJAFkbpBt)@DRXF9|lWQ%i&daT!u5Eqw; zd*JG|U320ds@VtbCYgKq)|Sx6y?ms;&!I9yOJ{3!slo&LSgTrJ(h0q>L3?>CV7C=M zOUKci6@CjMGIuNgOyb^#Ql!?boACy=bHP%vJKPKhh3T{4-?wu!-Ugd9laa##nd1kB zX`VV8t>>KVYC~`DX1u|<8E>klc9GyFu6vP`=^HR9Zmh`0tM=&#O@EEk$3Vjoq)><1 zFxCRXSaF|{k@g{>)M9|v&{m_b7RI_V^|L=&7_#~;o~EvNNcOVUY(G2G@6?&LGkq62 z6&-7H&YOgtVT0ik`pF^i^}D=3-IDt`L8-926w$#Ph zHijs$%sA4OSR8F z*{|JBLtLImy(Arp>d4uSTOqvlpS6NwOm^HKg@OlK&VxMC5W!JY1QixNOitx8f4u*- zvqcj4QLZ21&=_B<_4O?KS`}3M$851OD=&uc00A3^Cxggk{KlW}svUoPwzsyNAq91p zO;_&q9u8}GJS*KwjR+Z-7o(~_fN213Bk0NC1X4tY#aaP@y@hK)GQj8ZkRX0p?)8kU#9Q+%=t=rJc@CL# zVAPeYXp53Fawpy59VZ!5%zuZnwec-tsQ+hRi1K50@|F-?=w0xc3&*BeGyb`CH2usaHHz(y(4#z57Byc zP`ov?FR0iSI!bvl?<)s(1%Ofd@jS*=0-y@W1uT9%6Q@5x_Ni!{?!dijNL%Hn?_i4D zwouK;AMS=)0jC0X$UjnU!q79SAcb>xk=dWU*pAR{`pXNdSpR~Z45XZ{W6UUw&nHQ^ zgW?})iWB?s9S_CX%j7{1O-<~j<4*_~J~0N8Xc!JTJ<8@Fr^k9k?@m$g?nBgjgBGhp zQcyb#wc4{7YPIhhq4s^l)ILe=#a7#)snwoEQ>*=-hN%6YIGI{rp>}a-Dg;nz|8tX- zihO9dcV{xDM>n%dOTPA~I;c2GvQg*FF)RO*}LtKWvcVZte7jcPSSfs8_Gia$Zg28vt zyG)CBeGtE7nj624dTY+*tW6(t#QMbyvHsz`M(;(&|Ivtb0asKm2cw7l9sO@yu4@t( z?>NB%miQO=TP$yXkfWe`#WW z5FQ5t4MFh^Hq6Ume1o_0vhJ{hv!@|#wD7o|ot1e8<327J-o0fww6#t(42Dsq*x&_hYA%^fobRqV15_<+Z&s&-s~}4?@%I)4lR}s0v`|h9Iusrh%7e{FqpOAVBR#L4GqGPMQfLJEm)nHsWr(G!hBJa7k{g6lsNp zie3Wp6`vavxXrUK=&GFLj)EFC5f88CVVM_nE!FN=sa>=(yNf=B_9OaHNnv!j)`-!eWog1eLYO%>x;uc>{xPAlLpfZ%re3 zPYDso@ah-pLP(CQAuR?aKzA9FNt7&}*iYu#iG#dT4*r7;x`Mv8XyPT!Hw5nUMiEXA zES*4DH(}eLZe%hvextZ;Zlfw+^_s0QcRgIw|4Im~2V->0f{1gJEjT55{BGDE<5>(l zJ9Hw$YUK59rlUG<{Vxrg)pOiLhtV2o`^jZ)dO&VayI3oBf z4oxPxjflkpOnKm{u3IQ3!-gnA+;F-egQRr>lOZJU7H-KS&98|{X=Z(7x zLu~+f?TP@pvw!@(799_W`r@YKM*Fk0zU#4=M*E&PA*9w9zD{H2V zyY=|a#gu%HYkHwm^l}j>U2slNb#VsKi_hV4Gw9uTlwH#j7u(ak#n4>Ue~aoRs?x~A zR=WYt!1L6P(W(?r_vrI50&_TyO zPXNg=4xAWptqygABGI}{lOZIsmO4vY=0Ga+V@k`f0}fTZwT#Og>l~lrt@#35Vf0j0UiBDz*pMy^()~5XcjbOUWkCmVqu#nlRS^!P9{`3+Uov_b+6RtZ zokTS^&EUfv3-r-A1@)1H+gt#%nO|T|#IJ*TVISR%v1DN`Ozt|7=S)}L+6Mp^tcExY zL#l2y6W>NN#Bhruwr>;g5*D{zyp3ffNhhBuUieIyuna|OL9^WQ27gCcvtp4qLjC!) zgn!NGe7q&axUEn~l&(UmDN<6ut*agx{ZI4zmoP3icUzu>@gfW{>RV*h;iok(R`}vMVNZ>8ECXWY@LTcHi@wt99_71T{hf zqoYgrk3NAk+(?eNQdo-gF20C0-N$njrTED^{?xW4ls2dsfH_Ty?;HR{;DAB87#L_w z$1pp`af{86D=;KDoBu(vOZ?>S>?y&Z&t{AmwnV^|_fo}?s7P>cUgdV~F{Q*=`E`lS z2@p|KrG(yMrKkACbvA`C!&vv(^g+cG4~jL6)isc5q8f~K2n&lDn7aT*GN9wFq>69| zCRIcMZWe>9QZytQE%`}2Taleb5Lczd_SXIvhhoA)HEO6Pf(k+8g>1vc%4ySTIc-Q+ zEtIpIHgU^o(`q?w+AXI|LOE?tM+Z3n=GGI2b01m~2`h9c#&nFQxL zz`0*HATL&Y5*#Fhbxg^#V>Xz7Tc=O5Y?`z|i6ggQb*T<-@h&B-2*3h#vb+?`peB?v zzu=UT?WanS+#PZjYcaV3nqz>(=;tXSDKL85#*bo67DL*ANi=s2%KS;Nv2 z(ZSU`y=rN655Je`clysWDEnJf0yl#S#}^%3x;fNYB=j|zMl!K<3$S>6Tg-x2*byS5 z1mg#NX8FV2I+Z(%7#0Q$i!7F6Qd{qyXscqU3r0 zl*S-jl;?_YdWzzR;V&1CUOdgC3?3J(UYd-QEIkhGG?|RCq4W_+s~d-ywL~VauRLa? z{|Hs0enjW4E|vms+~FA{E}!-%=>t#Gq98GmH?fHjo1DZS)2>=IlI~7lr)IF$8;^-p z#*cBX6*e9deT*Li30n$K1h&K{gq3y{QmOSAyjHaR7)V^$daRt!_G8u5YMsyv?GuzV zW1DOK5kfve2HzZwzkSbMjEi4w1K;L6A&{sXZUF-kIh74z*K%ZF#R0pj%&qPU> zgE+5ancyu*XNKbQ7K8)X z6ZD$Fx%krDpzEc~nVh%>BB9H;P_v=SaIH0-q%~50K|Ko#P71$Hf>bSyrzmKNpQ5Q* z1Usqj9j$CV2~ridi;}jqp3*VeehPHRAehlYB}rb;A82)w6WDq?y$g{=PG#%h?HYZa z#W@|HSdzSs4=|&=pm>Y1H^mN)x7(fB0@?-x+CU!1iUS%Av33QaF%T%c1;mSn#{Z*G zfUglzxJe<nj_3sB8yZ{gf0Tc@ZWUgy+8MVSF{==7-aJ@2)P33Uf!t147vI%6b@glX0vc(RgqFBc&8ZcHUWAQ^ zaj$nWi`1cU4ZZqyc-IXymWXC+Vo0#U%3pZ(zv%sWr)VuraMK6#R#VvuD#saCMfZm* z-|C7y3+c{Tx<9Sx2|>@GIR}IhK`*M0G4ap;^jQZy#C&W#H;q*OwEGjFgWWdH#nn^Z zQzjrm3H(KsgWVtfs$Ws^eJ#+$lv?N3#_W+6I0^aR%yc{XOw~q;6q8W9m0`HRvGK$ zpF$1gBrq;7|J_^!!TK%KUJf#fk16*r@Sc+Ho4d;|%GDvs!{(rCpR`9Mp&dbD-(=8O zQltyN@6-*(cizg+@|AonTbU|BK*iCXcIy0Hs3VFi^Sy@$nTvYxw@&Q!FVJP|G^?w% zb&GQNu5<4?M~$_qv9?=vBk^r3+DZhIaz0Z3rD&1fPT0VOqUQ#UUM@Y{ODoI#{L!Mt0#8J7@WdncB&?qhmXUtzNc}QzYA9uauu5eH_VEIjN^PekujPl!7G_1Vs)*w-G zuO@NNO2%~0ine9yyG9>%`e@cD?v80<_twMZ#MlfEKLh*h3$9fqqh}fPD}Va=CQ6or zT;+_W&hO0OX9J3z6#IBXC!G$QU-`{5lbM}vZrMJu9SkL$|=b3(`|DI=$1W&(@dC%Ir9z3#^pWJo{ zktT(|j{mb#OqjiKHh^@P2hP^{czhKa5+Md9wjyb#~O)1Mj8sEvc8O@!-ZMXeuM*s=E;$c|9B1 zT@33&O%yXHU*jeB(uR#|1!m4rFuPz-5PGtf1m)B_nM2BR6KOAL_F}T0 zSrWtVpfn$wGI`IvPp!^MDbYLr`n_TnLRk)Jl>KuDhIz93nJiyW>{9Y>qjXi0HM_vfNUZ>`eK2{vz{tUg>u%TZ!$X|4=B| z&9&fT$=WyD9-<$D{|9ja%gITNeNv}2hik?=rEQ%(j->Wv9!&bzRp3H=W7Ox!o%U)6 zdS1&Vub{g+$i?P=t&+WYu9C)dBpXSdc-x;d%W`^d;s3%U$^WBqPH%|W%@Y| z&UAc-djqL-_7#!u%$4nS`8cU&&0aq&ntELU_IhvK|FrK#K4!zNvnp#R@3+nn zczIKw>6>-(*G`)AM9*ZdcT>NA&SW*9GpikCA4< z*qLP0BZ%SOR-|^a>FY_Z&T4uxbv({iK0L<#@;l{Cl(UlKIoW#;b%NSQRy3sk_A}b* zMRzT_>+H6B43;i-k3_7h)b ztBeKSQ?&;;U&(T|j2%;Z$iIMa)2sdKpo!7iLlouQb@s%*!0I-%4byb;QN5S?#Op$; zNIIVrE&~d$calMqBbc>HmNvc@e^l&aqT)cMPPjWr{507o$J~j7l7{-fJfs3@Hz)ztrhVOe(ghC zrJbx_=N}r)bN$z@BaWrAcAdBG3853P&|A9xVf|Mq=slh|yLUQq_UOC#sFL9S+0hbx6-eB#EeCGJ)ChMObE%a~UI@K3l z`Ea)U+0t6>t{DmSe|6%7KdF0GZJ*qTV{ELneyp_V&1B~bx)iB?BNx~BjCuFOKCz5# zU7BysIN2rY7UgOtLtgz58;m>S38>;OG785?*c{?=sHVQ4acnZE8J}$6uF#c9uED5( zZbeYr2eDH#PYY}t&xe_9dZ=e(Sx@&1ISC@6qy9E5sN5`%2TE>kvi{joHg$n39L^R# zP4*4H_C<|J@#3{_g15s#O|IMND^>*c-(4}?Q9j*K)-XF}jUs4zZe>vWbVJbe?8>(1 zG>joWGEuQ#xm5gR-OZuS5$+29h^2x{T4-S3*-LT>Qxx|8+blWGfcE7jozp;a1nd^M< z_3OI$Wl3*(_xl^Xn>N9*H&&kg_QGw&zg48I+W}gf|Efm&>qOe0dUd07McNco70H+< z(oSbZ+FxZw+T*h#tpGSjr2VA;mP6-lhxnFycZ-A9nBob&o5m{NLZlVw1h|m@lK0d| zk^|j|v>PPSR+W5TO-@WN5NY$&W<(!{dF)T7`kJljGl;a4-ny@`S1W(z1z*&EMB6{* ze^B$`oYGCU3W&63h`5(xhLRO&3t$RLlEo$d2!dYBG7M2b1w`7bXGGe%xgzbh(?!~& z5@`z%Y1?swnkUjW@v}lAZN8kgmwMsRZNML}a!a&i^j zbaCfhDFUt}+n|PFJE;~e-uKnxiWPT7?mCM;t5?hjwhb#*-qsYfm)xtVWChz2bzi2B z3VqaQAYZ&#)4TUZ85!9Q4?pDu+Y-MR!PeHG@~s7eZMPF_r%F>di1tadz_7D|?Y5xi zEeW<0POwdwV0-I4!S)|NXdva_mFvH0dFJBrnFQO-A{%cb*#7s^>Bkx4waW2Ix+PD+ zTKHipICF`=aez7W3J)MThvm zHfgkO6f2DD=CHzc-4IsTwFQmlX-T7p@X}Vk?RMqc?sECIw`VWC<~qCsl~Wyy8Kj1H zqnw7q*q`Dqh;{M?-4^UO4cjHlQ~q|jqn%i~c?XQZi<&J3?+*f!{sW+ozk1y5C$~K3F>f>gI6Gr+`~8FBgk?s*}yOrEWX^0!Tu*R*&lH zgw6w8^pb3PAt*ST6PE@hu8l}%!5@i9e$f|n4d>}T!`h)tG-JEk?R=9~Nn1L@jK!ix)0N@3~t?H zfK?DY!nmX8_eZ+=C+&DLWcII#ZFR#dhWm--OGh#_wc66Up2>{y49~GGQQl8 z`nkrhLet`$Bg-?MOZ>cZ#fr8zP*7gh*R2F|a5OG5(t|gEToI!F#Z+4?yVb3?wzXT; zf>e>Jju_r?P5V7o8c8iusT1`EYf7rL7(7j6nm@e44%*)7&U|FG^Qob%l{x9Bu9%h5 z?#;CHtksPo49->-r<-0gr*fB7j;4GnGpmB^a308%cewJ!+48lS@=sXf6}g;vX=@{?{kesvyH9Gl)uv&TRguNWJQFG_W%tdZRBXWZtZ*dfgR#p zbAVz`e};lysR;|b+QyQo6B}{ly9uAw7$Tv;2PYvM+G)om!CoTF%ay+`^AvCGob(^^ z6!TRC2lCJGmA=-laz%N#D1DZ%cnoTzf}M*{7WPY77-NF);%l!se-`v#&OqnG4O%8# z>bj-9+!tbu9M1l<$fIOl?!-Y@G-I@d+R<)sXq*R zl~=lplQRO1^y|wYk;A?FgUIi#ejk|Bh(F8*Urw;08`!q!qw+&N8)WrA!c)04G^zoD zogoeFdr?j%_F~}g+AA9w?sqL|{>J&kb$}{MRAq^(ETM`T+P7*$<#5MkOd%4g$7>B; zQ#AM5Ojo&bY8mG6=qkB$DeihxOp%(h6GnkrL1+(CDi3YfK>cGA(qJL@0HO^7(I2x- zz=!4>tT^oUApBFX1UYus#E3cTg>cP8g@&UZv*JB}mpSk?!tzY_;!yM<-uG+E=sX%4 zbSBOU18D^yU2=KW#91Lnkv-nJizx9=W{m2Lt15JoZfod|;Wp4p9S(iC-kGIc`uPSP zSFLUbNtS6~L6wcqoJ@GY{7P8P7?@FJPHoGK5l&#L#j}i=UMu<eJeK%ib9CV71K%rq~@)ru)+n)lYOV=UIG_-<8FXJw>A z#liCtfjK^oQ*&XLS}FRQ460Mf*OQNv{wq0D~EeE z+IO+IiCrQEyUs)kcCp4(S)wXSsG=aOJ&*!M+;M4W49qPH3gkb(C`)#%qZ7~qyd0Nq z_MVC}W%=|K6j3XTKZx7(fB)|6rZ1!>#<;zqy?$*8`#e0t4he5@4h`j4&+$wq-(Zg4 zkKCi#c9#W-BC+>j_Fi#Nd`^(qn%DE1$FIel>XksKJ!*mhDV2yB0+8XLE;Tw_Lt7}=*s5#dZm|ujX7w8dl0kkz^=+^OT z;nNU{Z@Lcs5bvtrD2>Xw2^&7Wg>JVU&6RjT{8ZlY4S0zKU zJv9z&amLyf>I4%q5Z+`E-Y^5<4RVuMbqLfew{2j-G{Wh|lE}5}u88wk{4;IdOUPg^ zcHkU4B8vTT$uVb9=yxv`D*&&nscMXT8M@A)_t8)IwF$G;2vVIyJl%8)&n6gwg+LkX%D8?Np8^vTpY~s(q>uNC#YMF4r9xqRuTZgdFF4gw zJi$vySmXN?7jbQO?iHu!edDKB5 zeXDBBaD_!=TOpGOPO?G;v;}_WVg+3hRwV)sH7Xs%zlDYhS@4>mYAAFPI$)kqTX1UU zSmvV1Zu2S+saBl5>E}i6;om@;Fl1l${pJ2aN+Ut|avc#U3Uty~w8;eIPWSu@ zCA_49mor?b)XJ!EqWr<~c{Di7)x1bAj!~=#K8`=Jw{Ac)VU%3K{gj+vV~hx7sVLnw z@sfP?#Y60)yb5Q1h%QmO$O=U_#(B1Us;xB{E`eT!uaJJ)Z6Sadv8pavD!O>M1cVZUf@bWqd#xlhe2*LUcTgv*76n z#^uzHXJY4gX<}dht07*&6Gja0CDJ&ST?3VawaW)byfs6Tw!xk24X3~;;2jN$cfqg} zd27DP)AaigWwIjQBN++l-Pg@XNWZ11D@fwejD&=>$yR03g(Ff(7O%Zx?v4!lG!fLT>Q$_?0_{Ink2McLJxS$9>VAz&AkrjLXz@L z5*aa}M`0$ckYLyhO3q$+CnIZmC{EhL)p-Pn{ivC}cn3G~*I}Fcc#}%3as#WdD z!0sZQ&+{N^Q6ruKgmwUiW?)btQlN9^S{*{W#S=+OetQ|^MS@dM^)78#^oNK}I72(u zV;L*FjH%7COh*8-9JUS%+`Q{|mIYP6?IMiJjPWUh@%hFDS<;{ru`F1XN1n=cKBbaW zhZ$E{DLLkq>sM~^<)L9vXqm1fAqVd2k7&O@xFH)nVR{uvcQ#K|{JseV}2=23siejT*FtP@~xf*~E2Y>~}6NjFm}9NqbAwdNeV{ zrY}s4i3-46beU)}1p_*vgRO3irg)R>uQ#1&!mE6-cSRf$V>*aY?FPhgrVm+WZylZ*R@d-OjHt!r`sWbx05=cMohpQ2Y}`0C`U#THg`5SXgpM zN7yz+bKmI{4&jW#p?F55=qBvJi4?w*Do{53K4m1A-&eYo0fu{CK8KeHAsa%~Q1Br* z3}#}g23&@mssR>gR@H!TK?OUS*>uGS8D)xKNwKb^8B6SovY7jL-oDR(#iL30SdW(I z(GnhsUD(T>8$#cJ%U`Go8AEDx6K2$3R+w>eT2BSO>RC$lCD=Yq-{*hu55OQtTa0G% z()Y;MpVQwqQ4a4AtD=*?UaG=oDA&(LjaeW6L%J9*dNEjiC)cO3Xc?JbF|8xsQzSx@ zY;|QuJETCjaA@3bDkXHEKBfC1PWpRGPZ35yd2HgPQe@H4NlyPO{9Q|rJGIgEU?JkMTg#(RQ21UAiUE?) zNNS_H1!^Na@>-DR6#Ue}-Oy4SsmeUH(Mv4j$&UBXZIJ~c5(Eib8qJlosNRfT>tey7 ziM?L(c2USg3BJrdn-mwqv?n!l=|_iH?BrbChaG z{yxQ@>QIt3vBpKEN&V6g+Q&fZdi&J%_SNMU)}A241WXr2O3-TCyaG)`9L_Yq!gAXl z=A~)_G+dQwu@=KM$&y@6I!~f2gQ~GCCH+$-ouQ(2*=8YJvsBbnJ>wY#PnS{AE~BDY z7wU|P5{||f#*;8AnlLJAbP}rO=%lD0!6XNSOE zHwwC-Z;?t-&;^~Uwur(RdwZNPHnE=|gyJ(AfXi}$c^f|rxG>QUxDY@G+=Gg3J1qK% zcIOQdPp~6HJl`ce5a$&!P9JME*cW@jF<*GRNlLq;?&3*refmuMFEVfc&8ly2LA~wv zpF+y>GW+ktN>OssSQz@$?t^V(_ibkP?O^vwGnlL0C(35~!R_w0JVgIB@_VBtq|3&t%6_XkxF=G;fCU0+$M~iwh3oCWfN8-jaPVU?uAaK5245x zn|StFj2@zClJiyyGvZQrmT2zx^C1IHIqO#hsKCNTv zkS;Dq5P|t&J1+*zg!~-~?P3pyL;ZZlsJ0k@iApMrIGRN6hBnMyLfEa0T?ooN!3pyQ zEEiLxb}yEzJKE1(u!PW0AMJgj#Fp^f?B1VULIp@K(7^BY)+u&Bqhtf&w1l(}I)$d~ z3V$Ez&2?H_aScm|lV<)E(vfY2fTC~L_`Mj3Gz)Z^YYDL|bm>~1mN)tPB|CLD%cMm6 z2_@R^+N~wbJW>hIW^`_+prgowCKbjU2YQ9*=uD@l937=ndC+z4v|N|25k-}u2KTAVzg&lEQp_=ZigFi$8KpH+u{jCh7x^x@dDBJ~$wYB$nP<4)I>FQ++ zWEopx4{*!U%@PVhEMTJ)9t@)Lsn)Kux_TK=CTK!k}PZP$J%VM-V7sG>9NsF&yOr~=JG?Rc>gwo?0oopXrUr}!J=4{44n zOH^ganYR+@3m_G9x6({+Y$Z{{a&OH#QNx`XVcDqQkL<@{V;vLb%UT^(tg16ZY zhuEd?@$Xz{IDCsCoqqDXq=9Z>gn6aX1&NzyzimNTSbW*)QZkx1!Yl1!CG!~Gd{TlZ z2m{v8Ds)2+K zq8g#k_hxD4d&Tl^fqacj>}RIMLDzW-T7>sfN|nVZxYmD6lq_RY7=b`xalMQxF{T%% z4wlznIT2{m$Rd6R_ausKe zM@8NgxH2ryHkw2d9R4#h- z1~-VPaL1vxR-}ZiYTlYYYK#W7_CL8NfMDk%cD+gZB5sNxH{h$e>2GsY0OkKc{3^9J zjq`7RI!u%Rzdp=uHT*lFfY;6G4-%EYuMeKIUw_T~s5!>sQusP5eg=jo$@)uiI+7~j zLjI#EtY^`G(Z}CrqBo?cDs=MmYzmSGL4vz-6_Ouj{9%RU4|aWyj5kQy3c#Pl8hA-E zjD8I0h5>eD{CaHP(w2oC1qmYtBYxG4bLP~HL;GsR?Zls0^%@$)bM*?zNhVhvr~T!! zJSzCqSA%OZ+KNncNae!zt1q<@bePNi`Mf5iunJVG6FSxkQV zG5@?I++P?*q*gEa3hLUdEBaCic4A; zgP$#b$jZ5y(jOCJ`9*s3F^>!;d%GCA-BnzyLw!#W`4!K&4isNA-0^pmc0`hPUs>sR zXsmR+^5{R>V+%AeA0qGO@uc13l)2Un7l(r(Jc~;$Or!FsZ_xcDHh>zUCFgK#({yIp}`y^+h z=8@u9A)l#hj;pY6lq=mtj&yk%)_zxxdgDY2`DC0rkiGP@p8ZK4NxbO7V{ARC8Lsa4 z)`&POU0SI2NV4_?1IX8CJlXk#-+36rNbR>u2a?@S29YUqRtwdCx0K76ee%4Kr0axt z^Hk-qchmTJx){{&e$rcO%8;fbnY&QP?GzqvV01wQe>Xro7OFi=@YM(Y)=j+W2)=o_ zO^2wJtW5>i=Z3mpNT1a4cG?sAS$9ZJWMFDKl5Bde=Opf3>vfdfLi;C)uMrKb?@Qz# zukGXP>)_E~t+EQxT%TCD`scidZ`TV=&-q)DwIhCQAJ>{W{sN~@Vk3gc(NO&X!YuFs zs~uVWAAke4)9xqz&OX2Ualvf|VQ_trBX&ht$<|lBk>r`po=^^2Q8L87&^DBR#|N;L zcNYiSb4_mdbDH$gIUs}mWBg9Y^A%-17yl)mEUgTCc%?8t01{1~= z;^Hs?*V6hI9SS67R$$1l$D3L2&E&iO*R22Bt?~CpKbl?RIX#?Vao?_iUBm@t$30Zp z^n%yZi5^-Tf{kBrbj}J6`Q7p`3?tO$hi&P`S^4z!R3EGz5>kymH(0w-U(!ce5(}dw z*r|j9Vr_`C1cNO$me|QaL1rs;HAd~aVak)WkEG5e#l2tq2mx^XA|Q^qBAx^mkG3*( z^eV+|MHU8UPEsXR!kfI7{we3HZ`57kj*-koP9)9Jt-&00yR#QLSskzE^Q!--PJ@hZ zdB5gH&gp?w)}z7A|xD>pyp%9p*fX{4i*I2e$n^uxs^mj72GzjKs+6UX3H(L1G4g{%dz1ay?OY&E#BI1aKCUl+TXA>J>4-+Xf4K0@ozTR8IKP#DZMhUZbfJBoug9sceshY` zv)b?cvb2Ir*y#>;HV3uO(t_Sm!2OD3{bNDXW89AXJ`i=V_PI8mr0y>>j7oNn1hpd# zZF!WbQmWm`Bf6NR_E1AxG+W;2%5}~)ar!Xj{zf&@cqG!wqfaGq3rbM;I_< zcxCe3Bp0c?nEIZ*Q@n5kJ*M_vb?y0xdC{WLa|l7u7stl9c!WL*8kHvZ>Vb}OzMtRB zdngOgSz;BrV~gDNZ-Fh$XA2+Z-??+?cBaq3Q03OPW!X_S5HK5bK6dNi^&_~r<_unc z;Oji%?WPC#xc#Bj#QQDk`gQ^erKMFM>DkYBS<4J1&5{IJQj#f5MW+=MZ%1v-+EimkvlWY`H=tH!L2aokk9$d`TG`&k`Y!> z`*q|qxQd(S+!6H-d&mm&ylLb8pZ7PRKsR#JEONtnZxoNPbVy{Wf~Ox3!V}5*Coq}~ zm2R)x@_jX#?EaQr#pd0-Jz4*xU;hN+2P&Z zmDud*4kGvea+cA40Y-b{%IVIpPj@~>Kxq^vd(|e^2PV7w1?X_^mmm|6i}fA+cXy1z z0@jY9dFtd!BYZ(H6d>eY%{>!es1ozQHj8`&);p;C$h4x06nWm$eF$dcqk3$wgpNwt z+&Lm%WCUL1N}doN#3#0i5owyapy**w^*av{dgM=K+($xFWTmu?K!9u^La zKAznfqTGiV!|t8*A`RibC{lJJ ze_~LfhhFc~d>RG@w{bZrS)%yugP%Pw=L!!=?)hFY7c2omu8Y7gu@<^rB%hl*a6BFd zH$f6&*0Fye6eQlGinnAdDn(cgvdoh3l&-%zv5Lz_XDYy?%SxSj0x*vdpWU-m)P@G` zv!3uWunVAv;8-pesUfFQunhXa1*$s;49oB>0pyIOC?`J6TLk3}VBoiLcf;VZia-HTE zpOpS9C1m1x#u>SQH1%>2z0Zs7MX|l#CwE}91SM{?{h;<`;-Dn@u7i^3TMtU2Z$BuB zK5<%&O6BIRedXv<_hAu|uMuTfCbGUp zkBr_v)3p~XIfzd7pbQ!ZWzbN!|F-6z#Fgm^0Zpcz+e?^>%pVRYB00rd2wz>50?F!} z6L~|{21G4+;^s#%5U{@9nh%JmvZ~jiSJg7(Ps4&+>c%zi;8}W->^bv%oL^VL?MiCO zR%lRy^LP7Og9@|G6OG1Tz+d4CM#0kETDqWOuU+~eU$vm(pb#vm*hgFqrYzb29;HRY zJS?z=d0-tHb0wdrsv#e`ZJeBCr75_~AGe6FI;F^VC|C=j5em8qmolG*AS@L;I{3Xr zeVG$1%4^0JFPe0a%IEfxQ6(9p9X3`nSL}(q-^H|U1Y6)0f|RO6!L#m=^6++Mn=+Yf z@RUwDPw6VZf1amwS?LBmr4Pwddf9|rdn){sp?>p|E=RL3({$EPTDBZTcgc}Y-tulC z@rcVW-iO1qWd@e>p;CsfJQKKfF>(hez9F;m6Cf8 zhMlkJ5C_?+c{gIaqWF|h(QTQ}@ihH19?T-NFM&3*+XILFAs+nt?SWjx_F!u${*z$J zpyFJ+6wgtsrlqT+eHSps{5KaX~r<*8n#TQL~E zlJwWHFQPR=lL>i-vnevWbl>czK&on~DVp^6VJVdzGF~*TZWVvel=Cnd236(GvJo@m zWegtqlsQ-{qrcp0V!=J;j`1@&SRZ3x1V5fE9dofHcHIOmRhLd^6A%RnUErnVt3M3K zQKn7G=!>--K=CqPE?6?cimE9pbmrnrg`DV-yuhhU-^=|fP@13tvz`z%P$3VK3RLD} zG!P5IQ%`v6De;Gy)~l%9XU-Z%GtrerTaQA~3oX%pp=H!>DaMC`Our)Z1g0n_U9|nE zc1GeTguAf)sCGl*sLlv;6>c#niDm**nm0MN`>%+|chi~EAwdF1;pElbX!d+ zgSTt+hnh5f;8bkaTVw-OHgw3;48)J3+z}dOKnGU0MDPd%&6@!ozXq-a7|U?QC5Yc>W{)UN5&~wqIHs1BX$cPp*X1&bm=_!q z9x6bWr4PD(8{KCajV~q-Xdbf-J3paW^8EXB?z}^0ywwvp5I?*^Lsw$q8E19bxl6pK zxyTbSs7*p6f z#oCji7^+ORV9IB4b4sS_gktXs+oyz~i78G|QWS%yEeTQW3~pKo%Qr@EJ5#3!np5~< zSeK`F1Ab1$z)yAZb`3udfhjlxeuA}RD+U+1Nh@1<9-G}#NLbef1e0{h-no(O(p|f?UAMJe_gVMR z?n7H@X-fbh1`9zf1W~~EnTFN?3IkN~e1GTMGnw$x(tSSreExpq&fMpm`@CG|I@h_* zb*>jb{MD^!V5d3bc|K>n0PS<1GyX>oj3U@COS}PRY%uy=(%Qye3tpz9klBkf5ziV0 zM4?YD-MheDWZ79mIf?X%d)*!Mp;;P->mf*(7hVdg&=C9sc(fD349 zFqk15jXaBVWhS7mZ8@Jd2Dhd(=AWY!e&cHcQ_Qb`9*IZKH8~d0Mw* zoYTJBC~nK{-|9$NldeW7ZXY$Kz0_p24hsWE(K>vuJIHYW{ik8+7hDeDFPGBcE+{T~ z-|9D6hIu%nrqqPJ8V=x0no>s>h|CveG^MCmss@=hj}j_cN;~K@C`^>LqC#!4tkN0J zqP{H{96HN?fMS(gB z=|K}oG@@-FpA60{&22V7h+*m!di|320TBa^GR^HaY=~AK{(Q*l9MGcH38!-_tQ!x> zfD}>Wi>K)Xj2eB&Y8}#`#wRojrBJIA+T+}#=1$X)7`2j$T_~fXNXR$?>|Egjpk^Vb zz#;_%7THBiUgRKBB}5Z*qjSHcq$}i&Tx(0G8RFo5pX;vV4N{P1g&Vt!kLv}y46X2z zVvxtI@Tp9KtREVQ_{GV%mxanArQP#5-7=A3b}4ojFiF@yzFIF9RT$r>j3~*j&zH46 zagaqOPzg%m8_2mtaqG{{H>kAY~i zVkGlkcMFGKm!!Ey@LF5|?nRV1!mAy3KB8(SoXn+^HbPV8BdSA`O1;+9#wL*cdR_GxO zAI1@Yh5{QYRKif}7u1_nOse%%VGuL9|(|d$n5k8snxttky52ks#9r zP=OxUwQAZ1FVwVMtA3-PiQ1gd8d#&o>{^}Bj6GBxFv16EAC?4Ir{Mzhn=SCrt)5n3 z%=i)j%q-SQFF5Sne;JF_tW~hW-HW@2h;#oBv{=9CZ_7*lZP_f^ZW6W9v}%cJP(ugb ze3gdYUB$kR4;S}cyi7wNz@lZT>F5K#D~1K~4u6eqL)$~lBvI<=o%}>>)-E93S8XbL zGV7IMTCYKWy_RLn*{bM;RxA5NkjQ-ata18E)U)mGXz>n4AC%{uYI)At&PolIFN})8 zVXf|QN7>-DufgR`J4dVQII9)G82N^O$C|B-Wm_@|m}SjIdCUU={3vU-&6@s^m9p8& zny#$rWU01;=)P`et%}v)fEFC0((7rCMT1jDt{1k?|EftswOjN6rxFYbMau7qW-gX^Nb=5f!XF53wVrAj6$F*X-yDA581IaTbcck zf`KO}RmjNYK|$vNElMT?!Jmlc^IDW`ds!z`SMFDbu_1Fb zE(QD_%*(0WVBYCPR{Ko8nxD`xxS)0?voJZpyjwQ$9H!M9V|(%VKrv>;y{qOvV1X{a)()e?lgA*q*3+F#rW2c z$>JsaGmFw+K-%rR;54v9mllOMMQM^z$Sfu#r~map@eWz(a2Ak+0|kiTz)-K@k@NUI zVpcOWoViuJNsNmz!Rft9dyDWEW9A{vGTxM+>imi#U)zK|pLoIo*uhBgL2_c$FX37~ z9hgN`F}fHUX89XDem0HAtO!NU=F=cZOgYebJ(cDMcEAnp4B$CXE)puu-d)MwT?K)% zNL?u#Xf_$+q*0o=h&lPP+!{e|lle(G9jRiYLC%J9r$CF(bPF) zFj~%<%FL+MBj5Cdpp?c0r83L(#O^kT06=VnRpXwTWO~wOOiv7Ab0b(H9j0u%6NA{g zCTur~ZJjduxTMnXtcZg=L|aIcSZma(@&QvPcmEM?=2vi~=E+f6#(f z84JB|=Ad=h#ZOZI4Gd!v7+_3~4;WT1r0GxZ4%7xjw`;L8k$llE&q|&0tkh;aD*@Kb z_8^Z+%EGr&#=6TMw8G|~CCW&}+K@7B!aj-^5Y~DnD}P*}`yRH~#PPq?xj9>*`|0Ge zH@LQ3oBTKFQ?E^S|CT?`Cf_Y}>#^hq4)SMr@?&qAydO!s`f&0&Vxm!`LE6<%C-0D2 z^|Q$jF-LrGJ9nUL*LgXMztyvL@jt?i{r^p!y75$X>ff5aXQ@*UkN|nJ>eN5uB^}@7 zrwmW1D1(=f^W!2m-5+0A@f#=BkKf1lcfIrHo#%GFb1zCt&Mk?qV|qJwuXjCfLo?Qz zVz;lin%SOwvF9{2%_f*j*sac))s=Fbzd0%d3-&CLlw%*hZH)y`li*Eny`qs64*SbNE0ZsN5Sgmwz2v5v;MmfPuj_&Sql3%0U)gRTb zPW6Bz3~d$?4dHSwLgKp);ZgUHGiUM;-yU*G)+T4GJj_5&GH%P4%-H?ShI;x}R;MrP z8*rr`lsedzQ=}JAfYz8^0g2NmofW`>PhkC6w{KY_`nQqjGE;zZlWn=q2xabbvhtNd z{yAsLR|ff0&XlhV^7GD=uMG0fJyX6i{?_zz*~L>$*~$9Tm1^ji@}%%$WR3N%@13Vs zell4dzw3MF^L$u+_^xA8hjurEvegyz>SayJ|jfaOu$->g#ekrW#-SNf{iFQdghT z{yY7J6Mvn*@w%M$J*I@Zy!7~-25SD8U-Qq+nQ&tDrtE|^8grc3Q~H{?TzT{jZlc{) z=&jJwPg6AfVutdL8S9&5XsmDWS7Y6~^qpA!telSV zf=}uTrCy(dPxsh5eSEC}!_`36wt2p3b009yJFlOfm^Po%7|**lRu2G7_)mAe4~6rt z6%d^6&oV|^$iiU}?*M7%wH5@!;^NFVXPjiGM}`+?G0}}0QWa&**zL@pySi{ZK@2!aC?QrRF3-xyyglcTK5n!KyzMD4vNdWuoEbIpR zx?avg$M@N3pn#o+mv~=#{CcganP=4{rzb3KoZZ=Ik#v<;8F&!^#X$e~^@7dWR`nDc zFI5$uzA6BawI0s`%yyE@dR%(^x;WF)^Z(I8dPSc_4K+T31i5_5X7 znNxNRe@>UA=k%yQr$_xcJ?hWtQGZU4`g3~J&S{#Wjkolw0mS+LZ7u!LU2p;s5zR9R z0-M%rHips}uu@3$Zp`zKE;;r@fdc4Xb z@ez(lT^ke`rY2-4GLot4sIJi6jy&g9ye%S)A}~dM*Kyg?2cJ|6?m13uJNk8fpESa} z&S1sB;>*#zlC%&1_BweG%|_4U{VLuOc0Yz*cUhD;U7_frOS6h{jp_%!8TpK{8>Cv| z%yi@vW=7?H#;WC#9qFGUsOn|pqnxgTiwf8rJ4}gGb_u&oS)(*~uQcVV)l>PCUyrzv#Hpuuk7G2??tUWe&r2yE?IWaz$k{9Z+U>@|%qB zG*AxGNNb)R2|;-?=TSj<7}M0RR_g?9&x&=6stC?> znrg$UF`~zQswJAte7|BQPkWM$k?NkCj*?19nNpo}s>5!$;#eI|oNDlvzWr<(r+!_>x;4l{S z{yMK>uhaJ(l5wJO)LJJW$D@$ca2%FNh3<8Z~UMRRZxS8X-_ zY5*YK>2tlCbAe*4H-uG*rZ3_j^0Zq(SFZjtLcxPg|Z;-;Oxm>zEQjGivxJs$03V_B8=$J$-T7hRN zC){cxcTde_P&LvRDG!{eD0d!^%!sI^?jGZ1qLARbo$981p%R`ez~u$f(2oPJka|Pq zaj)_aGE1*uv}--Vx-g+9rWPG9yp7H`(D}x?+SUT$TM>^$ge*D6(fcZjPKukm1t(6b0QYrV>&w-GS=w))z- z+Zw#?=t{aTIJGPCYCDj8i+~Md|TrF?Ph-5jer?7Nw4vWv5FmD zOE|Z4igybp8}~^xTQv(+pO{9)lszyPItPi=1%Rc1;}nFlD8nHw)I?f!?@xU++Puedyyq>l21j92CbUk}@sNw4BFmr9V@Cuen3#rlsY6OW}gwhJqZcw_B zCBW@kT=!{lUDw6acXF>+99S?%WzB`yVH!5*-;9=sxf9cAm6ckOyi7k%UL4o!1VAns zQb8MR@W1so`O2_&JaoBS)R5HkrRovSHvxK2>pqZJ=g{InVXT z;UatQx{Ac2nTOZsc6>5jfg(|!Qh^eWyr})H#O!aQ8r)!q_P2XX0C2uG@VZhF-4?K+ zQD^%_)T2(>*=Vzo!qtiR4$+66XFJ}NDG{E$j5@PR`W*sV8VKmDtr1Z!s{lQrY4nBr zvc>0c;}_~YADR%-h?03wJk5-mw^OF)AiS+)5F4%v$=>nRI$xn6>e_Puu5XxMgT#M852M$R@d7g zTrbKmKX)>ar!iGv1DY8sQ2c9c3uSCd1bJ&@uyS4&qqbS@$dMPRKF)_#Ui|7@7H1*b zve$TRuKQSYg&(TLN@l{TnxCrRDWH7cRevZZ*T(c)iW z?C-_)rh2>0urz2$egF%>w*y-OgEa9RUl7qeL_Gui^xAi&>SwpMGJQldpF7(NZZe$} zZEc;W)L3+0t=DI&tMe?hnp#(B&ev+rE9MyXkeZk9iSZ#7Ve5U&^wM`3te!8h=B;NX)X((3D} zUOOQ0-IF2&6#ZzbrK9i@7VmA(x!zM$__?={HMh2PNPXU?KL1U#`doPuo=Rg#tK$f0 zL)^~5Sm#}=$3}O(Oa(L*44_pg1eS#8yIlIksY5+svV=zTOP%KKF4mv&DpBB_7P~a% zbv~t}_{LNf3Gqwi&vY&qIIZ06EZ#oSm~N$WwyB+(O$)SUS`fEj$4g^sMb&Ric_FF~ z$DcBl#-^pHIy8+MRq^5%__B&-#7~C60<{sliS4x#1(;b3u+fmtnDf9sZC0$6;^W1K zZoGkEY0F}D9Oq)*AC!;yKE}7B_TKiqLJ4Xec=26uLm+?WUP2*0&jJ8;wAsK+XxWQn z@qaeWW*$mv6aT|rXZSPE7=q|}Xrr^Fm5LwcLx63_e)48EI6v*@Iw$d+XmmQ?KRkUP zs}zM!Ev3Zd7#CXpMUTHJA<4d@HRN{Wy8Eti`}C@7LCTZ~JRBGVFH9x=E*$ zBKHFKqZM1+94CIj%Ig#ndJ~|I)YrF${I9;vS1`3QwX-pwt4nOSXLB`>{5|_3{Ho&q zI(;`z(F@#k&$FFnoX{?-*alBk9dXMmwqmhTv#GZ-3MIX4J5l4d83T(* zqH>)YSL>1dXDaWijOI9fFY?Rop9C!^aBl6dm_ih1l?IAqtMy2Jg)+u8vFk)G7RI-1 zau*d*>~b4;%$7zlF}7Nd>2Kl1{|8EmfkGprDQZHE!2y&ERqSwT4zg+W1jTCTRM&nn`|n1h z{iGGq=%2cU6QBV>p}`0AtU4~U3Q`&9ju+*;)ct;)2CE|#VaGebSr>H>@A|P~;MH|( zlGFEQE=h2-pk_YezsJ`d*)0y6*B}Q@C_o`vNt=REfXcq81hniggEZl8-z^Zoq64_} zK0?qb>G9OMn^7u(>chStk&Rj~?DXEPX4p?NLA(wTv_~89>{m5Hy#ARaWW*0jFtmM&h!>zbAl;133Kr=G<|MbP4g!s(x*pL zKvv%&v^|aGHx)R>T3lbE$$tP%ip(e5E7qg4r$LL&h&*3BX!HUgnZ}Rwv`{~WBJ&UE z${U-&FY5ro#4yp6&jWV(G#Eh@kMe132{?U!$J|nmqo45>A3$*6v^#0j?0*Mo?#{i# zyNw`~PT#kMLc_&-t==>dpOGz4r(CDy3vmE(Of~>J=f7>*YBH(LbYp%UI|hVe$AC)g zm*w1*D&a}-@d9T>=Zbw<^2zG}>t#yDS-dF^ST zwk;cKPjdzx1jXWmKrKE9)Z&BXQtI9c)Q&H>0H_IK$MPhVd0P``!riOl{+9(PCZHAs zk9Qpncyq=&FZP1c^NJ6T@>zU1b#vG8NsE4W9WTL4#43cMi+>H0YuZL8ccpR{{||jU zOMur(mE9S~0w5papZ-R?&Wb!Suz)zykPTvHpf2&h0Mp3({xJB_PZ2FVEuBMHqLpb5 zXJIyu#D`i{_)eb;nmvpCh%nR1U$IM}%(6#k>fOnIV~3kDCTvVTXU@>_nmlzzCQ|+FZ*DleoLV_M-SLa+T(ST@o zo_B9v#Sy1Zci1>KIc7z_C$I^UY%d6TrmR-_c7+g;XG(1c68}PALPYb6OZO};-LrUF z_w4nG6HeEiRH*NcD+;unCe%vXOreD^F!V*gb(BH$JBH}@&tXoAH}_(LZY94OmDivs zT1Xou$u4m}UM$IL9=xVo6Db}D40^%6uwG?|P74tM=X;S|l4E9ze?^B9W4kgUU}MyZ z?D-mB1bm~;`ajV`HARZy+GurL1T57l=5Ob?2sqDcM+AJxsgX@9fLMMb(-MjiUwkqa11*OEGOxeU-ExBWgP^gKzU90}QEM z@?bA^EQQ@Bp_0-8+s`!t+Z*dPn;X#&D*qIFA+09tW*CI6Kic&+e=SbFq@1r!I4 ziusz$4GV7=KIe@~g`Z`V8L99N!lCi*9>kzzQN#*{56Ygzp~ATf-@|&klYE^fB_F;M zypJh@_-1xjB~ggwu{WiM_T|0Wm-iOgD0Z(^99-}v?sEcSd1HrCM3>_;Hci%WvjWl( zRbrP0U}VPiP+RINN$zL(r>v@T*{GDu=enH_@r<y1PW zucK@3-%@k}uY(;l9*1_QhT-Dp(?`)~@ezhN0$zv1uDTD4!D!?|cpEH_PQbc1q;ec= z8Q@OG*YNb%HaMTyHaMTyHs5#s>lMRJSF5UTG6hu&9$bcDfROGH_}*DAzQ`DtDvGg8 z!NtevMn~r7_VQkY8)lC7(2x)27z-2)=T&o{HqqSuD16Uq_@l)K>0hDUmPUK9sd^7p z6)gM&6^F2?(&=41gE%M6+)!q1HOsupALnakoN8L-g~gSZYsg;Z&a_>!9Lbp4r1$OD zr3GfZ{x=Q@En4Kx|B~1cV7w$g#1a0I#-SpfEkotBYH{s+`^VyEqrp$`EQoXe=D581 zH#f?8e{;)D1Q@}c?36o!GiiuKb{aVEAV$EKvO3}v*_w-N%_m{L#!DBSMtaB^PzV3C z#vT?#Dn^~IFKLxG85kbOf+2#OX+fkzqw`+_U^)hewQWb>bD36gyw3e4pm%Z>--A9N z!COF*uOLnEJ+fZRH`)4XmubY^^ZWe51 zE4S|5px3kf)Z0l#eth1rE+)SSxub^3rDUpiT3Cx`nI3R|p$&t*g)Z8i+^lKIQ|eoD z_y7hjlsLh)Q`d&bOpKJ|H)^pYwjo2y^>rPDYtFz(P<5NS%sy4-pY>))rRC}5cR643 zV{NjGADE7KVnNOX%)M|jJ!_L98R=#9z`v0;GKF*Dy*6_tnd1g-ne+M5{i}eIxgbQ? zUMI`1(z@1Vj080fui$Mmb8g$js)EP8W=ndjo&x(cKvEjIeU!f~acL%hs@Wov-_I(t z!W4PySLrII{!*11?W}YyD@~DYnIcnu32Dd~`FuM6L6iT(tbDeFoRRC(`45@=zst&J zlRl5tZ$ ztV@vIP_(lU4;QvDFBf%Un|hdN{&6Rbc$d-65M`Fw7Ae53h6j|=&Mba4!0*#B+n z_U|cP!FnHNq5BYjjYX5wo#5x)xvh^d0f__X`@P7jFpD&=YeOCohdgs=$+ye>eVok5 z47(2O)*^|>+Qfid$|zfmkpJCFs3$NO81U|u7`@fIM=}xCX086tCFxFF{O)28hyar| zwiHEyCDI#WYlZ&$@LS9(z8ro-Da_43{2STx?xu@Q(MG4}7?f-t4LFV0>JJFf@oUOpv$pPM%mF8}&uwtaeqKwJ zW3Ox9dk~9!rzqjIb7PAEsHh}=C1fyn0BqCqm~`l4C?L_nUtg@iN0 zo#bI|3N=%|<1fQ3)G(Pb&4xEG*G!B*S!QyOW0)ICG;+|oL8riZz^Fb_rg&Y~+DW|` z<$-*OEo-7A^iic(xy_4D$rFd%XKuaQ^AFp*VOX5~w5=N(|FYQr@n+>!*h^&Rfz1?f z{Ttd<*4T6X!g92LY|qI)cpPmJL&~R>Apm^`P~gPrRQfHMf&IOpLq*= zCe!l7nWp6qD7L2MHvTd#RSeini>B{DX1VA_uQ%jna`Rhk$_9MCrIfnV`EgTX7{pK@) z{#7gxG!_f3JkVu$L0`MCa{D!mPM+$iceu|Ymh@Ylz(|4S;NL#mPlpCM% zX&apXTd|*j@A#R(_kH*of$!V=Ju~>&=DgXt6@yOApbGB-S|aHvcOnumwNQ&2sKtTW zKI*bpx^bWu_x&;rlIrdvu#$A?)1H~eykP0VtMCmjeO_J34?*hUKF~f2&^{_3SJsP; zWPvdj&MYV)Mao10QrUnL0Z0jODFH5(4LDNBGa>1Y1GrtBk@52u#OLcoMBjz`oP!Wb zKsJRP^0YK~K3t-pa5sO?2r_|-=%~&EM}d_Vw|uwn;aV=MomhLuqS7h*xMQN7O zNqE-@-WBQl|N6Qe27GiLhlZ#ldj$vB($G($&Ulg0z zXX73zi{I>`;A#H_W~ z5%I2*KP_@3Ubw&r{UXKdxk88i4s3#i74!z>zE{B?^M$kSmKzv-KDSZvJ%~~7aU;>d zHn0?}_H``tm#EgTXS(0Rv}2o^Ii9}XQ>0;OwQ~rAm2HQUXjgc_X`xZwJ}8(R*Axg& zrpFMR@BqtVL%wGT3_EP#Im1C2cj)W`VYGeB#ok?l7~O@K%0W*sc{6JweI#8axFq)c z!T6F&$?xm>SYVwr)Pz9|MOu*e31H!BzVmG2lI3BJ=n z9jd(ciwtJK^Jr{dU}k@VrSQeP0q@EEAq5{-yRVcWCITzGvs4G`hd7;6uDuu6Z% zMxKIf$QSb|-&ACOBknGe9LuLt_}|CwHl&Yjcuj9!`| zk_H3$pwsuLNys+|p{Uc>!#m1(*!mQ8eIjS^#Ut-u{9b#~!bwVzbL;ksX^SBgRZmJd zvMEQ;kv|t-j6SWlfzIFuIa7BXXA8Ohz0e83<7p$#c5WR!ub9)}>4Sb()W+N-JjVGj;z=YlTD5os?qzN<8j`2ALCUHC4eq)Ojhd zFDkKZ9e-o~-zxpBtxvr1b0hX-*>#&TT4)m8h9jK5!jD8%4o^h7kfTsE~pzC z(4ZnK6vUKXd3);obo>s&or1)aS}CyAY5uo0qh`U=X&I?7Z5x~`$tHhnu!k9Jk? zovaGXXvOC6fiXu|6M-{K^oye@nAZ%#j^`beeC1r zNgK|hLN&TG(XK6C;*ujhNCpT)dTYVNvG zr||&BfM7nW*)KpTulasN#^~f%NNCB<(ZiDYM zIL~%)1LBQte(E@FQl>p-s27#C@lI{`C>M(y{#0O!#2@E@aG|*(>W-#>IyFQ|)!Oh; z20GCf%_of?E2E|Spg~m+7O`d!<93@=@8+?;Lgo=}*^_b_-z~7yEQ&;0vbG!iSmoCg zUSqx)ndz6|5KC^YXxf>|Iz`X>_0r^_`RCG|s+1N;*BaAI&f?jtY0d5h5-y|jM0Jf@ zRB3!Gow`_^@~3TKh$08)n_K-YRCCn<96Mc+lT&pQay8p)k(4{0U%ZNtdNWTDaH+e1 z>J>%0J6gmq%4u%yJHO%~0}jWNqM)xmPMJcL_J`#~v`Y&Tp-Y^im;FBYC`;qd%x~D# zZ2-?lnjn1)Vkjbb{1f1|p+^*a$+^D<{+h9;!89!m(rFf?WX1N5CcgkL;#W!eoRRke zB~2__;J(Y~SayeO?TFQBkuis(pBV4ibI$!a`G2gz;3txA!yRRM#TGVdhU<6Ei!i%> z|A34v<-F@h5fQH7SJ%3f_PqUkpuY+K@2mdbeg5AU^tT>+wb6!JM1$g~(cjU2qrePn z?bTvmbckXM!5WLvXnfD8g$U2aJt=KTA4PhB1|Mw=`*oYP;CSd%9o?y~L&-0k*tT1> zo7;7NH=N1L+)2aoylj^g9w-BLRb_QuXRo@S4zO3$nW`d*uVq(d_Qe@)b(y!)jJBRn z%_n0WCv~Zf1zLWzwR%#g|&E`q9ll*^So2^5^JmPhiuVi-c$p3 zMWEt4ytm_Zv+-)JTWUqubD=F(xv`2{BqdkKLF3y{@89von-KZe7Lx+ST0-3rycPPB zp+lC&QLm+F$ceQke5Qv=UV(Li_!m(ZcUW`w)96!9*I!abTHM|HwXdRdXb~5ScWP=G zCZLH=m}nSUK#N`^Kd@P9ex7C6WC7G!+fY{z=4vh|*c}boAC^TVWu@W!5>wyE%`q3e ze(%9KL2P_bXBtfgd`yVw$HdW5o4}p!`|YT<7UDQy)Qjhida*#td&sbs4IXl}2J|$~ zqNjJho@?hUX8H$EOY9FjHZJPv(jx{S;2d#5!pPSE>1zw8J4I;meC{!m2cVVrh}q0c zwlsToGhm7{`fe&MUTJWQ^j8_3KM;{$w)7X!dlj~-oGu)n)b*&Q>${Tyf>DoA{nwU* zF8pnO9+B(o;}j0WX@L>=oHn2j6;bA|&~tm!Om6dw^z9Y8;Ny48E)kPQjGZe#9*V97 zqTWrDXgrU`f$b9{upbx{U)~AjWsL|Z#e0dF(PwzCh3*U}J@J5XwGgSmOp`hmIY40i zfT6p+aO07bUmGuv7=mdJ8mprFsKP1QKzhp|z%mEdzjMSrJ;y&_*$fxeBJ-5CBg$nb zo5M0?6s!5pKyfWUYWcRfvFUKa z-7$`lyO~2Xwbhk;w$cEGx*syoqIlyFA<#cUA%DTQq~C)yMSgr}6ugEXZ5g24EjGpP ziQ`?xMozV9H1H{xX{b~a@6)0T8bp<7d3dMjg>jB)^Zbj!X>eH-(O+K$Q%9WfL>i8A zWDj#>ca}dyDGo^%^`RZh^p16iy$}s-GqT9KIvF*|R$Ob3KYjYs5oQ7(rF>oMJuIiz zPCb^G#Rt{P(6U*SrAfP^g2v2kPU72OBnw=>%@FUjKkU)ifI;8ujM)@1{d`3IvO5(5 zKA*Z3W4^ML-+g47ldHc<8X8c1XsT=o)Rb_L#d*uRRBb(2rp~h2Mq0bo)n$70@c_1K zP5Wo;cH+16^ep?EZ~A+mq}6oPpD(+05`bYna)G$vU)`x`8g1vQw${D9vNq6E21kIp z{N_|0yg@!>x~-vgg}S;@j|b1Lzt^5^f0H|q%J|G|audvgnW|C?j@YJDGRQzkJG+f` z99>ss@3_fcB=S&be*(eEY(iZ&c=mMK$7@!q7JR`}-hD*NEN@G#IrRuhod>=$PMj$$ z0&i&YN{dge>G#L%yJ&P8xdtcFXb8LT2Uw)n=qaQ+vpBVJ{fRVs6I*G7Ui%{Z7+p$oU)&ji;s2C2|%12T61)i$s?lIU|L>*7lZ`PomH*W;?NT z+EV2-g%-6o?f+2%U2+5{X!aIe!8Zkm&On|E4rQn_h-D^p0%b->CdQu$YaB{h%B)%D zy(RtbPiWk{OHvjaO8IR&%dh*dQ)J!95Y_DCYHaTFqX-9R824;x)OyGuqE8%fCBQ)|_1rNB`$p_plIzZDGQ#U<4+2vvYs@??n6x{k@pn z4G`$oO#vNl-iL42JcDjI_Zru1t%m+oE@R zu|uO`L1T2Nj+`p~8kY$3Y7-ayYnq|6J3MP_1=)+h56mx`sZEDDOqI+#rzmlIN`nnj zJ-o!lUZTU?$`j2q834D)s;pVQ**f)lPkrJCKd^`5lejj42Jj<15a;%o59ly}rn0s) znpN|($q@$^8xk*RCd5npU(k!p-pEKxM7>3%#kEEU zCopa$8OF`5f(+xj5;}_$8$W+f?2CN`<_~6?FZ^TH*r%S|Rw}^&q9>v&T9tJYuoTuNet{Q5D|X1x6T>x05bVb@#cuzwcUu0#UPk`` z{-ekD|KP->Y*uTzIzzd7MQL=gDX1 z*&UX_gj4vBx8xCO0{`(cDHJ@3F#Hh00LQXvAx2hLy*2+rdKUad`eq~fh1dTCQ8AT| z%ZQ!(e`?nGYd0TG3~g5H}t$W9ZzNnsr7I@uIbW zP1P`z2?to3Icc$-Bt*5c$K*CBXr_vjKN;_<<*IyX%tT={JBAK}$^Xc%X<}!_hkjC@ z&eVWkWf@hT{u;_$J(+9Lt9qw5D60zX3liid6 zB@Hk4z~4)1U{%hs#jx_;;_ZZF;IOgN*k+-h)Xc@(!+fRxv|GYmFVW8!Tymeu;ocOm zHg3uDuEQAWD&k)b%tz|HZvG_K81uhOyXqO6MT|{j7FehnfX!YY^9txc%D#A4^%wQ^LKYSdokC)@3@lK%3kqt$Uu1 z&D+hVyWg#b_)Eyxz3<*<$tTzlZO;5se|ySM=S z0JESIKE}{ZxI)7TVC5hxQ1$r!)4ktcgTOEm{+(ZqWdQFKDy@@w$;XK}&(W(2U9if) zafrJVx&rH|Q#g8Lmsha!m%97AEwHQMHZiIcY)nMcm73c>?71b*^E$aax;^AxRJ_9r z4IxV{mviPsYRGoLR(%76Mm76qBMO4;N^q7R)g|B+ua1qGfupYWpN3(OO9;$ZL^la0 z_Yw=;zPOTN+siy$+VT6Ot7GSZtM*ahYbeIDxTL7}=5F_L7VP4W;h1|-;S4DTVyi4Q z3hyhqsAEiWx0vTf6boNLfvb1Ygu6yAAve*{lWrhMrFxs;UY`8R=S7LCjNhM4IkZhE z_+2)M;h`R;XYvg{iM@y1>K06^h$hQgmTjGJe0d#OkZAWiHAit3 zy!?Iol-o7TaszmFcG{;M*~q0OGx6=9?}^y^96>srK96^IZ}A>$MX;BugP4Ea9`OnS z{0^i38H%Fihyk9!Zrs#i;k{@60auEX5k-YPba=hfKAUos3W8^*D`^TrjQw^8wVTdd=^1M`0}Ql3?-Qxt?|P$v%H z4i!2@Er&|a_~mveo>V&tyc%3c{DKIO2%6ZfK{{s4mvL@KUyA^nRNo^~M@0b>|6X3f z2}Vx5)_-F*lLvvMnJ4BbqB%-9e{a=!o21VB38#BKB?R*UGhLw>hx=a%5UN#kBx)OG zh6=qKa?$h;I}a>XAvK9JrW3e`xxD~~HS#fRe4~1i3a{XxwE-EAZhpky7UZ*ue+s&X zP|kT^ueJfX9+i`wh&BLe;VUvIR_sRtiwbBN&DH~fMZyvsH!S=R;IxsRaY%vEDMfWV zYNvJ2%!I!038wmlruu}Y`h>9~ImT39dvevx_i^U?xaRw~=KHwj`}Ci0SAWs@ z4J}XzMENfWftLYx-7>WZor^7-d3mT_N90%=5_kJ!6Y;6lpw0-Z!;t zL)u`Qot?=<1zOs|#x7i_r8#vunAB*A0qu`yL#I)rZ5?7OzlnL4Wtp@qg;`(8!);|> znP&fB@qsL_I#1gu&EbXb?TtiP-I_jb|HDD#EYpIUufvI*=0qM6a07*BNmE_rR_mmo zy@A(o`jexYh@)mAj+%)$Y9>OaeV4?Knu(Ap-z6|2!K0Xz?}|ot)=BpMy^g* z$pm0VMukkkQBA;6O~C0t+m2VC2ptS?;TjGeP~Q(pxBdW?rPo*<%46V>7doNYx&hdT zas^TSEOhRdb$hah2Wt9|B$(1FNG`j{pOJdp)M$0*BQbUO{r4H-%@%3C|u#DQW6T_4(*S*xK z_USbPqF#l0EmS|D3q^jVZ!hQbRGM0p_^EqI?b=Y)bGRe_$R-dVrvt*#5yDrfUXsT` z;{>ME@5f^kDk}3+|G`v5Y==`Sf)L~+e@I0ct?Lhkc|q$M_jFEQL@)Si{5THr@ZIY4 z9dSqi{DxPQW7%7_V$X;>J@qP2mCaRUAo_$7C4LE18*-A@Q^H8Nd+;BEI`x2`dA>3~ zK&H`n?s*r#P#f+3GyTPE{0jcEY}nP=%u7L*TsCsq;ZH$Zx-zFDN|Hm;`T2}miWI-a z_?*(Pcs5k}8@$84cmHTIe-As|3)mQ`c==PL^X&(Tn_Kh(U61k6Z~I>gfMzkHQhT*( z6obm_MbthuzN8kOpiBII-LyvUrRDk>f8C}suWYI{tR7c%ZKrg$Ya8q+HadNu)3AnE zh9*eWC=C`wOrv;fy*qbmYNIm#Gk z)c8F;fl1?L{Lh_WB|If|G{cywheYr3)^us&H`UonK&(2g>%@&d06 z=O^I{WF@86F6i2rhljiU2I|i8OSG4Cl;J)FdZJ$Pg@~N7%!$dd^&$nzmOoV}i1Y-) zk!=8Nn}8-Hq1qt<&IA}iBncbfo87Vr8M0UaS^OlEWXWOyH5JIz76&y&q+$ZP3+^uM zqXx2g4ecpXHU8bIkY|IEdMZNwBXDH zwy+dYZ)T#4_#$j#u$N)46u?cc(IhT_lx%ZP>yI@F$~t` z!OT8{`GuiDav^)n>Fbk=1DbY^U<*}@wYVHe`ksQ0^gQiFE?;<6nr_n};fdg)V{n8c z+MLLyDx=DWu`gNqYB_K_;C@qQj%{ASW^uY-qyA5@n6HJ=M4Fjau+08ev*QWMaS7W9KV~zqlDIBHDl7JMb^pZWfj`N;E&y}-B9#8 zSZlcHF^)^gLUb2Jw7>2X?J)0D_#P4MLxxI!$WrMyUuAtN@=}^o?-HT$KqiRJi~9YN zPpNmEM5%*@*aRUqb(FT0TK+qOz7MGiA?+x(Tt}eqX(v)+US#URQf#N8y#`a)0euZM zPe$|%by}Wm_vJx>bn@h1PSiOFbv_2{2?`Y=EtpF6!JwXmzM_NPXlBWCbFSUgh%;ZQO!l zqlY8-G;M|!SlWCji#ETZ6=Z00D1bu)huX$T^Oc+rebVfc<$O{^mVKH`yCpmW zxQO4feJ)uzE3=$*jA=Jf=(W2Q0&%VJXc}D%sop4j*~l7$RMR$P!jv)OTD7b0&_%*~ ztl?Ds;eLln_i46Yxlgx^XK%lOlW8~5t`wy^g?4Yz6l^&y?N%_a&Ml{<-CIObZJaOB z?k|gWpP@6^G~Dz;v^fj{7~1SNue1ye_uEyP5XP3vZt$@*grMWoq2p>=<2JSz?ezwnVzU%5T|UA)MIkSWO91gl zo83`WN~i!+2O+Hj2mr$$g!D(Rp)$nHbE5E2&Ci(ht4J?Vy4Z=fZ6Hnaizee5GRl;} z;-1sK4a{lY5=i0sU>3D~ip)w%%;_{f`N-Rg6zuE#MM}C0k}p3=V0H6m(>tySF&n7Z zv*2nv3V1fDYXM`OmmXii@Jz;6ur08&LJG8-86RcR{>c;3}G_esr}$~_Jb9&x~CICnY*$dyaPUtT;y4|<>j#EiG{F%SlEw8 zWuU3GG&OK9AIAw{bJ%o>M0G|f&vNr%s!#6p7 zGlb!(v}t&Xss1n&v`lCFDib3?bU!RUS@#QJ(fu9JePJvf6jZ2DWIwXqDQdwPbkSU# zK^L`c*XkYO-!T97@h{;_r^s{_nXV$!DI%)A6Tbzi1($jeiA^rl_M&DkR8|W2MXXE% zptR#?s_#r>N>&l(;UuP07NOv1sY(_l}`w+Yy27q6bH1{vSQ;e^NFusnN zekX5`2Z!CsHmp`Onr5Rudg?TEP3XRvh6NlEE2F2L5Ko;4B1oPz4^bpvb9KU-s}tVb z^a<~E9PxDh8US;83mA@98^I0(hUCvlpYbg7AQ(TLd%Z%BOYlq8KJ~lKO-ZIX*L<*#J`f!TfIU? z&NIs~8NC^g^<4@Nv`*5QhWy^@l_&;W=ngv71HCmV(tE2{r-d&qezTvqwRgRd4jt4` zxtduW+cZhf&}c=-+-OwMHetm-<{@nf${Cyr)WSuW9iFx-<&gpt})ZH-SSre86W3~F;o;X=v zk3OxdO}rO>#$6lo@1At`Ie^it8ECBn@^xbv@P@tW4L9{RZRl+ps2%%}zG_`UUTcg; z;zwUqSCrVbA?o(11Ma@$adE-fJ#Hqwx2Kh--{V?-s>f=+_ZuyGdUu-NZ9Egd`0La4 zxP&aPN1xK;FL(Jpc4y{$HA4hRR*%)&XXi?9o9#5_!sw21o7|$5I;wkpX+TJ z2E?Yr^D-T-zn50VLF{)}3Y*y=u70?;`U%_1rUx@!YCYVS_%TqExPo`E&o^bA~1uX4~ zDUSCT;OSb#@?QQf^Kn@Z_SfT8wqNw=Uyz>DTeI3M_THv7Bhzj&a&9G=tfnw*i&l7*PjRwkS--^<&{s=}Q-q8(pV!q94A5&oC*@VItQ}iWKDMB2Y(eSl zu?0nA3!?R2(~5epW=);9X!UJl3n0~8K1}mw0h7e*m$LX}c4!v2*R--0J?{nO0Ewkn zI<}z1Rx!4qaBM*Vi&0ZBp@ytM9-7= z9{AS`oDOMZGyiLF0!Y=Pz^H#8H(IH{(5<~_-h7pqaBrPGjMipg)T$0=Ln-HC44ZF0 zdk~ol(vYzg=@#6A{C`J`JjA?oZKyQ3HZ5=D3cOJn^5vPQqKq#CT#1+fv;pV!33t(} z_`!Ey`RsZTZ#WZ(x1J+U>0S5PesJ?2>76~EcRfeGFSa~=pVGA-zZh~2d|TpMiznkc z3`w5uw>Zl?@r^Kx5;>H39Q5ukY<-v>)VBtANndQNyX)?;+Y&D?nhXMlJp9g?i zgrdsiLOx%JY6Rl*Iyqjh%h5{Yp93)NI88hNTi@*48kX+w)=I4AwupOm_ab=@f14h# z7f-rK8S*zm9GVNYxh)P>99;BKx4L{&j&@eF$ubdWd3*fRB<#~TehFW&bb~a;Groq( zao#eIJj*8~Ui`Lk;WCdRT^k6k%?Z!Ax2OLoTS=)yicJfoAKIOMo!rXzQgb7zl@b)S zdFph>CB{jYI=*y+M&!2)P3!m)7gv_A4O1;wD;%DtPxBAGKaEiRE01kM9Y zZQ_o%&__dto)mRj%}tbi&`4d@mA9&S?m_n`t$2OLM}%zeWl&q^HJ+2=>Xp}f%xml% zj7$=9|H|s5D4-W`X(o#w51BG_j<7GhMsRL`v}q2p)g{(8@U+iS|8@%+U6|(Jo7G8@q4WP;`u0Ylbfeov*k}R8pIWv zAL&@($ha^)xOlWxN1i3hAuNr#N25q9aJfh0{)OP~-d^f%C0rw?%6sT)>^yY(HH5fv z#G{eZCp!S|dNRNk3l8g_qi%Nn?AqCh|Me|Fr9fxx_Qj8@yB8t+XuV0ba^RkK9g-Ae zungyJ4abgUB=;ut%o=Ip?p#7dGWiXy_t2$86~>P*Vt%duL_3WhGhLWPL19%IqyCW_ z#3zMJp3PGwmM(_zPstfEzFjgw1u9|Kb8)-v-L5$#0Xx5))X^E@uzpI95N_CG(@|VYGg= zhC=je%$3aAT&-^1`-H$zI8tUtp<i)q?(XEsXQmJGcZVUgg2y*YmA$kp2PI9fD}-_P=C6k zuTl|z_N%^e%Cz_{aIw!2BQwkRYpDei{$BH#$>8Nx^zZ}`^k)pGjC|6U=m*I=XFw!48wK#3mRdAt4^^q_<|S<6Ba^-ovZr)Qc_qJ+z@6=m}rE z&_-X~67nr*&9iExX-*&GzA?<8H)5?n(>T z*c4$~DOLBz{wbCG7rMm^TU?pXsYG+C8E^?WUX@jHrs9&IQ7Ac zJ)x-f1NsS5!O%AFlQLQme#%;#q7~t%tg$It5`M~Ro1!)0#eb-JR@oFS3P0runZPjg!<;QZ+zQ%ShG8NG&H- zLn5`3+NuDW#>3ATIT{E#Ql-}jNR4wJB|qfyMJ*5K?QTsuC7Q`<5ykQe6u7vL4-!eV zrC~BaJ-r%UW1-}1H6d_$KS{lW$n@7NAfP4=4uxpgQ6C4aQTW&>KTUX97YgCE9~fn^ z<`c+_KLvF08CAkfEU&tEE21gk0Y6K~H4uq0cI!}t)H23mAi~8N1$>B9Qoul@(SX1} z1Q1ZE>;Vi!h-Wwsky^?dh%^F)J~N+mvl&7rwztIqrb&RglP2dT4nA$bV8$Hy92E_--C?aA zNg2{pYuF$-mlayO^By#e*hmpWZ~duwySsB6FjX0a)lGlgx>6$+XDBxGWsw-mCfOZj8x`r9&bTfw|VWnnT@pa7nHn*H?xbH zw@%*77RsCT_)mh_LQSjPYHN+pV5u7-CnOm9Y)bUmgpgW`ahzL|=86nSYyZXXVLDc* zOm!Iu`iOqnS$1O&{@!i>PD(L$R~do=*+n)d5AkeLNE*DxK{l1bifg=hf9k%Qs9HdS z6pQ+Ju}!1q6nC2r5OrpM(N=)G+RQq8Lu7XAgG^-WLz>NIL$fQB@8Mh3y~?iYvZ!Al zkdcNpiz1JoQh35EgEYal!t)ipLK+e^rCxhKJGzO%CrV~|6yG#TZjrw$d7WR=jFd3x zX42aGMG17D+veGlWh}pWUgyS9ij_kx+No4!Dk*c17yla((JIPx`c+ABb{1e;qTx5* zpW-!6?V23_%UZf(D19Scu}fVO;r;hBISy76(sxKWXMoCwJM1wj>2K0>NbAZ`Bi|UAnYdZEmj4C&?Tp zlAEz;bPs!LK1knlo;m5i)7%#d6Wy7GZbOM~2lL!XrkZ+pL3uq&x&8aNCEVXz^Hy*5 zXlvf{=8A9=#|Pl@#Gi`_5_5VraFcd*$Yh5S|LA9=kc#R$5dYFy*MX7Vo_0w$PQDTB zOIH)Ntt4t~HJR(ZndMLN9kx4qCRIB9MZ|CT3j4+Q9U`CTF3>mkF=je5Z3xZ2w}KkB zks|i}+WgMfjRHZ)t5aOV@uiW)S_`9_Y0R9B5R~bruaGM^Q|73tUC-nP(;d=vUP<~o zk9tr7pa*&;1C(*A`wWE5bzT|QdGaBjTxB5~4%4UVGY})vwx9OqYnumLv9!os=xzkMjMJXu9Ax{g-4J!%bi*}XL{xcgjlH|IQF{Q^h* zwQfT>yLt6KZta_&9{r`@J(ZEG#{_kN?5S`zQU5*49M^5fiZ`=D@o z3VCs7$`G%8nw_uqbGcngU-78Y$vM=adXr@P;k<}gV`y_nRt?4^*l;PPU@XS0rD;(}Ewl)ChZVTlvEbH|In%-}iTfLek ziP^WG2FBHWc8I`u>KD%h06+dY0l3csn2`YBNpAHr=N6#b=k6QHv+Y;+ zxz#UJRQEZ3LqaEDk;7LN)eKGBUeDq7b9%-)&KbFgr{gwp=Qg~ldKo!6Bl)u!=L<)U za^rMlSCuX#mE2o1%t!fdLu6C6s?6C`{T$C63}tIpja=e3gh{aJ;-*ddYA(PX=f@Y9 z(EDW<7rxEi(D}R;WnPP`m$@~=f&OnEIqIgQ6?_{txHlKL4MoK@Zxy3<&@rIv)tU`% z$1>K0y91nvPr{nx1sr_V3~&S2TeF5sb+1v0Z#j=|3{-D0hli%MG9X^f@k~_b_kgao zkh>o4x(e%io0fUiYihlkwRNqff^0dD#1|a)v8H8R8%nws4dk?63_`hEj_m5~c+Ta( zlbg$J-3W^=ViSkbiL2b2XWZ)N2us4n6lgu<#d1?WRl9X{22Z%Lt9in|W6SD^I^s30 zsrRZ^)p|{<>szbTlUaHQQqr=R0k_e$A%1J1V;Fm;PnuawrXW^kM!cqF<_hl*-QB5{ zU%`}jZ75Hpyzt#zG3`%ZF+oSn6_T}z?B=&fi*^j(D)K8NW!>kP{b4jqpJX<7JB9Ad zJhxnPC~aVOLAYy-z_|M$nqKf7Aw=!nIkOW7o}WZtLf(x=*XC|!yNiHveV-O>Z3ubw zS*m?klV)h3?|}RRDuV-ZNx;UPkWb%KJ*?V$7ro_n47*>|{ZjnM|6%TJ;Oi{w`~SA* zAQ>FI6LtgXyH&=&C2UA_*`_q%Dag^U&%RS*Ouq9;!lu*ffmuyL&@_|Iw{K zt&?qRb{pF6H|qHRMrRUgl9rk#r6i%$wm^k*NQI~C11YXe99XNkCU<7-e8cyX+0IF5vQYf6h$gy5KNC0!)-~!yQ z2MclC99)X~7Cv7%E!X^*f4Du>kgdQj7ACUU9J{;8KmL9BY}y@3Le?4Y45pGwIn3Y7!?> zWkZi^YFsQib~th3-`)4oOS?3mvLSE%hmDZMf{*2_WK%0}ReP^lv{q z2gP7+#SlwA4DoY4^XM(%O0;MF@eT{`u8&bnj#Ml}g?)^fd0jKasPSl9v41Uk!(`_$ zi-cQXb*FdR6`y1lRAdQJ)8agtd&Qlugja{cO;;=W$t%+8J`4F!_o+`G^ z*Lrj${lRKXjk{VWfCXdV2Q8(2e0S>$BS97Q}x8Azm#rR4R?apVi7ZcgM z+FlHC^Xht+-r=pngKZV=lB=HQUk1;;9z6GYB}xiLqU0DM0p- zg{I=Th4?REU6m95`7^1C5yeJV3g*uJoDJk!mHs= zf_*6(q0c4lenoo8{=_J+o802vG6+^!VykW?cq!a2)5-oet$IV0H$2!HPMYcpLtS-+o^a*YYS6K_4eX z+wQgb^bfmc2vj;~I^_ZGfa$M)O|t}rEBEBQ(djk*Hue0f5FtzVX`4zFYg5{r)7mjd z(LKYLPgd~?sWI)@YxG5P34r{*k3)yl(9MQS{gXZR)xVbc5YJl2=XgP}Xq6)b!@I*v zdA}?=Hpo>SFPs_c!oEdr20|dU%+cOEy!n#@d1csBIj)7hZe*j0L9ew7D$CYHf!@3* z{&&QgS|ogT*$7R|%Dji?_;89!a?xt@@B7_L_O~AWX}H8uA_eA`4!FUhv*-JQ*3Kx- zj4vd*%~4Ss5yf}DyZ(*V2^bIg)MkE!RIsFd_>gzydUZ0(yYgQBIg35tdmj4x)#DFS zk;t7}b5fsv)PEnoT(|Uw3E6$_vos_-z_kbdu2k7$lO>&D$*#$g?P19ilO=y;C0J5Y zWsgi2row7lCQH6(CI0wi!5v|hLz5+yVM&ktyZ;iB*UD8x8$K&b{muDPaQFulI5@n{ ze7ZlX3Il>e1w;=3gx9AwRkP#pT`fZ#&+OAhBaj~d)_k9^RfEk~HzX(41?|y}#|UL1 zO2N0+{FWh~GyVEFH*X*1HR4#e5}2@^1$6EC*H5(*SJYSxfSFfrw5D<&o0?l|5o3+} z7DD-m`_Ka>Ri}?(I-cl>Wnfqi!#lt-6vYrxKFgId>;%j7fnojcwTUNmA2yV6FPv=Fx1eWI7;hKQ9mhNO+5 z*2bU-R#)}{sny9|O{!MImv{J-6Eq<)45w1VNoqK?Su(oOEofq(;TqPDe%)rUi1>KA z%^+5>I>th|&FE8>4SZaNZ2xQVX7GD$FI%4tvVKysk@Y-rQxo&~3ZWZM)D-Ns?VivJ1)c z?LsG$?bI%GY8N^e%ZI$f?Sh*+7dQ~!^BErm8R%}4Zy|d#tEk_B6Y!O4OH#-I%b48i z?688Js%y^$&wwP~{XpNT7$X2Y85_^88a~9QZPftY)-x~-FG19TsQJ6VTTL`Qk^Xb; zNs~dF3l+PJuXx{76^g7@Px^DNR`_bR{7|~el@Gtgd*FI_Ev~3=jUz7F@Kc+dK-0|d z+{{wJmo)y5%y#lmqU?b8;B#V1$`1G@7zQPaQ!V$}v3>|A9N2bK)CMJek)3J=4{@*T zjNILB%t@5p>pl2g)oQxeKjW8eEE;#$bDi;bxGo>!tPP3>BD`?Fe|K)AsfS?YvWJ3_ zeW{iW{@n}g%lfs;r?vp6Vkb7H0*Ro$?TtT(80WX#&k{#5KU@48v{+<KxvO9FQtP4??otoK_sN^+@Ee+6u5 zZsoWDG&#P2&nVlQTRsjn=MnGAXY!1S>t=@iQyx9T2lurB!nKwGpl)Uc0AAv9Pd>S1 zna|R3p+fmMnE?u%$3L$(o}ofs^BF4Sm7bvj4N{>}kpM{-3DEM8x9(%iD5JxFau(t0 zg%ertS7$%SQjC0LGZt}E>8&BJS6goGr^0bDYJZ*S)T6oudT9{a>8>Huz zkE^_PT;+8d^kia)_$kIl&I0ErUw39PXh`+~?ku*bJB?R<{n|0N#kOye9-yh=RtGq~ zgVN#w#N43deW{%ypUA5~3?M`_RS?_fTcKtpMm7dmOoNDffd~`hgBYUr0e_SBe8R;0 zpt#fDBu!PyU=;8Dbua&v)<+BnMdHR|sWx@!J@5mN(GQY*_XofqPSm27o*+7!GAdAX zDl%Sl%FeySX{jM*rP>5x-Yutmb5|yGihFc>mb4dH8wr;b(z~Ve(sBCn*3X)W>k~~q zx21pU2SyO+O&GPs_3mvuRaAB;Ww=n(;m*WJXOVL+O>}2vj_JMbS+YOubzheGq|Zw` zz4hbTTU9JH95~AV}Aks$M@SWBf2~V!nZZ! zkuz0|cUP{7sp3sDD&Ft49gRtAA-TnS;O+1ZP^GHvDSTzCLM}jLsO)j0LI3P%P*D7g z*3qxno@&|~=`cw%N>mbDyW=mQB~8c42;h~C>Q;54iGD;f1cFk|_!W;h;xnFV8R5=v zpYVqkWR~2E{gy45!6T<46+@|tH0~TNN8#+(mZ3edO@rc8jHIeIqm%Kg(j;cF*YX8c zI>jUoRp$d=)kIk3<-?bB)gKY`R*d*nDCwXy_)#Nuye}w0y`gfK8^l}xlwgA9t2QfA z$}da%RfrZERD2A)sZ^pZHJ_V*f}hC~{H)F&;X^kj)Q%ZOjtL_x$Apo!V}^@k!nw*Z zaM9wNs9)3PU7bHdy}A>6r}>25A&U?7>Q3mL<`a4+d4hMU>qc_$J z36iZoh@>?F;_?g>9$AbdUSgDBVqiM+kLRBXVOY%M{BuA|A4A-193wo-Ch*@g+&>Yz zvJF+6$xg*y{ZXVJoN0Q*Z`s>jCL0Ov9RsO~jVw|0!+ymUzv(!63W6BY*idB5Z`oji zo*w6mFvcO{4g@#}90*v9){)^$f~Y}js%)=cwbv``k0A6^u+0Z(QmyZaps?tfsMsEq zbm8@$KrC(NGO0ai-U-JxqC=`DF<>>9jlpu;YfngS+j%X6NwXRufnxM>w>1vc>sCadLl|zQF;l7om$G{+Z4`28ghm4H()}a zA`Kh8wlCyNCk<4KtJ*c_gr=%(_SyzfwasX4fvSzqsP>50b}iK;cSu`geCJgZ_ydmb zd_jDtkCw3^e@cAFO&Wh$*KMbm@s{Eeax0C&tThI+(HP89$CMhIS!--&qp_Lg-QeK7 zq%oUy#%wklv)KcqNr-9^R7nyC7UPO!F8l*uI&`vy7b1J>bgryfh#EhAoSLDj1HTpaf1+s@)K`=@p9NX7P#*tiEj@_Z-6iS3k)=McFF7 zA^Nr+K@^l9_WPam;dgbHJtE*M>I~u#?MK)y?gIoRcANgKqyAMJ-9_Q(SW^Z!ZST=e z8JYfX5;hR=*!x=TeWUii{QP@=^|Za$2xHoN$y0e;@~CiD_TEBz+q0XRg#fCQ^@L!s zRGV3%k7e4?mpHFztE}f-SU5BV3#F=mlRnDzv78TUGkqI3Nr$gbLIr34BviOspZexx zCk7u6XR&XSl*A4`j%DEks)z7*$SYigDz)av5PQK$bBE3rk~>c7VI{1hAk5x@DIIO~ z4@3As<5x`*o$437!o9%9Uf|<-2Os#h|3dh9zW!BPM-J81K%X3>Nl_}r8BQoG05;4> zwgRg<1ns+k_9gp6RV8sf1TLj8rI=CzSqIAnmprE`dJ+`~Mt4zJ)V$(}pg1Shbj$$p zf0+t*VNl$cYIWR=}%dWOJ z)?S&adc?AhwSaDYfPEaTYhIjmI=%I;N}z^@R2+@KlpG=nT@KadlWP1;Hu7YokL75%hM61xv)6CHO23EGQklq_ zxO&s(4ZoEa?+|yzy!S@>{FVdK#6q|#o=7zv3Stpq9_@H$pCuFfm|u``s>mE9zfHd=U3TNx{U6*F42QZZ#>F%qSM|! zbiud1);}L%1XWgJs)bAorAu}XALied)-%!O62A+*YsC|xl97?1XfExyk@VG%khQ8c zY7IT1uGEn6mTzQU#UlZwA`N9K^>u${<*RBsQ)J=9nJt*GmynN(3;g~?`bT{|mg#|^ z;0pWy>C~Lf7_ZkX6twRS$~G@wvk|gy!9OcfH?;?*Ra@CT>vvhQ?y@bFU`YCFzi-w| zxY?kpedU_XypWm`m}+B1y44=WT#N0P=M+b@e9Z>ExWm1eSw23k%Zdkj$yWDK%w5>C`%sqdXPw2&ugk64@1(}@X{ma*EpVnpHWS8%=E;qF6&BtyE zXSp$`+P-ql<1@PahCMuImapr@eeT6fK3y8k&U_Es|77R)E??6=t@EMD&X-u{>&Ml` z?`Au{Kd9P@WB!cJ7oNZKMTdBCW!U+*PfT^$_9d8&ugju~^>W9J;gs(U zsvcgsW@tvQ|7Z`-nR2aOJmg-?yp>-4O%jRWy+E!P5Vj8aOY1X9$QTZ5W6Sto4PBAk2p1RW+!;%9%5>^P6OYck>V~aYe|7#e*?1I4|<7= zo<~35dVDz+94Y6Y@ZYy&KZnOH1063!CRO7fyw<7ak587oD=bM*mdp)HMs)OC&S_vL z$X`lgy*W0eKEICwC*C^s`C3)zD&k0eZMPj9kuFr|R}sz6I%U=6QSxafNyE#L(Vl>@ zz*3pUu%h0T;v$lkG%KleS;^!+M8X=`5n~u@=anmy zRx*ZSwHltcM&6v2dpOePRVr^*veK03I`APp)#|6xvT9W-pB7JbGVCXdmdz@z* zVYc7N^NOQH-Df){hZFry>k)xb9iH8lifR4aKDKEfoa!QlA%}U>Y{{+`vE5tLqrki< znHc^Ab7AwCe|OyP?=E|kC7Go~#?uC%W_^Q_?o`WmX4Jzv`ArCJ-6Xwhd6beU67sxK zsq>Q2ac0<#!H`~iQ1L#WwIr8q)jqHb6eRjN@$QaWi(6?eh|&--34HeC1C7sFxj0zj}i>d1BZ5!be2<=A?&QDJ|Z9)Z&*v?F_rQRiH_7 z7bAJm;_y}<@NT>8Uhvsnk&e~*o==!I`ky3N-b|uF6aI*0E^_zz3C`YF(vD3HGxkCL zd<=2%^-DXv^}CVpvifTxXYq$%fK^-5pZh;%wXWKV28r>M9o3?W5%cc*7+j;E|Awsb z=*zT$r_~hnuc2T%^jGs+jSL9|m_=uZ0<70X8<_^Eune`4&iU7=_vxeZa?4^xzQop; zP=lOdvR$kaKlv=f%!lvpuRlcA1&1ZmP~#wAz-tvpX;F$A%Wy^1a<A=Ik?$PoY1p;bErq?pwR2dzCxT~;T%TiuV9{B3xNFsaS+>#`sySi?VS;~97 zb)}HIOn9}z&zYH`c-6VIcmF;6r(F4SBmSjl4F!VuX> zb^z!&EC)H=egmoTc8BRz+x@1k4&MvZT0RRtFKG(zT0?z!KC#WK*j&&HO}*R(PSx-8 zs~&TZmDtm;iZN*<7&-w^5l9EPlY`;mr;pmNM@5O69-X8O`DVKm{+yy0jJ(P!>C7T}r3l|F6!vB%Mjq>k`^-UTB1Egdxb@dOn2-IG0=5 z0kz1j?Et@X8#^Gm^GZd}=T≀Ip=)kk7`BrF_0wg-I6x+9ica7f_0kPZqh(P+`*a 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%0Au5@PPVC%_zk-w)wpWPQZD|3oFG>rK@B2 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

>_DEhXOni3@_npHk+KeD>AL6tQTkN!F6_ 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 |QyIf=$g6 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 Z=KWA~1<=bwNMKM&b95NFmH#(?{Tu!x5mW#G literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Library/win32/isat.lib b/Buildings/Resources/Library/win32/isat.lib new file mode 100644 index 0000000000000000000000000000000000000000..87034d71d1b74b00d7da59dc6c9f335c4af9b0e7 GIT binary patch literal 1664 zcmb_dPfr?A5dZBirF3H~DLomR(1gT#p|~t+6JxN&M8bjw@yd$ORuTZ0gQ9Nx&b0RAUe;}_lxD7?P|?0Z0>%j7I$jfRlj}K=)(6ad!F~V z78k4@C~I4Lm6BiBsBMsW`}l+i>sm)g2zH^P&IVCODC~0sxUqm9G4oNC1`L>p(9a^j zVdEbk>Ay4Ml+u)v`tc_uH#_lyZnsE;NjE>*K+f&#B!33#`-TQW(AF z5r3a$`RE|+Weq-uLX1^$Rl&7?UuC|T2X0gYthg1k37$0ro# zb=@%feR0P2JUA{Bl5HMPksgXf<;7ksk+^I_0t{_(frRC+nCQW$1H;Rqy$O$Kc-%|} z9ge%AyOYsjDs+5PQ4tw~j+RmdWCR^qkuo~I3Zqv>$MmZ{Nj13wV;>M(kTGdTIV-`7 zARYCKJPc|Zx}$P(O^iV9sL?UfQLf0@?x!$%o!;F}a-VbLbvpRVzLReSe-pSHJ%eAU Ogvu*6@@`9&U_SslfhR-& literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Library/win64/ffd.dll b/Buildings/Resources/Library/win64/ffd.dll new file mode 100644 index 0000000000000000000000000000000000000000..5b491e0dc070f24032b784fa1e2c256301821668 GIT binary patch literal 225792 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 Jz0J2CJ^`fQAkzQ< literal 0 HcmV?d00001 diff --git a/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.mos b/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.mos new file mode 100644 index 00000000000..5d9cbef48b9 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/FFD/Tutorial/MixedConvectionWithBox.mos @@ -0,0 +1,46 @@ +simulateModel("Buildings.ThermalZones.Detailed.Examples.FFD.Tutorial.MixedConvectionWithBox", stopTime=180, method="Cvode", tolerance=1e-06, resultFile="MixedConvectionWithBox"); +removePlots(); +Advanced.FullPlotTooltip = true; +createPlot(id = 1, + position = {0, 0, 2019, 1080}, + y = {"roo.yCFD[1]"}, + range = {0.0, 1000.0, 240.0, 310.0}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + online = false, + filename = "MixedConvectionWithBox.mat", + leftTitleType = 1, + bottomTitleType = 1, + colors = {{0,0,255}}); +createPlot(id = 1, + position = {0, 0, 2019, 267}, + y = {"roo.yCFD[2]"}, + range = {0.0, 1000.0, 0.08499999999999999, 0.11499999999999999}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + online = false, + subPlot = 2, + leftTitleType = 1, + bottomTitleType = 1, + colors = {{0,0,255}}); +createPlot(id = 1, + position = {0, 0, 2019, 266}, + y = {"TFlo.port.Q_flow", "TOthWal[1].port.Q_flow", "TOthWal[2].port.Q_flow"}, + range = {0.0, 1000.0, 8.0, 22.0}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + subPlot = 3, + leftTitleType = 1, + bottomTitleType = 1); diff --git a/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/DataCenter.mos b/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/DataCenter.mos new file mode 100644 index 00000000000..e748d773f15 --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/DataCenter.mos @@ -0,0 +1,33 @@ +simulateModel("Buildings.ThermalZones.Detailed.Examples.ISAT.DataCenter", stopTime=120, method="Cvode", tolerance=1e-06, resultFile="DataCenter"); +removePlots(); +Advanced.FullPlotTooltip = true; +createPlot(id = 1, + position = {0, 0, 2019, 1080}, + y = {"roo.yCFD[1]"}, + range = {0.0, 1000.0, 240.0, 310.0}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + online = false, + filename = "DataCenter.mat", + leftTitleType = 1, + bottomTitleType = 1, + colors = {{0,0,255}}); +createPlot(id = 1, + position = {0, 0, 2019, 267}, + y = {"roo.yCFD[2]"}, + range = {0.0, 1000.0, 240.0, 310.0}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + online = false, + subPlot = 2, + leftTitleType = 1, + bottomTitleType = 1, + colors = {{0,0,255}}); diff --git a/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/ForcedConvection.mos b/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/ForcedConvection.mos new file mode 100644 index 00000000000..616b6ae387d --- /dev/null +++ b/Buildings/Resources/Scripts/Dymola/ThermalZones/Detailed/Examples/ISAT/ForcedConvection.mos @@ -0,0 +1,33 @@ +simulateModel("Buildings.ThermalZones.Detailed.Examples.ISAT.ForcedConvection", stopTime=600, method="Cvode", tolerance=1e-06, resultFile="ForcedConvection"); +removePlots(); +Advanced.FullPlotTooltip = true; +createPlot(id = 1, + position = {0, 0, 2019, 1080}, + y = {"roo.yCFD[1]"}, + range = {0.0, 1000.0, 240.0, 310.0}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + online = false, + filename = "MixedConvection.mat", + leftTitleType = 1, + bottomTitleType = 1, + colors = {{0,0,255}}); +createPlot(id = 1, + position = {0, 0, 2019, 267}, + y = {"roo.yCFD[2]"}, + range = {0.0, 1000.0, 240.0, 310.0}, + autoscale = true, + autoerase = true, + autoreplot = true, + description = false, + grid = true, + color = true, + online = false, + subPlot = 2, + leftTitleType = 1, + bottomTitleType = 1, + colors = {{0,0,255}}); \ No newline at end of file diff --git a/Buildings/Resources/src/FastFluidDynamics/Compile.bat b/Buildings/Resources/src/FastFluidDynamics/Compile.bat index a74781c9d29..6279488df03 100644 --- a/Buildings/Resources/src/FastFluidDynamics/Compile.bat +++ b/Buildings/Resources/src/FastFluidDynamics/Compile.bat @@ -3,10 +3,19 @@ ::******************************************************************* ::Set the Output Directory, Compile Mode and MSbuild File Name ::******************************************************************* +::------------------------------------------------------------------- +::To run with JModelica version 2.1 set DIR=..\..\Library\win32 +set Platform=Win32 +::------------------------------------------------------------------- +::To run with JModelica after version 2.1 +::set DIR=..\..\Library\win64 +::set Platform=x64 +::------------------------------------------------------------------- set MSbuildName=ffd set BuildConfiguration=Release -set Platform=Win32 + + ::Note: Two build mode, Debug or Release ::******************************************************************* @@ -41,8 +50,8 @@ if exist "%DIR%\%MSbuildName%.lib" ( ::Set Default Compiler Version and Toolset (edited by user) ::------------------------------------------------------------------- ::Note: Toolset: V100 for VC10.0, v110 for VC11.0 -set VCVersion=10.0 -set Toolset=v100 +set VCVersion=14.0 +set Toolset=v140 ::------------------------------------------------------------------- ::Call vcvarsall.bat (Not user editable) @@ -125,6 +134,26 @@ if /i %BuildConfiguration%_%Platform%==Release_Win32 ( goto compile ) +if /i %BuildConfiguration%_%Platform%==Release_x64 ( + set UseDebugLibrariesSetValue=false + set WholeProgramOptimizationSetValue=true + set CharacterSetSetValue=Unicode + set LinkIncrementalSetValue=false + + set WarningLevelSetValue=Level3 + set OptimizationSetValue=MaxSpeed + set FunctionLevelLinkingSetValue=true + set IntrinsicFunctionsSetValue=true + set PreprocessorDefinitionsSetValue=x64;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS; + + set SubSystemSetValue=Windows + set GenerateDebugInformationSetValue=true + set EnableCOMDATFoldingSetValue=true + set OptimizeReferencesSetValue=true + + goto compile + ) + goto missingBuildConfiguration :compile @@ -141,15 +170,26 @@ msbuild %MSbuildName%.vcxproj /t:rebuild /p:PlatformToolset=%Toolset%;Configurat ::Copy ffd.dll to Output Directory ::******************************************************************* echo Copy %MSbuildName%.dll and %MSbuildName%.lib to %DIR% -copy "%BuildConfiguration%\%MSbuildName%.dll" "%DIR%" /Y -copy "%BuildConfiguration%\%MSbuildName%.lib" "%DIR%" /Y +if /i %Platform%==Win32 ( + copy "%BuildConfiguration%\%MSbuildName%.dll" "%DIR%" /Y + copy "%BuildConfiguration%\%MSbuildName%.lib" "%DIR%" /Y + ) +if /i %Platform%==x64 ( + copy "%Platform%\%BuildConfiguration%\%MSbuildName%.dll" "%DIR%" /Y + copy "%Platform%\%BuildConfiguration%\%MSbuildName%.lib" "%DIR%" /Y + ) ::Note: /y: Suppresses prompting to confirm that you want to overwrite an existing destination file. ::******************************************************************* ::Clean Build Folder ::******************************************************************* -echo Clean %BuildConfiguration% Build Folder -rmdir %BuildConfiguration% /s /q +echo Clean Build Folder +if /i %Platform%==Win32 ( + rmdir %BuildConfiguration% /s /q + ) +if /i %Platform%==x64 ( + rmdir %Platform% /s /q + ) goto :eof ::Note: /s: Removes the specified directory and all subdirectories including any files. diff --git a/Buildings/Resources/src/FastFluidDynamics/advection.c b/Buildings/Resources/src/FastFluidDynamics/advection.c index e6f90a59e78..dd1464a331c 100644 --- a/Buildings/Resources/src/FastFluidDynamics/advection.c +++ b/Buildings/Resources/src/FastFluidDynamics/advection.c @@ -1,127 +1,154 @@ -/* - * @file advection.c - * - * @brief Solver for advection step - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - *This file provides functions that used for the advection step of FFD method. - *The advection starts with \c advect(). Then different subroutines are - *called according to the properties of the variables that are sorted by - *the location of variables assigned in the control volume. - *Velocities at X, Y and Z directions are located - *on the surface of the control volume. They are computed using - *subroutines: \c trace_vx(), \c trace_vy() and \ctrace_vz(). - *Scalar variables are in the center of control volume and they are computed - *using \c trace_scalar(). - */ +/***************************************************************************** +| +| \file advection.c +| +| \brief Solver for advection step +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| +| \date 6/16/2017 +| +| This file provides functions that used for the advection step of FFD method. +| The advection starts with \c advect(). Then different subroutines are +| called according to the properties of the variables that are sorted by +| the location of variables assigned in the control volume. +| Velocities at X, Y and Z directions are located +| on the surface of the control volume. They are computed using +| subroutines: \c trace_vx(), \c trace_vy() and \c trace_vz(). +| Scalar variables are in the center of control volume and they are computed +| using \c trace_scalar(). +| +*****************************************************************************/ #include "advection.h" -/* - * Entrance of advection step - * - * Specific method for advection will be selected according to the variable - * type. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param index Index of trace substances or species - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/***************************************************************************** +| Entrance of advection step +| +| Specific method for advection will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param index Index of trace substances or species +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +*****************************************************************************/ int advect(PARA_DATA *para, REAL **var, int var_type, int index, - REAL *d, REAL *d0, int **BINDEX) { + REAL *d/*Current Value*/, REAL *d0 /*Future Value*/, int **BINDEX) { int flag; /**************************************************************************** | Select different advection function according to the variables ****************************************************************************/ switch (var_type) { - /*------------------------------------------------------------------------- - | Velocity at x direction - -------------------------------------------------------------------------*/ - case VX: - flag = trace_vx(para, var, var_type, d, d0, BINDEX); - if(flag!=0) - ffd_log("advect(): Failed in advection for X-velocity.", - FFD_ERROR); - break; - /*------------------------------------------------------------------------- - | Velocity at y direction - -------------------------------------------------------------------------*/ - case VY: - flag = trace_vy(para, var, var_type, d, d0, BINDEX); - if(flag!=0) - ffd_log("advect(): Failed in advection for Y-velocity.", - FFD_ERROR); - break; - /*------------------------------------------------------------------------- - | Velocity at z direction - -------------------------------------------------------------------------*/ - case VZ: - flag = trace_vz(para, var, var_type, d, d0, BINDEX); + /*------------------------------------------------------------------------- + | Velocity at x direction + -------------------------------------------------------------------------*/ + case VX: + if (para->solv->advection_solver == UPWIND || para->solv->advection_solver == CENTRAL) { + flag = implicit_vx(para, var, var_type, d, d0, index, BINDEX); + } + else + flag = trace_vx(para, var, var_type, d, d0, BINDEX); + if(flag!=0) - ffd_log("advect(): Failed in advection for Z-velocity.", - FFD_ERROR); - break; - /*------------------------------------------------------------------------- - | Temperature, Trace and Species - -------------------------------------------------------------------------*/ - case TEMP: - case Xi1: - case Xi2: - case C1: - case C2: - flag = trace_scalar(para, var, var_type, index, d, d0, BINDEX); - if(flag!=0) { - sprintf(msg, - "advect(): Failed in advection for scalar variable type %d.", - var_type); - ffd_log(msg, FFD_ERROR); + ffd_log("advect(): Failed in advection for X-velocity.", + FFD_ERROR); + break; + /*------------------------------------------------------------------------- + | Velocity at y direction + -------------------------------------------------------------------------*/ + case VY: + if (para->solv->advection_solver == UPWIND || para->solv->advection_solver == CENTRAL) { + flag = implicit_vy(para, var, var_type, d, d0, index, BINDEX); } - break; - /*------------------------------------------------------------------------- - | Variables not available in the FFD - -------------------------------------------------------------------------*/ - default: - flag = 1; - sprintf(msg, "advect(): Advection function not defined for variable " - "type %d.", var_type); + else + flag = trace_vy(para, var, var_type, d, d0, BINDEX); + + if(flag!=0) + ffd_log("advect(): Failed in advection for Y-velocity.", + FFD_ERROR); + break; + /*------------------------------------------------------------------------- + | Velocity at z direction + -------------------------------------------------------------------------*/ + case VZ: + if (para->solv->advection_solver == UPWIND || para->solv->advection_solver == CENTRAL) { + flag = implicit_vz(para, var, var_type, d, d0, index, BINDEX); + } + else + flag = trace_vz(para, var, var_type, d, d0, BINDEX); + + if(flag!=0) + ffd_log("advect(): Failed in advection for Z-velocity.", + FFD_ERROR); + break; + /*------------------------------------------------------------------------- + | Temperature, Trace and Species + -------------------------------------------------------------------------*/ + case TEMP: + case Xi1: + case Xi2: + case C1: + case C2: + if (para->solv->advection_solver == UPWIND || para->solv->advection_solver == CENTRAL) { + flag = implicit_scalar(para, var, var_type, d, d0, index, BINDEX); + } + else + flag = trace_scalar(para, var, var_type, index, d, d0, BINDEX); + + if(flag!=0) { + sprintf(msg, + "advect(): Failed in advection for scalar variable type %d.", + var_type); ffd_log(msg, FFD_ERROR); + } + break; + /*------------------------------------------------------------------------- + | Variables not available in the FFD + -------------------------------------------------------------------------*/ + default: + flag = 1; + sprintf(msg, "advect(): Advection function not defined for variable " + "type %d.", var_type); + ffd_log(msg, FFD_ERROR); } return flag; -} /* End of advect( )*/ - - /* - * Advection for velocity at X-direction - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +} /*End of advect()*/ + + +/**************************************************************************** +| Advection for velocity at X-direction +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int trace_vx(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, int **BINDEX) { int i, j, k; int it; - int itmax = 20000; /* Max number of iterations for backward tracing*/ + int itmax = 20000; /*Max number of iterations for backward tracing*/ int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); @@ -144,768 +171,1113 @@ int trace_vx(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, /*------------------------------------------------------------------------- | Step 1: Tracing Back -------------------------------------------------------------------------*/ - /* Get velocities at the location of VX*/ - u0 = u[IX(i,j,k)]; - v0 = (REAL) 0.5 - * ((v[IX(i, j,k)]+v[IX(i, j-1,k)])*( x[IX(i+1,j,k)]-gx[IX(i,j,k)]) - +(v[IX(i+1,j,k)]+v[IX(i+1,j-1,k)])*(gx[IX(i, j,k)]- x[IX(i,j,k)])) - / (x[IX(i+1,j,k)]-x[IX(i,j,k)]); - w0 = (REAL) 0.5 - * ((w[IX(i, j,k)]+w[IX(i ,j, k-1)])*( x[IX(i+1,j,k)]-gx[IX(i,j,k)]) - +(w[IX(i+1,j,k)]+w[IX(i+1,j, k-1)])*(gx[IX(i, j,k)]- x[IX(i,j,k)])) - / (x[IX(i+1,j,k)]-x[IX(i,j,k)]); - /* Find the location at previous time step*/ - OL[X] =gx[IX(i,j,k)] - u0*dt; - OL[Y] = y[IX(i,j,k)] - v0*dt; - OL[Z] = z[IX(i,j,k)] - w0*dt; - /* Initialize the coordinates of previous step*/ - OC[X] = i; - OC[Y] = j; - OC[Z] = k; /*OC is the trace back coordinates*/ - /* Initialize the signs for track process*/ - /* Completed: 0; In process: 1*/ - COOD[X] = 1; - COOD[Y] = 1; - COOD[Z] = 1; - /* Initialize the signs for recording if the track back hits the boundary*/ - /* Hit the boundary: 0; Not hit the boundary: 1*/ - LOC[X] = 1; - LOC[Y] = 1; - LOC[Z] = 1; - /*Initialize the number of iterations*/ - it=1; - - /* Trace back more if the any of the trace is still in process*/ - while(COOD[X]==1 || COOD[Y] ==1 || COOD[Z] ==1) - { - it++; - /* If trace in X is in process and donot hit the boundary*/ - if(COOD[X]==1 && LOC[X]==1) - set_x_location(para, var, flagu, gx, u0, i, j, k, OL, OC, LOC, COOD); - /* If trace in Y is in process and donot hit the boundary*/ - if(COOD[Y]==1 && LOC[Y]==1) - set_y_location(para, var, flagu, y, v0, i, j, k, OL, OC, LOC, COOD); - /* If trace in Z is in process and donot hit the boundary*/ - if(COOD[Z]==1 && LOC[Z]==1) - set_z_location(para, var, flagu, z, w0, i, j, k, OL, OC, LOC, COOD); - - if(it>itmax) - { - printf("Error: advection.c, can not track the location for VX(%d, %d,%d)", - i, j, k); - printf("after %d iterations.\n", it); - return 1; - } - } /* End of while() for backward tracing*/ - - /* Set the coordinates of previous location if it is as boundary*/ - if(u0>0 && LOC[X]==0) OC[X] -=1; - if(v0>0 && LOC[Y]==0) OC[Y] -=1; - if(w0>0 && LOC[Z]==0) OC[Z] -=1; - - /* LOC=1 means that traced back point hits boundary.*/ - /* When u is less than zero, the traced back point is towards west.*/ - /* When it hits the boundary, according to the code,*/ - /* the east cell of west boundary will be given as the traced back location*/ - /* and the index (OC) is also marching on one cell.*/ - /* This means that the index and traced back location are on same cell.*/ - /* That is why the index needs to move backward for one cell*/ - /* in order to do interpolation.*/ - if(u0<0 && LOC[X]==1) OC[X] -=1; - if(v0<0 && LOC[Y]==1) OC[Y] -=1; - if(w0<0 && LOC[Z]==1) OC[Z] -=1; - - /*------------------------------------------------------------------------- - | Interpolate - -------------------------------------------------------------------------*/ - x_1 = (OL[X]-gx[IX(OC[X],OC[Y],OC[Z])]) - / (gx[IX(OC[X]+1,OC[Y],OC[Z])]-gx[IX(OC[X],OC[Y],OC[Z])]); - y_1 = (OL[Y]-y[IX(OC[X],OC[Y],OC[Z])]) - / (y[IX(OC[X],OC[Y]+1,OC[Z])]-y[IX(OC[X],OC[Y],OC[Z])]); - z_1 = (OL[Z]-z[IX(OC[X],OC[Y],OC[Z])]) - / (z[IX(OC[X],OC[Y],OC[Z]+1)]-z[IX(OC[X],OC[Y],OC[Z])]); - - d[IX(i,j,k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); - - END_FOR /* End of loop for all cells*/ + /* Get velocities at the location of VX */ + u0 = u[IX(i, j, k)]; + v0 = (REAL)0.5 + * ((v[IX(i, j, k)] + v[IX(i, j - 1, k)]) * (x[IX(i + 1, j, k)] - gx[IX(i, j, k)]) + + (v[IX(i + 1, j, k)] + v[IX(i + 1, j - 1, k)]) * (gx[IX(i, j, k)] - x[IX(i, j, k)])) + / (x[IX(i + 1, j, k)] - x[IX(i, j, k)]); + w0 = (REAL)0.5 + * ((w[IX(i, j, k)] + w[IX(i, j, k - 1)]) * (x[IX(i + 1, j, k)] - gx[IX(i, j, k)]) + + (w[IX(i + 1, j, k)] + w[IX(i + 1, j, k - 1)]) * (gx[IX(i, j, k)] - x[IX(i, j, k)])) + / (x[IX(i + 1, j, k)] - x[IX(i, j, k)]); + /* Find the location at previous time step */ +/* Due to the staggered grids utilized, gx is the location for vx */ + OL[X] = gx[IX(i, j, k)] - u0 * dt; + OL[Y] = y[IX(i, j, k)] - v0 * dt; + OL[Z] = z[IX(i, j, k)] - w0 * dt; + /* Initialize the coordinates of previous step */ +/* Start to find the according coordinates of OL in previous step */ +/* OC is the trace back coordinates */ + OC[X] = i; + OC[Y] = j; + OC[Z] = k; + /* Indicators for completeness */ + /* Completed: 0; In process: 1 */ + COOD[X] = 1; + COOD[Y] = 1; + COOD[Z] = 1; + /* Indicators for hitting the boundary */ + /* Hit the boundary: 0; Not hit the boundary: 1 */ + LOC[X] = 1; + LOC[Y] = 1; + LOC[Z] = 1; + /*Initialize the number of iterations*/ + it = 1; + /* Trace back more if the any of the trace is still in process */ + while (COOD[X] == 1 || COOD[Y] == 1 || COOD[Z] == 1) + { + it++; + /* If trace in X is NOT finished and does NOT hit the boundary */ + if (COOD[X] == 1 && LOC[X] == 1) + set_x_location(para, var, flagu, gx, u0, i, j, k, OL, OC, LOC, COOD); + /* If trace in Y is NOT finished and does NOT hit the boundary */ + if (COOD[Y] == 1 && LOC[Y] == 1) + set_y_location(para, var, flagu, y, v0, i, j, k, OL, OC, LOC, COOD); + /* If trace in Z is NOT finished and does NOT hit the boundary */ + if (COOD[Z] == 1 && LOC[Z] == 1) + set_z_location(para, var, flagu, z, w0, i, j, k, OL, OC, LOC, COOD); + + if (it > itmax) + { + printf("Error: advection.c, can not track the location for VX(%d, %d,%d)", + i, j, k); + printf("after %d iterations.\n", it); + return 1; + } + } /* End of while() for backward tracing */ + + /* Set the coordinates of previous location if it is as boundary */ +/* To step back one cell is because in set_x_location when hitting the wall */ +/* the coordinates moves forward for one cell */ + if (u0 > 0 && LOC[X] == 0) OC[X] -= 1; + if (v0 > 0 && LOC[Y] == 0) OC[Y] -= 1; + if (w0 > 0 && LOC[Z] == 0) OC[Z] -= 1; + + /* Set coordinates of the previous location if not hitting the boundary */ +/* To move one step back is for sake of the interpolation */ + if (u0 < 0 && LOC[X] == 1) OC[X] -= 1; + if (v0 < 0 && LOC[Y] == 1) OC[Y] -= 1; + if (w0 < 0 && LOC[Z] == 1) OC[Z] -= 1; + + /*------------------------------------------------------------------------- + | Interpolate + -------------------------------------------------------------------------*/ + x_1 = (OL[X] - gx[IX(OC[X], OC[Y], OC[Z])]) + / (gx[IX(OC[X] + 1, OC[Y], OC[Z])] - gx[IX(OC[X], OC[Y], OC[Z])]); + y_1 = (OL[Y] - y[IX(OC[X], OC[Y], OC[Z])]) + / (y[IX(OC[X], OC[Y] + 1, OC[Z])] - y[IX(OC[X], OC[Y], OC[Z])]); + z_1 = (OL[Z] - z[IX(OC[X], OC[Y], OC[Z])]) + / (z[IX(OC[X], OC[Y], OC[Z] + 1)] - z[IX(OC[X], OC[Y], OC[Z])]); + + d[IX(i, j, k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); + + END_FOR /* End of loop for all cells */ /**************************************************************************** | define the boundary condition ****************************************************************************/ - set_bnd(para, var, var_type, 0, d, BINDEX); - - return 0; -} /* End of trace_vx()*/ - - /* - * Advection for velocity at Y-direction - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int trace_vy(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, - int **BINDEX) { - int i, j, k; - int it; - int itmax = 20000; /* Max number of iterations for backward tracing*/ - int imax = para->geom->imax, jmax = para->geom->jmax; - int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL x_1, y_1, z_1; - REAL dt = para->mytime->dt; - REAL u0, v0, w0; - REAL *x = var[X], *y = var[Y], *z = var[Z]; - REAL *gy = var[GY]; - REAL *u = var[VX], *v = var[VY], *w = var[VZ]; - REAL *flagv = var[FLAGV]; - int COOD[3], LOC[3]; - REAL OL[3]; - int OC[3]; - - FOR_V_CELL - /* Do not trace for boundary cells*/ - if(flagv[IX(i,j,k)]>=0) continue; - - /*------------------------------------------------------------------------- - | Step 1: Tracing Back - -------------------------------------------------------------------------*/ - /* Get velocities at the location of VY*/ - u0 = (REAL) 0.5 - * ((u[IX(i,j,k)]+u[IX(i-1,j, k)])*(y [IX(i,j+1,k)]-gy[IX(i,j,k)]) - +(u[IX(i,j+1,k)]+u[IX(i-1,j+1,k)])*(gy[IX(i,j, k)]-y[IX(i,j,k)])) - / (y[IX(i,j+1,k)]-y[IX(i,j,k)]); - v0 = v[IX(i,j,k)]; - w0 = (REAL) 0.5 - * ((w[IX(i,j,k)]+w[IX(i,j,k-1)])*(y[IX(i,j+1,k)]-gy[IX(i,j,k)]) - +(w[IX(i,j+1,k)]+w[IX(i,j+1,k-1)])*(gy[IX(i,j,k)]-y[IX(i,j,k)])) - / (y[IX(i,j+1,k)]-y[IX(i,j,k)]); - /* Find the location at previous time step*/ - OL[X] = x[IX(i,j,k)] - u0*dt; - OL[Y] = gy[IX(i,j,k)] - v0*dt; - OL[Z] = z[IX(i,j,k)] - w0*dt; - /* Initialize the coordinates of previous step*/ - OC[X] = i; - OC[Y] = j; - OC[Z] = k; - /* Initialize the signs for track process*/ - /* Completed: 0; In process: 1*/ - COOD[X] = 1; - COOD[Y] = 1; - COOD[Z] = 1; - /* Initialize the signs for recording if the track back hits the boundary*/ - /* Hit the boundary: 0; Not hit the boundary: 1*/ - LOC[X] = 1; - LOC[Y] = 1; - LOC[Z] = 1; - /*Initialize the number of iterations*/ - it=1; - - /* Trace back more if the any of the trace is still in process*/ - while(COOD[X]==1 || COOD[Y] ==1 || COOD[Z] == 1) { - it++; - if(COOD[X]==1 && LOC[X]==1) - set_x_location(para, var, flagv, x, u0, i, j, k, OL, OC, LOC, COOD); - if(COOD[Y]==1 && LOC[Y]==1) - set_y_location(para, var, flagv, gy, v0, i, j, k, OL, OC, LOC, COOD); - if(COOD[Z]==1 && LOC[Z]==1) - set_z_location(para, var, flagv, z, w0, i, j, k, OL, OC, LOC, COOD); - - if(it>itmax) { - printf("Error: advection.c can not track the location for VY(%d, %d,%d)", - i, j, k); - printf("after %d iterations.\n", it); - return 1; - } - } /* End of while() loop*/ - - /* Set the coordinates of previous location if it is as boundary*/ - if(u0>=0 && LOC[X]==0) OC[X] -= 1; - if(v0>=0 && LOC[Y]==0) OC[Y] -= 1; - if(w0>=0 && LOC[Z]==0) OC[Z] -= 1; - - if(u0<0 && LOC[X]==1) OC[X] -= 1; - if(v0<0 && LOC[Y]==1) OC[Y] -= 1; - if(w0<0 && LOC[Z]==1) OC[Z] -= 1; - - /*------------------------------------------------------------------------- - | Interpolating for all variables - -------------------------------------------------------------------------*/ - x_1 = (OL[X]-x[IX(OC[X],OC[Y],OC[Z])]) - / (x[IX(OC[X]+1,OC[Y],OC[Z])]-x[IX(OC[X],OC[Y],OC[Z])]); - y_1 = (OL[Y]-gy[IX(OC[X],OC[Y],OC[Z])]) - / (gy[IX(OC[X],OC[Y]+1,OC[Z])]-gy[IX(OC[X],OC[Y],OC[Z])]); - z_1 = (OL[Z]-z[IX(OC[X],OC[Y],OC[Z])]) - / (z[IX(OC[X],OC[Y],OC[Z]+1)]-z[IX(OC[X],OC[Y],OC[Z])]); - d[IX(i,j,k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X],OC[Y],OC[Z]); - END_FOR /* End of For() loop for each cell*/ - - /*--------------------------------------------------------------------------- - | define the b.c. - ---------------------------------------------------------------------------*/ - set_bnd(para, var, var_type, 0, d, BINDEX); - return 0; -} /* End of trace_vy()*/ - - /* - * Advection for velocity at Z-direction - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int trace_vz(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, - int **BINDEX) { - int i, j, k; - int it; - int itmax = 20000; /* Max number of iterations for backward tracing*/ - int imax = para->geom->imax, jmax = para->geom->jmax; - int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL x_1, y_1, z_1; - REAL dt = para->mytime->dt; - REAL u0, v0, w0; - REAL *x = var[X], *y = var[Y], *z = var[Z]; - REAL *gz = var[GZ]; - REAL *u = var[VX], *v = var[VY], *w = var[VZ]; - REAL *flagw = var[FLAGW]; - int COOD[3], LOC[3]; - REAL OL[3]; - int OC[3]; - - FOR_W_CELL - /* Do not trace for boundary cells*/ - if(flagw[IX(i,j,k)]>=0) continue; - - /*------------------------------------------------------------------------- - | Step 1: Tracing Back - -------------------------------------------------------------------------*/ - /* Get velocities at the location of VZ*/ - u0 = (REAL) 0.5 - * ((u[IX(i,j,k )]+u[IX(i-1,j,k )])*(z [IX(i,j,k+1)]-gz[IX(i,j,k)]) - +(u[IX(i,j,k+1)]+u[IX(i-1,j,k+1)])*(gz[IX(i,j,k )]- z[IX(i,j,k)])) - / (z[IX(i,j,k+1)]-z[IX(i,j,k)]); - v0 = (REAL) 0.5 - * ((v[IX(i,j,k )]+v[IX(i,j-1,k )])*(z [IX(i,j,k+1)]-gz[IX(i,j,k)]) - +(v[IX(i,j,k+1)]+v[IX(i,j-1,k+1)])*(gz[IX(i,j,k )]-z [IX(i,j,k)])) - / (z[IX(i,j,k+1)]-z[IX(i,j,k)]); - w0 = w[IX(i,j,k)]; - /* Find the location at previous time step*/ - OL[X] = x[IX(i,j,k)] - u0*dt; - OL[Y] = y[IX(i,j,k)] - v0*dt; - OL[Z] = gz[IX(i,j,k)] - w0*dt; - /* Initialize the coordinates of previous step*/ - OC[X] = i; - OC[Y] = j; - OC[Z] = k; - /* Initialize the signs for track process*/ - /* Completed: 0; In process: 1*/ - COOD[X] = 1; - COOD[Y] = 1; - COOD[Z] = 1; - /* Initialize the signs for recording if the track back hits the boundary*/ - /* Hit the boundary: 0; Not hit the boundary: 1*/ - LOC[X] = 1; - LOC[Y] = 1; - LOC[Z] = 1; - /*Initialize the number of iterations*/ - it=1; - - /* Trace back more if the any of the trace is still in process*/ - while(COOD[X]==1 || COOD[Y] ==1 || COOD[Z] == 1) { - it++; - if(COOD[X]==1 && LOC[X]==1) - set_x_location(para, var, flagw, x, u0, i, j, k, OL, OC, LOC, COOD); - if(COOD[Y]==1 && LOC[Y]==1) - set_y_location(para, var, flagw, y, v0, i, j, k, OL, OC, LOC, COOD); - if(COOD[Z]==1 && LOC[Z]==1) - set_z_location(para, var, flagw, gz, w0, i, j, k, OL, OC, LOC, COOD); - - if(it>itmax) { - printf("Error: advection.c can not track the location for VY(%d, %d,%d)", - i, j, k); - printf("after %d iterations.\n", it); - return 1; - } - } /* End of while() loop*/ - - /* Set the coordinates of previous location if it is as boundary*/ - if(u0>=0 && LOC[X] == 0) OC[X] -=1; - if(v0>=0 && LOC[Y] == 0) OC[Y] -=1; - if(w0>=0 && LOC[Z] == 0) OC[Z] -=1; - - if(u0<0 && LOC[X]==1) OC[X] -=1; - if(v0<0 && LOC[Y]==1) OC[Y] -=1; - if(w0<0 && LOC[Z]==1) OC[Z] -=1; - - /*------------------------------------------------------------------------- - | Interpolating for all variables - -------------------------------------------------------------------------*/ - x_1 = (OL[X]- x[IX(OC[X],OC[Y],OC[Z])]) - / ( x[IX(OC[X]+1,OC[Y], OC[Z] )]- x[IX(OC[X],OC[Y],OC[Z])]); - y_1 = (OL[Y]- y[IX(OC[X],OC[Y],OC[Z])]) - / ( y[IX(OC[X], OC[Y]+1, OC[Z] )]- y[IX(OC[X],OC[Y],OC[Z])]); - z_1 = (OL[Z]-gz[IX(OC[X],OC[Y],OC[Z])]) - / (gz[IX(OC[X], OC[Y], OC[Z]+1)]-gz[IX(OC[X],OC[Y],OC[Z])]); - d[IX(i,j,k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); - END_FOR - - /*--------------------------------------------------------------------------- - | define the b.c. - ---------------------------------------------------------------------------*/ - set_bnd(para, var, var_type, 0, d, BINDEX); - return 0; -} /* End of trace_vz()*/ - - /* - * Advection for scalar variables located in the center of control volume - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param index Index of trace substances or species - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int trace_scalar(PARA_DATA *para, REAL **var, int var_type, int index, - REAL *d, REAL *d0, int **BINDEX) { - int i, j, k; - int it; - int itmax = 20000; /* Max number of iterations for backward tracing*/ - int imax = para->geom->imax, jmax = para->geom->jmax; - int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL x_1, y_1, z_1; - REAL dt = para->mytime->dt; - REAL u0, v0, w0; - REAL *x = var[X], *y = var[Y], *z = var[Z]; - REAL *u = var[VX], *v = var[VY], *w = var[VZ]; - REAL *flagp = var[FLAGP]; - int COOD[3], LOC[3]; - REAL OL[3]; - int OC[3]; - - FOR_EACH_CELL - /* Do not trace for boundary cells*/ - if(flagp[IX(i,j,k)]>=0) continue; - - /*------------------------------------------------------------------------- - | Step 1: Tracing Back - -------------------------------------------------------------------------*/ - /* Get velocities at the location of scalar variable*/ - u0 = (REAL) 0.5 * (u[IX(i,j,k)]+u[IX(i-1,j,k )]); - v0 = (REAL) 0.5 * (v[IX(i,j,k)]+v[IX(i,j-1,k )]); - w0 = (REAL) 0.5 * (w[IX(i,j,k)]+w[IX(i,j ,k-1)]); - /* Find the location at previous time step*/ - OL[X] = x[IX(i,j,k)] - u0*dt; - OL[Y] = y[IX(i,j,k)] - v0*dt; - OL[Z] = z[IX(i,j,k)] - w0*dt; - /* Initialize the coordinates of previous step*/ - OC[X] = i; - OC[Y] = j; - OC[Z] = k; - /* Initialize the signs for tracing process*/ - /* Completed: 0; In process: 1*/ - COOD[X] = 1; - COOD[Y] = 1; - COOD[Z] = 1; - /* Initialize the flags for recording if the tracing back hits the boundary*/ - /* Hit the boundary: 0; Not hit the boundary: 1*/ - LOC[X] = 1; - LOC[Y] = 1; - LOC[Z] = 1; - /*Initialize the number of iterations*/ - it=1; - - /* Trace back more if the any of the trace is still in process*/ - while(COOD[X]==1 || COOD[Y] ==1 || COOD[Z] == 1) { - it++; - /* If trace in X is in process and donot hit the boundary*/ - if(COOD[X]==1 && LOC[X]==1) - set_x_location(para, var, flagp, x, u0, i, j, k, OL, OC, LOC, COOD); - /* If trace in Y is in process and donot hit the boundary*/ - if(COOD[Y]==1 && LOC[Y]==1) - set_y_location(para, var, flagp, y, v0, i, j, k, OL, OC, LOC, COOD); - /* If trace in Z is in process and donot hit the boundary*/ - if(COOD[Z]==1 && LOC[Z]==1) - set_z_location(para, var, flagp, z, w0, i, j, k, OL, OC, LOC, COOD); - if(it>itmax) { - sprintf(msg, "trace_scalar(): Could not track the location for scalar " - "variable %d at cell(%d, %d,%d) after %d iterations", - var_type, i, j, k, it); - ffd_log(msg, FFD_ERROR); - return 1; - } - } /* End of while() for backward tracing*/ + set_bnd(para, var, var_type, 0, d, BINDEX); - /* Set the coordinates of previous location if it is as boundary*/ - if(u0>=0 && LOC[X]==0) OC[X] -=1; - if(v0>=0 && LOC[Y]==0) OC[Y] -=1; - if(w0>=0 && LOC[Z]==0) OC[Z] -=1; - - if(u0<0 && LOC[X]==1) OC[X] -=1; - if(v0<0 && LOC[Y]==1) OC[Y] -=1; - if(w0<0 && LOC[Z]==1) OC[Z] -=1; - - /*Store the local minimum and maximum values*/ - var[LOCMIN][IX(i,j,k)]=check_min(para, d0, OC[X], OC[Y], OC[Z]); - var[LOCMAX][IX(i,j,k)]=check_max(para, d0, OC[X], OC[Y], OC[Z]); - - /*------------------------------------------------------------------------- - | Interpolate - -------------------------------------------------------------------------*/ - x_1 = (OL[X]- x[IX(OC[X],OC[Y],OC[Z])]) - / ( x[IX(OC[X]+1,OC[Y], OC[Z] )] - x[IX(OC[X],OC[Y],OC[Z])]); - y_1 = (OL[Y]- y[IX(OC[X],OC[Y],OC[Z])]) - / ( y[IX(OC[X], OC[Y]+1, OC[Z] )] - y[IX(OC[X],OC[Y],OC[Z])]); - z_1 = (OL[Z]- z[IX(OC[X],OC[Y],OC[Z])]) - / ( z[IX(OC[X], OC[Y], OC[Z]+1)] - z[IX(OC[X],OC[Y],OC[Z])]); - d[IX(i,j,k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); - END_FOR /* End of loop for all cells*/ - - /*--------------------------------------------------------------------------- - | Define the b.c. - ---------------------------------------------------------------------------*/ - set_bnd(para, var, var_type, index, d, BINDEX); return 0; -} /* End of trace_scalar()*/ - - - /* - * Find the X-location and coordinates at previous time step - * - * Conducting backward tracing for the particle's X-location and - * corresponding coordinates at the previous time step. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the property of the cell - * @param x Pointer to the current position x(t) of particle - * @param u0 X-velocity at time (t-1) in location x(t) - * @param i I-index for cell at time t at x(t) - * @param j J-index for cell at time t at x(t) - * @param k K-index for cell at time t at x(t) - * @param OL Pointer to the locations of particle at time (t-1) - * @param OC Pointer to the coordinates of particle at time (t-1) - * @param LOC Pointer to flags recording if tracing back hits the boundary - * @param COOD Pointer to record the status of tracing back process - * - * @return void No return needed - */ -void set_x_location(PARA_DATA *para, REAL **var, REAL *flag, REAL *x, REAL u0, - int i, int j, int k, - REAL *OL, int *OC, int *LOC, int *COOD) { - int imax = para->geom->imax, jmax = para->geom->jmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - - /**************************************************************************** - | If the previous location is equal to current position - | stop the process (COOD[X] = 0) - ****************************************************************************/ - if(OL[X]==x[IX(OC[X],OC[Y],OC[Z])]) - COOD[X]=0; - /**************************************************************************** - | Otherwise, if previous location is on the west of the current position - ****************************************************************************/ - else if(OL[X]0) - OC[X] -=1; - - /* If the previous position is on the east of new location, stop the process*/ - if(OL[X]>=x[IX(OC[X],OC[Y],OC[Z])]) - - COOD[X]=0; - - /* If the new position is solid*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==1) { - /* Use the east cell for new location*/ - OL[X] = x[IX(OC[X]+1,OC[Y],OC[Z])]; - OC[X] +=1; - /* Hit the boundary*/ - LOC[X] = 0; - /* Stop the trace process*/ - COOD[X] = 0; - } /* End of if() for solid*/ - - /* If the new position is inlet or outlet*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==0||flag[IX(OC[X],OC[Y],OC[Z])]==2) { - /* Use new position*/ - OL[X] = x[IX(OC[X],OC[Y],OC[Z])]; - /* use east cell for coordinate*/ - OC[X] += 1; - /* Hit the boundary*/ - LOC[X] = 0; - /* Stop the trace process*/ - COOD[X]=0; - } /* End of if() for inlet or outlet*/ - } /* End of if() for previous position is on the west of new position*/ - /**************************************************************************** - | Otherwise, if previous location is on the east of the current position - ****************************************************************************/ - else { - /* If not at the east boundary*/ - if(OC[X]<=imax) - /* Move to east*/ - OC[X] +=1; - - /* If the previous position is on the west of new position*/ - if(OL[X]<=x[IX(OC[X],OC[Y],OC[Z])]) - /* Stop the trace process*/ - COOD[X]=0; - - /* If the cell is solid*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==1) { - /* Use west cell*/ - OL[X] = x[IX(OC[X]-1,OC[Y],OC[Z])]; - OC[X] -= 1; - /* Hit the boundary*/ - LOC[X] = 0; - /* Stop the trace process*/ - COOD[X] = 0; - } /* End of if() for solid*/ - - /* If the new position is inlet or outlet*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==0||flag[IX(OC[X],OC[Y],OC[Z])]==2) { - /* Use the current cell for previous location*/ - OL[X] = x[IX(OC[X],OC[Y],OC[Z])]; - /* Use the west cell for coordinate*/ - OC[X] -=1; - /* Hit the boundary*/ - LOC[X] = 0; - /* Stop the trace process*/ - COOD[X]=0; - } /* End of if() for inlet or outlet*/ - } /* End of if() for previous position is on the east of new position*/ -} /* End of set_x_location()*/ - - - /* - * Find the Y-location and coordinates at previous time step - * - * Conducting backward tracing for the particle's Y-location and - * corresponding coordinates at the previous time step. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the property of the cell - * @param y Pointer to the current position y(t) of particle - * @param v0 Y-velocity at time (t-1) in location y(t) - * @param i I-index for cell at time t at y(t) - * @param j J-index for cell at time t at y(t) - * @param k K-index for cell at time t at y(t) - * @param OL Pointer to the locations of particle at time (t-1) - * @param OC Pointer to the coordinates of particle at time (t-1) - * @param LOC Pointer to flags recording if tracing back hits the boundary - * @param COOD Pointer to record the status of tracing back process - * - * @return void No return needed - */ -void set_y_location(PARA_DATA *para, REAL **var, REAL *flag, REAL *y, REAL v0, - int i, int j, int k, - REAL *OL, int *OC, int *LOC, int *COOD) { - int imax = para->geom->imax, jmax = para->geom->jmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - - /**************************************************************************** - | If the previous location is equal to current position, - | stop the process (COOD[X] = 0) - ****************************************************************************/ - if(OL[Y]==y[IX(OC[X],OC[Y],OC[Z])]) - COOD[Y] = 0; - /**************************************************************************** - | Otherwise, if previous location is on the south of the current position - ****************************************************************************/ - else if(OL[Y]0) - OC[Y] -= 1; - - /* If the previous position is on the north of new location*/ - if(OL[Y]>=y[IX(OC[X],OC[Y],OC[Z])]) - /* Stop the process*/ - COOD[Y] = 0; - - /* If the new position is solid*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==1) { - /* Use the north cell for new location*/ - OL[Y] = y[IX(OC[X],OC[Y]+1,OC[Z])]; - OC[Y] += 1; - /* Hit the boundary*/ - LOC[Y] = 0; - /* Stop the trace process*/ - COOD[Y] = 0; - } /* End of if() for solid*/ - - /* If the new position is inlet or outlet*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==0||flag[IX(OC[X],OC[Y],OC[Z])]==2) { - /* Use new position*/ - OL[Y] = y[IX(OC[X],OC[Y],OC[Z])]; - /* Use north cell for coordinate*/ - OC[Y] += 1; - /* Hit the boundary*/ - LOC[Y] = 0; - /* Stop the trace process*/ - COOD[Y] = 0; - } /* End of if() for inlet or outlet*/ - } /* End of if() for previous position is on the south of new position*/ - /**************************************************************************** - | Otherwise, if previous location is on the north of the current position - ****************************************************************************/ - else { - /* If not at the north boundary*/ - if(OC[Y]<=jmax) - /* Move to north*/ - OC[Y] +=1; - - /* If the previous position is on the south of new position*/ - if(OL[Y]<=y[IX(OC[X],OC[Y],OC[Z])]) - /* Stop the trace process*/ - COOD[Y] = 0; - - /* If the cell is solid*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==1) { - /* Use south cell*/ - OL[Y] = y[IX(OC[X],OC[Y]-1,OC[Z])]; - OC[Y] -= 1; - /* Hit the boundary*/ - LOC[Y] = 0; - /* Stop the trace process*/ - COOD[Y] = 0; - } /* End of if() for solid*/ - - /* If the new position is inlet or outlet*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==0||flag[IX(OC[X],OC[Y],OC[Z])]==2) { - /* Use the current cell for previous location*/ - OL[Y] = y[IX(OC[X],OC[Y],OC[Z])]; - /* Use the south cell for coordinate*/ - OC[Y] -= 1; - /* Hit the boundary*/ - LOC[Y]=0; - /* Stop the trace process*/ - COOD[Y]=0; - } /* End of if() for inlet or outlet*/ - } /* End of if() for previous position is on the east of new position*/ -} /* End of set_x_location()*/ - - /* - * Find the Z-location and coordinates at previous time step - * - * Conducting backward tracing for the particle's Z-location and - * corresponding coordinates at the previous time step. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the property of the cell - * @param Z Pointer to the current position y(t) of particle - * @param w0 Z-velocity at time (t-1) in location z(t) - * @param i I-index for cell at time t at z(t) - * @param j J-index for cell at time t at z(t) - * @param k K-index for cell at time t at z(t) - * @param OL Pointer to the locations of particle at time (t-1) - * @param OC Pointer to the coordinates of particle at time (t-1) - * @param LOC Pointer to flags recording if tracing back hits the boundary - * @param COOD Pointer to record the status of tracing back process - * - * @return void No return needed - */ -void set_z_location(PARA_DATA *para, REAL **var, REAL *flag, REAL *z, REAL w0, - int i, int j, int k, - REAL *OL, int *OC, int *LOC, int *COOD) { - int imax = para->geom->imax, jmax = para->geom->jmax; - int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - - /**************************************************************************** - | If the previous location is equal to current position, - | stop the process (COOD[Z] = 0) - ****************************************************************************/ - if(OL[Z]==z[IX(OC[X],OC[Y],OC[Z])]) - COOD[Z] = 0; - /**************************************************************************** - | Otherwise, if previous location is on the floor of the current position - ****************************************************************************/ - else if(OL[Z]0) - OC[Z] -= 1; - - /* If the previous position is on the ceiling of new location*/ - if(OL[Z]>=z[IX(OC[X],OC[Y],OC[Z])]) - /* Stop the process*/ - COOD[Z] = 0; - - /* If the new position is solid*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==1) { - /* Use the ceiling cell for new location*/ - OL[Z] = z[IX(OC[X],OC[Y],OC[Z]+1)]; - OC[Z] += 1; - /* Hit the boundary*/ - LOC[Z] = 0; - /* Stop the trace process*/ - COOD[Z] = 0; - } /* End of if() for solid*/ - - /* If the new position is inlet or outlet*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==0||flag[IX(OC[X],OC[Y],OC[Z])]==2) { - /* Use new position*/ - OL[Z] = z[IX(OC[X],OC[Y],OC[Z])]; - /* Use ceiling cell for coordinate*/ - OC[Z] += 1; - /* Hit the boundary*/ - LOC[Z] = 0; - /* Stop the trace process*/ - COOD[Z] = 0; - } /* End of if() for inlet or outlet*/ - } /* End of if() for previous position is on the floor of new position*/ - /**************************************************************************** - | Otherwise, if previous location is on the ceiling of the current position - -***************************************************************************/ - else { - /* If not at the ceiling boundary*/ - if(OC[Z]<=kmax) - /* Move to ceiling*/ - OC[Z] += 1; - - /* If the previous position is on the floor of new position*/ - if(OL[Z] <=z[IX(OC[X],OC[Y],OC[Z])]) - /* Stop the trace process*/ - COOD[Z] = 0; - - /* If the cell is solid*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==1) { - /* Use floor cell*/ - OL[Z] = z[IX(OC[X],OC[Y],OC[Z]-1)]; - OC[Z] -= 1; - /* Hit the boundary*/ - LOC[Z] = 0; - /* Stop the trace process*/ - COOD[Z] = 0; - } /* End of if() for solid*/ - - /* If the new position is inlet or outlet*/ - if(flag[IX(OC[X],OC[Y],OC[Z])]==0||flag[IX(OC[X],OC[Y],OC[Z])]==2) { - /* Use the current cell for previous location*/ - OL[Z]=z[IX(OC[X],OC[Y],OC[Z])]; - /* Use the floor cell for coordinate*/ - OC[Z] -= 1; - /* Hit the boundary*/ - LOC[Z]=0; - /* Stop the trace process*/ - COOD[Z]=0; - } /* End of if() for inlet or outlet*/ - } /* End of if() for previous position is on the east of new position*/ -} /* End of set_z_location()*/ +} /*End of trace_vx()*/ + +/**************************************************************************** +| Advection for velocity at Y-direction +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int trace_vy(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, + int** BINDEX) { + int i, j, k; + int it; + int itmax = 20000; /* Max number of iterations for backward tracing */ + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL x_1, y_1, z_1; + REAL dt = para->mytime->dt; + REAL u0, v0, w0; + REAL* x = var[X], * y = var[Y], * z = var[Z]; + REAL* gy = var[GY]; + REAL* u = var[VX], * v = var[VY], * w = var[VZ]; + REAL* flagv = var[FLAGV]; + int COOD[3], LOC[3]; + REAL OL[3]; + int OC[3]; + + FOR_V_CELL + /* Do not trace for boundary cells */ + if (flagv[IX(i, j, k)] >= 0) continue; + + /*------------------------------------------------------------------------- + | Step 1: Tracing Back + -------------------------------------------------------------------------*/ + /* Get velocities at the location of VY */ + u0 = (REAL)0.5 + * ((u[IX(i, j, k)] + u[IX(i - 1, j, k)]) * (y[IX(i, j + 1, k)] - gy[IX(i, j, k)]) + + (u[IX(i, j + 1, k)] + u[IX(i - 1, j + 1, k)]) * (gy[IX(i, j, k)] - y[IX(i, j, k)])) + / (y[IX(i, j + 1, k)] - y[IX(i, j, k)]); + v0 = v[IX(i, j, k)]; + w0 = (REAL)0.5 + * ((w[IX(i, j, k)] + w[IX(i, j, k - 1)]) * (y[IX(i, j + 1, k)] - gy[IX(i, j, k)]) + + (w[IX(i, j + 1, k)] + w[IX(i, j + 1, k - 1)]) * (gy[IX(i, j, k)] - y[IX(i, j, k)])) + / (y[IX(i, j + 1, k)] - y[IX(i, j, k)]); + /* Find the location at previous time step */ + OL[X] = x[IX(i, j, k)] - u0 * dt; + OL[Y] = gy[IX(i, j, k)] - v0 * dt; + OL[Z] = z[IX(i, j, k)] - w0 * dt; + /* Initialize the coordinates of previous step */ + OC[X] = i; + OC[Y] = j; + OC[Z] = k; + /* Initialize the signs for track process */ + /* Completed: 0; In process: 1 */ + COOD[X] = 1; + COOD[Y] = 1; + COOD[Z] = 1; + /* Initialize the signs for recording if the track back hits the boundary */ + /* Hit the boundary: 0; Not hit the boundary: 1 */ + LOC[X] = 1; + LOC[Y] = 1; + LOC[Z] = 1; + /*Initialize the number of iterations */ + it = 1; + + /* Trace back more if the any of the trace is still in process */ + while (COOD[X] == 1 || COOD[Y] == 1 || COOD[Z] == 1) { + it++; + if (COOD[X] == 1 && LOC[X] == 1) + set_x_location(para, var, flagv, x, u0, i, j, k, OL, OC, LOC, COOD); + if (COOD[Y] == 1 && LOC[Y] == 1) + set_y_location(para, var, flagv, gy, v0, i, j, k, OL, OC, LOC, COOD); + if (COOD[Z] == 1 && LOC[Z] == 1) + set_z_location(para, var, flagv, z, w0, i, j, k, OL, OC, LOC, COOD); + + if (it > itmax) { + printf("Error: advection.c can not track the location for VY(%d, %d,%d)", + i, j, k); + printf("after %d iterations.\n", it); + return 1; + } + } /* End of while() loop */ + + /* Set the coordinates of previous location if it is as boundary */ + if (u0 >= 0 && LOC[X] == 0) OC[X] -= 1; + if (v0 >= 0 && LOC[Y] == 0) OC[Y] -= 1; + if (w0 >= 0 && LOC[Z] == 0) OC[Z] -= 1; + + if (u0 < 0 && LOC[X] == 1) OC[X] -= 1; + if (v0 < 0 && LOC[Y] == 1) OC[Y] -= 1; + if (w0 < 0 && LOC[Z] == 1) OC[Z] -= 1; + + /*------------------------------------------------------------------------- + | Interpolating for all variables + -------------------------------------------------------------------------*/ + x_1 = (OL[X] - x[IX(OC[X], OC[Y], OC[Z])]) + / (x[IX(OC[X] + 1, OC[Y], OC[Z])] - x[IX(OC[X], OC[Y], OC[Z])]); + y_1 = (OL[Y] - gy[IX(OC[X], OC[Y], OC[Z])]) + / (gy[IX(OC[X], OC[Y] + 1, OC[Z])] - gy[IX(OC[X], OC[Y], OC[Z])]); + z_1 = (OL[Z] - z[IX(OC[X], OC[Y], OC[Z])]) + / (z[IX(OC[X], OC[Y], OC[Z] + 1)] - z[IX(OC[X], OC[Y], OC[Z])]); + d[IX(i, j, k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); + END_FOR /* End of For() loop for each cell */ + + /*--------------------------------------------------------------------------- + | define the b.c. + ---------------------------------------------------------------------------*/ + set_bnd(para, var, var_type, 0, d, BINDEX); + return 0; +} /* End of trace_vy() */ + +/**************************************************************************** +| Advection for velocity at Z-direction +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int trace_vz(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, + int** BINDEX) { + int i, j, k; + int it; + int itmax = 20000; /* Max number of iterations for backward tracing */ + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL x_1, y_1, z_1; + REAL dt = para->mytime->dt; + REAL u0, v0, w0; + REAL* x = var[X], * y = var[Y], * z = var[Z]; + REAL* gz = var[GZ]; + REAL* u = var[VX], * v = var[VY], * w = var[VZ]; + REAL* flagw = var[FLAGW]; + int COOD[3], LOC[3]; + REAL OL[3]; + int OC[3]; + + FOR_W_CELL + /* Do not trace for boundary cells */ + if (flagw[IX(i, j, k)] >= 0) continue; + + /*------------------------------------------------------------------------- + | Step 1: Tracing Back + -------------------------------------------------------------------------*/ + /* Get velocities at the location of VZ */ + u0 = (REAL)0.5 + * ((u[IX(i, j, k)] + u[IX(i - 1, j, k)]) * (z[IX(i, j, k + 1)] - gz[IX(i, j, k)]) + + (u[IX(i, j, k + 1)] + u[IX(i - 1, j, k + 1)]) * (gz[IX(i, j, k)] - z[IX(i, j, k)])) + / (z[IX(i, j, k + 1)] - z[IX(i, j, k)]); + v0 = (REAL)0.5 + * ((v[IX(i, j, k)] + v[IX(i, j - 1, k)]) * (z[IX(i, j, k + 1)] - gz[IX(i, j, k)]) + + (v[IX(i, j, k + 1)] + v[IX(i, j - 1, k + 1)]) * (gz[IX(i, j, k)] - z[IX(i, j, k)])) + / (z[IX(i, j, k + 1)] - z[IX(i, j, k)]); + w0 = w[IX(i, j, k)]; + /* Find the location at previous time step */ + OL[X] = x[IX(i, j, k)] - u0 * dt; + OL[Y] = y[IX(i, j, k)] - v0 * dt; + OL[Z] = gz[IX(i, j, k)] - w0 * dt; + /* Initialize the coordinates of previous step */ + OC[X] = i; + OC[Y] = j; + OC[Z] = k; + /* Initialize the signs for track process */ + /* Completed: 0; In process: 1 */ + COOD[X] = 1; + COOD[Y] = 1; + COOD[Z] = 1; + /* Initialize the signs for recording if the track back hits the boundary */ + /* Hit the boundary: 0; Not hit the boundary: 1 */ + LOC[X] = 1; + LOC[Y] = 1; + LOC[Z] = 1; + /*Initialize the number of iterations*/ + it = 1; + + /* Trace back more if the any of the trace is still in process */ + while (COOD[X] == 1 || COOD[Y] == 1 || COOD[Z] == 1) { + it++; + if (COOD[X] == 1 && LOC[X] == 1) + set_x_location(para, var, flagw, x, u0, i, j, k, OL, OC, LOC, COOD); + if (COOD[Y] == 1 && LOC[Y] == 1) + set_y_location(para, var, flagw, y, v0, i, j, k, OL, OC, LOC, COOD); + if (COOD[Z] == 1 && LOC[Z] == 1) + set_z_location(para, var, flagw, gz, w0, i, j, k, OL, OC, LOC, COOD); + + if (it > itmax) { + printf("Error: advection.c can not track the location for VY(%d, %d,%d)", + i, j, k); + printf("after %d iterations.\n", it); + return 1; + } + } /* End of while() loop */ + + /* Set the coordinates of previous location if it is as boundary */ + if (u0 >= 0 && LOC[X] == 0) OC[X] -= 1; + if (v0 >= 0 && LOC[Y] == 0) OC[Y] -= 1; + if (w0 >= 0 && LOC[Z] == 0) OC[Z] -= 1; + + if (u0 < 0 && LOC[X] == 1) OC[X] -= 1; + if (v0 < 0 && LOC[Y] == 1) OC[Y] -= 1; + if (w0 < 0 && LOC[Z] == 1) OC[Z] -= 1; + + /*------------------------------------------------------------------------- + | Interpolating for all variables + -------------------------------------------------------------------------*/ + x_1 = (OL[X] - x[IX(OC[X], OC[Y], OC[Z])]) + / (x[IX(OC[X] + 1, OC[Y], OC[Z])] - x[IX(OC[X], OC[Y], OC[Z])]); + y_1 = (OL[Y] - y[IX(OC[X], OC[Y], OC[Z])]) + / (y[IX(OC[X], OC[Y] + 1, OC[Z])] - y[IX(OC[X], OC[Y], OC[Z])]); + z_1 = (OL[Z] - gz[IX(OC[X], OC[Y], OC[Z])]) + / (gz[IX(OC[X], OC[Y], OC[Z] + 1)] - gz[IX(OC[X], OC[Y], OC[Z])]); + d[IX(i, j, k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); + END_FOR + + /*--------------------------------------------------------------------------- + | define the b.c. + ---------------------------------------------------------------------------*/ + set_bnd(para, var, var_type, 0, d, BINDEX); + return 0; +} /* End of trace_vz() */ + +/**************************************************************************** +| Advection for scalar variables located in the center of control volume +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param index Index of trace substances or species +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int trace_scalar(PARA_DATA* para, REAL** var, int var_type, int index, + REAL* d, REAL* d0, int** BINDEX) { + int i, j, k; + int it; + int itmax = 20000; /* Max number of iterations for backward tracing */ + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL x_1, y_1, z_1; + REAL dt = para->mytime->dt; + REAL u0, v0, w0; + REAL* x = var[X], * y = var[Y], * z = var[Z]; + REAL* u = var[VX], * v = var[VY], * w = var[VZ]; + REAL* flagp = var[FLAGP]; + int COOD[3], LOC[3]; + REAL OL[3]; + int OC[3]; + + FOR_EACH_CELL + /* Do not trace for boundary cells */ + if (flagp[IX(i, j, k)] >= 0) continue; + + /*------------------------------------------------------------------------- + | Step 1: Tracing Back + -------------------------------------------------------------------------*/ + /* Get velocities at the location of scalar variable */ + u0 = (REAL)0.5 * (u[IX(i, j, k)] + u[IX(i - 1, j, k)]); + v0 = (REAL)0.5 * (v[IX(i, j, k)] + v[IX(i, j - 1, k)]); + w0 = (REAL)0.5 * (w[IX(i, j, k)] + w[IX(i, j, k - 1)]); + /* Find the location at previous time step */ + OL[X] = x[IX(i, j, k)] - u0 * dt; + OL[Y] = y[IX(i, j, k)] - v0 * dt; + OL[Z] = z[IX(i, j, k)] - w0 * dt; + /* Initialize the coordinates of previous step */ + OC[X] = i; + OC[Y] = j; + OC[Z] = k; + /* Initialize the signs for tracing process */ + /* Completed: 0; In process: 1 */ + COOD[X] = 1; + COOD[Y] = 1; + COOD[Z] = 1; + /* Initialize the flags for recording if the tracing back hits the boundary */ + /* Hit the boundary: 0; Not hit the boundary: 1 */ + LOC[X] = 1; + LOC[Y] = 1; + LOC[Z] = 1; + /*Initialize the number of iterations*/ + it = 1; + + /* Trace back more if the any of the trace is still in process */ + while (COOD[X] == 1 || COOD[Y] == 1 || COOD[Z] == 1) { + it++; + /* If trace in X is in process and donot hit the boundary */ + if (COOD[X] == 1 && LOC[X] == 1) + set_x_location(para, var, flagp, x, u0, i, j, k, OL, OC, LOC, COOD); + /* If trace in Y is in process and donot hit the boundary */ + if (COOD[Y] == 1 && LOC[Y] == 1) + set_y_location(para, var, flagp, y, v0, i, j, k, OL, OC, LOC, COOD); + /* If trace in Z is in process and donot hit the boundary */ + if (COOD[Z] == 1 && LOC[Z] == 1) + set_z_location(para, var, flagp, z, w0, i, j, k, OL, OC, LOC, COOD); + if (it > itmax) { + sprintf(msg, "trace_scalar(): Could not track the location for scalar " + "variable %d at cell(%d, %d,%d) after %d iterations", + var_type, i, j, k, it); + ffd_log(msg, FFD_ERROR); + return 1; + } + } /* End of while() for backward tracing */ + + /* Set the coordinates of previous location if it is as boundary */ + if (u0 >= 0 && LOC[X] == 0) OC[X] -= 1; + if (v0 >= 0 && LOC[Y] == 0) OC[Y] -= 1; + if (w0 >= 0 && LOC[Z] == 0) OC[Z] -= 1; + + if (u0 < 0 && LOC[X] == 1) OC[X] -= 1; + if (v0 < 0 && LOC[Y] == 1) OC[Y] -= 1; + if (w0 < 0 && LOC[Z] == 1) OC[Z] -= 1; + + /*Store the local minimum and maximum values*/ + var[LOCMIN][IX(i, j, k)] = check_min(para, d0, OC[X], OC[Y], OC[Z]); + var[LOCMAX][IX(i, j, k)] = check_max(para, d0, OC[X], OC[Y], OC[Z]); + + /*------------------------------------------------------------------------- + | Interpolate + -------------------------------------------------------------------------*/ + x_1 = (OL[X] - x[IX(OC[X], OC[Y], OC[Z])]) + / (x[IX(OC[X] + 1, OC[Y], OC[Z])] - x[IX(OC[X], OC[Y], OC[Z])]); + y_1 = (OL[Y] - y[IX(OC[X], OC[Y], OC[Z])]) + / (y[IX(OC[X], OC[Y] + 1, OC[Z])] - y[IX(OC[X], OC[Y], OC[Z])]); + z_1 = (OL[Z] - z[IX(OC[X], OC[Y], OC[Z])]) + / (z[IX(OC[X], OC[Y], OC[Z] + 1)] - z[IX(OC[X], OC[Y], OC[Z])]); + d[IX(i, j, k)] = interpolation(para, d0, x_1, y_1, z_1, OC[X], OC[Y], OC[Z]); + END_FOR /* End of loop for all cells */ + + /*--------------------------------------------------------------------------- + | Define the b.c. + ---------------------------------------------------------------------------*/ + set_bnd(para, var, var_type, index, d, BINDEX); + return 0; +} /* End of trace_scalar() */ + +/**************************************************************************** +| Find the X-location and coordinates at previous time step +| +| Conducting backward tracing for the particle's X-location and +| corresponding coordinates at the previous time step. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the property of the cell +| \param x Pointer to the current position x(t) of particle +| \param u0 X-velocity at time (t-1) in location x(t) +| \param i I-index for cell at time t at x(t) +| \param j J-index for cell at time t at x(t) +| \param k K-index for cell at time t at x(t) +| \param OL Pointer to the locations of particle at time (t-1) +| \param OC Pointer to the coordinates of particle at time (t-1) +| \param LOC Pointer to flags recording if tracing back hits the boundary +| \param COOD Pointer to record the status of tracing back process +| +| \return void No return needed +****************************************************************************/ +void set_x_location(PARA_DATA* para, REAL** var, REAL* flag, REAL* x, REAL u0, + int i, int j, int k, + REAL* OL/*the coordinates*/, int* OC/*the index*/, int* LOC/*hit wall*/, int* COOD/*finish*/) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + + /**************************************************************************** + | If the previous location is equal to current position + | stop the process (COOD[X] = 0) + ****************************************************************************/ + if (OL[X] == x[IX(OC[X], OC[Y], OC[Z])]) + COOD[X] = 0; + /**************************************************************************** + | Otherwise, if previous location is on the west of the current position + ****************************************************************************/ + else if (OL[X] < x[IX(OC[X], OC[Y], OC[Z])]) { + /* If donot reach the boundary yet, move to west */ + if (OC[X] > 0) + OC[X] -= 1; + + /* If the previous position is on the east of new location, stop the process */ + if (OL[X] >= x[IX(OC[X], OC[Y], OC[Z])]) + + COOD[X] = 0; + + /* If the new position is solid */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 1) { + /* Use the east cell for new location */ + OL[X] = x[IX(OC[X] + 1, OC[Y], OC[Z])]; + OC[X] += 1; + /* Hit the boundary */ + LOC[X] = 0; + /* Stop the trace process */ + COOD[X] = 0; + } /* End of if() for solid */ + + /* If the new position is inlet or outlet */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 0 || flag[IX(OC[X], OC[Y], OC[Z])] == 2 || flag[IX(OC[X], OC[Y], OC[Z])] == 3) { + /* Use new position */ + OL[X] = x[IX(OC[X], OC[Y], OC[Z])]; + /* use east cell for coordinate */ + OC[X] += 1; + /* Hit the boundary */ + LOC[X] = 0; + /* Stop the trace process */ + COOD[X] = 0; + } /* End of if() for inlet or outlet */ + } /* End of if() for previous position is on the west of new position */ + /**************************************************************************** + | Otherwise, if previous location is on the east of the current position + ****************************************************************************/ + else { + /* If not at the east boundary */ + if (OC[X] <= imax) + /* Move to east */ + OC[X] += 1; + + /* If the previous position is on the west of new position */ + if (OL[X] <= x[IX(OC[X], OC[Y], OC[Z])]) + /* Stop the trace process */ + COOD[X] = 0; + + /* If the cell is solid */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 1) { + /* Use west cell */ + OL[X] = x[IX(OC[X] - 1, OC[Y], OC[Z])]; + OC[X] -= 1; + /* Hit the boundary */ + LOC[X] = 0; + /* Stop the trace process */ + COOD[X] = 0; + } /* End of if() for solid */ + + /* If the new position is inlet or outlet */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 0 || flag[IX(OC[X], OC[Y], OC[Z])] == 2 || flag[IX(OC[X], OC[Y], OC[Z])] == 3) { + /* Use the current cell for previous location */ + OL[X] = x[IX(OC[X], OC[Y], OC[Z])]; + /* Use the west cell for coordinate */ + OC[X] -= 1; + /* Hit the boundary */ + LOC[X] = 0; + /* Stop the trace process */ + COOD[X] = 0; + } /* End of if() for inlet or outlet */ + } /* End of if() for previous position is on the east of new position */ +} /* End of set_x_location() */ + + +/**************************************************************************** +| Find the Y-location and coordinates at previous time step +| +| Conducting backward tracing for the particle's Y-location and +| corresponding coordinates at the previous time step. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the property of the cell +| \param y Pointer to the current position y(t) of particle +| \param v0 Y-velocity at time (t-1) in location y(t) +| \param i I-index for cell at time t at y(t) +| \param j J-index for cell at time t at y(t) +| \param k K-index for cell at time t at y(t) +| \param OL Pointer to the locations of particle at time (t-1) +| \param OC Pointer to the coordinates of particle at time (t-1) +| \param LOC Pointer to flags recording if tracing back hits the boundary +| \param COOD Pointer to record the status of tracing back process +| +| \return void No return needed +****************************************************************************/ +void set_y_location(PARA_DATA* para, REAL** var, REAL* flag, REAL* y, REAL v0, + int i, int j, int k, + REAL* OL, int* OC, int* LOC, int* COOD) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + + /**************************************************************************** + | If the previous location is equal to current position, + | stop the process (COOD[X] = 0) + ****************************************************************************/ + if (OL[Y] == y[IX(OC[X], OC[Y], OC[Z])]) + COOD[Y] = 0; + /**************************************************************************** + | Otherwise, if previous location is on the south of the current position + ****************************************************************************/ + else if (OL[Y] < y[IX(OC[X], OC[Y], OC[Z])]) { + /* If donot reach the boundary yet */ + if (OC[Y] > 0) + OC[Y] -= 1; + + /* If the previous position is on the north of new location */ + if (OL[Y] >= y[IX(OC[X], OC[Y], OC[Z])]) + /* Stop the process */ + COOD[Y] = 0; + + /* If the new position is solid */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 1) { + /* Use the north cell for new location */ + OL[Y] = y[IX(OC[X], OC[Y] + 1, OC[Z])]; + OC[Y] += 1; + /* Hit the boundary */ + LOC[Y] = 0; + /* Stop the trace process */ + COOD[Y] = 0; + } /* End of if() for solid */ + + /* If the new position is inlet or outlet */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 0 || flag[IX(OC[X], OC[Y], OC[Z])] == 2 || flag[IX(OC[X], OC[Y], OC[Z])] == 3) { + /* Use new position */ + OL[Y] = y[IX(OC[X], OC[Y], OC[Z])]; + /* Use north cell for coordinate */ + OC[Y] += 1; + /* Hit the boundary */ + LOC[Y] = 0; + /* Stop the trace process */ + COOD[Y] = 0; + } /* End of if() for inlet or outlet */ + } /* End of if() for previous position is on the south of new position */ + /**************************************************************************** + | Otherwise, if previous location is on the north of the current position + ****************************************************************************/ + else { + /* If not at the north boundary */ + if (OC[Y] <= jmax) + /* Move to north */ + OC[Y] += 1; + + /* If the previous position is on the south of new position */ + if (OL[Y] <= y[IX(OC[X], OC[Y], OC[Z])]) + /* Stop the trace process */ + COOD[Y] = 0; + + /* If the cell is solid */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 1) { + /* Use south cell */ + OL[Y] = y[IX(OC[X], OC[Y] - 1, OC[Z])]; + OC[Y] -= 1; + /* Hit the boundary */ + LOC[Y] = 0; + /* Stop the trace process */ + COOD[Y] = 0; + } /* End of if() for solid */ + + /* If the new position is inlet or outlet */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 0 || flag[IX(OC[X], OC[Y], OC[Z])] == 2 || flag[IX(OC[X], OC[Y], OC[Z])] == 3) { + /* Use the current cell for previous location */ + OL[Y] = y[IX(OC[X], OC[Y], OC[Z])]; + /* Use the south cell for coordinate */ + OC[Y] -= 1; + /* Hit the boundary */ + LOC[Y] = 0; + /* Stop the trace process */ + COOD[Y] = 0; + } /* End of if() for inlet or outlet */ + } /* End of if() for previous position is on the east of new position */ +} /* End of set_x_location() */ + +/**************************************************************************** +| Find the Z-location and coordinates at previous time step +| +| Conducting backward tracing for the particle's Z-location and +| corresponding coordinates at the previous time step. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the property of the cell +| \param Z Pointer to the current position y(t) of particle +| \param w0 Z-velocity at time (t-1) in location z(t) +| \param i I-index for cell at time t at z(t) +| \param j J-index for cell at time t at z(t) +| \param k K-index for cell at time t at z(t) +| \param OL Pointer to the locations of particle at time (t-1) +| \param OC Pointer to the coordinates of particle at time (t-1) +| \param LOC Pointer to flags recording if tracing back hits the boundary +| \param COOD Pointer to record the status of tracing back process +| +| \return void No return needed +****************************************************************************/ +void set_z_location(PARA_DATA* para, REAL** var, REAL* flag, REAL* z, REAL w0, + int i, int j, int k, + REAL* OL, int* OC, int* LOC, int* COOD) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + + /**************************************************************************** + | If the previous location is equal to current position, + | stop the process (COOD[Z] = 0) + ****************************************************************************/ + if (OL[Z] == z[IX(OC[X], OC[Y], OC[Z])]) + COOD[Z] = 0; + /**************************************************************************** + | Otherwise, if previous location is on the floor of the current position + ****************************************************************************/ + else if (OL[Z] < z[IX(OC[X], OC[Y], OC[Z])]) { + /* If donot reach the boundary yet */ + if (OC[Z] > 0) + OC[Z] -= 1; + + /* If the previous position is on the ceiling of new location */ + if (OL[Z] >= z[IX(OC[X], OC[Y], OC[Z])]) + /* Stop the process */ + COOD[Z] = 0; + + /* If the new position is solid */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 1) { + /* Use the ceiling cell for new location */ + OL[Z] = z[IX(OC[X], OC[Y], OC[Z] + 1)]; + OC[Z] += 1; + /* Hit the boundary */ + LOC[Z] = 0; + /* Stop the trace process */ + COOD[Z] = 0; + } /* End of if() for solid */ + + /* If the new position is inlet or outlet */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 0 || flag[IX(OC[X], OC[Y], OC[Z])] == 2 || flag[IX(OC[X], OC[Y], OC[Z])] == 3) { + /* Use new position */ + OL[Z] = z[IX(OC[X], OC[Y], OC[Z])]; + /* Use ceiling cell for coordinate */ + OC[Z] += 1; + /* Hit the boundary */ + LOC[Z] = 0; + /* Stop the trace process */ + COOD[Z] = 0; + } /* End of if() for inlet or outlet */ + } /* End of if() for previous position is on the floor of new position */ + /**************************************************************************** + | Otherwise, if previous location is on the ceiling of the current position + -***************************************************************************/ + else { + /* If not at the ceiling boundary */ + if (OC[Z] <= kmax) + /* Move to ceiling */ + OC[Z] += 1; + + /* If the previous position is on the floor of new position */ + if (OL[Z] <= z[IX(OC[X], OC[Y], OC[Z])]) + /* Stop the trace process */ + COOD[Z] = 0; + + /* If the cell is solid */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 1) { + /* Use floor cell */ + OL[Z] = z[IX(OC[X], OC[Y], OC[Z] - 1)]; + OC[Z] -= 1; + /* Hit the boundary */ + LOC[Z] = 0; + /* Stop the trace process */ + COOD[Z] = 0; + } /* End of if() for solid */ + + /* If the new position is inlet or outlet */ + if (flag[IX(OC[X], OC[Y], OC[Z])] == 0 || flag[IX(OC[X], OC[Y], OC[Z])] == 2 || flag[IX(OC[X], OC[Y], OC[Z])] == 3) { + /* Use the current cell for previous location */ + OL[Z] = z[IX(OC[X], OC[Y], OC[Z])]; + /* Use the floor cell for coordinate */ + OC[Z] -= 1; + /* Hit the boundary */ + LOC[Z] = 0; + /* Stop the trace process */ + COOD[Z] = 0; + } /* End of if() for inlet or outlet */ + } /* End of if() for previous position is on the east of new position */ +} /* End of set_z_location() */ + + + /*************************************************************************** + | Calculate coefficients for advection equation solver using implicit scheme + | The advection term can be either descritized in first-order upwind scheme or + | centeral differencing scheme + | Wei Tian 6/2/2017 @ Andover, MA + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | \param psi Pointer to the variable at current time step + | \param psi0 Pointer to the variable at previous time step + | \param var_type Type of variable + | \param index Index of trace substance or species + | \param BINDEX Pointer to boundary index + | + | \return 0 if no error occurred + ***************************************************************************/ +int coef_adv(PARA_DATA* para, REAL** var, REAL* psi, REAL* psi0, + int var_type, int index, int** BINDEX) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL* aw = var[AW], * ae = var[AE], * as = var[AS], * an = var[AN]; + REAL* af = var[AF], * ab = var[AB], * ap = var[AP], * ap0 = var[AP0], * b = var[B]; + REAL* x = var[X], * y = var[Y], * z = var[Z]; + REAL* gx = var[GX], * gy = var[GY], * gz = var[GZ]; + REAL* u = var[VX], * v = var[VY], * w = var[VZ]; + REAL* Temp = var[TEMP]; + REAL dxe, dxw, dyn, dys, dzf, dzb, Dx, Dy, Dz; + /* define the velocity at the face of control volume */ + REAL uw, ue, vs, vn, wb, wf; + /* define the flow rate at the surface */ + REAL Fw, Fe, Fs, Fn, Fb, Ff; + REAL dt = para->mytime->dt, beta = para->prob->beta; + + /* define kapa */ + switch (var_type) { + /*------------------------------------------------------------------------- + | X-velocity + | Initially implemented by Wei Tian at Schneider Electric, Andover, MA + | 6/5/2017 + -------------------------------------------------------------------------*/ + case VX: + + FOR_U_CELL + /* define the dimensions */ + dxe = gx[IX(i + 1, j, k)] - gx[IX(i, j, k)]; + dxw = gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]; + Dx = x[IX(i + 1, j, k)] - x[IX(i, j, k)]; + Dy = gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]; + Dz = gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]; + + /* define the velocity at the surface */ + uw = 0.5 * (u[IX(i - 1, j, k)] + u[IX(i, j, k)]); + ue = 0.5 * (u[IX(i, j, k)] + u[IX(i + 1, j, k)]); + vs = 0.5 * (v[IX(i, j - 1, k)] + v[IX(i + 1, j - 1, k)]); + vn = 0.5 * (v[IX(i, j, k)] + v[IX(i + 1, j, k)]); + wb = 0.5 * (w[IX(i, j, k - 1)] + w[IX(i + 1, j, k - 1)]); + wf = 0.5 * (w[IX(i, j, k)] + w[IX(i + 1, j, k)]); + + /* define the flow rate at the surface */ + Fw = uw * Dy * Dz; + Fe = ue * Dy * Dz; + Fs = vs * Dx * Dz; + Fn = vn * Dx * Dz; + Fb = wb * Dx * Dy; + Ff = wf * Dx * Dy; + + /* define the coefficient for calculation */ + aw[IX(i, j, k)] = max(Fw, 0); + ae[IX(i, j, k)] = max(-Fe, 0); + as[IX(i, j, k)] = max(Fs, 0); + an[IX(i, j, k)] = max(-Fn, 0); + ab[IX(i, j, k)] = max(Fb, 0); + af[IX(i, j, k)] = max(-Ff, 0); + ap0[IX(i, j, k)] = Dx * Dy * Dz / dt; + b[IX(i, j, k)] = psi0[IX(i, j, k)] * ap0[IX(i, j, k)]; + END_FOR + + /* Set boundary conditions */ + set_bnd_vel_adv(para, var, var_type, psi, BINDEX); + + /* Set coefficient AP */ + FOR_U_CELL + ap[IX(i, j, k)] = ap0[IX(i, j, k)] + ae[IX(i, j, k)] + aw[IX(i, j, k)] + + an[IX(i, j, k)] + as[IX(i, j, k)] + af[IX(i, j, k)] + ab[IX(i, j, k)] + + Fe - Fw + Fn - Fs + Ff - Fb; + END_FOR + + /* Add the source terms */ + /*source_diff(para, var, var_type, index);*/ + break; + /*------------------------------------------------------------------------- + | Y-velocity + | Initially implemented by Wei Tian at Schneider Electric, Andover, MA + | 6/5/2017 + -------------------------------------------------------------------------*/ + case VY: + + FOR_V_CELL + /* define the dimensions */ + dyn = gy[IX(i, j + 1, k)] - gy[IX(i, j, k)]; + dys = gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]; + Dx = gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]; + Dy = y[IX(i, j + 1, k)] - y[IX(i, j, k)]; + Dz = gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]; + + /* define the velocity at the surface */ + uw = 0.5 * (u[IX(i - 1, j, k)] + u[IX(i - 1, j + 1, k)]); + ue = 0.5 * (u[IX(i, j, k)] + u[IX(i, j + 1, k)]); + vs = 0.5 * (v[IX(i, j - 1, k)] + v[IX(i, j, k)]); + vn = 0.5 * (v[IX(i, j, k)] + v[IX(i, j + 1, k)]); + wb = 0.5 * (w[IX(i, j, k - 1)] + w[IX(i, j + 1, k - 1)]); + wf = 0.5 * (w[IX(i, j, k)] + w[IX(i, j + 1, k)]); + + /* define the flow rate at the surface */ + Fw = uw * Dy * Dz; + Fe = ue * Dy * Dz; + Fs = vs * Dx * Dz; + Fn = vn * Dx * Dz; + Fb = wb * Dx * Dy; + Ff = wf * Dx * Dy; + + /* define the coefficient for calculation */ + aw[IX(i, j, k)] = max(Fw, 0); + ae[IX(i, j, k)] = max(-Fe, 0); + as[IX(i, j, k)] = max(Fs, 0); + an[IX(i, j, k)] = max(-Fn, 0); + ab[IX(i, j, k)] = max(Fb, 0); + af[IX(i, j, k)] = max(-Ff, 0); + ap0[IX(i, j, k)] = Dx * Dy * Dz / dt; + b[IX(i, j, k)] = psi0[IX(i, j, k)] * ap0[IX(i, j, k)]; + END_FOR + + /* Set boundary conditions */ + set_bnd_vel_adv(para, var, var_type, psi, BINDEX); + + /* Set coefficient AP */ + FOR_V_CELL + ap[IX(i, j, k)] = ap0[IX(i, j, k)] + ae[IX(i, j, k)] + aw[IX(i, j, k)] + + an[IX(i, j, k)] + as[IX(i, j, k)] + af[IX(i, j, k)] + ab[IX(i, j, k)] + + Fe - Fw + Fn - Fs + Ff - Fb; + END_FOR + + /* Add the source terms */ + /*source_diff(para, var, var_type, index);*/ + break; + /*------------------------------------------------------------------------- + | Z-velocity + | Initially implemented by Wei Tian at Schneider Electric, Andover, MA + | 6/5/2017 + -------------------------------------------------------------------------*/ + case VZ: + + FOR_W_CELL + /* define the dimensions */ + dzf = gz[IX(i, j, k + 1)] - gz[IX(i, j, k)]; + dzb = gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]; + Dx = gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]; + Dy = gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]; + Dz = z[IX(i, j, k + 1)] - z[IX(i, j, k)]; + + /* define the velocity at the surface */ + uw = 0.5 * (u[IX(i - 1, j, k)] + u[IX(i - 1, j, k + 1)]); + ue = 0.5 * (u[IX(i, j, k)] + u[IX(i, j, k + 1)]); + vs = 0.5 * (v[IX(i, j - 1, k)] + v[IX(i, j - 1, k + 1)]); + vn = 0.5 * (v[IX(i, j, k)] + v[IX(i, j, k + 1)]); + wb = 0.5 * (w[IX(i, j, k - 1)] + w[IX(i, j, k)]); + wf = 0.5 * (w[IX(i, j, k)] + w[IX(i, j, k + 1)]); + + + /* define the flow rate at the surface */ + Fw = uw * Dy * Dz; + Fe = ue * Dy * Dz; + Fs = vs * Dx * Dz; + Fn = vn * Dx * Dz; + Fb = wb * Dx * Dy; + Ff = wf * Dx * Dy; + + /* define the coefficient for calculation */ + aw[IX(i, j, k)] = max(Fw, 0); + ae[IX(i, j, k)] = max(-Fe, 0); + as[IX(i, j, k)] = max(Fs, 0); + an[IX(i, j, k)] = max(-Fn, 0); + ab[IX(i, j, k)] = max(Fb, 0); + af[IX(i, j, k)] = max(-Ff, 0); + ap0[IX(i, j, k)] = Dx * Dy * Dz / dt; + b[IX(i, j, k)] = psi0[IX(i, j, k)] * ap0[IX(i, j, k)]; + END_FOR + + /* Add the source terms */ + /*source_diff(para, var, var_type, index);*/ + /* Set boundary conditions */ + set_bnd_vel_adv(para, var, var_type, psi, BINDEX); + + FOR_W_CELL + ap[IX(i, j, k)] = ap0[IX(i, j, k)] + ae[IX(i, j, k)] + aw[IX(i, j, k)] + + an[IX(i, j, k)] + as[IX(i, j, k)] + af[IX(i, j, k)] + ab[IX(i, j, k)] + + Fe - Fw + Fn - Fs + Ff - Fb; + END_FOR + + /* Add the source terms */ + /*source_diff(para, var, var_type, index);*/ + break; + /*------------------------------------------------------------------------- + | Scalar Variable + | Initially implemented by Wei Tian at Schneider Electric, Andover, MA + | 6/5/2017 + -------------------------------------------------------------------------*/ + case TEMP: + case Xi1: + case Xi2: + case C1: + case C2: + + FOR_EACH_CELL + /* define the dimensions */ + Dx = gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]; + Dy = gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]; + Dz = gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]; + + /* define the velocity at the surface */ + uw = u[IX(i - 1, j, k)]; + ue = u[IX(i, j, k)]; + vs = v[IX(i, j - 1, k)]; + vn = v[IX(i, j, k)]; + wb = w[IX(i, j, k - 1)]; + wf = w[IX(i, j, k)]; + + + /* define the flow rate at the surface */ + Fw = uw * Dy * Dz; + Fe = ue * Dy * Dz; + Fs = vs * Dx * Dz; + Fn = vn * Dx * Dz; + Fb = wb * Dx * Dy; + Ff = wf * Dx * Dy; + + /* define the coefficient for calculation */ + aw[IX(i, j, k)] = max(Fw, 0); + ae[IX(i, j, k)] = max(-Fe, 0); + as[IX(i, j, k)] = max(Fs, 0); + an[IX(i, j, k)] = max(-Fn, 0); + ab[IX(i, j, k)] = max(Fb, 0); + af[IX(i, j, k)] = max(-Ff, 0); + ap0[IX(i, j, k)] = Dx * Dy * Dz / dt; + b[IX(i, j, k)] = psi0[IX(i, j, k)] * ap0[IX(i, j, k)]; + END_FOR + + /* Set boundary conditions */ + set_bnd_temp_adv(para, var, var_type, psi, BINDEX); + + /* This idea is derived from Chris at Schneider Electric */ + /* Often, the projection cannot be solved in desired accuracy, */ + /* Thus, there exists imbalance of mass after projection */ + /* Then, the temperature field is likely to be blown off. */ + /* The solution is to change the denominator by removing Fe - Fw + Fn - Fs + Ff - Fb in AP */ + FOR_EACH_CELL + ap[IX(i, j, k)] = ap0[IX(i, j, k)] + ae[IX(i, j, k)] + aw[IX(i, j, k)] + + an[IX(i, j, k)] + as[IX(i, j, k)] + af[IX(i, j, k)] + ab[IX(i, j, k)]; + /*+ Fe - Fw + Fn - Fs + Ff - Fb;*/ + END_FOR + + /* Add the source terms */ + /*source_diff(para, var, var_type, index);*/ + break; + default: + sprintf(msg, "coe_adv(): No function for variable type %d", var_type); + ffd_log(msg, FFD_ERROR); + return 1; + } + + return 0; +}/* End of coef_adv( ) */ + +int implicit_vx(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX) { + int flag = 0; + coef_adv(para, var, d, d0, var_type, index, BINDEX); + if (flag != 0) { + ffd_log("implicit_vx(): Could not calculate coefficients for " + "advection equation.", FFD_ERROR); + return flag; + } + if (equ_solver(para, var, ADV, var_type, d) != 0) { + ffd_log("implicit_vx(): failed to solve the equation for advection", FFD_ERROR); + return 1; + } + /* Define B.C. */ + set_bnd_vel_adv(para, var, var_type, d, BINDEX); + + return 0; +} + +int implicit_vy(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX) { + int flag = 0; + coef_adv(para, var, d, d0, var_type, index, BINDEX); + if (flag != 0) { + ffd_log("implicit_vy(): Could not calculate coefficients for " + "advection equation.", FFD_ERROR); + return flag; + } + if (equ_solver(para, var, ADV, var_type, d) != 0) { + ffd_log("implicit_vy(): failed to solve the equation for advection", FFD_ERROR); + return 1; + } + /* Define B.C. */ + set_bnd_vel_adv(para, var, var_type, d, BINDEX); + + return 0; +} + +int implicit_vz(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX) { + int flag = 0; + coef_adv(para, var, d, d0, var_type, index, BINDEX); + if (flag != 0) { + ffd_log("implicit_vz(): Could not calculate coefficients for " + "advection equation.", FFD_ERROR); + return flag; + } + if (equ_solver(para, var, ADV, var_type, d) != 0) { + ffd_log("implicit_vz(): failed to solve the equation for advection", FFD_ERROR); + return 1; + } + /* Define B.C. */ + set_bnd_vel_adv(para, var, var_type, d, BINDEX); + + return 0; +} + +int implicit_scalar(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX) { + int flag = 0; + coef_adv(para, var, d, d0, var_type, index, BINDEX); + if (flag != 0) { + ffd_log("implicit_scalar(): Could not calculate coefficients for " + "advection equation.", FFD_ERROR); + return flag; + } + if (equ_solver(para, var, ADV, var_type, d) != 0) { + ffd_log("implicit_scalar(): failed to solve the equation for advection", FFD_ERROR); + return 1; + } + /* Define B.C. */ + /*set_bnd(para, var, var_type, index, d, BINDEX);*/ + set_bnd_temp_adv(para, var, var_type, d, BINDEX); + + return 0; +} diff --git a/Buildings/Resources/src/FastFluidDynamics/advection.h b/Buildings/Resources/src/FastFluidDynamics/advection.h index 9158ea03256..4a321872993 100644 --- a/Buildings/Resources/src/FastFluidDynamics/advection.h +++ b/Buildings/Resources/src/FastFluidDynamics/advection.h @@ -1,27 +1,33 @@ -/* - * @file advection.h - * - * @brief Solver for advection step - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - *This file provides functions that used for the advection step of FFD method. - *The advection starts with \c advect(). Then different subroutines are - *called according to the properties of the variables that are sorted by - *the location of variables assigned in the control volume. - *Velocities at X, Y and Z directions are located - *on the surface of the control volume. They are computed using - *subroutines: \c trace_vx(), \c trace_vy() and \ctrace_vz(). - *Scalar variables are in the center of control volume and they are computed - *using \c trace_scalar(). - */ +/*************************************************************************** +| +| \file advection.h +| +| \brief Solver for advection step +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| +| \date 6/16/2017 +| +| This file provides functions that used for the advection step of FFD method. +| The advection starts with \c advect(). Then different subroutines are +| called according to the properties of the variables that are sorted by +| the location of variables assigned in the control volume. +| Velocities at X, Y and Z directions are located +| on the surface of the control volume. They are computed using +| subroutines: \c trace_vx(), \c trace_vy() and \c trace_vz(). +| Scalar variables are in the center of control volume and they are computed +| using \c trace_scalar(). +| +***************************************************************************/ #ifndef _ADVECTION_H #define _ADVECTION_H @@ -52,158 +58,145 @@ #include "solver.h" #endif -/* - * Entrance of advection step - * - * Specific method for advection will be selected according to the variable - * type. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param index Index of trace substances or species - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ + +/*************************************************************************** +| Entrance of advection step +| +| Specific method for advection will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param index Index of trace substances or species +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +***************************************************************************/ int advect(PARA_DATA *para, REAL **var, int var_type, int index, REAL *d, REAL *d0, int **BINDEX); -/* - * Advection for velocity at X-direction - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/*************************************************************************** +| Advection for velocity at X-direction +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +***************************************************************************/ int trace_vx(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, int **BINDEX); -/* - * Advection for velocity at Y-direction - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/*************************************************************************** +| Advection for velocity at Y-direction +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +***************************************************************************/ int trace_vy(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, int **BINDEX); -/* - * Advection for velocity at Z-direction - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/*************************************************************************** +| Advection for velocity at Z-direction +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +***************************************************************************/ int trace_vz(PARA_DATA *para, REAL **var, int var_type, REAL *d, REAL *d0, int **BINDEX); -/* - * Advection for scalar variables located in the center of control volume - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable for advection solver - * @param index Index of trace substances or species - * @param d Pointer to the computed variables at previous time step - * @param d0 Pointer to the computed variables for current time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/*************************************************************************** +| Advection for scalar variables located in the center of control volume +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable for advection solver +| \param index Index of trace substances or species +| \param d Pointer to the computed variables at previous time step +| \param d0 Pointer to the computed variables for current time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +***************************************************************************/ int trace_scalar(PARA_DATA *para, REAL **var, int var_type, int index, REAL *d, REAL *d0, int **BINDEX); -/* - * Find the X-location and coordinates at previous time step - * - * Conducting backward tracing for the particle's X-location and - * corresponding coordinates at the previous time step. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the property of the cell - * @param x Pointer to the current position x(t) of particle - * @param u0 X-velocity at time (t-1) in location x(t) - * @param i I-index for cell at time t at x(t) - * @param j J-index for cell at time t at x(t) - * @param k K-index for cell at time t at x(t) - * @param OL Pointer to the locations of particle at time (t-1) - * @param OC Pointer to the coordinates of particle at time (t-1) - * @param LOC Pointer to flags recording if tracing back hits the boundary - * @param COOD Pointer to record the status of tracing back process - * - * @return void No return needed -*/ -void set_x_location(PARA_DATA *para, REAL **var, REAL *flag, REAL *x, REAL u0, - int i, int j, int k, - REAL *OL, int *OC, int *LOC , int *COOD); - -/* - * Find the Y-location and coordinates at previous time step - * - * Conducting backward tracing for the particle's Y-location and - * corresponding coordinates at the previous time step. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the property of the cell - * @param y Pointer to the current position y(t) of particle - * @param v0 Y-velocity at time (t-1) in location y(t) - * @param i I-index for cell at time t at y(t) - * @param j J-index for cell at time t at y(t) - * @param k K-index for cell at time t at y(t) - * @param OL Pointer to the locations of particle at time (t-1) - * @param OC Pointer to the coordinates of particle at time (t-1) - * @param LOC Pointer to flags recording if tracing back hits the boundary - * @param COOD Pointer to record the status of tracing back process - * - * @return void No return needed - */ -void set_y_location(PARA_DATA *para, REAL **var, REAL *flag, REAL *y, REAL v0, - int i, int j, int k, - REAL *OL, int *OC, int *LOC , int *COOD); - -/* - * Find the Z-location and coordinates at previous time step - * - * Conducting backward tracing for the particle's Z-location and - * corresponding coordinates at the previous time step. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the property of the cell - * @param Z Pointer to the current position y(t) of particle - * @param w0 Z-velocity at time (t-1) in location z(t) - * @param i I-index for cell at time t at z(t) - * @param j J-index for cell at time t at z(t) - * @param k K-index for cell at time t at z(t) - * @param OL Pointer to the locations of particle at time (t-1) - * @param OC Pointer to the coordinates of particle at time (t-1) - * @param LOC Pointer to flags recording if tracing back hits the boundary - * @param COOD Pointer to record the status of tracing back process - * - * @return void No return needed - */ -void set_z_location(PARA_DATA *para, REAL **var, REAL *flag, REAL *z, REAL w0, - int i, int j, int k, - REAL *OL, int *OC, int *LOC , int *COOD); +/*************************************************************************** +| Find the X-location and coordinates at previous time step +| +| Conducting backward tracing for the particle's X-location and +| corresponding coordinates at the previous time step. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the property of the cell +| \param x Pointer to the current position x(t) of particle +| \param u0 X-velocity at time (t-1) in location x(t) +| \param i I-index for cell at time t at x(t) +| \param j J-index for cell at time t at x(t) +| \param k K-index for cell at time t at x(t) +| \param OL Pointer to the locations of particle at time (t-1) +| \param OC Pointer to the coordinates of particle at time (t-1) +| \param LOC Pointer to flags recording if tracing back hits the boundary +| \param COOD Pointer to record the status of tracing back process +| +| \return void No return needed +***************************************************************************/ +void set_x_location(PARA_DATA* para, REAL** var, REAL* flag, REAL* x, REAL u0, + int i, int j, int k, + REAL* OL, int* OC, int* LOC, int* COOD); + +/*************************************************************************** +| Find the Y-location and coordinates at previous time step +| +| Conducting backward tracing for the particle's Y-location and +| corresponding coordinates at the previous time step. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the property of the cell +| \param y Pointer to the current position y(t) of particle +| \param v0 Y-velocity at time (t-1) in location y(t) +| \param i I-index for cell at time t at y(t) +| \param j J-index for cell at time t at y(t) +| \param k K-index for cell at time t at y(t) +| \param OL Pointer to the locations of particle at time (t-1) +| \param OC Pointer to the coordinates of particle at time (t-1) +| \param LOC Pointer to flags recording if tracing back hits the boundary +| \param COOD Pointer to record the status of tracing back process +| +| \return void No return needed +***************************************************************************/ +void set_y_location(PARA_DATA* para, REAL** var, REAL* flag, REAL* y, REAL v0, + int i, int j, int k, + REAL* OL, int* OC, int* LOC, int* COOD); + + +void set_z_location(PARA_DATA* para, REAL** var, REAL* flag, REAL* z, REAL w0, + int i, int j, int k, + REAL* OL, int* OC, int* LOC, int* COOD); + +int coef_adv(PARA_DATA* para, REAL** var, REAL* psi, REAL* psi0, int var_type, int index, int** BINDEX); +int implicit_vx(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX); +int implicit_vy(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX); +int implicit_vz(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX); +int implicit_scalar(PARA_DATA* para, REAL** var, int var_type, REAL* d, REAL* d0, int index, int** BINDEX); \ No newline at end of file diff --git a/Buildings/Resources/src/FastFluidDynamics/boundary.c b/Buildings/Resources/src/FastFluidDynamics/boundary.c index 2ffe4f9c575..79527aafbb9 100644 --- a/Buildings/Resources/src/FastFluidDynamics/boundary.c +++ b/Buildings/Resources/src/FastFluidDynamics/boundary.c @@ -1,42 +1,45 @@ -/* - * - * \file boundary.c - * - * \brief Set the boundary conditions - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - * This file provides functions that are used for setting the boundary - * conditions. - * It starts with \c set_bnd(). Then different subroutines are called - * according to the properties of variables. - * - */ +/*************************************************************************** +| +| \file boundary.c +| +| \brief Set the boundary conditions +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +| This file provides functions that are used for setting the boundary +| conditions. +| It starts with \c set_bnd(). Then different subroutines are called +| according to the properties of variables. +| +***************************************************************************/ #include "boundary.h" -/* - * Entrance of setting boundary conditions - * - * Specific boundary conditions will be selected according to the variable - * type. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable - * @param index Index of trace substances or species - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/*************************************************************************** +| Entrance of setting boundary conditions +| +| Specific boundary conditions will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param index Index of trace substances or species +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +***************************************************************************/ int set_bnd(PARA_DATA *para, REAL **var, int var_type, int index, REAL *psi, int **BINDEX) { int flag; @@ -83,20 +86,22 @@ int set_bnd(PARA_DATA *para, REAL **var, int var_type, int index, REAL *psi, } return flag; -} /* End of set_bnd()*/ - - - /* - * Set boundary conditions for velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +} /* End of set_bnd() */ + + +/*************************************************************************** +| Set boundary conditions for velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +| \ V1.0: 9/16/2017, by Wei Tian: first implementation by adding the boundary condition for tiles +| \ V2.0: 1/22/2018, by Wei Tian: add the boundary conditions for rack inlet and outlet +***************************************************************************/ int set_bnd_vel(PARA_DATA *para, REAL **var, int var_type, REAL *psi, int **BINDEX) { int i, j, k; @@ -108,6 +113,8 @@ int set_bnd_vel(PARA_DATA *para, REAL **var, int var_type, REAL *psi, REAL *aw = var[AW], *ae = var[AE], *as = var[AS], *an = var[AN]; REAL *af = var[AF], *ab = var[AB]; REAL *flagp = var[FLAGP]; + REAL axy=0, ayz=0, azx=0; + int put_X = para->geom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; switch(var_type) { /* -------------------------------------------------------------------------- @@ -118,38 +125,99 @@ int set_bnd_vel(PARA_DATA *para, REAL **var, int var_type, REAL *psi, i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; - /* Inlet*/ - if(flagp[IX(i,j,k)]==0) { + + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + + /* Inlet */ + if(flagp[IX(i,j,k)]==INLET) { psi[IX(i,j,k)] = var[VXBC][IX(i,j,k)]; if(i!=0) psi[IX(i-1,j,k)] = var[VXBC][IX(i,j,k)]; } - /* Solid wall*/ + /* Rack outlet */ + if(flagp[IX(i,j,k)]==RACK_OUTLET) { + psi[IX(i,j,k)] = var[VXBC][IX(i,j,k)]; + if (flagp[IX(i-1, j, k)] == -1) psi[IX(i - 1, j, k)] = var[VXBC][IX(i, j, k)]; + } + /* Solid wall */ if(flagp[IX(i,j,k)]==1) { - psi[IX(i,j,k)] = 0; - if(i!=0) psi[IX(i-1,j,k)] = 0; - } - /* Outlet*/ - if(flagp[IX(i,j,k)]==2) { - /* West*/ - if(i==0) { - psi[IX(i,j,k)] = psi[IX(i+1,j,k)]; - aw[IX(i+1,j,k)] = 0; + psi[IX(i, j, k)] = 0.0; + if (i != 0) psi[IX(i - 1, j, k)] = 0; + } + /* Tile */ + if(flagp[IX(i, j, k)] == TILE) { + if (flagp[IX(i, j, k)] == TILE && para->solv->tile_flow_correct == PRESSURE_BASE) { + /* West */ + if (i == 0) { + /*psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]/ayz;*/ + psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + /* East */ + if (i == imax + 1) { + /*psi[IX(i - 1, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)] / ayz;*/ + psi[IX(i - 1, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + } + else { + /* West */ + if (i == 0) { + psi[IX(i, j, k)] = psi[IX(i + 1, j, k)]; + aw[IX(i + 1, j, k)] = 0; + } + /* East */ + if (i == imax + 1) { + psi[IX(i - 1, j, k)] = psi[IX(i - 2, j, k)]; + ae[IX(i - 2, j, k)] = 0; + } + } + }/* end of outlet */ + /* Rack inlet, which is outlet of DC room */ + /* Apply a fixed velocity */ + if(flagp[IX(i,j,k)]==RACK_INLET){ + /* if west side is fluid */ + if (flagp[IX(i-1,j,k)]==-1) { + psi[IX(i-1,j,k)] = var[VXBC][IX(i,j,k)]; + } + /* if east side is fluid */ + if (flagp[IX(i+1,j,k)]==-1) { + psi[IX(i,j,k)] = var[VXBC][IX(i,j,k)]; + } + }/* end of setting rack inlet */ + + /* Outlet */ + if(flagp[IX(i,j,k)]==OUTLET){ + if (para->bc->outlet_bc == PRESCRIBED_VALUE){ + /*east*/ + if (i == imax + 1) { + psi[IX(i-1,j,k)] = var[VXBC][IX(i,j,k)]; + } + else { + psi[IX(i,j,k)] = var[VXBC][IX(i,j,k)]; + } } - /* East*/ - if(i==imax+1) { - psi[IX(i-1,j,k)] = psi[IX(i-2,j,k)]; - ae[IX(i-2,j,k)] = 0; - } - /* South*/ - if(j==0) as[IX(i,j+1,k)] = 0; - /* North*/ - if(j==jmax+1) an[IX(i,j-1,k)] = 0; - /* Floor*/ - if(k==0) ab[IX(i,j,k+1)] = 0; - /* Ceiling*/ - if(k==kmax+1) af[IX(i,j,k-1)] = 0; - } - } /* End of setting VX*/ + else{ + /* West */ + if (i == 0) { + psi[IX(i, j, k)] = psi[IX(i + 1, j, k)]; + aw[IX(i + 1, j, k)] = 0; + } + /* East */ + if (i == imax + 1) { + psi[IX(i - 1, j, k)] = psi[IX(i - 2, j, k)]; + ae[IX(i - 2, j, k)] = 0; + } + /* South */ + if(j==0) as[IX(i,j+1,k)] = 0; + /* North */ + if(j==jmax+1) an[IX(i,j-1,k)] = 0; + /* Floor */ + if(k==0) ab[IX(i,j,k+1)] = 0; + /* Ceiling */ + if(k==kmax+1) af[IX(i,j,k-1)] = 0; + } /*end of if (para->bc->outlet_bc == PRESCRIBED_VALUE)*/ + }/* end of if(flagp[IX(i,j,k)]==OUTLET)*/ + } /* End of setting VX */ break; /* -------------------------------------------------------------------------- | VY @@ -159,37 +227,98 @@ int set_bnd_vel(PARA_DATA *para, REAL **var, int var_type, REAL *psi, i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; - /* Inlet*/ - if(flagp[IX(i,j,k)]==0) { + + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + /* Inlet */ + if(flagp[IX(i,j,k)]==INLET) { psi[IX(i,j,k)] = var[VYBC][IX(i,j,k)]; if(j!=0) psi[IX(i,j-1,k)] = var[VYBC][IX(i,j,k)]; } - /* Solid wall*/ + /* Rack outlet */ + if(flagp[IX(i,j,k)]==RACK_OUTLET) { + psi[IX(i,j,k)] = var[VYBC][IX(i,j,k)]; + if (flagp[IX(i, j-1, k)] == -1) psi[IX(i, j - 1, k)] = var[VYBC][IX(i, j, k)]; + } + /* Solid wall */ if(flagp[IX(i,j,k)]==1) { - psi[IX(i,j,k)] = 0; - if(j!=0) psi[IX(i,j-1,k)] = 0; - } - /* Outlet*/ - if(flagp[IX(i,j,k)]==2) { - /* West*/ - if(i==0) aw[IX(i+1,j,k)]=0; - /* East*/ - if(i==imax+1) ae[IX(i-1,j,k)]=0; - /* South*/ - if(j==0) { - as[IX(i,j+1,k)] = 0; - psi[IX(i,j,k)] = psi[IX(i,j+1,k)]; + psi[IX(i, j, k)] = 0; + if (j != 0) psi[IX(i, j - 1, k)] = 0; + } + /* Tile */ + if(flagp[IX(i, j, k)] == TILE) { + if (flagp[IX(i, j, k)] == TILE && para->solv->tile_flow_correct == PRESSURE_BASE) { + /* South */ + if (j == 0) { + /*psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)] / azx;*/ + psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + /* North */ + if (j == jmax + 1) { + /*psi[IX(i, j - 1, k)] = var[TILE_FLOW_BC][IX(i, j, k)] / azx;*/ + psi[IX(i, j - 1, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } } - /* North*/ - if(j==jmax+1) { - an[IX(i,j-2,k)] = 0; - psi[IX(i,j-1,k)] = psi[IX(i,j-2,k)]; + else { + /* South */ + if (j == 0) { + as[IX(i, j + 1, k)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j + 1, k)]; + } + /* North */ + if (j == jmax + 1) { + an[IX(i, j - 2, k)] = 0; + psi[IX(i, j - 1, k)] = psi[IX(i, j - 2, k)]; + } } - /* Floor*/ - if(k==0) ab[IX(i,j,k+1)] = 0; - if(k==kmax+1) af[IX(i,j,k-1)] = 0; - } - } /* End of setting VY*/ + } /* end of setting outlet */ + /* Rack inlet, which is outlet of DC room */ + /* Apply a fixed velocity */ + if(flagp[IX(i,j,k)]==RACK_INLET){ + /* if south side is fluid */ + if (flagp[IX(i,j-1,k)]==-1) { + psi[IX(i,j-1,k)] = var[VYBC][IX(i,j,k)]; + } + /* if north side is fluid */ + if (flagp[IX(i,j+1,k)]==-1) { + psi[IX(i,j,k)] = var[VYBC][IX(i,j,k)]; + } + }/* end of setting rack inlet */ + + /* Outlet */ + if(flagp[IX(i,j,k)]==OUTLET){ + if (para->bc->outlet_bc == PRESCRIBED_VALUE){ + /*north*/ + if (j == jmax + 1) { + psi[IX(i,j-1,k)] = var[VYBC][IX(i,j,k)]; + } + else { + psi[IX(i,j,k)] = var[VYBC][IX(i,j,k)]; + } + } + else { + /* West */ + if(i==0) aw[IX(i+1,j,k)]=0; + /* East */ + if(i==imax+1) ae[IX(i-1,j,k)]=0; + /* South */ + if (j == 0) { + as[IX(i, j + 1, k)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j + 1, k)]; + } + /* North */ + if (j == jmax + 1) { + an[IX(i, j - 2, k)] = 0; + psi[IX(i, j - 1, k)] = psi[IX(i, j - 2, k)]; + } + /* Floor */ + if(k==0) ab[IX(i,j,k+1)] = 0; + /* celing */ + if(k==kmax+1) af[IX(i,j,k-1)] = 0; + } /* end of if (para->bc->outlet_bc == PRESCRIBED_VALUE) */ + }/* end of if(flagp[IX(i,j,k)]==OUTLET) */ + } /* End of setting VY */ break; /* -------------------------------------------------------------------------- | VZ @@ -199,54 +328,414 @@ int set_bnd_vel(PARA_DATA *para, REAL **var, int var_type, REAL *psi, i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; - /* Inlet*/ + + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + /* Inlet */ if(flagp[IX(i,j,k)]==INLET) { psi[IX(i,j,k)] = var[VZBC][IX(i,j,k)]; if(k!=0) psi[IX(i,j,k-1)] = var[VZBC][IX(i,j,k)]; } + /* Rack outlet */ + if(flagp[IX(i,j,k)]==RACK_OUTLET) { + psi[IX(i,j,k)] = var[VZBC][IX(i,j,k)]; + if (flagp[IX(i, j, k - 1)] == -1) psi[IX(i, j, k - 1)] = var[VZBC][IX(i, j, k)]; + } if(flagp[IX(i,j,k)]==SOLID) { - psi[IX(i,j,k)] = 0; - if(k!=0) psi[IX(i,j,k-1)] = 0; - } - if(flagp[IX(i,j,k)]==OUTLET) { - /* West*/ - if(i==0) aw[IX(i+1,j,k)] = 0; - /* East*/ - if(i==imax+1) ae[IX(i-1,j,k)] = 0; - /*South*/ - if(j==0) as[IX(i,j+1,k)] = 0; - /* North*/ - if(j==jmax+1) an[IX(i,j-1,k)] = 0; - /* Floor*/ - if(k==0) { - ab[IX(i,j,k+1)] = 0; - psi[IX(i,j,k)] = psi[IX(i,j,k+1)]; + psi[IX(i, j, k)] = 0; + if (k != 0) psi[IX(i, j, k - 1)] = 0; + } + if(flagp[IX(i, j, k)] == TILE) { + if(flagp[IX(i, j, k)] == TILE && para->solv->tile_flow_correct == PRESSURE_BASE) { + /* Floor */ + if (k == 0) { + /*psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)] / axy;*/ + psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + /*printf("----->>>>PSI is %f\n", psi[IX(i, j, k)]);*/ + /*getchar();*/ + } + /* Ceiling */ + if (k == kmax + 1) { + /*psi[IX(i, j, k - 1)] = var[TILE_FLOW_BC][IX(i, j, k)] / axy;*/ + psi[IX(i, j, k - 1)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } } - /* Ceiling*/ - if(k==kmax+1) { - af[IX(i,j,k-2)] = 0; - psi[IX(i,j,k-1)] = psi[IX(i,j,k-2)]; + else { + /* Floor */ + if (k == 0) { + ab[IX(i, j, k + 1)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j, k + 1)]; + } + /* Ceiling */ + if (k == kmax + 1) { + af[IX(i, j, k - 2)] = 0; + psi[IX(i, j, k - 1)] = psi[IX(i, j, k - 2)]; + } } - } - } /* End of setting VZ*/ + }/* end of if(flagp[IX(i, j, k)] == OUTLET || flagp[IX(i, j, k)] == TILE) */ + /* Rack inlet, which is outlet of DC room */ + /* Apply a fixed velocity */ + if(flagp[IX(i,j,k)]==RACK_INLET){ + /* if back side is fluid */ + if (flagp[IX(i,j,k-1)]==-1) { + psi[IX(i,j,k-1)] = var[VZBC][IX(i,j,k)]; + } + /* if front side is fluid */ + if (flagp[IX(i,j,k+1)] == FLUID) { + psi[IX(i,j,k)] = var[VZBC][IX(i,j,k)]; + } + }/* end of setting rack inlet */ + + /* Outlet */ + if(flagp[IX(i,j,k)]==OUTLET){ + if (para->bc->outlet_bc == PRESCRIBED_VALUE){ + /*ceiling*/ + if (k == kmax + 1) { + psi[IX(i,j,k-1)] = var[VZBC][IX(i,j,k)]; + } + else { + psi[IX(i,j,k)] = var[VZBC][IX(i,j,k)]; + } + } + else { + /* West */ + if(i==0) aw[IX(i+1,j,k)] = 0; + /* East */ + if(i==imax+1) ae[IX(i-1,j,k)] = 0; + /*South*/ + if(j==0) as[IX(i,j+1,k)] = 0; + /* North */ + if(j==jmax+1) an[IX(i,j-1,k)] = 0; + /* Floor */ + if (k == 0) { + ab[IX(i, j, k + 1)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j, k + 1)]; + } + /* Ceiling */ + if (k == kmax + 1) { + af[IX(i, j, k - 2)] = 0; + psi[IX(i, j, k - 1)] = psi[IX(i, j, k - 2)]; + } + } /*end of if (para->bc->outlet_bc == PRESCRIBED_VALUE)*/ + }/* end of if(flagp[IX(i,j,k)]==OUTLET) */ + } /* End of setting VZ */ break; - } /* End of switch case*/ + } /* End of switch case */ return 0; -}/* End of set_bnd_vel( )*/ - - -/* - * Set the boundary condition for temperature - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +}/* End of set_bnd_vel( ) */ + + + /*************************************************************************** + | Set boundary conditions for velocity advection solved by implicit scheme + | Special treatment to the outlet as the coefficient shouldn't be set as zero + | Wei Tian 6/16/2017, Schneider Electric, MA + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | \param var_type The type of variable + | \param psi Pointer to the variable needing the boundary conditions + | \param BINDEX Pointer to boundary index + | + | \return 0 if no error occurred + | \ V1.0: 6/16/2017, by Wei Tian: first implementation + | \ V2.0: 1/22/2018, by Wei Tian: add the boundary conditions for rack inlet and outlet + ***************************************************************************/ +int set_bnd_vel_adv(PARA_DATA *para, REAL **var, int var_type, REAL *psi, + int **BINDEX) { + int i, j, k; + int it; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int index = para->geom->index; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL *aw = var[AW], *ae = var[AE], *as = var[AS], *an = var[AN]; + REAL *af = var[AF], *ab = var[AB]; + REAL *flagp = var[FLAGP]; + REAL axy=0, ayz=0, azx=0; + int put_X = para->geom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; + + switch (var_type) { + /* -------------------------------------------------------------------------- + | VX + -------------------------------------------------------------------------- */ + case VX: + for (it = 0; itsolv->tile_flow_correct == PRESSURE_BASE) { + /* West */ + if (i == 0) { + psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + /* East */ + if (i == imax + 1) { + psi[IX(i - 1, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + } + /* Tile && NOT PRESSURE_BASE */ + else { + /* West */ + if (i == 0) { + psi[IX(i, j, k)] = psi[IX(i + 1, j, k)]; + } + /* East */ + if (i == imax + 1) { + psi[IX(i - 1, j, k)] = psi[IX(i - 2, j, k)]; + } + } + } + + /* Outlet */ + if(flagp[IX(i,j,k)]==OUTLET){ + if (para->bc->outlet_bc == PRESCRIBED_VALUE){ + /*east*/ + if (i == imax + 1) { + psi[IX(i-1,j,k)] = var[VXBC][IX(i,j,k)]; + } + else { + psi[IX(i,j,k)] = var[VXBC][IX(i,j,k)]; + } + } + else{ + /* West */ + if (i == 0) { + psi[IX(i, j, k)] = psi[IX(i + 1, j, k)]; + } + /* East */ + if (i == imax + 1) { + psi[IX(i - 1, j, k)] = psi[IX(i - 2, j, k)]; + } + } /*end of if (para->bc->outlet_bc == PRESCRIBED_VALUE)*/ + }/* end of if(flagp[IX(i,j,k)]==OUTLET) */ + + /* Rack inlet, which is outlet of DC room */ + /* Apply a fixed velocity */ + if(flagp[IX(i,j,k)]==RACK_INLET){ + /* if west side is fluid */ + if (flagp[IX(i-1,j,k)]==-1) { + psi[IX(i-1,j,k)] = var[VXBC][IX(i,j,k)]; + } + /* if east side is fluid */ + if (flagp[IX(i+1,j,k)]==-1) { + psi[IX(i,j,k)] = var[VXBC][IX(i,j,k)]; + } + }/* end of setting rack inlet */ + } /* End of setting VX */ + break; + /* -------------------------------------------------------------------------- + | VY + -------------------------------------------------------------------------- */ + case VY: + for (it = 0; itsolv->tile_flow_correct == PRESSURE_BASE) { + /* South */ + if (j == 0) { + psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + /* North */ + if (j == jmax + 1) { + psi[IX(i, j - 1, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + } + /* Tile */ + else{ + /* South */ + if (j == 0) { + psi[IX(i, j, k)] = psi[IX(i, j + 1, k)]; + } + /* North */ + if (j == jmax + 1) { + psi[IX(i, j - 1, k)] = psi[IX(i, j - 2, k)]; + } + } + + /* Outlet: assign fix flow boundary */ + if(flagp[IX(i,j,k)]==OUTLET){ + if (para->bc->outlet_bc == PRESCRIBED_VALUE){ + /*north*/ + if (j == jmax + 1) { + psi[IX(i,j-1,k)] = var[VYBC][IX(i,j,k)]; + } + else { + psi[IX(i,j,k)] = var[VYBC][IX(i,j,k)]; + } + } + else { + /* South */ + if (j == 0) { + psi[IX(i, j, k)] = psi[IX(i, j + 1, k)]; + } + /* North */ + if (j == jmax + 1) { + psi[IX(i, j - 1, k)] = psi[IX(i, j - 2, k)]; + } + } /*end of if (para->bc->outlet_bc == PRESCRIBED_VALUE)*/ + }/* end of if(flagp[IX(i,j,k)]==OUTLET)*/ + /* Rack inlet, which is outlet of DC room */ + /* Apply a fixed velocity */ + if(flagp[IX(i,j,k)]==RACK_INLET){ + /* if south side is fluid */ + if (flagp[IX(i,j-1,k)]==-1) { + psi[IX(i,j-1,k)] = var[VYBC][IX(i,j,k)]; + } + /* if north side is fluid */ + if (flagp[IX(i,j+1,k)]==-1) { + psi[IX(i,j,k)] = var[VYBC][IX(i,j,k)]; + } + }/* end of setting rack inlet */ + } /* End of setting VY */ + break; + /* -------------------------------------------------------------------------- + | VZ + -------------------------------------------------------------------------- */ + case VZ: + for (it = 0; itsolv->tile_flow_correct == PRESSURE_BASE) { + /* Floor */ + if (k == 0) { + psi[IX(i, j, k)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + /* Ceiling */ + if (k == kmax + 1) { + psi[IX(i, j, k - 1)] = var[TILE_FLOW_BC][IX(i, j, k)]; + } + } + /* Tile */ + else { + /* Floor */ + if (k == 0) { + psi[IX(i, j, k)] = psi[IX(i, j, k + 1)]; + } + /* Ceiling */ + if (k == kmax + 1) { + psi[IX(i, j, k - 1)] = psi[IX(i, j, k - 2)]; + } + } + + /* Outlet: assign fix flow boundary */ + if(flagp[IX(i,j,k)]==OUTLET){ + if (para->bc->outlet_bc == PRESCRIBED_VALUE){ + /*ceiling*/ + if (k == kmax + 1) { + psi[IX(i,j,k-1)] = var[VZBC][IX(i,j,k)]; + } + else { + psi[IX(i,j,k)] = var[VZBC][IX(i,j,k)]; + } + } + else { + /* Floor */ + if (k == 0) { + psi[IX(i, j, k)] = psi[IX(i, j, k + 1)]; + } + /* Ceiling */ + if (k == kmax + 1) { + psi[IX(i, j, k - 1)] = psi[IX(i, j, k - 2)]; + } + } /*end of if (para->bc->outlet_bc == PRESCRIBED_VALUE)*/ + }/* end of if(flagp[IX(i,j,k)]==OUTLET) */ + + /* Rack inlet, which is outlet of DC room */ + /* Apply a fixed velocity */ + if(flagp[IX(i,j,k)]==RACK_INLET){ + /* if back side is fluid */ + if (flagp[IX(i,j,k-1)]==-1) { + psi[IX(i,j,k-1)] = var[VZBC][IX(i,j,k)]; + } + /* if back side is fluid */ + if (flagp[IX(i,j,k+1)]==-1) { + psi[IX(i,j,k)] = var[VZBC][IX(i,j,k)]; + } + }/* end of setting rack inlet */ + } /* End of setting VZ */ + break; + } /* End of switch case */ + + return 0; +}/* End of set_bnd_vel_adv( ) */ + + +/*************************************************************************** +| Set the boundary condition for temperature +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +| +| \ V2.0: 1/22/2018, by Wei Tian: add the boundary conditions for rack inlet +***************************************************************************/ int set_bnd_temp(PARA_DATA *para, REAL **var, int var_type, REAL *psi, int **BINDEX) { int i, j, k; @@ -258,10 +747,9 @@ int set_bnd_temp(PARA_DATA *para, REAL **var, int var_type, REAL *psi, REAL *aw = var[AW], *ae = var[AE], *as = var[AS], *an = var[AN]; REAL *af = var[AF], *ab = var[AB], *b=var[B], *qflux = var[QFLUX], *qfluxbc = var[QFLUXBC]; - REAL axy, ayz, azx; /* Area of surfaces*/ + REAL axy, ayz, azx; /* Area of surfaces */ REAL h; - REAL rhoCp_1 = 1/ (para->prob->rho * para->prob->Cp); - REAL D; + REAL D = 0.0; REAL *flagp = var[FLAGP]; /**************************************************************************** @@ -280,8 +768,7 @@ int set_bnd_temp(PARA_DATA *para, REAL **var, int var_type, REAL *psi, | Inlet boundary | 0: Inlet, -1: Fluid, 1: Solid Wall or Block, 2: Outlet -------------------------------------------------------------------------*/ - if(flagp[IX(i,j,k)]==INLET) psi[IX(i,j,k)] = var[TEMPBC][IX(i,j,k)]; - + if(flagp[IX(i,j,k)]==INLET || flagp[IX(i,j,k)]==RACK_OUTLET) psi[IX(i,j,k)] = var[TEMPBC][IX(i,j,k)]; /*------------------------------------------------------------------------- | Solid wall or block -------------------------------------------------------------------------*/ @@ -292,299 +779,431 @@ int set_bnd_temp(PARA_DATA *para, REAL **var, int var_type, REAL *psi, if(BINDEX[3][it]==1) { psi[IX(i,j,k)] = var[TEMPBC][IX(i,j,k)]; - /* West boundary wall and eastern neighbor cell is fluid*/ + /* West boundary wall and eastern neighbor cell is fluid */ if(i==0) { if(flagp[IX(i+1,j,k)]==FLUID) { - D = 0.5 * length_x(para,var,i+1,j,k); + D = 0.5f * length_x(para,var,i+1,j,k); h = h_coef(para,var,i+1,j,k,D); - aw[IX(i+1,j,k)] = h * rhoCp_1 * ayz; + aw[IX(i+1,j,k)] = h * ayz/(para->prob->rho*para->prob->Cp); + /*printf("h and aw are %f\t%f\n", h, aw[IX(i + 1, j, k)]);*/ qflux[IX(i,j,k)] = h * (psi[IX(i+1,j,k)]-psi[IX(i,j,k)]); } - } /* End of if(i==0)*/ - /* East boundary wall and western neighbor cell is fluid*/ + } /* End of if(i==0) */ + /* East boundary wall and western neighbor cell is fluid */ else if(i==imax+1) { if(flagp[IX(i-1,j,k)]==FLUID) { - D = 0.5 * length_x(para,var,i-1,j,k); + D = 0.5f * length_x(para,var,i-1,j,k); h = h_coef(para,var,i-1,j,k,D); - ae[IX(i-1,j,k)] = h * rhoCp_1 * ayz; + ae[IX(i-1,j,k)] = h* ayz / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i-1,j,k)]-psi[IX(i,j,k)]); } - } /* End of else if(i==imax+1)*/ - /* Between West and East*/ + } /* End of else if(i==imax+1) */ + /* Between West and East */ else { - /* Eastern neighbor cell is fluid*/ + /* Eastern neighbor cell is fluid */ if(flagp[IX(i+1,j,k)]==FLUID) { - D = 0.5 * length_x(para,var,i+1,j,k); + D = 0.5f * length_x(para,var,i+1,j,k); h = h_coef(para,var,i+1,j,k,D); - aw[IX(i+1,j,k)] = h * rhoCp_1 * ayz; + aw[IX(i+1,j,k)] = h * ayz / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i+1,j,k)]-psi[IX(i,j,k)]); } - /* Western neighbor cell is fluid*/ + /* Western neighbor cell is fluid */ if(flagp[IX(i-1,j,k)]==FLUID) { - D = 0.5 * length_x(para,var,i-1,j,k); + D = 0.5f * length_x(para,var,i-1,j,k); h = h_coef(para,var,i-1,j,k,D); - ae[IX(i-1,j,k)] = h * rhoCp_1 * ayz; + ae[IX(i-1,j,k)] = h * ayz / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i-1,j,k)]-psi[IX(i,j,k)]); } - } /* End of 0prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j+1,k)]-psi[IX(i,j,k)]); } } - /* North wall boundary and southern neighbor is fluid*/ + /* North wall boundary and southern neighbor is fluid */ else if(j==jmax+1) { if(flagp[IX(i,j-1,k)]==FLUID) { - D = 0.5 * length_y(para,var,i,j-1,k); + D = 0.5f * length_y(para,var,i,j-1,k); h = h_coef(para,var,i,j-1,k,D); - an[IX(i,j-1,k)] = h * rhoCp_1 * azx; + an[IX(i,j-1,k)] = h * azx / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j-1,k)]-psi[IX(i,j,k)]); } } - /* Between South and North*/ + /* Between South and North */ else { - /* Southern neighbor is fluid*/ + /* Southern neighbor is fluid */ if(flagp[IX(i,j-1,k)]==FLUID) { - D = 0.5 * length_y(para,var,i,j-1,k); + D = 0.5f * length_y(para,var,i,j-1,k); h = h_coef(para,var,i,j-1,k,D); - an[IX(i,j-1,k)] = h * rhoCp_1 * azx; + an[IX(i,j-1,k)] = h * azx / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j-1,k)]-psi[IX(i,j,k)]); } - /* Northern neighbor is fluid*/ + /* Northern neighbor is fluid */ if(flagp[IX(i,j+1,k)]==FLUID) { - D = 0.5 * length_y(para,var,i,j+1,k); + D = 0.5f * length_y(para,var,i,j+1,k); h = h_coef(para,var,i,j+1,k,D); - as[IX(i,j+1,k)] = h * rhoCp_1 * azx; + as[IX(i,j+1,k)] = h * azx / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j+1,k)]-psi[IX(i,j,k)]); } } - /* Floor and ceiling neighbor is fluid*/ + /* Floor and ceiling neighbor is fluid */ if(k==0) { if(flagp[IX(i,j,k+1)]==FLUID) { - D = 0.5 * length_z(para,var,i,j,k+1); + D = 0.5f * length_z(para,var,i,j,k+1); h = h_coef(para,var,i,j,k+1,D); - ab[IX(i,j,k+1)] = h * rhoCp_1 * axy; + ab[IX(i,j,k+1)] = h * axy / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j,k+1)]-psi[IX(i,j,k)]); } } - /* Ceiling and floor neighbor is fluid*/ + /* Ceiling and floor neighbor is fluid */ else if(k==kmax+1) { if(flagp[IX(i,j,k-1)]==FLUID) { - D = 0.5 * length_z(para,var,i,j,k-1); + D = 0.5f * length_z(para,var,i,j,k-1); h = h_coef(para,var,i,j,k-1,D); - af[IX(i,j,k-1)] = h * rhoCp_1 * axy; + af[IX(i,j,k-1)] = h * axy / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j,k-1)]-psi[IX(i,j,k)]); } } - /* Between Floor and Ceiling*/ + /* Between Floor and Ceiling */ else { - /* Ceiling neighbor is fluid*/ + /* Ceiling neighbor is fluid */ if(flagp[IX(i,j,k+1)]==FLUID) { - D = 0.5 * length_z(para,var,i,j,k+1); + D = 0.5f * length_z(para,var,i,j,k+1); h = h_coef(para,var,i,j,k+1,D); - ab[IX(i,j,k+1)] = h * rhoCp_1 * axy; + ab[IX(i,j,k+1)] = h * axy / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j,k+1)]-psi[IX(i,j,k)]); } - /* Floor neighbor is fluid*/ + /* Floor neighbor is fluid */ if(flagp[IX(i,j,k-1)]==FLUID) { - D = 0.5 * length_z(para,var,i,j,k-1); + D = 0.5f * length_z(para,var,i,j,k-1); h = h_coef(para,var,i,j,k-1,D); - af[IX(i,j,k-1)] = h * rhoCp_1 * axy; + af[IX(i,j,k-1)] = h * axy / (para->prob->rho*para->prob->Cp); qflux[IX(i,j,k)] = h * (psi[IX(i,j,k-1)]-psi[IX(i,j,k)]); } } - } /* End of constant temperature wall*/ + } /* End of constant temperature wall */ /*....................................................................... | Constant heat flux .......................................................................*/ if(BINDEX[3][it]==0) { - /* West wall boundary and eastern neighbor is fluid*/ + /* West wall boundary and eastern neighbor is fluid */ if(i==0) { if(flagp[IX(i+1,j,k)]==FLUID) { aw[IX(i+1,j,k)] = 0; - D = 0.5 * length_z(para,var,i+1,j,k); + D = 0.5 * length_x(para,var,i+1,j,k); h = h_coef(para,var,i+1,j,k,D); - b[IX(i+1,j,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * ayz; - /* get the temperature of solid surface*/ + b[IX(i+1,j,k)] += qfluxbc[IX(i,j,k)] * ayz / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i+1,j,k)]; } - } /* End of if(i==0)*/ - /* East wall boundary and western neighbor is fluid*/ + } /* End of if(i==0) */ + /* East wall boundary and western neighbor is fluid */ else if(i==imax+1) { if(flagp[IX(i-1,j,k)]==FLUID) { ae[IX(i-1,j,k)] = 0; - D = 0.5 * length_z(para,var,i-1,j,k); + D = 0.5 * length_x(para,var,i-1,j,k); h = h_coef(para,var,i-1,j,k,D); - b[IX(i-1,j,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * ayz; - /* get the temperature of solid surface*/ + b[IX(i-1,j,k)] += qfluxbc[IX(i,j,k)] * ayz / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i-1,j,k)]; } - } /* End of else if(i==imax+1)*/ - /* Between West and East*/ + } /* End of else if(i==imax+1) */ + /* Between West and East */ else { - /* Eastern neighbor is fluid*/ + /* Eastern neighbor is fluid */ if(flagp[IX(i+1,j,k)]==FLUID) { aw[IX(i+1,j,k)] = 0; - D = 0.5 * length_z(para,var,i+1,j,k); + D = 0.5 * length_x(para,var,i+1,j,k); h = h_coef(para,var,i+1,j,k,D); - b[IX(i+1,j,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * ayz; - /* get the temperature of solid surface*/ + b[IX(i+1,j,k)] += qfluxbc[IX(i,j,k)] * ayz / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i+1,j,k)]; } - /* Western neighbor is fluid*/ + /* Western neighbor is fluid */ if(flagp[IX(i-1,j,k)]==FLUID) { ae[IX(i-1,j,k)] = 0; - D = 0.5 * length_z(para,var,i-1,j,k); + D = 0.5 * length_x(para,var,i-1,j,k); h = h_coef(para,var,i-1,j,k,D); - b[IX(i-1,j,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * ayz; - /* get the temperature of solid surface*/ + b[IX(i-1,j,k)] += qfluxbc[IX(i,j,k)] * ayz / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i-1,j,k)]; } - } /* End of else*/ - /* South wall boundary and northern neighbor is fluid*/ + } /* End of else */ + /* South wall boundary and northern neighbor is fluid */ if(j==0) { - if(flagp[IX(i,j+1,k)]==FLUID) { - as[IX(i,j+1,k)] = 0; - D = 0.5 * length_z(para,var,i,j+1,k); - h = h_coef(para,var,i,j+1,k,D); - b[IX(i,j+1,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * azx; - /* get the temperature of solid surface*/ - psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j+1,k)]; - } + as[IX(i, j + 1, k)] = 0; + D = 0.5 * length_y(para, var, i, j + 1, k); + h = h_coef(para, var, i, j + 1, k, D); + b[IX(i, j + 1, k)] += qfluxbc[IX(i, j, k)] * azx / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ + psi[IX(i, j, k)] = qfluxbc[IX(i, j, k)] / h + psi[IX(i, j + 1, k)]; } - /* North wall boundary and southern neighbor is fluid*/ + /* North wall boundary and southern neighbor is fluid */ else if(j==jmax+1) { - if(flagp[IX(i,j-1,k)]==FLUID) { - an[IX(i,j-1,k)] = 0; - D = 0.5 * length_z(para,var,i,j-1,k); - h = h_coef(para,var,i,j-1,k,D); - b[IX(i,j-1,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * azx; - /* get the temperature of solid surface*/ - psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j-1,k)]; - } + an[IX(i, j - 1, k)] = 0; + D = 0.5 * length_y(para, var, i, j - 1, k); + h = h_coef(para, var, i, j - 1, k, D); + b[IX(i, j - 1, k)] += qfluxbc[IX(i, j, k)] * azx / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ + psi[IX(i, j, k)] = qfluxbc[IX(i, j, k)] / h + psi[IX(i, j - 1, k)]; } - /* Between South and North*/ + /* Between South and North */ else { - /* Southern neighbor is fluid*/ + /* Southern neighbor is fluid */ if(flagp[IX(i,j-1,k)]==FLUID) { an[IX(i,j-1,k)] = 0; - D = 0.5 * length_z(para,var,i,j-1,k); + D = 0.5 * length_y(para,var,i,j-1,k); h = h_coef(para,var,i,j-1,k,D); - b[IX(i,j-1,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * azx; - /* get the temperature of solid surface*/ + b[IX(i,j-1,k)] += qfluxbc[IX(i,j,k)] * azx / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j-1,k)]; } - /* Northern neighbor is fluid*/ + /* Northern neighbor is fluid */ if(flagp[IX(i,j+1,k)]==FLUID) { as[IX(i,j+1,k)] = 0; - D = 0.5 * length_z(para,var,i,j+1,k); + D = 0.5 * length_y(para,var,i,j+1,k); h = h_coef(para,var,i,j+1,k,D); - b[IX(i,j+1,k)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * azx; - /* get the temperature of solid surface*/ + b[IX(i,j+1,k)] += qfluxbc[IX(i,j,k)] * azx / (para->prob->rho*para->prob->Cp); + /* get the temperature of solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j+1,k)]; } } - /* Floor boundary and ceiling neighbor is fluid*/ + /* Floor boundary and ceiling neighbor is fluid */ if(k==0) { if(flagp[IX(i,j,k+1)]==FLUID) { ab[IX(i,j,k+1)] = 0; D = 0.5 * length_z(para,var,i,j,k+1); h = h_coef(para,var,i,j,k+1,D); - b[IX(i,j,k+1)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * axy; - /* Get the temperature on the solid surface*/ + b[IX(i,j,k+1)] += qfluxbc[IX(i,j,k)] * axy / (para->prob->rho*para->prob->Cp); + /* Get the temperature on the solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j,k+1)]; } } - /* Ceiling boundary and floor neighbor is fluid*/ + /* Ceiling boundary and floor neighbor is fluid */ else if(k==kmax+1) { if(flagp[IX(i,j,k-1)]==FLUID) { af[IX(i,j,k-1)] = 0; D = 0.5 * length_z(para,var,i,j,k-1); h = h_coef(para,var,i,j,k-1,D); - b[IX(i,j,k-1)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * axy; - /* Get the temperature on the solid surface*/ + b[IX(i,j,k-1)] += qfluxbc[IX(i,j,k)] * axy / (para->prob->rho*para->prob->Cp); + /* Get the temperature on the solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j,k-1)]; } } - /* Between Floor and Ceiling*/ + /* Between Floor and Ceiling */ else { - /* Ceiling neighbor is fluid*/ + /* Ceiling neighbor is fluid */ if(flagp[IX(i,j,k+1)]==FLUID) { ab[IX(i,j,k+1)] = 0; D = 0.5 * length_z(para,var,i,j,k+1); h = h_coef(para,var,i,j,k+1,D); - b[IX(i,j,k+1)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * axy; - /* Get the temperature on the solid surface*/ + b[IX(i,j,k+1)] += qfluxbc[IX(i,j,k)] * axy / (para->prob->rho*para->prob->Cp); + /* Get the temperature on the solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j,k+1)]; } - /* Floor neighbor is fluid*/ + /* Floor neighbor is fluid */ if(flagp[IX(i,j,k-1)]==FLUID) { af[IX(i,j,k-1)] = 0; D = 0.5 * length_z(para,var,i,j,k-1); h = h_coef(para,var,i,j,k-1,D); - b[IX(i,j,k-1)] += rhoCp_1 * qfluxbc[IX(i,j,k)] * axy; - /* Get the temperature on the solid surface*/ + b[IX(i,j,k-1)] += qfluxbc[IX(i,j,k)] * axy / (para->prob->rho*para->prob->Cp); + /* Get the temperature on the solid surface */ psi[IX(i,j,k)] = qfluxbc[IX(i,j,k)]/h + psi[IX(i,j,k-1)]; } } - } /* End of constant heat flux*/ - } /* End of wall boundary*/ + } /* End of constant heat flux */ + } /* End of wall boundary */ /*------------------------------------------------------------------------- | Outlet boundary -------------------------------------------------------------------------*/ - if(flagp[IX(i,j,k)]==OUTLET) { - /* West*/ + if(flagp[IX(i,j,k)]==OUTLET || flagp[IX(i, j, k)] == TILE) { + /* West */ if(i==0) { aw[IX(i+1,j,k)] = 0; psi[IX(i,j,k)] = psi[IX(i+1,j,k)]; } - /* North*/ + /* east */ if(i==imax+1) { ae[IX(i-1,j,k)] = 0; psi[IX(i,j,k)] = psi[IX(i-1,j,k)]; } - /* South*/ + /* South */ if(j==0) { as[IX(i,j+1,k)] = 0; psi[IX(i,j,k)] = psi[IX(i,j+1,k)]; } - /* North*/ + /* North */ if(j==jmax+1) { an[IX(i,j-1,k)] = 0; psi[IX(i,j,k)] = psi[IX(i,j-1,k)]; } - /* Floor*/ + /* Floor */ if(k==0) { ab[IX(i,j,k+1)] = 0; psi[IX(i,j,k)] = psi[IX(i,j,k+1)]; } - /* Ceiling*/ + /* Ceiling */ if(k==kmax+1) { af[IX(i,j,k-1)] = 0; psi[IX(i,j,k)] = psi[IX(i,j,k-1)]; } - } /* End of boundary for outlet*/ - } /* End of for() loop for go through the index*/ + } /* End of boundary for outlet */ + + /*------------------------------------------------------------------------- + | RACK_INLET boundary + -------------------------------------------------------------------------*/ + if (flagp[IX(i, j, k)] == RACK_INLET) { + /* West */ + if (flagp[IX(i + 1, j, k)] == FLUID) { + aw[IX(i + 1, j, k)] = 0; + psi[IX(i, j, k)] = psi[IX(i + 1, j, k)]; + } + /* east */ + if (flagp[IX(i - 1, j, k)] == FLUID) { + ae[IX(i - 1, j, k)] = 0; + psi[IX(i, j, k)] = psi[IX(i - 1, j, k)]; + } + /* South */ + if (flagp[IX(i, j+1, k)] == FLUID) { + as[IX(i, j + 1, k)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j + 1, k)]; + } + /* North */ + if (flagp[IX(i, j-1, k)] == FLUID) { + an[IX(i, j - 1, k)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j - 1, k)]; + } + /* Floor */ + if (flagp[IX(i, j, k+1)] == FLUID) { + ab[IX(i, j, k + 1)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j, k + 1)]; + } + /* Ceiling */ + if (flagp[IX(i,j,k-1)] == FLUID) { + af[IX(i, j, k - 1)] = 0; + psi[IX(i, j, k)] = psi[IX(i, j, k - 1)]; + } + } /* End of boundary for outlet */ + + } /* End of for() loop for go through the index */ + + return 0; +} /* End of set_bnd_temp() */ + + /**************************************************************************** + | Set the boundary condition for temperature in advection solved by implicit scheme + | + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | \param var_type The type of variable + | \param psi Pointer to the variable needing the boundary conditions + | \param BINDEX Pointer to boundary index + | + | \return 0 if no error occurred + | \ V1.0: 6/16/2017, by Wei Tian: first implementation + | \ V2.0: 1/22/2018, by Wei Tian: add the boundary conditions for rack inlet + ****************************************************************************/ +int set_bnd_temp_adv(PARA_DATA *para, REAL **var, int var_type, REAL *psi, + int **BINDEX) { + int i, j, k; + int it; + int index = para->geom->index; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL *aw = var[AW], *ae = var[AE], *as = var[AS], *an = var[AN]; + REAL *af = var[AF], *ab = var[AB], *b = var[B], + *qflux = var[QFLUX], *qfluxbc = var[QFLUXBC]; + REAL rhoCp_1 = 1 / (para->prob->rho * para->prob->Cp); + REAL *flagp = var[FLAGP]; + + /**************************************************************************** + | Go through all the boundary cells + ****************************************************************************/ + for (it = 0; itgeom->imax, jmax = para->geom->jmax; @@ -707,6 +1327,7 @@ int set_bnd_pressure(PARA_DATA *para, REAL **var, REAL *p, int **BINDEX) { int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); REAL *aw = var[AW], *ae = var[AE], *as = var[AS], *an = var[AN]; REAL *af = var[AF], *ab = var[AB]; + int put_X = para->geom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; REAL *flagp = var[FLAGP]; @@ -714,7 +1335,6 @@ int set_bnd_pressure(PARA_DATA *para, REAL **var, REAL *p, int **BINDEX) { i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; - /*------------------------------------------------------------------------- | For X direction -------------------------------------------------------------------------*/ @@ -723,62 +1343,64 @@ int set_bnd_pressure(PARA_DATA *para, REAL **var, REAL *p, int **BINDEX) { p[IX(i,j,k)] = p[IX(i-1,j,k)]; ae[IX(i-1,j,k)] = 0; } + } if(i0) { - if(flagp[IX(i,j-1,k)]<0) { - p[IX(i,j,k)] = p[IX(i,j-1,k )]; - an[IX(i,j-1,k)] = 0; + if (flagp[IX(i, j - 1, k)] < 0) { + p[IX(i, j, k)] = p[IX(i, j - 1, k)]; + an[IX(i, j - 1, k)] = 0; } } if(j0) { - if(flagp[IX(i,j,k-1)]<0) { - p[IX(i,j,k)] = p[IX(i,j,k-1)]; - af[IX(i,j,k-1)] = 0; + if (flagp[IX(i, j, k - 1)] < 0) { + p[IX(i, j, k)] = p[IX(i, j, k - 1)]; + af[IX(i, j, k - 1)] = 0; } } if(kgeom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; dvel = adjust_velocity(para, var, BINDEX); /*(mass_in-mass_out)/area_out*/ @@ -799,9 +1422,9 @@ int mass_conservation(PARA_DATA *para, REAL **var, int **BINDEX) { i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; - if(flagp[IX(i,j,k)]==2) { + if(flagp[IX(i,j,k)]==2 || flagp[IX(i, j, k)] == TILE) { if(i==0) u[IX(i,j,k)] -= dvel; - if(i==imax+1) u[IX(i-1,j,k)]+= dvel; + if (i == imax + 1) u[IX(i - 1, j, k)] += dvel; if(j==0) v[IX(i,j,k)] -= dvel; if(j==jmax+1) v[IX(i,j-1,k)] += dvel; if(k==0) w[IX(i,j,k)] -= dvel; @@ -810,22 +1433,22 @@ int mass_conservation(PARA_DATA *para, REAL **var, int **BINDEX) { } return 0; -} /* End of mass_conservation()*/ - -/* - * Get the mass flow difference divided by outflow area - * - * The details was published in the paper - * "W. Zuo, J. Hu, Q. Chen 2010. - * Improvements on FFD modeling by using different numerical schemes, - * Numerical Heat Transfer, Part B Fundamentals, 58(1), 1-16." - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return Mass flow difference divided by the outflow area - */ +} /* End of mass_conservation() */ + +/**************************************************************************** +| Get the mass flow difference divided by outflow area +| +| The details were published in the paper +| "W. Zuo, J. Hu, Q. Chen 2010. +| Improvements on FFD modeling by using different numerical schemes, +| Numerical Heat Transfer, Part B Fundamentals, 58(1), 1-16." +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return Mass flow difference divided by the outflow area +****************************************************************************/ REAL adjust_velocity(PARA_DATA *para, REAL **var, int **BINDEX) { int i, j, k; int it; @@ -838,8 +1461,9 @@ REAL adjust_velocity(PARA_DATA *para, REAL **var, int **BINDEX) { REAL area_out=0; REAL *flagp = var[FLAGP]; REAL axy, ayz, azx; + int put_X = para->geom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; - /* Go through all the inlets and outlets*/ + /* Go through all the inlets and outlets */ for(it=0; itprob->nu; + REAL rhoCp = para->prob->rho * para->prob->Cp; + REAL coef_h=para->prob->coeff_h; switch(para->prob->tur_model) { case LAM: @@ -939,9 +1585,19 @@ REAL h_coef(PARA_DATA *para, REAL **var, int i, int j, int k, REAL D) { "was not correct.", para->prob->tur_model); ffd_log(msg, FFD_ERROR); } - h = para->prob->Cp * para->prob->rho * para->prob->alpha * kapa - / (nu * D); - return h; + if (para->prob->tur_model == LAM) { + return coef_h*rhoCp; + } + else if (para->prob->tur_model == CONSTANT) { + return coef_h*rhoCp*para->prob->coef_CONSTANT; + } + else if (para->prob->tur_model == CHEN) { + /*h = (para->prob->Cp * para->prob->rho * para->prob->alpha / D) *(kapa / nu);*/ + h = para->prob->Cp * para->prob->rho * kapa / D; + return h; + } + else + return coef_h*rhoCp; -} /* End of h_coef()*/ +} /* End of h_coef() */ diff --git a/Buildings/Resources/src/FastFluidDynamics/boundary.h b/Buildings/Resources/src/FastFluidDynamics/boundary.h index 3c12d16dc4f..69d1ca13a7e 100644 --- a/Buildings/Resources/src/FastFluidDynamics/boundary.h +++ b/Buildings/Resources/src/FastFluidDynamics/boundary.h @@ -1,24 +1,28 @@ -/* - * - * @file boundary.h - * - * @brief Set the boundary conditions - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - * This file provides functions that are used for setting the boundary - * conditions. - * It starts with \c set_bnd(). Then different subroutines are called - * according to the properties of variables. - * - */ +/**************************************************************************** +| +| \file boundary.h +| +| \brief Set the boundary conditions +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +| This file provides functions that are used for setting the boundary +| conditions. +| It starts with \c set_bnd(). Then different subroutines are called +| according to the properties of variables. +| +****************************************************************************/ + #ifndef _BOUNDARY_H #define _BOUNDARY_H @@ -44,120 +48,151 @@ #include "chen_zero_equ_model.h" #endif -/* - * Entrance of setting boundary conditions - * - * Specific boundary conditions will be selected according to the variable - * type. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable - * @param index Index of trace substances or species - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_bnd(PARA_DATA *para, REAL **var, int var_type, int index, REAL *psi, - int **BINDEX) ; - -/* - * Set boundary conditions for velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_bnd_vel(PARA_DATA *para, REAL **var, int var_type, REAL *vx, - int **BINDEX); - -/* - * Set the boundary condition for temperature - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type The type of variable - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_bnd_temp(PARA_DATA *para, REAL **var, int var_type, REAL *psi, - int **BINDEX); - -/* - * Set the boundary condition for trace substance - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param trace_index Index of the trace substance - * @param psi Pointer to the variable needing the boundary conditions - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_bnd_trace(PARA_DATA *para, REAL **var, int trace_index, REAL *psi, - int **BINDEX); - -/* - * Set the boundary condition for pressure - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param p Pointer to pressure variable - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_bnd_pressure(PARA_DATA *para, REAL **var, REAL *p,int **BINDEX); - -/* - * Enforce the mass conservation by adjusting the outlet flow rate - * - * The details was published in the paper - * "W. Zuo, J. Hu, Q. Chen 2010. - * Improvements on FFD modeling by using different numerical schemes, - * Numerical Heat Transfer, Part B Fundamentals, 58(1), 1-16." - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int mass_conservation(PARA_DATA *para, REAL **var, int **BINDEX); - -/* - * Get the mass flow difference divided by outflow area - * - * The details was published in the paper - * "W. Zuo, J. Hu, Q. Chen 2010. - * Improvements on FFD modeling by using different numerical schemes, - * Numerical Heat Transfer, Part B Fundamentals, 58(1), 1-16." - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return Mass flow difference divided by the outflow area - */ -REAL adjust_velocity(PARA_DATA *para, REAL **var, int **BINDEX); - -/* - * Calculate convective heat transfer coefficient - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the cell - * @param j J-index of the cell - * @param k K-index of the cell - * @param D distance from the cell center to the wall - * - * @return Mass flow difference divided by the outflow area - */ -REAL h_coef(PARA_DATA *para, REAL **var, int i, int j, int k, REAL D); + +/**************************************************************************** +| Entrance of setting boundary conditions +| +| Specific boundary conditions will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param index Index of trace substances or species +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd(PARA_DATA* para, REAL** var, int var_type, int index, REAL* psi, + int** BINDEX); + +/**************************************************************************** +| Set boundary conditions for velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd_vel(PARA_DATA* para, REAL** var, int var_type, REAL* vx, + int** BINDEX); + +/**************************************************************************** +| Set the boundary condition for temperature +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd_temp(PARA_DATA* para, REAL** var, int var_type, REAL* psi, + int** BINDEX); + +/**************************************************************************** +| Set the boundary condition for trace substance +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param trace_index Index of the trace substance +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd_trace(PARA_DATA* para, REAL** var, int trace_index, REAL* psi, + int** BINDEX); + +/**************************************************************************** +| Set the boundary condition for pressure +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param p Pointer to pressure variable +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd_pressure(PARA_DATA* para, REAL** var, REAL* p, int** BINDEX); + +/**************************************************************************** +| Enforce the mass conservation by adjusting the outlet flow rate +| +| The details was published in the paper +| "W. Zuo, J. Hu, Q. Chen 2010. +| Improvements on FFD modeling by using different numerical schemes, +| Numerical Heat Transfer, Part B Fundamentals, 58(1), 1-16." +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int mass_conservation(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Get the mass flow difference divided by outflow area +| +| The details was published in the paper +| "W. Zuo, J. Hu, Q. Chen 2010. +| Improvements on FFD modeling by using different numerical schemes, +| Numerical Heat Transfer, Part B Fundamentals, 58(1), 1-16." +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return Mass flow difference divided by the outflow area +****************************************************************************/ +REAL adjust_velocity(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Calculate convective heat transfer coefficient +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the cell +| \param j J-index of the cell +| \param k K-index of the cell +| \param D distance from the cell center to the wall +| +| \return Mass flow difference divided by the outflow area +****************************************************************************/ +REAL h_coef(PARA_DATA* para, REAL** var, int i, int j, int k, REAL D); + +/**************************************************************************** +| Set the boundary condition for temperature in advection solved by implicit scheme +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd_temp_adv(PARA_DATA* para, REAL** var, int var_type, REAL* psi, + int** BINDEX); + +/**************************************************************************** +| Set boundary conditions for velocity advection solved by implicit scheme +| Special treatement to the outlet as the coefficient shouldnt be set as zero +| Wei Tian 6/16/2017, Schneider Electric, MA +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type The type of variable +| \param psi Pointer to the variable needing the boundary conditions +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_bnd_vel_adv(PARA_DATA* para, REAL** var, int var_type, REAL* psi, + int** BINDEX); + diff --git a/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.c b/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.c index f3955f0b0ac..e5713c56267 100644 --- a/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.c +++ b/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.c @@ -1,61 +1,144 @@ -/* - * - * \file chen_zero_equ_model.c - * - * \brief Computes turbulent viscosity using Chen's zero equ model - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - * This file provides function that computes the turbulent viscosity using - * Chen's zero equation model - * - */ +/**************************************************************************** +| +| \file chen_zero_equ_model.c +| +| \brief Computes turbulent viscosity using Chen's zero equ model +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +| This file provides function that computes the turbulent viscosity using +| Chen's zero equation model +| +| Update the standard Chen's zero equation model by add Jim's revision on +| boundary cells, by Wei Tian +****************************************************************************/ #include "chen_zero_equ_model.h" -/* - * Computes turbulent viscosity using Chen's zero equation model - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param k K-index of the control volume - * - * @return Turbulent Kinematic viscosity - */ +/**************************************************************************** +| Computes turbulent viscosity using Chen's zero equation model +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param k K-index of the control volume +| +| \return Turbulent Kinematic viscosity +****************************************************************************/ REAL nu_t_chen_zero_equ(PARA_DATA *para, REAL **var, int i, int j, int k) { - REAL nu_t, l, lx, lx1, lx2, ly, ly1, ly2, lz, lz1, lz2; + REAL nu_t, l; REAL *x = var[X], *y = var[Y], *z = var[Z]; - REAL *u = var[VX], *v = var[VY], *w = var[Z]; + REAL *u = var[VX], *v = var[VY], *w = var[VZ]; + REAL *flagp = var[FLAGP]; int imax = para->geom->imax, jmax = para->geom->jmax, kmax = para->geom->kmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); + REAL coeff = para->prob->chen_a; + REAL jim_a = 0.0185; + REAL lx=0, ly=0, lz =0; + REAL lx1=0,lx2=0, ly1=0, ly2=0, lz1=0, lz2=0; + /**************************************************************************** + | reserve the flexibility to implement the revised CHEN's model + | proposed by Jim and Chris, assigning a different coefficient of chen_a + | for the fluid cell adjacent to the boudnary cells + | Refer to the Turbulence_Model_Assessment_v17.pdf + | \ Note Makers: Wei Tian + | \ Contact: Wei.Tian@Schneider-Electric.com, Schneider Electric + | \ Date: 7/04/2017 + ****************************************************************************/ + /*l = var[MIN_DISTANCE][IX(i, j, k)];*/ + lx1 = x[IX(i,j,k)] - x[IX(0,j,k)]; + lx2 = x[IX(imax+1,j,k)] - x[IX(i,j,k)]; + lx = lx1 < lx2 ? lx1 : lx2; - lx1 = x[IX(i,j,k)] - x[IX(0,j,k)]; - lx2 = x[IX(imax+1,j,k)] - x[IX(i,j,k)]; - lx = lx1 < lx2 ? lx1 : lx2; + ly1 = y[IX(i,j,k)] - y[IX(i,0,k)]; + ly2 = y[IX(i,jmax,k)] - y[IX(i,j,k)]; + ly = ly1 < ly2 ? ly1 : ly2; - ly1 = y[IX(i,j,k)] - y[IX(i,0,k)]; - ly2 = y[IX(i,jmax,k)] - y[IX(i,j,k)]; - ly = ly1 < ly2 ? ly1 : ly2; + lz1 = z[IX(i,j,k)] - z[IX(i,j,0)]; + lz2 = z[IX(i,j,kmax+1)] - z[IX(i,j,k)]; + lz = lz1 < lz2 ? lz1 : lz2; - lz1 = z[IX(i,j,k)] - z[IX(i,j,0)]; - lz2 = z[IX(i,j,kmax+1)] - z[IX(i,j,k)]; - lz = lz1 < lz2 ? lz1 : lz2; + l = lx < ly ? lx : ly; + l = lz < l ? lz : l; + /* check if sorrounding cell is solid */ - l = lx < ly ? lx : ly; - l = lz < l ? lz : l; - nu_t = para->prob->chen_a * l - * (REAL)sqrt( u[IX(i,j,k)]*u[IX(i,j,k)] - +v[IX(i,j,k)]*v[IX(i,j,k)] - +w[IX(i,j,k)]*w[IX(i,j,k)] ); + if (flagp[IX(i - 1, j, k)] >= 0 || flagp[IX(i + 1, j, k)] >= 0 || + flagp[IX(i, j - 1, k)] >= 0 || flagp[IX(i, j + 1, k)] >= 0 || + flagp[IX(i, j, k - 1)] >= 0 || flagp[IX(i, j, k + 1)] >= 0) { + /* if the cell is adjacent to solid boundaries, assign a otherwise coffecient */ + coeff = jim_a; + } + else { + /* if the cell is not adjacent to solid boundaries, assign a standard coffecient */ + coeff = para->prob->chen_a; + } + + nu_t = coeff * l + * (REAL)sqrt(u[IX(i,j,k)]*u[IX(i,j,k)] + +v[IX(i,j,k)]*v[IX(i,j,k)] + +w[IX(i,j,k)]*w[IX(i,j,k)] ); return nu_t; -} /* End of nu_t_chen_zero_equ()*/ +} /* End of nu_t_chen_zero_equ() */ + +/**************************************************************************** +| Computes turbulent thermal diffusivity using Chen's zero equation model +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \Author: Wei Tian @ Schneider Electric, Andover, MA +| +| \Initial Implementation: 7/11/2017 +| \return Turbulent Kinematic viscosity +| +| \ This is to reimplement the turbulent thermal diffusivity for FFD using Chen's +| zero equation model. Theoretically, by diving the turbulent viscosity over the +| Pr number, we can easily get the turbulent themal diffusivity coefficients. However, +| according to our test, that could cause severe energy imblance for the whole space. +| The root reason to explain that is not fully identified yet. However, we presumbaly beleive that +| the dradmatically (over 100) spatial differnce of the thermal diffusivity coefficiet may lead to +| energy imbalance, happening in the diffusion term. We also tried using constant turbulence model, +| which essentially multiply 100 to the lamninar one. Applying that in the FFD, we did not see +| the deterioration of energy balance, at any level. +| \ Inspire by this, we propose to uniformly disseminate the turbulent thermal diffusivity over the +| whole fluid space. According to our test, this method can perfectly achieves energy balance for +| the room space, while keeping the turbulent features in some extent of the thermal environment. +| +| \ Last update: 7/11/2017 +****************************************************************************/ +REAL alpha_t_chen_zero_equ(PARA_DATA *para, REAL **var) { + int i, j, k; + REAL *x = var[X], *y = var[Y], *z = var[Z]; + REAL *u = var[VX], *v = var[VY], *w = var[VZ]; + REAL *flagp = var[FLAGP]; + int imax = para->geom->imax, jmax = para->geom->jmax, + kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL sum_tur_alpha = 0.0; + int count = 0; + + FOR_EACH_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + sum_tur_alpha += nu_t_chen_zero_equ(para, var, i, j, k) / 0.900000 /*Pr number*/; + count += 1; + END_FOR + + return sum_tur_alpha / count; /* turbulent alpha for each cell */ +} /* end of alpha_t */ + + diff --git a/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.h b/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.h index dbc7fbe475c..a299dbe5871 100644 --- a/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.h +++ b/Buildings/Resources/src/FastFluidDynamics/chen_zero_equ_model.h @@ -1,22 +1,25 @@ -/* - * - * @file chen_zero_equ_model.h - * - * @brief Computes turbulent viscosity using Chen's zero equ model - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - * This file provides function that computes the turbulent viscosity using - * Chen's zero equation model - * - */ +/**************************************************************************** +| +| \file chen_zero_equ_model.h +| +| \brief Computes turbulent viscosity using Chen's zero equ model +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +| This file provides function that computes the turbulent viscosity using +| Chen's zero equation model +| +****************************************************************************/ #ifndef _CHEN_ZERO_EQU_MODEL_H_ #define _CHEN_ZERO_EQU_MODEL_H_ #endif @@ -26,15 +29,46 @@ #include "data_structure.h" #endif -/* - * Computes turbulent viscosity using Chen's zero equation model - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param k K-index of the control volume - * - * @return Turbulent Kinematic viscosity - */ -REAL nu_t_chen_zero_equ(PARA_DATA *para, REAL **var, int i, int j, int k); + +/**************************************************************************** +| Computes turbulent viscosity using Chen's zero equation model +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param k K-index of the control volume +| +| \return Turbulent Kinematic viscosity +****************************************************************************/ +REAL nu_t_chen_zero_equ(PARA_DATA* para, REAL** var, int i, int j, int k); + +/**************************************************************************** +| Computes turbulent thermal diffusivity using Chen's zero equation model +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \Author: Wei Tian @ Schneider Electric, Andover, MA +| +| \Initial Implementation: 7/11/2017 +| \return Turbulent Kinematic viscosity +| +| \ This is to reimplement the turbulent thermal diffusivity for FFD using Chen's +| zero equation model. Theoretically, by diving the turbulent viscosity over the +| Pr number, we can easily get the turbulent themal diffusivity coefficients. However, +| according to our test, that could cause severe energy imblance for the whole space. +| The root reason to explain that is not fully identified yet. However, we presumbaly beleive that +| the dradmatically (over 100) spatial differnce of the thermal diffusivity coefficiet may lead to +| energy imbalance, happening in the diffusion term. We also tried using constant turbulence model, +| which essentially multiply 100 to the lamninar one. Applying that in the FFD, we did not see +| the deterioration of energy balance, at any level. +| \ Inspire by this, we propose to uniformly disseminate the turbulent thermal diffusivity over the +| whole fluid space. According to our test, this method can perfectly achieves energy balance for +| the room space, while keeping the turbulent features in some extent of the thermal environment. +| +| \ Last update: 7/11/2017 +****************************************************************************/ +REAL alpha_t_chen_zero_equ(PARA_DATA* para, REAL** var); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/cosimulation.c b/Buildings/Resources/src/FastFluidDynamics/cosimulation.c index 51159635c36..f3bd2224485 100644 --- a/Buildings/Resources/src/FastFluidDynamics/cosimulation.c +++ b/Buildings/Resources/src/FastFluidDynamics/cosimulation.c @@ -397,7 +397,7 @@ int write_cosim_data(PARA_DATA *para, REAL **var) { | Assign the Xi -------------------------------------------------------------------------*/ if(para->outp->version==DEBUG) { - sprintf(msg, "\t\t\tn_Xi=%d, id=%d", para->bc->nb_Xi, id); + sprintf(msg, "\t\t\tn_Xi=%f, id=%d", para->bc->nb_Xi, id); ffd_log(msg, FFD_NORMAL); } @@ -655,7 +655,7 @@ int assign_thermal_bc(PARA_DATA *para, REAL **var, int **BINDEX) { return 1; } /*-------------------------------------------------------------------------*/ - /* Convert the data from Modelica order to FFD order*/ + /* Convert the wall data from Modelica order to FFD order*/ /*-------------------------------------------------------------------------*/ for(j=0; jbc->nb_wall; j++) { i = para->bc->wallId[j]; @@ -682,16 +682,16 @@ int assign_thermal_bc(PARA_DATA *para, REAL **var, int **BINDEX) { } } /*-------------------------------------------------------------------------*/ - /* Assign the BC*/ + /* Assign the wall BC*/ /*-------------------------------------------------------------------------*/ for(it=0; itgeom->index; it++) { i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; id = BINDEX[4][it]; - modelicaId = para->bc->wallId[id]; + modelicaId = para->bc->wallId[id - para->bc->nb_block]; - if(var[FLAGP][IX(i,j,k)]==SOLID) + if(var[FLAGP][IX(i,j,k)]==SOLID && id >= para->bc->nb_block) switch(para->cosim->para->bouCon[modelicaId]) { case 1: var[TEMPBC][IX(i,j,k)] = temHea[id]; @@ -711,6 +711,71 @@ int assign_thermal_bc(PARA_DATA *para, REAL **var, int **BINDEX) { } /* End of switch(BINDEX[3][it])*/ } + /*-------------------------------------------------------------------------*/ + /* Convert the block data from Modelica order to FFD order*/ + /*-------------------------------------------------------------------------*/ + if(para->cosim->para->nSou>0){ + for(j=0; jbc->nb_block; j++) { + i = j; + int bouCon = 1; + REAL ABlock = 1.0; /*defined by users*/ + switch(bouCon) { + case 1: /* Temperature*/ + temHea[j] = para->cosim->modelica->sourceHeat[i] - 273.15; + sprintf(msg, "\t%s: T=%f[degC]", + para->bc->blockName[j], temHea[j]); + ffd_log(msg, FFD_NORMAL); + break; + case 2: /* Heat flow rate*/ + temHea[j] = para->cosim->modelica->sourceHeat[i] / ABlock; + sprintf(msg, "\t%s: Q_dot=%f[W]", + para->bc->blockName[j], temHea[j]); + ffd_log(msg, FFD_NORMAL); + break; + default: + sprintf(msg, + "Invalid value (%d) for thermal boundary condition. " + "Expected value are 1->Fixed T; 2->Fixed heat flux", + bouCon); + ffd_log(msg, FFD_ERROR); + return 1; + } + } + } + /*-------------------------------------------------------------------------*/ + /* Assign the block BC*/ + /*-------------------------------------------------------------------------*/ + if(para->cosim->para->nSou>0){ + int bouCon = 1; + for(it=0; itgeom->index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + id = BINDEX[4][it]; + /*modelicaId = id;*/ + + if(var[FLAGP][IX(i,j,k)]==SOLID && id < para->bc->nb_block) + switch(bouCon) { + case 1: + var[TEMPBC][IX(i,j,k)] = temHea[id]; + BINDEX[3][it] = 1; /* Specified temperature*/ + break; + case 2: + var[QFLUXBC][IX(i,j,k)] = temHea[id]; + BINDEX[3][it] = 0; /* Specified heat flux*/ + break; + default: + sprintf(msg, + "assign_thermal_bc(): Thermal bc value BINDEX[3][%d]=%d " + "at [%d,%d,%d] was not valid.", + it, BINDEX[3][it], i, j, k); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of switch(BINDEX[3][it])*/ + } + } + + free(temHea); } /* End of if(para->bc->nb_wall>0)*/ /**************************************************************************** diff --git a/Buildings/Resources/src/FastFluidDynamics/data_structure.h b/Buildings/Resources/src/FastFluidDynamics/data_structure.h index 3a1a695dceb..3a40f98e59a 100644 --- a/Buildings/Resources/src/FastFluidDynamics/data_structure.h +++ b/Buildings/Resources/src/FastFluidDynamics/data_structure.h @@ -1,26 +1,46 @@ -/* - * - * @file data_structure.h - * - * @brief Define the data used the FFD - * - * @author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file data_structure.h +| +| \brief Define the data used the FFD +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +| This file provides functions that write the data file in different formats. +| +****************************************************************************/ #ifndef _DATA_STRUCTURE_H #define _DATA_STRUCTURE_H #endif #ifdef _MSC_VER -#include + #include +#elif defined __GNUC__ + #ifdef _WIN64 + #include + #elif _WIN32 + #include + #elif __APPLE__ + #include + #elif __linux__ + #include + #else + #include + #endif #else -#include + #include #endif #include @@ -29,6 +49,11 @@ #include #include +#ifndef REAL +#define REAL float +#define ifDouble 1/*index to show it is double*/ +#endif + #ifndef _MODELICA_FFD_COMMON_H #define _MODELICA_FFD_COMMON_H #include "modelica_ffd_common.h" @@ -53,6 +78,7 @@ Place the stdlib.h line above the glut.h line in the code. #define IX(i,j,k) ((i)+(IMAX)*(j)+(IJMAX)*(k)) #define FOR_EACH_CELL for(i=1; i<=imax; i++) { for(j=1; j<=jmax; j++) { for(k=1; k<=kmax; k++) { #define FOR_ALL_CELL for(k=0; k<=kmax+1; k++) { for(j=0; j<=jmax+1; j++) { for(i=0; i<=imax+1; i++) { +#define FOR_ALL_CELL_IJK for(i=0; i<=imax+1; i++) { for(j=0; j<=jmax+1; j++) { for(k=0; k<=kmax+1; k++) { #define FOR_U_CELL for(k=1; k<=kmax; k++) { for(j=1; j<=jmax; j++) { for(i=1; i<=imax-1; i++) { #define FOR_V_CELL for(i=1; i<=imax; i++) { for(j=1; j<=jmax-1; j++) { for(k=1; k<=kmax; k++) { #define FOR_W_CELL for(i=1; i<=imax; i++) { for(j=1; j<=jmax; j++) { for(k=1; k<=kmax-1; k++) { @@ -63,13 +89,22 @@ Place the stdlib.h line above the glut.h line in the code. #define END_FOR }}} #define SMALL 0.00001 +#define SUCCESS 0 +#define FAILURE 1 +#define MAX_SOURCE_SIZE (0x100000) #ifndef max #define max( a, b ) ( ((a) > (b)) ? (a) : (b) ) #endif +#ifndef sign +#define sign(x) ( (x > 0) - (x < 0) ) +#endif + #define PI 3.1415926 +#define RACK_MONITOR_POINTS 4 + #define X 0 #define Y 1 #define Z 2 @@ -125,20 +160,38 @@ Place the stdlib.h line above the glut.h line in the code. #define C1S 52 #define C2S 53 #define C1BC 54 -#define C2BC 55 /* Last variable*/ +#define TMP4 55 +#define MIN_DISTANCE 56 /* the minimal distance to the boundaries, using in zero equation model */ +#define TILE_OPEN_BC 57 /* the opening ratio of the tiles */ +#define TILE_RESI_BC 58 /* the corresponding resistance ratio of the opening ratio for the tiles */ +#define TILE_FLOW_BC 59 /* the velocity at each tile */ +#define PBC 60 /* the pressure boundary condition for outlets/tiles */ +#define IPS 61 /* the pressure source associated with the tile when simulating the room and plenum together */ +#define APXS 62 /* Source for AP VX */ +#define APYS 63 /* Source for AP VY */ +#define APZS 64 /* Source for AP VZ */ +#define RESX 65 /* Resistance in X, i.e., tile, plastic curtain, etc. */ +#define RESY 66 /* Resistance source in Y, i.e., tile, plastic curtain, etc. */ +#define RESZ 67 /* Resistance source in Z, i.e., tile, plastic curtain, etc. */ +#define C2BC 68 /* Last variable */ typedef enum{NOSLIP, SLIP, INFLOW, OUTFLOW, PERIODIC, SYMMETRY} BCTYPE; #define SOLID 1 #define INLET 0 #define OUTLET 2 +#define TILE 3 +#define RACK_INLET 4 +#define RACK_OUTLET 5 #define FLUID -1 +#define RACK 100 + typedef enum{TCONST, QCONST, ADIBATIC} BCTTYPE; -typedef enum{GS, TDMA} SOLVERTYPE; +typedef enum{GS, TDMA, JACOBI} SOLVERTYPE; -typedef enum{SEMI, LAX, UPWIND, UPWIND_NEW} ADVECTION; +typedef enum{SEMI, LAX, UPWIND, UPWIND_NEW, CENTRAL} ADVECTION; typedef enum{LAM, CHEN, CONSTANT} TUR_MODEL; @@ -152,6 +205,14 @@ typedef enum{FFD_WARNING, FFD_ERROR, FFD_NORMAL, FFD_NEW} FFD_MSG_TYPE; typedef enum{XY, YZ, ZX} PLANETYPE; +typedef enum { ADV, DIF, PRO } FFD_TERM; + +typedef enum { AIRFLOW_BASE, PRESSURE_BASE, HYBRID_BASE, NS_SOURCE, NO_EXIST } TILE_FLOW_CORRECTION; + +typedef enum { PRESCRIBED_VALUE, ZERO_GRADIENT } BC_TYPE; + +typedef enum { PLT, VTK, NO} RLT_FILE; + /* Parameter for geometry and mesh*/ typedef struct { REAL Lx; /* Domain size in x-direction (meter)*/ @@ -168,6 +229,9 @@ typedef struct { REAL dz; /* Length delta_z of one cell in z-direction for uniform grid only*/ REAL volFlu; /* Total volume of fluid cells*/ int uniform; /* Only for generating grid by FFD. 1: uniform grid; 0: non-uniform grid*/ + int tile_putX; /* tile is put in X direction */ + int tile_putY; /* tile is put in Y direction */ + int tile_putZ; /* tile is put in Z direction */ } GEOM_DATA; /* Parameter for the data output control*/ @@ -194,14 +258,25 @@ typedef struct{ VERSION version; /* DEMO, DEBUG, RUN*/ int screen; /* Screen for display: 1 velocity; 2: temperature; 3: contaminant*/ int tstep_display; /* Number of time steps to update the visualization*/ + int mouse_i; /* mouse click located i */ + int mouse_j; /*mouse click located j*/ + int mouse_k; /* mouse click located k */ + RLT_FILE result_file; /* result file type */ + int OutputDynamicFile; /*determine if wants to output the files for animation*/ } OUTP_DATA; +typedef struct { + int cal_mean; /*1: Calculate mean value; 0: False*/ + VERSION version; /* DEMO, DEBUG, RUN*/ +} OUTP_DATA_SIMP; + typedef struct{ FILE_FORMAT parameter_file_format; /* Format of extra parameter file*/ char parameter_file_name[1024]; /* Name of extra parameter file*/ char block_file_name[1024]; /* Name of file stores block information*/ int read_old_ffd_file; /* 1: Read previous FFD file; 0: False*/ char old_ffd_file_name[100]; /* Name of previous FFD simulation data file*/ + char *parameter_file_path; /* Path of parameter file */ } INPU_DATA; typedef struct{ @@ -226,6 +301,10 @@ typedef struct{ REAL chen_a; /* Coefficient of Chen's zero equation turbulence model*/ REAL Prt; /* Turbulent Prandtl number*/ REAL Temp_Buoyancy; /* Reference temperature for calculating buoyancy force*/ + REAL Tem_Ave_LastTime; /* Record average fluid temeprature in last time */ + REAL Energy_Imb_Adv; /* Energy imbalance after advection, W */ + REAL coef_CONSTANT; /* Constant for constant turbulence models */ + REAL coef_stanchion; /* the stanchion model coefficient */ }PROB_DATA; typedef struct { @@ -246,6 +325,7 @@ typedef struct { char **portName; /* *portName[nb_port]: Name of ports*/ char **blockName; /* *blockName[nb_block]: Name of internal block*/ char **sourceName; /* *sourceName[nb_source]: Name of the source*/ + char** rackName; /* *rackNmae[nb_rack]: name of rack */ int *wallId; /* wallId[nb_wall]: Modelica wall boundary ID*/ /*int *inletId; // Modelica inlet boundary ID*/ int *portId; /* portId[nb_port]: Modelica outlet boundary ID*/ @@ -256,6 +336,7 @@ typedef struct { REAL *temHeaMean; /* temHeaMean[nb_wall]: Time averaged value of temHeaAve*/ REAL *velPort; /* velPort[nb_port]: Velocity of air into the room*/ /* positive: into the room; negative out of the room*/ + REAL* QPort; /* mass flowrate of the port */ REAL *velPortAve; /* velPortAve[nb_port]: Surface averaged value of velPort*/ REAL *velPortMean; /* velPortMean[nb_port]: Time averaged value of velPortAve*/ REAL *TPort; /* TPort[nb_port] Air temperatures that the medium has if it were flowing into the room*/ @@ -267,8 +348,34 @@ typedef struct { REAL **CPort; /* CPor[nb_port][nb_C]: the trace substances of the inflowing medium*/ REAL **CPortAve; /* CPortAve[nb_port][nb_C]: Surface averaged value of CPort*/ REAL **CPortMean; /* CPortMean[nb_port][nb_C]: Time averaged value of CPort*/ + int nb_rack; /* number of rack in the data center room */ + int** RackMap; /* Map the inlet and outlet cell of rack, a N by 3 array, where N is number of racks */ + REAL* RackFlowRate; /* The volumetric flow rate for each rack in M3/s, a vector of N elements */ + int* RackDir; /* The cooling air flow direction of the rack, +1: X, -1: Y, +2: Y, -2: -Y, +3: Z, -3: -Z */ + REAL* HeatDiss; /* Heat dissipation of rack in W, a vector of N element */ + REAL* RackArea; /* Inlet or outlet area of rack, a vector of N element */ + BC_TYPE outlet_bc; /* type of outlet bc */ + int hasTile; /* 1: Has tile, 0: no tile */ }BC_DATA; +typedef struct { + int nb_inlet; /* Number of inlet boundaries, provided by SCI */ + int nb_outlet; /* Number of outlet boundaries, provided by SCI */ + int nb_block; /* Number of internal block boundaries, provided by SCI */ + int nb_wall; /* Number of wall boundaries, provided by SCI */ + int nb_source; /* Number of sources, provided by SCI */ + int nb_bc; /* Number of boundaries, provided by SCI */ + int nb_ConExtWin; /* Number of exterior construction with windows */ + int nb_port; /* nPort = nInlet + nOutlet */ + int nb_Xi; /* Number of species */ + int nb_C; /* Number of substances */ + int sha; /* 1: have shade ; 0: no shade */ + REAL mass_in; + REAL mass_out; + REAL mass_corr; + BC_TYPE outlet_bc; /* type of outlet bc */ +}BC_DATA_SIMP; + typedef struct { int nb_sensor; /* Number of sensors*/ char **sensorName; /* *sensorName[nb_sensor]: Name of sensor in FFD*/ @@ -277,8 +384,16 @@ typedef struct { REAL *senValMean; /* snValMean[nb_sensor]: Time averaged value of senVal;*/ REAL TRoo; /* Volumed averaged value of temperature in the space*/ REAL TRooMean; /* Time averaged value of TRoo;*/ + REAL*** coordMoniPoints; /*coordMoniPoints[A][B][C]-> A: which rack; B: which monitor point; C: which coordinate*/ + int*** indexMoniPoints; /* indexMoniPoints[A][B][C]-> A: which rack; B: which monitor point; C: which coordinate*/ } SENSOR_DATA; +typedef struct { + int nb_sensor; /* Number of sensors */ + REAL TRoo; /* Volumed averaged value of temperature in the space */ + REAL TRooMean; /* Time averaged value of TRoo; */ +} SENSOR_DATA_SIMP; + typedef struct { double dt; /* FFD simulation time step size*/ double t; /* Internal: current time*/ @@ -290,13 +405,30 @@ typedef struct { double t_end; /* Internal: clock time when simulation ends*/ }TIME_DATA; +typedef struct { + REAL dt; /* FFD simulation time step size */ + REAL t; /* Internal: current time */ + REAL t_steady; /* Necessary time for reaching the steady state from initial condition */ + int step_total; /* The interval of iteration step to output data */ + int step_current; /* Internal: current iteration step */ + int step_mean; /* Internal: steps for time average */ + REAL t_start; /* Internal: clock time when simulation starts */ + REAL t_end; /* Internal: clock time when simulation ends */ +}GPU_TIME_DATA; + typedef struct { SOLVERTYPE solver; /* Solver type: GS, TDMA*/ int check_residual; /* 1: check, 0: donot check*/ + int check_conservation; /*1: check, 0 : donot check residual after iterative solver*/ ADVECTION advection_solver; /* Type of advection solver: SEMI, LAX, UPWIND, UPWIND_NEW*/ INTERPOLATION interpolation; /* Interpolation in semi-Lagrangian method: BILINEAR, FSJ, HYBRID*/ int cosimulation; /* 0: single; 1: coupled simulation*/ int nextstep; /* Internal: 1: yes; 0: no, wait*/ + int swipe_adv; /* swipe numbers in GS for advection, if using implicit scheme */ + int swipe_dif; /* swipe numbers in GS for diffusion */ + int swipe_pro; /* swipe numbers in GS for projection */ + TILE_FLOW_CORRECTION tile_flow_correct; /* how to correct the flow rates at tiles */ + int mass_conservation_on; /* apply forced mass conservation or not */ }SOLV_DATA; typedef struct { @@ -319,6 +451,17 @@ typedef struct { INIT_DATA *init; }PARA_DATA; +typedef struct { + GEOM_DATA geom; + OUTP_DATA_SIMP outp_simp; + PROB_DATA prob; + GPU_TIME_DATA mytime; + BC_DATA_SIMP bc_simp; + SOLV_DATA solv; + SENSOR_DATA_SIMP sens_simp; + INIT_DATA init; +}PARA_DATA_SIMP; + typedef struct { double number0; double number1; diff --git a/Buildings/Resources/src/FastFluidDynamics/data_writer.c b/Buildings/Resources/src/FastFluidDynamics/data_writer.c index bbeef54bef7..d033b6872c2 100644 --- a/Buildings/Resources/src/FastFluidDynamics/data_writer.c +++ b/Buildings/Resources/src/FastFluidDynamics/data_writer.c @@ -1,41 +1,89 @@ -/* - * - * \file data_write.c - * - * \brief Write the simulation data - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - * This file provides functions that write the data file in different formats. - * - */ +/**************************************************************************** +| +| \file data_write.c +| +| \brief Write the simulation data +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +| This file provides functions that write the data file in different formats. +| +****************************************************************************/ #include "data_writer.h" -/* - * Write standard output data in a format for tecplot - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to file name - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Write standard output data in a format for tecplot +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ +int data_debug(PARA_DATA *para, REAL **var, char *name) { + int i = 0; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + int size = (imax + 2) * (jmax + 2) * (kmax + 2); + char *filename; + FILE *datafile; + + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { + ffd_log("write_tecplot_data(): Failed to allocate memory for file name", + FFD_ERROR); + return 1; + } + + strcpy(filename, name); + strcat(filename, ".txt"); + + if ((datafile = fopen(filename, "w+")) == NULL) { + ffd_log("write_tecplot_data(): Failed to open output file!\n", FFD_ERROR); + return 1; + } + + fprintf(datafile, "AW AE AS AN AB AF AP0 AP B T\n"); + for (i = 0; i < size; i++) { + fprintf(datafile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", var[AW][i], + var[AE][i], var[AS][i], var[AN][i], var[AB][i], var[AF][i], + var[AP0][i], var[AP][i], var[B][i], var[TEMP][i]); + } + free(filename); + + fclose(datafile); + return 0; +} + +/**************************************************************************** +| Write standard output data in a format for tecplot +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ int write_tecplot_data(PARA_DATA *para, REAL **var, char *name) { int i, j, k; - int imax=para->geom->imax, jmax=para->geom->jmax; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL *x = var[X], *y = var[Y], *z =var[Z]; - REAL *u = var[VX], *v = var[VY], *w = var[VZ], *p = var[IP]; - REAL *T = var[TEMP], *Xi = var[Xi1]; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL *x = var[X], *y = var[Y], *z = var[Z]; + REAL *u = var[VXM], *v = var[VYM], *w = var[VZM], *p = var[IP]; + REAL *T = var[TEMPM], *Xi = var[Xi1]; REAL *flagp = var[FLAGP]; char *filename; FILE *datafile; @@ -45,8 +93,8 @@ int write_tecplot_data(PARA_DATA *para, REAL **var, char *name) { | Length of filename should be sizeof(ActualName) + 1 | Using sizeof(ActualName) will cause memory fault in free(filename) ****************************************************************************/ - filename = (char *) malloc((strlen(name)+5)*sizeof(char)); - if(filename==NULL) { + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { ffd_log("write_tecplot_data(): Failed to allocate memory for file name", FFD_ERROR); return 1; @@ -55,8 +103,8 @@ int write_tecplot_data(PARA_DATA *para, REAL **var, char *name) { strcpy(filename, name); strcat(filename, ".plt"); - /* Open output file*/ - if((datafile=fopen(filename, "w+"))==NULL) { + /* Open output file */ + if ((datafile = fopen(filename, "w+")) == NULL) { ffd_log("write_tecplot_data(): Failed to open output file!\n", FFD_ERROR); return 1; } @@ -65,21 +113,60 @@ int write_tecplot_data(PARA_DATA *para, REAL **var, char *name) { fprintf(datafile, "TITLE = "); fprintf(datafile, "\"dt=%fs, t=%fs, nu=%f, Lx=%f, Ly=%f, Lz=%f, ", - para->mytime->dt, para->mytime->t, para->prob->nu, - para->geom->Lx, para->geom->Ly, para->geom->Lz); - fprintf(datafile, "Nx=%d, Ny=%d, Nz=%d \"\n", - imax+2, jmax+2, kmax+2); + para->mytime->dt, para->mytime->t, para->prob->nu, para->geom->Lx, + para->geom->Ly, para->geom->Lz); + fprintf(datafile, "Nx=%d, Ny=%d, Nz=%d \"\n", imax + 2, jmax + 2, kmax + 2); - fprintf( datafile, - "VARIABLES =X, Y, Z, I, J, K, U, V, W, T, Xi, FlagP, P \n"); - fprintf( datafile, "ZONE F=POINT, I=%d, J=%d, K=%d\n", imax+2, jmax+2, kmax+2 ); + fprintf(datafile, + "VARIABLES =X, Y, Z, I, J, K, U, V, W, T, Xi, FlagP, P, Vel \n"); + fprintf(datafile, "ZONE F=POINT, I=%d, J=%d, K=%d\n", imax + 2, jmax + 2, + kmax + 2); FOR_ALL_CELL - fprintf(datafile, "%f\t%f\t%f\t%d\t%d\t%d\t", - x[IX(i,j,k)], y[IX(i,j,k)], z[IX(i,j,k)], i, j, k); - fprintf(datafile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\n", - u[IX(i,j,k)], v[IX(i,j,k)], w[IX(i,j,k)], T[IX(i,j,k)], - Xi[IX(i,j,k)], flagp[IX(i,j,k)], p[IX(i,j,k)]); + /* ommit the internal block for better visualization + tianwei + 3/11/2015 */ + /* if (var[FLAGP][IX(i,j,k)] == SOLID) { + // X + if (i == 0) { + if (var[FLAGP][IX(i+1,j,k)] == SOLID) continue; + } + else if (i == imax+1) { + if (var[FLAGP][IX(i-1,j,k)] == SOLID) continue; + } + else + continue; + + // Y + if (j == 0) { + if (var[FLAGP][IX(i,j+1,k)] == SOLID) continue; + } + else if (j == jmax+1) { + if (var[FLAGP][IX(i,j-1,k)] == SOLID) continue; + } + else + continue; + + //Z + if (k == 0) { + if (var[FLAGP][IX(i,j,k+1)] == SOLID) continue; + } + else if (k == kmax+1) { + if (var[FLAGP][IX(i,j,k-1)] == SOLID) continue; + } + else + continue; + + }// end of if for finding internal blocks */ + + fprintf(datafile, "%f\t%f\t%f\t%d\t%d\t%d\t", x[IX(i, j, k)], y[IX(i, j, k)], + z[IX(i, j, k)], i, j, k); + fprintf(datafile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", u[IX(i, j, k)], + v[IX(i, j, k)], w[IX(i, j, k)], T[IX(i, j, k)], Xi[IX(i, j, k)], + flagp[IX(i, j, k)], p[IX(i, j, k)], + sqrt(u[IX(i, j, k)] * u[IX(i, j, k)] + + v[IX(i, j, k)] * v[IX(i, j, k)] + + w[IX(i, j, k)] * w[IX(i, j, k)])); END_FOR sprintf(msg, "write_tecplot_data(): Wrote file %s.", filename); @@ -88,23 +175,357 @@ int write_tecplot_data(PARA_DATA *para, REAL **var, char *name) { free(filename); fclose(datafile); return 0; -} /*write_tecplot_data()*/ - - /* - * Write all available data in a format for tecplot - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to file name - * - * @return 0 if no error occurred - */ +} /* write_tecplot_data() */ + +/**************************************************************************** +| Write standard output data in a format for paraview in VTK (Visualization +| Toolkit) http://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf +| \Wei Tian +| \ 6/1/2017, Andover, MA +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ +int write_vtk_data(PARA_DATA *para, REAL **var, char *name) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL *x = var[X], *y = var[Y], *z = var[Z]; + REAL *u = var[VXM], *v = var[VYM], *w = var[VZM], *p = var[IP]; + REAL *T = var[TEMPM], *Xi = var[Xi1]; + REAL *flagp = var[FLAGP]; + char *filename; + FILE *datafile; + + /**************************************************************************** + | Allocate memory for filename + | Length of filename should be sizeof(ActualName) + 1 + | Using sizeof(ActualName) will cause memory fault in free(filename) + ****************************************************************************/ + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { + ffd_log("write_tecplot_data(): Failed to allocate memory for file name", + FFD_ERROR); + return 1; + } + + strcpy(filename, name); + strcat(filename, ".vtk"); + + /* Open output file */ + if ((datafile = fopen(filename, "w+")) == NULL) { + ffd_log("write_vtk_data(): Failed to open output file!\n", FFD_ERROR); + return 1; + } + + convert_to_tecplot(para, var); + /* See file of the attached link for detail */ + /* first line: the version of the VTK format */ + fprintf(datafile, "# vtk DataFile Version 2.0\n"); + /* Next line: title */ + fprintf(datafile, "FFDResults\n"); + + /* Next line: data type */ + fprintf(datafile, "ASCII\n"); + + /* Next line: geometry type */ + fprintf(datafile, "DATASET RECTILINEAR_GRID\n"); + + /* Next line: dimensions */ + fprintf(datafile, "DIMENSIONS\t%d\t%d\t%d\n", imax + 2, jmax + 2, kmax + 2); + + /* Next line: X direction coordinate number */ + fprintf(datafile, "X_COORDINATES %d float\n", imax + 2); + + /* Next line: X direction coordinate */ + for (i = 0; i <= imax + 1; i++) { + fprintf(datafile, "%f\t", x[IX(i, jmax, kmax)]); + } + fprintf(datafile, "\n"); + + /* Next line: Y direction coordinate number */ + fprintf(datafile, "Y_COORDINATES %d float\n", jmax + 2); + + /* Next line: Y direction coordinate */ + for (i = 0; i <= jmax + 1; i++) { + fprintf(datafile, "%f\t", y[IX(imax, i, kmax)]); + } + fprintf(datafile, "\n"); + + /* Next line: Z direction coordinate number */ + fprintf(datafile, "Z_COORDINATES %d float\n", kmax + 2); + + /* Next line: Z direction coordinate */ + for (i = 0; i <= kmax + 1; i++) { + fprintf(datafile, "%f\t", z[IX(imax, jmax, i)]); + } + fprintf(datafile, "\n"); + + /* Next line: Number of data point */ + fprintf(datafile, "POINT_DATA %d\n", (imax + 2) * (jmax + 2) * (kmax + 2)); + + /* Next three lines: Write scalar variable T */ + fprintf(datafile, "SCALARS T float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t", T[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar variable P */ + fprintf(datafile, "SCALARS P float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t", p[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar speed VEL */ + fprintf(datafile, "SCALARS VEL float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t", + sqrt(u[IX(i, j, k)] * u[IX(i, j, k)] + + v[IX(i, j, k)] * v[IX(i, j, k)] + + w[IX(i, j, k)] * w[IX(i, j, k)])); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar U */ + fprintf(datafile, "SCALARS U float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t", u[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar V */ + fprintf(datafile, "SCALARS V float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t", v[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar W */ + fprintf(datafile, "SCALARS W float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t", w[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* From lines: Write velocity vector */ + fprintf(datafile, "VECTORS velocity float\n"); + FOR_ALL_CELL + fprintf(datafile, "%f\t%f\t%f\n", u[IX(i, j, k)], v[IX(i, j, k)], + w[IX(i, j, k)]); + END_FOR + + sprintf(msg, "write_vtk_data(): Wrote file %s.", filename); + ffd_log(msg, FFD_NORMAL); + + free(filename); + fclose(datafile); + + /* write to the stream */ + /* FIXME: need to talk to Mike about the coordinate */ + FOR_ALL_CELL_IJK + fprintf(stdout, "%f\t%f\t%f\n", u[IX(i, j, k)], v[IX(i, j, k)], + w[IX(i, j, k)]); + END_FOR + + return 0; +} + +/**************************************************************************** +| Write standard output data in a format for paraview in VTK (Visualization +| Toolkit) http://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf +| \Wei Tian +| \ 6/1/2017, Andover, MA +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ +int write_vtk_fluid(PARA_DATA *para, REAL **var, char *name) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL *x = var[X], *y = var[Y], *z = var[Z]; + REAL *u = var[VXM], *v = var[VYM], *w = var[VZM], *p = var[IP]; + REAL *T = var[TEMPM], *Xi = var[Xi1]; + REAL *flagp = var[FLAGP]; + int CellNum = 0; + char *filename; + FILE *datafile; + + /**************************************************************************** + | Allocate memory for filename + | Length of filename should be sizeof(ActualName) + 1 + | Using sizeof(ActualName) will cause memory fault in free(filename) + ****************************************************************************/ + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { + ffd_log("write_tecplot_fluid(): Failed to allocate memory for file name", + FFD_ERROR); + return 1; + } + + strcpy(filename, name); + strcat(filename, "_fluid.vtk"); + + /* Open output file */ + if ((datafile = fopen(filename, "w+")) == NULL) { + ffd_log("write_vtk_fluid(): Failed to open output file!\n", FFD_ERROR); + return 1; + } + + convert_to_tecplot(para, var); + /* See file of the attached link for detail */ + /* first line: the version of the VTK format */ + fprintf(datafile, "# vtk DataFile Version 2.0\n"); + /* Next line: title */ + fprintf(datafile, "FFDResults\n"); + + /* Next line: data type */ + fprintf(datafile, "ASCII\n"); + + /* Next line: geometry type */ + fprintf(datafile, "DATASET RECTILINEAR_GRID\n"); + + /* Next line: dimensions */ + fprintf(datafile, "DIMENSIONS\t%d\t%d\t%d\n", imax, jmax, kmax); + + /* Next line: X direction coordinate number */ + fprintf(datafile, "X_COORDINATES %d float\n", imax); + + /* Next line: X direction coordinate */ + for (i = 1; i <= imax; i++) { + fprintf(datafile, "%f\t", x[IX(i, jmax, kmax)]); + } + fprintf(datafile, "\n"); + + /* Next line: Y direction coordinate number */ + fprintf(datafile, "Y_COORDINATES %d float\n", jmax); + + /* Next line: Y direction coordinate */ + for (i = 1; i <= jmax; i++) { + fprintf(datafile, "%f\t", y[IX(imax, i, kmax)]); + } + fprintf(datafile, "\n"); + + /* Next line: Z direction coordinate number */ + fprintf(datafile, "Z_COORDINATES %d float\n", kmax); + + /* Next line: Z direction coordinate */ + for (i = 1; i <= kmax; i++) { + fprintf(datafile, "%f\t", z[IX(imax, jmax, i)]); + } + fprintf(datafile, "\n"); + + /* Next line: Number of data point */ + /* Count the number of fluid cells */ + CellNum = 0; + for (i = 1; i <= imax; i++) { + for (j = 1; j <= jmax; j++) { + for (k = 1; k <= kmax; k++) { + if (flagp[IX(i, j, k)] == FLUID) { + CellNum++; + } else { + continue; + } + } + } + } + fprintf(datafile, "POINT_DATA %d\n", CellNum); + + /* Next three lines: Write scalar variable T */ + fprintf(datafile, "SCALARS T float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t", T[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar variable P */ + fprintf(datafile, "SCALARS P float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t", p[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar speed VEL */ + fprintf(datafile, "SCALARS VEL float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t", + sqrt(u[IX(i, j, k)] * u[IX(i, j, k)] + + v[IX(i, j, k)] * v[IX(i, j, k)] + + w[IX(i, j, k)] * w[IX(i, j, k)])); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar U */ + fprintf(datafile, "SCALARS U float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t", u[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar V */ + fprintf(datafile, "SCALARS V float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t", v[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* Next three lines: Write scalar W */ + fprintf(datafile, "SCALARS W float 1\n"); + fprintf(datafile, "LOOKUP_TABLE default\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t", w[IX(i, j, k)]); + END_FOR + fprintf(datafile, "\n"); + + /* From lines: Write velocity vector */ + fprintf(datafile, "VECTORS velocity float\n"); + FOR_EACH_CELL + fprintf(datafile, "%f\t%f\t%f\n", u[IX(i, j, k)], v[IX(i, j, k)], + w[IX(i, j, k)]); + END_FOR + + sprintf(msg, "write_vtk_fluid(): Wrote file %s.", filename); + ffd_log(msg, FFD_NORMAL); + + free(filename); + fclose(datafile); + return 0; +} /* write_vtk_fluid() */ + +/**************************************************************************** +| Write all available data in a format for tecplot +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name) { int i, j, k; - int imax=para->geom->imax, jmax=para->geom->jmax; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL *x = var[X], *y = var[Y], *z =var[Z]; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL *x = var[X], *y = var[Y], *z = var[Z]; char *filename; FILE *dataFile; @@ -113,8 +534,8 @@ int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name) { | Length of filename should be sizeof(ActualName) + 1 | Using sizeof(ActualName) will cause memory fault in free(filename) ****************************************************************************/ - filename = (char *) malloc((strlen(name)+5)*sizeof(char)); - if(filename==NULL) { + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { ffd_log("write_tecplot_all_data(): Failed to allocate memory for file name", FFD_ERROR); return 1; @@ -123,9 +544,10 @@ int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name) { strcpy(filename, name); strcat(filename, ".plt"); - /* Open output file*/ - if((dataFile=fopen(filename,"w"))==NULL) { - sprintf(msg, "write_tecplot_data(): Failed to open output file %s.", filename); + /* Open output file */ + if ((dataFile = fopen(filename, "w")) == NULL) { + sprintf(msg, "write_tecplot_data(): Failed to open output file %s.", + filename); ffd_log(msg, FFD_ERROR); return 1; } @@ -134,13 +556,13 @@ int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name) { fprintf(dataFile, "TITLE = "); - /* Print simulation, dimension and mesh information*/ + /* Print simulation, dimension and mesh information */ fprintf(dataFile, "\"dt=%fs, t=%fs, nu=%f, Lx=%f, Ly=%f, Lz%f, ", - para->mytime->dt, para->mytime->t, para->prob->nu, - para->geom->Lx, para->geom->Ly, para->geom->Lz); - fprintf(dataFile, "Nx=%d, Ny=%d, Nz=%d \"\n", imax+2, jmax+2, kmax+2); + para->mytime->dt, para->mytime->t, para->prob->nu, para->geom->Lx, + para->geom->Ly, para->geom->Lz); + fprintf(dataFile, "Nx=%d, Ny=%d, Nz=%d \"\n", imax + 2, jmax + 2, kmax + 2); - /* Print variables*/ + /* Print variables */ fprintf(dataFile, "VARIABLES = X, Y, Z, I, J, K, "); fprintf(dataFile, "U, V, W, UM, VM, WM, US, VS, WS, "); fprintf(dataFile, "P, "); @@ -151,47 +573,47 @@ int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name) { fprintf(dataFile, "QFLUX, QFLUXBC, "); fprintf(dataFile, "AP, AN, AS, AW, AE, AF, AB, B, AP0, PP"); fprintf(dataFile, "\n"); - fprintf(dataFile, "ZONE F=POINT, I=%d, J=%d, K=%d\n", imax+2, jmax+2, kmax+2 ); + fprintf(dataFile, "ZONE F=POINT, I=%d, J=%d, K=%d\n", imax + 2, jmax + 2, + kmax + 2); FOR_ALL_CELL - /* Coordinates*/ - fprintf(dataFile, "%f\t%f\t%f\t%d\t%d\t%d\t", - x[IX(i,j,k)], y[IX(i,j,k)], z[IX(i,j,k)], i, j, k); - /* Velocities*/ - fprintf(dataFile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t", - var[VX][IX(i,j,k)], var[VY][IX(i,j,k)], var[VZ][IX(i,j,k)], - var[VXM][IX(i,j,k)], var[VYM][IX(i,j,k)], var[VZM][IX(i,j,k)], - var[VXS][IX(i,j,k)], var[VYS][IX(i,j,k)], var[VZS][IX(i,j,k)]); - /* Pressure*/ - fprintf(dataFile, "%f\t", var[IP][IX(i,j,k)]); - /* Temperature*/ - fprintf(dataFile, "%f\t%f\t%f\t", - var[TEMP][IX(i,j,k)], var[TEMPM][IX(i,j,k)], - var[TEMPS][IX(i,j,k)]); - /* Gravity*/ - fprintf(dataFile, "%f\t%f\t%f\t", - var[GX][IX(i,j,k)], var[GY][IX(i,j,k)], var[GZ][IX(i,j,k)]); - /* Flags for simulation*/ - fprintf(dataFile, "%f\t%f\t%f\t%f\t", - var[FLAGU][IX(i,j,k)], var[FLAGV][IX(i,j,k)], - var[FLAGW][IX(i,j,k)], var[FLAGP][IX(i,j,k)]); - /* Boundary conditions*/ - fprintf(dataFile, "%f\t%f\t%f\t%f\t", - var[VXBC][IX(i,j,k)], var[VYBC][IX(i,j,k)], - var[VZBC][IX(i,j,k)], var[TEMPBC][IX(i,j,k)]); - fprintf(dataFile, "%f\t%f\t%f\t%f\t", - var[Xi1BC][IX(i,j,k)], var[Xi2BC][IX(i,j,k)], - var[C1BC][IX(i,j,k)], var[C2BC][IX(i,j,k)]); - /* Heat flux*/ - fprintf(dataFile, "%f\t%f\t", - var[QFLUX][IX(i,j,k)], var[QFLUXBC][IX(i,j,k)]); - - /* Coefficients*/ - fprintf(dataFile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", - var[AP][IX(i,j,k)], var[AN][IX(i,j,k)], var[AS][IX(i,j,k)], - var[AW][IX(i,j,k)], var[AE][IX(i,j,k)], var[AF][IX(i,j,k)], - var[AB][IX(i,j,k)], var[B][IX(i,j,k)], var[AP0][IX(i,j,k)], - var[PP][IX(i,j,k)]); + /* Coordinates */ + fprintf(dataFile, "%f\t%f\t%f\t%d\t%d\t%d\t", x[IX(i, j, k)], y[IX(i, j, k)], + z[IX(i, j, k)], i, j, k); + /* Velocities */ + fprintf(dataFile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t", + var[VX][IX(i, j, k)], var[VY][IX(i, j, k)], var[VZ][IX(i, j, k)], + var[VXM][IX(i, j, k)], var[VYM][IX(i, j, k)], var[VZM][IX(i, j, k)], + var[VXS][IX(i, j, k)], var[VYS][IX(i, j, k)], var[VZS][IX(i, j, k)]); + /* Pressure */ + fprintf(dataFile, "%f\t", var[IP][IX(i, j, k)]); + /* Temperature */ + fprintf(dataFile, "%f\t%f\t%f\t", var[TEMP][IX(i, j, k)], + var[TEMPM][IX(i, j, k)], var[TEMPS][IX(i, j, k)]); + /* Gravity */ + fprintf(dataFile, "%f\t%f\t%f\t", var[GX][IX(i, j, k)], var[GY][IX(i, j, k)], + var[GZ][IX(i, j, k)]); + /* Flags for simulation */ + fprintf(dataFile, "%f\t%f\t%f\t%f\t", var[FLAGU][IX(i, j, k)], + var[FLAGV][IX(i, j, k)], var[FLAGW][IX(i, j, k)], + var[FLAGP][IX(i, j, k)]); + /* Boundary conditions */ + fprintf(dataFile, "%f\t%f\t%f\t%f\t", var[VXBC][IX(i, j, k)], + var[VYBC][IX(i, j, k)], var[VZBC][IX(i, j, k)], + var[TEMPBC][IX(i, j, k)]); + fprintf(dataFile, "%f\t%f\t%f\t%f\t", var[Xi1BC][IX(i, j, k)], + var[Xi2BC][IX(i, j, k)], var[C1BC][IX(i, j, k)], + var[C2BC][IX(i, j, k)]); + /* Heat flux */ + fprintf(dataFile, "%f\t%f\t", var[QFLUX][IX(i, j, k)], + var[QFLUXBC][IX(i, j, k)]); + + /* Coefficients */ + fprintf(dataFile, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", + var[AP][IX(i, j, k)], var[AN][IX(i, j, k)], var[AS][IX(i, j, k)], + var[AW][IX(i, j, k)], var[AE][IX(i, j, k)], var[AF][IX(i, j, k)], + var[AB][IX(i, j, k)], var[B][IX(i, j, k)], var[AP0][IX(i, j, k)], + var[PP][IX(i, j, k)]); END_FOR @@ -201,25 +623,25 @@ int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name) { free(filename); return 0; -} /*write_tecplot_all_data()*/ - - /* - * Convert the data to the format for Tecplot - * - * FFD uses staggered grid and Tecplot data is for collocated grid. - * This subroutine transfers the data from FFD format to Tecplot format. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return no return - */ +} /* write_tecplot_all_data() */ + +/**************************************************************************** +| Convert the data to the format for Tecplot +| +| FFD uses staggered grid and Tecplot data is for collocated grid. +| This subroutine transfers the data from FFD format to Tecplot format. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return no return +****************************************************************************/ void convert_to_tecplot(PARA_DATA *para, REAL **var) { int i, j, k; - int imax=para->geom->imax; - int jmax=para->geom->jmax; + int imax = para->geom->imax; + int jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); REAL *u = var[VX], *v = var[VY], *w = var[VZ]; REAL *um = var[VXM], *vm = var[VYM], *wm = var[VZM]; REAL *p = var[IP], *d = var[Xi1]; @@ -228,33 +650,33 @@ void convert_to_tecplot(PARA_DATA *para, REAL **var) { /**************************************************************************** | Convert velocities ****************************************************************************/ - for(j=0; j<=jmax+1; j++) - for(k=0; k<=kmax+1; k++) { - u[IX(imax+1,j,k)] = u[IX(imax,j,k)]; - um[IX(imax+1,j,k)] = um[IX(imax,j,k)]; - for(i=imax; i>=1; i--) { - u[IX(i,j,k)] = (REAL) (0.5 * (u[IX(i,j,k)]+u[IX(i-1,j,k)])); - um[IX(i,j,k)] = (REAL) (0.5 * (um[IX(i,j,k)]+um[IX(i-1,j,k)])); + for (j = 0; j <= jmax + 1; j++) + for (k = 0; k <= kmax + 1; k++) { + u[IX(imax + 1, j, k)] = u[IX(imax, j, k)]; + um[IX(imax + 1, j, k)] = um[IX(imax, j, k)]; + for (i = imax; i >= 1; i--) { + u[IX(i, j, k)] = (REAL)(0.5 * (u[IX(i, j, k)] + u[IX(i - 1, j, k)])); + um[IX(i, j, k)] = (REAL)(0.5 * (um[IX(i, j, k)] + um[IX(i - 1, j, k)])); } } - for(i=0; i<=imax+1; i++) - for(k=0; k<=kmax+1; k++) { - v[IX(i,jmax+1,k)] = v[IX(i,jmax,k)]; - vm[IX(i,jmax+1,k)] = vm[IX(i,jmax,k)]; - for(j=jmax; j>=1; j--) { - v[IX(i,j,k)] = (REAL) (0.5 * (v[IX(i,j,k)]+v[IX(i,j-1,k)])); - vm[IX(i,j,k)] = (REAL) (0.5 * (vm[IX(i,j,k)]+vm[IX(i,j-1,k)])); + for (i = 0; i <= imax + 1; i++) + for (k = 0; k <= kmax + 1; k++) { + v[IX(i, jmax + 1, k)] = v[IX(i, jmax, k)]; + vm[IX(i, jmax + 1, k)] = vm[IX(i, jmax, k)]; + for (j = jmax; j >= 1; j--) { + v[IX(i, j, k)] = (REAL)(0.5 * (v[IX(i, j, k)] + v[IX(i, j - 1, k)])); + vm[IX(i, j, k)] = (REAL)(0.5 * (vm[IX(i, j, k)] + vm[IX(i, j - 1, k)])); } } - for(i=0; i<=imax+1; i++) - for(j=0; j<=jmax+1; j++) { - w[IX(i,j,kmax+1)] = w[IX(i,j,kmax)]; - wm[IX(i,j,kmax+1)] = wm[IX(i,j,kmax)]; - for(k=kmax; k>=1; k--) { - w[IX(i,j,k)] = (REAL) (0.5 * (w[IX(i,j,k)]+w[IX(i,j,k-1)])); - wm[IX(i,j,k)] = (REAL) (0.5 * (wm[IX(i,j,k)]+wm[IX(i,j,k-1)])); + for (i = 0; i <= imax + 1; i++) + for (j = 0; j <= jmax + 1; j++) { + w[IX(i, j, kmax + 1)] = w[IX(i, j, kmax)]; + wm[IX(i, j, kmax + 1)] = wm[IX(i, j, kmax)]; + for (k = kmax; k >= 1; k--) { + w[IX(i, j, k)] = (REAL)(0.5 * (w[IX(i, j, k)] + w[IX(i, j, k - 1)])); + wm[IX(i, j, k)] = (REAL)(0.5 * (wm[IX(i, j, k)] + wm[IX(i, j, k - 1)])); } } @@ -265,66 +687,78 @@ void convert_to_tecplot(PARA_DATA *para, REAL **var) { convert_to_tecplot_corners(para, var, d); convert_to_tecplot_corners(para, var, T); convert_to_tecplot_corners(para, var, Tm); -} /* End of convert_to_tecplot()*/ - - /* - * Convert the data at 8 corners to the format for Tecplot - * - * FFD uses staggered grid and Tecplot data is for collocated grid. - * This subroutine transfers the data from FFD format to Tecplot format. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to variable to be converted - * - * @return no return - */ +} /* End of convert_to_tecplot() */ + +/**************************************************************************** +| Convert the data at 8 corners to the format for Tecplot +| +| FFD uses staggered grid and Tecplot data is for collocated grid. +| This subroutine transfers the data from FFD format to Tecplot format. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to variable to be converted +| +| \return no return +****************************************************************************/ void convert_to_tecplot_corners(PARA_DATA *para, REAL **var, REAL *psi) { - int imax=para->geom->imax, jmax=para->geom->jmax; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - - /*West-South-Back*/ - psi[IX(0,0,0)] = (psi[IX(0,1,0)] + psi[IX(1,0,0)] + psi[IX(0,0,1)]) / (REAL) 3.0; - /*West-North-Back*/ - psi[IX(0,jmax+1,0)] = ( psi[IX(1,jmax+1,0)] + psi[IX(0,jmax,0)] - + psi[IX(0,jmax+1,1)]) / (REAL) 3.0; - /*East-South-Back*/ - psi[IX(imax+1,0,0)] = ( psi[IX(imax,0,0)] + psi[IX(imax+1,1,0)] - + psi[IX(imax+1,0,1)]) / (REAL) 3.0; - /*East-North-Back*/ - psi[IX(imax+1,jmax+1,0)] = ( psi[IX(imax,jmax+1,0)] + psi[IX(imax+1,jmax,0)] - + psi[IX(imax+1,jmax+1,1)]) / (REAL) 3.0; - /*West-South-Front*/ - psi[IX(0,0,kmax+1)] = ( psi[IX(0,1,kmax+1)] + psi[IX(1,0,kmax+1)] - + psi[IX(0,0,kmax)]) / (REAL) 3.0; - /*West-North-Front*/ - psi[IX(0,jmax+1,kmax+1)] = ( psi[IX(1,jmax+1,kmax+1)] + psi[IX(0,jmax,kmax+1)] - + psi[IX(0,jmax+1,kmax)]) / (REAL) 3.0; - /*East-South-Front*/ - psi[IX(imax+1,0,kmax+1)] = ( psi[IX(imax,0,kmax+1)] + psi[IX(imax+1,1,kmax+1)] - + psi[IX(imax+1,0,kmax)]) / (REAL) 3.0; - /*Ease-North-Front*/ - psi[IX(imax+1,jmax+1,kmax+1)] = ( psi[IX(imax,jmax+1,0)] + psi[IX(imax+1,jmax,0)] - + psi[IX(imax+1,jmax+1,kmax)]) / (REAL) 3.0; -} /* End of convert_to_tecplot_corners()*/ - - /* - * Write the instantaneous value of variables in Tecplot format - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to the filename - * - * @return 0 if no error occurred - */ -int write_unsteady(PARA_DATA *para, REAL **var, char *name){ - int i,j,k; - int imax=para->geom->imax, jmax=para->geom->jmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + + /* West-South-Back */ + psi[IX(0, 0, 0)] = + (psi[IX(0, 1, 0)] + psi[IX(1, 0, 0)] + psi[IX(0, 0, 1)]) / (REAL)3.0; + /* West-North-Back */ + psi[IX(0, jmax + 1, 0)] = (psi[IX(1, jmax + 1, 0)] + psi[IX(0, jmax, 0)] + + psi[IX(0, jmax + 1, 1)]) / + (REAL)3.0; + /* East-South-Back */ + psi[IX(imax + 1, 0, 0)] = (psi[IX(imax, 0, 0)] + psi[IX(imax + 1, 1, 0)] + + psi[IX(imax + 1, 0, 1)]) / + (REAL)3.0; + /* East-North-Back */ + psi[IX(imax + 1, jmax + 1, 0)] = + (psi[IX(imax, jmax + 1, 0)] + psi[IX(imax + 1, jmax, 0)] + + psi[IX(imax + 1, jmax + 1, 1)]) / + (REAL)3.0; + /* West-South-Front */ + psi[IX(0, 0, kmax + 1)] = (psi[IX(0, 1, kmax + 1)] + psi[IX(1, 0, kmax + 1)] + + psi[IX(0, 0, kmax)]) / + (REAL)3.0; + /* West-North-Front */ + psi[IX(0, jmax + 1, kmax + 1)] = + (psi[IX(1, jmax + 1, kmax + 1)] + psi[IX(0, jmax, kmax + 1)] + + psi[IX(0, jmax + 1, kmax)]) / + (REAL)3.0; + /* East-South-Front */ + psi[IX(imax + 1, 0, kmax + 1)] = + (psi[IX(imax, 0, kmax + 1)] + psi[IX(imax + 1, 1, kmax + 1)] + + psi[IX(imax + 1, 0, kmax)]) / + (REAL)3.0; + /* Ease-North-Front */ + psi[IX(imax + 1, jmax + 1, kmax + 1)] = + (psi[IX(imax, jmax + 1, 0)] + psi[IX(imax + 1, jmax, 0)] + + psi[IX(imax + 1, jmax + 1, kmax)]) / + (REAL)3.0; +} /* End of convert_to_tecplot_corners() */ + +/**************************************************************************** +| Write the instantaneous value of variables in Tecplot format +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to the filename +| +| \return 0 if no error occurred +****************************************************************************/ +int write_unsteady(PARA_DATA *para, REAL **var, char *name) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); REAL *u = var[VX], *v = var[VY], *w = var[VZ], *p = var[IP]; - REAL *d = var[Xi1]; + REAL *d = var[Xi1]; REAL *T = var[TEMP]; char *filename; FILE *datafile; @@ -334,8 +768,8 @@ int write_unsteady(PARA_DATA *para, REAL **var, char *name){ | Length of filename should be sizeof(ActualName) + 1 | Using sizeof(ActualName) will cause memory fault in free(filename) ****************************************************************************/ - filename = (char *) malloc((strlen(name)+5)*sizeof(char)); - if(filename==NULL) { + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { ffd_log("write_unsteady(): Failed to allocate memory for file name", FFD_ERROR); return 1; @@ -344,16 +778,18 @@ int write_unsteady(PARA_DATA *para, REAL **var, char *name){ strcpy(filename, name); strcat(filename, ".plt"); - /* Open output file*/ - if((datafile=fopen(filename,"w"))==NULL) { + /* Open output file */ + if ((datafile = fopen(filename, "w")) == NULL) { sprintf(msg, "write_unsteady(): Failed to open file %s.", filename); ffd_log(msg, FFD_ERROR); return 1; } FOR_ALL_CELL - fprintf( datafile, "%f\t%f\t%f\t",u[IX(i,j,k)], v[IX(i,j,k)], w[IX(i,j,k)]); - fprintf( datafile, "%f\t%f\t%f\n",T[IX(i,j,k)], d[IX(i,j,k)], p[IX(i,j,k)]); + fprintf(datafile, "%f\t%f\t%f\t", u[IX(i, j, k)], v[IX(i, j, k)], + w[IX(i, j, k)]); + fprintf(datafile, "%f\t%f\t%f\n", T[IX(i, j, k)], d[IX(i, j, k)], + p[IX(i, j, k)]); END_FOR sprintf(msg, "write_unsteady(): Wrote the unsteady data file %s.", filename); @@ -362,24 +798,24 @@ int write_unsteady(PARA_DATA *para, REAL **var, char *name){ free(filename); fclose(datafile); return 0; -} /*write_unsteady()*/ - - /* - * Write the data in a format for SCI program - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to the filename - * - * @return 0 if no error occurred - */ +} /* write_unsteady() */ + +/**************************************************************************** +| Write the data in a format for SCI program +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to the filename +| +| \return 0 if no error occurred +****************************************************************************/ int write_SCI(PARA_DATA *para, REAL **var, char *name) { int i, j, k; int IPR, IU, IV, IW, IT, IC1, IC2, IC3, IC4, IC5, IC6, IC7; - int imax=para->geom->imax, jmax=para->geom->jmax; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL *x = var[X], *y = var[Y], *z =var[Z]; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL *x = var[X], *y = var[Y], *z = var[Z]; REAL *u = var[VX], *v = var[VY], *w = var[VZ], *p = var[IP]; REAL *um = var[VXM], *vm = var[VYM], *wm = var[VZM]; REAL *T = var[TEMP]; @@ -391,18 +827,17 @@ int write_SCI(PARA_DATA *para, REAL **var, char *name) { | Length of filename should be sizeof(ActualName) + 1 | Using sizeof(ActualName) will cause memory fault in free(filename) ****************************************************************************/ - filename = (char *) malloc((strlen(name)+5)*sizeof(char)); - if(filename==NULL) { - ffd_log("write_SCI(): Failed to allocate memory for file name", - FFD_ERROR); + filename = (char *)malloc((strlen(name) + 5) * sizeof(char)); + if (filename == NULL) { + ffd_log("write_SCI(): Failed to allocate memory for file name", FFD_ERROR); return 1; } strcpy(filename, name); strcat(filename, ".cfd"); - /* Open output file*/ - if((dataFile=fopen(filename,"w"))==NULL) { + /* Open output file */ + if ((dataFile = fopen(filename, "w")) == NULL) { sprintf(msg, "write_SCI(): Failed to open file %s.", filename); ffd_log(msg, FFD_ERROR); return 1; @@ -429,35 +864,35 @@ int write_SCI(PARA_DATA *para, REAL **var, char *name) { /**************************************************************************** | Convert variable value from cell surface to cell center ****************************************************************************/ - for(j=0; j<=jmax+1; j++) { - for(k=0; k<=kmax+1; k++) { - u[IX(imax+1,j,k)] = u[IX(imax,j,k)]; - um[IX(imax+1,j,k)] = um[IX(imax,j,k)]; - for(i=imax; i>=1; i--) { - u[IX(i,j,k)] = (REAL) 0.5 * (u[IX(i,j,k)]+u[IX(i-1,j,k)]); - um[IX(i,j,k)] = (REAL) 0.5 * (um[IX(i,j,k)]+um[IX(i-1,j,k)]); + for (j = 0; j <= jmax + 1; j++) { + for (k = 0; k <= kmax + 1; k++) { + u[IX(imax + 1, j, k)] = u[IX(imax, j, k)]; + um[IX(imax + 1, j, k)] = um[IX(imax, j, k)]; + for (i = imax; i >= 1; i--) { + u[IX(i, j, k)] = (REAL)0.5 * (u[IX(i, j, k)] + u[IX(i - 1, j, k)]); + um[IX(i, j, k)] = (REAL)0.5 * (um[IX(i, j, k)] + um[IX(i - 1, j, k)]); } } } - for(i=0; i<=imax+1; i++) { - for(k=0; k<=kmax+1; k++) { - v[IX(i,jmax+1,k)] = v[IX(i,jmax,k)]; - vm[IX(i,jmax+1,k)] = vm[IX(i,jmax,k)]; - for(j=jmax; j>=1; j--) { - v[IX(i,j,k)] = (REAL) 0.5 * (v[IX(i,j,k)]+v[IX(i,j-1,k)]); - vm[IX(i,j,k)] = (REAL) 0.5 * (vm[IX(i,j,k)]+vm[IX(i,j-1,k)]); - } + for (i = 0; i <= imax + 1; i++) { + for (k = 0; k <= kmax + 1; k++) { + v[IX(i, jmax + 1, k)] = v[IX(i, jmax, k)]; + vm[IX(i, jmax + 1, k)] = vm[IX(i, jmax, k)]; + for (j = jmax; j >= 1; j--) { + v[IX(i, j, k)] = (REAL)0.5 * (v[IX(i, j, k)] + v[IX(i, j - 1, k)]); + vm[IX(i, j, k)] = (REAL)0.5 * (vm[IX(i, j, k)] + vm[IX(i, j - 1, k)]); + } } } - for(i=0; i<=imax+1; i++) { - for(j=0; j<=jmax+1; j++) { - w[IX(i,j,kmax+1)] = w[IX(i,j,kmax)]; - wm[IX(i,j,kmax+1)] = wm[IX(i,j,kmax)]; - for(k=kmax; k>=1; k--) { - w[IX(i,j,k)] = (REAL) 0.5 * (w[IX(i,j,k)]+w[IX(i,j,k-1)]); - wm[IX(i,j,k)] = (REAL) 0.5 * (wm[IX(i,j,k)]+wm[IX(i,j,k-1)]); + for (i = 0; i <= imax + 1; i++) { + for (j = 0; j <= jmax + 1; j++) { + w[IX(i, j, kmax + 1)] = w[IX(i, j, kmax)]; + wm[IX(i, j, kmax + 1)] = wm[IX(i, j, kmax)]; + for (k = kmax; k >= 1; k--) { + w[IX(i, j, k)] = (REAL)0.5 * (w[IX(i, j, k)] + w[IX(i, j, k - 1)]); + wm[IX(i, j, k)] = (REAL)0.5 * (wm[IX(i, j, k)] + wm[IX(i, j, k - 1)]); } } } @@ -465,35 +900,48 @@ int write_SCI(PARA_DATA *para, REAL **var, char *name) { /**************************************************************************** | Compute pressure value for the corner of the domain ****************************************************************************/ - /*W-S-B*/ - p[IX(0,0,0)] = (p[IX(0,1,0)]+p[IX(1,0,0)]+p[IX(0,0,1)]) / (REAL) 3.0; - /*W-N-B*/ - p[IX(0,jmax+1,0)] = ( p[IX(1,jmax+1,0)]+p[IX(0,jmax,0)] - +p[IX(0,jmax+1,1)]) / (REAL) 3.0; - /*E-S-B*/ - p[IX(imax+1,0,0)] = ( p[IX(imax,0,0)]+p[IX(imax+1,1,0)] - +p[IX(imax+1,0,1)]) / (REAL) 3.0; - /*E-N-B*/ - p[IX(imax+1,jmax+1,0)] = ( p[IX(imax,jmax+1,0)]+p[IX(imax+1,jmax,0)] - +p[IX(imax+1,jmax+1,1)]) / (REAL) 3.0; - /*W-S-F*/ - p[IX(0,0,kmax+1)] = ( p[IX(0,1,kmax+1)]+p[IX(1,0,kmax+1)] - +p[IX(0,0,kmax)]) / (REAL) 3.0; - /*W-N-F*/ - p[IX(0,jmax+1,kmax+1)] = ( p[IX(1,jmax+1,kmax+1)]+p[IX(0,jmax,kmax+1)] - +p[IX(0,jmax+1,kmax)]) / (REAL) 3.0; - - /*E-S-F*/ - p[IX(imax+1,0,kmax+1)] = ( p[IX(imax,0,kmax+1)]+p[IX(imax+1,1,kmax+1)] - +p[IX(imax+1,0,kmax)]) / (REAL) 3.0; - /*E-N-F*/ - p[IX(imax+1,jmax+1,kmax+1)] = ( p[IX(imax,jmax+1,0)]+p[IX(imax+1,jmax,0)] - +p[IX(imax+1,jmax+1,kmax)]) / (REAL) 3.0; + /* W-S-B */ + p[IX(0, 0, 0)] = + (p[IX(0, 1, 0)] + p[IX(1, 0, 0)] + p[IX(0, 0, 1)]) / (REAL)3.0; + /* W-N-B */ + p[IX(0, jmax + 1, 0)] = + (p[IX(1, jmax + 1, 0)] + p[IX(0, jmax, 0)] + p[IX(0, jmax + 1, 1)]) / + (REAL)3.0; + /* E-S-B */ + p[IX(imax + 1, 0, 0)] = + (p[IX(imax, 0, 0)] + p[IX(imax + 1, 1, 0)] + p[IX(imax + 1, 0, 1)]) / + (REAL)3.0; + /* E-N-B */ + p[IX(imax + 1, jmax + 1, 0)] = + (p[IX(imax, jmax + 1, 0)] + p[IX(imax + 1, jmax, 0)] + + p[IX(imax + 1, jmax + 1, 1)]) / + (REAL)3.0; + /* W-S-F */ + p[IX(0, 0, kmax + 1)] = + (p[IX(0, 1, kmax + 1)] + p[IX(1, 0, kmax + 1)] + p[IX(0, 0, kmax)]) / + (REAL)3.0; + /* W-N-F */ + p[IX(0, jmax + 1, kmax + 1)] = + (p[IX(1, jmax + 1, kmax + 1)] + p[IX(0, jmax, kmax + 1)] + + p[IX(0, jmax + 1, kmax)]) / + (REAL)3.0; + + /* E-S-F */ + p[IX(imax + 1, 0, kmax + 1)] = + (p[IX(imax, 0, kmax + 1)] + p[IX(imax + 1, 1, kmax + 1)] + + p[IX(imax + 1, 0, kmax)]) / + (REAL)3.0; + /* E-N-F */ + p[IX(imax + 1, jmax + 1, kmax + 1)] = + (p[IX(imax, jmax + 1, 0)] + p[IX(imax + 1, jmax, 0)] + + p[IX(imax + 1, jmax + 1, kmax)]) / + (REAL)3.0; /**************************************************************************** | Output domain length in x, y, z direction ****************************************************************************/ - fprintf(dataFile, "%e\t%e\t%e\n", para->geom->Lx, para->geom->Ly, para->geom->Lz); + fprintf(dataFile, "%e\t%e\t%e\n", para->geom->Lx, para->geom->Ly, + para->geom->Lz); /**************************************************************************** | Output maximum cell number in x, y, z direction ****************************************************************************/ @@ -504,61 +952,61 @@ int write_SCI(PARA_DATA *para, REAL **var, char *name) { fprintf(dataFile, "%d\t%d\t%d\t%d\t%d\t%d\n", IPR, IU, IV, IW, IT, IC1); fprintf(dataFile, "%d\t%d\t%d\t%d\t%d\t%d\n", IC2, IC3, IC4, IC5, IC6, IC7); - /**************************************************************************** - | Output the coordinates of cell center in x, y, z direction - ****************************************************************************/ - for(i=1; i<=imax; i++) - fprintf(dataFile, "%e\t", x[IX(i,j,k)]); + /**************************************************************************** + | Output the coordinates of cell center in x, y, z direction + ****************************************************************************/ + for (i = 1; i <= imax; i++) + fprintf(dataFile, "%e\t", x[IX(i, j, k)]); fprintf(dataFile, "\n"); - for(j=1; j<=jmax; j++) - fprintf(dataFile, "%e\t", y[IX(i,j,k)]); + for (j = 1; j <= jmax; j++) + fprintf(dataFile, "%e\t", y[IX(i, j, k)]); fprintf(dataFile, "\n"); - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", z[IX(i,j,k)]); + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", z[IX(i, j, k)]); fprintf(dataFile, "\n"); - /**************************************************************************** - | Output the variables - | p: Pressure - | U: Velocity in X direction - | V: Velocity in Y direction - | W: Velocity in Z direction - | T: Temperature - ****************************************************************************/ - for(j=1; j<=jmax; j++) - for(i=1; i<=imax; i++) { - fprintf(dataFile, "%d\t%d\n", i,j); - if(IPR==1) { - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", p[IX(i,j,k)]); + /**************************************************************************** + | Output the variables + | p: Pressure + | U: Velocity in X direction + | V: Velocity in Y direction + | W: Velocity in Z direction + | T: Temperature + ****************************************************************************/ + for (j = 1; j <= jmax; j++) + for (i = 1; i <= imax; i++) { + fprintf(dataFile, "%d\t%d\n", i, j); + if (IPR == 1) { + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", p[IX(i, j, k)]); fprintf(dataFile, "\n"); } - if(IU==1) { - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", u[IX(i,j,k)]); + if (IU == 1) { + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", u[IX(i, j, k)]); fprintf(dataFile, "\n"); } - if(IV==1) { - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", v[IX(i,j,k)]); + if (IV == 1) { + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", v[IX(i, j, k)]); fprintf(dataFile, "\n"); } - if(IW==1) { - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", w[IX(i,j,k)]); - fprintf(dataFile, "\n"); + if (IW == 1) { + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", w[IX(i, j, k)]); + fprintf(dataFile, "\n"); } - if(IT==1) { - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", T[IX(i,j,k)]); + if (IT == 1) { + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", T[IX(i, j, k)]); fprintf(dataFile, "\n"); } - for(k=1; k<=kmax; k++) - fprintf(dataFile, "%e\t", T[IX(i,j,k)]); - fprintf(dataFile, "\n"); - /* Extra line because SCI reads turbulence intensity data*/ + for (k = 1; k <= kmax; k++) + fprintf(dataFile, "%e\t", T[IX(i, j, k)]); + fprintf(dataFile, "\n"); + /* Extra line because SCI reads turbulence intensity data */ } fclose(dataFile); @@ -567,4 +1015,4 @@ int write_SCI(PARA_DATA *para, REAL **var, char *name) { free(filename); return 0; -} /* End of write_SCI()*/ +} /* End of write_SCI() */ diff --git a/Buildings/Resources/src/FastFluidDynamics/data_writer.h b/Buildings/Resources/src/FastFluidDynamics/data_writer.h index 92b48ff6d1f..584750b1786 100644 --- a/Buildings/Resources/src/FastFluidDynamics/data_writer.h +++ b/Buildings/Resources/src/FastFluidDynamics/data_writer.h @@ -1,21 +1,24 @@ -/* - * - * @file data_write.h - * - * @brief Write the simulation data - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - * This file provides functions that write the data file in different formats. - * - */ +/**************************************************************************** +| +| \file data_write.h +| +| \brief Write the simulation data +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +| This file provides functions that write the data file in different formats. +| +****************************************************************************/ #ifndef _DATA_WRITER_H #define _DATA_WRITER_H #endif @@ -32,73 +35,78 @@ FILE *file1; -/* - * Write standard output data in a format for tecplot - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to file name - * - * @return 0 if no error occurred - */ -int write_tecplot_data(PARA_DATA *para, REAL **var, char *name); +int data_debug(PARA_DATA *para, REAL **var, char *name); -/* - * Write all available data in a format for tecplot - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to file name - * - * @return 0 if no error occurred - */ -int write_tecplot_all_data(PARA_DATA *para, REAL **var, char *name); +/**************************************************************************** +| Write standard output data in a format for tecplot +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ +int write_tecplot_data(PARA_DATA* para, REAL** var, char* name); -/* - * Convert the data to the format for Tecplot - * - * FFD uses staggered grid and Tecplot data is for collocated grid. - * This subroutine transfers the data from FFD format to Tecplot format. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return no return - */ -void convert_to_tecplot(PARA_DATA *para, REAL **var); +/**************************************************************************** +| Write all available data in a format for tecplot +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to file name +| +| \return 0 if no error occurred +****************************************************************************/ +int write_tecplot_all_data(PARA_DATA* para, REAL** var, char* name); -/* - * Convert the data at 8 corners to the format for Tecplot - * - * FFD uses staggered grid and Tecplot data is for collocated grid. - * This subroutine transfers the data from FFD format to Tecplot format. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to variable to be converted - * - * @return no return - */ -void convert_to_tecplot_corners(PARA_DATA *para, REAL **var, REAL *psi); +/**************************************************************************** +| Convert the data to the format for Tecplot +| +| FFD uses staggered grid and Tecplot data is for collocated grid. +| This subroutine transfers the data from FFD format to Tecplot format. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return no return +****************************************************************************/ +void convert_to_tecplot(PARA_DATA* para, REAL** var); -/* - * Write the instantaneous value of variables in Tecplot format - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to the filename - * - * @return 0 if no error occurred - */ -int write_unsteady(PARA_DATA *para, REAL **var, char *name); +/**************************************************************************** +| Convert the data at 8 corners to the format for Tecplot +| +| FFD uses staggered grid and Tecplot data is for collocated grid. +| This subroutine transfers the data from FFD format to Tecplot format. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to variable to be converted +| +| \return no return +****************************************************************************/ +void convert_to_tecplot_corners(PARA_DATA* para, REAL** var, REAL* psi); -/* - * Write the data in a format for SCI program - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param name Pointer to the filename - * - * @return 0 if no error occurred - */ -int write_SCI(PARA_DATA *para, REAL **var, char *name); +/**************************************************************************** +| Write the instantaneous value of variables in Tecplot format +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to the filename +| +| \return 0 if no error occurred +****************************************************************************/ +int write_unsteady(PARA_DATA* para, REAL** var, char* name); + +/**************************************************************************** +| Write the data in a format for SCI program +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param name Pointer to the filename +| +| \return 0 if no error occurred +****************************************************************************/ +int write_SCI(PARA_DATA* para, REAL** var, char* name); + +int write_vtk_data(PARA_DATA* para, REAL** var, char* name); +int write_vtk_fluid(PARA_DATA* para, REAL** var, char* name); diff --git a/Buildings/Resources/src/FastFluidDynamics/diffusion.c b/Buildings/Resources/src/FastFluidDynamics/diffusion.c index 0dee4ff2424..33880b0b2ee 100644 --- a/Buildings/Resources/src/FastFluidDynamics/diffusion.c +++ b/Buildings/Resources/src/FastFluidDynamics/diffusion.c @@ -1,38 +1,41 @@ -/* - * - * \file diffusion.c - * - * \brief Calculate the diffusion equation - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - * This file provides functions that are used for calculating the diffusion - * equations. - * - */ +/**************************************************************************** +| +| \file diffusion.c +| +| \brief Calculate the diffusion equation +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +| This file provides functions that are used for calculating the diffusion +| equations. +| +****************************************************************************/ #include "diffusion.h" -/* - * Entrance of calculating diffusion equation - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Type of variable - * @param index Index of trace substance or species - * @param psi Pointer to the variable at current time step - * @param psi0 Pointer to the variable at previous time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Entrance of calculating diffusion equation +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Type of variable +| \param index Index of trace substance or species +| \param psi Pointer to the variable at current time step +| \param psi0 Pointer to the variable at previous time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int diffusion(PARA_DATA *para, REAL **var, int var_type, int index, REAL *psi, REAL *psi0, int **BINDEX) { int flag = 0; @@ -46,74 +49,32 @@ int diffusion(PARA_DATA *para, REAL **var, int var_type, int index, "diffusion equation.", FFD_ERROR); return flag; } - - /* Solve the equations*/ - if(equ_solver(para, var, var_type, psi)!=0) { + + /* Solve the equations */ + if(equ_solver(para, var, DIF, var_type, psi)!=0) { ffd_log("diffusion(): failed to solve the equation", FFD_ERROR); return 1; } - /* Define B.C.*/ + /* Define B.C. */ set_bnd(para, var, var_type, index, psi, BINDEX); - /* Check residual*/ - if(para->solv->check_residual==1) { - switch(var_type) { - case VX: - sprintf(msg, "diffusion(): Residual of VX is %f", - check_residual(para, var, psi)); - ffd_log(msg, FFD_NORMAL); - break; - case VY: - sprintf(msg, "diffusion(): Residual of VY is %f", - check_residual(para, var, psi)); - ffd_log(msg, FFD_NORMAL); - break; - case VZ: - sprintf(msg, "diffusion(): Residual of VZ is %f", - check_residual(para, var, psi)); - ffd_log(msg, FFD_NORMAL); - break; - case TEMP: - sprintf(msg, "diffusion(): Residual of T is %f", - check_residual(para, var, psi)); - ffd_log(msg, FFD_NORMAL); - break; - case Xi1: - case Xi2: - sprintf(msg, "diffusion(): Residual of Trace %d is %f", - index, check_residual(para, var, psi)); - ffd_log(msg, FFD_NORMAL); - break; - case C1: - case C2: - sprintf(msg, "diffusion(): Residual of Specie %d is %f", - index, check_residual(para, var, psi)); - ffd_log(msg, FFD_NORMAL); - default: - sprintf(msg, "diffusion(): No solver for variable type %d", - var_type); - ffd_log(msg, FFD_ERROR); - flag = 1; - } - } - return flag; -} /* End of diffusion( )*/ - - /* - * Calculate coefficients for diffusion equation solver - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable at current time step - * @param psi0 Pointer to the variable at previous time step - * @param var_type Type of variable - * @param index Index of trace substance or species - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +} /* End of diffusion( ) */ + +/**************************************************************************** +| Calculate coefficients for diffusion equation solver +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable at current time step +| \param psi0 Pointer to the variable at previous time step +| \param var_type Type of variable +| \param index Index of trace substance or species +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, int var_type, int index, int **BINDEX) { int i, j, k; @@ -131,9 +92,10 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, REAL Temp_Buoyancy = para->prob->Temp_Buoyancy; REAL gravx = para->prob->gravx, gravy = para->prob->gravy, gravz = para->prob->gravz; - REAL kapa; + REAL kapa, kapaE, kapaW, kapaN, kapaS, kapaF, kapaB; + REAL coef_CONSTANT = para->prob->coef_CONSTANT; - /* define kapa*/ + /* define kapa */ switch(var_type) { /*------------------------------------------------------------------------- | X-velocity @@ -142,7 +104,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, if(para->prob->tur_model==LAM) kapa = para->prob->nu; else if(para->prob->tur_model==CONSTANT) - kapa = (REAL) 101.0 * para->prob->nu; + kapa = (REAL) coef_CONSTANT * para->prob->nu; FOR_U_CELL dxe = gx[IX(i+1,j ,k)] - gx[IX(i ,j,k)]; @@ -156,7 +118,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, Dz = gz[IX(i,j,k)] - gz[IX(i,j,k-1)]; if(para->prob->tur_model==CHEN) - kapa = nu_t_chen_zero_equ(para, var, i, j, k); + kapa = nu_t_chen_zero_equ(para, var, i, j, k)+ para->prob->nu; aw[IX(i,j,k)] = kapa*Dy*Dz/dxw; ae[IX(i,j,k)] = kapa*Dy*Dz/dxe; @@ -169,6 +131,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, - beta*gravx*(Temp[IX(i,j,k)]-Temp_Buoyancy)*Dx*Dy*Dz + (pp[IX(i,j,k)]-pp[IX(i+1,j,k)])*Dy*Dz; END_FOR + set_bnd(para, var, var_type, index, psi, BINDEX); /*set_bnd(para, var, var_type, psi, BINDEX);*/ FOR_U_CELL @@ -176,6 +139,10 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, + an[IX(i,j,k)] + as[IX(i,j,k)] + af[IX(i,j,k)] + ab[IX(i,j,k)]; END_FOR + + + /* Add the source terms */ + source_diff(para, var, var_type, index); break; /*------------------------------------------------------------------------- | Y-velocity @@ -184,7 +151,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, if(para->prob->tur_model==LAM) kapa = para->prob->nu; else if(para->prob->tur_model==CONSTANT) - kapa = (REAL) 101.0 * para->prob->nu; + kapa = (REAL) coef_CONSTANT * para->prob->nu; FOR_V_CELL dxe = x[IX(i+1,j,k)] - x[IX(i,j,k)]; @@ -198,7 +165,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, Dz = gz[IX(i,j,k)] - gz[IX(i,j,k-1)]; if(para->prob->tur_model==CHEN) - kapa = nu_t_chen_zero_equ(para, var, i, j, k); + kapa = nu_t_chen_zero_equ(para, var, i, j, k) + para->prob->nu; aw[IX(i,j,k)] = kapa*Dy*Dz/dxw; ae[IX(i,j,k)] = kapa*Dy*Dz/dxe; @@ -211,6 +178,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, - beta*gravy*(Temp[IX(i,j,k)]-Temp_Buoyancy)*Dx*Dy*Dz + (pp[IX(i,j,k)]-pp[IX(i ,j+1,k)])*Dx*Dz; END_FOR + set_bnd(para, var, var_type, index, psi, BINDEX); /*set_bnd(para, var, var_type, psi,BINDEX);*/ FOR_V_CELL @@ -218,6 +186,9 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, + an[IX(i,j,k)] + as[IX(i,j,k)] + af[IX(i,j,k)] + ab[IX(i,j,k)]; END_FOR + + /* Add the source terms */ + source_diff(para, var, var_type, index); break; /*------------------------------------------------------------------------- | Z-velocity @@ -226,7 +197,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, if(para->prob->tur_model==LAM) kapa = para->prob->nu; else if(para->prob->tur_model==CONSTANT) - kapa = (REAL) 101.0 * para->prob->nu; + kapa = (REAL) coef_CONSTANT * para->prob->nu; FOR_W_CELL dxe = x[IX(i+1,j,k)] - x[IX(i,j,k)]; @@ -240,7 +211,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, Dz = z[IX(i,j,k+1)] - z[IX(i,j,k)]; if(para->prob->tur_model==CHEN) - kapa = nu_t_chen_zero_equ(para, var, i, j, k); + kapa = nu_t_chen_zero_equ(para, var, i, j, k) + para->prob->nu; aw[IX(i,j,k)] = kapa*Dy*Dz/dxw; ae[IX(i,j,k)] = kapa*Dy*Dz/dxe; @@ -253,6 +224,7 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, - beta*gravz*(Temp[IX(i,j,k)]-Temp_Buoyancy)*Dx*Dy*Dz + (pp[IX(i,j,k)]-pp[IX(i ,j,k+1)])*Dy*Dx; END_FOR + set_bnd(para, var, var_type, index, psi, BINDEX); /*set_bnd(para, var, var_type, psi, BINDEX);*/ @@ -261,6 +233,9 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, + an[IX(i,j,k)] + as[IX(i,j,k)] + af[IX(i,j,k)] + ab[IX(i,j,k)]; END_FOR + + /* Add the source terms */ + source_diff(para, var, var_type, index); break; /*------------------------------------------------------------------------- | Scalar Variable @@ -270,11 +245,13 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, case Xi2: case C1: case C2: - if(para->prob->tur_model == LAM) - kapa = para->prob->alpha; - else if(para->prob->tur_model == CONSTANT) - kapa = (REAL) 101.0 * para->prob->alpha; - + + if (para->prob->tur_model == LAM) + kapa = para->prob->alpha; + + if (para->prob->tur_model == CONSTANT) + kapa = (REAL)coef_CONSTANT * para->prob->alpha; + FOR_EACH_CELL dxe = x[IX(i+1,j,k)] - x[IX(i,j,k)]; dxw = x[IX(i,j,k)] - x[IX(i-1,j,k)]; @@ -285,29 +262,59 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, Dx = gx[IX(i,j,k)] - gx[IX(i-1,j,k)]; Dy = gy[IX(i,j,k)] - gy[IX(i,j-1,k)]; Dz = gz[IX(i,j,k)] - gz[IX(i,j,k-1)]; - - if(para->prob->tur_model==CHEN) - kapa = nu_t_chen_zero_equ(para, var, i, j, k); - - aw[IX(i,j,k)] = kapa*Dy*Dz/dxw; - ae[IX(i,j,k)] = kapa*Dy*Dz/dxe; - an[IX(i,j,k)] = kapa*Dx*Dz/dyn; - as[IX(i,j,k)] = kapa*Dx*Dz/dys; - af[IX(i,j,k)] = kapa*Dx*Dy/dzf; - ab[IX(i,j,k)] = kapa*Dx*Dy/dzb; + /************************important notes********************************* + | As the Chen's Zero Equation turbulence model is being using, the thermal + | diffusivity is not constant over the space any more. Acutally it has a + | non-uniform distribution over the space. Thus, when discretizing the equation + | it is crtical to averge the thermal diffusivity at two neibouring cells to + | calculate the value at the face. + | + | Failing to do this may result into the energy imbalance during the diffusion term. + | To put in other words, one may observe that the heat flux from the walls is not + | equal to the energy changing rate of the fluids. + | + | Author: Wei Tian, Wei.Tian@Schneider-Electric.com + | Date: 7/21/2017 + *******************************END**************************************/ + if (para->prob->tur_model == CHEN) { + kapa = nu_t_chen_zero_equ(para, var, i, j, k) + para->prob->nu; + kapaE = nu_t_chen_zero_equ(para, var, i + 1, j, k) + para->prob->nu; + kapaW = nu_t_chen_zero_equ(para, var, i - 1, j, k) + para->prob->nu; + kapaN = nu_t_chen_zero_equ(para, var, i, j + 1, k) + para->prob->nu; + kapaS = nu_t_chen_zero_equ(para, var, i, j - 1, k) + para->prob->nu; + kapaF = nu_t_chen_zero_equ(para, var, i, j, k + 1) + para->prob->nu; + kapaB = nu_t_chen_zero_equ(para, var, i, j, k - 1) + para->prob->nu; + aw[IX(i, j, k)] = 0.5*(kapa + kapaW)*Dy*Dz / dxw; + ae[IX(i, j, k)] = 0.5*(kapa + kapaE)*Dy*Dz / dxe; + an[IX(i, j, k)] = 0.5*(kapa + kapaN)*Dx*Dz / dyn; + as[IX(i, j, k)] = 0.5*(kapa + kapaS)*Dx*Dz / dys; + af[IX(i, j, k)] = 0.5*(kapa + kapaF)*Dx*Dy / dzf; + ab[IX(i, j, k)] = 0.5*(kapa + kapaB)*Dx*Dy / dzb; + } + else { + aw[IX(i, j, k)] = kapa*Dy*Dz / dxw; + ae[IX(i, j, k)] = kapa*Dy*Dz / dxe; + an[IX(i, j, k)] = kapa*Dx*Dz / dyn; + as[IX(i, j, k)] = kapa*Dx*Dz / dys; + af[IX(i, j, k)] = kapa*Dx*Dy / dzf; + ab[IX(i, j, k)] = kapa*Dx*Dy / dzb; + } + ap0[IX(i,j,k)] = Dx*Dy*Dz/dt; b[IX(i,j,k)] = psi0[IX(i,j,k)]*ap0[IX(i,j,k)]; END_FOR - /* Add the source terms*/ - source_diff(para, var, var_type, index); - /* Set boundary conditions*/ + /* Set boundary conditions */ set_bnd(para, var, var_type, index, psi, BINDEX); FOR_EACH_CELL ap[IX(i,j,k)] = ap0[IX(i,j,k)] + ae[IX(i,j,k)] + aw[IX(i,j,k)] + an[IX(i,j,k)] + as[IX(i,j,k)] + af[IX(i,j,k)] + ab[IX(i,j,k)]; END_FOR + + /* Add the source terms */ + source_diff(para, var, var_type, index); + break; default: sprintf(msg, "coe_diff(): No function for variable type %d", var_type); @@ -316,35 +323,39 @@ int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, } return 0; -}/* End of coef_diff( )*/ - -/* - * Calculate source term in the diffusion equation - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Type of variable - * @param index Index of trace substances or species - * - * @return 0 if no error occurred - */ +}/* End of coef_diff( ) */ + +/**************************************************************************** +| Calculate source term in the diffusion equation +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Type of variable +| \param index Index of trace substances or species +| +| \return 0 if no error occurred +****************************************************************************/ int source_diff(PARA_DATA *para, REAL **var, int var_type, int index) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); REAL *b = var[B]; + REAL *ap = var[AP]; FOR_EACH_CELL switch(var_type) { case VX: b[IX(i,j,k)] += var[VXS][IX(i,j,k)]; + ap[IX(i,j,k)] += var[APXS][IX(i,j,k)]; break; case VY: b[IX(i,j,k)] += var[VYS][IX(i,j,k)]; + ap[IX(i,j,k)] += var[APYS][IX(i,j,k)]; break; case VZ: b[IX(i,j,k)] += var[VZS][IX(i,j,k)]; + ap[IX(i,j,k)] += var[APZS][IX(i,j,k)]; break; case TEMP: b[IX(i,j,k)] += var[TEMPS][IX(i,j,k)]/(para->prob->rho*para->prob->Cp); @@ -361,4 +372,4 @@ int source_diff(PARA_DATA *para, REAL **var, int var_type, int index) { END_FOR return 0; -} /* End of source_diff()*/ +} /* End of source_diff() */ diff --git a/Buildings/Resources/src/FastFluidDynamics/diffusion.h b/Buildings/Resources/src/FastFluidDynamics/diffusion.h index 7203de525f8..610d4328c95 100644 --- a/Buildings/Resources/src/FastFluidDynamics/diffusion.h +++ b/Buildings/Resources/src/FastFluidDynamics/diffusion.h @@ -1,22 +1,25 @@ -/* - * - * @file diffusion.h - * - * @brief Calculate the diffusion equation - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - * This file provides functions that are used for calculating the diffusion - * equations. - * - */ +/**************************************************************************** +| +| \file diffusion.h +| +| \brief Calculate the diffusion equation +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +| This file provides functions that are used for calculating the diffusion +| equations. +| +****************************************************************************/ #ifndef _DIFFUSION_H_ #define _DIFFUSION_H_ #endif @@ -46,46 +49,48 @@ #include "chen_zero_equ_model.h" #endif -/* - * Entrance of calculating diffusion equation - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Type of variable - * @param index Index of trace substance or species - * @param psi Pointer to the variable at current time step - * @param psi0 Pointer to the variable at previous time step - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int diffusion(PARA_DATA *para, REAL **var, int var_type, int index, - REAL *psi, REAL *psi0, int **BINDEX); -/* - * Calculate coefficients for diffusion equation solver - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable at current time step - * @param psi0 Pointer to the variable at previous time step - * @param var_type Type of variable - * @param index Index of trace substance or species - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int coef_diff(PARA_DATA *para, REAL **var, REAL *psi, REAL *psi0, - int var_type, int index, int **BINDEX); +/**************************************************************************** +| Entrance of calculating diffusion equation +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Type of variable +| \param index Index of trace substance or species +| \param psi Pointer to the variable at current time step +| \param psi0 Pointer to the variable at previous time step +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int diffusion(PARA_DATA* para, REAL** var, int var_type, int index, + REAL* psi, REAL* psi0, int** BINDEX); + +/**************************************************************************** +| Calculate coefficients for diffusion equation solver +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable at current time step +| \param psi0 Pointer to the variable at previous time step +| \param var_type Type of variable +| \param index Index of trace substance or species +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int coef_diff(PARA_DATA* para, REAL** var, REAL* psi, REAL* psi0, + int var_type, int index, int** BINDEX); + +/**************************************************************************** +| Calculate source term in the diffusion equation +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Type of variable +| \param index Index of trace substances or species +| +| \return 0 if no error occurred +****************************************************************************/ +int source_diff(PARA_DATA* para, REAL** var, int var_type, int index); -/* - * Calculate source term in the diffusion equation - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Type of variable - * @param index Index of trace substances or species - * - * @return 0 if no error occurred - */ -int source_diff(PARA_DATA *para, REAL **var, int var_type, int index); diff --git a/Buildings/Resources/src/FastFluidDynamics/ffd.c b/Buildings/Resources/src/FastFluidDynamics/ffd.c index a893a378c98..cfe30033420 100644 --- a/Buildings/Resources/src/FastFluidDynamics/ffd.c +++ b/Buildings/Resources/src/FastFluidDynamics/ffd.c @@ -1,26 +1,32 @@ -/* - * - * \file ffd.c - * - * \brief Main routine of Fast Fluid Dynamics - * - * \author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file ffd.c +| +| \brief Main routine of Fast Fluid Dynamics +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #include "ffd.h" /* global variables */ -REAL **var; -int **BINDEX; -REAL *locmin,*locmax; +REAL** var; +int** BINDEX; +REAL* locmin, * locmax; static PARA_DATA para; static GEOM_DATA geom; static PROB_DATA prob; @@ -34,66 +40,74 @@ static INIT_DATA init; clock_t start, end; -/* - * Allcoate memory for variables - * - * @param para Pointer to FFD parameters - * - * @return No return needed - */ -int allocate_memory (PARA_DATA *para) { - - int nb_var, i; - int size = (geom.imax+2) * (geom.jmax+2) * (geom.kmax+2); - - /**************************************************************************** - | Allocate memory for variables - ****************************************************************************/ - nb_var = C2BC+1; - var = (REAL **) malloc ( nb_var*sizeof(REAL*) ); - if(var==NULL) { - ffd_log("allocate_memory(): Could not allocate memory for var.", - FFD_ERROR); - return 1; - } +/**************************************************************************** +| Allcoate memory for variables +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ +int allocate_memory(PARA_DATA* para) { - for(i=0; ipara->ffdError = 1; - return 1; - } - else - return 0; + if (ffd(1) != 0) { + cosim->para->ffdError = 1; + return 1; + } + else + return 0; } /* End of ffd_cosimulation()*/ - /* - * Main routine of FFD - * - * @para coupled simulation Integer to identify the simulation type - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Main routine of FFD +| +| \para coupled simulation Integer to identify the simulation type +| +| \return 0 if no error occurred +****************************************************************************/ int ffd(int cosimulation) { -/*#ifndef _MSC_VER //Linux*/ -/* //Initialize glut library*/ -/* char fakeParam[] = "fake";*/ -/* char *fakeargv[] = { fakeParam, NULL };*/ -/* int fakeargc = 1;*/ -/* glutInit( &fakeargc, fakeargv );*/ -/*#endif*/ - - /* Initialize the parameters*/ + /*#ifndef _MSC_VER /*Linux*/ + /*Initialize glut library*/ + /*char fakeParam[] = "fake"; + char *fakeargv[] = { fakeParam, NULL }; + int fakeargc = 1; + glutInit( &fakeargc, fakeargv ); + #endif*/ + + /* Initialize the parameters */ para.geom = &geom; para.inpu = &inpu; para.outp = &outp1; @@ -143,12 +157,14 @@ int ffd(int cosimulation) { /* Stand alone simulation: 0; Cosimulaiton: 1*/ para.solv->cosimulation = cosimulation; + ffd_log("Start running Fast Fluid Dynamics simulation", FFD_NEW); + if(initialize(¶)!=0) { ffd_log("ffd(): Could not initialize simulation parameters.", FFD_ERROR); return 1; } - /* Overwrite the mesh and simulation data using SCI generated file*/ + /* Overwrite the mesh and simulation data using SCI generated file */ if(para.inpu->parameter_file_format == SCI) { if(read_sci_max(¶, var)!=0) { ffd_log("ffd(): Could not read SCI data.", FFD_ERROR); @@ -156,92 +172,109 @@ int ffd(int cosimulation) { } } - /* Allocate memory for the variables*/ - if(allocate_memory(¶)!=0) { - ffd_log("ffd(): Could not allocate memory for the simulation.", FFD_ERROR); - return 1; + /* Allocate memory for the variables */ + if (allocate_memory(¶) != 0) { + ffd_log("ffd(): Could not allocate memory for the simulation.", FFD_ERROR); + return 1; } - /* Set the initial values for the simulation data*/ - if(set_initial_data(¶, var, BINDEX)) { - ffd_log("ffd(): Could not set initial data.", FFD_ERROR); - return 1; + /* Set the initial values for the simulation data */ + if (set_initial_data(¶, var, BINDEX)) { + ffd_log("ffd(): Could not set initial data.", FFD_ERROR); + return 1; } - /* Read previous simulation data as initial values*/ - if(para.inpu->read_old_ffd_file==1) read_ffd_data(¶, var); + /* Read previous simulation data as initial values */ + if (para.inpu->read_old_ffd_file == 1) read_ffd_data(¶, var); ffd_log("ffd.c: Start FFD solver.", FFD_NORMAL); /*write_tecplot_data(¶, var, "initial");*/ - /* Solve the problem*/ - /*if(para.outp->version==DEMO) {*/ - /* open_glut_window();*/ - /* glutMainLoop();*/ - /*}*/ - /*else*/ + /*para.mytime->t_start = clock();*/ + /*printf ("the time start simulation is %lf\n", para.mytime->t_start);*/ + + /* Launch FFD core */ if(FFD_solver(¶, var, BINDEX)!=0) { - ffd_log("ffd(): FFD solver failed.", FFD_ERROR); - return 1; + ffd_log("ffd(): FFD solver failed.", FFD_ERROR); + return 1; } /*--------------------------------------------------------------------------- | Post Process ---------------------------------------------------------------------------*/ - /* Calculate mean value*/ + /* Calculate mean value */ if(para.outp->cal_mean == 1) average_time(¶, var); - if(write_unsteady(¶, var, "unsteady")!=0) { +#ifdef FFD_ISAT + /* Write output data to ffdoutput[] */ + if (write_output_data(¶, var, BINDEX)) { + ffd_log("ffd(): Could not write output data to ISAT.", FFD_ERROR); + return 1; + } + ffd_log("ffd(): successfully write ouput data to ISAT.", FFD_NORMAL); +#endif + + /*if(write_unsteady(¶, var, "unsteady")!=0) { ffd_log("FFD_solver(): Could not write the file unsteady.plt.", FFD_ERROR); return 1; + }*/ + + if (para.solv->cosimulation != 1) { + if (para.outp->result_file == VTK) { + if (write_vtk_data(¶, var, "result") != 0) { + ffd_log("FFD_solver(): Could not write the result file.", FFD_ERROR); + return 1; + } + } + else if (para.outp->result_file == PLT) { + if (write_tecplot_data(¶, var, "result") != 0) { + ffd_log("FFD_solver(): Could not write the result file.", FFD_ERROR); + return 1; + } + } } + + /* Write the data in SCI format */ + /*write_SCI(¶, var, "output");*/ + - if(write_tecplot_data(¶, var, "result")!=0) { - ffd_log("FFD_solver(): Could not write the file result.plt.", FFD_ERROR); - return 1; - } - - if(para.outp->version == DEBUG) - write_tecplot_all_data(¶, var, "result_all"); - - /* Write the data in SCI format*/ - write_SCI(¶, var, "output"); - - /* Free the memory*/ + /* Free the memory */ free_data(var); free_index(BINDEX); /* Inform Modelica the stopping command has been received*/ - if(para.solv->cosimulation==1) { - para.cosim->para->flag = 2; - ffd_log("ffd(): Sent stopping signal to Modelica", FFD_NORMAL); +#ifndef FFD_ISAT + if (para.solv->cosimulation == 1) { + para.cosim->para->flag = 2; + ffd_log("ffd(): Sent stopping signal to Modelica", FFD_NORMAL); } +#endif return 0; -} /* End of ffd( )*/ +} /* End of ffd( ) */ - /* +/* * Write error message to Modelica * * @para msg Pointer to message to be written. * * @return no return */ -void modelicaError(char *msg) { +void modelicaError(char* msg) { /*Allocate memory for cosim->ffd->msg*/ - para.cosim->ffd->msg = (char *) malloc(400*sizeof(char)); - if (para.cosim->ffd->msg == NULL){ + para.cosim->ffd->msg = (char*)malloc(400 * sizeof(char)); + if (para.cosim->ffd->msg == NULL) { ffd_log("ffd(): Failed to allocate memory for cosim->ffd->msg", FFD_ERROR); - } - - strcpy(para.cosim->ffd->msg, msg); - /* Write the command to stop the cosimulation*/ - para.cosim->para->flag = 2; - /* Indicate there is an error*/ - para.cosim->para->ffdError = 1; - - /*Free memory for cosim->ffd->msg*/ + } + + strcpy(para.cosim->ffd->msg, msg); + /* Write the command to stop the cosimulation*/ + para.cosim->para->flag = 2; + /* Indicate there is an error*/ + para.cosim->para->ffdError = 1; + + /*Free memory for cosim->ffd->msg*/ free(para.cosim->ffd->msg); - -} /* End of modelicaError*/ + +} /* End of modelicaError*/ \ No newline at end of file diff --git a/Buildings/Resources/src/FastFluidDynamics/ffd.h b/Buildings/Resources/src/FastFluidDynamics/ffd.h index 35a9656b6fb..cd3cb4b5089 100644 --- a/Buildings/Resources/src/FastFluidDynamics/ffd.h +++ b/Buildings/Resources/src/FastFluidDynamics/ffd.h @@ -1,19 +1,25 @@ -/* - * - * @file ffd.h - * - * @brief Main routine of Fast Fluid Dynamics - * - * @author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file ffd.h +| +| \brief Main routine of Fast Fluid Dynamics +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #ifndef _FFD_H #define _FFD_H #endif @@ -23,10 +29,12 @@ #include "data_structure.h" #endif +#ifndef FFD_ISAT #ifndef _FFD_DLL_H #define FFD_DLL_H #include "ffd_dll.h" #endif +#endif #ifndef _TIMING_H #define _TIMING_H @@ -54,37 +62,39 @@ #endif /* - * Assign the parameter for coupled simulation - * - * @para cosim Pointer to the coupled simulation parameters - * - * @return 0 if no error occurred - */ -int ffd_cosimulation(CosimulationData *cosim); +* Assign the parameter for coupled simulation +* +* @para cosim Pointer to the coupled simulation parameters +* +* @return 0 if no error occurred +*/ +int ffd_cosimulation(CosimulationData * cosim); -/* - * Main routine of FFD - * - * @para coupled simulation Integer to identify the simulation type - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Main routine of FFD +| +| \para coupled simulation Integer to identify the simulation type +| +| \return 0 if no error occurred +****************************************************************************/ int ffd(int cosimulation); -/* - * Allocate memory for variables - * - * @param para Pointer to FFD parameters - * - * @return No return needed - */ -int allocate_memory (PARA_DATA *para); +/**************************************************************************** +| Allocate memory for variables +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ +int allocate_memory(PARA_DATA* para); -/* - * Write error message to Modelica - * - * @para msg Pointer to message to be written. - * - * @return no return - */ +/**************************************************************************** +| Write error message to Modelica +| +| \para msg Pointer to message to be written. +| +| \return no return +****************************************************************************/ void modelicaError(char *msg); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.c b/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.c index 6062759dd13..150d975d51a 100644 --- a/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.c +++ b/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.c @@ -1,30 +1,33 @@ -/* - * - * \file ffd_data_reader.c - * - * \brief Read the previous FFD result file (Tecplot format) - * - * \author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file ffd_data_reader.c +| +| \brief Read the previous FFD result file (Tecplot format) +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #include "ffd_data_reader.h" -/* - * Read the previous FFD simulation data in a format of standard output - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Read the previous FFD simulation data in a format of standard output +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ int read_ffd_data(PARA_DATA *para, REAL **var) { int i,j, k; int imax = para->geom->imax; @@ -52,4 +55,5 @@ int read_ffd_data(PARA_DATA *para, REAL **var) { para->inpu->old_ffd_file_name); ffd_log(msg, FFD_NORMAL); return 0; -} /* End of read_ffd_data()*/ +} /* End of read_ffd_data() */ + diff --git a/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.h b/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.h index 2fdd1e6a57a..f43e0213c50 100644 --- a/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.h +++ b/Buildings/Resources/src/FastFluidDynamics/ffd_data_reader.h @@ -1,19 +1,22 @@ -/* - * - * @file ffd_data_reader.h - * - * @brief Read the previous FFD result file (Tecplot format) - * - * @author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file ffd_data_reader.h +| +| \brief Read the previous FFD result file (Tecplot format) +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #ifndef _FFD_DATA_READER_H #define _FFD_DATA_READER_H @@ -26,14 +29,16 @@ #include "utility.h" -FILE *file_old_ffd; +FILE* file_old_ffd; -/* - * Read the previous FFD simulation data in a format of standard output - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Read the previous FFD simulation data in a format of standard output +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ int read_ffd_data(PARA_DATA *para, REAL **var); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/geometry.c b/Buildings/Resources/src/FastFluidDynamics/geometry.c index 123222aeee8..34dddf9d283 100644 --- a/Buildings/Resources/src/FastFluidDynamics/geometry.c +++ b/Buildings/Resources/src/FastFluidDynamics/geometry.c @@ -1,27 +1,30 @@ -/* - * - * \file geometry.c - * - * \brief Calculate the geometry related information - * - * \author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file geometry.c +| +| \brief Calculate the geometry related information +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #include "geometry.h" -/* - * Calculate total fluid volume in the space - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return Volume weighted average - */ +/**************************************************************************** +| Calculate total fluid volume in the space +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return Volume weighted average +****************************************************************************/ REAL fluid_volume(PARA_DATA *para, REAL **var) { int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; @@ -38,87 +41,85 @@ REAL fluid_volume(PARA_DATA *para, REAL **var) { END_FOR return V; -}/* End of fluid_volume( )*/ +}/* End of fluid_volume( ) */ -/* - * Calculate the volume of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * - * @return Volume - */ +/**************************************************************************** +| Calculate the volume of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Volume +****************************************************************************/ REAL vol(PARA_DATA *para, REAL **var, int i, int j, int k) { return area_xy(para, var, i, j, k) * length_z(para, var, i, j, k); -} /* End of vol()*/ +} /* End of vol() */ - /* - * Calculate the XY area of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * - * @return Area of XY surface - */ +/**************************************************************************** +| Calculate the XY area of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Area of XY surface +****************************************************************************/ REAL area_xy(PARA_DATA *para, REAL **var, int i, int j, int k) { return length_x(para, var, i, j, k) * length_y(para, var, i, j, k); -} /* End of area_xy()*/ +} /* End of area_xy() */ - /* - * Calculate the YZ area of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * - * @return Area of YZ surface - */ +/**************************************************************************** +| Calculate the YZ area of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Area of YZ surface +****************************************************************************/ REAL area_yz(PARA_DATA *para, REAL **var, int i, int j, int k) { return length_y(para, var, i, j, k) * length_z(para, var, i, j, k); -} /* End of area_yz();*/ +} /* End of area_yz(); */ - /* - * Calculate the ZX area of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * - * @return Area of ZX surface - */ +/**************************************************************************** +| Calculate the ZX area of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Area of ZX surface +****************************************************************************/ REAL area_zx(PARA_DATA *para, REAL **var, int i, int j, int k) { return length_z(para, var, i, j, k) * length_x(para, var, i, j, k); -} /* End of area_zx()*/ +} /* End of area_zx() */ - /* - * Calculate the X-length of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * @param IMAX Value of imax+2 - * @param IMAX Value of (imax+2)*(jmax+2) - * - * @return Length in X-direction - */ +/**************************************************************************** +| Calculate the X-length of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Length in X-direction +****************************************************************************/ REAL length_x(PARA_DATA *para, REAL **var, int i, int j, int k) { int imax = para->geom->imax, jmax = para->geom->jmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); @@ -127,19 +128,19 @@ REAL length_x(PARA_DATA *para, REAL **var, int i, int j, int k) { return 0; else return (REAL) fabs(var[GX][IX(i,j,k)]-var[GX][IX(i-1,j,k)]); -} /* End of length_x()*/ +} /* End of length_x() */ - /* - * Calculate the Y-length of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * - * @return Length in Y-direction - */ +/**************************************************************************** +| Calculate the Y-length of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Length in Y-direction +****************************************************************************/ REAL length_y(PARA_DATA *para, REAL **var, int i, int j, int k) { int imax = para->geom->imax, jmax = para->geom->jmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); @@ -148,19 +149,19 @@ REAL length_y(PARA_DATA *para, REAL **var, int i, int j, int k) { return 0; else return (REAL) fabs(var[GY][IX(i,j,k)]-var[GY][IX(i,j-1,k)]); -} /* End of length_y()*/ +} /* End of length_y() */ - /* - * Calculate the Z-length of control volume (i,j,k) - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param i I-index of the control volume - * @param j J-index of the control volume - * @param K K-index of the control volume - * - * @return Length in Z-direction - */ +/**************************************************************************** +| Calculate the Z-length of control volume (i,j,k) +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param i I-index of the control volume +| \param j J-index of the control volume +| \param K K-index of the control volume +| +| \return Length in Z-direction +****************************************************************************/ REAL length_z(PARA_DATA *para, REAL **var, int i, int j, int k) { int imax = para->geom->imax, jmax = para->geom->jmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); @@ -169,17 +170,18 @@ REAL length_z(PARA_DATA *para, REAL **var, int i, int j, int k) { return 0; else return (REAL) fabs(var[GZ][IX(i,j,k)]-var[GZ][IX(i,j,k-1)]); -} /* End of length_z()*/ +} /* End of length_z() */ - /* - * Calculate the area of boundary surface - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Calculate the area of boundary surface +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \param A Pointer to the array of area +| +| \return 0 if no error occurred +****************************************************************************/ int bounary_area(PARA_DATA *para, REAL **var, int **BINDEX) { int i, j, k, it, id; @@ -202,7 +204,7 @@ int bounary_area(PARA_DATA *para, REAL **var, int **BINDEX) { i = BINDEX[0][it]; j = BINDEX[1][it]; k = BINDEX[2][it]; - id = BINDEX[4][it]; + id = BINDEX[4][it] - para->bc->nb_block; /* if(id!=id0) { @@ -212,52 +214,52 @@ int bounary_area(PARA_DATA *para, REAL **var, int **BINDEX) { id0 = id; } */ - /*-------------------------------------------------------------------------*/ - /* Calculate wall or windows*/ - /*-------------------------------------------------------------------------*/ - if(flagp[IX(i,j,k)]==SOLID) { - /* West or East Boundary*/ + /*------------------------------------------------------------------------- + | Calculate wall or windows + --------------------------------------------------------------------------*/ + if(flagp[IX(i,j,k)]==SOLID && id >= 0) { + /* West or East Boundary */ if(i==0 || i==imax+1) { tmp = area_yz(para, var, i, j, k); - /*sprintf(msg, "Cell(%d,%d,%d):\t %f", i, j, k, tmp);*/ + /*sprintf(msg, "Cell(%d,%d,%d):%d,\t %f", i, j, k, id,tmp);*/ /*ffd_log(msg, FFD_NORMAL);*/ AWall[id] += tmp; } - /* South and Norht Boundary*/ + /* South and North Boundary */ if(j==0 || j==jmax+1) { tmp = area_zx(para, var, i, j, k); /*sprintf(msg, "Cell(%d,%d,%d):\t %f", i, j, k, tmp);*/ /*ffd_log(msg, FFD_NORMAL);*/ AWall[id] += tmp; } - /* Ceiling and Floor Boundary*/ + /* Ceiling and Floor Boundary */ if(k==0 || k==kmax+1) { tmp = area_xy(para, var, i, j, k); /*sprintf(msg, "Cell(%d,%d,%d):\t %f", i, j, k, tmp);*/ /*ffd_log(msg, FFD_NORMAL);*/ AWall[id] += tmp; } - } /* End of Wall boudary*/ + } /* End of Wall boudary */ - /*-------------------------------------------------------------------------*/ - /* Calculate inlets and outlets*/ - /*-------------------------------------------------------------------------*/ - if(flagp[IX(i,j,k)]==INLET||flagp[IX(i,j,k)]==OUTLET) { - /* West or East Boundary*/ + /*------------------------------------------------------------------------- + | Calculate inlets and outlets + -------------------------------------------------------------------------*/ + if(flagp[IX(i,j,k)]==INLET||flagp[IX(i,j,k)]==OUTLET || flagp[IX(i, j, k)] == TILE) { + /* West or East Boundary */ if(i==0 || i==imax+1) { tmp = area_yz(para, var, i, j, k); /*sprintf(msg, "Cell(%d,%d,%d):\t %f", i, j, k, tmp);*/ /*ffd_log(msg, FFD_NORMAL);*/ APort[id] += tmp; } - /* South and North Boundary*/ + /* South and North Boundary */ if(j==0 || j==jmax+1) { tmp = area_zx(para, var, i, j, k); /*sprintf(msg, "Cell(%d,%d,%d):\t %f", i, j, k, tmp);*/ /*ffd_log(msg, FFD_NORMAL);*/ APort[id] += tmp; } - /* Ceiling and Floor Boundary*/ + /* Ceiling and Floor Boundary */ if(k==0 || k==kmax+1) { tmp = area_xy(para, var, i, j, k); /*sprintf(msg, "Cell(%d,%d,%d):\t %f", i, j, k, tmp);*/ @@ -265,7 +267,7 @@ int bounary_area(PARA_DATA *para, REAL **var, int **BINDEX) { APort[id] += tmp; } } - } /* End of for(it=0; itgeom->index, imax = para->geom->imax, + jmax = para->geom->jmax, kmax = para->geom->kmax; + int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); + REAL axy, ayz, azx; + + /* Initialize the area */ + for (i=0; ibc->nb_rack; i++){ + para->bc->RackArea[i] = 0.0; + } + + /* Loop all the boundary cells */ + for(it=0; itbc->RackDir[id] == 1 || para->bc->RackDir[id] == -1) { + para->bc->RackArea[id] += ayz; + } + else if (para->bc->RackDir[id] == 2 || para->bc->RackDir[id] == -2) { + para->bc->RackArea[id] += azx; + } + else if (para->bc->RackDir[id] == 3 || para->bc->RackDir[id] == -3) { + para->bc->RackArea[id] += axy; + } + else{ + ffd_log("rack_fluid_area(): fail to detect the flow direction of the rack", FFD_ERROR); + return 1; + } + } /*end of if (obj_type == RACK && flagp[IX(i,j,k)]==RACK_INLET)*/ + } /*end of for(it=0; itoutp->version==DEMO) { - printf("\n\nHow to use this demo:\n\n" ); - printf("\t Switch Windows: \n"); - printf("\t\tVelocity: key '1'\n"); - printf("\t\tContaminant: key '2'\n"); - printf("\t\tTemperature: key '3'\n"); - printf("\t Add densities with the right mouse button\n"); - printf("\t Add velocities with the left mouse button\n"); - printf("\t Increase the inlet velocity with 'F' or 'f' key\n"); - printf("\t Decrease the inlet velocity with 'S' or 's' key\n"); - printf("\t Increase the BC temperature with 'H' or 'h' key\n"); - printf("\t Decrease the BC temperature with 'C' or 'c' key\n" ); - printf("\t Clear the simulation by pressing the '0' key\n" ); - printf("\t Quit by pressing the 'q' key\n" ); - } - - return 0; -} /* End of initialize( )*/ - +/**************************************************************************** +| Initialize the parameters +| +| \param para Pointer to FFD parameters +| +| \return 0 if no error occurred +****************************************************************************/ +int initialize(PARA_DATA* para) { + /* Define the default value for parameter */ + set_default_parameter(para); + + /* Overwrite the default values using user defined values */ + if (read_parameter(para)) { + ffd_log("initialize(): Failed to read paramter file.", FFD_ERROR); + return 1; + } + + /*--------------------------------------------------------------------------- + | Output the help information + ---------------------------------------------------------------------------*/ + if (para->outp->version == DEMO) { + printf("\n\nHow to use this demo:\n\n"); + printf("\t Switch Windows: \n"); + printf("\t\tVelocity: key '1'\n"); + printf("\t\tContaminant: key '2'\n"); + printf("\t\tTemperature: key '3'\n"); + printf("\t Choose plane: \n"); + printf("\t\tXY plane: key 'Z' or 'z'\n"); + printf("\t\tXZ plane: key 'Y' or 'y'\n"); + printf("\t\tYZ plane: key 'X' or 'x'\n"); + printf("\t Move the plane forward with '+' key\n"); + printf("\t Move the plane backward with '-' key\n"); + printf("\t Add densities with the right mouse button\n"); + printf("\t Add velocities with the left mouse button\n"); + printf("\t Increase the velocity scale with 'K' or 'k' key\n"); + printf("\t Decrease the velocity scale with 'L' or 'l' key\n"); + printf("\t Calcualte mean value with 'M' or 'm' key\n"); + printf("\t Generate result file with 'S' or 's' key\n"); + /*printf("\t Increase the BC temperature with 'H' or 'h' key\n");*/ + /*printf("\t Decrease the BC temperature with 'C' or 'c' key\n" );*/ + printf("\t Clear the simulation by pressing the '0' key\n"); + printf("\t Quit by pressing the 'q' key\n"); + } + + return 0; +} /* End of initialize( ) */ + +/**************************************************************************** +| Set the default value for parameters +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ +void set_default_parameter(PARA_DATA* para) { + para->mytime->t = 0.0; + para->mytime->step_current = 0; + para->mytime->t_start = clock(); + + para->prob->alpha = (REAL)2.376e-5; /* Thermal diffusity */ + para->prob->diff = 0.00001; + para->prob->force = 1.0; + para->prob->heat = 1.0; + para->prob->source = 100.0; + + para->prob->chen_a = (REAL)0.03874; /* Coeffcient of Chen's model */ + para->prob->Prt = (REAL)0.9; /* Turbulent Prandl number */ + para->prob->rho = (REAL)1.0; + para->prob->tur_model = LAM; /* No turbulence model */ + + para->solv->check_residual = 0; /* Donot check residual */ + para->solv->solver = GS; /* Gauss-Seidel Solver */ + para->solv->interpolation = BILINEAR; /* Bilinear interpolation */ + + /* Default values for Input */ + para->inpu->read_old_ffd_file = 0; /* Do not read the old FFD data as initial value */ + + /* Default values for Output */ + para->outp->Temp_ref = 0;/*35.5f;*/ /*10.25f;*/ + para->outp->cal_mean = 0; + para->outp->v_length = 1; + para->outp->winx = 600; + para->outp->winy = 600; + para->outp->winz = 600; + para->outp->v_ref = 1.0; + para->outp->version = DEBUG; /* Running the debug version */ + para->outp->i_N = 1; + para->outp->j_N = 1; + para->outp->k_N = 1; + para->outp->tstep_display = 10; /* Update the display for every 10 time steps */ + para->outp->screen = 1; /* Draw velocity */ + para->outp->mouse_i = 0; + para->outp->mouse_j = 0; + para->outp->mouse_k = 0; + para->geom->plane = ZX; /* Draw ZX plane */ + para->bc->nb_port = 0; + para->bc->nb_Xi = 0; + para->bc->nb_C = 0; + para->sens->nb_sensor = 0; /* Number of sensors */ + para->solv->swipe_adv = 5; /* 5 swipes for advection */ + para->solv->swipe_dif = 5; /* 5 swipes for diffusion */ + para->solv->swipe_pro = 10; /* 10 swipes for projection */ + para->solv->solver = GS; /* use gauss seidels solver as default */ + para->solv->check_conservation = 1; /* check the scalar conervation stepwise */ + para->prob->Tem_Ave_LastTime = 0.0; + para->prob->Energy_Imb_Adv = 0.0; + para->prob->coef_CONSTANT = 100.0; + para->prob->coef_stanchion = 0.0; + para->solv->mass_conservation_on = 1; /* always turn on mass balance */ + para->geom->tile_putX = 0; /* by default the tile is NOT put in X direction */ + para->geom->tile_putY = 0; /* by default the tile is NOT put in Y direction */ + para->geom->tile_putZ = 1; /* by default the tile is put in Z direction */ + para->bc->nb_rack = 0; /* assume no racks */ + para->bc->outlet_bc = ZERO_GRADIENT; /*PRESCRIBED_VALUE;*/ /* assume Neumann BC for outlet */ + para->outp->result_file = PLT; /* set the result file in tecplot format */ + + /**************************************************************************** + | Determine if using a pressure correction or forced mass conservation + ****************************************************************************/ + /*para->solv->tile_flow_correct = PRESSURE_BASE;*/ + /*if (para->solv->tile_flow_correct == PRESSURE_BASE) para->solv->mass_conservation_on = 0;*/ +} /* End of set_default_parameter */ + +/**************************************************************************** +| Set default initial values for simulation variables +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_initial_data(PARA_DATA* para, REAL** var, int** BINDEX) { + int i, j; + int size = (para->geom->imax + 2) * (para->geom->jmax + 2) * (para->geom->kmax + 2); + int flag = 0; + + para->mytime->t = 0.0; + para->mytime->step_current = 0; + para->outp->cal_mean = 0; + + /**************************************************************************** + | Set inital value for FFD variables + ****************************************************************************/ + for (i = 0; i < size; i++) { + var[GX][i] = 0.0; + var[GY][i] = 0.0; + var[GZ][i] = 0.0; + var[VX][i] = para->init->u; + var[VY][i] = para->init->v; + var[VZ][i] = para->init->w; + var[VXM][i] = 0.0; + var[VYM][i] = 0.0; + var[VZM][i] = 0.0; + var[VXS][i] = 0.0; + var[VYS][i] = 0.0; + var[VZS][i] = 0.0; + var[TEMP][i] = para->init->T; + var[TEMPM][i] = 0.0; + var[TEMPS][i] = 0.0; /* Source of temperature */ + var[IP][i] = 0.0; + var[AP][i] = 0.0; + var[AW][i] = 0.0; + var[AE][i] = 0.0; + var[AS][i] = 0.0; + var[AN][i] = 0.0; + var[AB][i] = 0.0; + var[AF][i] = 0.0; + var[B][i] = 0.0; + var[AP0][i] = 0.0; + var[TMP1][i] = 1000.0; + var[TMP2][i] = 0.0; + var[TMP3][i] = 0.0; + var[TMP4][i] = 0.0; + var[PP][i] = 0.0; + var[FLAGP][i] = -1.0; + var[FLAGU][i] = -1.0; + var[FLAGV][i] = -1.0; + var[FLAGW][i] = -1.0; + var[VXBC][i] = 0.0; + var[VYBC][i] = 0.0; + var[VZBC][i] = 0.0; + var[TEMPBC][i] = 0.0; + var[QFLUXBC][i] = 0.0; + var[QFLUX][i] = 0.0; + var[Xi1][i] = 0.0; + var[Xi2][i] = 0.0; + var[Xi1S][i] = 0.0; + var[Xi2S][i] = 0.0; + var[Xi1BC][i] = 0.0; + var[Xi2BC][i] = 0.0; + var[C1][i] = 0.0; + var[C2][i] = 0.0; + var[C1S][i] = 0.0; + var[C2S][i] = 0.0; + var[C1BC][i] = 0.0; + var[C2BC][i] = 0.0; + var[MIN_DISTANCE][i] = 0.0; + var[TILE_OPEN_BC][i] = 1.0; + var[TILE_RESI_BC][i] = 0.0; + var[TILE_FLOW_BC][i] = 0.0; + var[PBC][i] = 0.0; + var[IPS][i] = 0.0; + var[APXS][i] = 0.0; + var[APYS][i] = 0.0; + var[APZS][i] = 0.0; + var[RESX][i] = 0.0; + var[RESY][i] = 0.0; + var[RESZ][i] = 0.0; + } + + /* Calculate the thermal diffusivity */ + para->prob->alpha = para->prob->cond / (para->prob->rho * para->prob->Cp); + + /**************************************************************************** + | Read the configurations defined by SCI + ****************************************************************************/ + if (para->inpu->parameter_file_format == SCI) { + /* check number of racks */ + flag = check_num_racks(para, var, BINDEX); + /* read the sci input file line by line */ + flag = read_sci_input(para, var, BINDEX); + if (flag != 0) { + sprintf(msg, "set_inital_data(): Could not read file %s", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_ERROR); + return flag; + } + flag = read_sci_zeroone(para, var, BINDEX); + if (flag != 0) { + ffd_log("set_inital_data(): Could not read block information file", + FFD_ERROR); + return flag; + } + + /* mark the cells */ + mark_cell(para, var, BINDEX); + } + + /**************************************************************************** + | Allocate memory for sensor data if there is at least one sensor + ****************************************************************************/ + if (para->sens->nb_sensor > 0) { + para->sens->senVal = (REAL*)malloc(para->sens->nb_sensor * sizeof(REAL)); + if (para->sens->senVal == NULL) { + ffd_log("set_initial_data(): Could not allocate memory for " + "para->sens->senVal", FFD_ERROR); + return -1; + } + para->sens->senValMean = (REAL*)malloc(para->sens->nb_sensor * sizeof(REAL)); + if (para->sens->senValMean == NULL) { + ffd_log("set_initial_data(): Could not allocate memory for " + "para->sens->senValMean", FFD_ERROR); + return 1; + } + } + + /**************************************************************************** + | Allocate memory for Species + ****************************************************************************/ + if (para->bc->nb_port > 0 && para->bc->nb_Xi > 0) { + para->bc->XiPort = (REAL * *)malloc(sizeof(REAL*) * para->bc->nb_port); + para->bc->XiPortAve = (REAL * *)malloc(sizeof(REAL*) * para->bc->nb_port); + para->bc->XiPortMean = (REAL * *)malloc(sizeof(REAL*) * para->bc->nb_port); + if (para->bc->XiPort == NULL || + para->bc->XiPortAve == NULL || + para->bc->XiPortMean == NULL) { + ffd_log("set_initial_data(): Could not allocate memory for XiPort.", + FFD_ERROR); + return 1; + } + + for (i = 0; i < para->bc->nb_port; i++) { + para->bc->XiPort[i] = (REAL*)malloc(sizeof(REAL) * para->bc->nb_Xi); + para->bc->XiPortAve[i] = (REAL*)malloc(sizeof(REAL) * para->bc->nb_Xi); + para->bc->XiPortMean[i] = (REAL*)malloc(sizeof(REAL) * para->bc->nb_Xi); + if (para->bc->XiPort[i] == NULL || + para->bc->XiPortAve[i] == NULL || + para->bc->XiPortMean[i] == NULL) { + sprintf(msg, "set_initial_data(): Could not allocate memory for " + "Xi at Port[%d].", i); + ffd_log(msg, FFD_ERROR); + return 1; + } + + for (j = 0; j < para->bc->nb_Xi; j++) { + para->bc->XiPort[i][j] = 0.0; + para->bc->XiPortAve[i][j] = 0.0; + para->bc->XiPortMean[i][j] = 0.0; + } + } + if (para->outp->version == DEBUG) { + ffd_log("Allocated memory for Xi", FFD_NORMAL); + } + } + else if (para->outp->version == DEBUG) { + ffd_log("No Xi in the simulation", FFD_NORMAL); + } + + /**************************************************************************** + | Allocate memory for Substances + ****************************************************************************/ + if (para->bc->nb_port > 0 && para->bc->nb_C > 0) { + para->bc->CPort = (REAL * *)malloc(sizeof(REAL*) * para->bc->nb_port); + para->bc->CPortAve = (REAL * *)malloc(sizeof(REAL*) * para->bc->nb_port); + para->bc->CPortMean = (REAL * *)malloc(sizeof(REAL*) * para->bc->nb_port); + if (para->bc->CPort == NULL || para->bc->CPortAve == NULL + || para->bc->CPortMean) { + ffd_log("set_initial_data(): Could not allocate memory for CPort.", + FFD_ERROR); + return 1; + } + + for (i = 0; i < para->bc->nb_port; i++) { + para->bc->CPort[i] = (REAL*)malloc(sizeof(REAL) * para->bc->nb_C); + para->bc->CPortAve[i] = (REAL*)malloc(sizeof(REAL) * para->bc->nb_C); + para->bc->CPortMean[i] = (REAL*)malloc(sizeof(REAL) * para->bc->nb_C); + if (para->bc->CPort[i] == NULL || para->bc->CPortAve[i] == NULL + || para->bc->CPortMean[i]) { + ffd_log("set_initial_data(): " + "Could not allocate memory for C at Port[i].", + FFD_ERROR); + return 1; + } + + for (j = 0; j < para->bc->nb_C; j++) { + para->bc->CPort[i][j] = 0.0; + para->bc->CPortAve[i][j] = 0.0; + para->bc->CPortMean[i][j] = 0.0; + } + } + if (para->outp->version == DEBUG) { + ffd_log("Allocated memory for C", FFD_NORMAL); + } + } + else if (para->outp->version == DEBUG) { + ffd_log("No C in the simulation", FFD_NORMAL); + } + + /**************************************************************************** + | Pre-calculate data needed but not change in the simulation + ****************************************************************************/ + para->geom->volFlu = fluid_volume(para, var); + para->geom->pindex = (int)para->geom->jmax / 2; + /* calculate the minimal distance of a fluid cell to solid boudaries */ + /* this information is to be used for chen's zero equation model */ /* - * Set the default value for parameters - * - * @param para Pointer to FFD parameters - * - * @return No return needed - */ -void set_default_parameter(PARA_DATA *para) { - para->mytime->t = 0.0; - para->mytime->step_current = 0; - para->mytime->t_start = clock(); - - para->prob->alpha = (REAL) 2.376e-5; /* Thermal diffusity*/ - para->prob->diff = 0.00001; - para->prob->force = 1.0; - para->prob->heat = 1.0; - para->prob->source = 100.0; - - para->prob->chen_a = (REAL) 0.03874; /* Coeffcient of Chen's model*/ - para->prob->Prt = (REAL) 0.9; /* Turbulent Prandl number*/ - para->prob->rho = (REAL) 1.0; /**/ - para->prob->tur_model = LAM; /* No turbulence model*/ - - para->solv->check_residual = 0; - para->solv->solver = GS; /* Gauss-Seidel Solver*/ - para->solv->interpolation = BILINEAR; /* Bilinear interpolation*/ - - /* Default values for Input*/ - para->inpu->read_old_ffd_file = 0; /* Do not read the old FFD data as initial value*/ - - /* Default values for Output*/ - para->outp->Temp_ref = 0;/*35.5f;//10.25f;*/ - para->outp->cal_mean = 0; - para->outp->v_length = 1; - para->outp->winx = 600; - para->outp->winy = 600; - para->outp->winz = 600; - para->outp->v_ref = 1.0; - para->outp->version = DEBUG; /* Running the debug version*/ - para->outp->i_N = 1; - para->outp->j_N = 1; - para->outp->k_N = 1; - para->outp->tstep_display = 10; /* Update the display for every 10 time steps*/ - para->outp->screen = 1; /* Draw velocity*/ - para->geom->plane = ZX; /* Draw ZX plane*/ - para->bc->nb_port = 0; - para->bc->nb_Xi = 0; - para->bc->nb_C = 0; - para->sens->nb_sensor = 0; /* Number of sensors*/ -} /* End of set_default_parameter*/ - - /* - * Set default initial values for simulation variables - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_initial_data(PARA_DATA *para, REAL **var, int **BINDEX) { - int i, j; - int size = (para->geom->imax+2)*(para->geom->jmax+2)*(para->geom->kmax+2); - int flag = 0; - - para->mytime->t = 0.0; - para->mytime->step_current = 0; - para->outp->cal_mean = 0; - - /**************************************************************************** - | Set initial value for FFD variables - ****************************************************************************/ - for(i=0; iinit->u; - var[VY][i] = para->init->v; - var[VZ][i] = para->init->w; - var[VXM][i] = 0.0; - var[VYM][i] = 0.0; - var[VZM][i] = 0.0; - var[VXS][i] = 0.0; - var[VYS][i] = 0.0; - var[VZS][i] = 0.0; - var[TEMP][i] = para->init->T; - var[TEMPM][i] = 0.0; - var[TEMPS][i] = 0.0; /* Source of temperature*/ - var[IP][i] = 0.0; - var[AP][i] = 0.0; - var[AW][i] = 0.0; - var[AE][i] = 0.0; - var[AS][i] = 0.0; - var[AN][i] = 0.0; - var[AB][i] = 0.0; - var[AF][i] = 0.0; - var[B][i] = 0.0; - var[AP0][i] = 0.0; - var[TMP1][i] = 0.0; - var[TMP2][i] = 0.0; - var[TMP3][i] = 0.0; - var[PP][i] = 0.0; - var[FLAGP][i] = -1.0; - var[FLAGU][i] = -1.0; - var[FLAGV][i] = -1.0; - var[FLAGW][i] = -1.0; - var[VXBC][i] = 0.0; - var[VYBC][i] = 0.0; - var[VZBC][i] = 0.0; - var[TEMPBC][i] = 0.0; - var[QFLUXBC][i] = 0.0; - var[QFLUX][i] = 0.0; - var[Xi1][i] = 0.0; - var[Xi2][i] = 0.0; - var[Xi1S][i] = 0.0; - var[Xi2S][i] = 0.0; - var[Xi1BC][i] = 0.0; - var[Xi2BC][i] = 0.0; - var[C1][i] = 0.0; - var[C2][i] = 0.0; - var[C1S][i] = 0.0; - var[C2S][i] = 0.0; - var[C1BC][i] = 0.0; - var[C2BC][i] = 0.0; - } - - /* Calculate the thermal diffusivity*/ - para->prob->alpha = para->prob->cond / (para->prob->rho*para->prob->Cp); - - /**************************************************************************** - | Read the configurations defined by SCI - ****************************************************************************/ - if(para->inpu->parameter_file_format == SCI) { - flag = read_sci_input(para, var, BINDEX); - if(flag != 0) { - sprintf(msg, "set_inital_data(): Could not read file %s", - para->inpu->parameter_file_name); - ffd_log(msg, FFD_ERROR); - return flag; - } - flag = read_sci_zeroone(para, var, BINDEX); - if(flag != 0) { - ffd_log("set_inital_data(): Could not read block information file", - FFD_ERROR); - return flag; - } - mark_cell(para, var); - } - - /**************************************************************************** - | Allocate memory for sensor data if there is at least one sensor - ****************************************************************************/ - if(para->sens->nb_sensor>0) { - para->sens->senVal = (REAL *) malloc(para->sens->nb_sensor*sizeof(REAL)); - if(para->sens->senVal==NULL) { - ffd_log("set_initial_data(): Could not allocate memory for " - "para->sens->senVal", FFD_ERROR); - return -1; - } - para->sens->senValMean = (REAL *) malloc(para->sens->nb_sensor*sizeof(REAL)); - if(para->sens->senValMean==NULL) { - ffd_log("set_initial_data(): Could not allocate memory for " - "para->sens->senValMean", FFD_ERROR); - return 1; - } - } - - /**************************************************************************** - | Allocate memory for Species - ****************************************************************************/ - if(para->bc->nb_port>0&¶->bc->nb_Xi>0) { - para->bc->XiPort = (REAL **) malloc(sizeof(REAL*)*para->bc->nb_port); - para->bc->XiPortAve = (REAL **) malloc(sizeof(REAL*)*para->bc->nb_port); - para->bc->XiPortMean = (REAL **) malloc(sizeof(REAL*)*para->bc->nb_port); - if(para->bc->XiPort==NULL || - para->bc->XiPortAve==NULL || - para->bc->XiPortMean==NULL) { - ffd_log("set_initial_data(): Could not allocate memory for XiPort.", - FFD_ERROR); - return 1; - } - - for(i=0; ibc->nb_port; i++) { - para->bc->XiPort[i] = (REAL *) malloc(sizeof(REAL)*para->bc->nb_Xi); - para->bc->XiPortAve[i] = (REAL *) malloc(sizeof(REAL)*para->bc->nb_Xi); - para->bc->XiPortMean[i] = (REAL *) malloc(sizeof(REAL)*para->bc->nb_Xi); - if(para->bc->XiPort[i]==NULL || - para->bc->XiPortAve[i]==NULL || - para->bc->XiPortMean[i]==NULL) { - sprintf(msg, "set_initial_data(): Could not allocate memory for " - "Xi at Port[%d].", i); - ffd_log(msg, FFD_ERROR); - return 1; - } - - for(j=0; jbc->nb_Xi; j++) { - para->bc->XiPort[i][j] = 0.0; - para->bc->XiPortAve[i][j] = 0.0; - para->bc->XiPortMean[i][j] = 0.0; - } - } - if(para->outp->version==DEBUG) { - ffd_log("Allocated memory for Xi", FFD_NORMAL); - } - } - else if(para->outp->version==DEBUG) { - ffd_log("No Xi in the simulation", FFD_NORMAL); - } - - /**************************************************************************** - | Allocate memory for Substances - ****************************************************************************/ - if(para->bc->nb_port>0&¶->bc->nb_C>0) { - para->bc->CPort = (REAL **) malloc(sizeof(REAL *)*para->bc->nb_port); - para->bc->CPortAve = (REAL **) malloc(sizeof(REAL *)*para->bc->nb_port); - para->bc->CPortMean = (REAL **) malloc(sizeof(REAL *)*para->bc->nb_port); - if(para->bc->CPort==NULL || para->bc->CPortAve==NULL - || para->bc->CPortMean) { - ffd_log("set_initial_data(): Could not allocate memory for CPort.", - FFD_ERROR); - return 1; - } - - for(i=0; ibc->nb_port; i++) { - para->bc->CPort[i] = (REAL *) malloc(sizeof(REAL)*para->bc->nb_C); - para->bc->CPortAve[i] = (REAL *) malloc(sizeof(REAL)*para->bc->nb_C); - para->bc->CPortMean[i] = (REAL *) malloc(sizeof(REAL)*para->bc->nb_C); - if(para->bc->CPort[i]==NULL || para->bc->CPortAve[i]==NULL - || para->bc->CPortMean[i]) { - ffd_log("set_initial_data(): " - "Could not allocate memory for C at Port[i].", - FFD_ERROR); - return 1; - } - - for(j=0; jbc->nb_C; j++) { - para->bc->CPort[i][j] = 0.0; - para->bc->CPortAve[i][j] = 0.0; - para->bc->CPortMean[i][j] = 0.0; - } - } - if(para->outp->version==DEBUG) { - ffd_log("Allocated memory for C", FFD_NORMAL); - } - } - else if(para->outp->version==DEBUG) { - ffd_log("No C in the simulation", FFD_NORMAL); - } - - /**************************************************************************** - | Pre-calculate data needed but not change in the simulation - ****************************************************************************/ - para->geom->volFlu = fluid_volume(para, var); - para->geom->pindex = (int) para->geom->jmax/2; + if (para->prob->tur_model == CHEN) { + if (min_distance(para, var, BINDEX) != 0) { + ffd_log("set_initial_data(): Could not find minimal value for zero equation model.", + FFD_ERROR); + } + } + */ + /* rack inlet or outlet area */ + if (para->bc->nb_rack != 0) { + if (rack_fluid_area(para, var, BINDEX) != 0) { + ffd_log("set_initial_data(): Could not calculate the area of the rack inlet or outlet", + FFD_ERROR); + } + } + + /**************************************************************************** + | Set all the averaged data to 0 + ****************************************************************************/ + flag = reset_time_averaged_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not reset averaged data.", + FFD_ERROR); + return flag; + } - /**************************************************************************** - | Set all the averaged data to 0 - ****************************************************************************/ - flag = reset_time_averaged_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not reset averaged data.", - FFD_ERROR); - return flag; - } /**************************************************************************** | Conduct the data exchange at the initial state of cosimulation ****************************************************************************/ - if(para->solv->cosimulation==1) { - /*------------------------------------------------------------------------ - | Calculate the area of boundary - ------------------------------------------------------------------------*/ - flag = bounary_area(para, var, BINDEX); - if(flag != 0) { - ffd_log("set_initial_data(): Could not get the boundary area.", - FFD_ERROR); - return flag; - } - /*------------------------------------------------------------------------ - | Read the cosimulation parameter data (Only need once) - ------------------------------------------------------------------------*/ - flag = read_cosim_parameter(para, var, BINDEX); - if(flag != 0) { - ffd_log("set_initial_data(): Could not read cosimulation parameters.", - FFD_ERROR); - return 1; - } - /*------------------------------------------------------------------------ - | Read the cosimulation data - ------------------------------------------------------------------------*/ - flag = read_cosim_data(para, var, BINDEX); - if(flag != 0) { - ffd_log("set_initial_data(): Could not read initial data for " - "cosimulaiton.", FFD_ERROR); - return flag; - } - - /*------------------------------------------------------------------------ - | Perform the simulation for one step to update the FFD initial condition - ------------------------------------------------------------------------*/ - flag = vel_step(para, var, BINDEX); - if(flag != 0) { - ffd_log("FFD_solver(): Could not solve velocity.", FFD_ERROR); - return flag; - } - else if(para->outp->version==DEBUG) - ffd_log("FFD_solver(): solved velocity step.", FFD_NORMAL); - - flag = temp_step(para, var, BINDEX); - if(flag != 0) { - ffd_log("FFD_solver(): Could not solve temperature.", FFD_ERROR); - return flag; - } - else if(para->outp->version==DEBUG) - ffd_log("FFD_solver(): solved temperature step.", FFD_NORMAL); - - flag = den_step(para, var, BINDEX); - if(flag != 0) { - ffd_log("FFD_solver(): Could not solve trace substance.", FFD_ERROR); - return flag; - } - else if(para->outp->version==DEBUG) - ffd_log("FFD_solver(): solved density step.", FFD_NORMAL); - - /* Integrate the data on the boundary surface*/ - flag = surface_integrate(para, var, BINDEX); - if(flag != 0) { - ffd_log("FFD_solver(): " - "Could not average the data on boundary.", - FFD_ERROR); - return flag; - } - else if (para->outp->version==DEBUG) - ffd_log("FFD_solver(): completed surface integration", - FFD_NORMAL); - - flag = add_time_averaged_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): " - "Could not add the averaged data.", - FFD_ERROR); - return flag; - } - else if (para->outp->version==DEBUG) - ffd_log("FFD_solver(): completed time average", - FFD_NORMAL); - - /* Average the FFD simulation data*/ - flag = average_time(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not average the data over time.", - FFD_ERROR); - return flag; - } - - /*------------------------------------------------------------------------ - | Write the cosimulation data - ------------------------------------------------------------------------*/ - flag = write_cosim_data(para, var); - if(flag != 0) { - ffd_log("set_initial_data(): Could not write initial data for " - "cosimulaiton.", FFD_ERROR); - return flag; - } + if (para->solv->cosimulation == 1) { + /*------------------------------------------------------------------------ + | Calculate the area of boundary + ------------------------------------------------------------------------*/ + flag = bounary_area(para, var, BINDEX); + if (flag != 0) { + ffd_log("set_initial_data(): Could not get the boundary area.", + FFD_ERROR); + return flag; + } + /*------------------------------------------------------------------------ + | Read the cosimulation parameter data (Only need once) + ------------------------------------------------------------------------*/ + flag = read_cosim_parameter(para, var, BINDEX); + if (flag != 0) { + ffd_log("set_initial_data(): Could not read cosimulation parameters.", + FFD_ERROR); + return 1; + } + /*------------------------------------------------------------------------ + | Read the cosimulation data + ------------------------------------------------------------------------*/ + flag = read_cosim_data(para, var, BINDEX); + if (flag != 0) { + ffd_log("set_initial_data(): Could not read initial data for " + "cosimulaiton.", FFD_ERROR); + return flag; + } + + /*------------------------------------------------------------------------ + | Perform the simulation for one step to update the FFD initial condition + ------------------------------------------------------------------------*/ + + flag = vel_step(para, var, BINDEX); + if (flag != 0) { + ffd_log("FFD_solver(): Could not solve velocity.", FFD_ERROR); + return flag; + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): solved velocity step.", FFD_NORMAL); + + + + flag = temp_step(para, var, BINDEX); + if (flag != 0) { + ffd_log("FFD_solver(): Could not solve temperature.", FFD_ERROR); + return flag; + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): solved temperature step.", FFD_NORMAL); + + flag = den_step(para, var, BINDEX); + if (flag != 0) { + ffd_log("FFD_solver(): Could not solve trace substance.", FFD_ERROR); + return flag; + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): solved density step.", FFD_NORMAL); + + /* Integrate the data on the boundary surface*/ + flag = surface_integrate(para, var, BINDEX); + if (flag != 0) { + + + ffd_log("FFD_solver(): " + "Could not average the data on boundary.", + FFD_ERROR); + return flag; + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): completed surface integration", + FFD_NORMAL); + + flag = add_time_averaged_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): " + "Could not add the averaged data.", + FFD_ERROR); + return flag; + + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): completed time average", + FFD_NORMAL); + + /* Average the FFD simulation data*/ + flag = average_time(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not average the data over time.", + FFD_ERROR); + return flag; + + + + } + + + + + /*------------------------------------------------------------------------ + | Write the cosimulation data + ------------------------------------------------------------------------*/ + flag = write_cosim_data(para, var); + if (flag != 0) { + ffd_log("set_initial_data(): Could not write initial data for " + "cosimulaiton.", FFD_ERROR); + return flag; + + + + } } return flag; -} /* set_initial_data()*/ +} /* set_initial_data() */ + +/**************************************************************************** +| Loop through all the BC cells and find if tiles there +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int if_exist_tiles(PARA_DATA* para, REAL** var, int** BINDEX) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + int it; + int index = para->geom->index; + REAL* flagp = var[FLAGP]; + int num_tile = 0; + + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + + if (flagp[IX(i, j, k)] == TILE) { + num_tile += 1; + } + } + + if (num_tile > 0) + return 1; + else if (num_tile == 0) + return 0; + else { + ffd_log("if_exist_tiles(): can not figure out number of tile cells", FFD_ERROR); + return -1; + } +} + +/**************************************************************************** +| Set the default value for parameters +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ +int init_para_simp(PARA_DATA* para, PARA_DATA_SIMP* para_simp) { + /* geom data */ + para_simp->geom.Lx = para->geom->Lx; + para_simp->geom.Ly = para->geom->Ly; + para_simp->geom.Lz = para->geom->Lz; + para_simp->geom.imax = para->geom->imax; + para_simp->geom.jmax = para->geom->jmax; + para_simp->geom.kmax = para->geom->kmax; + para_simp->geom.index = para->geom->index; + para_simp->geom.pindex = para->geom->pindex; + para_simp->geom.plane = para->geom->plane; + para_simp->geom.dx = para->geom->dx; + para_simp->geom.dy = para->geom->dy; + para_simp->geom.dz = para->geom->dz; + para_simp->geom.volFlu = para->geom->volFlu; + para_simp->geom.uniform = para->geom->uniform; + + /* outp data */ + para_simp->outp_simp.cal_mean = para->outp->cal_mean; + para_simp->outp_simp.version = para->outp->version; + + /* prob data */ + para_simp->prob.nu = para->prob->nu; + para_simp->prob.rho = para->prob->rho; + para_simp->prob.diff = para->prob->diff; + para_simp->prob.alpha = para->prob->alpha; + para_simp->prob.coeff_h = para->prob->coeff_h; + para_simp->prob.gravx = para->prob->gravx; + para_simp->prob.gravy = para->prob->gravy; + para_simp->prob.gravz = para->prob->gravz; + para_simp->prob.beta = para->prob->beta; + para_simp->prob.cond = para->prob->cond; + para_simp->prob.Cp = para->prob->Cp; + para_simp->prob.force = para->prob->force; + para_simp->prob.heat = para->prob->heat; + para_simp->prob.source = para->prob->source; + para_simp->prob.movie = para->prob->movie; + para_simp->prob.output = para->prob->output; + para_simp->prob.tur_model = para->prob->tur_model; + para_simp->prob.chen_a = para->prob->chen_a; + para_simp->prob.Prt = para->prob->Prt; + para_simp->prob.Temp_Buoyancy = para->prob->Temp_Buoyancy; + para_simp->prob.coef_stanchion = para->prob->coef_stanchion; + + /* bc data */ + para_simp->bc_simp.nb_bc = para->bc->nb_bc; + para_simp->bc_simp.nb_outlet = para->bc->nb_outlet; + para_simp->bc_simp.nb_block = para->bc->nb_block; + para_simp->bc_simp.nb_wall = para->bc->nb_wall; + para_simp->bc_simp.nb_source = para->bc->nb_source; + para_simp->bc_simp.nb_bc = para->bc->nb_bc; + para_simp->bc_simp.nb_ConExtWin = para->bc->nb_ConExtWin; + para_simp->bc_simp.nb_port = para->bc->nb_port; + para_simp->bc_simp.nb_Xi = para->bc->nb_Xi; + para_simp->bc_simp.nb_C = para->bc->nb_C; + para_simp->bc_simp.sha = para->bc->sha; + para_simp->bc_simp.mass_in = 0.000000; + para_simp->bc_simp.mass_out = 0.0000001; + para_simp->bc_simp.outlet_bc = para->bc->outlet_bc; + + /* sensor data */ + para_simp->sens_simp.nb_sensor = para->sens->nb_sensor; + para_simp->sens_simp.TRoo = para->sens->TRoo; + para_simp->sens_simp.TRooMean = para->sens->TRooMean; + + /*time data*/ + para_simp->mytime.dt = (REAL)para->mytime->dt; + para_simp->mytime.t = (REAL)para->mytime->t; + para_simp->mytime.step_total = para->mytime->step_total; + para_simp->mytime.step_current = para->mytime->step_current; + para_simp->mytime.step_mean = para->mytime->step_mean; + para_simp->mytime.t_start = para->mytime->t_start; + para_simp->mytime.t_end = para->mytime->t_end; + + /* solv data */ + para_simp->solv.solver = para->solv->solver; + para_simp->solv.check_residual = para->solv->check_residual; + para_simp->solv.advection_solver = para->solv->advection_solver; + para_simp->solv.interpolation = para->solv->interpolation; + para_simp->solv.cosimulation = para->solv->cosimulation; + para_simp->solv.nextstep = para->solv->nextstep; + para_simp->solv.tile_flow_correct = para->solv->tile_flow_correct; + + /* init data */ + para_simp->init.T = para->init->T; + para_simp->init.v = para->init->v; + para_simp->init.w = para->init->w; + para_simp->init.v = para->init->v; + + return 0; +} /* End of set_default_parameter */ + +/* flat var */ +int flat_var(PARA_DATA* para, REAL** var, REAL* var_flat) { + int nb_var, i, j; + int size = (para->geom->imax + 2) * (para->geom->jmax + 2) * (para->geom->kmax + 2); + nb_var = C2BC + 1; + + + for (i = 0; i < nb_var * size; i++) { + var_flat[i] = 0.0f; + /*printf("%d:\t%f\n",i, var_flat[i]);*/ + } + /*getchar();*/ + + for (i = 0; i < nb_var; i++) { + for (j = 0; j < size; j++) { + var_flat[i * size + j] = var[i][j]; + /*printf("%d\t%f\t%f\n",i*size+j,var_flat[i*size + j],var[i][j]);*/ + } + } + return 0; +} + +int unflat_var(PARA_DATA* para, REAL** var, REAL* var_flat) { + int nb_var, i, j; + int size = (para->geom->imax + 2) * (para->geom->jmax + 2) * (para->geom->kmax + 2); + nb_var = C2BC + 1; + + for (i = 0; i < nb_var; i++) { + for (j = 0; j < size; j++) { + var[i][j] = var_flat[i * size + j]; + /*printf("%d\t%f\t%f\n",i*size+j,var_flat[i*size + j],var[i][j]);*/ + } + } + return 0; +} + + + +/* flatten bindex */ +int flat_index(PARA_DATA* para, int** BINDEX, int* bindex_flat) { + int row = 5; + int i, j; + int size = (para->geom->imax + 2) * (para->geom->jmax + 2) * (para->geom->kmax + 2); + + for (i = 0; i < row; i++) { + for (j = 0; j < size; j++) { + bindex_flat[i * size + j] = BINDEX[i][j]; + } + } + + return 0; +} \ No newline at end of file diff --git a/Buildings/Resources/src/FastFluidDynamics/initialization.h b/Buildings/Resources/src/FastFluidDynamics/initialization.h index 97aeee968d4..8d700879c6f 100644 --- a/Buildings/Resources/src/FastFluidDynamics/initialization.h +++ b/Buildings/Resources/src/FastFluidDynamics/initialization.h @@ -1,19 +1,25 @@ -/* - * - * @file initialization.h - * - * @brief Set the initial values - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file initialization.h +| +| \brief Set the initial values +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #ifndef _INITIALIZATION_H #define _INITIALIZATION_H @@ -28,10 +34,13 @@ #define _PARAMETER_READER_H #include "parameter_reader.h" #endif + +#ifndef FFD_ISAT #ifndef _COSIMULATION_H #define _COSIMULATION_H #include "cosimulation.h" #endif +#endif #ifndef _SCI_READER_H #define _SCI_READER_H @@ -53,31 +62,53 @@ #include "geometry.h" #endif -/* - * Initialize the parameters - * - * @param para Pointer to FFD parameters - * - * @return 0 if no error occurred - */ -int initialize(PARA_DATA *para); - -/* - * Set the default value for parameters - * - * @param para Pointer to FFD parameters - * - * @return No return needed - */ -void set_default_parameter(PARA_DATA *para); - -/* - * Set default initial values for simulation variables - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int set_initial_data (PARA_DATA *para, REAL **var, int **BINDEX); + +/**************************************************************************** +| Initialize the parameters +| +| \param para Pointer to FFD parameters +| +| \return 0 if no error occurred +****************************************************************************/ +int initialize(PARA_DATA * para); + +/**************************************************************************** +| Set the default value for parameters +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ +void set_default_parameter(PARA_DATA* para); + +/**************************************************************************** +| Set default initial values for simulation variables +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int set_initial_data(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Loop through all the BC cells and find if tiles there +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int if_exist_tiles(PARA_DATA* para, REAL** var, int** BINDEX); + +int init_para_simp(PARA_DATA* para, PARA_DATA_SIMP* para_simp); + +/*flatten var*/ +int flat_var(PARA_DATA* para, REAL** var, REAL* var_flat); +/* flatten bindex */ +int flat_index(PARA_DATA* para, int** BINDEX, int* bindex_flat); +int unflat_var(PARA_DATA* para, REAL** var, REAL* var_flat); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/interpolation.c b/Buildings/Resources/src/FastFluidDynamics/interpolation.c index ee9e9b4d902..e01b8c16272 100644 --- a/Buildings/Resources/src/FastFluidDynamics/interpolation.c +++ b/Buildings/Resources/src/FastFluidDynamics/interpolation.c @@ -1,35 +1,35 @@ -/* - * - * \file interpolation.c - * - * \brief Interpolate the data for advection step - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file interpolation.c +| +| \brief Interpolate the data for advection step +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| +| \date 8/3/2013 +| +****************************************************************************/ #include "interpolation.h" -/* - * Entrance of interpolation - * - * @param para Pointer to FFD parameters - * @param d0 Pointer to the variable for interpolation - * @param p I-index of the control volume - * @param q J-index of the control volume - * @param r K-index of the control volume - * @param x_1 Reciprocal of X-length - * @param y_1 Reciprocal of Y-length - * @param z_1 Reciprocal of Z-length - * - * @return Interpolated value - */ +/**************************************************************************** +| Entrance of interpolation +| +| \param para Pointer to FFD parameters +| \param d0 Pointer to the variable for interpolation +| \param p I-index of the control volume +| \param q J-index of the control volume +| \param r K-index of the control volume +| \param x_1 Reciprocal of X-length +| \param y_1 Reciprocal of Y-length +| \param z_1 Reciprocal of Z-length +| +| \return Interpolated value +****************************************************************************/ REAL interpolation(PARA_DATA *para, REAL *d0, REAL x_1, REAL y_1, REAL z_1, int p, int q, int r) { int imax = para->geom->imax, jmax = para->geom->jmax; @@ -48,25 +48,25 @@ REAL interpolation(PARA_DATA *para, REAL *d0, REAL x_1, REAL y_1, REAL z_1, ffd_log(msg, FFD_ERROR); return -1; } -} /* End of interpolation()*/ +} /* End of interpolation() */ - /* - * Bilinear interpolation - * - * @param x_1 Reciprocal of X-length - * @param y_1 Reciprocal of Y-length - * @param z_1 Reciprocal of Z-length - * @param d000 parameter for interpolation - * @param d010 parameter for interpolation - * @param d100 parameter for interpolation - * @param d110 parameter for interpolation - * @param d001 parameter for interpolation - * @param d011 parameter for interpolation - * @param d101 parameter for interpolation - * @param d111 parameter for interpolation - * - * @return Interpolated value - */ +/**************************************************************************** +| Bilinear interpolation +| +| \param x_1 Reciprocal of X-length +| \param y_1 Reciprocal of Y-length +| \param z_1 Reciprocal of Z-length +| \param d000 parameter for interpolation +| \param d010 parameter for interpolation +| \param d100 parameter for interpolation +| \param d110 parameter for interpolation +| \param d001 parameter for interpolation +| \param d011 parameter for interpolation +| \param d101 parameter for interpolation +| \param d111 parameter for interpolation +| +| \return Interpolated value +****************************************************************************/ REAL interpolation_bilinear(REAL x_1, REAL y_1, REAL z_1, REAL d000, REAL d010, REAL d100, REAL d110, REAL d001, REAL d011, REAL d101, REAL d111) { @@ -85,4 +85,5 @@ REAL interpolation_bilinear(REAL x_1, REAL y_1, REAL z_1, return z_0*tmp0+z_1*tmp1; -} /* End of interpolation_bilinear()*/ +} /* End of interpolation_bilinear() */ + diff --git a/Buildings/Resources/src/FastFluidDynamics/interpolation.h b/Buildings/Resources/src/FastFluidDynamics/interpolation.h index 47fcae1973e..6db1509792c 100644 --- a/Buildings/Resources/src/FastFluidDynamics/interpolation.h +++ b/Buildings/Resources/src/FastFluidDynamics/interpolation.h @@ -1,19 +1,19 @@ -/* - * - * @file interpolation.h - * - * @brief Interpolate the data for advection step - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file interpolation.h +| +| \brief Interpolate the data for advection step +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| +| \date 8/3/2013 +| +****************************************************************************/ #ifndef _INTERPOLATION_H #define _INTERPOLATION_H @@ -26,40 +26,42 @@ #include "utility.h" -/* - * Entrance of interpolation - * - * @param para Pointer to FFD parameters - * @param d0 Pointer to the variable for interpolation - * @param p I-index of the control volume - * @param q J-index of the control volume - * @param r K-index of the control volume - * @param x_1 Reciprocal of X-length - * @param y_1 Reciprocal of Y-length - * @param z_1 Reciprocal of Z-length - * - * @return Interpolated value - */ -REAL interpolation(PARA_DATA *para, REAL *d0, REAL x_1, REAL y_1, REAL z_1, - int p, int q, int r); +/**************************************************************************** +| Entrance of interpolation +| +| \param para Pointer to FFD parameters +| \param d0 Pointer to the variable for interpolation +| \param p I - index of the control volume +| \param q J - index of the control volume +| \param r K - index of the control volume +| \param x_1 Reciprocal of X - length +| \param y_1 Reciprocal of Y - length +| \param z_1 Reciprocal of Z - length +| +| \return Interpolated value +* ***************************************************************************/ +REAL interpolation(PARA_DATA * para, REAL * d0, REAL x_1, REAL y_1, REAL z_1, + int p, int q, int r); -/* - * Bilinear interpolation - * - * @param x_1 Reciprocal of X-length - * @param y_1 Reciprocal of Y-length - * @param z_1 Reciprocal of Z-length - * @param d000 parameter for interpolation - * @param d010 parameter for interpolation - * @param d100 parameter for interpolation - * @param d110 parameter for interpolation - * @param d001 parameter for interpolation - * @param d011 parameter for interpolation - * @param d101 parameter for interpolation - * @param d111 parameter for interpolation - * - * @return Interpolated value - */ +/**************************************************************************** +| Bilinear interpolation +| +| \param x_1 Reciprocal of X-length +| \param y_1 Reciprocal of Y-length +| \param z_1 Reciprocal of Z-length +| \param d000 parameter for interpolation +| \param d010 parameter for interpolation +| \param d100 parameter for interpolation +| \param d110 parameter for interpolation +| \param d001 parameter for interpolation +| \param d011 parameter for interpolation +| \param d101 parameter for interpolation +| \param d111 parameter for interpolation +| +| \return Interpolated value +****************************************************************************/ REAL interpolation_bilinear(REAL x_1, REAL y_1, REAL z_1, REAL d000, REAL d010, REAL d100, REAL d110, REAL d001, REAL d011, REAL d101, REAL d111); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h b/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h index 57807bdb389..68a3377d15e 100644 --- a/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h +++ b/Buildings/Resources/src/FastFluidDynamics/modelica_ffd_common.h @@ -33,14 +33,15 @@ typedef struct { /* 1: fixed temperature,*/ /* 2: fixed heat flow rate through the surface*/ char **sensorName; /* *sensorName[nSen]: Name of sensor in FFD*/ - int Sou; /* 1: have internal source ; 0: no internal source*/ - int nSou; /* Number of internal sources*/ - char **souName; /* *souName[nSou]: Name of internal heat sources*/ + char *version; // DEMO, DEBUG, RUN + int Sou; /* 1: have internal source ; 0: no internal source*/ + int nSou; /* Number of internal sources*/ + char **souName; /* *souName[nSou]: Name of internal heat sources*/ } ParameterSharedData; typedef struct { REAL t; /* Current time of integration*/ - REAL lt; /* Last time of integration*/ + REAL lt; /* Last time of integration*/ int flag; /* To control the data exchange. 0: old data, 1: new data; -1: Stop coupled simulation*/ REAL dt; /* Time step size for next synchronization*/ REAL *temHea; /* temHea[nSur]: Temperature or heat flow rate depending on surBou.bouCon*/ @@ -57,7 +58,7 @@ typedef struct { REAL **XiPor; /* XiPor[nPorts][Medium.nXi]: species concentration of inflowing medium at the port*/ /* First Medium.nXi elements are for port 1*/ REAL **CPor; /* CPor[nPorts][Medium.nC]: the trace substances of the inflowing medium*/ - REAL *sourceHeat; /* sourceHeat[nSou]: the internal source heat gain*/ + REAL *sourceHeat; /* sourceHeat[nSou]: the internal source heat gain*/ }ModelicaSharedData; typedef struct { @@ -73,6 +74,11 @@ typedef struct { REAL **CPor; /* CPor[nPorts][medium.nC]: the trace substances of medium at the port*/ REAL *senVal; /* senVal[nSen]: value of sensor data*/ char *msg; /* Message to be passed to Modelica*/ + REAL *input; + REAL *output; + int nInput; + int nOutput; + REAL *wOutput; /* Weights for error control, this is need since each component of output vector has different order of magnitudes*/ }ffdSharedData; typedef struct{ @@ -80,3 +86,12 @@ typedef struct{ ffdSharedData *ffd; ModelicaSharedData *modelica; } CosimulationData; + +/*#define FFD_ISAT + +#ifdef FFD_ISAT +typedef enum { COSIM_WARNING, COSIM_ERROR, COSIM_NORMAL, COSIM_NEW } COSIM_MSG_TYPE; +typedef enum { temp_roo, temp_occ, vel_occ, temp_sen, vel_sen, temp_rack } OUTPUT_TYPE; +typedef enum { inlet_temp, inlet_mass, inlet_vel, block_temp, block_hea, rack_hea, sur_temp, sur_hea } INPUT_TYPE; +#endif +*/ \ No newline at end of file diff --git a/Buildings/Resources/src/FastFluidDynamics/parameter_reader.c b/Buildings/Resources/src/FastFluidDynamics/parameter_reader.c index 6d895d4bb36..eeb8f17e7f9 100644 --- a/Buildings/Resources/src/FastFluidDynamics/parameter_reader.c +++ b/Buildings/Resources/src/FastFluidDynamics/parameter_reader.c @@ -1,36 +1,41 @@ -/* - * - * \file parameter_reader.c - * - * \brief Read the FFD parameter file - * - * \author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file parameter_reader.c +| +| \brief Read the FFD parameter file +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #include "parameter_reader.h" - /* - * Assign the FFD parameters - * - * @param para Pointer to FFD parameters - * @param string Pointer to data read from the parameter file - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Assign the FFD parameters +| +| \param para Pointer to FFD parameters +| \param string Pointer to data read from the parameter file +| +| \return 0 if no error occurred +****************************************************************************/ int assign_parameter(PARA_DATA *para, char *string) { char tmp[400]; char tmp_par[400]; - /* tmp2 needs to be initialized to avoid crash*/ - /* when the input for tmp2 is empty*/ + /* tmp2 needs to be initialized to avoid crash */ + /* when the input for tmp2 is empty */ char tmp2[100] = ""; int senId = -1; - /**************************************************************************** sscanf() reads data from string and stores them according to parameter format into the locations given by the additional arguments. @@ -41,18 +46,33 @@ int assign_parameter(PARA_DATA *para, char *string) { return 0; } - if(!strcmp(tmp, "geom.Lx")) { - sscanf(string, "%s%lf", tmp, ¶->geom->Lx); - sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->Lx); - ffd_log(msg, FFD_NORMAL); + if (!strcmp(tmp, "geom.Lx")) { + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->geom->Lx); + } + else { + sscanf(string, "%s%f", tmp, ¶->geom->Lx); + } + sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->Lx); + ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "geom.Ly")) { - sscanf(string, "%s%lf", tmp, ¶->geom->Ly); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->geom->Ly); + } + else { + sscanf(string, "%s%f", tmp, ¶->geom->Ly); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->Ly); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "geom.Lz")) { - sscanf(string, "%s%lf", tmp, ¶->geom->Lz); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->geom->Lz); + } + else { + sscanf(string, "%s%f", tmp, ¶->geom->Lz); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->Lz); ffd_log(msg, FFD_NORMAL); } @@ -77,17 +97,33 @@ int assign_parameter(PARA_DATA *para, char *string) { ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "geom.dx")) { - sscanf(string, "%s%lf", tmp, ¶->geom->dx); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->geom->dx); + } + else { + sscanf(string, "%s%f", tmp, ¶->geom->dx); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->dx); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "geom.dy")) { - sscanf(string, "%s%lf", tmp, ¶->geom->dy); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->geom->dy); + } + else { + sscanf(string, "%s%f", tmp, ¶->geom->dy); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->dy); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "geom.dz")) { - sscanf(string, "%s%lf", tmp, ¶->geom->dz); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->geom->dz); + } + else { + sscanf(string, "%s%f", tmp, ¶->geom->dz); + } + sprintf(msg, "assign_parameter(): %s=%f", tmp, para->geom->dz); ffd_log(msg, FFD_NORMAL); } @@ -102,17 +138,32 @@ int assign_parameter(PARA_DATA *para, char *string) { ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "outp.v_ref")) { - sscanf(string, "%s%lf", tmp, ¶->outp->v_ref); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->outp->v_ref); + } + else { + sscanf(string, "%s%f", tmp, ¶->outp->v_ref); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->outp->v_ref); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "outp.Temp_ref")) { - sscanf(string, "%s%lf", tmp, ¶->outp->Temp_ref); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->outp->Temp_ref); + } + else { + sscanf(string, "%s%f", tmp, ¶->outp->Temp_ref); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->outp->Temp_ref); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "outp.v_length")) { - sscanf(string, "%s%lf", tmp, ¶->outp->v_length); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->outp->v_length); + } + else { + sscanf(string, "%s%f", tmp, ¶->outp->v_length); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->outp->v_length); ffd_log(msg, FFD_NORMAL); } @@ -136,6 +187,11 @@ int assign_parameter(PARA_DATA *para, char *string) { sprintf(msg, "assign_parameter(): %s=%d", tmp, para->outp->winy); ffd_log(msg, FFD_NORMAL); } + else if(!strcmp(tmp, "outp.tstep_display")) { + sscanf(string, "%s%d", tmp, ¶->outp->tstep_display); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->outp->tstep_display); + ffd_log(msg, FFD_NORMAL); + } else if(!strcmp(tmp, "outp.version")) { sscanf(string, "%s%s", tmp, tmp2); sprintf(msg, "assign_parameter(): %s=%s", tmp, tmp2); @@ -165,16 +221,33 @@ int assign_parameter(PARA_DATA *para, char *string) { ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "inpu.parameter_file_name")) { +#ifndef FFD_ISAT sscanf(string, "%s%s", tmp, tmp_par); - sprintf (para->inpu->parameter_file_name, "%s%s", para->cosim->para->filePath, tmp_par); + sprintf(para->inpu->parameter_file_name, "%s%s", para->cosim->para->filePath, tmp_par); sprintf(msg, "assign_parameter(): %s=%s", tmp, para->inpu->parameter_file_name); ffd_log(msg, FFD_NORMAL); +#else + sscanf(string, "%s%s", tmp, para->inpu->parameter_file_name); + sprintf(msg, "assign_parameter(): %s=%s", tmp, para->inpu->parameter_file_name); + ffd_log(msg, FFD_NORMAL); +#endif + } + else if (!strcmp(tmp, "outp.OutputDynamicFile")) { + sscanf(string, "%s%d", tmp, ¶->outp->OutputDynamicFile); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->outp->OutputDynamicFile); + ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "inpu.block_file_name")) { +#ifndef FFD_ISAT sscanf(string, "%s%s", tmp, tmp_par); - sprintf (para->inpu->block_file_name, "%s%s", para->cosim->para->filePath, tmp_par); + sprintf(para->inpu->block_file_name, "%s%s", para->cosim->para->filePath, tmp_par); sprintf(msg, "assign_parameter(): %s=%s", tmp, para->inpu->block_file_name); ffd_log(msg, FFD_NORMAL); +#else + sscanf(string, "%s%s", tmp, para->inpu->block_file_name); + sprintf(msg, "assign_parameter(): %s=%s", tmp, para->inpu->block_file_name); + ffd_log(msg, FFD_NORMAL); +#endif } else if(!strcmp(tmp, "inpu.read_old_ffd_file")) { sscanf(string, "%s%d", tmp, ¶->inpu->read_old_ffd_file); @@ -187,65 +260,135 @@ int assign_parameter(PARA_DATA *para, char *string) { ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.nu")) { - sscanf(string, "%s%lf", tmp, ¶->prob->nu); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->nu); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->nu); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->nu); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.rho")) { - sscanf(string, "%s%lf", tmp, ¶->prob->rho); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->rho); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->rho); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->rho); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.beta")) { - sscanf(string, "%s%lf", tmp, ¶->prob->beta); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->beta); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->beta); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->beta); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.diff")) { - sscanf(string, "%s%lf", tmp, ¶->prob->diff); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->diff); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->diff); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->diff); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.coeff_h")) { - sscanf(string, "%s%lf", tmp, ¶->prob->coeff_h); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->coeff_h); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->coeff_h); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->coeff_h); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.gravx")) { - sscanf(string, "%s%lf", tmp, ¶->prob->gravx); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->gravx); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->gravx); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->gravx); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.gravy")) { - sscanf(string, "%s%lf", tmp, ¶->prob->gravy); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->gravy); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->gravy); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->gravy); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.gravz")) { - sscanf(string, "%s%lf", tmp, ¶->prob->gravz); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->gravz); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->gravz); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->gravz); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.cond")) { - sscanf(string, "%s%lf", tmp, ¶->prob->cond); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->cond); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->cond); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->cond); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.force")) { - sscanf(string, "%s%lf", tmp, ¶->prob->force); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->force); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->force); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->force); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.source")) { - sscanf(string, "%s%lf", tmp, ¶->prob->source); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->source); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->source); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->source); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.Cp")) { - sscanf(string, "%s%lf", tmp, ¶->prob->Cp); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->Cp); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->Cp); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->Cp); ffd_log(msg, FFD_NORMAL); } + else if (!strcmp(tmp, "prob.alpha")) { + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->alpha); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->alpha); + } + sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->alpha); + ffd_log(msg, FFD_NORMAL); + } else if(!strcmp(tmp, "prob.movie")) { sscanf(string, "%s%d", tmp, ¶->prob->movie); sprintf(msg, "assign_parameter(): %s=%d", tmp, para->prob->movie); @@ -268,22 +411,73 @@ int assign_parameter(PARA_DATA *para, char *string) { ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.chen_a")) { - sscanf(string, "%s%lf", tmp, ¶->prob->chen_a); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->chen_a); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->chen_a); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->chen_a); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "prob.Prt")) { - sscanf(string, "%s%lf", tmp, ¶->prob->Prt); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->Prt); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->Prt); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->Prt); ffd_log(msg, FFD_NORMAL); } + else if(!strcmp(tmp, "outp.result_file")) { + sscanf(string, "%s%s", tmp, tmp2); + if(!strcmp(tmp2, "VTK")) + para->outp->result_file = VTK; + if(!strcmp(tmp2, "PLT")) + para->outp->result_file = PLT; + if (!strcmp(tmp2, "NO")) + para->outp->result_file = NO; + } else if(!strcmp(tmp, "prob.Temp_Buoyancy")) { - sscanf(string, "%s%lf", tmp, ¶->prob->Temp_Buoyancy); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->Temp_Buoyancy); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->Temp_Buoyancy); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->Temp_Buoyancy); ffd_log(msg, FFD_NORMAL); } + else if(!strcmp(tmp, "prob.coef_stanchion")) { + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->prob->coef_stanchion); + } + else { + sscanf(string, "%s%f", tmp, ¶->prob->coef_stanchion); + } + sprintf(msg, "assign_parameter(): %s=%f", tmp, para->prob->coef_stanchion); + ffd_log(msg, FFD_NORMAL); + } + else if (!strcmp(tmp, "bc.outlet_bc")) { + sscanf(string, "%s%s", tmp, tmp2); + if (!strcmp(tmp2, "ZERO_GRADIENT")) + para->bc->outlet_bc = ZERO_GRADIENT; + if (!strcmp(tmp2, "PRESCRIBED_VALUE")) + para->bc->outlet_bc = PRESCRIBED_VALUE; + } + else if (!strcmp(tmp, "bc.hasTile")) { + sscanf(string, "%s%d", tmp, ¶->bc->hasTile); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->bc->hasTile); + ffd_log(msg, FFD_NORMAL); + } else if(!strcmp(tmp, "mytime.t_steady")) { - sscanf(string, "%s%lf", tmp, ¶->mytime->t_steady); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->mytime->t_steady); + } + else { + sscanf(string, "%s%f", tmp, ¶->mytime->t_steady); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->mytime->t_steady); ffd_log(msg, FFD_NORMAL); } @@ -301,11 +495,31 @@ int assign_parameter(PARA_DATA *para, char *string) { } ffd_log(msg, FFD_NORMAL); } + else if (!strcmp(tmp, "solv.swipe_adv")) { + sscanf(string, "%s%d", tmp, ¶->solv->swipe_adv); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->swipe_adv); + ffd_log(msg, FFD_NORMAL); + } + else if (!strcmp(tmp, "solv.swipe_dif")) { + sscanf(string, "%s%d", tmp, ¶->solv->swipe_dif); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->swipe_dif); + ffd_log(msg, FFD_NORMAL); + } + else if (!strcmp(tmp, "solv.swipe_pro")) { + sscanf(string, "%s%d", tmp, ¶->solv->swipe_pro); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->swipe_pro); + ffd_log(msg, FFD_NORMAL); + } else if(!strcmp(tmp, "solv.check_residual")) { sscanf(string, "%s%d", tmp, ¶->solv->check_residual); sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->check_residual); ffd_log(msg, FFD_NORMAL); } + else if (!strcmp(tmp, "solv.check_conservation")) { + sscanf(string, "%s%d", tmp, ¶->solv->check_conservation); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->check_conservation); + ffd_log(msg, FFD_NORMAL); + } else if(!strcmp(tmp, "solv.advection_solver")) { sscanf(string, "%s%s", tmp, tmp2); sprintf(msg, "assign_parameter(): %s=%s", tmp, tmp2); @@ -315,8 +529,8 @@ int assign_parameter(PARA_DATA *para, char *string) { para->solv->advection_solver = LAX; else if(!strcmp(tmp2, "UPWIND")) para->solv->advection_solver = UPWIND; - else if(!strcmp(tmp2, "UPWIND_NEW")) - para->solv->advection_solver = UPWIND_NEW; + else if(!strcmp(tmp2, "CENTRAL")) + para->solv->advection_solver = CENTRAL; else { sprintf(msg, "assign_parameter(): %s is not valid input for %s", tmp2, tmp); ffd_log(msg, FFD_ERROR); @@ -345,26 +559,61 @@ int assign_parameter(PARA_DATA *para, char *string) { sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->cosimulation); ffd_log(msg, FFD_NORMAL); } + else if (!strcmp(tmp, "solv.mass_conservation_on")) { + sscanf(string, "%s%d", tmp, ¶->solv->mass_conservation_on); + sprintf(msg, "assign_parameter(): %s=%d", tmp, para->solv->mass_conservation_on); + ffd_log(msg, FFD_NORMAL); + } + else if (!strcmp(tmp, "solv.tile_flow_correct")) { + sscanf(string, "%s%s", tmp, tmp2); + if (!strcmp(tmp2, "PRESSURE_BASE")) + para->solv->tile_flow_correct = PRESSURE_BASE; + if (!strcmp(tmp2, "NS_SOURCE")) + para->solv->tile_flow_correct = NS_SOURCE; + /* Turn off mass balance if using pressure_base */ + if (para->solv->tile_flow_correct == PRESSURE_BASE && para->bc->hasTile > 0) + para->solv->mass_conservation_on = 0; + } /**************************************************************************** | get the initial condition ****************************************************************************/ else if(!strcmp(tmp, "init.T")) { - sscanf(string, "%s%lf", tmp, ¶->init->T); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->init->T); + } + else { + sscanf(string, "%s%f", tmp, ¶->init->T); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->init->T); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "init.u")) { - sscanf(string, "%s%lf", tmp, ¶->init->u); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->init->u); + } + else { + sscanf(string, "%s%f", tmp, ¶->init->u); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->init->u); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "init.v")) { - sscanf(string, "%s%lf", tmp, ¶->init->v); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->init->v); + } + else { + sscanf(string, "%s%f", tmp, ¶->init->v); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->init->v); ffd_log(msg, FFD_NORMAL); } else if(!strcmp(tmp, "init.w")) { - sscanf(string, "%s%lf", tmp, ¶->init->w); + if (ifDouble) { + sscanf(string, "%s%lf", tmp, ¶->init->w); + } + else { + sscanf(string, "%s%f", tmp, ¶->init->w); + } sprintf(msg, "assign_parameter(): %s=%f", tmp, para->init->w); ffd_log(msg, FFD_NORMAL); } @@ -397,53 +646,58 @@ int assign_parameter(PARA_DATA *para, char *string) { | if it is the first name, allocate memory for para->sens->sensorName ------------------------------------------------------------------------*/ if(para->sens->sensorName==NULL) { - /* The number of sensor must be defined before we allocate memory for*/ - /* para->sens->sensorName*/ - if(para->sens->nb_sensor==0) { - sprintf(msg, "assign_parameter(): Must define the number of sensors " - "before giving the sensor names"); - ffd_log(msg, FFD_ERROR); - return 1; - } /* End of if(para->sens->nb_sensor==0)*/ - else { - para->sens->sensorName = (char **) malloc(para->sens->nb_sensor*sizeof(char *)); - if(para->sens->sensorName==NULL) { - ffd_log("assign_parameter(): Could not allocate memory for " - "para->sens->sensorName", FFD_ERROR); - return 1; - } - } /* End of else*/ + /* The number of sensor must be defined before we allocate memory for */ + /* para->sens->sensorName */ + if (para->sens->nb_sensor == 0) { + sprintf(msg, "assign_parameter(): Must define the number of sensors " + "before giving the sensor names"); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if(para->sens->nb_sensor==0) */ + else { + para->sens->sensorName = (char**)malloc(para->sens->nb_sensor * sizeof(char*)); + if (para->sens->sensorName == NULL) { + ffd_log("assign_parameter(): Could not allocate memory for " + "para->sens->sensorName", FFD_ERROR); + return 1; + } + } /* End of else */ - } /* End of if(para->sens->nb_sensor==0)*/ + } /* End of if(para->sens->nb_sensor==0) */ - /*------------------------------------------------------------------------ - | Copy the sensor name - ------------------------------------------------------------------------*/ - sscanf(string, "%s%s", tmp, tmp2); - senId++; - para->sens->sensorName[senId] = (char *) malloc(sizeof(tmp2)*sizeof(char)); - if(para->sens->sensorName[senId]==NULL) { - sprintf(msg, "assign_parameter(): Could not allocate memory for %s", - tmp2); - ffd_log(msg, FFD_ERROR); - return 1; - } - else { - strcpy(para->sens->sensorName[senId], tmp2); - sprintf(msg, "assign_parameter(): %s=%s", tmp, para->sens->sensorName[senId]); - ffd_log(msg, FFD_NORMAL); - } + /*------------------------------------------------------------------------ + | Copy the sensor name + ------------------------------------------------------------------------*/ + sscanf(string, "%s%s", tmp, tmp2); + senId++; + para->sens->sensorName[senId] = (char*)malloc(sizeof(tmp2) * sizeof(char)); + if (para->sens->sensorName[senId] == NULL) { + sprintf(msg, "assign_parameter(): Could not allocate memory for %s", + tmp2); + ffd_log(msg, FFD_ERROR); + return 1; + } + else { + strcpy(para->sens->sensorName[senId], tmp2); + sprintf(msg, "assign_parameter(): %s=%s", tmp, para->sens->sensorName[senId]); + ffd_log(msg, FFD_NORMAL); + } } + return 0; -} /* End of assign_parameter()*/ +} /* End of assign_parameter() */ + +#ifdef FFD_ISAT +extern char filepath[]; +#endif - /* - * Read the FFD parameter file input.ffd - * - * @param para Pointer to FFD parameters - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Read the FFD parameter file input.ffd +| +| \param para Pointer to FFD parameters +| +| \return 0 if no error occurred +****************************************************************************/ int read_parameter(PARA_DATA *para) { char string[400]; @@ -451,67 +705,82 @@ int read_parameter(PARA_DATA *para) { | Open the FFD parameter file ****************************************************************************/ /*--------------------------------------------------------------------------- - | Stand alone simulation - ---------------------------------------------------------------------------*/ - if(para->solv->cosimulation==0) { - if((file_para=fopen("input.ffd","r"))==NULL) { - sprintf(msg, "read_parameter(): " - "Could not open the default FFD parameter file input.ffd"); - ffd_log(msg, FFD_ERROR); - return 1; - } - else { - sprintf(msg, "read_parameter(): Opened input.ffd for FFD parameters"); - ffd_log(msg, FFD_NORMAL); - } +| Stand alone simulation +---------------------------------------------------------------------------*/ + if (para->solv->cosimulation == 0) { +#ifndef FFD_ISAT /*if no ISAT*/ + if ((file_para = fopen("input.ffd", "r")) == NULL) { + sprintf(msg, "read_parameter(): " + "Could not open the default FFD parameter file input.ffd"); + ffd_log(msg, FFD_ERROR); + return 1; + } + else { + sprintf(msg, "read_parameter(): Opened input.ffd for FFD parameters"); + ffd_log(msg, FFD_NORMAL); + } +#else /*if called by ISAT*/ + char filenametmp[400] = { 0 }; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "input.ffd"); + if ((file_para = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_parameter(): " + "Could not open the default FFD parameter file %s", filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + else { + sprintf(msg, "read_parameter(): Opened %s for FFD parameters", filenametmp); + ffd_log(msg, FFD_NORMAL); + } +#endif } /*--------------------------------------------------------------------------- | Co-simulation ---------------------------------------------------------------------------*/ else { - if((file_para=fopen(para->cosim->para->fileName,"r"))==NULL) { - sprintf(msg, "read_parameter(): Could not open the FFD parameter file %s", - para->cosim->para->fileName); - ffd_log(msg, FFD_ERROR); - return 1; - } - else { - char *lastSlash = strrchr(para->cosim->para->fileName, '/'); - int nPath = strlen(para->cosim->para->fileName) - (strlen(lastSlash) - 1); + if ((file_para = fopen(para->cosim->para->fileName, "r")) == NULL) { + sprintf(msg, "read_parameter(): Could not open the FFD parameter file %s", + para->cosim->para->fileName); + ffd_log(msg, FFD_ERROR); + return 1; + } + else { + char* lastSlash = strrchr(para->cosim->para->fileName, '/'); + int nPath = strlen(para->cosim->para->fileName) - (strlen(lastSlash) - 1); - para->cosim->para->filePath = (char*) calloc(nPath+1, sizeof(char)); - if(para->cosim->para->filePath==NULL) { - ffd_log("read_parameter(): Could not allocate memory for the path to the FFD files", FFD_ERROR); - return 1; - } - else { - strncpy(para->cosim->para->filePath, para->cosim->para->fileName, nPath); - sprintf(msg, "read_parameter(): Opened file %s for FFD parameters with base directory %s", - para->cosim->para->fileName, para->cosim->para->filePath); - ffd_log(msg, FFD_NORMAL); - } - } + para->cosim->para->filePath = (char*)calloc(nPath + 1, sizeof(char)); + if (para->cosim->para->filePath == NULL) { + ffd_log("read_parameter(): Could not allocate memory for the path to the FFD files", FFD_ERROR); + return 1; + } + else { + strncpy(para->cosim->para->filePath, para->cosim->para->fileName, nPath); + sprintf(msg, "read_parameter(): Opened file %s for FFD parameters with base directory %s", + para->cosim->para->fileName, para->cosim->para->filePath); + ffd_log(msg, FFD_NORMAL); + } + } } - /*Use fgets(...) as loop condition, it returns null when it fail to read more characters.*/ + /*Use fgets(...) as loop condition, it reutrns null when it fail to read more characters.*/ while(fgets(string, 400, file_para) != NULL) { if(assign_parameter(para, string)) { - sprintf(msg, "read_parameter(): Could not read data from file %s", - para->cosim->para->fileName); + sprintf(msg, "read_parameter(): Could not read data from file %s", + para->cosim->para->fileName); ffd_log(msg, FFD_ERROR); return 1; } - }/* End of while*/ + }/* End of while */ /*Check if it is end of file*/ /*Use feof() to detect what went wrong after one of the main I/O functions failed*/ /*Do not use feof() as condition of while loop. It will read one more time after last line.*/ if (!feof(file_para)){ - sprintf(msg, "read_parameter(): Could not read data from file %s", - para->cosim->para->fileName); + sprintf(msg, "read_parameter(): Could not read data from file %s", + para->cosim->para->fileName); ffd_log(msg, FFD_ERROR); } fclose(file_para); return 0; -} /* End of read_parameter()*/ +} /* End of read_parameter() */ diff --git a/Buildings/Resources/src/FastFluidDynamics/parameter_reader.h b/Buildings/Resources/src/FastFluidDynamics/parameter_reader.h index 48e75ab61a3..0cfaff1aa6f 100644 --- a/Buildings/Resources/src/FastFluidDynamics/parameter_reader.h +++ b/Buildings/Resources/src/FastFluidDynamics/parameter_reader.h @@ -1,16 +1,22 @@ -/* - * - * @file parameter_reader.c - * - * @brief Read the FFD parameter file - * - * @author Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file parameter_reader.h +| +| \brief Read the FFD parameter file +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #ifndef _PARAMETER_READER_H #define _PARAMETER_READER_H @@ -21,26 +27,31 @@ #include "data_structure.h" #endif +#ifndef _UTILITY_H +#define _UTILITY_H #include "utility.h" +#endif FILE *file_para; FILE *file_log; -/* - * Assign the FFD parameters - * - * @param para Pointer to FFD parameters - * @param string Pointer to data read from the parameter file - * - * @return 0 if no error occurred - */ -int assign_parameter(PARA_DATA *para, char *string); - -/* - * Read the FFD parameter file input.ffd - * - * @param para Pointer to FFD parameters - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Assign the FFD parameters +| +| \param para Pointer to FFD parameters +| \param string Pointer to data read from the parameter file +| +| \return 0 if no error occurred +****************************************************************************/ +int assign_parameter(PARA_DATA* para, char* string); + +/**************************************************************************** +| Read the FFD parameter file input.ffd +| +| \param para Pointer to FFD parameters +| +| \return 0 if no error occurred +****************************************************************************/ int read_parameter(PARA_DATA *para); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/projection.c b/Buildings/Resources/src/FastFluidDynamics/projection.c index 245594453f2..879ca3e0113 100644 --- a/Buildings/Resources/src/FastFluidDynamics/projection.c +++ b/Buildings/Resources/src/FastFluidDynamics/projection.c @@ -1,31 +1,34 @@ -/* - * - * \file projection.h - * - * \brief Solver for projection step - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file projection.c +| +| \brief Solver for projection step +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #include "projection.h" -/* - * Project the velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Project the velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int project(PARA_DATA *para, REAL **var, int **BINDEX) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -39,6 +42,11 @@ int project(PARA_DATA *para, REAL **var, int **BINDEX) { REAL *ae = var[AE], *aw =var[AW], *an = var[AN], *as = var[AS]; REAL dxe,dxw, dyn,dys,dzf,dzb,Dx,Dy,Dz; REAL *flagu = var[FLAGU],*flagv = var[FLAGV],*flagw = var[FLAGW]; + int num_swipe = para->solv->swipe_pro; + REAL *flagp = var[FLAGP]; + REAL residual = 0.0; + REAL rho = para->prob->rho; + REAL cell_vol = 0.0; /**************************************************************************** | Calculate all coefficients @@ -60,7 +68,7 @@ int project(PARA_DATA *para, REAL **var, int **BINDEX) { as[IX(i,j,k)] = Dx*Dz/dys; af[IX(i,j,k)] = Dx*Dy/dzf; ab[IX(i,j,k)] = Dx*Dy/dzb; - b[IX(i,j,k)] = Dx*Dy*Dz/dt*((u[IX(i-1,j,k)]-u[IX(i,j,k)])/Dx + b[IX(i,j,k)] = rho*Dx*Dy*Dz/dt*((u[IX(i-1,j,k)]-u[IX(i,j,k)])/Dx + (v[IX(i,j-1,k)]-v[IX(i,j,k)])/Dy + (w[IX(i,j,k-1)]-w[IX(i,j,k)])/Dz); END_FOR @@ -74,8 +82,23 @@ int project(PARA_DATA *para, REAL **var, int **BINDEX) { ap[IX(i,j,k)] = ae[IX(i,j,k)] + aw[IX(i,j,k)] + as[IX(i,j,k)] + an[IX(i,j,k)] + af[IX(i,j,k)] + ab[IX(i,j,k)]; END_FOR + + /* solve equations */ + if (para->solv->solver == GS) { + Gauss_Seidel(para, var, p, flagp, num_swipe); + } + else { + Jacobi(para, var, p, flagp, num_swipe); + } - GS_P(para, var, IP, p); + /* check residual after iterative solver */ + if (para->solv->check_residual == 1) { + residual = check_residual(para, var, p, var[FLAGP]); + sprintf(msg, "Residual in projection: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + + /* set boundary condition */ set_bnd_pressure(para, var, p,BINDEX); /**************************************************************************** @@ -83,18 +106,60 @@ int project(PARA_DATA *para, REAL **var, int **BINDEX) { ****************************************************************************/ FOR_U_CELL if (flagu[IX(i,j,k)]>=0) continue; - u[IX(i,j,k)] -= dt*(p[IX(i+1,j,k)]-p[IX(i,j,k)]) / (x[IX(i+1,j,k)]-x[IX(i,j,k)]); + u[IX(i,j,k)] -= dt/rho*(p[IX(i+1,j,k)]-p[IX(i,j,k)]) / (x[IX(i+1,j,k)]-x[IX(i,j,k)]); END_FOR FOR_V_CELL if (flagv[IX(i,j,k)]>=0) continue; - v[IX(i,j,k)] -= dt*(p[IX(i,j+1,k)]-p[IX(i,j,k)]) / (y[IX(i,j+1,k)]-y[IX(i,j,k)]); + v[IX(i,j,k)] -= dt/rho*(p[IX(i,j+1,k)]-p[IX(i,j,k)]) / (y[IX(i,j+1,k)]-y[IX(i,j,k)]); END_FOR FOR_W_CELL if (flagw[IX(i,j,k)]>=0) continue; - w[IX(i,j,k)] -= dt*(p[IX(i,j,k+1)]-p[IX(i,j,k)]) / (z[IX(i,j,k+1)]-z[IX(i,j,k)]); + w[IX(i,j,k)] -= dt/rho*(p[IX(i,j,k+1)]-p[IX(i,j,k)]) / (z[IX(i,j,k+1)]-z[IX(i,j,k)]); END_FOR + /**************************************************************************** + | Check mass imbalance if needed + ****************************************************************************/ + if (para->solv->check_residual == 1) { + residual = check_mass_imbalance(para, var); + sprintf(msg, "mass imbalance after projection: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + return 0; -} /* End of project( )*/ +} /* End of project( ) */ + +/**************************************************************************** +| Check the mass imbalance after projjection +| This usually indicates that the energy balance after advection could be problematic. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_mass_imbalance(PARA_DATA *para, REAL **var) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL *u = var[VX], *v = var[VY], *w = var[VZ]; + REAL *gx = var[GX], *gy = var[GY], *gz = var[GZ]; + REAL *flagp = var[FLAGP]; + REAL tmp = 0.0, imbalance = 0.0; + int count = 0; + + FOR_EACH_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + imbalance = (u[IX(i, j, k)] - u[IX(i - 1, j, k)]) / (gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]) + + (v[IX(i, j, k)] - v[IX(i, j - 1, k)]) / (gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]) + + (w[IX(i, j, k)] - w[IX(i, j, k - 1)]) / (gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]); + tmp += imbalance*imbalance; + count += 1; + END_FOR + return sqrt(tmp/count); +} + diff --git a/Buildings/Resources/src/FastFluidDynamics/projection.h b/Buildings/Resources/src/FastFluidDynamics/projection.h index ebe30338196..97449e668de 100644 --- a/Buildings/Resources/src/FastFluidDynamics/projection.h +++ b/Buildings/Resources/src/FastFluidDynamics/projection.h @@ -1,19 +1,22 @@ -/* - * - * @file projection.h - * - * @brief Solver for projection step - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file projection.c +| +| \brief Solver for projection step +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #ifndef _PROJECTION_H #define _PROJECTION_H #endif @@ -43,13 +46,27 @@ #include "boundary.h" #endif -/* - * Project the velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int project(PARA_DATA *para, REAL **var, int **BINDEX); +/**************************************************************************** +| Project the velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int project(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Check the mass imbalance after projjection +| This usually indicates that the energy balance after advection could be problematic. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_mass_imbalance(PARA_DATA *para, REAL **var); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/sci_reader.c b/Buildings/Resources/src/FastFluidDynamics/sci_reader.c index 93591e25387..2ea70934213 100644 --- a/Buildings/Resources/src/FastFluidDynamics/sci_reader.c +++ b/Buildings/Resources/src/FastFluidDynamics/sci_reader.c @@ -1,67 +1,289 @@ -/* - * - * \file sci_reader.c - * - * \brief Read mesh and simulation data defined by SCI - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file sci_reader.c +| +| \brief Read mesh and simulation data defined by SCI +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #include "sci_reader.h" +/*Extern global variables from ISAT*/ +#ifdef FFD_ISAT +extern char filepath[]; +extern double ffdInput[]; +extern double AInlet[]; +#endif + +/**************************************************************************** +| check the input forat as current FFD accepts a format excluding unused info +| +| \return 0 if no error occurred +****************************************************************************/ /* - * Read the basic index information from input.cfd - * - * Specific method for advection will be selected according to the variable - * type. - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ -int read_sci_max(PARA_DATA *para, REAL **var) { - char string[400]; - - /* Open the file*/ +int check_input_format() { + // Embed a python function in C to perform the edit for a file + // Inspired by online resource: https://stackoverflow.com/questions/12142174/run-a-python-script-with-arguments + // Check my Wiki Page: https://github.com/se-thermalanalytics/DC-DoE-CU-LBL-SE/wiki/Embed-python-script-in-C-codes + FILE* file; + int argc; + char * argv[1]; + + argc = 1; + argv[0] = "check_input.py"; + + // set up a python environment + Py_SetProgramName(argv[0]); + Py_Initialize(); + PySys_SetArgv(argc, argv); + file = fopen(argv[0],"r"); + PyRun_SimpleFile(file, argv[0]); + Py_Finalize(); + + return 0 ; +} +*/ +/**************************************************************************** +| Read the basic index information from input.cfd +| +| Specific method for advection will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ +int read_sci_max(PARA_DATA* para, REAL** var) { + char string[400]; + + /* Open the file */ +#ifndef FFD_ISAT /*if no ISAT*/ if((file_params=fopen(para->inpu->parameter_file_name,"r")) == NULL) { - fprintf(stderr,"Error:can not open the file \"%s\".\n", - para->inpu->parameter_file_name); - return 1; + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_ERROR); + return 1; } - - /* Get the first line for the length in X, Y and Z directions*/ +#else /*if called by ISAT*/ + char filenametmp[400] = { 0 }; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "input.cfd"); + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } +#endif + + /* Get the first line for the length in X, Y and Z directions */ fgets(string, 400, file_params); - sscanf(string,"%lf %lf %lf", ¶->geom->Lx, ¶->geom->Ly, ¶->geom->Lz); + + if (ifDouble) { + sscanf(string, "%lf %lf %lf", ¶->geom->Lx, ¶->geom->Ly, ¶->geom->Lz); + } + else { + sscanf(string, "%f %f %f", ¶->geom->Lx, ¶->geom->Ly, ¶->geom->Lz); + } + - /* Get the second line for the number of cells in X, Y and Z directions*/ + /* Get the second line for the number of cells in X, Y and Z directions */ fgets(string, 400, file_params); - sscanf(string,"%d %d %d", ¶->geom->imax, ¶->geom->jmax, - ¶->geom->kmax); + sscanf(string, "%d %d %d", ¶->geom->imax, ¶->geom->jmax, + ¶->geom->kmax); fclose(file_params); return 0; -} /* End of read_sci_max()*/ +} /* End of read_sci_max() */ + +/**************************************************************************** +| Check the number of racks in the input file +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_num_racks(PARA_DATA* para, REAL** var, int** BINDEX) { + char string[400]; + int tmp = 0; + + /* Open the file */ +#ifndef FFD_ISAT /*if no ISAT*/ + if ((file_params = fopen(para->inpu->parameter_file_name, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_ERROR); + return 1; + } +#else /*if called by ISAT*/ + char filenametmp[400] = { 0 }; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "input.cfd"); + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } +#endif + + /* Read line by line */ + while (fgets(string, 400, file_params) != NULL) { + /* if Rack is in the line, then count it */ + if (strstr(string, "Rack") != NULL) tmp += 1; + } + /* close the file */ + fclose(file_params); + /* write the number of rack to global parameter */ + para->bc->nb_rack = tmp; - /* - * Read other information from input.cfd - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Type of variable - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ + /* return 0 */ + return 0; +} + +/**************************************************************************** +| Check the number of tiles in the input file +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_num_tiles(PARA_DATA* para, REAL** var, int** BINDEX) { + char string[400]; + int tmp = 0; + + /* Open the file */ +#ifndef FFD_ISAT /*if no ISAT*/ + if ((file_params = fopen(para->inpu->parameter_file_name, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_ERROR); + return 1; + } +#else /*if called by ISAT*/ + char filenametmp[400] = { 0 }; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "input.cfd"); + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } +#endif + + /* Read line by line */ + while(fgets(string, 400, file_params) != NULL) { + /* if Rack is in the line, then count it */ + if (strstr(string, "Tile") != NULL) tmp += 1; + } + /* close the file */ + fclose(file_params); + + /* return 0 */ + return tmp; +} + +/**************************************************************************** +| Check the number of walls in the input file +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_num_walls(PARA_DATA* para, REAL** var, int** BINDEX) { + char string[400]; + int tmp1 = 0, tmp2 = 0, tmp3 = 0, tmp4 = 0, i; + + /* Open the file */ +#ifndef FFD_ISAT /*if no ISAT*/ + if ((file_params = fopen(para->inpu->parameter_file_name, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_ERROR); + return 1; + } +#else /*if called by ISAT*/ + char filenametmp[400] = { 0 }; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "input.cfd"); + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } +#endif + + /* Ignore the first seven lines */ + for (i = 0; i < 7; i++) + fgets(string, 400, file_params); + + /* Ignore lines for inlet boundaries */ + fgets(string, 400, file_params); + sscanf(string, "%d", &tmp1); + for (i = 0; i < tmp1; i++) { + fgets(string, 400, file_params); + fgets(string, 400, file_params); + } + + /* Ignore lines for outlet boundaries */ + fgets(string, 400, file_params); + sscanf(string, "%d", &tmp2); + for (i = 0; i < tmp2; i++) { + fgets(string, 400, file_params); + fgets(string, 400, file_params); + } + + /* Ignore lines for block boundaries */ + fgets(string, 400, file_params); + sscanf(string, "%d", &tmp3); + for (i = 0; i < tmp3; i++) { + fgets(string, 400, file_params); + fgets(string, 400, file_params); + } + + /* Get the number of wall boundaries */ + fgets(string, 400, file_params); + sscanf(string, "%d", &tmp4); + + /* close the file */ + fclose(file_params); + + /* return the number of wall boundaries */ + return tmp4; +} + +/**************************************************************************** +| Read other information from sci input file +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Type of variable +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +/*FIXME: THIS FUNCTION IS TOO LENGTHT AND DIFFICULT TO READ AND MAINTAIN---WEITIAN*/ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { int i, j, k; int ii,ij,ik; @@ -84,70 +306,454 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { REAL *delx, *dely, *delz; REAL *flagp = var[FLAGP]; int bcnameid = -1; - - /* Open the parameter file*/ - if((file_params=fopen(para->inpu->parameter_file_name,"r")) == NULL ) { - sprintf(msg,"read_sci_input(): Could not open the file \"%s\".", - para->inpu->parameter_file_name); - ffd_log(msg, FFD_ERROR); - return 1; - } - - sprintf(msg, "read_sci_input(): Start to read sci input file %s", - para->inpu->parameter_file_name); - ffd_log(msg, FFD_NORMAL); - - /* Ignore the first and second lines*/ + int tile_or_outlet = 2; + char tile_name_tmp[1000]; /* temporarily store the tile name */ + char rack_name_tmp[1000]; /* temporarily store the rack name */ + char curtain_name_tmp[1000]; /*temporarily store the curtain name */ + REAL curtain_open_ratio = 0.0; /*temporarily store the curtain opening ratio */ + REAL tile_opening = 1.0; + int id_rack = 0; /* the unique id for rack */ + REAL momentum_kick = 0.0; /* momentum force */ + REAL h_momentum = 0.1524; /* 0.1524 equals to 6 inches */ + REAL beta_tmp = 0.0; /* openting ratio of perforated tile */ + +#ifdef FFD_ISAT /*if called by ISAT*/ + + /* Declare and initialize variables */ + int num_input = 0, num_inlet = 0, num_block = 0, num_wall = 0, dir_inlet = 0; + /* temperature, heat flux or velocity will be overwritten or not */ + int inlet_temp_re[100] = { 0 }; + int inlet_vel_re[100] = { 0 }; + int block_re[100] = { 0 }; + int wall_re[100] = { 0 }; + /* temperature, heat flux or velocity will be overwritten by which isat input */ + int inlet_temp_wh[100] = { 0 }; + int inlet_vel_wh[100] = { 0 }; + int block_wh[100] = { 0 }; + int wall_wh[100] = { 0 }; + /* Value of temperature, heat flux or velocity assigned by isat inputs */ + REAL inlet_temp_value[100] = { 0 }; + REAL inlet_vel_value[100] = { 0 }; + REAL inlet_area_value[100] = { 0 }; + REAL block_value[100] = { 0 }; + REAL wall_value[100] = { 0 }; + REAL default_mass_flowrate = 0; + REAL updated_mass_flowrate = 0; + int inlet_vel_re_sum = 0; + + INPUT_TYPE inpu_name[10] = { sur_temp }; + + /* Open the set.isat file */ + char tmp[400], tmp1[400]; + char filenametmp[400]; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "set.isat"); + + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "read_sci_input(): Start to read the file %s", filenametmp); + ffd_log(msg, FFD_NORMAL); + + /* Read the settings for inputs */ + int next = 0; + while (next == 0) { + /*fgets(string, 400, file_params);*/ + if (fgets(string, 400, file_params) == NULL) + next = 1; + + if (EOF == sscanf(string, "%s", tmp)) { + continue; + } + + /* Read isat.num_input */ + if (!strcmp(tmp, "isat.num_input")) { + sscanf(string, "%s%d", tmp, &num_input); + if (num_input < 11) { + sprintf(msg, "\t\t%s=%d", tmp, num_input); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_isat_parameters(): the current version only supports no more than ten inputs"); + ffd_log(msg, FFD_ERROR); + return 1; + } + } + + /* Read inpu.inpu_name */ + else if (!strcmp(tmp, "/*inpu.inpu_name:")) { + sprintf(msg, "\tRead input settings of isat and ffd:"); + ffd_log(msg, FFD_NORMAL); + for (i = 0; i < num_input; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inpu_name")) { + sscanf(string, "%s%s", tmp, tmp1); + if (!strcmp(tmp1, "inlet_temp")) + inpu_name[i] = inlet_temp; + else if (!strcmp(tmp1, "inlet_mass")) + inpu_name[i] = inlet_mass; + else if (!strcmp(tmp1, "inlet_vel")) + inpu_name[i] = inlet_vel; + else if (!strcmp(tmp1, "block_temp")) + inpu_name[i] = block_temp; + else if (!strcmp(tmp1, "block_hea")) + inpu_name[i] = block_hea; + else if (!strcmp(tmp1, "rack_hea")) + inpu_name[i] = rack_hea; + else if (!strcmp(tmp1, "sur_temp")) + inpu_name[i] = sur_temp; + else if (!strcmp(tmp1, "sur_hea")) + inpu_name[i] = sur_hea; + else { + sprintf(msg, "read_isat_parameters(): %s is not valid input for %s", tmp1, tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "\t\t%s[%d]=%s", tmp, i, tmp1); + ffd_log(msg, FFD_NORMAL); + } /*end of if (!strcmp(tmp, "inpu.inpu_name"))*/ + else { + sprintf(msg, "read_isat_parameters(): wrong format for %s, which should be inpu.inpu_name", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + } /*End of for (i = 0; i < num_input; i++)*/ + } /*End of else if (!strcmp(tmp, "/*inpu.inpu_name:"))*/ + + /* Read inpu.num_inlet */ + else if (!strcmp(tmp, "inpu.num_inlet")) { + sscanf(string, "%s%d", tmp, &num_inlet); + sprintf(msg, "read_sci_input(): %s=%d", tmp, num_inlet); + ffd_log(msg, FFD_NORMAL); + } + /* Read inpu.num_block */ + else if (!strcmp(tmp, "inpu.num_block")) { + sscanf(string, "%s%d", tmp, &num_block); + sprintf(msg, "read_sci_input(): %s=%d", tmp, num_block); + ffd_log(msg, FFD_NORMAL); + } + /* Read inpu.num_wall */ + else if (!strcmp(tmp, "inpu.num_wall")) { + sscanf(string, "%s%d", tmp, &num_wall); + sprintf(msg, "read_sci_input(): %s=%d", tmp, num_wall); + ffd_log(msg, FFD_NORMAL); + } + /* Read inpu.dir_inlet */ + else if (!strcmp(tmp, "inpu.dir_inlet")) { + if (num_inlet > 0) { + sscanf(string, "%s%d", tmp, &dir_inlet); + sprintf(msg, "read_sci_input(): %s=%d", tmp, dir_inlet); + ffd_log(msg, FFD_NORMAL); + } + } + /* Read inpu.inpu.default_mass_flowrate */ + else if (!strcmp(tmp, "inpu.default_mass_flowrate")) { + if (num_inlet > 0) { + sscanf(string, "%s%lf", tmp, &default_mass_flowrate); + sprintf(msg, "read_sci_input(): %s=%lf", tmp, default_mass_flowrate); + ffd_log(msg, FFD_NORMAL); + } + } + /* Read inpu.inlet_temp_re if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inlet_area_value:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_area_value")) { + sscanf(string, "%s%lf", tmp, &inlet_area_value[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%lf", tmp, i, inlet_area_value[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.inlet_temp_re", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_temp_re")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_temp_re:")) */ + + /* Read inpu.inlet_temp_re if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_temp_re:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_temp_re")) { + sscanf(string, "%s%d", tmp, &inlet_temp_re[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, inlet_temp_re[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.inlet_temp_re", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_temp_re")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_temp_re:")) */ + + /* Read inpu.inlet_vel_re if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_vel_re:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_vel_re")) { + sscanf(string, "%s%d", tmp, &inlet_vel_re[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, inlet_vel_re[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.inlet_vel_re", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_vel_re")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_vel_re:")) */ + + /* Read inpu.inlet_temp_wh if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_temp_wh:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_temp_wh")) { + sscanf(string, "%s%d", tmp, &inlet_temp_wh[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, inlet_temp_wh[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.inlet_temp_wh", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_temp_wh")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_temp_wh:")) */ + + /* Read inpu.inlet_u_wh if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_vel_wh:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_vel_wh")) { + sscanf(string, "%s%d", tmp, &inlet_vel_wh[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, inlet_vel_wh[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.inlet_vel_wh", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_vel_wh")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_vel_wh:")) */ + + /* Read inpu.block_re if inpu.num_block > 0 */ + else if (!strcmp(tmp, "/*inpu.block_re:")) { + if (num_block > 0) { + for (i = 0; i < num_block; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.block_re")) { + sscanf(string, "%s%d", tmp, &block_re[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, block_re[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.block_re", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.block_re")) */ + } /* End of for (i = 0; i < num_block; i++) */ + } /* End of if (num_block > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.block_re:")) */ + + /* Read inpu.block_wh if inpu.num_block > 0 */ + else if (!strcmp(tmp, "/*inpu.block_wh:")) { + if (num_block > 0) { + for (i = 0; i < num_block; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.block_wh")) { + sscanf(string, "%s%d", tmp, &block_wh[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, block_wh[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.block_wh", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.block_wh")) */ + } /* End of for (i = 0; i < num_block; i++) */ + } /* End of if (num_block > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.block_wh:")) */ + + /* Read inpu.wall_re if inpu.num_wall > 0 */ + else if (!strcmp(tmp, "/*inpu.wall_re:")) { + if (num_wall > 0) { + for (i = 0; i < num_wall; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.wall_re")) { + sscanf(string, "%s%d", tmp, &wall_re[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, wall_re[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.wall_re", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.wall_re")) */ + } /* End of for (i = 0; i < num_wall; i++) */ + } /* End of if (num_wall > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.wall_re:")) */ + + /* Read inpu.wall_wh if inpu.num_wall > 0 */ + else if (!strcmp(tmp, "/*inpu.wall_wh:")) { + if (num_wall > 0) { + for (i = 0; i < num_wall; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.wall_wh")) { + sscanf(string, "%s%d", tmp, &wall_wh[i]); + sprintf(msg, "read_sci_input(): %s[%d]=%d", tmp, i, wall_wh[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "read_sci_input(): wrong format for %s, which should be inpu.wall_wh", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.wall_wh")) */ + } /* End of for (i = 0; i < num_wall; i++) */ + } /* End of if (num_wall > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.wall_wh:")) */ + } /* End of while (next = 0)*/ + + fclose(file_params); + + /* Assign value for inlet by isat inputs */ + if (num_inlet != 0) { + for (i = 0; i < num_inlet; i++) { + if (inlet_temp_re[i] == 1) + inlet_temp_value[i] = ffdInput[inlet_temp_wh[i] - 1]; + if (inlet_vel_re[i] == 1) + inlet_vel_value[i] = ffdInput[inlet_vel_wh[i] - 1] / inlet_area_value[i] / para->prob->rho; + updated_mass_flowrate = updated_mass_flowrate + ffdInput[inlet_vel_wh[i] - 1]; + } + } + /* Assign value for block by isat inputs */ + if (num_block != 0) { + for (i = 0; i < num_block; i++) { + if (block_re[i] == 1) + block_value[i] = ffdInput[block_wh[i] - 1]; + } + } + /* Assign value for wall by isat inputs */ + if (num_wall != 0) { + for (i = 0; i < num_wall; i++) { + if (wall_re[i] == 1) + wall_value[i] = ffdInput[wall_wh[i] - 1]; + } + } + +#endif + + /* Open the parameter file */ +#ifndef FFD_ISAT /*if no ISAT*/ + if ((file_params = fopen(para->inpu->parameter_file_name, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "read_sci_input(): Start to read sci input file %s", + para->inpu->parameter_file_name); + ffd_log(msg, FFD_NORMAL); +#else /*if called by ISAT*/ + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "input.cfd"); + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "read_sci_input(): Start to read sci input file %s", + filenametmp); + ffd_log(msg, FFD_NORMAL); +#endif + + /* Ignore the first and second lines */ fgets(string, 400, file_params); fgets(string, 400, file_params); /***************************************************************************** | Convert the cell dimensions defined by SCI to coordinates in FFD *****************************************************************************/ - /* Allocate temporary memory for dimension of each cell*/ - delx = (REAL *) malloc ((imax+2)*sizeof(REAL)); - dely = (REAL *) malloc ((jmax+2)*sizeof(REAL)); - delz = (REAL *) malloc ((kmax+2)*sizeof(REAL)); - - if( !delx || !dely ||!delz ) { - ffd_log("read_sci_input(): Cannot allocate memory for delx, dely or delz.", - FFD_ERROR); - return 1; + /* Allocate temporary memory for dimension of each cell */ + delx = (REAL*)malloc((imax + 2) * sizeof(REAL)); + dely = (REAL*)malloc((jmax + 2) * sizeof(REAL)); + delz = (REAL*)malloc((kmax + 2) * sizeof(REAL)); + + if (!delx || !dely || !delz) { + ffd_log("read_sci_input(): Cannot allocate memory for delx, dely or delz.", + FFD_ERROR); + return 1; } - delx[0]=0; - dely[0]=0; - delz[0]=0; + delx[0] = 0; + dely[0] = 0; + delz[0] = 0; + + /* Read cell dimensions in X, Y, Z directions */ + if (ifDouble) { + for (i = 1; i <= imax; i++) fscanf(file_params, "%lf", &delx[i]); + fscanf(file_params, "\n"); + for (j = 1; j <= jmax; j++) fscanf(file_params, "%lf", &dely[j]); + fscanf(file_params, "\n"); + for (k = 1; k <= kmax; k++) fscanf(file_params, "%lf", &delz[k]); + fscanf(file_params, "\n"); + } + else { + for (i = 1; i <= imax; i++) fscanf(file_params, "%f", &delx[i]); + fscanf(file_params, "\n"); + for (j = 1; j <= jmax; j++) fscanf(file_params, "%f", &dely[j]); + fscanf(file_params, "\n"); + for (k = 1; k <= kmax; k++) fscanf(file_params, "%f", &delz[k]); + fscanf(file_params, "\n"); + } - /* Read cell dimensions in X, Y, Z directions*/ - for(i=1; i<=imax; i++) fscanf(file_params, "%lf", &delx[i]); - fscanf(file_params,"\n"); - for(j=1; j<=jmax; j++) fscanf(file_params, "%lf", &dely[j]); - fscanf(file_params,"\n"); - for(k=1; k<=kmax; k++) fscanf(file_params, "%lf", &delz[k]); - fscanf(file_params,"\n"); - /* Store the locations of grid cell surfaces*/ + + /* Store the locations of grid cell surfaces */ tempx = 0.0; tempy = 0.0; tempz = 0.0; - for(i=0; i<=imax+1; i++) { - tempx += delx[i]; - if(i>=imax) tempx = Lx; - for(j=0; j<=jmax+1; j++) - for(k=0; k<=kmax+1; k++) var[GX][IX(i,j,k)]=tempx; + for (i = 0; i <= imax + 1; i++) { + tempx += delx[i]; + if (i >= imax) tempx = Lx; + for (j = 0; j <= jmax + 1; j++) + for (k = 0; k <= kmax + 1; k++) var[GX][IX(i, j, k)] = tempx; } - for(j=0; j<=jmax+1; j++) { - tempy += dely[j]; - if(j>=jmax) tempy = Ly; - for(i=0; i<=imax+1; i++) - for(k=0; k<=kmax+1; k++) var[GY][IX(i,j,k)] = tempy; + for (j = 0; j <= jmax + 1; j++) { + tempy += dely[j]; + if (j >= jmax) tempy = Ly; + for (i = 0; i <= imax + 1; i++) + for (k = 0; k <= kmax + 1; k++) var[GY][IX(i, j, k)] = tempy; } - for(k=0; k<=kmax+1; k++) { - tempz += delz[k]; - if(k>=kmax) tempz = Lz; - for(i=0; i<=imax+1; i++) - for(j=0; j<=jmax+1; j++) var[GZ][IX(i,j,k)] = tempz; + for (k = 0; k <= kmax + 1; k++) { + tempz += delz[k]; + if (k >= kmax) tempz = Lz; + for (i = 0; i <= imax + 1; i++) + for (j = 0; j <= jmax + 1; j++) var[GZ][IX(i, j, k)] = tempz; } /***************************************************************************** @@ -155,29 +761,29 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { | the coordinates for the cell center *****************************************************************************/ FOR_ALL_CELL - if(i<1) - x[IX(i,j,k)] = 0; - else if(i>imax) - x[IX(i,j,k)] = Lx; - else - x[IX(i,j,k)] = (REAL) 0.5 * (gx[IX(i,j,k)]+gx[IX(i-1,j,k)]); - - if(j<1) - y[IX(i,j,k)] = 0; - else if(j>jmax) - y[IX(i,j,k)] = Ly; - else - y[IX(i,j,k)] = (REAL) 0.5 * (gy[IX(i,j,k)]+gy[IX(i,j-1,k)]); - - if(k<1) - z[IX(i,j,k)] = 0; - else if(k>kmax) - z[IX(i,j,k)] = Lz; - else - z[IX(i,j,k)] = (REAL) 0.5 * (gz[IX(i,j,k)]+gz[IX(i,j,k-1)]); + if (i < 1) + x[IX(i, j, k)] = 0; + else if (i > imax) + x[IX(i, j, k)] = Lx; + else + x[IX(i, j, k)] = (REAL)0.5 * (gx[IX(i, j, k)] + gx[IX(i - 1, j, k)]); + + if (j < 1) + y[IX(i, j, k)] = 0; + else if (j > jmax) + y[IX(i, j, k)] = Ly; + else + y[IX(i, j, k)] = (REAL)0.5 * (gy[IX(i, j, k)] + gy[IX(i, j - 1, k)]); + + if (k < 1) + z[IX(i, j, k)] = 0; + else if (k > kmax) + z[IX(i, j, k)] = Lz; + else + z[IX(i, j, k)] = (REAL)0.5 * (gz[IX(i, j, k)] + gz[IX(i, j, k - 1)]); END_FOR - /* Get the wall property*/ + /* Get the wall property */ fgets(string, 400, file_params); sscanf(string,"%d%d%d%d%d%d", &IWWALL, &IEWALL, &ISWALL, &INWALL, &IBWALL, &ITWALL); @@ -193,109 +799,175 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { /***************************************************************************** | Read the inlet boundary conditions *****************************************************************************/ - /* Get number of inlet boundaries*/ + /* Get number of inlet boundaries */ fgets(string, 400, file_params); - sscanf(string,"%d", ¶->bc->nb_inlet); + sscanf(string, "%d", ¶->bc->nb_inlet); sprintf(msg, "read_sci_input(): para->bc->nb_inlet=%d", para->bc->nb_inlet); ffd_log(msg, FFD_NORMAL); - index=0; - /* Set inlet boundary*/ - if(para->bc->nb_inlet!=0) { - /*------------------------------------------------------------------------- - | Allocate the memory for bc name - -------------------------------------------------------------------------*/ - para->bc->inletName = (char**) malloc(para->bc->nb_inlet*sizeof(char*)); - if(para->bc->inletName==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->inletName.", FFD_ERROR); - return 1; - } - - /*------------------------------------------------------------------------- - | Loop for each inlet boundary - --------------------------------------------------------------------------*/ - for(i=0; ibc->nb_inlet; i++) { - /*....................................................................... - | Get the names of boundary - .......................................................................*/ - fgets(string, 400, file_params); - /* Get the length of name (The name may contain white space)*/ - for(j=0; string[j] != '\n'; j++) { - continue; - } - - para->bc->inletName[i] = (char*)malloc((j+1)*sizeof(char)); - if(para->bc->inletName[i]==NULL) { - sprintf(msg, "read_sci_input(): Could not allocate memory for " - "para->bc->inletName[%d].", i); - ffd_log(msg, FFD_ERROR); - return 1; - } - - strncpy(para->bc->inletName[i], (const char*)string, j); - /* Add an ending*/ - para->bc->inletName[i][j] = '\0'; - sprintf(msg, "read_sci_input(): para->bc->inletName[%d]=%s", - i, para->bc->inletName[i]); - ffd_log(msg, FFD_NORMAL); - /*....................................................................... - | Get the boundary conditions - .......................................................................*/ - fgets(string, 400, file_params); - sscanf(string,"%d%d%d%d%d%d%lf%lf%lf%lf%lf", &SI, &SJ, &SK, &EI, - &EJ, &EK, &TMP, &MASS, &U, &V, &W); - sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VZ=%f, T=%f, Xi=%f", - U, V, W, TMP, MASS); - ffd_log(msg, FFD_NORMAL); - if(EI==0) { - if(SI==1) SI = 0; - EI = SI + EI; - EJ = SJ + EJ - 1; - EK = SK + EK - 1; - } - - if(EJ==0) { - if(SJ==1) SJ = 0; - EI = SI + EI - 1; - EJ = SJ + EJ; - EK = SK + EK - 1; - } - - if(EK==0) { - if(SK==1) SK = 0; - EI = SI + EI - 1; - EJ = SJ + EJ - 1; - EK = SK + EK; - } - - /* Assign the inlet boundary condition for each cell*/ - for(ii=SI; ii<=EI; ii++) - for(ij=SJ; ij<=EJ; ij++) - for(ik=SK; ik<=EK; ik++) { - BINDEX[0][index] = ii; - BINDEX[1][index] = ij; - BINDEX[2][index] = ik; - BINDEX[4][index] = i; - index++; - - var[TEMPBC][IX(ii,ij,ik)] = TMP; - var[VXBC][IX(ii,ij,ik)] = U; - var[VYBC][IX(ii,ij,ik)] = V; - var[VZBC][IX(ii,ij,ik)] = W; - var[Xi1BC][IX(ii,ij,ik)] = MASS; - - flagp[IX(ii,ij,ik)] = INLET; /* Cell flag to be inlet*/ - if(para->outp->version==DEBUG) { - sprintf(msg, "read_sci_input(): get inlet cell[%d,%d,%d]=%.1f", - ii, ij, ik, flagp[IX(ii,ij,ik)]); - ffd_log(msg, FFD_NORMAL); - } - - } /* End of assigning the inlet B.C. for each cell*/ - - } /* End of loop for each inlet boundary*/ - } /* End of setting inlet boundary*/ + index = 0; + /* Set inlet boundary */ + if (para->bc->nb_inlet != 0) { + /*------------------------------------------------------------------------- + | Allocate the memory for bc name + -------------------------------------------------------------------------*/ + para->bc->inletName = (char**)malloc(para->bc->nb_inlet * sizeof(char*)); + if (para->bc->inletName == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->inletName.", FFD_ERROR); + return 1; + } + + /*------------------------------------------------------------------------- + | Loop for each inlet boundary + --------------------------------------------------------------------------*/ + for (i = 0; i < para->bc->nb_inlet; i++) { + /*....................................................................... + | Get the names of boundary + .......................................................................*/ + fgets(string, 400, file_params); + /* Get the length of name (The name may contain white space) */ + for (j = 0; string[j] != '\n'; j++) { + continue; + } + + para->bc->inletName[i] = (char*)malloc((j + 1) * sizeof(char)); + if (para->bc->inletName[i] == NULL) { + sprintf(msg, "read_sci_input(): Could not allocate memory for " + "para->bc->inletName[%d].", i); + ffd_log(msg, FFD_ERROR); + return 1; + } + + strncpy(para->bc->inletName[i], (const char*)string, j); + /* Add an ending */ + para->bc->inletName[i][j] = '\0'; + sprintf(msg, "read_sci_input(): para->bc->inletName[%d]=%s", + i, para->bc->inletName[i]); + ffd_log(msg, FFD_NORMAL); + /*....................................................................... + | Get the boundary conditions + .......................................................................*/ + fgets(string, 400, file_params); + + if (ifDouble) { + sscanf(string, "%d%d%d%d%d%d%lf%lf%lf%lf%lf", &SI, &SJ, &SK, &EI, + &EJ, &EK, &TMP, &MASS, &U, &V, &W); + } + else { + sscanf(string, "%d%d%d%d%d%d%f%f%f%f%f", &SI, &SJ, &SK, &EI, + &EJ, &EK, &TMP, &MASS, &U, &V, &W); + } + sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VZ=%f, T=%f, Xi=%f", + U, V, W, TMP, MASS); + ffd_log(msg, FFD_NORMAL); + +#ifdef FFD_ISAT + /* Overwrite value by ISAT inputs for inlets */ + if (num_inlet > 0) { + if (inlet_temp_re[i]) + TMP = inlet_temp_value[i]; + if (dir_inlet == 1) { + if (inlet_vel_re[i]) + U = inlet_vel_value[i]; + } + else if (dir_inlet == 2) { + if (inlet_vel_re[i]) + V = inlet_vel_value[i]; + } + else if (dir_inlet == 3) { + if (inlet_vel_re[i]) + W = inlet_vel_value[i]; + } + sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VZ=%f, T=%f, Xi=%f after overwrite.", + U, V, W, TMP, MASS); + ffd_log(msg, FFD_NORMAL); + } +#endif + + /*....................................................................... + | Assign the boundary conditions to cells + .......................................................................*/ + if (EI == 0) { + if (SI == 1) SI = 0; + EI = SI + EI; + EJ = SJ + EJ - 1; + EK = SK + EK - 1; + } + + if (EJ == 0) { + if (SJ == 1) SJ = 0; + EI = SI + EI - 1; + EJ = SJ + EJ; + EK = SK + EK - 1; + } + + if (EK == 0) { + if (SK == 1) SK = 0; + EI = SI + EI - 1; + EJ = SJ + EJ - 1; + EK = SK + EK; + } + /*....................................................................... + | If it is a perforated tile, then calculate the momentum kick + | 'Jet' is the key word + | Suppose the height of momentum height is 6 inch + .......................................................................*/ + if (strstr(para->bc->inletName[i], "Jet") != NULL) { + /* find beta */ + if (ifDouble) { + sscanf(para->bc->inletName[i], "%s%lf", tile_name_tmp, &beta_tmp); + } + else { + sscanf(para->bc->inletName[i], "%s%f", tile_name_tmp, &beta_tmp); + } + /* find momentum and source term */ + for (ii = SI; ii <= EI; ii++) { + for (ij = SJ; ij <= EJ; ij++) { + for (ik = SK; ik <= EK; ik++) { + if (SI == EI) { + momentum_kick = get_momentum_kick(fabs(U), beta_tmp, h_momentum); + var[VXS][IX(ii + 1, ij, ik)] = momentum_kick * vol(para, var, ii + 1, ij, ik); + } + else if (SJ == EJ) { + momentum_kick = get_momentum_kick(fabs(V), beta_tmp, h_momentum); + var[VYS][IX(ii, ij + 1, ik)] = momentum_kick * vol(para, var, ii, ij + 1, ik); + } + else if (SK == EK) { + momentum_kick = get_momentum_kick(fabs(W), beta_tmp, h_momentum); + var[VZS][IX(ii, ij, ik + 1)] = momentum_kick * vol(para, var, ii, ij, ik + 1); + } + } + } + } + } + /* Assign the inlet boundary condition for each cell */ + for (ii = SI; ii <= EI; ii++) { + for (ij = SJ; ij <= EJ; ij++) { + for (ik = SK; ik <= EK; ik++) { + BINDEX[0][index] = ii; + BINDEX[1][index] = ij; + BINDEX[2][index] = ik; + BINDEX[4][index] = i; + index++; + + var[TEMPBC][IX(ii, ij, ik)] = TMP; + var[VXBC][IX(ii, ij, ik)] = U; + var[VYBC][IX(ii, ij, ik)] = V; + var[VZBC][IX(ii, ij, ik)] = W; + var[Xi1BC][IX(ii, ij, ik)] = MASS; + + flagp[IX(ii, ij, ik)] = INLET; /* Cell flag to be inlet */ + if (para->outp->version == DEBUG) { + sprintf(msg, "read_sci_input(): get inlet cell[%d,%d,%d]=%.1f", + ii, ij, ik, flagp[IX(ii, ij, ik)]); + ffd_log(msg, FFD_NORMAL); + } + } /* End of assigning the inlet B.C. for each cell */ + } + } + } /* End of loop for each inlet boundary */ + } /* End of setting inlet boundary */ /***************************************************************************** | Read the outlet boundary conditions @@ -305,241 +977,332 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { sprintf(msg, "read_sci_input(): para->bc->nb_outlet=%d", para->bc->nb_outlet); ffd_log(msg, FFD_NORMAL); - if(para->bc->nb_outlet!=0) { - para->bc->outletName = (char**) malloc(para->bc->nb_outlet*sizeof(char*)); - if(para->bc->outletName==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->outletName.", FFD_ERROR); - return 1; - } - - for(i=0; ibc->nb_outlet; i++) { - /*....................................................................... - | Get the names of boundary - .......................................................................*/ - fgets(string, 400, file_params); - /* Get the length of name (The name may contain white space)*/ - for(j=0; string[j] != '\n'; j++) { - continue; - } - - para->bc->outletName[i] = (char*)malloc((j+1)*sizeof(char)); - if(para->bc->outletName[i]==NULL) { - sprintf(msg, "read_sci_input(): Could not allocate memory " - "for para->bc->outletName[%d].", i); - ffd_log(msg, FFD_ERROR); - return 1; - } - - strncpy(para->bc->outletName[i], (const char*)string, j); - /* Add an ending*/ - para->bc->outletName[i][j] = '\0'; - sprintf(msg, "read_sci_input(): para->bc->outletName[%d]=%s", - i, para->bc->outletName[i]); - ffd_log(msg, FFD_NORMAL); - - /*....................................................................... - | Get the boundary conditions - .......................................................................*/ - fgets(string, 400, file_params); - sscanf(string,"%d%d%d%d%d%d%lf%lf%lf%lf%lf", - &SI, &SJ, &SK, &EI, - &EJ, &EK, &TMP, &MASS, &U, &V, &W); - - sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VX=%f, T=%f, Xi=%f", - U, V, W, TMP, MASS); - ffd_log(msg, FFD_NORMAL); - - if(EI==0) { - if(SI==1) SI=0; - EI = SI + EI; - EJ = SJ + EJ - 1; - EK = SK + EK - 1; - } - - if(EJ==0) { - if(SJ==1) SJ=0; - EI = SI+EI-1; - EJ = SJ+EJ; - EK = SK+EK-1; - } - - if(EK==0) { - if(SK==1) SK = 0; - EI = SI+EI-1; - EJ = SJ+EJ-1; - EK = SK+EK; - } - /* Assign the outlet boundary condition for each cell*/ - for(ii=SI; ii<=EI ;ii++) - for(ij=SJ; ij<=EJ ;ij++) - for(ik=SK; ik<=EK; ik++) { - BINDEX[0][index] = ii; - BINDEX[1][index] = ij; - BINDEX[2][index] = ik; - BINDEX[4][index] = para->bc->nb_inlet + i; - index++; - - /* Give the initial value, but the value will be overwritten later*/ - var[TEMPBC][IX(ii,ij,ik)] = TMP; - var[VXBC][IX(ii,ij,ik)] = U; - var[VYBC][IX(ii,ij,ik)] = V; - var[VZBC][IX(ii,ij,ik)] = W; - var[Xi1BC][IX(ii,ij,ik)] = MASS; - flagp[IX(ii,ij,ik)] = OUTLET; - if(para->outp->version==DEBUG) { - sprintf(msg, "read_sci_input(): get outlet cell[%d,%d,%d]=%.1f", - ii, ij, ik, flagp[IX(ii,ij,ik)]); - ffd_log(msg, FFD_NORMAL); - } - } /* End of assigning the outlet B.C. for each cell*/ - } /* End of loop for each outlet boundary*/ - } /* End of setting outlet boundary*/ + if (para->bc->nb_outlet != 0) { + para->bc->outletName = (char**)malloc(para->bc->nb_outlet * sizeof(char*)); + if (para->bc->outletName == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->outletName.", FFD_ERROR); + return 1; + } + + for (i = 0; i < para->bc->nb_outlet; i++) { + /*....................................................................... + | Get the names of boundary + .......................................................................*/ + fgets(string, 400, file_params); + /* Get the length of name (The name may contain white space) */ + for (j = 0; string[j] != '\n'; j++) { + continue; + } + + para->bc->outletName[i] = (char*)malloc((j + 1) * sizeof(char)); + if (para->bc->outletName[i] == NULL) { + sprintf(msg, "read_sci_input(): Could not allocate memory " + "for para->bc->outletName[%d].", i); + ffd_log(msg, FFD_ERROR); + return 1; + } + + strncpy(para->bc->outletName[i], (const char*)string, j); + /* Add an ending */ + para->bc->outletName[i][j] = '\0'; + sprintf(msg, "read_sci_input(): para->bc->outletName[%d]=%s", + i, para->bc->outletName[i]); + ffd_log(msg, FFD_NORMAL); + + /*....................................................................... + | Get the boundary conditions + .......................................................................*/ + fgets(string, 400, file_params); + if (ifDouble) { + sscanf(string, "%d%d%d%d%d%d%lf%lf%lf%lf%lf", + &SI, &SJ, &SK, &EI, + &EJ, &EK, &TMP, &MASS, &U, &V, &W); + } + else { + sscanf(string, "%d%d%d%d%d%d%f%f%f%f%f", + &SI, &SJ, &SK, &EI, + &EJ, &EK, &TMP, &MASS, &U, &V, &W); + } + + sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VZ=%f, T=%f, Xi=%f", + U, V, W, TMP, MASS); + ffd_log(msg, FFD_NORMAL); + +#ifdef FFD_ISAT + /* Overwrite value by ISAT inputs for outlets */ + if (para->bc->outlet_bc == PRESCRIBED_VALUE) { + if (num_inlet > 0) { + //for (i = 0; i < num_inlet; i++) { + // inlet_vel_re_sum = inlet_vel_re_sum + inlet_vel_re[i]; + //} + if (inlet_vel_re[0] > 0) { + U = U / default_mass_flowrate * updated_mass_flowrate; + V = V / default_mass_flowrate * updated_mass_flowrate; + W = W / default_mass_flowrate * updated_mass_flowrate; + sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VZ=%f, T=%f, Xi=%f after overwrite.", + U, V, W, TMP, MASS); + ffd_log(msg, FFD_NORMAL); + } + } + } +#endif + + if (EI == 0) { + if (SI == 1) SI = 0; + EI = SI + EI; + EJ = SJ + EJ - 1; + EK = SK + EK - 1; + } + + if (EJ == 0) { + if (SJ == 1) SJ = 0; + EI = SI + EI - 1; + EJ = SJ + EJ; + EK = SK + EK - 1; + } + + if (EK == 0) { + if (SK == 1) SK = 0; + EI = SI + EI - 1; + EJ = SJ + EJ - 1; + EK = SK + EK; + } + /* Determine to assgin OUTLET or TILE */ + if (strstr(para->bc->outletName[i], "Tile") != NULL) { + tile_or_outlet = TILE; + /* read the direction tiles are put */ + if (SI == EI) + para->geom->tile_putX = 1; + else if (SJ == EJ) + para->geom->tile_putY = 1; + else if (SK == EK) + para->geom->tile_putZ = 1; + /*printf("putX, putY, putZ is %d, %d, %d\n",para->geom->tile_putX,para->geom->tile_putY,para->geom->tile_putZ);*/ + /*getchar();*/ + } + else { + tile_or_outlet = OUTLET; + } + + /* Assign the outlet boundary condition for each cell */ + for (ii = SI; ii <= EI;ii++) { + for (ij = SJ; ij <= EJ;ij++) { + for (ik = SK; ik <= EK; ik++) { + /* If cell hasn't been updated (default value -1) */ + /* this can avoid overwriting of previous bc assignment */ + if (flagp[IX(ii, ij, ik)] < 0) { + BINDEX[0][index] = ii; + BINDEX[1][index] = ij; + BINDEX[2][index] = ik; + BINDEX[4][index] = para->bc->nb_inlet + i; + index++; + + /* Give the initial value, but the value will be overwritten later */ + var[TEMPBC][IX(ii, ij, ik)] = TMP; + var[VXBC][IX(ii, ij, ik)] = U; + var[VYBC][IX(ii, ij, ik)] = V; + var[VZBC][IX(ii, ij, ik)] = W; + var[Xi1BC][IX(ii, ij, ik)] = MASS; + flagp[IX(ii, ij, ik)] = tile_or_outlet; + + /* if it is tile, then record the opening ratio, 25%, 40%, or 56% */ + /* and its corresponding resistance */ + if (tile_or_outlet == TILE) { + /* read name */ + if (ifDouble) { + sscanf(para->bc->outletName[i], "%s%lf", tile_name_tmp, &var[TILE_OPEN_BC][IX(ii, ij, ik)]); + } + else { + sscanf(para->bc->outletName[i], "%s%f", tile_name_tmp, &var[TILE_OPEN_BC][IX(ii, ij, ik)]); + } + + /* read the resistance parameter */ + tile_opening = var[TILE_OPEN_BC][IX(ii, ij, ik)]; + /*printf("is opening is %f\n", var[TILE_OPEN_BC][IX(ii, ij, ik)]);*/ + + /* Calculate the resistance based on the paper + @inproceedings{vangilder2015development, + title = { Development of a Raised - Floor Plenum Design Tool }, + author = { VanGilder, James W and Zhang, Xuanhang Simon }, + year = { 2015 }, + organization = { American Society of Mechanical Engineers } + } + SHOULD MULTIPLE BY A 0.5 AT THE END, ACCORDINTG TO THE EQUATIONS. */ + var[TILE_RESI_BC][IX(ii, ij, ik)] = 1 / pow(tile_opening, 2) * (1.0 + 0.5 * pow(1 - tile_opening, 0.75) + 1.414 * pow(1 - tile_opening, 0.375)) * 0.5; + } + } + /* output debug information */ + if (para->outp->version == DEBUG) { + sprintf(msg, "read_sci_input(): get outlet cell[%d,%d,%d]=%.1f", + ii, ij, ik, flagp[IX(ii, ij, ik)]); + ffd_log(msg, FFD_NORMAL); + } + } /* End of assigning the outlet B.C. for each cell */ + } + } + } /* End of loop for each outlet boundary */ + } /* End of setting outlet boundary */ /***************************************************************************** | - Copy the inlet and outlet information to ports | - Allocate memory for related port variables *****************************************************************************/ - para->bc->nb_port = para->bc->nb_inlet+para->bc->nb_outlet; - - if(para->bc->nb_port>0) { - /* Allocate memory for the array of ports' names*/ - para->bc->portName = (char**) malloc(para->bc->nb_port*sizeof(char*)); - if(para->bc->portName==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for para->bc->portName.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Copy the inlet names to ports' names - --------------------------------------------------------------------------*/ - for(i=0; ibc->nb_inlet; i++) { - /* Allocate memory for inlet name*/ - para->bc->portName[i] = - (char*) malloc(sizeof(char)*(sizeof(para->bc->inletName[i])+1)); - - if(para->bc->portName[i]==NULL) { - ffd_log("read_sci_input():" - "Could not allocate memory for para->bc->portName.", - FFD_ERROR); - return 1; - } - - /* Copy the inlet name*/ - strcpy(para->bc->portName[i], para->bc->inletName[i]); - sprintf(msg, "read_sci_input(): Port[%d]:%s", - i, para->bc->portName[i]); - ffd_log(msg, FFD_NORMAL); - } - - /*-------------------------------------------------------------------------- - | Copy the outlet names to ports' names - --------------------------------------------------------------------------*/ - j = para->bc->nb_inlet; - for(i=0; ibc->nb_outlet; i++) { - /* Allocate memory for outlet name*/ - para->bc->portName[i+j] = - (char*) malloc(sizeof(char)*(sizeof(para->bc->outletName[i])+1)); - if(para->bc->portName[i+j]==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->portName.", - FFD_ERROR); - return 1; - } - else { - strcpy(para->bc->portName[i+j], para->bc->outletName[i]); - sprintf(msg, "read_sci_input(): Port[%d]:%s", - i+j, para->bc->portName[i+j]); - ffd_log(msg, FFD_NORMAL); - } - } - /*-------------------------------------------------------------------------- - | Allocate memory for the surface area - --------------------------------------------------------------------------*/ - para->bc->APort = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->APort==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->APort.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for the velocity (used for inlet only) - --------------------------------------------------------------------------*/ - para->bc->velPort = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->velPort==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->velPort.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for the averaged velocity - --------------------------------------------------------------------------*/ - para->bc->velPortAve = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->velPortAve==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->velAve.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for mean velocity - --------------------------------------------------------------------------*/ - para->bc->velPortMean = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->velPortMean==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->velPortMean.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for the temperature (used for inlet only) - --------------------------------------------------------------------------*/ - para->bc->TPort = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->TPort==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->TPort.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for the averaged temperature - --------------------------------------------------------------------------*/ - para->bc->TPortAve = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->TPortAve==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->TPortAve.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for the mean velocity - --------------------------------------------------------------------------*/ - para->bc->TPortMean = (REAL*) malloc(para->bc->nb_port*sizeof(REAL)); - if(para->bc->TPortMean==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->TPortMean.", - FFD_ERROR); - return 1; - } - /*-------------------------------------------------------------------------- - | Allocate memory for port ID - --------------------------------------------------------------------------*/ - para->bc->portId = (int*) malloc(para->bc->nb_port*sizeof(int)); - if(para->bc->portId==NULL) { - ffd_log("read_sci_input(): " - "Could not allocate memory for para->bc->portId.", - FFD_ERROR); - return 1; - } + para->bc->nb_port = para->bc->nb_inlet + para->bc->nb_outlet; + + if (para->bc->nb_port > 0) { + /* Allocate memory for the array of ports' names */ + para->bc->portName = (char**)malloc(para->bc->nb_port * sizeof(char*)); + if (para->bc->portName == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->portName.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Copy the inlet names to ports' names + --------------------------------------------------------------------------*/ + for (i = 0; i < para->bc->nb_inlet; i++) { + /* Allocate memory for inlet name */ + para->bc->portName[i] = + (char*)malloc(sizeof(char) * (strlen(para->bc->inletName[i]) + 1)); + + if (para->bc->portName[i] == NULL) { + ffd_log("read_sci_input():" + "Could not allocate memory for para->bc->portName.", + FFD_ERROR); + return 1; + } + + /* Copy the inlet name */ + strcpy(para->bc->portName[i], para->bc->inletName[i]); + sprintf(msg, "read_sci_input(): Port[%d]:%s", + i, para->bc->portName[i]); + ffd_log(msg, FFD_NORMAL); + } + + /*-------------------------------------------------------------------------- + | Copy the outlet names to ports' names + --------------------------------------------------------------------------*/ + j = para->bc->nb_inlet; + for (i = 0; i < para->bc->nb_outlet; i++) { + /* Allocate memory for outlet name */ + para->bc->portName[i + j] = + (char*)malloc(sizeof(char) * (strlen(para->bc->outletName[i]) + 1)); + if (para->bc->portName[i + j] == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->portName.", + FFD_ERROR); + return 1; + } + else { + strcpy(para->bc->portName[i + j], para->bc->outletName[i]); + sprintf(msg, "read_sci_input(): Port[%d]:%s", + i + j, para->bc->portName[i + j]); + ffd_log(msg, FFD_NORMAL); + } + } + /*-------------------------------------------------------------------------- + | Allocate memory for the surface area + --------------------------------------------------------------------------*/ + para->bc->APort = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->APort == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->APort.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Allocate memory for the velocity (used for inlet only) + --------------------------------------------------------------------------*/ + para->bc->velPort = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->velPort == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->velPort.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Allocate memory for the averaged velocity + --------------------------------------------------------------------------*/ + para->bc->velPortAve = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->velPortAve == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->velAve.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Allocate memory for mean velocity + --------------------------------------------------------------------------*/ + para->bc->velPortMean = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->velPortMean == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->velPortMean.", + FFD_ERROR); + return 1; + } + + /*-------------------------------------------------------------------------- + | Allocate memory for volumetric flow rate of tiles + --------------------------------------------------------------------------*/ + para->bc->QPort = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->QPort == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->QPort.", + FFD_ERROR); + return 1; + } + + /*-------------------------------------------------------------------------- + | Allocate memory for the temperature (used for inlet only) + --------------------------------------------------------------------------*/ + para->bc->TPort = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->TPort == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->TPort.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Allocate memory for the averaged temperature + --------------------------------------------------------------------------*/ + para->bc->TPortAve = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->TPortAve == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->TPortAve.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Allocate memory for the mean velocity + --------------------------------------------------------------------------*/ + para->bc->TPortMean = (REAL*)malloc(para->bc->nb_port * sizeof(REAL)); + if (para->bc->TPortMean == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->TPortMean.", + FFD_ERROR); + return 1; + } + /*-------------------------------------------------------------------------- + | Allocate memory for port ID + --------------------------------------------------------------------------*/ + para->bc->portId = (int*)malloc(para->bc->nb_port * sizeof(int)); + + if (para->bc->portId == NULL) { + ffd_log("read_sci_input(): " + "Could not allocate memory for para->bc->portId.", + FFD_ERROR); + return 1; + } } + /***************************************************************************** | initialize the para->bc->portID *****************************************************************************/ for (i = 0; i < para->bc->nb_port; i++) { para->bc->portId[i] = 0; } + /***************************************************************************** | Read the internal solid block boundary conditions *****************************************************************************/ @@ -547,285 +1310,654 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { sscanf(string, "%d", ¶->bc->nb_block); sprintf(msg, "read_sci_input(): para->bc->nb_block=%d", para->bc->nb_block); ffd_log(msg, FFD_NORMAL); - - if(para->bc->nb_block!=0) { - para->bc->blockName = (char**) malloc(para->bc->nb_block*sizeof(char*)); - if(para->bc->blockName==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for para->bc->blockName.", - FFD_ERROR); - return 1; - } - - for(i=0; ibc->nb_block; i++) { - /*....................................................................... - | Get the names of boundary - .......................................................................*/ - fgets(string, 400, file_params); - /* Get the length of name (The name may contain white space)*/ - for(j=0; string[j] != '\n'; j++) { - continue; - } - - para->bc->blockName[i] = (char*)malloc((j+1)*sizeof(char)); - if(para->bc->blockName[i]==NULL) { - sprintf(msg,"read_sci_input(): Could not allocate memory for " - "para->bc->blockName[%d].", i); - ffd_log(msg, FFD_ERROR); - return 1; - } - - strncpy(para->bc->blockName[i], (const char*)string, j); - /* Add an ending*/ - para->bc->blockName[i][j] = '\0'; - sprintf(msg, "read_sci_input(): para->bc->blockName[%d]=%s", - i, para->bc->blockName[i]); - ffd_log(msg, FFD_NORMAL); - - /*....................................................................... - | Get the boundary conditions - .......................................................................*/ - fgets(string, 400, file_params); - /* X_index_start, Y_index_Start, Z_index_Start,*/ - /* X_index_End, Y_index_End, Z_index_End,*/ - /* Thermal Condition (0: Flux; 1:Temperature), Value of thermal condition*/ - sscanf(string,"%d%d%d%d%d%d%d%lf", &SI, &SJ, &SK, &EI, &EJ, &EK, - &FLTMP, &TMP); - sprintf(msg, "read_sci_input(): VX=%f, VY=%f, VX=%f, ThermalBC=%d, T/q_dot=%f, Xi=%f", - U, V, W, FLTMP, TMP, MASS); - ffd_log(msg, FFD_NORMAL); - - if(SI==1) { - SI=0; - if(EI>=imax) EI=EI+SI+1; - else EI=EI+SI; - } - else - EI=EI+SI-1; - - if(SJ==1) { - SJ=0; - if(EJ>=jmax) EJ=EJ+SJ+1; - else EJ=EJ+SJ; - } - else - EJ=EJ+SJ-1; - - if(SK==1) { - SK=0; - if(EK>=kmax) EK=EK+SK+1; - else EK=EK+SK; - } - else - EK=EK+SK-1; - - for(ii=SI; ii<=EI; ii++) - for(ij=SJ; ij<=EJ; ij++) - for(ik=SK; ik<=EK; ik++) { - BINDEX[0][index] = ii; - BINDEX[1][index] = ij; - BINDEX[2][index] = ik; - BINDEX[3][index] = FLTMP; - BINDEX[4][index] = i; - index++; - - switch(FLTMP) { - case 1: - var[TEMPBC][IX(ii,ij,ik)] = TMP; - break; - case 0: - var[QFLUXBC][IX(ii,ij,ik)] = TMP; - break; - default: - sprintf(msg, "read_sci_input(): Thermal BC (%d)" - "for cell(%d,%d,%d) was not defined", - FLTMP, ii, ij, ik); - ffd_log(msg, FFD_ERROR); - return 1; - } - - flagp[IX(ii,ij,ik)] = SOLID; /* Flag for solid*/ - } /* End of assigning value for internal solid block*/ - } - } + /* initialize the variables associated with rack modeling */ + /* allocate memory for cooling airflow direction for racks, and mapping of outlet to inlet cells in rack */ + if (para->bc->nb_rack != 0) { + /* allocate memory for rack names */ + para->bc->rackName = (char**)malloc(para->bc->nb_rack * sizeof(char*)); + if (para->bc->rackName == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->rackName.", + FFD_ERROR); + return 1; + } + /* allocate memory for the flow rates of rack (CFM/kW) */ + para->bc->RackFlowRate = (REAL*)malloc(para->bc->nb_rack * sizeof(REAL)); + if (para->bc->RackFlowRate == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->RackFlowRate.", + FFD_ERROR); + return 1; + } + /* set default value of 125 CFM/kW--->m3/s/w. 1 CFM = 0.00047194745 M3/s */ + for (i = 0; i < para->bc->nb_rack;i++) { + para->bc->RackFlowRate[i] = 125 * 0.00047194745 / 1000; + } + + /* allocate memory for the heat dissipation of rack in W */ + para->bc->HeatDiss = (REAL*)malloc(para->bc->nb_rack * sizeof(REAL)); + if (para->bc->HeatDiss == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->HeatDiss.", + FFD_ERROR); + return 1; + } + /* set default value of heat dissipation of a rack as 5000 W (5kW) */ + for (i = 0; i < para->bc->nb_rack;i++) { + para->bc->HeatDiss[i] = 5000; + } + /* allocate memory for inlet or outlet area of rack */ + para->bc->RackArea = (REAL*)malloc(para->bc->nb_rack * sizeof(REAL)); + if (para->bc->RackArea == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->RackArea.", + FFD_ERROR); + return 1; + } + /* set default value of inlet or outlet area of rack as 0 */ + for (i = 0; i < para->bc->nb_rack;i++) { + para->bc->RackArea[i] = 0.0; + } + /* allocate memory for the flow direction of rack */ + para->bc->RackDir = (int*)malloc(para->bc->nb_rack * sizeof(int)); + if (para->bc->RackDir == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->RackDir.", + FFD_ERROR); + return 1; + } + /* set the default direction of flow in rack, to the X */ + for (i = 0; i < para->bc->nb_rack;i++) { + para->bc->RackDir[i] = 1; + } + + /* allocate memory for mapping of outlet cells to the inlets cells for each rack */ + para->bc->RackMap = (int**)malloc(para->bc->nb_rack * sizeof(int*)); + if (para->bc->RackMap == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->RackMap.", + FFD_ERROR); + return 1; + } + for (i = 0; i < para->bc->nb_rack;i++) { + /* allocate memory for para->bc->RackMap[i] */ + para->bc->RackMap[i] = (int*)malloc(3 * sizeof(int)); + if (para->bc->RackMap[i] == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->RackMap[i].", + FFD_ERROR); + return 1; + } + /* set initial value of 0 for para->bc->RackMap[i] */ + para->bc->RackMap[i][0] = 0; + para->bc->RackMap[i][1] = 0; + para->bc->RackMap[i][2] = 0; + } /*end of for (i=0; ibc->nb_rack;i++)*/ + + /* allocate memory for coordinates of the monitoring points in front racks */ + para->sens->coordMoniPoints = (REAL * **)malloc(para->bc->nb_rack * sizeof(REAL * *)); + if (para->sens->coordMoniPoints == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->sens->coordMoniPoints.", + FFD_ERROR); + return 1; + } + /* initialize coordinates of the monitoring points in front racks */ + for (i = 0;i < para->bc->nb_rack;i++) { + para->sens->coordMoniPoints[i] = (REAL * *)malloc(RACK_MONITOR_POINTS * sizeof(REAL*)); + if (para->sens->coordMoniPoints[i] != NULL) { + for (j = 0;j < RACK_MONITOR_POINTS;j++) { + para->sens->coordMoniPoints[i][j] = (REAL*)malloc(3 * sizeof(REAL)); + if (para->sens->coordMoniPoints[i][j] != NULL) { + for (k = 0;k < 3;k++) { + para->sens->coordMoniPoints[i][j][k] = 0.0; + } + } + } + } + } + /* allocate memory for indexes of the monitoring points in front racks */ + para->sens->indexMoniPoints = (int***)malloc(para->bc->nb_rack * sizeof(int**)); + if (para->sens->indexMoniPoints == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->sens->indexMoniPoints.", + FFD_ERROR); + return 1; + } + /* initialize coordinates of the monitoring points in front racks */ + for (i = 0;i < para->bc->nb_rack;i++) { + para->sens->indexMoniPoints[i] = (int**)malloc(RACK_MONITOR_POINTS * sizeof(int*)); + if (para->sens->indexMoniPoints[i] != NULL) { + for (j = 0;j < RACK_MONITOR_POINTS;j++) { + para->sens->indexMoniPoints[i][j] = (int*)malloc(3 * sizeof(int)); + if (para->sens->indexMoniPoints[i][j] != NULL) { + for (k = 0;k < 3;k++) { + para->sens->indexMoniPoints[i][j][k] = 0; + } + } + } + } + } + } /*end of if (para->bc->nb_rack != 0)*/ + + /* read data of all blocks and racks */ + if (para->bc->nb_block != 0) { + para->bc->blockName = (char**)malloc(para->bc->nb_block * sizeof(char*)); + if (para->bc->blockName == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for para->bc->blockName.", + FFD_ERROR); + return 1; + } + + for (i = 0; i < para->bc->nb_block; i++) { + /*....................................................................... + | Get the names of boundary + .......................................................................*/ + fgets(string, 400, file_params); + /* Get the length of name (The name may contain white space) */ + for (j = 0; string[j] != '\n'; j++) { + continue; + } + + para->bc->blockName[i] = (char*)malloc((j + 1) * sizeof(char)); + if (para->bc->blockName[i] == NULL) { + sprintf(msg, "read_sci_input(): Could not allocate memory for " + "para->bc->blockName[%d].", i); + ffd_log(msg, FFD_ERROR); + return 1; + } + + strncpy(para->bc->blockName[i], (const char*)string, j); + /* Add an ending */ + para->bc->blockName[i][j] = '\0'; + sprintf(msg, "read_sci_input(): para->bc->blockName[%d]=%s", + i, para->bc->blockName[i]); + ffd_log(msg, FFD_NORMAL); + + /*....................................................................... + | Get the boundary conditions + .......................................................................*/ + fgets(string, 400, file_params); + /* X_index_start, Y_index_Start, Z_index_Start, */ + /* X_index_End, Y_index_End, Z_index_End, */ + /* Thermal Condition (0: Flux; 1:Temperature), Value of thermal condition */ + if (ifDouble) { + sscanf(string, "%d%d%d%d%d%d%d%lf", &SI, &SJ, &SK, &EI, &EJ, &EK, + &FLTMP, &TMP); + } + else { + sscanf(string, "%d%d%d%d%d%d%d%f", &SI, &SJ, &SK, &EI, &EJ, &EK, + &FLTMP, &TMP); + } + + sprintf(msg, "read_sci_input(): ThermalBC=%d, T/q_dot=%f", FLTMP, TMP); + ffd_log(msg, FFD_NORMAL); + +#ifdef FFD_ISAT + /* Overwrite value by ISAT inputs for blocks */ + if (num_block > 0) { + if (strstr(para->bc->blockName[i], "Rack") == NULL) { + if (block_re[i]) + TMP = block_value[i]; + sprintf(msg, "read_sci_input(): ThermalBC=%d, T/q_dot=%f after overwrite.", + FLTMP, TMP); + ffd_log(msg, FFD_NORMAL); + } + } +#endif + + /* Find the start and end in each direction of the object */ + if (SI == 1) { + SI = 0; + if (EI >= imax) EI = EI + SI + 1; + else EI = EI + SI; + } + else + EI = EI + SI - 1; + + if (SJ == 1) { + SJ = 0; + if (EJ >= jmax) EJ = EJ + SJ + 1; + else EJ = EJ + SJ; + } + else + EJ = EJ + SJ - 1; + + if (SK == 1) { + SK = 0; + if (EK >= kmax) EK = EK + SK + 1; + else EK = EK + SK; + } + else + EK = EK + SK - 1; + + /* read the plastic curtain or ceiling tile (initially implemented by Wei Tian, 9/13/2018) */ + /* FIXME: only one cell in the width direction is allowed, otherwise no resistance can be added */ + if ((strstr(para->bc->blockName[i], "Curtain") != NULL) || (strstr(para->bc->blockName[i], "CeilingTile") != NULL)) { + /* read name */ + if (ifDouble) { + sscanf(para->bc->blockName[i], "%s%lf", curtain_name_tmp, &curtain_open_ratio); + } + else { + sscanf(para->bc->blockName[i], "%s%f", curtain_name_tmp, &curtain_open_ratio); + } + /* assign the cell properties */ + for (ii = SI; ii <= EI; ii++) { + for (ij = SJ; ij <= EJ; ij++) { + for (ik = SK; ik <= EK; ik++) { + /*BINDEX[0][index] = ii;*/ + /*BINDEX[1][index] = ij;*/ + /*BINDEX[2][index] = ik;*/ + flagp[IX(ii, ij, ik)] = FLUID; + /* assign resistance based on the facing of the curtain */ + if (SI == EI) { + var[RESX][IX(ii, ij, ik)] = 1 / pow(curtain_open_ratio, 2) * (1.0 + 0.5 * pow(1 - curtain_open_ratio, 0.75) + + 1.414 * pow(1 - curtain_open_ratio, 0.375)) * 0.5; + } + else if (SJ == EJ) { + var[RESY][IX(ii, ij, ik)] = 1 / pow(curtain_open_ratio, 2) * (1.0 + 0.5 * pow(1 - curtain_open_ratio, 0.75) + + 1.414 * pow(1 - curtain_open_ratio, 0.375)) * 0.5; + } + else if (SK == EK) { + var[RESZ][IX(ii, ij, ik)] = 1 / pow(curtain_open_ratio, 2) * (1.0 + 0.5 * pow(1 - curtain_open_ratio, 0.75) + + 1.414 * pow(1 - curtain_open_ratio, 0.375)) * 0.5; + } + else { + printf("the configuration of the curtain is not supported\n"); + getchar(); + } + /* increment the index */ + index++; + } + } + } + } /*end of read the plastic curtain*/ + + /* set the boundary conditions based on that if it is regular block or a rack */ + /* if it is a rack */ + else if (strstr(para->bc->blockName[i], "Rack") != NULL) { + /* split the name information */ + if (ifDouble) { + sscanf(para->bc->blockName[i], "%s%d%lf%lf", rack_name_tmp, ¶->bc->RackDir[id_rack], ¶->bc->HeatDiss[id_rack], ¶->bc->RackFlowRate[id_rack]); + } + else { + sscanf(para->bc->blockName[i], "%s%d%f%f", rack_name_tmp, ¶->bc->RackDir[id_rack], ¶->bc->HeatDiss[id_rack], ¶->bc->RackFlowRate[id_rack]); + } + +#ifdef FFD_ISAT + /* Overwrite value by ISAT inputs for racks */ + if (num_block > 0) { + if (block_re[i]) + para->bc->HeatDiss[id_rack] = block_value[i]; + sprintf(msg, "read_sci_input(): para->bc->HeatDiss[%d]=%lf after overwrite.", + id_rack, para->bc->HeatDiss[id_rack]); + ffd_log(msg, FFD_NORMAL); + } +#endif + + /* store the rack name to global variable (maximum 100) */ + para->bc->rackName[id_rack] = (char*)malloc(100 * sizeof(char)); + strcpy(para->bc->rackName[id_rack], (const char*)rack_name_tmp); + /* find the initial flow rate */ + para->bc->RackFlowRate[id_rack] *= para->bc->HeatDiss[id_rack]; + /* Find the map based on the flow direction */ + if (para->bc->RackDir[id_rack] == 1 || para->bc->RackDir[id_rack] == -1) { + para->bc->RackMap[id_rack][0] = EI - SI; + para->bc->RackMap[id_rack][1] = 0; + para->bc->RackMap[id_rack][2] = 0; + } + else if (para->bc->RackDir[id_rack] == 2 || para->bc->RackDir[id_rack] == -2) { + para->bc->RackMap[id_rack][0] = 0; + para->bc->RackMap[id_rack][1] = EJ - SJ; + para->bc->RackMap[id_rack][2] = 0; + } + + else if (para->bc->RackDir[id_rack] == 3 || para->bc->RackDir[id_rack] == -3) { + para->bc->RackMap[id_rack][0] = 0; + para->bc->RackMap[id_rack][1] = 0; + para->bc->RackMap[id_rack][2] = EK - SK; + } + else { + para->bc->RackMap[id_rack][0] = 0; + para->bc->RackMap[id_rack][1] = 0; + para->bc->RackMap[id_rack][2] = 0; + } + + /*Store the cell information and boundary condition by looping all rack cells*/ + for (ii = SI; ii <= EI; ii++) { + for (ij = SJ; ij <= EJ; ij++) { + for (ik = SK; ik <= EK; ik++) { + BINDEX[0][index] = ii; + BINDEX[1][index] = ij; + BINDEX[2][index] = ik; + BINDEX[3][index] = FLTMP; + BINDEX[4][index] = id_rack; + BINDEX[5][index] = RACK; + index++; + /* assign thermal BCs */ + switch (FLTMP) { + case 1: + var[TEMPBC][IX(ii, ij, ik)] = TMP; + break; + case 0: + var[QFLUXBC][IX(ii, ij, ik)] = TMP; + break; + default: + sprintf(msg, "read_sci_input(): Thermal BC (%d)" + "for cell(%d,%d,%d) was not defined", + FLTMP, ii, ij, ik); + ffd_log(msg, FFD_ERROR); + return 1; + } + /* mark the face cells and cells in the middle */ + if (para->bc->RackDir[id_rack] == 1) { + if (ii == SI) { + flagp[IX(ii, ij, ik)] = RACK_INLET; /* Flag for rack inlet */ + } + else if (ii == EI) { + flagp[IX(ii, ij, ik)] = RACK_OUTLET; /* Flag for rack outlet */ + } + else { + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for cells in the middle */ + } + } + else if (para->bc->RackDir[id_rack] == -1) { + if (ii == SI) { + flagp[IX(ii, ij, ik)] = RACK_OUTLET; /* Flag for rack outlet */ + } + else if (ii == EI) { + flagp[IX(ii, ij, ik)] = RACK_INLET; /* Flag for rack inlet */ + } + else { + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for cells in the middle */ + } + } + else if (para->bc->RackDir[id_rack] == 2) { + if (ij == SJ) { + flagp[IX(ii, ij, ik)] = RACK_INLET; /* Flag for rack inlet */ + } + else if (ij == EJ) { + flagp[IX(ii, ij, ik)] = RACK_OUTLET; /* Flag for rack outlet */ + } + else { + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for cells in the middle */ + } + } + else if (para->bc->RackDir[id_rack] == -2) { + if (ij == SJ) { + flagp[IX(ii, ij, ik)] = RACK_OUTLET; /* Flag for rack outlet */ + } + else if (ij == EJ) { + flagp[IX(ii, ij, ik)] = RACK_INLET; /* Flag for rack inlet */ + } + else { + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for cells in the middle */ + } + } + else if (para->bc->RackDir[id_rack] == 3) { + if (ik == SK) { + flagp[IX(ii, ij, ik)] = RACK_INLET; /* Flag for rack inlet */ + } + else if (ik == EK) { + flagp[IX(ii, ij, ik)] = RACK_OUTLET; /* Flag for rack outlet */ + } + else { + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for cells in the middle */ + } + } + else if (para->bc->RackDir[id_rack] == -3) { + if (ik == SK) { + flagp[IX(ii, ij, ik)] = RACK_OUTLET; /* Flag for rack outlet */ + } + else if (ik == EK) { + flagp[IX(ii, ij, ik)] = RACK_INLET; /* Flag for rack inlet */ + } + else { + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for cells in the middle */ + } + } + + } /* End of assigning value for internal solid block */ + } /* End of assigning value for internal solid block */ + } /* End of assigning value for internal solid block */ + /* locate the four points at front of the racks */ + if (get_monitor_points(para, var, SI, SJ, SK, EI, EJ, EK, para->bc->RackDir[id_rack], id_rack) != 0) { + sprintf(msg, "read_sci_input(): cannot find the monitoring points at the front of the RACK %d", id_rack + 1); + ffd_log(msg, FFD_ERROR); + } + /* Update the index of rack */ + id_rack += 1; + }/* end of if (strstr(para->bc->blockName[i], "Rack") != NULL) */ + /* if it is a regular block */ + else { + /* set the boundary conditions */ + for (ii = SI; ii <= EI; ii++) { + for (ij = SJ; ij <= EJ; ij++) { + for (ik = SK; ik <= EK; ik++) { + BINDEX[0][index] = ii; + BINDEX[1][index] = ij; + BINDEX[2][index] = ik; + BINDEX[3][index] = FLTMP; + BINDEX[4][index] = i; + index++; + + switch (FLTMP) { + case 1: + var[TEMPBC][IX(ii, ij, ik)] = TMP; + break; + case 0: + var[QFLUXBC][IX(ii, ij, ik)] = TMP; + break; + default: + sprintf(msg, "read_sci_input(): Thermal BC (%d)" + "for cell(%d,%d,%d) was not defined", + FLTMP, ii, ij, ik); + ffd_log(msg, FFD_ERROR); + return 1; + } + flagp[IX(ii, ij, ik)] = SOLID; /* Flag for solid */ + } /* End of assigning value for internal solid block */ + }/* End of assigning value for internal solid block */ + }/* End of assigning value for internal solid block */ + } /* end of else */ + } /* end of for(i=0; ibc->nb_block; i++) */ + }/* end of if(para->bc->nb_block!=0) */ /***************************************************************************** | Read the wall boundary conditions *****************************************************************************/ fgets(string, 400, file_params); - sscanf(string,"%d", ¶->bc->nb_wall); + sscanf(string, "%d", ¶->bc->nb_wall); sprintf(msg, "read_sci_input(): para->bc->nb_wall=%d", para->bc->nb_wall); ffd_log(msg, FFD_NORMAL); - if(para->bc->nb_wall!=0) { - /*------------------------------------------------------------------------- - | Allocate the memory for bc name and id - -------------------------------------------------------------------------*/ - para->bc->wallName = (char**)malloc(para->bc->nb_wall*sizeof(char*)); - if(para->bc->wallName==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->wallName.", FFD_ERROR); - return 1; - } - - para->bc->wallId = (int *)malloc(sizeof(int)*para->bc->nb_wall); - if(para->bc->wallId==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->wallId.", FFD_ERROR); - return 1; - } - - for(i=0; ibc->nb_wall; i++) - para->bc->wallId[i] = -1; - - para->bc->AWall = (REAL*) malloc(para->bc->nb_wall*sizeof(REAL)); - if(para->bc->AWall==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->AWall.", FFD_ERROR); - return 1; - } - - para->bc->temHea = (REAL*) malloc(para->bc->nb_wall*sizeof(REAL)); - if(para->bc->temHea==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->heaTem.", FFD_ERROR); - return 1; - } - - para->bc->temHeaAve = (REAL*) malloc(para->bc->nb_wall*sizeof(REAL)); - if(para->bc->temHeaAve==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->temHeaAve.", FFD_ERROR); - return 1; - } - - para->bc->temHeaMean = (REAL*) malloc(para->bc->nb_wall*sizeof(REAL)); - if(para->bc->temHeaMean==NULL) { - ffd_log("read_sci_input(): Could not allocate memory for " - "para->bc->temHeaMean.", FFD_ERROR); - return 1; - } - - /*------------------------------------------------------------------------- - | Read wall conditions for each wall - -------------------------------------------------------------------------*/ - for(i=0; ibc->nb_wall; i++) { - /*....................................................................... - | Get the names of boundary - .......................................................................*/ - fgets(string, 400, file_params); - /* Get the length of name (The name may contain white space)*/ - for(j=0; string[j] != '\n'; j++) { - continue; - } - - para->bc->wallName[i] = (char*)malloc((j+1)*sizeof(char)); - if(para->bc->wallName[i]==NULL) { - sprintf(msg, "read_sci_input(): Could not allocate memory for " - "para->bc->wallName[%d].", i); - ffd_log(msg, FFD_ERROR); - return 1; - } - - strncpy(para->bc->wallName[i], (const char*)string, j); - /* Add an ending*/ - para->bc->wallName[i][j] = '\0'; - sprintf(msg, "read_sci_input(): para->bc->wallName[%d]=\"%s\"", - i, para->bc->wallName[i]); - ffd_log(msg, FFD_NORMAL); - /*....................................................................... - | Get the boundary conditions - .......................................................................*/ - /* X_index_start, Y_index_Start, Z_index_Start,*/ - /* X_index_End, Y_index_End, Z_index_End,*/ - /* Thermal Condition (0: Flux; 1:Temperature), Value of thermal condition*/ - fgets(string, 400, file_params); - sscanf(string,"%d%d%d%d%d%d%d%lf", &SI, &SJ, &SK, &EI, - &EJ, &EK, &FLTMP, &TMP); - sprintf(msg, "read_sci_input(): ThermalBC=%d, T/q_dot=%f", - FLTMP, TMP); - ffd_log(msg, FFD_NORMAL); - - /* Reset X index*/ - if(SI==1) { /* West*/ - SI = 0; - if(EI>=imax) EI = EI + 1; - } - else if(SI==imax+1) /* East*/ - EI = EI + SI; - else /* Internal*/ - EI = EI + SI - 1; - - /* Reset Y index*/ - if(SJ==1) { /* South*/ - SJ = 0; - if(EJ>=jmax) EJ = EJ + 1; - } - else if(SJ==jmax+1) /* North*/ - EJ = EJ + SJ; - else /* Internal*/ - EJ = EJ + SJ - 1; - /* Reset Z index*/ - if(SK==1) { /* Floor*/ - SK = 0; - if(EK>=kmax) EK = EK + 1; - } - else if (SK==kmax+1) /* Ceiling*/ - EK = EK + SK; - else /* Internal*/ - EK = EK + SK -1; - - /* Assign value for each wall cell*/ - for(ii=SI; ii<=EI; ii++) - for(ij=SJ; ij<=EJ; ij++) - for(ik=SK; ik<=EK; ik++) { - /* If cell hasn't been updated (default value -1)*/ - if(flagp[IX(ii,ij,ik)]<0) { - BINDEX[0][index] = ii; - BINDEX[1][index] = ij; - BINDEX[2][index] = ik; - /* Define the thermal boundary property*/ - BINDEX[3][index] = FLTMP; - BINDEX[4][index] = i; - index++; - - /* Set the cell to solid*/ - flagp[IX(ii,ij,ik)] = SOLID; - if(FLTMP==1) var[TEMPBC][IX(ii,ij,ik)] = TMP; - if(FLTMP==0) var[QFLUXBC][IX(ii,ij,ik)] = TMP; - } - } /* End of assigning value for each wall cell*/ - } /* End of assigning value for each wall surface*/ - } /* End of assigning value for wall boundary*/ + if (para->bc->nb_wall != 0) { + /*------------------------------------------------------------------------- + | Allocate the memory for bc name and id + -------------------------------------------------------------------------*/ + para->bc->wallName = (char**)malloc(para->bc->nb_wall * sizeof(char*)); + if (para->bc->wallName == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->wallName.", FFD_ERROR); + return 1; + } + + para->bc->wallId = (int*)malloc(sizeof(int) * para->bc->nb_wall); + if (para->bc->wallId == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->wallId.", FFD_ERROR); + return 1; + } + + for (i = 0; i < para->bc->nb_wall; i++) + para->bc->wallId[i] = -1; + + para->bc->AWall = (REAL*)malloc(para->bc->nb_wall * sizeof(REAL)); + if (para->bc->AWall == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->AWall.", FFD_ERROR); + return 1; + } + + para->bc->temHea = (REAL*)malloc(para->bc->nb_wall * sizeof(REAL)); + if (para->bc->temHea == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->heaTem.", FFD_ERROR); + return 1; + } + + para->bc->temHeaAve = (REAL*)malloc(para->bc->nb_wall * sizeof(REAL)); + if (para->bc->temHeaAve == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->temHeaAve.", FFD_ERROR); + return 1; + } + + para->bc->temHeaMean = (REAL*)malloc(para->bc->nb_wall * sizeof(REAL)); + if (para->bc->temHeaMean == NULL) { + ffd_log("read_sci_input(): Could not allocate memory for " + "para->bc->temHeaMean.", FFD_ERROR); + return 1; + } + + /*------------------------------------------------------------------------- + | Read wall conditions for each wall + -------------------------------------------------------------------------*/ + for (i = 0; i < para->bc->nb_wall; i++) { + /*....................................................................... + | Get the names of boundary + .......................................................................*/ + fgets(string, 400, file_params); + /* Get the length of name (The name may contain white space) */ + for (j = 0; string[j] != '\n'; j++) { + continue; + } + + para->bc->wallName[i] = (char*)malloc((j + 1) * sizeof(char)); + if (para->bc->wallName[i] == NULL) { + sprintf(msg, "read_sci_input(): Could not allocate memory for " + "para->bc->wallName[%d].", i); + ffd_log(msg, FFD_ERROR); + return 1; + } + + strncpy(para->bc->wallName[i], (const char*)string, j); + /* Add an ending */ + para->bc->wallName[i][j] = '\0'; + sprintf(msg, "read_sci_input(): para->bc->wallName[%d]=\"%s\"", + i, para->bc->wallName[i]); + ffd_log(msg, FFD_NORMAL); + /*....................................................................... + | Get the boundary conditions + .......................................................................*/ + /* X_index_start, Y_index_Start, Z_index_Start, */ + /* X_index_End, Y_index_End, Z_index_End, */ + /* Thermal Condition (0: Flux; 1:Temperature), Value of thermal condition */ + fgets(string, 400, file_params); + if (ifDouble) { + sscanf(string, "%d%d%d%d%d%d%d%lf", &SI, &SJ, &SK, &EI, + &EJ, &EK, &FLTMP, &TMP); + } + else { + sscanf(string, "%d%d%d%d%d%d%d%f", &SI, &SJ, &SK, &EI, + &EJ, &EK, &FLTMP, &TMP); + } + sprintf(msg, "read_sci_input(): ThermalBC=%d, T/q_dot=%f", + FLTMP, TMP); + ffd_log(msg, FFD_NORMAL); + +#ifdef FFD_ISAT + /* Overwrite value by ISAT inputs for walls */ + if (num_wall > 0) { + if (wall_re[i]) + TMP = wall_value[i]; + sprintf(msg, "read_sci_input(): ThermalBC=%d, T/q_dot=%f after overwrite.", + FLTMP, TMP); + ffd_log(msg, FFD_NORMAL); + } +#endif + + /* Reset X index */ + if (SI == 1) { /* West */ + SI = 0; + if (EI >= imax) EI = EI + 1; + } + else if (SI == imax + 1) /* East */ + EI = EI + SI; + else /* Internal */ + EI = EI + SI - 1; + + /* Reset Y index */ + if (SJ == 1) { /* South */ + SJ = 0; + if (EJ >= jmax) EJ = EJ + 1; + } + else if (SJ == jmax + 1) /* North */ + EJ = EJ + SJ; + else /* Internal */ + EJ = EJ + SJ - 1; + /* Reset Z index */ + if (SK == 1) { /* Floor */ + SK = 0; + if (EK >= kmax) EK = EK + 1; + } + else if (SK == kmax + 1) /* Ceiling */ + EK = EK + SK; + else /* Internal */ + EK = EK + SK - 1; + + /* Assign value for each wall cell */ + for (ii = SI; ii <= EI; ii++) { + for (ij = SJ; ij <= EJ; ij++) { + for (ik = SK; ik <= EK; ik++) { + /* If cell hasn't been updated (default value -1) */ + if (flagp[IX(ii, ij, ik)] < 0) { + BINDEX[0][index] = ii; + BINDEX[1][index] = ij; + BINDEX[2][index] = ik; + /* Define the thermal boundary property */ + BINDEX[3][index] = FLTMP; + BINDEX[4][index] = i + para->bc->nb_block; + index++; + + /* Set the cell to solid */ + flagp[IX(ii, ij, ik)] = SOLID; + if (FLTMP == 1) var[TEMPBC][IX(ii, ij, ik)] = TMP; + if (FLTMP == 0) var[QFLUXBC][IX(ii, ij, ik)] = TMP; + } + } /* End of assigning value for each wall cell */ + } + } + } /* End of assigning value for each wall surface */ + } /* End of assigning value for wall boundary */ /***************************************************************************** | Read the boundary conditions for contaminant source | Warning: The data is ignored in current version *****************************************************************************/ fgets(string, 400, file_params); - sscanf(string,"%d", ¶->bc->nb_source); + sscanf(string, "%d", ¶->bc->nb_source); sprintf(msg, "read_sci_input(): para->bc->nb_source=%d", para->bc->nb_source); ffd_log(msg, FFD_NORMAL); - if(para->bc->nb_source!=0) { - sscanf(string,"%s%d%d%d%d%d%d%lf", - name, &SI, &SJ, &SK, &EI, &EJ, &EK, &MASS); - bcnameid++; - - sprintf(msg, "read_sci_input(): Source %s is not used in current version.", - name); - ffd_log(msg, FFD_WARNING); - sprintf(msg, "read_sci_input(): Xi_dot=%f", MASS); - ffd_log(msg, FFD_NORMAL); - /*Warning: Need to add code to assign the BC value as other part does*/ + if (para->bc->nb_source != 0) { + if (ifDouble) { + sscanf(string, "%s%d%d%d%d%d%d%lf", + name, &SI, &SJ, &SK, &EI, &EJ, &EK, &MASS); + } + else { + sscanf(string, "%s%d%d%d%d%d%d%f", + name, &SI, &SJ, &SK, &EI, &EJ, &EK, &MASS); + } + bcnameid++; + + sprintf(msg, "read_sci_input(): Source %s is not used in current version.", + name); + ffd_log(msg, FFD_WARNING); + sprintf(msg, "read_sci_input(): Xi_dot=%f", MASS); + ffd_log(msg, FFD_NORMAL); + /*Warning: Need to add code to assign the BC value as other part does*/ } - para->geom->index=index; + para->geom->index = index; /***************************************************************************** | Read other simulation data *****************************************************************************/ - /* Discard the unused data*/ + /* Discard the unused data */ fgets(string, 400, file_params); /*maximum iteration*/ + /*fgets(string, 400, file_params);*/ /*maximum iteration*/ fgets(string, 400, file_params); /*convergence rate*/ fgets(string, 400, file_params); /*Turbulence model*/ fgets(string, 400, file_params); /*initial value*/ @@ -836,7 +1968,7 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { fgets(string, 400, file_params); /*reference point*/ fgets(string, 400, file_params); /*monitoring point*/ - /* Discard setting for restarting the old FFD simulation*/ + /* Discard setting for restarting the old FFD simulation */ fgets(string, 400, file_params); /* sscanf(string,"%d", ¶->inpu->read_old_ffd_file); @@ -844,12 +1976,12 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { para->inpu->read_old_ffd_file); ffd_log(msg, FFD_NORMAL); */ - /* Discard the unused data*/ + /* Discard the unused data */ fgets(string, 400, file_params); /*print frequency*/ fgets(string, 400, file_params); /*Pressure variable Y/N*/ fgets(string, 400, file_params); /*Steady state, buoyancy.*/ - /* Discard physical properties*/ + /* Discard physical properties */ fgets(string, 400, file_params); /* sscanf(string,"%f %f %f %f %f %f %f %f %f", ¶->prob->rho, @@ -883,16 +2015,16 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { ffd_log(msg, FFD_NORMAL); */ - /* Read simulation time settings*/ + /* Read simulation time settings */ fgets(string, 400, file_params); sscanf(string,"%lf %lf %d", ¶->mytime->t_start, ¶->mytime->dt, ¶->mytime->step_total); - sprintf(msg, "read_sci_input(): para->mytime->t_start=%f", + sprintf(msg, "read_sci_input(): para->mytime->t_start=%lf", para->mytime->t_start); ffd_log(msg, FFD_NORMAL); - sprintf(msg, "read_sci_input(): para->mytime->dt=%f", para->mytime->dt); + sprintf(msg, "read_sci_input(): para->mytime->dt=%lf", para->mytime->dt); ffd_log(msg, FFD_NORMAL); sprintf(msg, "read_sci_input(): para->mytime->step_total=%d", @@ -910,18 +2042,21 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { free(dely); free(delz); - sprintf(msg, "read_sci_input(): Read sci input file %s", + sprintf(msg, "read_sci_input(): end of reading sci input file %s", para->inpu->parameter_file_name); ffd_log(msg, FFD_NORMAL); - /* Free the filePath allocated in parameter_reader.c*/ - if (para->cosim->para->filePath != NULL){ - free(para->cosim->para->filePath); + +#ifndef FFD_ISAT + if (para->cosim->para->filePath != NULL) { + free(para->cosim->para->filePath); } - return 0; -} /* End of read_sci_input()*/ +#endif - /* + return 0; +} /* End of read_sci_input() */ + +/* * Read the file to identify the block cells in space * * @param para Pointer to FFD parameters @@ -930,76 +2065,93 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX) { * * @return 0 if no error occurred */ -int read_sci_zeroone(PARA_DATA *para, REAL **var, int **BINDEX) { - int i, j, k; - int delcount=0; - int mark; - int imax = para->geom->imax; - int jmax = para->geom->jmax; - int kmax = para->geom->kmax; - int index = para->geom->index; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - REAL *flagp = var[FLAGP]; - - if( (file_params=fopen(para->inpu->block_file_name,"r")) == NULL ) { - sprintf(msg, "read_sci_input():Could not open file \"%s\"!\n", - para->inpu->block_file_name); - ffd_log(msg, FFD_ERROR); - return 1; - } - - sprintf(msg, "read_sci_input(): start to read block information from \"%s\".", - para->inpu->block_file_name); - ffd_log(msg, FFD_NORMAL); - - for(k=1;k<=kmax;k++) - for(j=1;j<=jmax;j++) - for(i=1;i<=imax;i++) { - fscanf(file_params,"%d" ,&mark); - - /* mark=1 block cell;mark=0 fluid cell*/ - - if(mark==1) { - flagp[IX(i,j,k)] = SOLID; - BINDEX[0][index] = i; - BINDEX[1][index] = j; - BINDEX[2][index] = k; - index++; - } - delcount++; - - if(delcount==25) { - fscanf(file_params,"\n"); - delcount=0; - } - } - - fclose(file_params); - para->geom->index=index; - - sprintf(msg, "read_sci_input(): end of reading zeroone.dat."); - ffd_log(msg, FFD_NORMAL); - - return 0; +int read_sci_zeroone(PARA_DATA* para, REAL** var, int** BINDEX) { + int i, j, k; + int delcount = 0; + int mark; + int imax = para->geom->imax; + int jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int index = para->geom->index; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL* flagp = var[FLAGP]; + +#ifndef FFD_ISAT /*if no ISAT*/ + if ((file_params = fopen(para->inpu->block_file_name, "r")) == NULL) { + sprintf(msg, "read_sci_input():Could not open file \"%s\"!\n", + para->inpu->block_file_name); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "read_sci_input(): start to read block information from \"%s\".", + para->inpu->block_file_name); + ffd_log(msg, FFD_NORMAL); +#else /*if called by ISAT*/ + char filenametmp[400]; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "zeroone.dat"); + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_zeroone: Could not open the file \"%s\".", + filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "read_sci_zeroone: start to read block information from %s", + filenametmp); + ffd_log(msg, FFD_NORMAL); +#endif + + for (k = 1;k <= kmax;k++) + for (j = 1;j <= jmax;j++) + for (i = 1;i <= imax;i++) { + fscanf(file_params, "%d", &mark); + + /* mark=1 block cell;mark=0 fluid cell*/ + + if (mark == 1) { + flagp[IX(i, j, k)] = SOLID; + BINDEX[0][index] = i; + BINDEX[1][index] = j; + BINDEX[2][index] = k; + index++; + } + delcount++; + + if (delcount == 25) { + fscanf(file_params, "\n"); + delcount = 0; + } + } + + fclose(file_params); + para->geom->index = index; + + sprintf(msg, "read_sci_input(): end of reading zeroone.dat."); + ffd_log(msg, FFD_NORMAL); + + return 0; } /* End of read_sci_zeroone()*/ - /* - * Identify the properties of cells - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ -void mark_cell(PARA_DATA *para, REAL **var) { - int i,j, k; + +/**************************************************************************** +| Identify the properties of cells +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ +void mark_cell(PARA_DATA *para, REAL **var, int **BINDEX) { + int i, j, k; + int ii, ij, ik, index; + int rack_id, rack_direction; int imax = para->geom->imax; int jmax = para->geom->jmax; int kmax = para->geom->kmax; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); REAL *flagu = var[FLAGU],*flagv = var[FLAGV],*flagw = var[FLAGW]; REAL *flagp = var[FLAGP]; + int put_X = para->geom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; flagp[IX(0,0,0)] = SOLID; flagp[IX(0,0,kmax+1)] = SOLID; @@ -1021,38 +2173,108 @@ void mark_cell(PARA_DATA *para, REAL **var) { END_FOR FOR_ALL_CELL - - if(flagp[IX(i,j,k)]==1) { - - flagu[IX(i,j,k)]=1; - flagv[IX(i,j,k)]=1; - flagw[IX(i,j,k)]=1; - - if(i!=0) flagu[IX(i-1,j,k)]=1; - if(j!=0) flagv[IX(i,j-1,k)]=1; - if(k!=0) flagw[IX(i,j,k-1)]=1; - } - - if(flagp[IX(i,j,k)]==0) { - flagu[IX(i,j,k)]=0; - flagv[IX(i,j,k)]=0; - flagw[IX(i,j,k)]=0; - - if(i!=0) flagu[IX(i-1,j,k)]=0; - if(j!=0) flagv[IX(i,j-1,k)]=0; - if(k!=0) flagw[IX(i,j,k-1)]=0; -} - - if(flagp[IX(i,j,k)]==2) { - - flagu[IX(i,j,k)]=2; - flagv[IX(i,j,k)]=2; - flagw[IX(i,j,k)]=2; - - if(i!=0) flagu[IX(i-1,j,k)]=2; - if(j!=0) flagv[IX(i,j-1,k)]=2; - if(k!=0) flagw[IX(i,j,k-1)]=2; -} + /* Mark solids */ + if (flagp[IX(i, j, k)] == SOLID) { + + flagu[IX(i, j, k)] = SOLID; + flagv[IX(i, j, k)] = SOLID; + flagw[IX(i, j, k)] = SOLID; + + if (i != 0) flagu[IX(i - 1, j, k)] = SOLID; + if (j != 0) flagv[IX(i, j - 1, k)] = SOLID; + if (k != 0) flagw[IX(i, j, k - 1)] = SOLID; + }/* Mark solids */ + + /* Mark rack outlets */ + if (flagp[IX(i, j, k)] == RACK_OUTLET) { + /* get direction of rack */ + for (index = 0;index < para->geom->index;index++) { + ii = BINDEX[0][index]; + ij = BINDEX[1][index]; + ik = BINDEX[2][index]; + if (i == ii && j == ij && k == ik) { + rack_id = BINDEX[4][index]; + rack_direction = para->bc->RackDir[rack_id]; + break; + } + } + /* Mark cells */ + flagu[IX(i, j, k)] = INLET; + flagv[IX(i, j, k)] = INLET; + flagw[IX(i, j, k)] = INLET; + + if (rack_direction == -1) { + if (i != 0) { + flagu[IX(i - 1, j, k)] = INLET; + } + } + if (rack_direction == -2) { + if (j != 0) { + flagv[IX(i, j - 1, k)] = INLET; + } + } + if (rack_direction == -3) { + if (k != 0) { + flagw[IX(i, j, k - 1)] = INLET; + } + } + }/* end of marking rack outlets */ + + /* Mark rack inlets */ + if (flagp[IX(i, j, k)] == RACK_INLET) { + /* get direction of rack */ + for (index = 0;index < para->geom->index;index++) { + ii = BINDEX[0][index]; + ij = BINDEX[1][index]; + ik = BINDEX[2][index]; + if (i == ii && j == ij && k == ik) { + rack_id = BINDEX[4][index]; + rack_direction = para->bc->RackDir[rack_id]; + break; + } + } + /* mark cells */ + flagu[IX(i, j, k)] = OUTLET; + flagv[IX(i, j, k)] = OUTLET; + flagw[IX(i, j, k)] = OUTLET; + + if (rack_direction == 1) { + if (i != 0) { + flagu[IX(i - 1, j, k)] = OUTLET; + } + } + if (rack_direction == 2) { + if (j != 0) { + flagv[IX(i, j - 1, k)] = OUTLET; + } + } + if (rack_direction == 3) { + if (k != 0) { + flagw[IX(i, j, k - 1)] = OUTLET; + } + } + }/* end of marking rack inlets */ + + /* Mark inlets */ + if (flagp[IX(i, j, k)] == INLET) { + flagu[IX(i, j, k)] = INLET; + flagv[IX(i, j, k)] = INLET; + flagw[IX(i, j, k)] = INLET; + if (i != 0) flagu[IX(i - 1, j, k)] = INLET; + if (j != 0) flagv[IX(i, j - 1, k)] = INLET; + if (k != 0) flagw[IX(i, j, k - 1)] = INLET; + }/* end of marking inlets */ + + /* Mark outlets */ + if (flagp[IX(i, j, k)] == OUTLET || flagp[IX(i, j, k)] == TILE) { + flagu[IX(i, j, k)] = OUTLET; + flagv[IX(i, j, k)] = OUTLET; + flagw[IX(i, j, k)] = OUTLET; + if (i != 0) flagu[IX(i - 1, j, k)] = OUTLET; + if (j != 0) flagv[IX(i, j - 1, k)] = OUTLET; + if (k != 0) flagw[IX(i, j, k - 1)] = OUTLET; + + }/* end of marking outlets */ END_FOR -} /* End of mark_cell()*/ +} /* End of mark_cell() */ diff --git a/Buildings/Resources/src/FastFluidDynamics/sci_reader.h b/Buildings/Resources/src/FastFluidDynamics/sci_reader.h index b5c01addd90..d4d18451eb7 100644 --- a/Buildings/Resources/src/FastFluidDynamics/sci_reader.h +++ b/Buildings/Resources/src/FastFluidDynamics/sci_reader.h @@ -1,19 +1,25 @@ -/* - * - * @file sci_reader.h - * - * @brief Read mesh and simulation data defined by SCI - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file sci_reader.h +| +| \brief Read mesh and simulation data defined by SCI +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #ifndef _SCI_READER_H #define _SCI_READER_H @@ -36,29 +42,65 @@ FILE *file_params; -/* -* Read the basic index information from input.cfd -* -* Specific method for advection will be selected according to the variable -* type. -* -* @param para Pointer to FFD parameters -* @param var Pointer to FFD simulation variables -* -* @return 0 if no error occurred -*/ -int read_sci_max(PARA_DATA *para, REAL **var); +/**************************************************************************** +| check the input forat as current FFD accepts a format excluding unused info +| +| Specific method for advection will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ +/*int check_input_format();*/ -/* - * Read other information from input.cfd - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Type of variable - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Read the basic index information from input.cfd +| +| Specific method for advection will be selected according to the variable +| type. +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ +int read_sci_max(PARA_DATA* para, REAL** var); + +/**************************************************************************** + +| Check the number of racks in the input file +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_num_racks(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Check the number of tiles in the input file +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_num_tiles(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Read other information from input.cfd +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Type of variable +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX); /* @@ -72,12 +114,14 @@ int read_sci_input(PARA_DATA *para, REAL **var, int **BINDEX); */ int read_sci_zeroone(PARA_DATA *para, REAL **var, int **BINDEX); -/* - * Identify the properties of cells - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ -void mark_cell(PARA_DATA *para, REAL **var); +/**************************************************************************** +| Identify the properties of cells +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ +void mark_cell(PARA_DATA *para, REAL **var, int **BINDEX); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/solver.c b/Buildings/Resources/src/FastFluidDynamics/solver.c index 3e609a65282..99fd57b8ea7 100644 --- a/Buildings/Resources/src/FastFluidDynamics/solver.c +++ b/Buildings/Resources/src/FastFluidDynamics/solver.c @@ -1,54 +1,77 @@ -/* - * - * \file solver.c - * - * \brief Solver of FFD - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * Xu Han - * University of Colorado Boulder - * xuha3556@colorado.edu - * Tian Wei - * University of Miami - * W.tian@miami.edu - * - * \date 2/19/2019 - * - */ +/**************************************************************************** +| +| \file solver.c +| +| \brief Solver of FFD +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #include "solver.h" -/* - * FFD solver - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| FFD solver +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int FFD_solver(PARA_DATA *para, REAL **var, int **BINDEX) { int step_total = para->mytime->step_total; REAL t_steady = para->mytime->t_steady; double t_cosim; - int flag, next; + int flag, next, bar=0; + /*int output_t = 110; *//*time step to begin outputting dynamic file*/ + char tmpName[10]; - if(para->solv->cosimulation == 1) - t_cosim = para->mytime->t + para->cosim->modelica->dt; + if (para->solv->cosimulation == 1) + t_cosim = para->mytime->t + para->cosim->modelica->dt; + + /* check the number of tiles in input file */ + if (check_num_tiles(¶, var, BINDEX)>0) para->bc->hasTile = 1; /*************************************************************************** | Solver Loop ***************************************************************************/ next = 1; while(next==1) { - /*-------------------------------------------------------------------------*/ - /* Integration*/ - /*-------------------------------------------------------------------------*/ + /*Outputs dynamic file*/ + /*if (para->outp->OutputDynamicFile == 1) + if (fabs(para->mytime->t - output_t) < SMALL ) { + sprintf(tmpName, "step%d", (int)(floor(para->mytime->t + 0.5))); + if (write_vtk_data(para, var, tmpName) != 0) { + ffd_log("FFD_solver(): Could not write the transient data.", + FFD_ERROR); + return 1; + } + sprintf(msg, "ffd_solver(): write transient data at t=%f[s]\n", para->mytime->t); + ffd_log(msg, FFD_NORMAL); + // output file every second + output_t += 1; + }*/ + + /* check the average temperature of fluid to calculate the energy conservation + need to have a vector to store the temperature for calculation of energy changing rate + Special note: the average temperature is NOT good for calculation of above item */ + /*if (para->solv->check_conservation) para->prob->Tem_Ave_LastTime = average_volume(para, var, var[TEMP]);*/ + + flag =0; flag = vel_step(para, var, BINDEX); if(flag != 0) { ffd_log("FFD_solver(): Could not solve velocity.", FFD_ERROR); @@ -75,360 +98,515 @@ int FFD_solver(PARA_DATA *para, REAL **var, int **BINDEX) { timing(para); - /*-------------------------------------------------------------------------*/ - /* Process for Coupled simulation*/ - /*-------------------------------------------------------------------------*/ - if(para->solv->cosimulation == 1) { - /*....................................................................... - | Condition 1: If synchronization point is reached, - | Action: Do data exchange - .......................................................................*/ - if(fabs(para->mytime->t - t_cosim)outp->version==DEBUG) - ffd_log("FFD_solver(): Coupled simulation, reached synchronization point", - FFD_NORMAL); - - /* Average the FFD simulation data*/ - flag = average_time(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not average the data over time.", - FFD_ERROR); - return flag; - } - - /*....................................................................... - | Check if Modelica asks to stop the simulation - .......................................................................*/ - if(para->cosim->para->flag==0) { - /* Stop the solver*/ - next = 0; - sprintf(msg, - "ffd_solver(): Received stop command from Modelica at " - "FFD time: %f[s], Modelica Time: %f[s].", - para->mytime->t, para->cosim->modelica->t); - ffd_log(msg, FFD_NORMAL); - } - else{ - /* the data for coupled simulation*/ - flag = read_cosim_data(para, var, BINDEX); - if(flag != 0) { - ffd_log("FFD_solver(): Could not read coupled simulation data.", FFD_ERROR); - return flag; - } + /* log the imbalance of energy */ + /*if (para->solv->check_conservation) CheckImbalance(para, var, TEMP, BINDEX);*/ + + /*-------------------------------------------------------------------------*/ + /* Process for Coupled simulation*/ + /*-------------------------------------------------------------------------*/ + if (para->solv->cosimulation == 1) { + /*....................................................................... + | Condition 1: If synchronization point is reached, + | Action: Do data exchange + .......................................................................*/ + if (fabs(para->mytime->t - t_cosim) < SMALL) { + if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): Coupled simulation, reached synchronization point", + FFD_NORMAL); + + /* Average the FFD simulation data*/ + flag = average_time(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not average the data over time.", + FFD_ERROR); + return flag; + } + + /*....................................................................... + | Check if Modelica asks to stop the simulation + .......................................................................*/ + if (para->cosim->para->flag == 0) { + /* Stop the solver*/ + next = 0; + sprintf(msg, + "ffd_solver(): Received stop command from Modelica at " + "FFD time: %f[s], Modelica Time: %f[s].", + para->mytime->t, para->cosim->modelica->t); + ffd_log(msg, FFD_NORMAL); + } + else { + /* the data for coupled simulation*/ + flag = read_cosim_data(para, var, BINDEX); + if (flag != 0) { + ffd_log("FFD_solver(): Could not read coupled simulation data.", FFD_ERROR); + return flag; } - /*....................................................................... - | Check if Modelica asks to stop the simulation - .......................................................................*/ - if(para->cosim->para->flag==0) { - /* Stop the solver*/ - next = 0; - sprintf(msg, - "ffd_solver(): Received stop command from Modelica at " - "FFD time: %f[s], Modelica Time: %f[s].", - para->mytime->t, para->cosim->modelica->t); - ffd_log(msg, FFD_NORMAL); - } - else{ - flag = write_cosim_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not write coupled simulation data.", FFD_ERROR); - return flag; + } + /*....................................................................... + | Check if Modelica asks to stop the simulation + .......................................................................*/ + if (para->cosim->para->flag == 0) { + /* Stop the solver*/ + next = 0; + + /*write vtk or plt file*/ + if (para->outp->result_file == VTK) { + if (write_vtk_data(para, var, "result") != 0) { + ffd_log("FFD_solver(): Could not write the result file.", FFD_ERROR); + return 1; } + } + else { + write_tecplot_data(para, var, "result"); + } - sprintf(msg, "ffd_solver(): Synchronized data at t=%f[s]\n", para->mytime->t); - ffd_log(msg, FFD_NORMAL); + sprintf(msg, + "ffd_solver(): Received stop command from Modelica at " + "FFD time: %f[s], Modelica Time: %f[s].", + para->mytime->t, para->cosim->modelica->t); + ffd_log(msg, FFD_NORMAL); + } + else { + flag = write_cosim_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not write coupled simulation data.", FFD_ERROR); + return flag; } - /* Set the next synchronization time*/ - t_cosim += para->cosim->modelica->dt; - /* Reset all the averaged data to 0*/ - flag = reset_time_averaged_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not reset averaged data.", - FFD_ERROR); - return flag; - } - - continue; - } /* End of Condition 1*/ - /*....................................................................... - | Condition 2: synchronization point is not reached , - | but already miss the synchronization point - | Action: Stop simulation - .......................................................................*/ - else if(para->mytime->t-t_cosim>SMALL) { - sprintf(msg, - "ffd_solver(): Mis-matched synchronization step with " - "t_ffd=%f[s], t_cosim=%f[s], dt_syn=%f[s], dt_ffd=%f[s].", - para->mytime->t, t_cosim, - para->cosim->modelica->dt, para->mytime->dt); - ffd_log(msg, FFD_ERROR); - sprintf(msg, "para->mytime->t - t_cosim=%lf", para->mytime->t - t_cosim); - ffd_log(msg, FFD_ERROR); - return 1; - } /* end of Condition 2*/ - /*....................................................................... - | Condition 3: synchronization point is not reached - | and not miss the synchronization point - | Action: Do FFD internal simulation and add data for future average - .......................................................................*/ - else { - if(para->outp->version==DEBUG) - ffd_log("FFD_solver(): Coupled simulation, prepare next step for FFD", - FFD_NORMAL); - - /* Integrate the data on the boundary surface*/ - flag = surface_integrate(para, var, BINDEX); - if(flag != 0) { - ffd_log("FFD_solver(): " - "Could not average the data on boundary.", - FFD_ERROR); - return flag; - } - else if (para->outp->version==DEBUG) - ffd_log("FFD_solver(): completed surface integration", - FFD_NORMAL); - - flag = add_time_averaged_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): " - "Could not add the averaged data.", - FFD_ERROR); - return flag; - } - else if (para->outp->version==DEBUG) - ffd_log("FFD_solver(): completed time average", - FFD_NORMAL); - - } /* End of Condition 3*/ - } /* End of coupled simulation*/ - /*-------------------------------------------------------------------------*/ - /* Process for single simulation*/ - /*-------------------------------------------------------------------------*/ - else { - if(para->outp->version==DEBUG) - ffd_log("FFD_solver(): Single Simulation, prepare for next time step", - FFD_NORMAL); - - /* Start to record data for calculating mean velocity if needed*/ - if(para->mytime->t>t_steady && para->outp->cal_mean==0) { - para->outp->cal_mean = 1; - flag = reset_time_averaged_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not reset averaged data.", - FFD_ERROR); - return flag; - } - else - ffd_log("FFD_solver(): Start to calculate mean properties.", - FFD_NORMAL); - } + sprintf(msg, "ffd_solver(): Synchronized data at t=%f[s]\n", para->mytime->t); + ffd_log(msg, FFD_NORMAL); - if(para->outp->cal_mean==1) { - flag = add_time_averaged_data(para, var); - if(flag != 0) { - ffd_log("FFD_solver(): Could not add the averaged data.", - FFD_ERROR); - return 1; - } - } - next = para->mytime->step_current < step_total ? 1 : 0; - } - } /* End of While loop*/ + } + /* Set the next synchronization time*/ + t_cosim += para->cosim->modelica->dt; + /* Reset all the averaged data to 0*/ + flag = reset_time_averaged_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not reset averaged data.", + FFD_ERROR); + return flag; + } - return flag; -} /* End of FFD_solver( )*/ - - /* - * Calculate the temperature - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int temp_step(PARA_DATA *para, REAL **var, int **BINDEX) { - REAL *T = var[TEMP], *T0 = var[TMP1]; - int flag = 0; + continue; + } /* End of Condition 1*/ + /*....................................................................... + | Condition 2: synchronization point is not reached , + | but already miss the synchronization point + | Action: Stop simulation + .......................................................................*/ + else if (para->mytime->t - t_cosim > SMALL) { + sprintf(msg, + "ffd_solver(): Mis-matched synchronization step with " + "t_ffd=%f[s], t_cosim=%f[s], dt_syn=%f[s], dt_ffd=%f[s].", + para->mytime->t, t_cosim, + para->cosim->modelica->dt, para->mytime->dt); + ffd_log(msg, FFD_ERROR); + sprintf(msg, "para->mytime->t - t_cosim=%lf", para->mytime->t - t_cosim); + ffd_log(msg, FFD_ERROR); + return 1; + } /* end of Condition 2*/ + /*....................................................................... + | Condition 3: synchronization point is not reached + | and not miss the synchronization point + | Action: Do FFD internal simulation and add data for future average + .......................................................................*/ + else { + if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): Coupled simulation, prepare next step for FFD", + FFD_NORMAL); - flag = advect(para, var, TEMP, 0, T0, T, BINDEX); - if(flag!=0) { - ffd_log("temp_step(): Could not advect temperature.", FFD_ERROR); - return flag; - } + /* Integrate the data on the boundary surface*/ + flag = surface_integrate(para, var, BINDEX); + if (flag != 0) { + ffd_log("FFD_solver(): " + "Could not average the data on boundary.", + FFD_ERROR); + return flag; + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): completed surface integration", + FFD_NORMAL); - flag = diffusion(para, var, TEMP, 0, T, T0, BINDEX); - if(flag!=0) { - ffd_log("temp_step(): Could not diffuse temperature.", FFD_ERROR); - return flag; - } + flag = add_time_averaged_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): " + "Could not add the averaged data.", + FFD_ERROR); + return flag; + } + else if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): completed time average", + FFD_NORMAL); + + } /* End of Condition 3*/ + } /* End of coupled simulation*/ + + else { + if (para->outp->version == DEBUG) + ffd_log("FFD_solver(): Single Simulation, prepare for next time step", + FFD_NORMAL); + + /* Start to record data for calculating mean velocity if needed */ + if (para->mytime->t > t_steady && para->outp->cal_mean == 0) { + para->outp->cal_mean = 1; + flag = reset_time_averaged_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not reset averaged data.", + FFD_ERROR); + return flag; + } + else + ffd_log("FFD_solver(): Start to calculate mean properties.", + FFD_NORMAL); + } + if (para->outp->cal_mean == 1) { + flag = add_time_averaged_data(para, var); + if (flag != 0) { + ffd_log("FFD_solver(): Could not add the averaged data.", + FFD_ERROR); + return 1; + } + } + next = para->mytime->step_current < step_total ? 1 : 0; + } + } /* End of While loop */ return flag; -} /* End of temp_step( )*/ - - /* - * Calculate the contaminant concentration - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ -int den_step(PARA_DATA *para, REAL **var, int **BINDEX) { - REAL *den, *den0 = var[TMP1]; - int i, flag = 0; - - /**************************************************************************** - | Solve the species - ****************************************************************************/ - for(i=0; ibc->nb_Xi; i++) { - if(para->outp->version==DEBUG) { - sprintf(msg, "den_step(): start to solve Xi%d", i+1); - ffd_log(msg, FFD_NORMAL); - } - den = var[Xi1+i]; - flag = advect(para, var, Xi1+i, i, den0, den, BINDEX); - if(flag!=0) { - sprintf(msg, "den_step(): Could not advect species %d", i+1); - ffd_log(msg, FFD_ERROR); - return flag; - } +} /* End of FFD_solver( ) */ - flag = diffusion(para, var, Xi1+i, i, den, den0, BINDEX); - if(flag!=0) { - sprintf(msg, "den_step(): Could not diffuse species %d", i+1); - ffd_log(msg, FFD_ERROR); - return flag; - } - } +/**************************************************************************** +| Calculate the temperature +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int temp_step(PARA_DATA* para, REAL** var, int** BINDEX) { + REAL* T = var[TEMP], * T0 = var[TMP1]; + int flag = 0; + int size = (para->geom->imax + 2) * (para->geom->jmax + 2) * (para->geom->kmax + 2); + REAL residual = 0.0; - /**************************************************************************** - | Solve the trace substances - ****************************************************************************/ - for(i=0; ibc->nb_C; i++) { - if(para->outp->version==DEBUG) { - sprintf(msg, "den_step(): start to solve C%d", i+1); - ffd_log(msg, FFD_NORMAL); - } - den = var[C1+i]; - flag = advect(para, var, Xi1, i, den0, den, BINDEX); - if(flag!=0) { - sprintf(msg, "den_step(): Could not advect trace substance %d", i+1); - ffd_log(msg, FFD_ERROR); - return flag; - } + flag = advect(para, var, TEMP, 0, T0, T, BINDEX); + if (flag != 0) { + ffd_log("temp_step(): Could not advect temperature.", FFD_ERROR); + return flag; + } - flag = diffusion(para, var, Xi1, i, den, den0, BINDEX); - if(flag!=0) { - sprintf(msg, "den_step(): Could not diffuse trace substance %d", i+1); - ffd_log(msg, FFD_ERROR); - return flag; - } - } + /*if (para->solv->check_conservation) para->prob->Tem_Ave_LastTime = average_volume(para, var, var[TMP1]);*/ - return flag; -} /* End of den_step( )*/ - - /* - * Calculate the velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to boundary index - * - * @return 0 if no error occurred - */ + /* check residual after iterative solver */ + if (para->solv->advection_solver == UPWIND && para->solv->check_residual == 1) { + residual = check_residual(para, var, T0, var[FLAGP]); + /*printf("residual after advection is: %f\n", residual);*/ + sprintf(msg, "Residual in advection T using implicit scheme: %f", residual); + ffd_log(msg, FFD_NORMAL); + + para->prob->Energy_Imb_Adv = adv_inconservation(para, var, T, T0, BINDEX); + sprintf(msg, "Energy imbalance (W) after using implicit scheme: %f", para->prob->Energy_Imb_Adv); + ffd_log(msg, FFD_NORMAL); + } + + /* if using the standard Semi-Lagrangian method for advection + then apply the restoration of energy conservation + Wei Tian 6/20/2017, @Schneider Electric, Andover, MA */ + if (para->solv->advection_solver == SEMI) { + /*flag = scalar_conservation(para, var, T, T0, BINDEX);*/ + if (flag != 0) { + ffd_log("temp_step(): Could not conserve temperature.", FFD_ERROR); + return flag; + } + } + + flag = diffusion(para, var, TEMP, 0, T, T0, BINDEX); + if (flag != 0) { + ffd_log("temp_step(): Could not diffuse temperature.", FFD_ERROR); + return flag; + } + + /* check residual after iterative solver */ + if (para->solv->check_residual == 1) { + residual = check_residual(para, var, T, var[FLAGP]); + /*printf("residual after diffusion is: %f\n", residual);*/ + /*getchar();*/ + sprintf(msg, "Residual in diffusion T: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + return flag; +} /* End of temp_step( ) */ + +/**************************************************************************** +| Calculate the contaminant concentration +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int den_step(PARA_DATA* para, REAL** var, int** BINDEX) { + REAL* den, * den0 = var[TMP1]; + int i, flag = 0; + + /**************************************************************************** + | Solve the species + ****************************************************************************/ + for (i = 0; i < para->bc->nb_Xi; i++) { + if (para->outp->version == DEBUG) { + sprintf(msg, "den_step(): start to solve Xi%d", i + 1); + ffd_log(msg, FFD_NORMAL); + } + den = var[Xi1 + i]; + flag = advect(para, var, Xi1 + i, i, den0, den, BINDEX); + if (flag != 0) { + sprintf(msg, "den_step(): Could not advect species %d", i + 1); + ffd_log(msg, FFD_ERROR); + return flag; + } + + flag = diffusion(para, var, Xi1 + i, i, den, den0, BINDEX); + if (flag != 0) { + sprintf(msg, "den_step(): Could not diffuse species %d", i + 1); + ffd_log(msg, FFD_ERROR); + return flag; + } + } + + /**************************************************************************** + | Solve the trace substances + ****************************************************************************/ + for (i = 0; i < para->bc->nb_C; i++) { + if (para->outp->version == DEBUG) { + sprintf(msg, "den_step(): start to solve C%d", i + 1); + ffd_log(msg, FFD_NORMAL); + } + den = var[C1 + i]; + flag = advect(para, var, Xi1, i, den0, den, BINDEX); + if (flag != 0) { + sprintf(msg, "den_step(): Could not advect trace substance %d", i + 1); + ffd_log(msg, FFD_ERROR); + return flag; + } + + flag = diffusion(para, var, Xi1, i, den, den0, BINDEX); + if (flag != 0) { + sprintf(msg, "den_step(): Could not diffuse trace substance %d", i + 1); + ffd_log(msg, FFD_ERROR); + return flag; + } + } + return flag; +} /* End of den_step( ) */ + +/**************************************************************************** +| Calculate the velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| +| \return 0 if no error occurred +****************************************************************************/ int vel_step(PARA_DATA *para, REAL **var,int **BINDEX) { REAL *u = var[VX], *v = var[VY], *w = var[VZ]; REAL *u0 = var[TMP1], *v0 = var[TMP2], *w0 = var[TMP3]; + REAL residual = 0.0; int flag = 0; - flag = advect(para, var, VX, 0, u0, u, BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not advect for velocity X.", FFD_ERROR); - return flag; - } + /* Model tile */ + if (para->bc->hasTile) { + if (para->solv->tile_flow_correct == PRESSURE_BASE) + flag = assign_tile_velocity(para, var, BINDEX); + else if (para->solv->tile_flow_correct == NS_SOURCE) + flag = tile_source(para, var, BINDEX); + else + flag = 0; - flag = advect(para, var, VY, 0, v0, v, BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not advect for velocity Y.", FFD_ERROR); - return flag; - } + if (flag != 0) { + ffd_log("vel_step(): Could not determine the velocity for the tiles in pure tile modeling.", FFD_ERROR); + return flag; + } + } - flag = advect(para, var, VZ, 0, w0, w, BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not advect for velocity Z.", FFD_ERROR); - return flag; - } + /* Call rack black model if there is any rack */ + if (para->bc->nb_rack != 0) { + if (rack_model_black_box(para, var, BINDEX) != 0) { + ffd_log("tile_room_coupled: can not execute the black box model", FFD_ERROR); + } + } - flag = diffusion(para, var, VX, 0, u, u0, BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not diffuse velocity X.", FFD_ERROR); - return flag; - } + /* Output the flow information */ + flag = advect(para, var, VX, 0, u0, u, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not advect for velocity X.", FFD_ERROR); + return flag; + } - flag = diffusion(para, var, VY, 0, v, v0, BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not diffuse velocity Y.", FFD_ERROR); - return flag; - } + /* check residual after iterative solver */ + if (para->solv->advection_solver == UPWIND && para->solv->check_residual == 1) { + residual = check_residual(para, var, u0, var[FLAGU]); + sprintf(msg, "Residual in advection U: %f", residual); + ffd_log(msg, FFD_NORMAL); + } - flag = diffusion(para, var, VZ, 0, w, w0, BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not diffuse velocity Z.", FFD_ERROR); - return flag; - } + flag = advect(para, var, VY, 0, v0, v, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not advect for velocity Y.", FFD_ERROR); + return flag; + } - flag = project(para, var,BINDEX); - if(flag!=0) { - ffd_log("vel_step(): Could not project velocity.", FFD_ERROR); - return flag; - } + /* check residual after iterative solver */ + if (para->solv->advection_solver == UPWIND && para->solv->check_residual == 1) { + residual = check_residual(para, var, v0, var[FLAGV]); + sprintf(msg, "Residual in advection V: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + + flag = advect(para, var, VZ, 0, w0, w, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not advect for velocity Z.", FFD_ERROR); + return flag; + } + + /* check residual after iterative solver */ + if (para->solv->advection_solver == UPWIND && para->solv->check_residual == 1) { + residual = check_residual(para, var, w0, var[FLAGW]); + sprintf(msg, "Residual in advection W: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + + flag = diffusion(para, var, VX, 0, u, u0, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not diffuse velocity X.", FFD_ERROR); + return flag; + } + + /* check residual after iterative solver */ + if (para->solv->check_residual == 1) { + residual = check_residual(para, var, u, var[FLAGU]); + sprintf(msg, "Residual in diffusion U: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + + flag = diffusion(para, var, VY, 0, v, v0, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not diffuse velocity Y.", FFD_ERROR); + return flag; + } - if(para->bc->nb_outlet!=0) flag = mass_conservation(para, var,BINDEX); + /* check residual after iterative solver */ + if (para->solv->check_residual == 1) { + residual = check_residual(para, var, v, var[FLAGV]); + sprintf(msg, "Residual in diffusion V: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + + flag = diffusion(para, var, VZ, 0, w, w0, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not diffuse velocity Z.", FFD_ERROR); + return flag; + } + + + /* check residual after iterative solver */ + if (para->solv->check_residual == 1) { + residual = check_residual(para, var, w, var[FLAGW]); + sprintf(msg, "Residual in diffusion W: %f", residual); + ffd_log(msg, FFD_NORMAL); + } + + flag = project(para, var, BINDEX); + if (flag != 0) { + ffd_log("vel_step(): Could not project velocity.", FFD_ERROR); + return flag; + } + + /* forced mass conservation function is NOT on after projection is Pressure-based correction is applied to tiles. */ + if(para->bc->nb_outlet!=0 && para->solv->mass_conservation_on ==1) flag = mass_conservation(para, var,BINDEX); if(flag!=0) { ffd_log("vel_step(): Could not conduct mass conservation correction.", FFD_ERROR); return flag; } - return flag; -} /* End of vel_step( )*/ - - /* - * Solver for equations - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param var_type Variable type - * @param Pointer to variable - * - * @return 0 if not error occurred - */ -int equ_solver(PARA_DATA *para, REAL **var, int var_type, REAL *psi) { - REAL *flagp = var[FLAGP], *flagu = var[FLAGU], - *flagv = var[FLAGV], *flagw = var[FLAGW]; - int flag = 0; +} /* End of vel_step( ) */ - switch(var_type) { - case VX: - Gauss_Seidel(para, var, flagu, psi); - break; - case VY: - Gauss_Seidel(para, var, flagv, psi); - break; - case VZ: - Gauss_Seidel(para, var, flagw, psi); - break; +/**************************************************************************** +| Solver for equations +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param var_type Variable type +| \param Pointer to variable +| +| \return 0 if not error occurred +****************************************************************************/ +int equ_solver(PARA_DATA* para, REAL** var, FFD_TERM which_term, int var_type, REAL* psi) { + REAL* flagp = var[FLAGP], * flagu = var[FLAGU]; + REAL* flagv = var[FLAGV], * flagw = var[FLAGW]; + int flag = 0; + int num_swipe = 0; +/************************************************************************************************* +| By knowing the different terms, either advection, or, diffusion +| now FFD can allow setting different number of iterations for each term, separately +| However, users cannot set different number of iterations for same terms for solving different +| variables. +| Users can set different number of swipes for GS or Jacobi in input file, input.ffd +| Wei Tian, 06/23/17 +*************************************************************************************************/ + if (which_term == ADV) { + /* advection */ + num_swipe = para->solv->swipe_adv; + } + else if (which_term == DIF) { + /* diffusion */ + num_swipe = para->solv->swipe_dif; + } + else + /* by default it is 5 swipes, or 30 iterations */ + num_swipe = 5; + + switch (var_type) { + case VX: + if (para->solv->solver == GS) { + Gauss_Seidel(para, var, psi, flagu, num_swipe); + } + else { + Jacobi(para, var, psi, flagu, num_swipe); + } + break; + + case VY: + if (para->solv->solver == GS) { + Gauss_Seidel(para, var, psi, flagv, num_swipe); + } + else { + Jacobi(para, var, psi, flagv, num_swipe); + } + break; + + case VZ: + if (para->solv->solver == GS) { + Gauss_Seidel(para, var, psi, flagw, num_swipe); + } + else { + Jacobi(para, var, psi, flagw, num_swipe); + } + break; case TEMP: case IP: case Xi1: case Xi2: case C1: case C2: - Gauss_Seidel(para, var, flagp, psi); - break; + if (para->solv->solver == GS) { + Gauss_Seidel(para, var, psi, flagp, num_swipe); + } + else { + Jacobi(para, var, psi, flagp, num_swipe); + } + break; default: sprintf(msg, "equ_solver(): Solver for variable type %d is not defined.", var_type); @@ -436,6 +614,693 @@ int equ_solver(PARA_DATA *para, REAL **var, int var_type, REAL *psi) { flag = 1; break; } - return flag; -}/* end of equ_solver*/ +}/* end of equ_solver */ + + /**************************************************************************** + | Check Imbalance (the unit is W, so there is no need to multiply a time step to inlet and outlet) + | + | Wei Tian, update 6/20/2017, @Schneider Electric, Andover, MA + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | \param BINDEX Pointer to boundary index + | + | \return 0 if no error occurred + ****************************************************************************/ +FILE* FILE_IM; +int CheckImbalance(PARA_DATA* para, REAL** var, int var_type, int** BINDEX) { + /* declare variables */ + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL* psi = var[TEMP]; + REAL in = 0.0, out = 0.0, wall = 0.0; + REAL V = 0.0; /*volume of fluid*/ + REAL T_ave = 0.0; /*average temperature of fluid*/ + REAL rate_of_change = 0.0; /*energy change rate of fluid*/ + REAL rho_cp = para->prob->rho * para->prob->Cp; + + /* calulate the inflow energy */ + in = inflow(para, var, psi, BINDEX); + in *= rho_cp; + /* caculate the outflow energy */ + out = outflow(para, var, psi, BINDEX); + out *= rho_cp; + /* caculate the heat transfer rate from the wall */ + wall = qwall(para, var, BINDEX); + /* caculate the rate of change of the fluid energy d(MCpT)/dt */ + /*V = fluid_volume(para, var);*/ + /*T_ave = average_volume(para, var, psi);*/ + /*rate_of_change = rho_cp*V*(T_ave - para->prob->Tem_Ave_LastTime) / para->mytime->dt;*/ + + /* sum up of the energy changing rate of each cell */ + + FOR_EACH_CELL + if (var[FLAGP][IX(i, j, k)] >= 0) continue; + V = vol(para, var, i, j, k); + T_ave = var[TEMP][IX(i, j, k)] - var[TMP1][IX(i, j, k)]; + rate_of_change += para->prob->rho * para->prob->Cp * T_ave * V / para->mytime->dt; + END_FOR + + /* output the time-wise imbalance to a .dat file */ + if (para->mytime->step_current == 1) { + /* create a new .dat file */ + if ((FILE_IM = fopen("imbalance.dat", "w+")) == NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + fprintf(FILE_IM, "Time\t\tInflow\t\tOutflow\t\tWall\t\tDeficit\t\tEnergyRate\t\tAdvEnergy\t\tImbalance (Ein+Ewall-Eout)/Ewall\n"); + fprintf(FILE_IM, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", para->mytime->t, in, out, wall, (in - out + wall), rate_of_change, para->prob->Energy_Imb_Adv, fabs(in - out + wall) / wall); + fclose(FILE_IM); + } + else { + /* open an existing file */ + if ((FILE_IM = fopen("imbalance.dat", "a+")) == NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + fprintf(FILE_IM, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n", para->mytime->t, in, out, wall, (in - out + wall), rate_of_change, para->prob->Energy_Imb_Adv, fabs(in - out + wall) / wall); + fclose(FILE_IM); + } + return 0; +} + +/**************************************************************************** +| Restore the conservation of scalar virables after advection using Semi-Lagrangian +| method +| Literature: https://engineering.purdue.edu/~yanchen/paper/2015-1.pdf +| Wei Tian 6/20/2017 first implementation, @ Schneider Electric, Andover, MA +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \Param psi Pointer to scalar variables after advection +| \Param psi0 Pointer to scalar variables before advection +| \return 0 if no error occurred +| +| 6/20/2017 Note: the whole idea is about the energy conservation which states that +| the energy injected into the room should be energy gain in the fluid +| when calculate the energy injection from the inlet and outlet, note that a "dt" must be +| applied as in this function, the unit is J, instead of W. +| +| The whole comments are made under context of energy. Surely, the codes also work for +| other scalar variables, like specie concentration. +| +| the density of the air is assumed to be one. +| +| The equation of 14 and 15 in the paper is incorrect. The denominator should essentially be +| the sum up of the numerator. +****************************************************************************/ +int scalar_conservation(PARA_DATA* para, REAL** var, REAL* psi0, REAL* psi, int** BINDEX) { + /* declare variables */ + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL* gx = var[GX], * gy = var[GY], * gz = var[GZ]; /* the surface coordinates of the cell */ + REAL surplus = 0.0; /*calculate the global surplus, can be a nagtive*/ + REAL tmp = 0.0; /* variable to store temporal values */ + REAL Cp = para->prob->Cp; /* Cp of the air, 1005 */ + REAL V_cell = 0.0; /* the volume of the cell */ + REAL rho = para->prob->rho; /*density of the air, 1.0*/ + REAL ita = 0.0; /* the coefficient to distribute the global deficit into each cell */ + REAL denominator = 0.0; /* the denominator to calculate the ita */ + REAL* local_max = var[LOCMAX], * local_min = var[LOCMIN]; /* store local maximum or minimum */ + REAL* flagp = var[FLAGP]; /* flag for cells */ + int depX = 0, depY = 0, depZ = 0; /* the departure point dimensions for point (i,j,k) */ + + /* calculate the deficit or suplus of the variable */ + surplus = 0.0; + /*1 Inflow scalar before advection*/ + surplus += inflow(para, var, psi0, BINDEX) * Cp * rho; /* without multiplying a dt, the unit is W */ + /*2 outflow scalar before advection*/ + surplus -= outflow(para, var, psi0, BINDEX) * Cp * rho; /* without multiplying a dt, the unit is W */ + surplus *= para->mytime->dt; /* multiple a time step size and W converts into J. */ + /*3 Embody scalar before advection*/ + /*4 Embody scalar after advection*/ + FOR_EACH_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + V_cell = (gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]) * (gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]) * + (gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]); + surplus += V_cell * rho * Cp * psi0[IX(i, j, k)]; + surplus -= V_cell * rho * Cp * psi[IX(i, j, k)]; + END_FOR + + /* calculate the maximum and minimum of the original and departure value as denominator for ita */ + denominator = SMALL; /* to avoid divide by zero */ + if (surplus > 0) { + FOR_ALL_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + denominator += fabs(psi[IX(i, j, k)] - local_max[IX(i, j, k)]); + END_FOR + } + else { + FOR_ALL_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + denominator += fabs(psi[IX(i, j, k)] - local_min[IX(i, j, k)]); + END_FOR + } + /* restore the scalar filed cell by cell */ + tmp = 0.0; + if (surplus > 0) { + FOR_ALL_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + V_cell = (gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]) * (gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]) * + (gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]); + tmp = fabs(psi[IX(i, j, k)] - local_max[IX(i, j, k)]); + psi[IX(i, j, k)] += surplus * (tmp / denominator/*ita*/) / (rho * Cp * V_cell); + END_FOR + } + else { + FOR_ALL_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + V_cell = (gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]) * (gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]) * + (gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]); + tmp = fabs(psi[IX(i, j, k)] - local_min[IX(i, j, k)]); + psi[IX(i, j, k)] += surplus * (tmp / denominator/*ita*/) / (rho * Cp * V_cell); + END_FOR + } + return 0; +} + +/**************************************************************************** +| Check energy inconservation after advection +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \Param psi Pointer to scalar variables after advection +| \Param psi0 Pointer to scalar variables before advection +| \return 0 if no error occurred +| \ Wei Tian +| \ 7/7/2017 +****************************************************************************/ +REAL adv_inconservation(PARA_DATA* para, REAL** var, REAL* psi0, REAL* psi, int** BINDEX) { + /* declare variables */ + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL* gx = var[GX], * gy = var[GY], * gz = var[GZ]; /* the surface coordinates of the cell */ + REAL surplus = 0.0; /*calculate the global surplus, can be a nagtive*/ + REAL tmp = 0.0; /* variable to store temporal values */ + REAL Cp = para->prob->Cp; /* Cp of the air, 1005 */ + REAL V_cell = 0.0; /* the volume of the cell */ + REAL rho = para->prob->rho; /*density of the air, 1.0*/ + REAL ita = 0.0; /* the coefficient to distribute the global deficit into each cell */ + REAL denominator = 0.0; /* the denominator to calculate the ita */ + REAL* local_max = var[LOCMAX], * local_min = var[LOCMIN]; /* store local maximum or minimum */ + REAL* flagp = var[FLAGP]; /* flag for cells */ + int depX = 0, depY = 0, depZ = 0; /* the departure point dimensions for point (i,j,k) */ + + /* calculate the deficit or suplus of the variable */ + surplus = 0.0; + /*1 Inflow scalar before advection*/ + surplus += inflow(para, var, psi0, BINDEX) * Cp; /* without multiplying a dt, the unit is W */ + /*2 outflow scalar before advection*/ + surplus -= outflow(para, var, psi0, BINDEX) * Cp; /* without multiplying a dt, the unit is W */ + surplus *= para->mytime->dt; /* multiple a time step size and W converts into J. */ + /*3 Embody scalar before advection*/ + /*4 Embody scalar after advection*/ + FOR_EACH_CELL + if (flagp[IX(i, j, k)] >= 0) continue; + V_cell = (gx[IX(i, j, k)] - gx[IX(i - 1, j, k)]) * (gy[IX(i, j, k)] - gy[IX(i, j - 1, k)]) * + (gz[IX(i, j, k)] - gz[IX(i, j, k - 1)]); + surplus += V_cell * rho * Cp * psi0[IX(i, j, k)]; + surplus -= V_cell * rho * Cp * psi[IX(i, j, k)]; + END_FOR + + return (surplus / para->mytime->dt); /* unit: W */ +} + +/**************************************************************************** +| Assign the the velocity for the tiles after determining the pressure correction +| A bisec method is used to solve the non-linear equations. +| For more insights of the solver, refer to http://cims.nyu.edu/~donev/Teaching/NMI-Fall2010/Lecture6.handout.pdf +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \return 0 if no error occurred +| \ Wei Tian +| \ 09/05/2017 +****************************************************************************/ +int assign_tile_velocity(PARA_DATA* para, REAL** var, int** BINDEX) { + REAL* u = var[VX], * v = var[VY], * w = var[VZ]; + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + int it; + int index = para->geom->index; + REAL* flagp = var[FLAGP]; + REAL total_resistance_initil = 0.000000001; + REAL in_flowrate = 0.0, out_flowrate = 0.0; + REAL P_ave = 0.0; + REAL* p = var[IP]; /* pressure */ + REAL p_corr1 = 0, p_corr2 = 0, p_corr3 = 0; /* the correction for the pressure that is applied to the whole fluid field */ + REAL epsilon1 = 1.0, epsilon2 = 1.0, epsilon3 = 1.0; + int NEXT = 1; + REAL corrected_flow = 0.0; + REAL axy = 0.0, ayz = 0.0, azx = 0.0; + REAL rho = para->prob->rho; + int count = 0; + /* if it is the begin of the simulation, then do an estimation */ + if (para->mytime->step_current == 0) { + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + if (flagp[IX(i, j, k)] == TILE) { + total_resistance_initil += 1 / pow(var[TILE_RESI_BC][IX(i, j, k)], 0.5); + } + } /*end of for*/ + /* find the volumetric inflow */ + /* since it is before the start of calculation, calling inflow function is not working. */ + in_flowrate = initial_inflows(para, var, BINDEX); + out_flowrate = vol_outflow(para, var, BINDEX); + in_flowrate -= out_flowrate; + /*printf("the inflow rate is %f\n", in_flowrate);*/ + /*getchar();*/ + /*in_flowrate = 0.472;*/ + /* caclulate the P_ave */ + P_ave = pow(in_flowrate, 2) / pow(total_resistance_initil, 2); + /* Calculate the velocity for each tile */ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + if (flagp[IX(i, j, k)] == TILE) { + if (i == imax + 1) { + var[TILE_FLOW_BC][IX(i, j, k)] = pow(P_ave / var[TILE_RESI_BC][IX(i, j, k)], 0.5) / ayz; + } + if (i == 0) { + var[TILE_FLOW_BC][IX(i, j, k)] = -1 * pow(P_ave / var[TILE_RESI_BC][IX(i, j, k)], 0.5) / ayz; + } + if (j == jmax + 1) { + var[TILE_FLOW_BC][IX(i, j, k)] = pow(P_ave / var[TILE_RESI_BC][IX(i, j, k)], 0.5) / azx; + } + if (j == 0) { + var[TILE_FLOW_BC][IX(i, j, k)] = -1 * pow(P_ave / var[TILE_RESI_BC][IX(i, j, k)], 0.5) / azx; + } + if (k == kmax + 1) { + var[TILE_FLOW_BC][IX(i, j, k)] = pow(P_ave / var[TILE_RESI_BC][IX(i, j, k)], 0.5) / axy; + } + if (k == 0) { + var[TILE_FLOW_BC][IX(i, j, k)] = -1 * pow(P_ave / var[TILE_RESI_BC][IX(i, j, k)], 0.5) / axy; + } + /*printf("revised speed is--->>> %f\n", var[TILE_FLOW_BC][IX(i, j, k)]);*/ + } + } /*end of for*/ + } + /* otherwise, correct the pressure to meet the mass flow rate */ + else { + /* initial values for p_corr with two rough assumptions */ + p_corr1 = 0; + epsilon1 = pressure_correction(para, var, BINDEX, p_corr1); + /*printf("***********************************\n");*/ + /*printf("epsilon1 is %f\n", epsilon1);*/ + /*getchar();*/ + /*current pressure is too large to provide surplus outflows*/ + if (epsilon1 > 1e-6) + p_corr2 = -1000; + /*current pressure is too small to provide enough outflows*/ + else if (epsilon1 < -1 * 1e-6) + p_corr2 = +1000; + /*current pressure is good and correction is not needed*/ + else { + p_corr2 = 0; + p_corr3 = 0; + NEXT = 0; + } + if (NEXT) { + /* evaluate the guessed corrected pressure good enough or not */ + epsilon2 = pressure_correction(para, var, BINDEX, p_corr2); + /*printf("epsilon1 and epsilon2 is %f %f\n", epsilon1, epsilon2);*/ + /*getchar();*/ + + if (epsilon2 * epsilon1 < 0.0) + p_corr3 = 0.5 * (p_corr1 + p_corr2); + else { + sprintf(msg, "assign_tile_velocity(): epsilon 2, epsilon1, p_corr2 are %f %f %f", epsilon2, epsilon1, p_corr2); + ffd_log(msg, FFD_NORMAL); + ffd_log("assign_tile_velocity(): the inital value is not right", FFD_ERROR); + return 1; + } + } + /* find p_corr */ + while (NEXT) { + epsilon3 = pressure_correction(para, var, BINDEX, p_corr3); + if (fabs(epsilon3) < 1e-5) { + NEXT = 0; + /*printf("epsilon3 and p_corr is %f %f\n", epsilon3, p_corr3);*/ + } + + /* stop bisecting if 100 times are performed */ + if (count >= 100) NEXT = 0; + + if (epsilon3 * epsilon1 < 0.0) { + p_corr2 = p_corr3; + epsilon2 = epsilon3; + p_corr3 = 0.5 * (p_corr1 + p_corr3); + } + else { + p_corr1 = p_corr3; + epsilon1 = epsilon3; + p_corr3 = 0.5 * (p_corr2 + p_corr3); + } + count += 1; + } + /*printf("***********************************\n");*/ + /*printf("epsilon3 is %f\n",epsilon3);*/ + /*getchar();*/ + /* correct all the pressures */ + FOR_ALL_CELL + p[IX(i, j, k)] += p_corr3; + END_FOR + + /* update the flow rates at the tiles */ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + if (flagp[IX(i, j, k)] == TILE) { + if (i == imax + 1 || j == imax + 1 || k == kmax + 1) { + if (p[IX(i, j, k)] > 0) + var[TILE_FLOW_BC][IX(i, j, k)] = pow((p[IX(i, j, k)]) / (var[TILE_RESI_BC][IX(i, j, k)] * rho), 0.5); + else + var[TILE_FLOW_BC][IX(i, j, k)] = -1 * pow(fabs((p[IX(i, j, k)]) / (var[TILE_RESI_BC][IX(i, j, k)] * rho)), 0.5); + } + else { + if (p[IX(i, j, k)] > 0) + var[TILE_FLOW_BC][IX(i, j, k)] = -1 * pow((p[IX(i, j, k)]) / (var[TILE_RESI_BC][IX(i, j, k)] * rho), 0.5); + else + var[TILE_FLOW_BC][IX(i, j, k)] = pow(fabs((p[IX(i, j, k)]) / (var[TILE_RESI_BC][IX(i, j, k)] * rho)), 0.5); + } + /*printf("***********************************\n");*/ + /*printf("revised speed is %f, P is %f\n", var[TILE_RESI_BC][IX(i, j, k)], p[IX(i, j, k)]);*/ + } + } /*end of for*/ + /*getchar();*/ + }/* end of if (para->mytime->step_current == 0) */ + /* Output the tile flow rates information */ + /*if (check_tile_flowrate(para, var, BINDEX) != 0) { + ffd_log("assign_tile_velocity: can not output the flow rates at tiles", FFD_ERROR); + }*/ + return 0; +} + +/**************************************************************************** +| Calculate the flow rates through the tiles using corrected pressure +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \p_corr corrected pressure +| \return 0 if no error occurred +| \ Wei Tian +| \ 09/05/2017 +****************************************************************************/ +REAL pressure_correction(PARA_DATA* para, REAL** var, int** BINDEX, REAL p_corr) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + int it; + int index = para->geom->index; + REAL* flagp = var[FLAGP]; + REAL* p = var[IP]; /* pressure */ + REAL epsilon = 1e6, corrected_flow = 0.0, in_flowrate = 0.0, out_flowrate = 0.0; + REAL axy, ayz, azx; + REAL rho = para->prob->rho; + + in_flowrate = vol_inflow(para, var, BINDEX); + out_flowrate = vol_outflow(para, var, BINDEX); + in_flowrate -= out_flowrate; + /*printf("the inflow is %f\n", in_flowrate);*/ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + if (flagp[IX(i, j, k)] == TILE) { + /*printf("the coefficient is %f\n", var[TILE_RESI_BC][IX(i, j, k)]);*/ + if (i == imax + 1 || i == 0) { + if ((p[IX(i, j, k)] + p_corr) > 0) + corrected_flow += pow((p[IX(i, j, k)] + p_corr) / (var[TILE_RESI_BC][IX(i, j, k)] * rho), 0.5) * ayz; + else + corrected_flow -= pow(fabs((p[IX(i, j, k)] + p_corr) / (var[TILE_RESI_BC][IX(i, j, k)] * rho)), 0.5) * ayz; + } + if (j == jmax + 1 || j == 0) { + if ((p[IX(i, j, k)] + p_corr) > 0) + corrected_flow += pow((p[IX(i, j, k)] + p_corr) / (var[TILE_RESI_BC][IX(i, j, k)] * rho), 0.5) * azx; + else + corrected_flow -= pow(fabs((p[IX(i, j, k)] + p_corr) / (var[TILE_RESI_BC][IX(i, j, k)] * rho)), 0.5) * azx; + } + if (k == kmax + 1 || k == 0) { + if ((p[IX(i, j, k)] + p_corr) > 0) + corrected_flow += pow((p[IX(i, j, k)] + p_corr) / (var[TILE_RESI_BC][IX(i, j, k)] * rho), 0.5) * axy; + else + corrected_flow -= pow(fabs((p[IX(i, j, k)] + p_corr) / (var[TILE_RESI_BC][IX(i, j, k)] * rho)), 0.5) * axy; + } + } + } /*end of for*/ + epsilon = corrected_flow - in_flowrate; + /*printf("difference is %f, p corr is %f\n", epsilon, p_corr);*/ + /*getchar();*/ + return epsilon; +} + +/**************************************************************************** +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \return 0 if no error occurred +| +| \ Wei Tian, 10-19-2017, Wei.Tian@Schneider-Electric.com +****************************************************************************/ +int tile_source(PARA_DATA* para, REAL** var, int** BINDEX) { + int i, j, k, tile_index; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + int it; + int index = para->geom->index; + REAL* flagp = var[FLAGP]; + REAL* u = var[VX], * v = var[VY], * w = var[VZ]; + REAL axy, ayz, azx; + int put_X = para->geom->tile_putX, put_Y = para->geom->tile_putY, put_Z = para->geom->tile_putZ; + int split_limitX = 1, split_limitY = 1, split_limitZ = 1; + REAL frac = 0.0; /* percentage to explicit for source term */ + + /*Calculate the velocity in cells above*/ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + + if (flagp[IX(i, j, k)] == TILE) { + if (put_X) { + if (u[IX(i, j, k)] > 0) { + for (tile_index = 0; tile_index < split_limitX; tile_index++) { + var[APXS][IX(i - tile_index - 2, j, k)] = 2 * ayz * var[TILE_RESI_BC][IX(i, j, k)] * pow(u[IX(i, j, k)], 1) * 1.0 / (REAL)split_limitX; + var[VXS][IX(i - tile_index - 2, j, k)] = 1 * ayz * var[TILE_RESI_BC][IX(i, j, k)] * pow(u[IX(i, j, k)], 2) * 1.0 / (REAL)split_limitX; + } + } + else { + for (tile_index = 0; tile_index < split_limitX; tile_index++) { + var[APXS][IX(i - tile_index - 2, j, k)] = -2 * ayz * var[TILE_RESI_BC][IX(i, j, k)] * pow(u[IX(i, j, k)], 1) * 1.0 / (REAL)split_limitX; + var[VXS][IX(i - tile_index - 2, j, k)] = -ayz * var[TILE_RESI_BC][IX(i, j, k)] * pow(u[IX(i, j, k)], 2) * 1.0 / (REAL)split_limitX; + } + } + } + else if (put_Y) { + if (v[IX(i, j, k)] > 0) { + for (tile_index = 0; tile_index < split_limitY; tile_index++) { + var[APYS][IX(i, j - tile_index - 2, k)] = 2 * azx * var[TILE_RESI_BC][IX(i, j, k)] * pow(v[IX(i, j, k)], 1) * 1.0 / (REAL)split_limitY; + var[VYS][IX(i, j - tile_index - 2, k)] = 1 * azx * var[TILE_RESI_BC][IX(i, j, k)] * pow(v[IX(i, j, k)], 2) * 1.0 / (REAL)split_limitY; + } + } + else { + for (tile_index = 0; tile_index < split_limitY; tile_index++) { + var[APYS][IX(i, j - tile_index - 2, k)] = -2 * azx * var[TILE_RESI_BC][IX(i, j, k)] * pow(v[IX(i, j, k)], 1) * 1.0 / (REAL)split_limitY; + var[VYS][IX(i, j - tile_index - 2, k)] = -azx * var[TILE_RESI_BC][IX(i, j, k)] * pow(v[IX(i, j, k)], 2) * 1.0 / (REAL)split_limitY; + } + } + } + else { + if (w[IX(i, j, k - 1)] > 0) { + for (tile_index = 0; tile_index < split_limitZ; tile_index++) { + /*Linearization using Taylor Expansion*/ + /*var[APZS][IX(i, j, k-tile_index-2)] = 2*axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 1)*1.0/(REAL)split_limitZ;*/ + /*var[VZS][IX(i, j, k-tile_index-2)] = 1*axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 2)*1.0/(REAL)split_limitZ;*/ + /*Easy Linearization*/ + /*var[APZS][IX(i, j, k-tile_index-2)] = axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 1)*1.0/(REAL)split_limitZ;*/ + /*var[VZS][IX(i, j, k-tile_index-2)] = 0;*/ + /*Lazy Method*/ + /*var[VZS][IX(i, j, k-tile_index-2)] = -1*axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 2)*1.0/(REAL)split_limitZ;*/ + /*var[APZS][IX(i, j, k-tile_index-2)] = 0;*/ + /*Semi-Implicit*/ + var[APZS][IX(i, j, k - tile_index - 2)] = 2 * (1 - frac) * axy * var[TILE_RESI_BC][IX(i, j, k)] * pow(w[IX(i, j, k - 1)], 1) * 1.0 / (REAL)split_limitZ; + var[VZS][IX(i, j, k - tile_index - 2)] = -1 * (2 * frac - 1) * axy * var[TILE_RESI_BC][IX(i, j, k)] * pow(w[IX(i, j, k - 1)], 2) * 1.0 / (REAL)split_limitZ; + } + } + else { + for (tile_index = 0; tile_index < split_limitZ; tile_index++) { + /*Linearization using Taylor Expansion*/ + /*var[APZS][IX(i, j, k-tile_index-2)] = -2*axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 1)*1.0/(REAL)split_limitZ;*/ + /*var[VZS][IX(i, j, k-tile_index-2)] = -axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 2)*1.0/(REAL)split_limitZ;*/ + /*Easy Linearization*/ + /*var[APZS][IX(i, j, k-tile_index-2)] = -1*axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 1)*1.0/(REAL)split_limitZ;*/ + /*var[VZS][IX(i, j, k-tile_index-2)] = 0;*/ + /*Lazy Method*/ + /*var[VZS][IX(i, j, k-tile_index-2)] = axy*var[TILE_RESI_BC][IX(i, j, k)] *pow(w[IX(i, j, k-1)], 2)*1.0/(REAL)split_limitZ;*/ + /*var[APZS][IX(i, j, k-tile_index-2)] = 0;*/ + /*Semi-Implicit*/ + var[APZS][IX(i, j, k - tile_index - 2)] = -2 * (1 - frac) * axy * var[TILE_RESI_BC][IX(i, j, k)] * pow(w[IX(i, j, k - 1)], 1) * 1.0 / (REAL)split_limitZ; + var[VZS][IX(i, j, k - tile_index - 2)] = (2 * frac - 1) * axy * var[TILE_RESI_BC][IX(i, j, k)] * pow(w[IX(i, j, k - 1)], 2) * 1.0 / (REAL)split_limitZ; + } + } + } + }/* end of if (flagp[IX(i, j, k)] == TILE) */ + }/* end of for (it = 0; it < index; it++) */ + + /* Output the tile flow rates information */ + if (check_tile_flowrate(para, var, BINDEX) != 0) { + ffd_log("tile_room_split: can not output the flow rates at tiles", FFD_ERROR); + } + return 0; +} + +/**************************************************************************** +| The black box model of rack, which treat the rack as a box with inlet outlet and heat dissipation +| The temperature stratification of inlet temperature is kept in the outlet temperature +| The velocity at inlet and outlet is the same +| The inlet of rack is treated as outlet for the DC room while the outlet of rack is treated as inlet for DC room +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to boundary index +| \return 0 if no error occurred +| \ Version 1.0 +| \ Wei Tian, 1-20-2018, Wei.Tian@Schneider-Electric.com +****************************************************************************/ +int rack_model_black_box(PARA_DATA* para, REAL** var, int** BINDEX) { + int i, j, k, it, id, obj_type; + int iin, jin, kin; + REAL* flagp = var[FLAGP]; + int index = para->geom->index, imax = para->geom->imax, + jmax = para->geom->jmax, kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2) * (jmax + 2); + REAL axy, ayz, azx; + REAL mDot_Cp, Q_dot; + + /* Loop all the boundary cells */ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + id = BINDEX[4][it]; + obj_type = BINDEX[5][it]; + + /* calculate the area */ + axy = area_xy(para, var, i, j, k); + ayz = area_yz(para, var, i, j, k); + azx = area_zx(para, var, i, j, k); + + /* If it is rack cell and it is a rack inlet boundary */ + if (obj_type == RACK) { + /* Assign velocity to the inlet of rack */ + if (flagp[IX(i, j, k)] == RACK_INLET) { + if (para->bc->RackDir[id] == 1 || para->bc->RackDir[id] == -1) { + var[VXBC][IX(i, j, k)] = para->bc->RackFlowRate[id] / para->bc->RackArea[id] * sign(para->bc->RackDir[id])/*direction*/; + var[VYBC][IX(i, j, k)] = 0.0; + var[VZBC][IX(i, j, k)] = 0.0; + /* Assign the adjacent fluid cell temperature to the inlet of rack */ + var[TEMPBC][IX(i, j, k)] = var[TEMP][IX(i - sign(para->bc->RackDir[id]), j, k)]; + //printf("rack_model_black_box(): temperature at inlet of rack [%d, %d, %d]: %f\n", i, j, k, var[TEMPBC][IX(i, j, k)]); + //printf("rack_model_black_box(): velocity at inlet of rack [%d, %d, %d]: %f\n", i, j, k, var[VXBC][IX(i, j, k)]); + } + else if (para->bc->RackDir[id] == 2 || para->bc->RackDir[id] == -2) { + var[VYBC][IX(i, j, k)] = para->bc->RackFlowRate[id] / para->bc->RackArea[id] * sign(para->bc->RackDir[id])/*direction*/; + var[VXBC][IX(i, j, k)] = 0.0; + var[VZBC][IX(i, j, k)] = 0.0; + /* Assign the adjacent fluid cell temperature to the inlet of rack */ + var[TEMPBC][IX(i, j, k)] = var[TEMP][IX(i, j - sign(para->bc->RackDir[id]), k)]; + } + else if (para->bc->RackDir[id] == 3 || para->bc->RackDir[id] == -3) { + var[VZBC][IX(i, j, k)] = para->bc->RackFlowRate[id] / para->bc->RackArea[id] * sign(para->bc->RackDir[id])/*direction*/; + var[VXBC][IX(i, j, k)] = 0.0; + var[VYBC][IX(i, j, k)] = 0.0; + /* Assign the adjacent fluid cell temperature to the inlet of rack */ + var[TEMPBC][IX(i, j, k)] = var[TEMP][IX(i, j, k - sign(para->bc->RackDir[id]))]; + } + else { + ffd_log("rack_model_black_box(): fail to detect the flow direction of the rack", FFD_ERROR); + return 1; + } + + } + /* Assign velocity and temperature to outlet of rack */ + else if (flagp[IX(i, j, k)] == RACK_OUTLET) { + if (para->bc->RackDir[id] == 1 || para->bc->RackDir[id] == -1) { + var[VXBC][IX(i, j, k)] = para->bc->RackFlowRate[id] / para->bc->RackArea[id] * sign(para->bc->RackDir[id])/*direction*/; + var[VYBC][IX(i, j, k)] = 0.0; + var[VZBC][IX(i, j, k)] = 0.0; + /* Calculate the temperature at the outlet of rack */ + if (k == 0) {/* This is to eliminate the divide by zero scenario */ + ayz = area_yz(para, var, i, j, k + 1); + } + iin = i - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][0]; + jin = j - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][1]; + kin = k - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][2]; + Q_dot = para->bc->HeatDiss[id] * ayz / para->bc->RackArea[id]; /* heat dissipation by area */ + mDot_Cp = para->prob->rho * var[VXBC][IX(i, j, k)] * ayz * para->prob->Cp; /* mass flow rate multiply Cp */ + var[TEMPBC][IX(i, j, k)] = var[TEMPBC][IX(iin, jin, kin)] + sign(para->bc->RackDir[id]) * Q_dot / mDot_Cp; + //printf("rack_model_black_box(): temperature at outlet of rack [%d, %d, %d]: %f\n",i,j,k,var[TEMPBC][IX(i,j,k)]); + //printf("rack_model_black_box(): velocity at outlet of rack [%d, %d, %d]: %f\n",i,j,k,var[VXBC][IX(i,j,k)],); + } + else if (para->bc->RackDir[id] == 2 || para->bc->RackDir[id] == -2) { + var[VYBC][IX(i, j, k)] = para->bc->RackFlowRate[id] / para->bc->RackArea[id] * sign(para->bc->RackDir[id])/*direction*/; + var[VXBC][IX(i, j, k)] = 0.0; + var[VZBC][IX(i, j, k)] = 0.0; + /* Calculate the temperature at the outlet of rack */ + iin = i - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][0]; + jin = j - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][1]; + kin = k - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][2]; + Q_dot = para->bc->HeatDiss[id] * azx / para->bc->RackArea[id]; /* heat dissipation by area */ + mDot_Cp = para->prob->rho * var[VYBC][IX(i, j, k)] * azx * para->prob->Cp; /* mass flow rate multiply Cp */ + var[TEMPBC][IX(i, j, k)] = var[TEMPBC][IX(iin, jin, kin)] + Q_dot / mDot_Cp; + } + else if (para->bc->RackDir[id] == 3 || para->bc->RackDir[id] == -3) { + var[VZBC][IX(i, j, k)] = para->bc->RackFlowRate[id] / para->bc->RackArea[id] * sign(para->bc->RackDir[id])/*direction*/; + var[VXBC][IX(i, j, k)] = 0.0; + var[VYBC][IX(i, j, k)] = 0.0; + /* Calculate the temperature at the outlet of rack */ + iin = i - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][0]; + jin = j - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][1]; + kin = k - sign(para->bc->RackDir[id]) * para->bc->RackMap[id][2]; + Q_dot = para->bc->HeatDiss[id] * axy / para->bc->RackArea[id]; /* heat dissipation by area */ + mDot_Cp = para->prob->rho * var[VZBC][IX(i, j, k)] * axy * para->prob->Cp; /* mass flow rate multiply Cp */ + var[TEMPBC][IX(i, j, k)] = var[TEMPBC][IX(iin, jin, kin)] + Q_dot / mDot_Cp; + } + else { + ffd_log("rack_model_black_box(): fail to detect the flow direction of the rack", FFD_ERROR); + return 1; + } + } /*end of else if (flagp[IX(i,j,k)]==RACK_OUTLET)*/ + /* Pass internal rack cells */ + else { + continue; + } /*end of else*/ + } /*end of if (obj_type == RACK)*/ + } /*end of for(it=0; itgeom->imax, jmax= para->geom->jmax; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); int i, j, k, it; - REAL tmp1, tmp2, residual; - REAL *flagp = var[FLAGP]; + REAL SOR = 1.0; /**************************************************************************** | Solve the space using G-S sovler for 5 * 6 = 30 times ****************************************************************************/ - for(it=0; it<5; it++) { + for (it = 0; itimax), Y(1->jmax), Z(1->kmax) + | Solve in X in forward direction -------------------------------------------------------------------------*/ - for(i=1; i<=imax; i++) - for(j=1; j<=jmax; j++) - for(k=1; k<=kmax; k++) { - if (flagp[IX(i,j,k)]>=0) continue; - /*if (i==imax && j==jmax && k==kmax) continue;*/ - - x[IX(i,j,k)] = ( ae[IX(i,j,k)]*x[IX(i+1,j,k)] - + aw[IX(i,j,k)]*x[IX(i-1,j,k)] - + an[IX(i,j,k)]*x[IX(i,j+1,k)] - + as[IX(i,j,k)]*x[IX(i,j-1,k)] - + af[IX(i,j,k)]*x[IX(i,j,k+1)] - + ab[IX(i,j,k)]*x[IX(i,j,k-1)] - + b[IX(i,j,k)] ) / ap[IX(i,j,k)]; - } - + for (i = 1; i <= imax; i++) + for (j = 1; j <= jmax; j++) + for (k = 1; k <= kmax; k++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + x[IX(i, j, k)] = (1-SOR)* x[IX(i, j, k)]+ SOR*((ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]); + } + /*------------------------------------------------------------------------- + | Solve in X in backward direction + -------------------------------------------------------------------------*/ + for (i = imax; i >= 1; i--) + for (j = 1; j <= jmax; j++) + for (k = 1; k <= kmax; k++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + x[IX(i, j, k)] = (1 - SOR)* x[IX(i, j, k)] + SOR*((ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]); + } /*------------------------------------------------------------------------- - | Solve in Y(1->kmax), X(1->imax), Z(1->kmax) + | Solve in Y in forward direction -------------------------------------------------------------------------*/ - for(j=1; j<=jmax; j++) - for(i=1; i<=imax; i++) - for(k=1; k<=kmax; k++) { - if (flagp[IX(i,j,k)]>=0) continue; - /*if (i==imax && j==jmax && k==kmax) continue;*/ - - x[IX(i,j,k)] = ( ae[IX(i,j,k)]*x[IX(i+1,j,k)] - + aw[IX(i,j,k)]*x[IX(i-1,j,k)] - + an[IX(i,j,k)]*x[IX(i,j+1,k)] - + as[IX(i,j,k)]*x[IX(i,j-1,k)] - + af[IX(i,j,k)]*x[IX(i,j,k+1)] - + ab[IX(i,j,k)]*x[IX(i,j,k-1)] - + b[IX(i,j,k)] ) / ap[IX(i,j,k)]; - } + for (j = 1; j <= jmax; j++) + for (i = 1; i <= imax; i++) + for (k = 1; k <= kmax; k++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + x[IX(i, j, k)] = (1 - SOR)* x[IX(i, j, k)] + SOR*((ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]); + } + /*------------------------------------------------------------------------- + | Solve in Y in backward direction + -------------------------------------------------------------------------*/ + for (j = jmax; j >= 1; j--) + for (i = 1; i <= imax; i++) + for (k = 1; k <= kmax; k++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + x[IX(i, j, k)] = (1 - SOR)* x[IX(i, j, k)] + SOR*((ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]); + } /*------------------------------------------------------------------------- - | Solve in X(imax->), Y(jmax->1), Z(1->kmax) + | Solve in Z in forward direction -------------------------------------------------------------------------*/ - for(i=imax; i>=1; i--) - for(j=jmax; j>=1; j--) - for(k=1; k<=kmax; k++) { - if (flagp[IX(i,j,k)]>=0) continue; - /*if (i==imax && j==jmax && k==kmax) continue;*/ - - x[IX(i,j,k)] = ( ae[IX(i,j,k)]*x[IX(i+1,j,k)] - + aw[IX(i,j,k)]*x[IX(i-1,j,k)] - + an[IX(i,j,k)]*x[IX(i,j+1,k)] - + as[IX(i,j,k)]*x[IX(i,j-1,k)] - + af[IX(i,j,k)]*x[IX(i,j,k+1)] - + ab[IX(i,j,k)]*x[IX(i,j,k-1)] - + b[IX(i,j,k)] ) / ap[IX(i,j,k)]; - } + for (k = 1; k <= kmax; k++) + for (i = 1; i <= imax; i++) + for (j = 1; j <= jmax; j++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + x[IX(i, j, k)] = (1 - SOR)* x[IX(i, j, k)] + SOR*((ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]); + } /*------------------------------------------------------------------------- - | Solve in Y(jmax->1), X(imax->1), Z(1->kmax) + | Solve in Z in backward direction -------------------------------------------------------------------------*/ - for(j=jmax; j>=1; j--) - for(i=imax; i>=1; i--) - for(k=1; k<=kmax; k++) { - if (flagp[IX(i,j,k)]>=0) continue; - /*if (i==imax && j==jmax && k==kmax) continue;*/ - - x[IX(i,j,k)] = ( ae[IX(i,j,k)]*x[IX(i+1,j,k)] - + aw[IX(i,j,k)]*x[IX(i-1,j,k)] - + an[IX(i,j,k)]*x[IX(i,j+1,k)] - + as[IX(i,j,k)]*x[IX(i,j-1,k)] - + af[IX(i,j,k)]*x[IX(i,j,k+1)] - + ab[IX(i,j,k)]*x[IX(i,j,k-1)] - + b[IX(i,j,k)] ) / ap[IX(i,j,k)]; - } + for (k = kmax; k >= 1; k--) + for (i = 1; i <= imax; i++) + for (j = 1; j <= jmax; j++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + x[IX(i, j, k)] = (1 - SOR)* x[IX(i, j, k)] + SOR*((ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]); + } } - - /**************************************************************************** - | Calculate residual - ****************************************************************************/ - tmp1 = 0; - tmp2 = (REAL)0.0000000001; - - FOR_EACH_CELL - if (flagp[IX(i,j,k)]>=0) continue; - /*if (i==imax && j==jmax && k==kmax) continue;*/ - tmp1 += (REAL) fabs(ap[IX(i,j,k)]*x[IX(i,j,k)] - - ae[IX(i,j,k)]*x[IX(i+1,j,k)] - aw[IX(i,j,k)]*x[IX(i-1,j,k)] - - an[IX(i,j,k)]*x[IX(i,j+1,k)] - as[IX(i,j,k)]*x[IX(i,j-1,k)] - - af[IX(i,j,k)]*x[IX(i,j,k+1)] - ab[IX(i,j,k)]*x[IX(i,j,k-1)] - - b[IX(i,j,k)]); - tmp2 += (REAL) fabs(ap[IX(i,j,k)]*x[IX(i,j,k)]); - END_FOR - - residual = tmp1 /tmp2; - /*printf ("the pressure of cell[imax,jmax,kmax] is %f\n", x[IX(imax,jmax,kmax)]);*/ - /*printf ("the average pressure residual is %.12f\n", residual);*/ - /*printf ("it is %d \n", it);*/ - /*}*/ - return residual; - -} /* End of GS_P()*/ - - /* - * Gauss-Seidel solver - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the cell property flag - * @param x Pointer to variable - * - * @return Residual - */ -REAL Gauss_Seidel(PARA_DATA *para, REAL **var, REAL *flag, REAL *x) { + /*printf("residual in the solver is %f\n", check_residual(para, var, x));*/ + return 0; +} /* End of GS_itr() */ + + +/**************************************************************************** +| Gauss-Seidel solver +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the cell property flag +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int Gauss_Seidel(PARA_DATA *para, REAL **var, REAL *x, REAL *flag, int num_swipe) { + GS_itr(para, var, x, flag, num_swipe); + return 0; + +} /* End of Gauss-Seidel( ) */ + + +/**************************************************************************** +| Jacobi Scheme for pressure +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param Type Type of variable +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int Jacobi_iter(PARA_DATA *para, REAL **var, REAL *x,REAL *flag, int num_swipe) { REAL *as = var[AS], *aw = var[AW], *ae = var[AE], *an = var[AN]; REAL *ap = var[AP], *af = var[AF], *ab = var[AB], *b = var[B]; - int imax = para->geom->imax, jmax= para->geom->jmax; + int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; - int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); - int i, j, k, it=0; - REAL tmp1, tmp2, residual; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + int i, j, k, it; + REAL *tmp = var[TMP4]; + REAL *flagp=var[FLAGP]; /**************************************************************************** - | Gauss-Seidel solver + | Solve the space using Jacobi sovler for num_swipe * 6 = 30 times ****************************************************************************/ - for(it=0; it<20; it++) { - for(i=1; i<=imax; i++) - for(j=1; j<=jmax; j++) - for(k=1; k<=kmax; k++) { - if (flag[IX(i,j,k)]>=0) continue; + /*while (residual > 1e-6) {*/ + for (it = 0; itimax), Y(1->jmax), Z(1->kmax) + -------------------------------------------------------------------------*/ + for (i = 1; i <= imax; i++) + for (j = 1; j <= jmax; j++) + for (k = 1; k <= kmax; k++) { + if (flag[IX(i, j, k)] >= 0 ) continue; + + + tmp[IX(i, j, k)] = (ae[IX(i, j, k)] * x[IX(i + 1, j, k)] + + aw[IX(i, j, k)] * x[IX(i - 1, j, k)] + + an[IX(i, j, k)] * x[IX(i, j + 1, k)] + + as[IX(i, j, k)] * x[IX(i, j - 1, k)] + + af[IX(i, j, k)] * x[IX(i, j, k + 1)] + + ab[IX(i, j, k)] * x[IX(i, j, k - 1)] + + b[IX(i, j, k)]) / ap[IX(i, j, k)]; + } + for (i = 1; i <= imax; i++) + for (j = 1; j <= jmax; j++) + for (k = 1; k <= kmax; k++) { + if (flag[IX(i, j, k)] >= 0 ) continue; - x[IX(i,j,k)] = ( ae[IX(i,j,k)]*x[IX(i+1,j,k)] - + aw[IX(i,j,k)]*x[IX(i-1,j,k)] - + an[IX(i,j,k)]*x[IX(i,j+1,k)] - + as[IX(i,j,k)]*x[IX(i,j-1,k)] - + af[IX(i,j,k)]*x[IX(i,j,k+1)] - + ab[IX(i,j,k)]*x[IX(i,j,k-1)] - + b[IX(i,j,k)] ) / ap[IX(i,j,k)]; + x[IX(i, j, k)] = tmp[IX(i, j, k)]; } - for(i=imax; i>=1; i--) - for(j=jmax; j>=1; j--) - for(k=kmax; k>=1; k--) { - if (flag[IX(i,j,k)]>=0) continue; - - x[IX(i,j,k)] = ( ae[IX(i,j,k)]*x[IX(i+1,j,k)] - + aw[IX(i,j,k)]*x[IX(i-1,j,k)] - + an[IX(i,j,k)]*x[IX(i,j+1,k)] - + as[IX(i,j,k)]*x[IX(i,j-1,k)] - + af[IX(i,j,k)]*x[IX(i,j,k+1)] - + ab[IX(i,j,k)]*x[IX(i,j,k-1)] - + b[IX(i,j,k)] ) / ap[IX(i,j,k)]; - } } - /**************************************************************************** - | Calculate residual - ****************************************************************************/ - tmp1 = 0; - tmp2 = (REAL)0.0000000001; - - FOR_EACH_CELL - if (flag[IX(i,j,k)]>=0) continue; - tmp1 += (REAL) fabs(ap[IX(i,j,k)]*x[IX(i,j,k)] - - ae[IX(i,j,k)]*x[IX(i+1,j,k)] - aw[IX(i,j,k)]*x[IX(i-1,j,k)] - - an[IX(i,j,k)]*x[IX(i,j+1,k)] - as[IX(i,j,k)]*x[IX(i,j-1,k)] - - af[IX(i,j,k)]*x[IX(i,j,k+1)] - ab[IX(i,j,k)]*x[IX(i,j,k-1)] - - b[IX(i,j,k)]); - tmp2 += (REAL) fabs(ap[IX(i,j,k)]*x[IX(i,j,k)]); - END_FOR - - residual = tmp1 /tmp2; - /*printf ("the average residual for velocity/T is %.12f\n", tmp1/(imax*jmax*kmax));*/ - return residual; - -} /* End of Gauss-Seidel( )*/ + return 0; +} /* End of Jacobi_P() */ + + +/**************************************************************************** +| Jacobi solver +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the cell property flag +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int Jacobi(PARA_DATA *para, REAL **var, REAL *flag, REAL *x, int num_swipe) { + Jacobi_iter(para, var, x, flag, num_swipe); + return 0; + +} /* End of Jacobi( ) */ diff --git a/Buildings/Resources/src/FastFluidDynamics/solver_gs.h b/Buildings/Resources/src/FastFluidDynamics/solver_gs.h index 0404cf7dff6..0a8cda381e5 100644 --- a/Buildings/Resources/src/FastFluidDynamics/solver_gs.h +++ b/Buildings/Resources/src/FastFluidDynamics/solver_gs.h @@ -1,19 +1,22 @@ -/* - * - * @file solver_gs.h - * - * @brief Gauss-Seidel solvers - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file solver_gs.c +| +| \brief Gauss-Seidel solvers +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #ifndef _SOLVER_GS_H #define _SOLVER_GS_H @@ -34,26 +37,52 @@ #include "utility.h" #endif -/* - * Gauss-Seidel solver for pressure - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param Type Type of variable - * @param x Pointer to variable - * - * @return Residual - */ -REAL GS_P(PARA_DATA *para, REAL **var, int Type, REAL *x); - -/* - * Gauss-Seidel solver - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param flag Pointer to the cell property flag - * @param x Pointer to variable - * - * @return Residual - */ -REAL Gauss_Seidel(PARA_DATA *para, REAL **var, REAL *flagp, REAL *x); + +/**************************************************************************** +| Gauss-Seidel scheme +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param Type Type of variable +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int GS_itr(PARA_DATA* para, REAL** var, REAL* x, REAL* flag, int num_swipe); + +/**************************************************************************** +| Gauss-Seidel solver for terms other than pressure +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param flag Pointer to the cell property flag +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int Gauss_Seidel(PARA_DATA* para, REAL** var, REAL* x, REAL* flagp, int num_swipe); + +/**************************************************************************** +| Jacobi Scheme for pressure +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param Type Type of variable +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int Jacobi_iter(PARA_DATA* para, REAL** var, REAL* x, REAL* flag, int num_swipe); + +/**************************************************************************** +| Jacobi solver for pressure +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param Type Type of variable +| \param x Pointer to variable +| +| \return Residual +****************************************************************************/ +int Jacobi(PARA_DATA *para, REAL **var, REAL *flag, REAL *x, int num_swipe); + diff --git a/Buildings/Resources/src/FastFluidDynamics/solver_tdma.c b/Buildings/Resources/src/FastFluidDynamics/solver_tdma.c index 2208f94bbe7..9f52457a950 100644 --- a/Buildings/Resources/src/FastFluidDynamics/solver_tdma.c +++ b/Buildings/Resources/src/FastFluidDynamics/solver_tdma.c @@ -1,19 +1,19 @@ -/* - * - * \file solver_tdma.c - * - * \brief Tri-Diagonal Matrix Algorithm Solver - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file solver_tdma.c +| +| \brief Gauss-Seidel solvers +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| +| \date 8/3/2013 +| +****************************************************************************/ #include "solver_tdma.h" diff --git a/Buildings/Resources/src/FastFluidDynamics/solver_tdma.h b/Buildings/Resources/src/FastFluidDynamics/solver_tdma.h index 3e5d2442a84..e9c86a3b95a 100644 --- a/Buildings/Resources/src/FastFluidDynamics/solver_tdma.h +++ b/Buildings/Resources/src/FastFluidDynamics/solver_tdma.h @@ -1,19 +1,19 @@ -/* - * - * @file solver_tdma.h - * - * @brief Tri-Diagonal Matrix Algorithm Solver - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file solver_tdma.h +| +| \brief Gauss-Seidel solvers +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| +| \date 8/3/2013 +| +****************************************************************************/ #ifndef _SOLVER_TDMA_H #define _SOLVER_TDMA_H #endif diff --git a/Buildings/Resources/src/FastFluidDynamics/timing.c b/Buildings/Resources/src/FastFluidDynamics/timing.c index 866ca2d2291..c7500c3612a 100644 --- a/Buildings/Resources/src/FastFluidDynamics/timing.c +++ b/Buildings/Resources/src/FastFluidDynamics/timing.c @@ -1,35 +1,44 @@ -/* - * - * \file time.c - * - * \brief Subroutines for timing - * - * \author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file time.c +| +| \brief Subroutines for timing +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #include "timing.h" - /* - * Calculate the simulation time and time ratio - * - * @param para Pointer to FFD parameters - * - * @return No return needed - */ +/**************************************************************************** +| Calculate the simulation time and time ratio +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ void timing(PARA_DATA *para) { double cputime; - + /* + if (para->mytime->step_current<200) + para->mytime->dt = 0.001; + else + para->mytime->dt = 0.01; + */ para->mytime->t += para->mytime->dt; para->mytime->step_current += 1; para->mytime->t_end = clock(); + /*printf ("the time end simulation is %lf\n", para->mytime->t_end);*/ cputime= ((double) (clock() - para->mytime->t_start) / CLOCKS_PER_SEC); @@ -37,4 +46,4 @@ void timing(PARA_DATA *para) { para->mytime->t, cputime, para->mytime->t/cputime); ffd_log(msg, FFD_NORMAL); -} /* End of timing( )*/ +} /* End of timing( ) */ diff --git a/Buildings/Resources/src/FastFluidDynamics/timing.h b/Buildings/Resources/src/FastFluidDynamics/timing.h index 20d6475c00c..48f65090508 100644 --- a/Buildings/Resources/src/FastFluidDynamics/timing.h +++ b/Buildings/Resources/src/FastFluidDynamics/timing.h @@ -1,19 +1,22 @@ -/* - * - * @file time.h - * - * @brief Subroutines for timing - * - * @author Mingang Jin, Qingyan Chen - * Purdue University - * Jin55@purdue.edu, YanChen@purdue.edu - * Wangda Zuo - * University of Miami - * W.Zuo@miami.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file time.c +| +| \brief Subroutines for timing +| +| \author Mingang Jin, Qingyan Chen +| Purdue University +| Jin55@purdue.edu, YanChen@purdue.edu +| Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| +| \date 6/15/2017 +| +****************************************************************************/ #ifndef _TIMING_H #define _TIMING_H #endif @@ -28,11 +31,14 @@ #include "utility.h" #endif -/* - * Calculate the simulation time and time ratio - * - * @param para Pointer to FFD parameters - * - * @return No return needed - */ + +/**************************************************************************** +| Calculate the simulation time and time ratio +| +| \param para Pointer to FFD parameters +| +| \return No return needed +****************************************************************************/ void timing(PARA_DATA *para); + + diff --git a/Buildings/Resources/src/FastFluidDynamics/utility.c b/Buildings/Resources/src/FastFluidDynamics/utility.c index b4cfe488cef..9d0ffdf1746 100644 --- a/Buildings/Resources/src/FastFluidDynamics/utility.c +++ b/Buildings/Resources/src/FastFluidDynamics/utility.c @@ -1,98 +1,115 @@ -/* - * - * \file utility.c - * - * \brief Some frequently used functions for FFD - * - * \author Wangda Zuo, Ana Cohen - * University of Miami - * W.Zuo@miami.edu - * Purdue University - * Mingang Jin, Qingyan Chen - * Jin55@purdue.edu, YanChen@purdue.edu - * - * \date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file utility.c +| +| \brief Some frequently used functions for FFD +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Purdue University +| Mingang Jin, Qingyan Chen +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +| \add: add a function min_distance to calculate the distance of +| a fluid cell to the nearest solid boundary condition, which +| is to be used by Chen's zero equation turbulence model +| +****************************************************************************/ #include "utility.h" - /* - * Check the residual of equation - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * - * @return 0 if no error occurred - */ -REAL check_residual(PARA_DATA *para, REAL **var, REAL *x) { + +/**************************************************************************** +| Check the residual of equation +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| +| \return 0 if no error occurred +****************************************************************************/ +REAL check_residual(PARA_DATA *para, REAL **var, REAL *x, REAL *flag) { int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; int i, j, k; int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); REAL *aw = var[AW], *ae = var[AE], *as = var[AS], *an = var[AN]; REAL *ap = var[AP], *ab = var[AB], *af = var[AF], *b = var[B]; - REAL tmp, residual = 0.0; + REAL tmp=0.0, residual = 0.0; + int count = 0; FOR_EACH_CELL - tmp = ap[IX(i,j,k)]*x[IX(i,j,k)] + if (flag[IX(i,j,k)] >= 0) continue; + tmp = fabs(x[IX(i,j,k)]+ ( - ae[IX(i,j,k)]*x[IX(i+1,j,k)] - aw[IX(i,j,k)]*x[IX(i-1,j,k)] - an[IX(i,j,k)]*x[IX(i,j+1,k)] - as[IX(i,j,k)]*x[IX(i,j-1,k)] - af[IX(i,j,k)]*x[IX(i,j,k+1)] - ab[IX(i,j,k)]*x[IX(i,j,k-1)] - - b[IX(i,j,k)]; - residual += tmp * tmp; - END_FOR + - b[IX(i,j,k)])/ ap[IX(i, j, k)] ); + count += 1; + + if (residual < tmp) residual = tmp; + END_FOR - return residual / (imax*jmax*kmax); + /*return tmp/count;*/ + return residual; -}/* End of check_residual( )*/ +}/* End of check_residual( ) */ - /* - * Write the log file - * - * @param message Pointer the message - * @param msg_type Type of message - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Write the log file +| +| \param message Pointer the message +| \param msg_type Type of message +| +| \return 0 if no error occurred +****************************************************************************/ void ffd_log(char *message, FFD_MSG_TYPE msg_type) { - char mymsg[400]; if(msg_type==FFD_NEW) { - if((file_log=fopen("ffd.log","w+"))==NULL) { - fprintf(stderr, "Error: Cannot open log file.\n"); + if((file_log=fopen("log.ffd","w+"))==NULL) { + fprintf(stderr, "Error:can not open error file!\n"); exit(1); } } - else if((file_log=fopen("ffd.log","a+"))==NULL) { - fprintf(stderr,"Error: Cannot open log file.\n"); + + else if((file_log=fopen("log.ffd","a+"))==NULL) { + fprintf(stderr,"Error:can not open error file!\n"); exit(1); } switch(msg_type) { case FFD_WARNING: + fprintf(file_log, "WARNING in %s\n", message); + break; case FFD_ERROR: fprintf(file_log, "ERROR in %s\n", message); - sprintf(mymsg, "ERROR in FFD: %s\n", message); - modelicaError(mymsg); break; - /* Normal log*/ + /* Normal log */ default: fprintf(file_log, "%s\n", message); } fclose(file_log); -} /* End of ffd_log()*/ - - /* - * Check the outflow rate of the scalar psi - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ +} /* End of ffd_log() */ + + +/**************************************************************************** +| Check the outflow rate of the scalar psi +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ REAL outflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX) { int i, j, k; int it; @@ -112,7 +129,7 @@ REAL outflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX) { i=BINDEX[0][it]; j=BINDEX[1][it]; k=BINDEX[2][it]; - if(flagp[IX(i,j,k)]==2) { + if(flagp[IX(i,j,k)]==2 || flagp[IX(i, j, k)] == TILE) { if(i==0) mass_out += psi[IX(i,j,k)] * (-u[IX(i,j,k)]) * (gy[IX(i,j,k)]-gy[IX(i,j-1,k)]) @@ -134,19 +151,19 @@ REAL outflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX) { } return mass_out; -} /* End of outflow()*/ - - - /* - * Check the inflow rate of the scalar psi - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ +} /* End of outflow() */ + + +/**************************************************************************** +| Check the inflow rate of the scalar psi +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ REAL inflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX) { int i, j, k; int it; @@ -163,42 +180,42 @@ REAL inflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX) { | Compute the total inflow ---------------------------------------------------------------------------*/ for(it=0;itgeom->imax, jmax = para->geom->jmax; int i, j, k; @@ -214,21 +231,21 @@ REAL check_min(PARA_DATA *para, REAL *psi, int ci, int cj, int ck) { return tmp; -}/* End of check_min( )*/ - - - /* - * Check the maximum value of the scalar psi at (ci,cj,ck) and its surrounding - * cells - * - * @param para Pointer to FFD parameters - * @param psi Pointer to the variable - * @param ci Index in x direction - * @param cj Index in y direction - * @param ck Index in z direction - * - * @return 0 if no error occurred - */ +}/* End of check_min( ) */ + + +/**************************************************************************** +| Check the maximum value of the scalar psi at (ci,cj,ck) and its surrounding +| cells +| +| \param para Pointer to FFD parameters +| \param psi Pointer to the variable +| \param ci Index in x direction +| \param cj Index in y direction +| \param ck Index in z direction +| +| \return 0 if no error occurred +****************************************************************************/ REAL check_max(PARA_DATA *para, REAL *psi, int ci, int cj, int ck) { int imax = para->geom->imax, jmax = para->geom->jmax; int i, j, k; @@ -243,15 +260,16 @@ REAL check_max(PARA_DATA *para, REAL *psi, int ci, int cj, int ck) { return tmp; -}/* End of check_max( )*/ +}/* End of check_max( ) */ - /* - * Calculate averaged value of psi - * - * @param para Pointer to FFD parameters - * @param psi Pointer to the variable - * - */ +/**************************************************************************** +| Calculate averaged value of psi +| +| \param para Pointer to FFD parameters +| \param psi Pointer to the variable +| +| \return Non-weighted average +****************************************************************************/ REAL average(PARA_DATA *para, REAL *psi) { int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; @@ -265,20 +283,20 @@ REAL average(PARA_DATA *para, REAL *psi) { return tmp / (imax*jmax*kmax); -}/* End of average( )*/ +}/* End of average( ) */ -/* - * Calculate volume weighted averaged value of psi in a space - * - * The average is weighted by volume of each cell - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * - * @return Volume weighted average - */ +/**************************************************************************** +| Calculate volume weighted averaged value of psi in a space +| +| The average is weighted by volume of each cell +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| +| \return Volume weighted average +****************************************************************************/ REAL average_volume(PARA_DATA *para, REAL **var, REAL *psi) { int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; @@ -301,18 +319,18 @@ REAL average_volume(PARA_DATA *para, REAL **var, REAL *psi) { return tmp2 / para->geom->volFlu; } -}/* End of average_volume( )*/ +}/* End of average_volume( ) */ -/* - * Calcuate time averaged value - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Calculate time averaged value +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ int average_time(PARA_DATA *para, REAL **var) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -327,11 +345,11 @@ int average_time(PARA_DATA *para, REAL **var) { var[TEMPM][IX(i,j,k)] = var[TEMPM][IX(i,j,k)] / step; END_FOR - /* Wall surfaces*/ + /* Wall surfaces */ for(i=0; ibc->nb_wall; i++) para->bc->temHeaMean[i] = para->bc->temHeaMean[i] / step; - /* Fluid ports*/ + /* Fluid ports */ for(i=0; ibc->nb_port; i++) { para->bc->TPortMean[i] = para->bc->TPortMean[i] / step; para->bc->velPortMean[i] = para->bc->velPortMean[i] / step; @@ -342,23 +360,23 @@ int average_time(PARA_DATA *para, REAL **var) { para->bc->CPortMean[i][j] = para->bc->CPortMean[i][j] / step; } - /* Sensor data*/ + /* Sensor data */ para->sens->TRooMean = para->sens->TRooMean / step; for(i=0; isens->nb_sensor; i++) para->sens->senValMean[i] = para->sens->senValMean[i] / step; return 0; -} /* End of average_time()*/ - - /* - * Reset time averaged value to 0 - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * - * @return 0 if no error occurred - */ +} /* End of average_time() */ + +/**************************************************************************** +| Reset time averaged value to 0 +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ int reset_time_averaged_data (PARA_DATA *para, REAL **var) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -373,11 +391,11 @@ int reset_time_averaged_data (PARA_DATA *para, REAL **var) { var[TEMPM][IX(i,j,k)] = 0; END_FOR - /* Wall surfaces*/ + /* Wall surfaces */ for(i=0; ibc->nb_wall; i++) para->bc->temHeaMean[i] = 0; - /* Fluid ports*/ + /* Fluid ports */ for(i=0; ibc->nb_port; i++) { para->bc->TPortMean[i] = 0; para->bc->velPortMean[i] = 0; @@ -388,7 +406,7 @@ int reset_time_averaged_data (PARA_DATA *para, REAL **var) { para->bc->CPortMean[i][j] = 0; } - /* Sensor data*/ + /* Sensor data */ para->sens->TRooMean = 0; for(i=0; isens->nb_sensor; i++) para->sens->senValMean[i] = 0; @@ -397,24 +415,24 @@ int reset_time_averaged_data (PARA_DATA *para, REAL **var) { /*Reset the time step to 0*/ para->mytime->step_mean = 0; return 0; -} /* End of reset_time_averaged_data()*/ - - /* - * Add time averaged value for the time average later on - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * - * @return 0 if no error occurred - */ +} /* End of reset_time_averaged_data() */ + +/**************************************************************************** +| Add time averaged value for the time average later on +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ int add_time_averaged_data(PARA_DATA *para, REAL **var) { int i, j; int imax = para->geom->imax, jmax = para->geom->jmax; int kmax = para->geom->kmax; int size = (imax+2) * (jmax+2) * (kmax+2); - /* All the cells*/ + /* All the cells */ for(i=0; ibc->nb_wall; i++) para->bc->temHeaMean[i] += para->bc->temHeaAve[i]; - /* Fluid ports*/ + /* Fluid ports */ for(i=0; ibc->nb_port; i++) { para->bc->TPortMean[i] += para->bc->TPortAve[i]; para->bc->velPortMean[i] += para->bc->velPortAve[i]; @@ -438,26 +456,30 @@ int add_time_averaged_data(PARA_DATA *para, REAL **var) { } - /* Sensor data*/ + /* Sensor data */ para->sens->TRooMean += para->sens->TRoo; for(j=0; jsens->nb_sensor; j++) para->sens->senValMean[j] += para->sens->senVal[j]; - /* Update the step*/ + /* Update the step */ para->mytime->step_mean++; return 0; -} /* End of add_time_averaged_data()*/ - - /* - * Check the energy transfer rate through the wall to the air - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ +} /* End of add_time_averaged_data() */ + +/**************************************************************************** +| Check the energy transfer rate through the wall to the air +| +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +| +| \change h as it may change when flow is assumed to be turublent +| +****************************************************************************/ REAL qwall(PARA_DATA *para, REAL **var,int **BINDEX) { int i, j, k; int it; @@ -467,176 +489,184 @@ REAL qwall(PARA_DATA *para, REAL **var,int **BINDEX) { int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); REAL *psi=var[TEMP]; REAL *gx = var[GX], *gy = var[GY], *gz = var[GZ]; - REAL coeff_h=para->prob->coeff_h; + REAL coeff_h=para->prob->coeff_h*para->prob->Cp; + REAL D = 1.0; REAL qwall=0; - + REAL axy, ayz, azx; /* Area of surfaces */ + REAL qwall_bc = 0.0; + REAL *qflux = var[QFLUX]; REAL *flagp = var[FLAGP]; + REAL A = 0.0; for(it=0; itsolv->check_residual == 1) { + sprintf(msg, "Wall heat flux is %f", qwall_bc); + ffd_log(msg, FFD_NORMAL); + } + + /*printf("Area is %f\n", A);*/ + return qwall; -} /* End of qwall()*/ +} /* End of qwall() */ - /* - * Free memory for BINDEX - * - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ +/**************************************************************************** +| Free memory for BINDEX +| +| \param BINDEX Pointer to the boundary index +| +| +| \return 0 if no error occurred +****************************************************************************/ void free_index(int **BINDEX) { if(BINDEX[0]) free(BINDEX[0]); if(BINDEX[1]) free(BINDEX[1]); if(BINDEX[2]) free(BINDEX[2]); -} /* End of free_index ()*/ - - /* - * Free memory for FFD simulation variables - * - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ + if(BINDEX[3]) free(BINDEX[3]); + if(BINDEX[4]) free(BINDEX[4]); + if(BINDEX[5]) free(BINDEX[5]); +} /* End of free_index () */ + +/**************************************************************************** +| Free memory for FFD simulation variables +| +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ void free_data(REAL **var) { - if(var[X]) free(var[X]); - if(var[Y]) free(var[Y]); - if(var[Z]) free(var[Z]); - if(var[VX]) free(var[VX]); - if(var[VY]) free(var[VY]); - if(var[VZ]) free(var[VZ]); - if(var[VXS]) free(var[VXS]); - if(var[VYS]) free(var[VYS]); - if(var[VZS]) free(var[VZS]); - if(var[VXM]) free(var[VXM]); - if(var[VYM]) free(var[VYM]); - if(var[VZM]) free(var[VZM]); - if(var[TEMP]) free(var[TEMP]); - if(var[TEMPM]) free(var[TEMPM]); - if(var[TEMPS]) free(var[TEMPS]); - if(var[IP]) free(var[IP]); - if(var[TMP1]) free(var[TMP1]); - if(var[TMP2]) free(var[TMP2]); - if(var[TMP3]) free(var[TMP3]); - if(var[AP]) free(var[AP]); - if(var[AN]) free(var[AN]); - if(var[AS]) free(var[AS]); - if(var[AE]) free(var[AE]); - if(var[AW]) free(var[AW]); - if(var[AF]) free(var[AF]); - if(var[AB]) free(var[AB]); - if(var[B]) free(var[B]); - if(var[GX]) free(var[GX]); - if(var[GY]) free(var[GY]); - if(var[GZ]) free(var[GZ]); - if(var[AP0]) free(var[AP0]); - if(var[PP]) free(var[PP]); - if(var[FLAGP]) free(var[FLAGP]); - if(var[FLAGU]) free(var[FLAGU]); - if(var[FLAGV]) free(var[FLAGV]); - if(var[FLAGW]) free(var[FLAGW]); - if(var[LOCMIN]) free(var[LOCMIN]); - if(var[LOCMAX]) free(var[LOCMAX]); - if(var[VXBC]) free(var[VXBC]); - if(var[VYBC]) free(var[VYBC]); - if(var[VZBC]) free(var[VZBC]); - if(var[TEMPBC]) free(var[TEMPBC]); - if(var[Xi1]) free(var[Xi1]); - if(var[Xi2]) free(var[Xi2]); - if(var[Xi1BC]) free(var[Xi1BC]); - if(var[Xi2BC]) free(var[Xi2BC]); - if(var[C1]) free(var[C1]); - if(var[C2]) free(var[C2]); - if(var[C1BC]) free(var[C1BC]); - if(var[C2BC]) free(var[C2BC]); - if(var[QFLUXBC]) free(var[QFLUXBC]); - if(var[QFLUX]) free(var[QFLUX]); - -} /* End of free_data()*/ - - /* - * Determine the maximum value of given scalar variable - * - * @param para Pointer to FFD parameters - * @param dat Pointer to scalar variable - * - * @return Smax Maximum value of the scalar variable - */ + int nb_var = C2BC + 1; + int i; + for (i = 0; i < nb_var; i++) { + if (var[i]) free(var[i]); + } +} /* End of free_data() */ + +/**************************************************************************** +| Determine the maximum value of given scalar variable +| +| \param para Pointer to FFD parameters +| \param dat Pointer to scalar variable +| +| \return Smax Maximum value of the scalar variable +****************************************************************************/ REAL scalar_global_max(PARA_DATA *para, REAL *dat) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -651,16 +681,16 @@ REAL scalar_global_max(PARA_DATA *para, REAL *dat) { END_FOR return Smax; -} /* End of scalar_global_max()*/ - - /* - * Determine the minimum value of given scalar variable - * - * @param para Pointer to FFD parameters - * @param dat Pointer to scalar variable - * - * @return Smin Minimum value of the scalar variable - */ +} /* End of scalar_global_max() */ + +/**************************************************************************** +| Determine the minimum value of given scalar variable +| +| \param para Pointer to FFD parameters +| \param dat Pointer to scalar variable +| +| \return Smin Minimum value of the scalar variable +****************************************************************************/ REAL scalar_global_min(PARA_DATA *para, REAL *dat) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -675,16 +705,16 @@ REAL scalar_global_min(PARA_DATA *para, REAL *dat) { END_FOR return SMin; -} /* End of scalar_global_min()*/ - - /* - * Determine the maximum velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return Vmax Maximum velocity in the simulated domain - */ +} /* End of scalar_global_min() */ + +/**************************************************************************** +| Determine the maximum velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return Vmax Maximum velocity in the simulated domain +****************************************************************************/ REAL V_global_max(PARA_DATA *para, REAL **var) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -702,16 +732,16 @@ REAL V_global_max(PARA_DATA *para, REAL **var) { END_FOR return sqrt(Vmax); -} /* End of V_global_max()*/ - - /* - * Determine the minimum velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return Vmin Minimum velocity in the simulated domain - */ +} /* End of V_global_max() */ + +/**************************************************************************** +| Determine the minimum velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return Vmin Minimum velocity in the simulated domain +****************************************************************************/ REAL V_global_min(PARA_DATA *para, REAL **var) { int i, j, k; int imax = para->geom->imax, jmax = para->geom->jmax; @@ -729,4 +759,651 @@ REAL V_global_min(PARA_DATA *para, REAL **var) { END_FOR return sqrt(Vmin); -} /* End of V_global_min()*/ +} /* End of V_global_min() */ + +/**************************************************************************** +| Check the minimum to the solid boudaries +| cells used in calculation of zero equation tuebulence model +| +| \param para Pointer to FFD parameters +| \param var Pointer to the variable +| \param +| +| \return 0 if no error occurred +****************************************************************************/ +int min_distance(PARA_DATA *para, REAL **var, int **BINDEX) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int i, j, k; + REAL *x = var[X], *y = var[Y], *z = var[Z]; + int it, i_bc, j_bc, k_bc; + int index = para->geom->index; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL tmp = 1e12; /* define a large number */ + REAL lx, ly, lz, l; + + /* Loop all the fluid cells */ + FOR_EACH_CELL + /* initiate the tmp variable after every iteragion */ + tmp = 1e12; + /* pass if the cell is not fluid */ + if (var[FLAGP][IX(i, j, k)] >= 0) continue; + /* go through all the boudnary conditions and find minimal */ + for (it = 0; it < index; it++) { + i_bc = BINDEX[0][it]; + j_bc = BINDEX[1][it]; + k_bc = BINDEX[2][it]; + if (var[FLAGP][IX(i_bc, j_bc, k_bc)] == INLET || var[FLAGP][IX(i_bc, j_bc, k_bc)] == OUTLET) continue; + /* caculate the distance in each dimension and find the Euler distance l */ + lx = fabs(x[IX(i, j, k)] - x[IX(i_bc, j_bc, k_bc)]); + ly = fabs(y[IX(i, j, k)] - y[IX(i_bc, j_bc, k_bc)]); + lz = fabs(z[IX(i, j, k)] - z[IX(i_bc, j_bc, k_bc)]); + l = sqrt(lx*lx + ly*ly + lz*lz); + /* store the minimal value during the looping to tmp */ + if (l < tmp) { + tmp = l; + } + } + /* store the minimal value associated with (i,j,k) to global var */ + var[MIN_DISTANCE][IX(i, j, k)] = tmp; + + /*printf("Distance [%d, %d, %d] is %f\n", i, j, k, tmp);*/ + + + END_FOR + return 0; + +}/* End of min_distance( ) */ + + /**************************************************************************** + | Check the volumetric inflow rate + | + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | \param psi Pointer to the variable + | \param BINDEX Pointer to the boundary index + | + | \return 0 if no error occurred + ****************************************************************************/ +REAL vol_inflow(PARA_DATA *para, REAL **var, int **BINDEX) { + int i, j, k; + int it; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int index = para->geom->index; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL *gx = var[GX], *gy = var[GY], *gz = var[GZ]; + REAL *u = var[VX], *v = var[VY], *w = var[VZ]; + REAL mass_in = 0; + REAL *flagp = var[FLAGP]; + + /*--------------------------------------------------------------------------- + | Compute the total inflow + ---------------------------------------------------------------------------*/ + for (it = 0; itgeom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int index= para->geom->index; + int IMAX = imax+2, IJMAX = (imax+2)*(jmax+2); + REAL *gx = var[GX], *gy = var[GY], *gz = var[GZ]; + REAL *u = var[VX], *v = var[VY], *w = var[VZ]; + REAL mass_out=0; + REAL *flagp = var[FLAGP]; + + /*--------------------------------------------------------------------------- + | Compute the total outflow + ---------------------------------------------------------------------------*/ + for(it=0;itgeom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + int it, id; + int index = para->geom->index; + REAL *flagp = var[FLAGP]; + int nb_ports = para->bc->nb_port; + REAL A=0.0, V_tmp=0.0; + REAL Axy=0.0, Ayz=0.0, Azx=0.0; + REAL *QPort = para->bc->QPort; + REAL *u = var[VX], *v = var[VY], *w = var[VZ]; + int put_X = para->geom->tile_putX, put_Y =para->geom->tile_putY, put_Z = para->geom->tile_putZ; + + /* Set the value of para->bc->QPort =0 */ + for (i = 0; i < para->bc->nb_port; i++) { + QPort[i] = 0.0; + } + + /* Loop all the boundary cells and calculate the flow rates at tiles */ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + id = BINDEX[4][it]; + + if (flagp[IX(i, j, k)] == TILE) { + /* West or East Boundary */ + if (put_X) { + A = area_yz(para, var, i, j, k); + + if (i > 0) + V_tmp = u[IX(i - 1, j, k)]; + else + V_tmp = u[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + } + /* South and North Boundary */ + if (put_Y) { + A = area_zx(para, var, i, j, k); + + if (j > 0) + V_tmp = v[IX(i, j - 1, k)]; + else + V_tmp = v[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + } + /* Ceiling and Floor Boundary */ + if (put_Z) { + A = area_xy(para, var, i, j, k); + + if (k >0 ) + V_tmp = w[IX(i, j, k - 1)]; + else + V_tmp = w[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + } + } + else if (flagp[IX(i, j, k)] == OUTLET) { + /* West or East Boundary */ + A = area_yz(para, var, i, j, k); + + if (i > 0) + V_tmp = u[IX(i - 1, j, k)]; + else + V_tmp = u[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + /* South and North Boundary */ + A = area_zx(para, var, i, j, k); + + if (j > 0) + V_tmp = v[IX(i, j - 1, k)]; + else + V_tmp = v[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + /* Ceiling and Floor Boundary */ + A = area_xy(para, var, i, j, k); + + if (k >0 ) + V_tmp = w[IX(i, j, k - 1)]; + else + V_tmp = w[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + } + else if (flagp[IX(i, j, k)] == INLET) { + Ayz = area_yz(para, var, i, j, k); + Azx = area_zx(para, var, i, j, k); + Axy = area_xy(para, var, i, j, k); + + if (i > 0) + V_tmp = u[IX(i - 1, j, k)]; + else + V_tmp = u[IX(i, j, k)]; + + QPort[id] += V_tmp*Ayz; + + if (j > 0) + V_tmp = v[IX(i, j - 1, k)]; + else + V_tmp = v[IX(i, j, k)]; + + QPort[id] += V_tmp*Azx; + + if (k >0 ) + V_tmp = w[IX(i, j, k - 1)]; + else + V_tmp = w[IX(i, j, k)]; + + QPort[id] += V_tmp*Axy; + } + } /*end of for*/ + + /* Write the results into files */ + if (para->mytime->step_current == 0) { + /* create a new .dat file */ + if ((FILE_TILE_FLOW = fopen("tile_flowrates.dat", "w+")) == NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + fprintf(FILE_TILE_FLOW, "Time\t"); + for (i = 0; i < para->bc->nb_port; i++) { + fprintf(FILE_TILE_FLOW, "%s\t", para->bc->portName[i]); + } + fprintf(FILE_TILE_FLOW, "\n"); + fprintf(FILE_TILE_FLOW, "%.4f\t", para->mytime->t); + for (i = 0; i < para->bc->nb_port; i++) { + fprintf(FILE_TILE_FLOW, "%f\t", QPort[i] * 2118.88); + } + fprintf(FILE_TILE_FLOW, "\n"); + fclose(FILE_TILE_FLOW); + } + else { + if ((FILE_TILE_FLOW = fopen("tile_flowrates.dat", "a+")) == NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + fprintf(FILE_TILE_FLOW, "%.4f\t", para->mytime->t); + for (i = 0; i < para->bc->nb_port; i++) { + fprintf(FILE_TILE_FLOW, "%f\t", QPort[i] * 2118.88); + } + fprintf(FILE_TILE_FLOW, "\n"); + + fclose(FILE_TILE_FLOW); + } + /* Output to screen or txt files */ + + if(para->outp->version==DEBUG){ + for (i = 0; i < para->bc->nb_port; i++) { + printf("%s--->>>>>>>>>>%f CFM\t\n",para->bc->portName[i],QPort[i]* 2118.88); + } + } + return 0; +} + +/**************************************************************************** +| Check flow rates at inlets when t=0 +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL initial_inflows(PARA_DATA *para, REAL **var, int **BINDEX) { + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + int it, id; + int index = para->geom->index; + REAL *flagp = var[FLAGP]; + int nb_ports = para->bc->nb_port; + REAL A = 0.0, V_tmp = 0.0; + REAL *QPort = para->bc->QPort; + REAL *u = var[VXBC], *v = var[VYBC], *w = var[VZBC]; + REAL inflow = 0.0; + + /* Loop all the boundary cells and calculate the flow rates at tiles */ + for (it = 0; it < index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + id = BINDEX[4][it]; + if (flagp[IX(i, j, k)] == INLET) { + /* West or East Boundary */ + if (i == 0 || i == imax + 1) { + A = area_yz(para, var, i, j, k); + + if (i == 0) + V_tmp = u[IX(i, j, k)]; + else + V_tmp = -1*u[IX(i, j, k)]; + + QPort[id] += V_tmp*A; + } + /* South and North Boundary */ + if (j == 0 || j == jmax + 1) { + A = area_zx(para, var, i, j, k); + + if (j == 0) + V_tmp = v[IX(i, j, k)]; + else + V_tmp = -1*v[IX(i, j, k)]; + + inflow += V_tmp*A; + } + /* Ceiling and Floor Boundary */ + if (k == 0 || k == kmax + 1) { + A = area_xy(para, var, i, j, k); + + if (k == 0) + V_tmp = w[IX(i, j, k)]; + else + V_tmp = -1*w[IX(i, j, k)]; + + inflow += V_tmp*A; + } + } + } /*end of for*/ + + return inflow; +} + +/**************************************************************************** +| Parse the command-line argument +| +| \param argc number of argument +| \param argv command-line argument +| +| \return 0 if no error occurred +****************************************************************************/ +int parse_argument(int argc, char **argv, int *platform_device) { + size_t optind; + for (optind = 1; optind < argc && argv[optind][0] == '-'; optind++) { + switch (argv[optind][1]) { + case 'P'/*platform*/: + platform_device[0] = argv[optind][2] - '0'; + break; + case 'p'/*platform*/: + platform_device[0] = argv[optind][2] - '0'; + break; + case 'C'/*CPU*/: + platform_device[1] = argv[optind][2] - '0'; + break; + case 'c'/*CPU*/: + platform_device[1] = argv[optind][2] - '0'; + break; + case 'G'/*GPU*/: + platform_device[2] = argv[optind][2] - '0'; + break; + case 'g'/*GPU*/: + platform_device[2] = argv[optind][2] - '0'; + break; + default: + printf("parse_argument(): command-line argument is not legal"); + exit(1); + } + } + return 0; /* if it is "-1", that means the device or platform is not */ +} + +/**************************************************************************** +| calculate momentum kick: 1/rho*S (unit: N/kg) +| 1/rho*S = V_dot*(V1-V2)/V = A*V2*(V2/beta-V2)/A*h = V2*(V2/beta-V2)/h +| where: V1 and V2 are the velocities supposing that tiles are partially or fully open +| A is tha area of tile, h is the height of the space, beta is open-area-ratio +| return 1/rho*S +****************************************************************************/ +REAL get_momentum_kick(REAL V2,REAL beta, REAL h){ + REAL momentum_kick = 0.0; + momentum_kick = V2*(V2/beta-V2)/h; + return momentum_kick; +} + +/**************************************************************************** +| find the monitoring points in front of each rack +| monitors are 6 inch (0.1524 m) in front of rack +| FIXME: ONLY ABLE TO HANDLE RACK WHOSE AIRLOW IS IN X DIRECTION! +| return 0 if all points are found +****************************************************************************/ +int get_monitor_points(PARA_DATA *para, REAL **var,int SI,int SJ,int SK, int EI,int EJ,int EK,int rack_flow_direction,int id_rack){ + int i, j, k; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL delta = 0.0; + REAL length = 0.0; + REAL monitorX=0.0, monitorY=0.0, monitorZ=0.0; + + /* calculate length in Y */ + i = SI; + k = SK; + for (j=SJ;j<=EJ;j++){ + if (j==0){ + delta = 0.0; + } + else{ + delta = var[GY][IX(i,j,k)]-var[GY][IX(i,j-1,k)]; + } + length += delta; + } + /* find the base coordinate for all monitor points (on the floor) */ + monitorY = var[GY][IX(SI,EJ,SK)] - 0.5*length; + /* find monitorZ base */ + if (SK == 0){ + monitorZ = var[GZ][IX(SI,SJ,SK)]; + } + else{ + monitorZ = var[GZ][IX(SI,SJ,SK-1)]; + } + /* find monitorX base, which is dependent on the flow direction in rack */ + if (sign(rack_flow_direction) == 1){ + if (SI==0){ + ffd_log("get_monitor_points(): monitor points are ouside the domain",FFD_ERROR); + return 1; + } + else{ + monitorX = var[GX][IX(SI-1,SJ,SK)] - 0.1524; + } + } + else if (sign(rack_flow_direction) == -1){ + monitorX = var[GX][IX(EI,SJ,SK)] + 0.1524; + } + else{ + ffd_log("get_monitor_points(): ONLY ABLE TO HANDLE RACK FLOW DIRECTION OF X",FFD_ERROR); + return 1; + } + + /* manually set the height of the monitor points based on the paper */ + /* Zachary Pardey, Jim VanGilder, 2015, CREATING A CALIBRATED CFD MODEL OF A MIDSIZE DATA CENTER */ + /* P1: 0.53m, P2: 0.91m, P3: 1.30m, P4: 1.68m in Z direction */ + /* para->sens->coordMoniPoints[A][B][C]-> A: which rack; B: which monitor point; C: which coordinate */ + for(i=0;i<4;i++){ + para->sens->coordMoniPoints[id_rack][i][0] = monitorX; + para->sens->coordMoniPoints[id_rack][i][1] = monitorY; + } + para->sens->coordMoniPoints[id_rack][0][2] = monitorZ + 0.53; + para->sens->coordMoniPoints[id_rack][1][2] = monitorZ + 0.91; + para->sens->coordMoniPoints[id_rack][2][2] = monitorZ + 1.30; + para->sens->coordMoniPoints[id_rack][3][2] = monitorZ + 1.68; + + /* return */ + return 0; +} + +/**************************************************************************** +| find the indexes of the monitoring points +| monitors are 6 inch (0.1524 m) in front of rack +| FIXME: ONLY ABLE TO HANDLE RACK WHOSE AIRLOW IS IN X DIRECTION! +| return 0 if all points are found +****************************************************************************/ +int get_monitor_index(PARA_DATA *para, REAL **var){ + int i, j, k; + int ip=0,jp=0,kp=0; + int id,point; + REAL xp,yp,zp; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL *flagp = var[FLAGP]; + REAL eulerian_dis; + REAL minimal_dis; + /* loop all the cells, which can be very time consuming */ + for(id=0;idbc->nb_rack;id++){ + for (point=0;point<4;point++){ + xp = para->sens->coordMoniPoints[id][point][0]; + yp = para->sens->coordMoniPoints[id][point][1]; + zp = para->sens->coordMoniPoints[id][point][2]; + minimal_dis = 1e5; + /* find the closest fluid cell */ + FOR_ALL_CELL + if (flagp[IX(i,j,k)]!=FLUID) continue; + eulerian_dis = sqrt( (xp-var[X][IX(i,j,k)])*(xp-var[X][IX(i,j,k)]) + +(yp-var[Y][IX(i,j,k)])*(yp-var[Y][IX(i,j,k)]) + +(zp-var[Z][IX(i,j,k)])*(zp-var[Z][IX(i,j,k)])); + if (eulerian_dissens->indexMoniPoints[id][point][0] = ip; + para->sens->indexMoniPoints[id][point][1] = jp; + para->sens->indexMoniPoints[id][point][2] = kp; + } + } + return 0; +} + +/**************************************************************************** +| write temperature at monitoring points +| monitors are 6 inch (0.1524 m) in front of rack +| FIXME: ONLY ABLE TO HANDLE RACK WHOSE AIRLOW IS IN X DIRECTION! +| return 0 if all points are found +****************************************************************************/ +int write_monitor_data(PARA_DATA *para, REAL **var){ + int i, j; + int ip,jp,kp; + REAL T1,T2,T3,T4; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + FILE *datafile; + /* find monitor index */ + if (get_monitor_index(para,var)!=0){ + ffd_log("write_monitor_data(): cannot find the index of monitoring cells",FFD_ERROR); + } + /* open output file */ + if ((datafile = fopen("monitor_data.dat", "w+")) == NULL) { + ffd_log("write_monitor_data(): Failed to open output file!\n", FFD_ERROR); + return 1; + } + /* write header */ + fprintf(datafile,"Rack\t\tP1\t\tP2\t\tP3\t\tP4\t\t\n"); + for(i=0;ibc->nb_rack;i++){ + /* P1 */ + ip = para->sens->indexMoniPoints[i][0][0]; + jp = para->sens->indexMoniPoints[i][0][1]; + kp = para->sens->indexMoniPoints[i][0][2]; + T1 = var[TEMP][IX(ip,jp,kp)]; + /* P2 */ + ip = para->sens->indexMoniPoints[i][1][0]; + jp = para->sens->indexMoniPoints[i][1][1]; + kp = para->sens->indexMoniPoints[i][1][2]; + T2 = var[TEMP][IX(ip,jp,kp)]; + /* P3 */ + ip = para->sens->indexMoniPoints[i][2][0]; + jp = para->sens->indexMoniPoints[i][2][1]; + kp = para->sens->indexMoniPoints[i][2][2]; + T3 = var[TEMP][IX(ip,jp,kp)]; + /* P4 */ + ip = para->sens->indexMoniPoints[i][3][0]; + jp = para->sens->indexMoniPoints[i][3][1]; + kp = para->sens->indexMoniPoints[i][3][2]; + T4 = var[TEMP][IX(ip,jp,kp)]; + /* write results */ + fprintf(datafile,"%s\t%.2f\t%.2f\t%.2f\t%.2f\n",para->bc->rackName[i],T1,T2,T3,T4); + } + + fclose(datafile); + return 0; +} diff --git a/Buildings/Resources/src/FastFluidDynamics/utility.h b/Buildings/Resources/src/FastFluidDynamics/utility.h index 6cdfbc82e9f..7f0dec1f6fe 100644 --- a/Buildings/Resources/src/FastFluidDynamics/utility.h +++ b/Buildings/Resources/src/FastFluidDynamics/utility.h @@ -1,19 +1,25 @@ -/* - * - * @file utility.h - * - * @brief Some frequently used functions for FFD - * - * @author Wangda Zuo, Ana Cohen - * University of Miami - * W.Zuo@miami.edu - * Purdue University - * Mingang Jin, Qingyan Chen - * Jin55@purdue.edu, YanChen@purdue.edu - * - * @date 8/3/2013 - * - */ +/**************************************************************************** +| +| \file utility.h +| +| \brief Some frequently used functions for FFD +| +| \author Wangda Zuo, Ana Cohen +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Purdue University +| Mingang Jin, Qingyan Chen +| Jin55@purdue.edu, YanChen@purdue.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| +****************************************************************************/ #ifndef _UTILITY_H #define _UTILITY_H @@ -34,203 +40,301 @@ #include "geometry.h" #endif +/**************************************************************************** +| Check the residual of equation +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| +| \return 0 if no error occurred +****************************************************************************/ +REAL check_residual(PARA_DATA* para, REAL** var, REAL* x, REAL* flag); + +/**************************************************************************** +| Write the log file +| +| \param message Pointer the message +| \param msg_type Type of message +| +| \return 0 if no error occurred +****************************************************************************/ +void ffd_log(char* message, FFD_MSG_TYPE msg_type); + +/**************************************************************************** +| Check the outflow rate of the scalar psi +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL outflow(PARA_DATA* para, REAL** var, REAL* psi, int** BINDEX); + +/**************************************************************************** +| Check the inflow rate of the scalar psi +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL inflow(PARA_DATA* para, REAL** var, REAL* psi, int** BINDEX); + +/**************************************************************************** +| Check the minimum value of the scalar psi at (ci,cj,ck) and its surrounding +| cells +| +| \param para Pointer to FFD parameters +| \param psi Pointer to the variable +| \param ci Index in x direction +| \param cj Index in y direction +| \param ck Index in z direction +| +| \return 0 if no error occurred +****************************************************************************/ +REAL check_min(PARA_DATA* para, REAL* psi, int ci, int cj, int ck); + +/**************************************************************************** +| Check the maximum value of the scalar psi at (ci,cj,ck) and its surrounding +| cells +| +| \param para Pointer to FFD parameters +| \param psi Pointer to the variable +| \param ci Index in x direction +| \param cj Index in y direction +| \param ck Index in z direction +| +| \return 0 if no error occurred +****************************************************************************/ +REAL check_max(PARA_DATA* para, REAL* psi, int ci, int cj, int ck); + +/**************************************************************************** +| Calculate averaged value of psi +| +| \param para Pointer to FFD parameters +| \param psi Pointer to the variable +| +****************************************************************************/ +REAL average(PARA_DATA* para, REAL* psi); + + +/**************************************************************************** +| Calculate volume weighted averaged value of psi in a space +| +| The average is weighted by volume of each cell +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| +| \return Volume weighted average +****************************************************************************/ +REAL average_volume(PARA_DATA* para, REAL** var, REAL* psi); + +/**************************************************************************** +| Calcuate time averaged value +| +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ +int average_time(PARA_DATA* para, REAL** var); + +/**************************************************************************** +| Reset time averaged value to 0 +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ +int reset_time_averaged_data(PARA_DATA* para, REAL** var); + +/**************************************************************************** +| Add time averaged value for the time average later on +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| +| \return 0 if no error occurred +****************************************************************************/ +int add_time_averaged_data(PARA_DATA* para, REAL** var); + +/**************************************************************************** +| Check the energy transfer rate through the wall to the air +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL qwall(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Free memory for BINDEX +| +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +void free_index(int** BINDEX); + +/**************************************************************************** +| Free memory for FFD simulation variables +| +| \param var Pointer to FFD simulation variables +| +| \return 0 if no error occurred +****************************************************************************/ +void free_data(REAL** var); + +/**************************************************************************** +| Determine the maximum value of given scalar variable +| +| \param para Pointer to FFD parameters +| \param dat Pointer to scalar variable +| +| \return Smax Maximum value of the scalar variable +****************************************************************************/ +REAL scalar_global_max(PARA_DATA* para, REAL* dat); + +/**************************************************************************** +| Determine the minimum value of given scalar variable +| +| \param para Pointer to FFD parameters +| \param dat Pointer to scalar variable +| +| \return Smin Minimum value of the scalar variable +****************************************************************************/ +REAL scalar_global_min(PARA_DATA* para, REAL* dat); + +/**************************************************************************** +| Determine the maximum velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return Vmax Maximum velocity in the simulated domain +****************************************************************************/ +REAL V_global_max(PARA_DATA* para, REAL** var); + +/**************************************************************************** +| Determine the minimum velocity +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| +| \return Vmin Minimum velocity in the simulated domain +****************************************************************************/ +REAL V_global_min(PARA_DATA* para, REAL** var); + +/**************************************************************************** +| Check the minimum to the solid boudaries +| cells used in calculation of zero equation tuebulence model +| +| \param para Pointer to FFD parameters +| \param var Pointer to the variable +| \param +| +| \return 0 if no error occurred +****************************************************************************/ +int min_distance(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Check the volumetric inflow rate +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL vol_inflow(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Check the volumetric inflow rate +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param psi Pointer to the variable +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL vol_outflow(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Check flow rates through all the tiles +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +int check_tile_flowrate(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Check flow rates at inlets when t=0 +| +| \param para Pointer to FFD parameters +| \param var Pointer to FFD simulation variables +| \param BINDEX Pointer to the boundary index +| +| \return 0 if no error occurred +****************************************************************************/ +REAL initial_inflows(PARA_DATA* para, REAL** var, int** BINDEX); + +/**************************************************************************** +| Parse the command-line argument +| +| \param argc number of argument +| \param argv command-line argument +| +| \return 0 if no error occurred +****************************************************************************/ +int parse_argument(int argc, char** argv, int* platform_device); + +/**************************************************************************** +| calculate momentum kick: 1/rho*S +| 1/rho*S = V_dot*(V1-V2)/V = A*V2*(V2/beta-V2)/A*h = V2*(V2/beta-V2)/h +| where: V1 and V2 are the velocities supposing that tiles are partially or fully open +| A is tha area of tile, h is the height of the space, beta is open-area-ratio +****************************************************************************/ +REAL get_momentum_kick(REAL V2, REAL beta, REAL h); + +/**************************************************************************** +| find the monitoring points in front of each rack +| return 0 if all points are found +****************************************************************************/ +int get_monitor_points(PARA_DATA* para, REAL** var, int SI, int SJ, int SK, int EI, int EJ, int EK, int rack_flow_direction, int id_rack); + +/**************************************************************************** +| find the indexes of the monitoring points +| monitors are 6 inch (0.1524 m) in front of rack +| FIXME: ONLY ABLE TO HANDLE RACK WHOSE AIRLOW IS IN X DIRECTION! +| return 0 if all points are found +****************************************************************************/ +int get_monitor_index(PARA_DATA* para, REAL** var); + +/**************************************************************************** +| write temperature at monitoring points +| monitors are 6 inch (0.1524 m) in front of rack +| FIXME: ONLY ABLE TO HANDLE RACK WHOSE AIRLOW IS IN X DIRECTION! +| return 0 if all points are found +****************************************************************************/ +int write_monitor_data(PARA_DATA *para, REAL **var); + -FILE *file_log; - -/* - * Check the residual of equation - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * - * @return 0 if no error occurred - */ -REAL check_residual(PARA_DATA *para, REAL **var, REAL *x); - -/* - * Write the log file - * - * @param message Pointer the message - * @param msg_type Type of message - * - * @return 0 if no error occurred - */ -void ffd_log(char *message, FFD_MSG_TYPE msg_type); - -/* - * Check the outflow rate of the scalar psi - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ -REAL outflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX); - -/* - * Check the inflow rate of the scalar psi - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ -REAL inflow(PARA_DATA *para, REAL **var, REAL *psi, int **BINDEX); - -/* - * Check the minimum value of the scalar psi at (ci,cj,ck) and its surrounding - * cells - * - * @param para Pointer to FFD parameters - * @param psi Pointer to the variable - * @param ci Index in x direction - * @param cj Index in y direction - * @param ck Index in z direction - * - * @return 0 if no error occurred - */ -REAL check_min(PARA_DATA *para, REAL *psi, int ci,int cj,int ck); - -/* - * Check the maximum value of the scalar psi at (ci,cj,ck) and its surrounding - * cells - * - * @param para Pointer to FFD parameters - * @param psi Pointer to the variable - * @param ci Index in x direction - * @param cj Index in y direction - * @param ck Index in z direction - * - * @return 0 if no error occurred - */ -REAL check_max( PARA_DATA *para, REAL *psi, int ci,int cj,int ck); - -/* - * Calculate averaged value of psi - * - * @param para Pointer to FFD parameters - * @param psi Pointer to the variable - * - */ -REAL average(PARA_DATA *para, REAL *psi); - - -/* - * Calculate volume weighted averaged value of psi in a space - * - * The average is weighted by volume of each cell - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param psi Pointer to the variable - * - * @return Volume weighted average - */ -REAL average_volume(PARA_DATA *para, REAL **var, REAL *psi); - -/* - * Calcuate time averaged value - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * - * @return 0 if no error occurred - */ -int average_time(PARA_DATA *para, REAL **var); - -/* - * Reset time averaged value to 0 - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * - * @return 0 if no error occurred - */ -int reset_time_averaged_data (PARA_DATA *para, REAL **var); - -/* - * Add time averaged value for the time average later on - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * - * @return 0 if no error occurred - */ -int add_time_averaged_data (PARA_DATA *para, REAL **var); - -/* - * Check the energy transfer rate through the wall to the air - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ -REAL qwall(PARA_DATA *para, REAL **var,int **BINDEX); - -/* - * Free memory for BINDEX - * - * @param BINDEX Pointer to the boundary index - * - * @return 0 if no error occurred - */ -void free_index(int **BINDEX); - -/* - * Free memory for FFD simulation variables - * - * @param var Pointer to FFD simulation variables - * - * @return 0 if no error occurred - */ -void free_data(REAL **var); - -/* - * Determine the maximum value of given scalar variable - * - * @param para Pointer to FFD parameters - * @param dat Pointer to scalar variable - * - * @return Smax Maximum value of the scalar variable - */ -REAL scalar_global_max(PARA_DATA *para, REAL *dat); - -/* - * Determine the minimum value of given scalar variable - * - * @param para Pointer to FFD parameters - * @param dat Pointer to scalar variable - * - * @return Smin Minimum value of the scalar variable - */ -REAL scalar_global_min(PARA_DATA *para, REAL *dat); - -/* - * Determine the maximum velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return Vmax Maximum velocity in the simulated domain - */ -REAL V_global_max(PARA_DATA *para, REAL **var); - -/* - * Determine the minimum velocity - * - * @param para Pointer to FFD parameters - * @param var Pointer to FFD simulation variables - * - * @return Vmin Minimum velocity in the simulated domain - */ -REAL V_global_min(PARA_DATA *para, REAL **var); diff --git a/Buildings/Resources/src/ISAT/common.h b/Buildings/Resources/src/ISAT/common.h new file mode 100644 index 00000000000..d70cdfc6482 --- /dev/null +++ b/Buildings/Resources/src/ISAT/common.h @@ -0,0 +1,84 @@ +/**************************************************************************** +| +| \file common.h +| +| \brief data strcuture for the ffd_isat program +| +| \author Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 10/18/2018 +| +| \ All RIGHTS RESERVED. +****************************************************************************/ +#ifndef COMMON_H_INCLUDED + +#include +#include + +#include +#include +#include +#include "uthash.h" + +/* Windows*/ +#ifdef _MSC_VER +#include +#else +/* Linux*/ +#include +#endif + +/****************************************************************************** +| Global constants +******************************************************************************/ +#define READ_FFD_RESULT 1 + +#define nx_SIZE 10 /* Dimension of x */ +#define nf_SIZE 4 /* Dimension of f */ +#define nh_SIZE 1 /* Dimension of h, Set to 1 if h(x) is not required to initialize pointer ha */ + +/**************************************************************************** +| Output types for logging information +****************************************************************************/ +typedef enum{MPC_WARNING, MPC_ERROR, MPC_NORMAL, MPC_NEW} MPC_MSG_TYPE; + +/**************************************************************************** +| Hash Table struct to reduce redundency of calling FFD +****************************************************************************/ +typedef struct { + double x[nx_SIZE]; +} hashKey; /* hash key */ + +typedef struct { + hashKey key; /* we'll use this field as the key */ + /* ... other data ... */ + UT_hash_handle hh; /* makes this structure hashable */ +} hashStruct; /* hash unit */ + +/**************************************************************************** +| Parameters used in isat +****************************************************************************/ +typedef struct{ + const int *nx; + const int *nf; + const int *ng; + double *x; + double *f; + double *g; +} ffdIO; + +/**************************************************************************** +| pointer to write log information +****************************************************************************/ +char logMsg[1000]; + +#define COMMON_H_INCLUDED +#endif + + + + diff --git a/Buildings/Resources/src/ISAT/cosimulation.c b/Buildings/Resources/src/ISAT/cosimulation.c new file mode 100644 index 00000000000..1f9c321c9a6 --- /dev/null +++ b/Buildings/Resources/src/ISAT/cosimulation.c @@ -0,0 +1,569 @@ + /**************************************************************************** + | + | \file cosimulation.c + | + | \brief Functions for cosimulation + | + | \author Wangda Zuo + | University of Miami, University of Colorado Boulder + | W.Zuo@miami.edu, wangda.zuo@colorado.edu + | Xu Han + | Univeristy of Colorado Boulder, xuha3556@colorado.edu + | Xu Han + | University of Colorado Boulder + | xuha3556@colorado.edu + | + | \date 4/5/2020 + | \This file provides functions that are used for conducting the coupled simulation + | \with Modelica + | + ****************************************************************************/ + +#include "cosimulation.h" +#include "common.h" +static char comsg[1000] = { 0 }; + +extern int num_input; +extern int num_output; +extern double outp_weight[]; +extern OUTPUT_TYPE outp_name[]; +extern INPUT_TYPE inpu_name[]; + +/* Declare and initialize variables */ +extern int num_inlet, num_block, num_wall, dir_inlet; + +/* temperature, heat flux or velocity will be overwritten or not */ +extern int inlet_temp_re[]; +extern int inlet_vel_re[]; +extern int block_re[]; +extern int wall_re[]; + +/* temperature, heat flux or velocity will be overwritten by which isat input */ +extern int inlet_temp_wh[]; +extern int inlet_vel_wh[]; +extern int block_wh[]; +extern int wall_wh[]; + +/* + * Read the coupled simulation parameters defined by Modelica + * + * @param para Pointer to FFD parameters + * @param var Pointer to FFD simulation variables + * @param BINDEX pointer to boundary index + * + * @return 0 if no error occurred + */ + +int read_cosim_parameter(PARA_DATA *para) { + int i; + + cosim_log("-------------------------------------------------------------------", + COSIM_NORMAL); + + if(para->cosim->para->version=="DEBUG") { + cosim_log("read_cosim_parameter(): " + "Received the following coupled simulation parameters:", + COSIM_NORMAL); + } + + /**************************************************************************** + | Compare number of solid surface boundaries + | (Wall, Window Glass with and without shading, and Window Frame) + ****************************************************************************/ + if (para->cosim->para->version == "DEBUG") { + cosim_log("Modelica Surfaces are:", COSIM_NORMAL); + for (i = 0; icosim->para->nSur; i++) { + sprintf(comsg, "\t%s", para->cosim->para->name[i]); + cosim_log(comsg, COSIM_NORMAL); + } + } + + /**************************************************************************** + | Compare the number of fluid ports + ****************************************************************************/ + if (para->cosim->para->version == "DEBUG") { + sprintf(comsg, "\tnPorts=%d", para->cosim->para->nPorts); + cosim_log(comsg, COSIM_NORMAL); + } + + /**************************************************************************** + | Compare the number of sensors + ****************************************************************************/ + if (para->cosim->para->version == "DEBUG") { + sprintf(comsg, "\tnSen=%d", para->cosim->para->nSen); + cosim_log(comsg, COSIM_NORMAL); + } + + /**************************************************************************** + | Compare the number of species + ****************************************************************************/ + if (para->cosim->para->version == "DEBUG") { + sprintf(comsg, "\tnXi=%d", para->cosim->para->nXi); + cosim_log(comsg, COSIM_NORMAL); + } + + /**************************************************************************** + | Compare the number of trace substances + ****************************************************************************/ + if (para->cosim->para->version == "DEBUG") { + sprintf(comsg, "\tnC=%d", para->cosim->para->nC); + cosim_log(comsg, COSIM_NORMAL); + + sprintf(comsg, "\tnConExtWin=%d", para->cosim->para->nConExtWin); + cosim_log(comsg, COSIM_NORMAL); + + sprintf(comsg, "\tsha=%d", para->cosim->para->sha); + cosim_log(comsg, COSIM_NORMAL); + } + + /**************************************************************************** + | Print the information for surface boundaries + ****************************************************************************/ + for(i=0; icosim->para->nSur; i++) { + sprintf(comsg, "\tSurface %d: %s", i, para->cosim->para->name[i]); + cosim_log(comsg, COSIM_NORMAL); + sprintf(comsg, "\t\tArea:%f[m2],\t Tilt:%f[deg]", + para->cosim->para->are[i], para->cosim->para->til[i]); + cosim_log(comsg, COSIM_NORMAL); + switch (para->cosim->para->bouCon[i]) { + case 1: + cosim_log("\t\tThermal boundary: Fixed temperature", COSIM_NORMAL); + break; + case 2: + cosim_log("\t\tThermal boundary: Fixed heat flux", COSIM_NORMAL); + break; + default: + sprintf(comsg, + "Invalid value (%d) for thermal boundary condition. " + "1: Fixed T; 2: Fixed heat flux", + para->cosim->para->bouCon[i]); + cosim_log(comsg, COSIM_ERROR); + return 1; + } + } + + for(i=0; icosim->para->nPorts; i++) { + sprintf(comsg, "\tFluid Ports %d: %s", i, para->cosim->para->portName[i]); + cosim_log(comsg, COSIM_NORMAL); + } + + for(i=0; icosim->para->nSen; i++) { + sprintf(comsg, "\tSensor %d: %s", i, para->cosim->para->sensorName[i]); + cosim_log(comsg, COSIM_NORMAL); + } + + sprintf(comsg,"read_cosim_parameter(): check para->cosim->modelica->flag=%d", para->cosim->modelica->flag); + cosim_log(comsg, COSIM_NORMAL); + + return 0; +} /* End of read_cosim_parameter()*/ + + +int read_cosim_data(PARA_DATA *para) { + int i=0, j=0; + int size = para->cosim->para->nSur + para->cosim->para->nPorts * 2; + float *input = malloc(sizeof(float)*size); + + cosim_log("-------------------------------------------------------------------", + COSIM_NORMAL); + /**************************************************************************** + | Wait for data to be updated by the other program + ****************************************************************************/ + while (para->cosim->modelica->flag == 0) { + if (para->cosim->para->version == DEBUG) { + sprintf(comsg, + "read_cosim_data(): Data is not ready with para->cosim->modelica->flag = %d", + para->cosim->modelica->flag); + cosim_log(comsg, COSIM_NORMAL); + } + if (para->cosim->para->flag == 0) { + return 1; + } + Sleep(10); + if (para->cosim->para->version == DEBUG) + cosim_log("read_cosim_data(): Sleep for 0.01", COSIM_NORMAL); + } + + if (para->cosim->para->version == DEBUG) { + cosim_log("read_cosim_data(): Modelica data is ready.", COSIM_NORMAL); + sprintf(comsg, + "read_cosim_data(): Received the following data at t=%f[s]", + para->cosim->modelica->t); + cosim_log(comsg, COSIM_NORMAL); + } + + double tmp = 0; + int flag; + sprintf(comsg, + "read_cosim_data(): Start to read data from Modelica at t=%f[s]", + para->cosim->modelica->t); + cosim_log(comsg, COSIM_NORMAL); + /**************************************************************************** + | Convert the port data from Modelica to FFD for the Inlet + ****************************************************************************/ + for (i = 0; i < num_input; i++) { + flag = 0; + if (num_inlet > 0 && flag == 0) { + for (j = 0; j < num_inlet; j++) { + if (inlet_temp_wh[j] == i + 1) { + para->cosim->ffd->input[i] = para->cosim->modelica->TPor[j] - 273.15; + flag = 1; + break; + } + else if (inlet_vel_wh[j] == i + 1) { + para->cosim->ffd->input[i] = para->cosim->modelica->mFloRatPor[j]; + flag = 1; + break; + } + if (flag == 1) + break; + } + } + if (num_block > 0 && flag == 0) { + for (j = 0; j < num_block; j++) { + if (block_wh[j] == i + 1) { + para->cosim->ffd->input[i] = para->cosim->modelica->sourceHeat[j]; + int source_bou = 2; + /*source_bou is defined by the users */ + switch (source_bou) { + case 1: /* Temperature*/ + para->cosim->ffd->input[i] = para->cosim->modelica->sourceHeat[j] - 273.15; + flag = 1; + break; + case 2: /* Heat flow rate*/ + para->cosim->ffd->input[i] = para->cosim->modelica->sourceHeat[j]; + flag = 1; + break; + } + } + if (flag == 1) + break; + } + } + if (num_wall > 0 && flag == 0) { + for (j = 0; j < num_wall; j++) { + if (wall_wh[j] == i + 1) { + switch (para->cosim->para->bouCon[j]) { + case 1: /* Temperature*/ + para->cosim->ffd->input[i] = para->cosim->modelica->temHea[j] - 273.15; + flag = 1; + break; + case 2: /* Heat flow rate*/ + para->cosim->ffd->input[i] = para->cosim->modelica->temHea[j]; + flag = 1; + break; + default: + sprintf(comsg, + "Invalid value (%d) for thermal boundary condition. " + "Expected value are 1->Fixed T; 2->Fixed heat flux", + para->cosim->para->bouCon[i]); + cosim_log(comsg, COSIM_ERROR); + return 1; + } + } + if (flag == 1) + break; + } + } + if (flag == 1) { + sprintf(comsg, "\tpara->cosim->ffd->input[%d]: %lf", i, para->cosim->ffd->input[i]); + cosim_log(comsg, COSIM_NORMAL); + } + else { + sprintf(comsg, "read_cosim_data(): failed to assign value for para->cosim->ffd->input[%d]", i); + cosim_log(comsg, COSIM_ERROR); + } + } + + /* Change the flag to indicate that the data has been read*/ + para->cosim->modelica->flag = 0; + if (para->cosim->para->version == DEBUG) { + cosim_log("read_cosim_data(): Ended reading data from Modelica.", + COSIM_NORMAL); + } + return 0; +} + /* + * Write the FFD data for Modelica + * + * @param para Pointer to FFD parameters + * @param var Pointer to FFD simulation variables + * + * @return 0 if no error occurred + */ +int write_cosim_data(PARA_DATA *para){ + int i, j, id; + + cosim_log("-------------------------------------------------------------------", + COSIM_NORMAL); + /**************************************************************************** + | Wait if the previous data has not been read by Modelica + ****************************************************************************/ + while(para->cosim->ffd->flag==1) { + cosim_log("write_cosim_data(): Wait since previous data is not taken " + "by Modelica", COSIM_NORMAL); + Sleep(10); + } + + /**************************************************************************** + | Start to write new data + ****************************************************************************/ + cosim_log("write_cosim_data(): " + "Start to write the following coupled simulation data to Modelica:", + COSIM_NORMAL); + + /**************************************************************************** + | Note: we assumed fixed values by default for some parameters. The values + | can be assigned by isat output, which is defined by users. + | For example, para->cosim->ffd->TRoo = para->cosim->ffd->output[0]; + ****************************************************************************/ + + /**************************************************************************** + | Set the time and space averaged temperature of space + | Convert T from degC to K + ****************************************************************************/ + para->cosim->ffd->TRoo = 25.0; /*assumed a fixed value*/ + + /**************************************************************************** + | Set temperature of shading devices (currently not supported) + ****************************************************************************/ + /*Note: we assumed a fixed value here, which can be assigned by isat outputs*/ + if(para->cosim->para->sha==1) { + for(i=0; icosim->para->nConExtWin; i++) { + para->cosim->ffd->TSha[i] = 20 + 273.15; /*assumed a fixed value*/ + } + } + + /**************************************************************************** + | Set data for fluid ports + ****************************************************************************/ + for(i=0; icosim->para->nPorts; i++) { + /* Get the corresponding ID in Modelica*/ + /*------------------------------------------------------------------------- + | Assign the temperature + -------------------------------------------------------------------------*/ + para->cosim->ffd->TPor[i] = 25.0; /*assumed a fixed value*/ + + for(j=0; jcosim->para->nXi; j++) { + para->cosim->ffd->XiPor[i][j] = 0.01; /*assumed a fixed value*/ + } + /*------------------------------------------------------------------------- + | Assign the C + -------------------------------------------------------------------------*/ + for(j=0; jcosim->para->nC; j++) { + para->cosim->ffd->CPor[i][j] = 0.01; /*assumed a fixed value*/ + } + } + + /**************************************************************************** + | Set data for solid surfaces + ****************************************************************************/ + for (i = 0; i < para->cosim->para->nSur; i++) { + /* Set the B.C. Temperature*/ + if(para->cosim->para->bouCon[i]==2) { + para->cosim->ffd->temHea[i] = 25 + 273.15; /*assumed a fixed value*/ + } + /* Set the heat flux*/ + else { + para->cosim->ffd->temHea[i] = 0.0; /*assumed a fixed value*/ + } + } + + /**************************************************************************** + | Set data for sensors + ****************************************************************************/ + for(i=0; icosim->para->nSen; i++) { + para->cosim->ffd->senVal[i] = para->cosim->ffd->output[i]; + sprintf(comsg, "\tpara->cosim->ffd->output[%d]: %f", + i, para->cosim->ffd->senVal[i]); + cosim_log(comsg, COSIM_NORMAL); + } + + /**************************************************************************** + | Inform Modelica that the FFD data is updated + ****************************************************************************/ + para->cosim->ffd->flag = 1; + + return 0; +} /* End of write_cosim_data()*/ + + +/* +* Integrate the coupled simulation exchange data over the surfaces +* +* Fluid port: +* - T/Xi/C: sum(u*T*dA) +* - m_dot: sum(u*dA) +* +* Solid Surface Boundary: +* - T: sum(T*dA) +* - Q_dot: sum(q_dot*dA) +* +* @param para Pointer to FFD parameters +* @param var Pointer to FFD simulation variables +* @param BINDEX Pointer to the boundary index +* +* @return 0 if no error occurred +*/ + +int surface_integrate(PARA_DATA *para, REAL **var, int **BINDEX) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int i, j, k, it, bcid; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL vel_tmp, A_tmp; + + /**************************************************************************** + | Set the variable to 0 + ****************************************************************************/ + if (para->outp->version == DEBUG) + ffd_log("surface_integrate(): Start to set the variable to 0", + FFD_NORMAL); + + for (i = 0; ibc->nb_wall; i++) + para->bc->temHeaAve[i] = 0; + + for (i = 0; ibc->nb_port; i++) { + para->bc->TPortAve[i] = 0; + para->bc->velPortAve[i] = 0; + for (j = 0; jbc->nb_Xi; j++) + para->bc->XiPortAve[i][j] = 0; + for (j = 0; jbc->nb_C; j++) + para->bc->CPortAve[i][j] = 0; + } + + /**************************************************************************** + | Go through all the boundary cells + ****************************************************************************/ + if (para->outp->version == DEBUG) + ffd_log("surface_integrate(): Start to sum all the cells", FFD_NORMAL); + + for (it = 0; itgeom->index; it++) { + i = BINDEX[0][it]; + j = BINDEX[1][it]; + k = BINDEX[2][it]; + bcid = BINDEX[4][it]; + + if (i == 0 || i == imax + 1) { + vel_tmp = var[VX][IX(i, j, k)]; + A_tmp = area_yz(para, var, i, j, k); + } + else if (j == 0 || j == jmax + 1) { + vel_tmp = var[VY][IX(i, j, k)]; + A_tmp = area_zx(para, var, i, j, k); + } + else if (k == 0 || k == kmax + 1) { + vel_tmp = var[VZ][IX(i, j, k)]; + A_tmp = area_xy(para, var, i, j, k); + } + + /*------------------------------------------------------------------------- + | Set the thermal conditions data for Modelica. + | In FFD simulation, the BINDEX[3][it] indicates: 1->T, 0->Heat Flux. + | Those BINDEX[3][it] will be reset according to the Modelica data + | para->comsim->para->bouCon (1->Heat Flux, 2->T). + | Here is to give the Modelica the missing data (For instance, if Modelica + | send FFD Temperature, FFD should then send Modelica Heat Flux). + -------------------------------------------------------------------------*/ + /*------------------------------------------------------------------------- + | Solid Wall + --------------------------------------------------------------------------*/ + if (var[FLAGP][IX(i, j, k)] == SOLID) { + switch (BINDEX[3][it]) { + /* FFD uses heat flux as BC to compute temperature*/ + /* Then send Modelica the temperature*/ + case 0: + para->bc->temHeaAve[bcid] += var[TEMP][IX(i, j, k)] * A_tmp; + break; + /* FFD uses temperature as BC to compute heat flux*/ + /* Then send Modelica the heat flux*/ + case 1: + para->bc->temHeaAve[bcid] += var[QFLUX][IX(i, j, k)] * A_tmp; + break; + default: + sprintf(msg, "average_bc_area(): Thermal boundary (%d)" + "for cell (%d,%d,%d) was not defined", + BINDEX[3][it], i, j, k); + ffd_log(msg, FFD_ERROR); + return 1; + } + } + /*------------------------------------------------------------------------- + | Outlet + -------------------------------------------------------------------------*/ + else if (var[FLAGP][IX(i, j, k)] == OUTLET) { + if (para->outp->version == DEBUG) { + sprintf(msg, "surface_integrate(): Set the outlet[%d, %d, %d]", + i, j, k); + ffd_log(msg, FFD_NORMAL); + } + + para->bc->TPortAve[bcid] += var[TEMP][IX(i, j, k)] * A_tmp; + para->bc->velPortAve[bcid] += vel_tmp * A_tmp; + for (j = 0; jbc->nb_Xi; j++) + para->bc->XiPortAve[bcid][j] += var[Xi1 + j][IX(i, j, k)] * A_tmp; + + for (j = 0; jbc->nb_C; j++) + para->bc->CPortAve[bcid][j] += var[C1 + j][IX(i, j, k)] * A_tmp; + + } + /*------------------------------------------------------------------------- + | Inlet + -------------------------------------------------------------------------*/ + else if (var[FLAGP][IX(i, j, k)] == INLET) { + if (para->outp->version == DEBUG) { + sprintf(msg, "surface_integrate(): Set 0 for inlet [%d,%d,%d].", + i, j, k); + ffd_log(msg, FFD_NORMAL); + } + + para->bc->TPortAve[bcid] = 0; + para->bc->velPortAve[bcid] = 0; + for (j = 0; jbc->nb_Xi; j++) + para->bc->XiPortAve[bcid][j] = 0; + + for (j = 0; jbc->nb_C; j++) + para->bc->CPortAve[bcid][j] = 0; + } + + } /* End of for(it=0; itgeom->index; it++)*/ + + return 0; +} /* End of surface_integrate()*/ + + +/**************************************************************************** +| Write the log file +| +| \param message Pointer the message +| \param msg_type Type of message +| +| \return 0 if no error occurred +****************************************************************************/ +void cosim_log(char *message, COSIM_MSG_TYPE msg_type) { + if (msg_type == COSIM_NEW) { + if ((file_log = fopen("log.isat", "w+")) == NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + } + + else if ((file_log = fopen("log.isat", "a+")) == NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + + switch (msg_type) { + case COSIM_WARNING: + fprintf(file_log, "WARNING in %s\n", message); + break; + case COSIM_ERROR: + fprintf(file_log, "ERROR in %s\n", message); + break; + /* Normal log */ + default: + fprintf(file_log, "%s\n", message); + } + fclose(file_log); + +} /* End of cosim_log() */ \ No newline at end of file diff --git a/Buildings/Resources/src/ISAT/cosimulation.h b/Buildings/Resources/src/ISAT/cosimulation.h new file mode 100644 index 00000000000..4626f855163 --- /dev/null +++ b/Buildings/Resources/src/ISAT/cosimulation.h @@ -0,0 +1,83 @@ +/**************************************************************************** +| +| \file cosimulation.h +| +| \brief Functions for cosimulation +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Xu Han +| University of Colorado Boulder +| xuha3556@colorado.edu +| +| \date 4/5/2020 +| \This file provides functions that are used for conducting the coupled simulation +| \with Modelica +| +****************************************************************************/ + +#ifndef _COSIMULATION_H +#define _COSIMULATION_H +#endif + +#ifdef _MSC_VER +#include +#elif defined __GNUC__ +#ifdef _WIN64 +#include +#elif _WIN32 +#include +#elif __APPLE__ +#include +#elif __linux__ +#include +#else +#include +#endif +#else +#include +#endif + +#include + +#ifndef _DATA_STRUCTURE_H +#define _DATA_STRUCTURE_H +#include "../FastFluidDynamics/data_structure.h" +#endif + +#ifndef _UTILITY_H +#define _UTILITY_H +#include "../FastFluidDynamics/utility.h" +#endif + +#ifndef _GEOMETRY_H +#define _GEOMETRY_H +#include "../FastFluidDynamics/geometry.h" +#endif + +#ifndef _MSC_VER /*Linux*/ +#define Sleep(x) sleep(x/1000) +#endif + + +FILE *file_log; + +int read_cosim_parameter(PARA_DATA *para); +/* + * Read the data from Modelica + * + * @param para Pointer to FFD parameters + * @param var Pointer to FFD simulation variables + * @param BINDEX pointer to boundary index + * + * @return 0 if no error occurred + */ + +int read_cosim_data(PARA_DATA *para); + +void cosim_log(char *message, COSIM_MSG_TYPE msg_type); + +int write_cosim_data(PARA_DATA *para); \ No newline at end of file diff --git a/Buildings/Resources/src/ISAT/ffd_isat.c b/Buildings/Resources/src/ISAT/ffd_isat.c new file mode 100644 index 00000000000..1d300eee2b8 --- /dev/null +++ b/Buildings/Resources/src/ISAT/ffd_isat.c @@ -0,0 +1,1100 @@ +/****************************************************************************** +| +| \file ffd_isat.c +| +| \brief define function to perform ffd_isat training and testing +| +| \author Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 4/5/2020 +| +| \ All RIGHTS RESERVED. +******************************************************************************/ +#include "ffd_isat.h" + +/****************************************************************************** +| recursive subroutine isatab( idtab, mode, nx, x, nf, nh, nhd, usrfgh, iusr, rusr, info, rinfo, fa, ga, ha, stats ) +| ------- INPUT +| +| idtab - unique identifier of the table (idtab >= 0 ) +| mode - integer determining the action to be taken +| = 0 for a "regular query call" (i.e., given x, return fa) +| > 0 for "special calls" (described below) +| nx - number of components of x ( nx >= 1 ) +| x - components of x +| nf - number of components of f ( nf >= 1 ) +| nh - number of components of h ( nh >= 0 ) +| nhd - dimension of ha ( nhd >= max(1,nh) ) +| usrfgh - name of the user-supplied subroutine that returns +| f(x), g(x) = df(x)/dx, and h(x) (see below) +| iusr - user-defined integer array passed to usrfgh +| Note: instead passing integer array +| ffd exchange struct pointer here +| rusr - user-defined real array passed to usrfgh +| info - integer array controlling ISATAB operations (see below) +| rinfo - real array controlling ISATAB operations (see below) +| +| ------- OUTPUT +| +| fa - piecewise-linear approximation to f(x) +| ga - piecewise-constant approximation to g(x) (for info(2)=1) +| (ga must be dimensioned at least nf*nx) +| ha - piecewise-constant approximation to h(x) (for info(3)=1) +| stats - statistics of ISATAB performance (see below) +| +| Note: Depending on mode and other settings, some of the input may not be +| referenced, and some of the output may not be set. (Write for ISAT Fortan lib) +******************************************************************************/ + +/****************************************************************************** +| Declaration of ISATAB in isat (external static library) +******************************************************************************/ +void ISATAB(int *idtab, int *mode, const int *nx, double x[], const int *nf, const int *nh, const int *nhd, void *usrfgh, \ + int iusr[], double rusr[], int info[], double rinfo[], double fa[], double ga[nx_SIZE][nf_SIZE], double ha[], double stats[] ); + +/****************************************************************************** +| Initialize parameter for calling ISAT or slover +******************************************************************************/ + int num_input = 2; + int num_output = 1; + double outp_weight[5] = { 0 }; + OUTPUT_TYPE outp_name[5] = { temp_occ }; + INPUT_TYPE inpu_name[10] = { sur_temp }; + /* Declare and initialize variables */ + int num_inlet = 0, num_block = 0, num_wall = 0, dir_inlet = 0; + /* temperature, heat flux or velocity will be overwritten or not */ + int inlet_temp_re[100] = { 0 }; + int inlet_vel_re[100] = { 0 }; + int block_re[100] = { 0 }; + int wall_re[100] = { 0 }; + /* temperature, heat flux or velocity will be overwritten by which isat input */ + int inlet_temp_wh[100] = { 0 }; + int inlet_vel_wh[100] = { 0 }; + int block_wh[100] = { 0 }; + int wall_wh[100] = { 0 }; + + char filepath[400] = { 0 }; + int readexisting = 1; + int writeexisting = 1; + + #define ISAT_SMALL 1e-6 + /* define the ita */ + float ita = 5 / 10000; /* allow 5 add or grow per 10000 queries */ + float VPower = 1.0; + int idtab = 1; /* Just set 1 if only one table */ + int mode = 0; /* mode = 0 is defualt */ + int nx; /* Calculate in main */ + int nf; /* Calculate in main */ + int nh = 0; /* If the additional function h(x) is not required, set nh=0, nhd=1. */ + int nhd = 1; /* Function h is not used so far */ + double x[nx_SIZE] = {0}; /* Initialize x */ + double fa[nf_SIZE] = {0}; /* Initialize fa */ + double ga[nx_SIZE][nf_SIZE] = {0}; /* Initialize ga. Note: In Fortran, g(nf,nx). Initialize in C by a reverse matrix */ + double ha[nh_SIZE] = {0}; /* Initialize fa */ + double rusr[nf_SIZE] = {nf_SIZE}; /* Note rusr[1]=its length, so >=1. It may used to contain f in some special usage */ + int info[70] = {0}; /* Initialize by dafult value 0 */ + double rinfo[100] = {0}; /* Initialize by dafult value 0 */ + double stats[100] = {0}; /* Initialize memory for store performance info */ + double unusedPointer = 0; /* Initialize a unused pointer */ + int need[3] = {1,0,0}; /* Initialize need for call solver directly */ + double time_elipse = 0; /*the time before launching the isat */ + ffdIO ffdStruct; /* A struct passed to ffd contains constant */ + /* Note: only some constant could pass to ffd through here. Input and out put must in x,fa and ga. */ + +/****************************************************************************** +| Initialize variables for performance statistics +******************************************************************************/ + clock_t tStart = 0; + clock_t tEnd = 0; + time_t tExeStart; /*Start of system time*/ + time_t tExeEnd; /*End of system time*/ + double cpuISAT = 0; /*CPU secounds on ISAT*/ + double cpuDE = 0; /*CPU secounds on direct evaluation. Direct evaluation called by ISAT is not included.*/ + double cpuCum = 0; + int nQuery = 0; /*Number of queries*/ + int QueryLimit = 10000; /*Number of queries*/ + double errSum = 0; /*Sum of f error*/ + double errMax = 0; /*Max of f error*/ + int caltyp =0; /*0 training*/ + /*1 test*/ + /*Define hash table*/ + hashStruct l, *p, *r, *tmp, *records = NULL; + +/****************************************************************************** +| MPC control global variable +******************************************************************************/ + /*Logistic*/ + int useISAT = 1; /*If use ISAT.*/ + int useRandomTest = 0; /*If use Random Test.Need: xBoundary, nRanCall.*/ + int useTablePreparation = 1; /*If use Table Preparation. Need: xBoundary, xStep.*/ + int useBinarySelectedPoint = 0; /*If use binary selected training point, like binary tree.*/ + int useNumericalDifferentiation = 0; /*If use numerical differentiation for ga. Note: Not be implemented yet.*/ + int useAccuracyTest = 1; /*If use accuracy test. Note: Perform a direct evaluation at each query. CPU time added in cpuDE*/ + int useErrorControlCorrection = 1; /*if use error control correction. The total error defind as vector length. Use this to crroect order of magnitudes of each component of output vector. + please implement this at ffd_ISAT.c */ + int useBoundaryCenterRange=0; /*if use Boundary center range. The maximum inputs value difference equals xBoundaryCenterRange/2. Here use it to set limititon of different wall temperature.*/ + int useNormalDistribution=1; /* = 0, use uniform distribution at random test = 1, use normal distribution at random test */ + int useUnboundedTest = 1; /* = 0, use xBoundary for random test = 1, use xBoundary2 for random test */ + int useRoundInput = 1; /* If use rounded input, chose rounded digits after decimal */ + + double xBoundary[nx_SIZE][2] = { { 12.0,28.0 },{ 3.0,28.0 } }; + /*Contains lower and upper boundary of x.*/ + double xBoundaryCenterRange = 10; + /*Contains centered range of inpust in a rectangular domian. To set maximum difference of inputs at different dimensions.*/ + + double xStep[nx_SIZE] = { 0.1,0.01 }; /*Step size to generate table.*/ + int nRanCall = 10; /*Number of Random call for testing*/ + + double xBoundary2[nx_SIZE][2] = { { 12.0,30.0 },{ 0,30.0 } }; + /*Contains lower and upper boundary of x for "unbounderd case".*/ + + double mu=1.0, sigma=10/3; /* for bounded */ + double sigma2=10/3; /* for unbounded */ + +/****************************************************/ + int digAftdec = 1; + + #define RoundDigitsControl 1 + #define MANUAL_TEST + #ifdef MANUAL_TEST /*Called by ISAT*/ + double *input1, *input2; + FILE *file_params_tmp; + FILE *file_params_tmp1; + char string[400]; + char char_tmp[400]; + int i_ite = 0; + int j_ite = 0; + #endif +/****************************************************/ + +/* global variables */ + REAL **var; + int **BINDEX; + REAL *locmin, *locmax; + static PARA_DATA para; + static GEOM_DATA geom; + static PROB_DATA prob; + static TIME_DATA mytime; + static INPU_DATA inpu; + static OUTP_DATA outp1; + static BC_DATA bc; + static SOLV_DATA solv; + static SENSOR_DATA sens; + static INIT_DATA init; + + clock_t start, end; + +/**************************************************************************** +| Assign the parameter for coupled simulation +| +| \para cosim Pointer to the coupled simulation parameters +| +| \return No return needed +****************************************************************************/ + +int isat_cosimulation(CosimulationData *cosim) { + para.cosim = (CosimulationData *)malloc(sizeof(CosimulationData)); + para.cosim = cosim; + + if (para.cosim == NULL) { + cosim_log("isat_cosimulation: could not allocate memory", + COSIM_NORMAL); + } + + if (isat_main() != 0) { + cosim->para->ffdError = 1; + return 1; + } + else + return 0; +} /* End of ffd_cosimulation()*/ + +/**************************************************************************** +| Main entrance of ffd_isat +| +| return No return needed +****************************************************************************/ +int isat_main () { + + /**************************************************************************** + | Setting for ISAT table + | + | Note: Setting in nameList file isat_1.nml is preferable if file exists + ****************************************************************************/ + + /*Note: C is zero based and Fortran is one based. Use manual num-1*/ + + /*Basic setting*/ + info[1] = 0; /*info(2) if_g = 0, build the table from scratch + = 1, read existing table*/ + info[11] = 2; /*info(12) isatop = 1, write stats array in .op file for isat performance output on node 0 + = 2, for isat performance output on all nodes*/ + + info[21] = 1; /*info(22) istats = 0, stats and fa is not returned + = 1, return stats as well as fa*/ + /* may be overwritten */ + rinfo[0] = 0.4; /*rinfo(1) errtol, Note: total error*/ + /*Need muanally add a factor in f(x) if we want different accuray in myltiple out puts*/ + /*Need double check*/ + + /*Checkpointing*/ + info[9] = 0; /*info(10) ichin = 0, the ISAT table is created from scratch + = 1,Read previous table, required tab file existed and identical case condition*/ + + info[10] = 2; /*info(11) ichout = 1, To checkpoint the table occasionally on node 0 + = 2, to checkpoint the table occasionally on all nodes*/ + + info[19] = 1; /*info(20) stats0 = 0, for ichin=1, continue from stats read from isat_#_P.tab + = 1 for ichin=1, re-initialize stats*/ + + /**************************************************************************** + | Initialize log file and executive time + ****************************************************************************/ + tExeStart = time(NULL); + sprintf(logMsg, "Executable start: %s", ctime(&tExeStart)); + cosim_log(logMsg, COSIM_NEW); + + para.bc = (BC_DATA *)malloc(sizeof(BC_DATA)); + para.geom = (GEOM_DATA *)malloc(sizeof(GEOM_DATA)); + para.inpu = (INPU_DATA *)malloc(sizeof(INPU_DATA)); + para.outp = (OUTP_DATA *)malloc(sizeof(OUTP_DATA)); + para.prob = (PROB_DATA *)malloc(sizeof(PROB_DATA)); + para.mytime = (TIME_DATA *)malloc(sizeof(TIME_DATA)); + para.solv = (SOLV_DATA *)malloc(sizeof(SOLV_DATA)); + para.sens = (SENSOR_DATA *)malloc(sizeof(SENSOR_DATA)); + para.init = (INIT_DATA *)malloc(sizeof(INIT_DATA)); + + cosim_log("isat_main(): Start ISAT-FFD simulation", COSIM_NORMAL); + + /*read the existing ffd result file*/ + read_isat_parameters(); + + if(readexisting == 1) read_existing(¶); + /**************************************************************************** + | Calculate nx and nf + ****************************************************************************/ + nx = sizeof(x)/sizeof(double); + nf = sizeof(fa)/sizeof(double); + /**************************************************************************** + | Update non-rectangular input domian + ****************************************************************************/ + if (useBoundaryCenterRange){ + } + /**************************************************************************** + | Use Binary Selected Point Training + ****************************************************************************/ + if (useBinarySelectedPoint) { + cosim_log("-------------------------------------------------------------------", COSIM_NORMAL); + cosim_log("isat_main(): Start binary train", COSIM_NORMAL); + binaryTrain(); + } + /**************************************************************************** + | While loop test for cosimulation + ****************************************************************************/ + cosim_loop(para); + /**************************************************************************** + | Post precess of log + ****************************************************************************/ + /* Inform Modelica the stopping command has been received*/ + para.cosim->para->flag = 2; + /*ffd_log("ffd(): Sent stopping signal to Modelica", FFD_NORMAL);*/ + cosim_log("main(): Sent stopping signal to Modelica", COSIM_NORMAL); + + return 0; + +} /* End of Main */ + + +/**************************************************************************** +| Prepare the training domain using recursion method +| +| Note: Table will prepared with xBoundary and xStep +| Calling with input nx +| \param Demantion number of current recursion +| +| \return No return needed +| +| Fixme: Update +****************************************************************************/ +void nDemArrEva(int dimension, double xStep[]) { + + int i = dimension - 1; + double currentX=0.0; + + if (i == -1){ + /*Check hash table*/ + findHash(); + if (!p){ + addHash(); + evaluate(); + } + } + else { + + for (currentX = xBoundary[i][0]; currentX <= xBoundary[i][1]+ISAT_SMALL; currentX += xStep[i]) { + x[i] = currentX; + nDemArrEva(i,xStep); + } + + } /*End of if*/ +} /* End of iterate */ + + +/**************************************************************************** +| Perform a evaluation with current input in global variable +| +| Note: Use solver or ISAT depends on useISAT +| +****************************************************************************/ +void evaluate(){ + int i; + /*check if use rounded input*/ + if (useRoundInput){ + for (i=0; i errMax) + errMax = err; + +}/*end of accurateTest*/ + + +/**************************************************************************** +| Perform a evaluation with random input within boundary of x +| +| Note: Use solver or ISAT depends on useISAT +| +| param number of random calls +| +| return No return needed +****************************************************************************/ +void randomCall (int nCall, int useNormalDistribution, int useUnboundedTest){ + int i, j, r; + for (i = 0; i < nCall; i++) { + /*Prepare input*/ + for (j = 0; j < nx; j++) { + x[j] = getRandom(j,useNormalDistribution,useUnboundedTest); + } + evaluate(); + } + +} + +/**************************************************************************** +| Write the information to log file +| return No return needed +****************************************************************************/ +void writeRecord (){ + if (fabs(cpuISAT - time_elipse) > 1.000000/*threshold for the time difference*/) { + sprintf(logMsg, "nQuery, Input[0], Input[1], outPut[0], stats[1-5], isat_cum, cpu_cum:\t%d\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f", nQuery,x[0],x[1],fa[0],stats[0],stats[1],stats[2],stats[3],stats[4],stats[8],stats[81],cpuISAT ); + cosim_log(logMsg, COSIM_NORMAL); + } +} + + +/**************************************************************************** +| Generate a series of random number for testing isat +| return The series of random number distribution +****************************************************************************/ +double getRandom (int dimension, int useNormalDistribution, int useUnboundedTest){ + double r; + if (!useNormalDistribution){ + r = rand() %1000; + if (useUnboundedTest) + return xBoundary2[dimension][0] + (xBoundary2[dimension][1]-xBoundary2[dimension][0]) * r/1000; + else + return xBoundary[dimension][0] + (xBoundary[dimension][1]-xBoundary[dimension][0]) * r/1000; + } + else { + if (useUnboundedTest){ + return randNormal (mu,sigma2); + } + else{ + r = randNormal (mu,sigma); + while (r < xBoundary[dimension][0] || r > xBoundary[dimension][1]){ + r = randNormal (mu,sigma); + } + return r; + + }/* end of if (useUnboundedTest) */ + }/* end of if (!useNormalDistribution) */ + +} + +/**************************************************************************** +| Generate a series of random number in Normal distribution for testing isat +| codes source: https://phoxis.org/2013/05/04/generating-random-numbers-from-normal-distribution-in-c/ +| Polar method: https://en.wikipedia.org/wiki/Marsaglia_polar_method +| Box-method: https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform +| normal distribution: https://en.wikipedia.org/wiki/Normal_distribution#Generating_values_from_normal_distribution +| return The series of random number in Normal distribution +****************************************************************************/ +double randNormal (double mu, double sigma) { + double U1, U2, W, mult; + static double X1, X2; + static int call = 0; + + if (call == 1) + { + call = !call; + return (mu + sigma * (double) X2); + } + + do + { + U1 = -1 + ((double) rand () / RAND_MAX) * 2; + U2 = -1 + ((double) rand () / RAND_MAX) * 2; + W = pow (U1, 2) + pow (U2, 2); + } + while (W >= 1 || W == 0); + + mult = sqrt ((-2 * log (W)) / W); + X1 = U1 * mult; + X2 = U2 * mult; + + call = !call; + + return (mu + sigma * (double) X1); +} + + +/**************************************************************************** +| Train the isat using binary-section method +| return No return needed +****************************************************************************/ +void binaryTrain () { + double sumOfGroAdd= 0; + int i = 0,j = 0; + int divide =1; + double xStep[nx_SIZE]; + + /*initialize the digAftdec*/ + if (RoundDigitsControl) digAftdec = 0; + /*Round loop of evaluation*/ + do { + /*dynamically change the digits*/ + if (RoundDigitsControl) digAftdec++; + sumOfGroAdd = stats[3]+stats[4]; + /*update xStep*/ + for (i=0; ikey.x[i] = x[i]; + + HASH_ADD(hh, records, key, sizeof(hashKey), r); + +} + +/**************************************************************************** +| New functions to update the digits (accuracy of round-off) dynamically +| +| return No return needed +****************************************************************************/ +void update_digit() { + if (!useBinarySelectedPoint && !caltyp) { + digAftdec = 1; + } + /* else if evenly distribution and evaluation */ + else if (!useBinarySelectedPoint && caltyp) { + digAftdec = 3; + } + /*else if binary and evaluation */ + else if (useBinarySelectedPoint && caltyp) { + digAftdec = 3; + } + else { + digAftdec = digAftdec; + } +} + +/**************************************************************************** +| Read isat parameters +| +| return No return needed +****************************************************************************/ +void read_isat_parameters() { + char filenametmp[400]; + char string[400], tmp[400], tmp1[400]; + int i; + + cosim_log("-------------------------------------------------------------------", + COSIM_NORMAL); + /**************************************************************************** + | overwrite the parameters by user settings + ****************************************************************************/ + char *lastSlash = strrchr(para.cosim->para->fileName, '/'); + int nPath = strlen(para.cosim->para->fileName) - (strlen(lastSlash) - 1); + + para.cosim->para->filePath = (char*)calloc(nPath + 1, sizeof(char)); + para.inpu->parameter_file_path = (char*)calloc(nPath + 1, sizeof(char)); + if (para.cosim->para->filePath == NULL) { + cosim_log("read_isat_parameters(): Could not allocate memory for the path to the FFD files", COSIM_ERROR); + return 1; + } + else { + strncpy(filepath, para.cosim->para->fileName, nPath); + } + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "set.isat"); + + + /**************************************************************************** + | overwrite the parameters by user settings + ****************************************************************************/ + if ((file_params = fopen(filenametmp, "r")) == NULL) { + return 1; + } + else { + sprintf(logMsg, "read_isat_parameters(): Read isat parameters from file %s", filenametmp); + cosim_log(logMsg, COSIM_NORMAL); + } + /* Read the settings for outputs */ + int next = 0; + while (next == 0) { + if (fgets(string, 400, file_params) == NULL) + next = 1; + if (EOF == sscanf(string, "%s", tmp)) { + continue; + } + + /* Read isat.useISAT */ + if (!strcmp(tmp, "isat.useISAT")) { + sscanf(string, "%s%d", tmp, &useISAT); + sprintf(logMsg, "\tRead general settings of isat:"); + cosim_log(logMsg, COSIM_NORMAL); + sprintf(logMsg, "\t\t%s=%d", tmp, useISAT); + cosim_log(logMsg, COSIM_NORMAL); + } + + /* Read isat.useBinarySelectedPoint */ + else if (!strcmp(tmp, "isat.useBinarySelectedPoint")) { + sscanf(string, "%s%d", tmp, &useBinarySelectedPoint); + sprintf(logMsg, "\t\t%s=%d", tmp, useBinarySelectedPoint); + cosim_log(logMsg, COSIM_NORMAL); + } + + /* Read isat.digAftdec */ + else if (!strcmp(tmp, "isat.digAftdec")) { + sscanf(string, "%s%d", tmp, &digAftdec); + sprintf(logMsg, "\t\t%s=%d", tmp, digAftdec); + cosim_log(logMsg, COSIM_NORMAL); + } + + /* Read isat.read_existing */ + else if (!strcmp(tmp, "isat.read_existing")) { + sscanf(string, "%s%d", tmp, &readexisting); + sprintf(logMsg, "\t\t%s=%d", tmp, readexisting); + cosim_log(logMsg, COSIM_NORMAL); + } + + /* Read isat.write_existing */ + else if (!strcmp(tmp, "isat.write_existing")) { + sscanf(string, "%s%d", tmp, &writeexisting); + sprintf(logMsg, "\t\t%s=%d", tmp, writeexisting); + cosim_log(logMsg, COSIM_NORMAL); + } + + /* Read isat.err_global */ + else if (!strcmp(tmp, "isat.err_global")) { + sscanf(string, "%s%lf", tmp, &rinfo[0]); + sprintf(logMsg, "\t\t%s=%lf", tmp, rinfo[0]); + cosim_log(logMsg, COSIM_NORMAL); + } + + /* Read isat.num_input */ + else if (!strcmp(tmp, "isat.num_input")) { + sscanf(string, "%s%d", tmp, &num_input); + if (num_input < 11) { + sprintf(logMsg, "\t\t%s=%d", tmp, num_input); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): the current version only supports no more than ten inputs"); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } + } + + /* Read isat.num_output */ + else if (!strcmp(tmp, "isat.num_output")) { + sscanf(string, "%s%d", tmp, &num_output); + if (num_output < 6) { + sprintf(logMsg, "\t\t%s=%d", tmp, num_output); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): the current version only supports no more than five outputs"); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } + } + + /* Read inpu.inpu_name */ + else if (!strcmp(tmp, "/*inpu.inpu_name:")) { + sprintf(logMsg, "\tRead input settings of isat and ffd:"); + cosim_log(logMsg, COSIM_NORMAL); + for (i = 0; i < num_input; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inpu_name")) { + sscanf(string, "%s%s", tmp, tmp1); + if (!strcmp(tmp1, "inlet_temp")) + inpu_name[i] = inlet_temp; + else if (!strcmp(tmp1, "inlet_mass")) + inpu_name[i] = inlet_mass; + else if (!strcmp(tmp1, "inlet_vel")) + inpu_name[i] = inlet_vel; + else if (!strcmp(tmp1, "block_temp")) + inpu_name[i] = block_temp; + else if (!strcmp(tmp1, "block_hea")) + inpu_name[i] = block_hea; + else if (!strcmp(tmp1, "rack_hea")) + inpu_name[i] = rack_hea; + else if (!strcmp(tmp1, "sur_temp")) + inpu_name[i] = sur_temp; + else if (!strcmp(tmp1, "sur_hea")) + inpu_name[i] = sur_hea; + else { + sprintf(logMsg, "read_isat_parameters(): %s is not valid input for %s", tmp1, tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } + sprintf(logMsg, "\t\t%s[%d]=%s", tmp, i, tmp1); + cosim_log(logMsg, COSIM_NORMAL); + } /*end of if (!strcmp(tmp, "inpu.inpu_name"))*/ + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.inpu_name", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } + } /*End of for (i = 0; i < num_input; i++)*/ + } /*End of else if (!strcmp(tmp, "/*inpu.inpu_name:"))*/ + + /* Read inpu.num_inlet */ + else if (!strcmp(tmp, "inpu.num_inlet")) { + sscanf(string, "%s%d", tmp, &num_inlet); + sprintf(logMsg, "\t\t%s=%d", tmp, num_inlet); + cosim_log(logMsg, COSIM_NORMAL); + } + /* Read inpu.num_block */ + else if (!strcmp(tmp, "inpu.num_block")) { + sscanf(string, "%s%d", tmp, &num_block); + sprintf(logMsg, "\t\t%s=%d", tmp, num_block); + cosim_log(logMsg, COSIM_NORMAL); + } + /* Read inpu.num_wall */ + else if (!strcmp(tmp, "inpu.num_wall")) { + sscanf(string, "%s%d", tmp, &num_wall); + sprintf(logMsg, "\t\t%s=%d", tmp, num_wall); + cosim_log(logMsg, COSIM_NORMAL); + } + /* Read inpu.dir_inlet */ + else if (!strcmp(tmp, "inpu.dir_inlet")) { + if (num_inlet > 0) { + sscanf(string, "%s%d", tmp, &dir_inlet); + sprintf(logMsg, "\t\t%s=%d", tmp, dir_inlet); + cosim_log(logMsg, COSIM_NORMAL); + } + } + + /* Read inpu.inlet_temp_re if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_temp_re:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_temp_re")) { + sscanf(string, "%s%d", tmp, &inlet_temp_re[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, inlet_temp_re[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.inlet_temp_re", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_temp_re")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_temp_re:")) */ + + /* Read inpu.inlet_vel_re if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_vel_re:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_vel_re")) { + sscanf(string, "%s%d", tmp, &inlet_vel_re[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, inlet_vel_re[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.inlet_vel_re", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_vel_re")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_vel_re:")) */ + + /* Read inpu.inlet_temp_wh if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_temp_wh:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_temp_wh")) { + sscanf(string, "%s%d", tmp, &inlet_temp_wh[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, inlet_temp_wh[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.inlet_temp_wh", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_temp_wh")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_temp_wh:")) */ + + /* Read inpu.inlet_u_wh if inpu.num_inlet > 0 */ + else if (!strcmp(tmp, "/*inpu.inlet_vel_wh:")) { + if (num_inlet > 0) { + for (i = 0; i < num_inlet; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.inlet_vel_wh")) { + sscanf(string, "%s%d", tmp, &inlet_vel_wh[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, inlet_vel_wh[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.inlet_vel_wh", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.inlet_vel_wh")) */ + } /* End of for (i = 0; i < num_input; i++) */ + } /* End of if (num_input > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.inlet_vel_wh:")) */ + + /* Read inpu.block_re if inpu.num_block > 0 */ + else if (!strcmp(tmp, "/*inpu.block_re:")) { + if (num_block > 0) { + for (i = 0; i < num_block; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.block_re")) { + sscanf(string, "%s%d", tmp, &block_re[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, block_re[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.block_re", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.block_re")) */ + } /* End of for (i = 0; i < num_block; i++) */ + } /* End of if (num_block > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.block_re:")) */ + + /* Read inpu.block_wh if inpu.num_block > 0 */ + else if (!strcmp(tmp, "/*inpu.block_wh:")) { + if (num_block > 0) { + for (i = 0; i < num_block; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.block_wh")) { + sscanf(string, "%s%d", tmp, &block_wh[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, block_wh[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.block_wh", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.block_wh")) */ + } /* End of for (i = 0; i < num_block; i++) */ + } /* End of if (num_block > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.block_wh:")) */ + + /* Read inpu.wall_re if inpu.num_wall > 0 */ + else if (!strcmp(tmp, "/*inpu.wall_re:")) { + if (num_wall > 0) { + for (i = 0; i < num_wall; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.wall_re")) { + sscanf(string, "%s%d", tmp, &wall_re[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, wall_re[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.wall_re", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.wall_re")) */ + } /* End of for (i = 0; i < num_wall; i++) */ + } /* End of if (num_wall > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.wall_re:")) */ + + /* Read inpu.wall_wh if inpu.num_wall > 0 */ + else if (!strcmp(tmp, "/*inpu.wall_wh:")) { + if (num_wall > 0) { + for (i = 0; i < num_wall; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "inpu.wall_wh")) { + sscanf(string, "%s%d", tmp, &wall_wh[i]); + sprintf(logMsg, "\t\t%s[%d]=%d", tmp, i, wall_wh[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be inpu.wall_wh", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "inpu.wall_wh")) */ + } /* End of for (i = 0; i < num_wall; i++) */ + } /* End of if (num_wall > 0) */ + } /* End of else if (!strcmp(tmp, "/*inpu.wall_wh:")) */ + + /* Read outp.outp_name */ + else if (!strcmp(tmp, "/*outp.outp_name:")) { + sprintf(logMsg, "\tRead output settings of isat and ffd:"); + cosim_log(logMsg, COSIM_NORMAL); + for (i = 0; i < num_output; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "outp.outp_name")) { + sscanf(string, "%s%s", tmp, tmp1); + if (!strcmp(tmp1, "temp_roo")) + outp_name[i] = temp_roo; + else if (!strcmp(tmp1, "temp_occ")) + outp_name[i] = temp_occ; + else if (!strcmp(tmp1, "vel_occ")) + outp_name[i] = vel_occ; + else if (!strcmp(tmp1, "temp_sen")) + outp_name[i] = temp_sen; + else if (!strcmp(tmp1, "vel_sen")) + outp_name[i] = vel_sen; + else if (!strcmp(tmp1, "temp_rack")) + outp_name[i] = temp_rack; + else { + sprintf(logMsg, "read_isat_parameters(): %s is not valid input for %s", tmp1, tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } + sprintf(logMsg, "\t\t%s[%d]=%s", tmp, i, tmp1); + cosim_log(logMsg, COSIM_NORMAL); + } /*end of if (!strcmp(tmp, "outp.outp_name"))*/ + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be outp.outp_name", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } + } /*End of for (i = 0; i < num_output; i++)*/ + } /*End of else if (!strcmp(tmp, "/*outp.outp_name:"))*/ + + /* Read outp.outp_weight */ + else if (!strcmp(tmp, "/*outp.outp_weight:")) { + for (i = 0; i < num_output; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "outp.outp_weight")) { + sscanf(string, "%s%lf", tmp, &outp_weight[i]); + sprintf(logMsg, "\t\t%s[%d]=%lf", tmp, i, outp_weight[i]); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + sprintf(logMsg, "read_isat_parameters(): wrong format for %s, which should be outp.outp_name", tmp); + cosim_log(logMsg, COSIM_ERROR); + return 1; + } /* End of if (!strcmp(tmp, "outp.outp_weight"))*/ + } /* End of for (i = 0; i < num_output; i++)*/ + } /* End of else if (!strcmp(tmp, "/*outp.outp_weight:"))*/ + + } /* End of while (next = 0)*/ + + fclose(file_params); + +} + +/**************************************************************************** +| Main logic of cosimulation +| +| return No return needed +****************************************************************************/ +int cosim_loop() { + int i, next, flag; + float *input; + int size = para.cosim->para->nSur + para.cosim->para->nPorts * 2 + para.cosim->para->nSou; + para.cosim->ffd->input = (REAL*)malloc(size * sizeof(REAL)); + para.cosim->ffd->output = (REAL*)malloc(2 * sizeof(REAL)); + + flag = read_cosim_data(¶); + + for (i = 0; i < num_input; i++) { + x[i] = para.cosim->ffd->input[i]; + } + + evaluate(); + + for (i = 0; i < num_input; i++) { + para.cosim->ffd->output[i] = fa[i] / outp_weight[i]; + } + + flag = write_cosim_data(¶); + + next = 1; + while (next == 1) { + /*....................................................................... + | Check if Modelica asks to stop the simulation + .......................................................................*/ + if (para.cosim->para->flag == 0) { + /* Stop the solver*/ + next = 0; + } + else { + flag = read_cosim_data(¶); + if (flag > 0) { + next = 0; + sprintf(logMsg, "cosim_loop(): Received stop command: cosim->para->flag = %d", para.cosim->para->flag); + cosim_log(logMsg, COSIM_NORMAL); + } + else { + for (i = 0; i < num_input; i++) { + x[i] = para.cosim->ffd->input[i]; + } + evaluate(); + } + + } + for (i = 0; i < num_input; i++) { + para.cosim->ffd->output[i] = fa[i] / outp_weight[i]; + } + + + if (para.cosim->para->flag == 0) { + /* Stop the solver*/ + next = 0; + } + else { + flag = write_cosim_data(¶); + } + } +} diff --git a/Buildings/Resources/src/ISAT/ffd_isat.h b/Buildings/Resources/src/ISAT/ffd_isat.h new file mode 100644 index 00000000000..b2791c611b4 --- /dev/null +++ b/Buildings/Resources/src/ISAT/ffd_isat.h @@ -0,0 +1,59 @@ +/****************************************************************************** +| +| \file ffd_isat.h +| +| \brief define function to perform ffd_isat training and testing +| +| \author Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 4/5/2020 +| +| \ All RIGHTS RESERVED. +******************************************************************************/ +#ifndef FFD_ISAT_H_INCLUDED +#define FFD_ISAT_H_INCLUDED +#endif + +#ifndef _COMMON_H +#define _COMMON_H +#include "common.h" +#endif + +#ifndef _UTILITY_ISAT_H +#define _UTILITY_ISAT_H +#include "utility_isat.h" +#endif + +#ifndef _FFD_WRAP_H +#define _FFD_WRAP_H +#include "ffd_wrap.h" +#endif + +#ifndef _COSIMULATION_H +#define _COSIMULATION_H +#include "cosimulation.h" +#endif + +void update_digit(); +void nDemArrEva(int dimension, double xStep[]); +void evaluate (); +void randomCall (int nCall, int useNormalDistribution, int useUnboundedTest); +void accuracyTest (); +void writeRecord (); +double getRandom (int dimension, int useNormalDistribution, int useUnboundedTest); +double randNormal (double mu, double sigma); +void binaryTrain (); +double my_round(double x, int digits); +void findHash(); +void addHash(); + + + + + diff --git a/Buildings/Resources/src/ISAT/ffd_wrap.c b/Buildings/Resources/src/ISAT/ffd_wrap.c new file mode 100644 index 00000000000..fdf26fa0802 --- /dev/null +++ b/Buildings/Resources/src/ISAT/ffd_wrap.c @@ -0,0 +1,240 @@ +/**************************************************************************** +| +| \file ffd_wrap.c +| +| \brief wrapper to call FFD engine to evaluate the input; the function ffd_isat +| is then called by usrfgh. A important note is that this function call only +| evaluate f, not g, which is the jacobian matrix. +| +| \author Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 4/5/2020 +| +| \ All RIGHTS RESERVED. +****************************************************************************/ + +#include "ffd_wrap.h" + +/*Extern global variables form mpc.c*/ +extern int useErrorControlCorrection; +extern float VPower; +extern int readexisting; +extern int writeexisting; + +extern int num_input; +extern int num_output; +extern double outp_weight[]; +extern OUTPUT_TYPE outp_name[]; +extern INPUT_TYPE inpu_name[]; + +/*Global variables shared with ffd()*/ +double ffdInput[nx_SIZE]; /* westWallT, eastWallT */ +double ffdOutput[nf_SIZE]; /* centerT, centerUx, centerUy, centerUz */ +double AInlet[nx_SIZE]; +/*double **ffd_exist_result; */ /* used to store the existing data */ + +/**************************************************************************** +| Solver to evaluate f, g, and h which called by USRFGH +| +| \param Array of need +| Note: if need[0] = 1, evaluate f +| if need[1] = 1, evaluate g +| \param Array of x +| \param Array of f +| \param Array of g +| \param Pointer of user definded struct +| +| \return No return needed +****************************************************************************/ +void ffd_ISAT (int need[], double x[], double f[], double g[][nf_SIZE], void *p){ + /* static 2D array requires that second level of pointers be constpointer to static array */ + + int i, i_index = 0; + double tmp = 0; + cosim_log("ffd_ISAT(): simulation started", COSIM_NORMAL); + + /**************************************************************************** + | Copy input to global variables + ****************************************************************************/ + for (i = 0; i < nx_SIZE; i++){ + ffdInput[i] = x[i]; + } + + /**************************************************************************** + | Read existing data or Call FFD to perform full simulations + ****************************************************************************/ + if (need[0]) { + /* Read existing results */ + if (readexisting == 1) { + /* If existing data matches */ + if (read_existing() == 0) { + for (i = 0; i < num_output; i++) { + f[i] = ffdOutput[i]; + } + sprintf(logMsg, "ffd_ISAT(): Return results from existing data"); + cosim_log(logMsg, FFD_NORMAL); + } + /* If existing data does not match, call ffd */ + else { + sprintf(logMsg, "ffd_ISAT(): Existing data does not match"); + cosim_log(logMsg, FFD_NORMAL); + + if (ffd(0) != 0) { + cosim_log("ffd_ISAT(): simulation failed", COSIM_ERROR); + } + else { + if (writeexisting == 1) { + write_existing(); + } + for (i = 0; i < nf_SIZE; i++) { + f[i] = ffdOutput[i]; + } + } + } + } + /* Directly call ffd */ + else { + if (ffd(0) != 0) { + cosim_log("ffd_ISAT(): simulation failed", COSIM_ERROR); + } + else { + if (writeexisting == 1) { + write_existing(); + } + for (i = 0; i < nf_SIZE; i++) { + f[i] = ffdOutput[i]; + } + } + } + } + + + /**************************************************************************** + | Weights for error control + | This is needed since each compoinet of output vector has different order of magnitudes + ****************************************************************************/ + if (useErrorControlCorrection){ + for (i = 0; i < nf_SIZE; i++) { + f[i] = outp_weight[i] * f[i]; + } + } + +} +/**************************************************************************** +| Read existing ffd_isat log file +| +| \return No return needed +****************************************************************************/ +FILE *file_params_isat; +extern char filepath[]; +int read_existing() { + char string[400], tmp[400], tmp1[400], filenametmp[400]; + int i = 0, j = 0, num_input_tmp, num_output_tmp; + double input_tmp[nx_SIZE]; + double output_tmp[nf_SIZE + 1]; + + //cosim_log("------------------------------------------------------------", COSIM_NORMAL); + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "existing.isat"); + + if ((file_params_isat = fopen(filenametmp, "r")) == NULL) { + sprintf(logMsg, "read_existing(): Could not open the file \"%s\".", "existing.isat"); + cosim_log(logMsg, FFD_ERROR); + return 1; + } + + /* Read data from file */ + int next = 0; + int index_match = 0; + int flag_match = 0; + while (next == 0) { + if (fgets(string, 400, file_params_isat) == NULL) + next = 1; + if (EOF == sscanf(string, "%s", tmp)) { + continue; + } + + /* Read isat.num_output */ + if (!strcmp(tmp, "/*num_input:")) { + sscanf(string, "%s%d%s%d", tmp, &num_input_tmp, tmp1, &num_output_tmp); + if (num_input_tmp == num_input && num_output_tmp == num_output) { + index_match = 0; + for (i = 0; i < num_input; i++) { + fgets(string, 400, file_params_isat); + sscanf(string, "%lf", &input_tmp[i]); + if ((input_tmp[i] - ffdInput[i]) < 0.001 && (ffdInput[i] - input_tmp[i]) < 0.001) { + index_match = index_match + 1; + } + else { + break; + } + } + if (index_match == num_input) { + for (i = 0; i < num_output; i++) { + fgets(string, 400, file_params_isat); + sscanf(string, "%lf", &output_tmp[i]); + ffdOutput[i] = output_tmp[i]; + } + flag_match = 1; + next = 1; + } + } + /*else { + //sprintf(logMsg, "read_existing(): the numbers of inputs and outputs in existing.isat are not consistent with isat settings"); + //cosim_log(logMsg, FFD_WARNING); + }*/ + } + } + + fclose(file_params_isat); + + if (flag_match == 0) { + return 1; + } + else { + return 0; + } +} + +int write_existing() { + int i; + char filenametmp[400]; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "existing.isat"); + + if ((file_params_isat = fopen(filenametmp, "a")) == NULL) { + sprintf(logMsg, "read_existing(): Could not open the file \"%s\".", "existing.mpc"); + cosim_log(logMsg, FFD_ERROR); + return 1; + } + + fprintf(file_params_isat, "/*num_input: %d num_output: %d */\n", num_input, num_output); + for (i = 0; i < num_input; i++) { + fprintf(file_params_isat, "%lf\n", ffdInput[i]); + } + for (i = 0; i < num_output; i++) { + fprintf(file_params_isat, "%lf\n", ffdOutput[i]); + } + + fclose(file_params_isat); + return 0; +} + + +/**************************************************************************** +| Evaluate Numerical Differentiation of f(x), essentially a jacobian function +| +| \param Pointer of g[nx][nf] +| +| \return No return needed +****************************************************************************/ +void numericalDifferentiation (double g[][nf_SIZE]){ + /* Evaluate Numerical Differentiation of f(x) */ + + cosim_log("numericalDifferentiation(): Numerical Differentiation has not been implemented", MPC_ERROR); + exit(1); +} \ No newline at end of file diff --git a/Buildings/Resources/src/ISAT/ffd_wrap.h b/Buildings/Resources/src/ISAT/ffd_wrap.h new file mode 100644 index 00000000000..8c36c5222c1 --- /dev/null +++ b/Buildings/Resources/src/ISAT/ffd_wrap.h @@ -0,0 +1,45 @@ +/**************************************************************************** +| +| \file ffd_wrap.h +| +| \brief wrapper to call FFD engine to evaluate the input; the function ffd_isat +| is then called by usrfgh. A important note is that this function call only +| evaluate f, not g, which is the jacobian matrix. +| +| \author Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 4/5/2020 +| +| \ All RIGHTS RESERVED. +****************************************************************************/ +#ifndef FFD_WRAP_H_INCLUDED +#define FFD_WRAP_H_INCLUDED + +#ifndef _FFD_H +#define _FFD_H +#include "../FastFluidDynamics/ffd.h" +#endif + +#ifndef _COMMON_H +#define _COMMON_H +#include "common.h" +#endif + +#ifndef _UTILITY_ISAT_H +#define _UTILITY_ISAT_H +#include "utility_isat.h" +#endif + +void ffd_ISAT (int need[], double x[], double f[], double g[][nf_SIZE], void *p); +int read_existing(); +int write_existing(); +void numericalDifferentiation (double g[][nf_SIZE]); +void read_isat_parameters(); + +#endif diff --git a/Buildings/Resources/src/ISAT/isat_dll.c b/Buildings/Resources/src/ISAT/isat_dll.c new file mode 100644 index 00000000000..2a71adcdd90 --- /dev/null +++ b/Buildings/Resources/src/ISAT/isat_dll.c @@ -0,0 +1,89 @@ + /**************************************************************************** + | + | \file isat_dll.c + | + | \brief functions to call ISAT code as a dll + | + | \author Wangda Zuo + | University of Miami, University of Colorado Boulder + | W.Zuo@miami.edu, wangda.zuo@colorado.edu + | Xu Han + | Univeristy of Colorado Boulder, xuha3556@colorado.edu + | + | \date 4/5/2020 + | \This file provides functions as entry for the coupled simulation + | + ****************************************************************************/ + +#include "isat_dll.h" +/****************************************************************************** +| DLL interface to launch a separated thread for ISAT. +| Called by the other program +******************************************************************************/ +int isat_dll(CosimulationData *cosim) { +/* Windows*/ +#ifdef _MSC_VER + DWORD dummy; + HANDLE workerThreadHandle; +/* Linux*/ +#else + pthread_t thread1; +#endif + +/* Windows*/ +#ifdef _MSC_VER + workerThreadHandle = CreateThread(NULL, 0, isat_thread, (void *)cosim, 0, &dummy); +/* Linux*/ +#else + void * (*foo) (void *); + foo=&isat_thread; + pthread_create(&thread1, NULL, foo, (void *)cosim); +#endif + + return 0; +} /* End of isat_dll()*/ + + /* + * Launch the ISAT simulation through a thread + * + * @param p Pointer to the coupled simulation data + * + * @return 0 if no error occurred + */ +#ifdef _MSC_VER /*Windows*/ +DWORD WINAPI isat_thread(void *p){ + ULONG workerID = (ULONG)(ULONG_PTR)p; +#else /*Linux*/ +void *isat_thread(void* p){ +#endif + + CosimulationData *cosim = (CosimulationData *) p; + +#ifdef _MSC_VER /*Windows*/ + sprintf(msg, "Start ISAT Simulation with Thread ID %lu", workerID); +#else /*Linux*/ + sprintf(msg, "Start ISAT Simulation with Thread"); +#endif + + printf("%s\n", msg); + ffd_log(msg, FFD_NEW); + + sprintf(msg, "fileName=\"%s\"", cosim->para->fileName); + ffd_log(msg, FFD_NORMAL); + + if(isat_cosimulation(cosim)!=0) { + ffd_log("isat_thread(): Cosimulation failed", FFD_ERROR); +#ifdef _MSC_VER + return 1; +#endif + } + else { + ffd_log("Successfully exit ISAT.", FFD_NORMAL); +#ifdef _MSC_VER + return 0; +#endif + } +} /* End of isat_thread()*/ + + + diff --git a/Buildings/Resources/src/ISAT/isat_dll.h b/Buildings/Resources/src/ISAT/isat_dll.h new file mode 100644 index 00000000000..aa85c79dbdf --- /dev/null +++ b/Buildings/Resources/src/ISAT/isat_dll.h @@ -0,0 +1,46 @@ +/**************************************************************************** +| +| \file isat_dll.h +| +| \brief functions to call ISAT code as a dll +| +| \author Wangda Zuo +| University of Miami, University of Colorado Boulder +| W.Zuo@miami.edu, wangda.zuo@colorado.edu +| Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| +| \date 4/5/2020 +| \This file provides functions as entry for the coupled simulation +| +****************************************************************************/ + +#ifndef _FFD_ISAT_H +#define _FFD_ISAT_H +#include "ffd_isat.h" +#endif + + +/* Windows*/ +#ifdef _MSC_VER +__declspec(dllexport) +extern int isat_dll(CosimulationData *cosim); +/* Linux*/ +#else +#include +int isat_dll(CosimulationData *cosim); +#endif + + +/* + * Launch the ISAT simulation through a thread + * + * @param p Pointer to the coupled simulation data + * + * @return 0 if no error occurred + */ +#ifdef _MSC_VER /*Windows*/ +DWORD WINAPI isat_thread(void *p); +#else /*Linux*/ +void *isat_thread(void *p); +#endif diff --git a/Buildings/Resources/src/ISAT/libisatab_ser.a b/Buildings/Resources/src/ISAT/libisatab_ser.a new file mode 100644 index 0000000000000000000000000000000000000000..c499f13daa88a796e68b844fa2dc53081f742679 GIT binary patch literal 893202 zcmd443w%`7wLgB6i4Y+&QK?d;C6>{qhH4%>9jY0afphc>M1>kOHh~aK6iCcN;|qe5 zDBHsT?bT|%_E)a$y_deO^kFacnFJ(&qJUNrs>DZ?7`2EMP>}q-YoEPm_UxGf?C1XO z|9?K2oO8Zs?X}lld+ql=XPq~BZew-rr9&>xOFRmdTlZT1pO-hjxLA->4KWPkW5f9R zt6%-sUThfuL%)p4uNwcGzsw(AV*F41JahlU_@DS?6?7Z1U+@AW>tugF`jwGIzdwDP z@^{MD&M?ycM&Dwba-83w?_Fpl{kFbm3{roe954on-{AZ|8A-p3b{d1_Z^Bu|VE?1W z;L;1e`tRCCWAOju->FyMWANXcyNy%j?+3ut-%aNjLuUWU7}9dPF{ERLG319&7(;$` zsWIdi2aF->7Z^jHz0Vl3ZJ06S?_Tv2E?~Ne`HyJ}S&oPFMy~P-M<2+;N%ilMK zzV~}$=obr&oN3n@IrH8#au#1@n!86TkkebTd}fke&xctrsj((4RKYusG$;ji#D~3oGZ5GQ<@rV_tJ*ERBh9W6h%aTM(~;A}MK!=e5)= zghUE8SU0pZ-jK)w;N1C1bYR>7LF!xPElecGgX+ebxs?7y&drT;Z>ec)O2X&OMIsw0 za}wzr<~Gh<FHY<=Et>}z(>tM<-wx4jW<=M3#I0-9ws44G9B@}SI8l+ zp8Mh{o+MMY8 z+ZeoPK}(`d#hxVCa|~V7n2tVfP;p`~uWnf+GAj{QYQoq9GSp_&^EI+0$DXK`q=8Cq zYfls-O7$dFKsB3UVHBOmu%s-CJ<$zDdk`;-i)0=xqAcQtBr%iXIJFn)o>kZ1A`~2_ zM^jnT94lRMTuojaCGM%8C@GJVC)5LRn7AD0QA$=6Mz3(<97$Dbiy41H;clp@Uj(hm zsvz-UBN~Hr&k$i9x))sGiJ{ylWP!(dT;EuC1Ns0>bJ2dzt8YZZK-s6P(@byyv&o^A{+WF;0M~buNli>5tMpp(a!^P6)D~z7Yj6^`qj}G*239xDr!_5*Cy4 znVZ=uAKg@kyh|;I=rxgMdHSoH>*^P)+L_Cdgk%Ad+-m18Mi(cpS#cjHcL5Q%{uGT7 z51-~S2Cr!zH&!;)-LQCWEKw@s#7FaM7R+r~h#nE_1>MU9^_7dr5V@L?p8-kn%ndeI zW|$i6I2`$-Gz>}I^0_NsqC_$Sc<#g`mvT##b4UVtR@N`3^2AdaqoxOL*ImijT5ULs1AxA_}URX1Cfvgl=(c{nDfQpUl;gm;Y?lNv} z`Z5BSiBcL8p1SQ_x~E(?eh;Ep*`VuqQd``r zGDbyD7Pd(1le7z4q>0B7!Fo|cT_uK67}?O3TPyNQ$_}>!juxHsCxYhN8fv6Y8X9Y= z<#prY7Uhzp08%IGKwNW?_4{JMSv<$7DFvj30@eIvs#txi@G4AVKR+3AN3mqo@sJHI z(thJu6ZLGk9-3O_HOa)%bu2e9@I*)dHuMae8|!Ll*cYRZ(KOXm*Ds!bA}SJU!41+J z5+bRou1>}GhQ|6^Q{mj+j{9(a%?&k+Ya020CRyH^`ngIAm>>!7H71APG0v}9Si{HL zytYu4#2?2if&`BIS$ej&)X;Q6YK}_nAz5;6N*5(fNZuJq5uB6HU9g~TamtKbJhyUD ztS*;P$}lhiF%nFU6q6G*H()k`<}H%a(z<|3BMtYHpSjge!@_!LoC&eIsZD-}zETYu zT0WY0dEOS&;%!Y-o<&@A8MAAC6Ej+xBv7g3gSqo6=@FWG@${Ctu^JPXk_^*F(q;v^ z2vzI+xiLWmN@O?H2)%%}L48H!KxG4ZV01liUUPAEZ9OV8c~?UnI=UgaIN=VxZYYXB zLpQq^rI)TjqOe%dvQP=d?-o)yBFftO7MdBM%Y|eE7&6`{ZtHJVc<`YLdh#_wNaem7 z-Fph32;D5?S5TUA(g?+{Nkf|&P$|T)rWzWtP&tc3wdkIpHs=7QJotcH+|(k6rI2n% zT0B@(Kfi7P^e%1}*UW9KT!5bhni7~cRkkcv(o6kyC{1#v+m?n{M7XW1~Nyrd6t6ML$nQk>_ z{MfNvd&Luq#!uu|RYR7B>}i=986K?a@FT;x)X0!G%DHzz{HBy&mKvuSSPYVpFPKyq zyG9k_PBimsLrgDY=!0^M>B#zO*tt<0l&Q*zE;2)!a<8)QJ=m zia146Glo{x^^IEi356FGUR0vRDrc~XbDC(2lcTL{T~ybc827}&#QX7M6YnRCPrM(m z-A_m(na>JV&Inxt(RGFsQeYEPV3Sf{V^d(`Qeed#OU$U)>_%elXz8C=oS5E;MPM~f z)Bf?61QNK9o0!OLoTj~ru5Gwe5Q{K!tE38g0qQB_Lo9D)4%7HU<5#5J7xGZT6w`+r zJ0UULSWT|6CE9aME910Gomc`bX*?%VX6YDZmX3{2fsv7DbdxAkbu2}^lTySxDMh@K zQp7tcRlH=Jdc0(u8dg+D1vLpI`$+;*B&Db@MOumqQzWLSFhy#L3R5Jfs4zu(CZ>>m zQVP*0xsoRqBC*7kI1V}Ku?Y=p5-QJx)v-jTO&Cull%*2QMvICxphPQdMMav`78Q|- zCnd5iDk2ppfu!OjkhGKplA0!I=@M&uiS_=1Ma^233?xOBToP++L=)q3^MTtUjQ<+u zR^Nmui?pI&R7{CWMk#g4C>bEo#M}@Q6(n`t;+tFQ&=Mu2AW?C}TFqHBR+mW654~2= zGq7mvxWp)mv}&dZ^;UvJDYRFtXL^YS6zfcjwJa^x?5ZdUC?P{gvaS-I0a|QDV^h+O zOwF7yls1GMh7iXKzAIj3YfwYb@LyuN2^COPHT0O zG&@eO8Mu0=t7QkSo<(_)+#AE-ga~GZ!euT&LZwJB}My5^c)Z#&M(7X~*+onuPLVnuMm-4lleq?bwtuj1@8@+7C@E ziFKz0Rp@n9QL$F1mguHkq+3}Lk5D(QVxBx5E#k_AQE5#tpF>P&sJX%Wrdd~UGs9lD zGzSf@vW!m#Qa$zjeE6L4S!jzb5cnaWDD2FYtu|A1BU-1pW(gFX;#4g5+E)a4FZ>0^hFDf1BfR zy=9B%CdUUE@?OecA@E#5C-DY>kI?XTf#+%XLjsrbNj|?3c%erB8pj74uL%4*;{3kA z<#-&o{5T}|OceK$|F}$7KUsn>PdpC^+$V4uZnnTF-E@eP@qoaq1aN`-*!XvWFBkZ5 zfo~J|BLe@fz~2z~3j#k|;2#P6U4eg1;9m;-sKCD^@Y7HvDBtt&oDRwV8yp{GlycOF zm4qUJn;ISxc$tRJ5qP59Q z-@tLylY#+m`LRpj*&68DuW`vg8p&`%L~wh&cBV_Yrp9D$!F z=&J=@sL?kIe5}An3;K3}muvKE1zsWWa|Qi+fwyY(TLgZmz@^8{`ST-wzHfzQ(Lu)t+KFX^iVK3}81P2dYPe3ihPHT>TN zey4^%De!g;-y!f78vee(@7M4z1uokcDgT*J2-R=D(CEJ-@ZV_oWdi@BhR+uGQyRX4 ze}v7YOEvoI{~6F2Bf^LWHM-?2OY3 zJQwASjvC;p;$4~se>@F-3RFq_%Z9mp_q!+K>%dd-|85#QkOrS6_?LQJ#?()xV{sb# zG3d{bJZnS+Ci`Cj;Hl)fIt~7|;ImG21Y|ill!o4ec0U#W2h!j-!8A$E)n9khQ-<`= zu@rbJJ~_xYqBrt5S74n`t4~pn70~cT_u0 zhT$F6MyJ5{1J_(V+l+izZn0w}dn|USq|v` z>@fmt@WBlkEhAYd$8rXlPVPV^&I6^nW@Kae_16U|13%dC49%dJY__qFBI(~-a?p%U z_L)x@1MLwK+l*47HA*_|XwX+`yLV;}6pLp)(@RNgo6R(Na0>iA{v;N@WJ{=|v!s(h z?z?tiU_d5Iq-WWO%MpN*^pQx?H%))Pn&_Tb+_PK0Y_5@kK?SMSgF|ec}=s$ATHD-^IC*a>R`C zIg=+y8(db?;RHc8(Q?i*9UiOc3^Cai*`#%Lyy)rY(2i$S( zmC=Ne$?D79C|wyy|3S92!HmxGHRulpo+r4Kox>lTNZ)5c-^UfHDk(#&#zG`yXssS| zkUiT*(njz1(fOp}Z#*_IfUN5K3C_orBZXmo8#bifHI!&j*^gkzx z%9T`9LL~=nXK8lWf5>M0#RD%d4m@o(8|dE~zctz4m75;k04T-itEMjhtE6rQvT-#f z!E5@vgrq~AK(1ruut99dhV^(pfU8W@8KtrMVpd>wtc*QG#e#hqD%oPOmr6Rr>^YmQ z@Rf1&Wzz{8wtovDt%RUDq3bqW)0rlz=)4-|wHe-yA3<~o)6?#20D?c%1MR+AT(t2- zt?*UhnnIN0+~Yys51=Lru#geCbif;ZkU~Ux=`y2F`KXOBShN|IaZ0@nvBHUynHxk2a3oS<_-h>Z%NLJM`g+fsV+VuH1S!mP0k`QP@g zYRbkV=hP<q^})asSr9SYanNR4DYiAZv%E83eTG^{o9!s+46LW*iE`L;?`GU|@MjOw z@90-S}T> zM*ql*4B`*6o#wK)3<~gehS}AZ?b+GYn-zI0W9W99eSbuF^!Bc|zGiiO;2XMQ+1mpH zqmBi--u_x(=uTpU=GJ+p3_*G9rUOeY*=m2c>C3j*o77C^+6;w!p)b!G z*l7Fz=8e$2#x!Tl&qEy_c~@3J)!~kJm%JThZ-v=Q16|Da<)c6rPI1OO8T5bT?Z~ER zdImw{fykY{LX_cy&<9m{qWGpNx9vX4lce@#{rQBlnVoLxWs@fuiS7m3m|Y+0Jj44PCTvHJb=nCdzH z*c#{w`;U6>-ivCD>lB&iKv{ij0N4(c9$*`(vyp4D-8TC)=#2FRqTe6r*y&yM2gDJG z9R1SU{tvJ-o!@XfGug)``@oF6muW70+c*ritPfom*SyRfAHyWgt`CNKI?2xBM%ndV zCTy?k?d+lZVR!cE=U{O|4_ICMd_zB3_8!@s&0Y(1^}_7-FWVIF*Q`Hw2)2%_G)F&2 z6%;iBbePPo#FHx{6Qw`THLEv+Y`(7$<`i%i{^+O~oiZTotcTlKn7u$|MMkrNYOO@0 z=?8K`qiF+?9d)}~vX^;p1H>Ie57^IIahWQgM2kUrwHlN#owMj9O$WA}!Z6l>%edwHC$3)m)*^hsIfKdyQf8v<8-cRIi%5vQ&x?q~Hu7pC!2Z&g zK@o|%;lZOYn?9)K32Nf{o z-5zC2Zb>KepreLfZ7y}JHaJsYPm_HFMVozDuF*Lyu$3jl&B&$^E)Ye2r+b8fWGv(Y z@83I1pq;^=dN1t!)H??~zE8blHd8w{+wgDp+Fj^_IA`<^D(GULcs7~rFC_>4AtM-_ zmSH-J(3E{1@P_xB{x7Y_>qg*E7gbv=Z~8xJd5L*qA}jsh*(Up2K=y&nWgn7^7CTz9 z(_}53CaYN&c5-|+i<*=P&YT>xdV|@~8FH*#(>tTv?CQ-lBb{C|(!1X*=rvhyxEg)u z=g@cVKuFi$@@_+8_I1NTs(g}&KVY{Cp z&6RA~@j-JThC!VHr+J&vad63C#KoHLJxcdk%02Z&{97A$MVn8}fUQEfGfi~RoLP?_ z?bwM>PPmf|UuH({+H6K!Uf`Bsq0LJ)5@+^$lkG6OKEKS2K3z)^AKI~=x_D2LFy`p3 zCYzp(LG^OI$vF{aTZSAF|m5T(+fQtwtP(Rt|LR@vfu}3-7H5qSFVE)P3Ie zUl3Dgb|;x(Fgo(oz@a_3+!^xhrGz0PF5D0pcplIex_%i(`XVmoWbyyAUd;N`TfP}j z_XMM}PR%5e-LT%zf$sh^=pFM;z>gX*Yb#82Amo4FtR4t?!|#Wy-witU6GwwANdI!S z2Azdlv!*!Bj~<=I7Cw5EHE+%0>fP+Udp?u`)){D0{TrGtCqeM*G^-Cll&yz$o6hx} zPVf&$1JPM$X8`IZ>4JYcN^+3|pM?B}LSFk=xO!lUV?TLx3JX4Yl-YkcYC55HCMun1 z%`QIUL!+hZH&CtnH1%Ioj=8wC*QXMq=>cKwJ!UFwkeB?Kpv``_Y;viMl_}74>jT)O6C6p1d@IMc-(Y zxdp2+6W2;L*4Y?r`M0`tsJH!Bh!+65@Z)WCl`vQL0-vY~u+ON?L+5al%_gIR{#p>- zKGdDL@sx`$jOa4cK&}eooPkYZ{2OGqmT|>~s5PgMQl)&P<~G)0KBIxA=6y4=*EmG; zXGY8YHX7%0J_APWT(<3?VvcNV-5|RQoEw{dIE5@(zLHL7e0&H_ise%DKdrSdqOL_% zOT`Z}dLf$9`v+=F|3y+gm!r&w9G?#ZWbeuis3e2zJxWWJ`9wzYgkwAJ+KagD=nCFR zx7n)YQihJsrMDbx=WvF%{dDjPJC|~P#8+o&N85e92pV!`W+RVWyAHBdZE<#9eiL>k zlUoFbbdin0TPro%56!4 zDVX^4$#_0oe_k4YJ`&GI=+7s{o_kj_C-+@9xsM0Ut$F4ywivt{MYgvh-sAP z+YRgZAm(HYtZxIl%Eya2=*v%x8s@t>&y9QgNyRV=F(~~>zWTE4Lz)P{gtBuHO`SZA z>ddXiPqG4|Y}6{SS*XAWM%9vYLUz3%jMaxv`F_LM@p*Y+&`YcO?j;H3{3=;3o4yvB zN>%>Uxz*9&buxOz)&|ui-b`VgZ1yj&W1kG@TCNBj|K4?b7X}qhhL=6*kp5nq{Y0bNG z2ZZGPZn1hsT_ALMKD5~wUxGzFzCY=RhmDWxlSl&=}c1u z?FnQ<0wZz+qaTaS%*OH{&26ykfel#qFqs=ceCaRXf5W?SF?xX1K|;4^jIZx|NK^do zCDH#Rg{LV%33FAb-`r`Z%2f5+(yvgzJ${0iQ!U2!(sDMeW*=9~3Ccm=k4{*Frf40` zaAWA?F{n1e>bLWmp_7VwGv-P7T6Qhg1!=jz9pNx{I*V%v1@{Q1^P!(-^MIP{O?8dhQ?iql<(SS;c4e;F@lo?> zsBti#%#+kV1a(ADDfN>u@-0aikYm2T*&m2Z_8CjY@D~L}a4w$f8O`Mny{lTPVrx-;>j=jqRG_){}4y&VtrC8e0t$gaBggT|6y7YpBoAMRUaz|?uWoT3#hl0@9+X}UOo;nn=HK`o(A4GM^c_Fx=f*L4H@PVN zzlokvnp4Cp!d^;&g$OPS;z4ZbzkI;Oi1Ud{Pg#;6FhcR{8Y9!?rXU`+PD#6vVRBxP zKTpK!l9SBw_suWKtFCW>rnqrYD*4ww)aMB*13Q<g8Uy=v8(%2;8;%`%f#*Jao z+?!y0dGyIN7!6@B}nMn}QXkF)?1ri;O-sKQ0oLs`>_eU`v!J zh0ns4Jfwb1o-S+Jv=br1Q{g#b@^v~2q$NFxm!wgXuJcKgY=xHyO=)wJraVij66JY< zN(hg=&k3`l&(2ca(^NOVCJ&#Cs+;dtL3!5|jw!lc8#M^Ub#x~9!-9nt-71zg?_xe;^ljJ46jCGqvqfqdr6LoduJ0^S& zFw(Jt^b++<8J4#)Ys#?vRi^}o6-EXHhE2R@@bqEZJ(({Ln+OdRLPPn`P#!ciVjF_J zz%{kq6B%^R;1!us&&sS-r)1h+fp+1^(|YdC`U=Fq^`s{jx*&bea+_(sv4-qpRVHj8 zLiTY_R&ZEh&9FQqdjyi5i)6zn3L~C-vQ}kg{#W7y&T%sS|3dJiZ7c>tP0bmUdrxLr zWbg`4G;8H4s|I-nGB*TXn)2e5ZBt&Dx+xGDd{3r)M7Ap5rJ{Xk2HEDk6{ncdLFP*D z^i{c;%`b$ugYcf5)%tQ?Y0J^&IoRYC(^z^7N^U)WA+d?ZwM|~k&fG4GIqu`rI>4SbEr0;t? zl+uP_BcSVC=-MrOnfC}<3U^ed57%z`67nf?M_d}RNun~0i<)Zjsb+kW4_ESh+ai9C zkHgP3E}GZWWL(r-)7orY)L8FA?wRO|@b#vP&^FXuG=0YG@8YvZ)i)Uz)znrlzz6ng z5TIt^Tp5-wV^3~&Bj?>X8a?tgQH-bV6F6B2t+z`2AqA(6%o1NGaLUmiEBK!UPJAe# zlKv%u6Fu!}l=#<06+rZ)MTuXS2A`|p*aO6mn>AeWxkKO-?@tu|cc-CWl?LCe;G`eo zN5`uQPTSFCydMi(*Ux7PJ@LsQCO8I*qDk}*<0ttH6F8lSemH(~lAw8FPo}51t%FLpJfUkHQ$#j^u))9A02BHdNp0YROo4{N%DVIp;zU6N1-SF zV~9D9PZXTq?2vp;6-83l{}}?OVDzSjq|aCA)p+G=mc&ObFOEX5;t!?4yOelIeyTR; zcuB#}#=Vs1eT9#z=lu%(2!(zS35bJEs{Fjl1xD#T2S3T58%wpx0sO(DimE zUMHc0_|V$66%KX!O)AqGLxI z`aKFg*}hEIrwYBQ&l>(VhpV6eqtL&j;6GFF^`f>Xy^((A<44C91*hqL8Sh&H*Y&nf zp(j2Ii3yHF3Qo(Kl8+a!=g>iXRDFI+;8LDuPGuNHY3QeF^mhvSS!w96)9Bj;eRCT6 zJ2d(gg8pC9&|giJEDlQ78vJB>KN7f1*Zp`#$1w$`We-U|k}5|Wx}HZ1T=IFuB{PZ@ zJP(-UbGgDt)pLbHPxty{*QwGH)-fU)99ZP^qD#C1*P{q z{A9YmA#hzkK82prwb2c3OjPi1DSS+YkE)+*6?)?Hg5a|t4gGBz{VRgLBMtoujsCBK z{@>Ej4`}r73i{Kial%3R8I7ORk5Aybe#R^Gl&%l)qa&!$t9rOXqyL9XZp=?Z|0D7G zBE|bCeo~&FEBMb9{I?4J3k82h!BsvlD7eaJmw2s_^g!v7pQ-58@H>eB$A9O#XI;+C z3a;`$`1=I^qY6%Gkm)^ZIBsx|oNMuu`1t~t=^Z2Z z6f5+ooc`g1%0{uR<89=Vb~X zHDB&i=&x4j*C_N4D)`e1J>|<<5${$7pQX^hrSMVX-KWqKpLK%I5rtl@KeK3`0S?m7 zZ2V-p&Jnn7KNA#s;?Gz0aSkc?_Z2?ZD|}Qr7bx`CDD-zK^s0WIQs^n(PLZy+6neGZ z8+s0iaL9arLC_ZpoYM6eeloqK3Vp4DS135e`-Q~2Dk(5vbCSB3sY zh5o-4oZ|hfi1#lFA2r@L75bYLKL1eY)p(C6^a~aGvuW^*L+b5a5$`yGlit*LFIDIl z;hEIuEQMZ;_d11su|j{Vf>U}w6!AWw@KNLaKMH-l!sm|)y&CT}1*f?|Dd*o5J{0di zM7)DX;s%FqCua#<>gTASzgVIF9l}ZemuU22hlFu;8u}k-^f?p}j$6~v->uOP7xe#{ zhQ3pw_kb^@kB)aVJjaENj}$&X0VdP+k2LhB(PRM*sh^QT9-qK#i zLQi~xg3o$|Ue!;RLf@kBe@&rRdZLb^Xjy=t)kwRCS|5 zugck^(BG%;|m-O(6cEGc;yMwoS7aN7`xpFV4vS7KpW&xxx(t3%t4M1D z2|r|bd4C=*sO8YZ&lKVFB%wIVRz|`X;DX{8lkgHYWcc2^7{o866-smrE-1XNgNrY7 zDOPI_^zdUv_+pnl_W#*{dpVq{B;}Clr#R`Dil0~z;P>+1%hTjl;#r21D2-@R$uGkf z$_PaOU4Il-*FBMXu5bg~>Yif%_4u#H6D29mw)=DTfQE=akAW}6h?Ze8lz*V6cJd@kw5L^un3s_h-E3<)Uaj_pqTAg(BB;M-s|iTWF~6cr9MZiu%AcRyRvDgX9jf zG%U##i*6A`!PB{Upr+%_Q}VY^5i6;+=z5^JWr&Kx{jIj)|7VISMpNLugDMA34C59d0!i+Rm@3Vw#);*)&0=|1L?+`*02>f&Nuppuko@|9gRvy8G#Z{WF5 zqV#K~QB=aqO%lqpJ_+R+r=zZWIURNVcO{{`bkud7mxQL`s}oJs>MgB?D4M7h0=-I^sF#5W zTyEX)Ch(ln(TQA3NhsHT63SDfqkN2!6L~Mw_1^-Q6K4{CUf^;fNaA}1o+spy_@@HT z*KpbnPw`5Nk@V*ZTuwtvoVKx(-qr{{V)e|pN#IWj9MSPZdIRee_cDIz4Q!vlCB5qn zEZOVVd6;D*IZZ(?TbGQNwvAJ|MhL(s;&Huo4L0QV zBuW1kr_YK_%V!JvBLbKCBJq(h1(Ls9&`HbquD~la{8E8e30$V@DuLH(_yU1TyOs10 zb9}H-Dg>A1;#UH%61YqkedCzqY}NR`DCp-4!t=%RHwC^zBfBmAA#~p zhfLSM3S7QPCwAo+zZUpJjs7WtPZqeW4_^>?xkmp6$FpMXnyepOFJXg>PA(0;h9J(l zAfR&bg1DFYb%DUC-J?U|lLh`)7mnfdU3lX2u7=kN{6h_2BJh7``27Mus^Py9c$QG4 zl&4eRIU4?|z-2uw=|2?sNR2)d3L*J@8a_hcV>J9CfsfVjpulB)F5|sc;6aVPLEyHA z-y`r@8vY2!2OAY4-^H#RLwXNu)$HMEK`&o_lJ+URhdrdxzai)!5x6X0(tFrb8vU0- z&I(P=Gl#hPoUh^E5%@w4zf9oG8a`X#cWU@e0&mywWddKJ;afRA*yz;KwOio5TDtlL zF1@iyJs%OcTon`17&%z!rFuzvY0DG#ORuN!`WEdH9g_Y!flDuKXSt7!n*?5}(cdZX zpunX(D+FGp(f?H7^93&JncoV$O{0H?<5@!3_8@ zEXU3FHJbkEbrULIa=WH17ncZJw$~Cb6S&+qDRFwOg!pu7{O=U_W)1(5z_)AoT7mD< z@Mi?xtKqK*e4mDYAn^SfZeW3){L*MAjS63Ve-bKidWV3(em43cORJ-!Jfu0+;RDfWUh- z`dqxuLi(JjrRxHLmumQAftwnBmB7n1yjI}l8oor}RT_T3z-u-9R|0PkxTsc)*Ev4e zcvqw=Pn4HFfoF*f5$0liA@FR0UnuB@;58kpPsVEW=W=|I(X7c+B=9>me7eA8KT6sI zMf3l{yIqw?*hS!@Z4M4cR+xn zQ|RwvoC%lqpDXfn8t_!yrN{0o* zBl@Zl?)^HE!8HP3{Vf-l-a79Pc&_O1wuyB83-DBO-j3&~@O#tXuOohvr)-QHZ!X#o zI?hKwpUXMHyYga17Zo{9c5mownW^9daxbce!G-EkS%k|Eu|236I_^e6IAxe69q5 z1mJ*W6HWb@&KJ=x`Nz0RhGp~e2gv^e z34b1>g@3N_d4YU#S|-?qxCZbwJ-G4v${$3eViWry;)%XXxDDUKl%FJ&o+K2n3Twbi ze(IY$B>biw_ult26v%M(xACz-@5&NfNA9S|@UA=^*=9yIRN>30^tD3x;vhpe@zK-! zNick*`yrfpLh0k8^e_+^z~^!Qf-4di?l@9@j1%8WHxs_biO(HV=4nr`DRz)Z7E!3SMEE&Tw3x4v>8ftYKYK=xp+yk#W0 zcoZML#aADRg3I4`AJH1@bV>%7F5c=yL?mNQ!SgUFK`%Gu#rB>t( zc-VN3idV}B)5$d9Yo%vu1+j!BbJqQ%%<8fV(+QNZt1HZc?GX7&lbj=(6GP~Jz1zEz<$}rH8{l_6>!^5m)|KqE=@zUll}nea+vn< z?I}0uqn`UOaAP>k6Lx}p?Hj;O=mo1|Uida6EI#K67jop?1Ws7sd9c}6W&2C$TuZeS zT{M_IL0@Yd5yL+dohc`5_DA1xai%gs_hfc-UV}4S^R-`w77Bg~$x+#QKvcG#!kNno zDrKoA(WwM{G!HGu^`?xBc z6R`SHDnn)b!3p$44slvdVQ|A>1DnB7c+^be9c#zOva*J2Ebbu-KG-^4pIGLT2+qGR zHFQ7xW5GL?Ir@#E2T(JcUH!3|y6c^<4gFNs)A+uxn}TJ3BllR80ae7rg!i=8z8g_R z+i*VC8fIH9_~^o|`7}M=j~~3eW!s~-!Mh8u&w1@`b-jHVoXPOaw7oO;(|5vo{ZJ0- z3EYXD)z#;NU%3v>;jPK=7zYI2f)2p@7hEO`-4S@w&Gl>Y;2;zp+$zy(Rhl-tbt3Ld zxwP>H1RAhM!)VMugP$wbvQAtf4`5(H)=jR$db2z`$v<7Ec|K1<*S>66aAl=qx*SVY<7JV z&*8s)ZRlr7IsA0o|5?A5&$q?CxtzKvq^NL2TY7TU!CX`a-cg3`ndmUoW|3DWxMT`D zHHPKiC_5~<=)wlzf2ty5$(g7y{G?It?bq9JDSAU@^|@Ac5FY{e?^<$}&Hm1{%vlI@ z=?50~a`g9D(d12slVMlimcv4i!~&qT5iJBKI1upW+P+#eH{2D>0XUffbUGl5z00mG zx9GFlP6Mj(H%-r{sKy&mjhm?WhZlwMDC}g1ojK*!p*^-|PuTm|oU*WU<%pS1&N*Qx zUxu?R{*g>EF?G2@mLfY*!dXef?)xXzt8I zyWl7ZygMyV0LAj}Cfj62XXE47;aA+^z1$*zRYV))w%vH+UwvNF4X(q4)zYskHv<-jvEkG0?HW-GrjSs6Zv zemQ6w%aGbnYqw^^{mbSA^a>oxiC zacu@7Z^MLcM2%zmuYn2CnA)zcdBleHVM1ZJe>t?>8oiOMXj5oyhGt2ugZv2cjwyYt z&59g_K|O{pi0xFCh1uIS`ziSxv|v?0OtgdSr{v5CH^}oSxj8b~*^dfr4%dbmjrMVSgdhu&~!rseN$d>vsqYlpKo z9havgV%U!0-6rcGLBjr5n&z3#^fH)6H|7Mvv)hVZn_)RwC0DTEUyvia zE&pE|_n9dpb-1ET7Fyr`Z5|yre~Q%fOwWa8Q3ONl?dq0CLhx|eaY-yg3UL)KI7YsP zzkppF+Z0-t0iS8)Sj}Uz*~|3|3AI^~o-e&C4!}sv$X&~kAK%7ADm*mjhD!F>&NXE= z#XLlmYQHS_@8b5?U+D>8p80d3;$2fPbq)}!$HFpEIG{7P9^uTbg1t!bF4MCs zW{w`j9DD=$MfSM2@zum?!EMK0v;3boont#s6RWT@G81iBn2j7T2YT?N@gv*esqfE* zf*|s=s)P4*LU?GCHrv?FGrhR8{m-n!$=iOBtI%Dz+0;ShCB07FO7X|k@^PJhfD6;P zXDv=vWFV&2+tEy5(#2IPg+X^uQ>zUF_{f64YpGV3_3-^+HvCg_U=toCsP!VwGPPQ5 z_A1oM_D=ZxdFqlx5;I&ez4qtDy^03N{AV=MF{TtTz} zL92-QALsP2b31xed&8c?C{MSer*kd!sQh-cVthup09_ySvrulYM48RWoXK*|p(mLX z7}^Uvr{WR9?)Ht3V*s5)XvO?JIY)N4|kG{5i=SbpJ7MKc#AWZdNZgGNkY>Z zGSeBp!!8JvqlQAq$hmpM3@2-lRZvPDhEl3Ra-l5GeW7)f{3Db&v=dah!(sJ@xP|Lv zo_zR_TpmIdRE=&F>EVY&iW)JD39!qf!5JCW0J;IA!x$}4pEB&(jTBV)kc2yZNW;ic zVdoC?Kla+5!>Bv)><&a;or`jSbc~!#Y{JgDfDrnxVb9y3s7B!HDC}sfU@FNwRRpQX z&9>k!2ZbjKe%-xyQ&O*p22X_!$_H%!^~;;axm~&;cEOdD@+-@1CqSCSWWjKBr9y4t z0%(`!LoDa!+!@ZuT{GCov+fIRCM{6&#;f2yT-fZO&;S|0$KLh_dBQuWl2klTQI8rf z`;e8{a0+;8M#`?W57`aRl&CSo1@Him_=7$qX}%9Cn4INy%Ao}lDtO)YJdfulR8R`R z(X15kI+|*Is_}!;1hP&y{Vz7Q!2~Gzr7(d_P22=b=V_7=CV(98F$?CDqp-~3CV=^) zZ< zvENfwZ#vgjna->p%3%yMN~C)c|J@XR$>#fbMP)h}$qt~H(esPws!kyFqt)M|)? z*9y+>=@}or$Vhq#a2}@en<^fcG3Jt&bPLYN>NV);%LtZSFQ-Y71kN3TI#0O#9_HLJ zy>Q@Ic>R>2$E~=kU0LyYu1mN66j(TMP5a zH29A6RAB_O8Y7td?P%yBlHG{hwK}6Ehx+6gWA;7x2{D1k&|XZLrJQ^1$V1*G&6bsl z;jx%~tv*+>kfWUk3K5K*!=pUGBoWEdH|)fMOiU$6`DmmG6NB!|#R+2SyKjF&`Qu)M zUGK?N7^jCy-VHpP4Sswchh}}zHT@hNT@=%&VPlBL=Ob@(l$Ta@S-I(fGs&g!7(4@R zeCoH`>;_mc+{&|SdV#ynn)nQjxgN6f1%a-&v&<-*=#HK?A~pq6W)j0v6H_)^Ulyvh zpfk06YBbB}=v;CEhDW~0;T-SE|HN!lxVp3CpoJ+P44o3FLvSXx(u9~n)`>>Q#E6T} z+h8P3ZgTkw3C3tBy4RsXvr+IdGfl%O=MGFhJ#Q84hVAaPoRR0+{&%d%o0urxM2T*O z_pp)0BohybKolZeuoYoZOTILd`Gyj|OtLyKq8>e%(a^YBtbG-pCzyW_}(=7PqHQDEwR4+3NHrvir z6BYkvOueJC{*LM746*%hnUOul!3`PBh}k}Nm`3U*O(|gHk80jD3l1a5VN6$FLQ%Sc z{qL_Q*{nL(imfG)6xNf{bj(O~KDzK&URqYgmyyC~v%}|Io^Qc*w|(9Z^4;l25IC*n zo&na1wT?S|Xsc#(@0e5ax!EG!HoI-apUKXNzsYVY@5Q*?idq>K{9gwSb#tRU%XY4UnNhtDtjG3$1(8T2kw*w|{723*c zb1jy2W-C%!>B_`J=@Kc-BjYZU5U=vuy?aquht( zc(}*(ypD(Ec*s{&_&ycH{L*0_GkQ-W{x{}YdH$K}G0o~VkUn$t1{4<`7l8#KLS$nV zpWBBY>J6BLWAAW>seV+|q#1A22np}k|;+HT@#$JU>Vs6m!WlH)iIeIGD7FNIF z?o(;^I@;u^tu}ibvy0w<+t9P^n2;mGMOO9>ru8^XV7L3)2!I#bq&0YO^RE0iERKsk%bZG%ea_>ZvuxsAJe3z?SH>cc$j?Im1!I>=ZmTv+h3Vs;{pG?8CWbmN3qKCqVymK}agKrZ9A7=m>mqEZ= zj{fx#dVDrL9!?wvfdi%vvME6bU9nqmd56d@BeKby3+OOewvp(LEdZxi1gDFMWXuE# z`WeN}AHHPz4}0(4i5?lG-hkf@{JOpQa8v)a&B%Z*T*7N#CLfmgpKH1T8B3Z*?e!@l zc-bs?5q3ukN2T#9e#cBS?wChzMYd#hqo0kH=d4kt=NQy6Cu<00FwI5#pKE;6a;`Kf z4;OeZ?z-h%J}-_bL5tRYsbS3-5*X<0%f@nwoHEA@Ct~R4Gwe=IM*m*)P%BY85EHP! zu#?(r*F|}N4Wc@YY^*B8P{hjH+8`u~8b4FT8Dw{_C%KnxB=OyqLhc6|{?gf?02|CA zX`Ua?g=1-Q|CM$Rob*{51Ly0z_5hFlY6Mn6JlnC?VK56 z_w6UKopVF%Nt$$k8^|DAe;8MR$gzy(0Pby8i^ld$o86cXRyM1v0vnsvw}MTWt)lLs;)) zsLU|YQ1JRpHs%~~!0G_nLaZltlf_{U7~Z?#f0jJQa;3FW<<0vwT#g3RPD8`&&uu`t z7&oG(IycOoTm!&D55#mXGpo-=9|yeA&H0PT9;Awr>+8SC{HXinuE%1P0#PLQcUran zPAj?NjBJ9=Wk`s^ljZiedfGa{m*nKK{catmdI;++Y z9C?;BV=S3ul5{xsKWjVpuEB*l&}|*sWqZ2ZemmbifNp=)Tpjb(XBC_iVg+`ZDUQpwyRBT*zL&a7F%4gY4FZ_?Dp)jUr31+DkNPW3Ebyxr(;_BIa5i^NAwp zmi3K0HZ3!0Y>KG>+BatVkH|`9F!ctUtI@Ch!e)mh8s@bOpJTAuk;v`kP&Um4t9y08 zBo?AM&t%`=`oLPfa~-(FpIP4E-u|aBuYe6JrP-VaU1Cf(cI;eoD|?yu@4#qBfAci# zM=&zXf}5dr+n@r9rCVw>20CpvxrlbS*#$Fc4P~Zjqu^rh3SF8FO_)~;8~rF=VS^Z; zzVvrDjigQ>SjD;YWEIKSdBfs8Jy1(xq3tMbpsjVdn1a$5ri*25pe0@5IVhlMwyKy*&&)_!rH0n z*^kwZOT&KT0N=3H{9T(-5l3DBvdI@(uOj*#W&e$ck{}?fL z!+YDw{kF+m>*PH6k_nAA_-LmmOJs%13=`nQb3pkmvDY^SxXmye6Ev*qm! zv#W2YXD4>vWQRxZpe-$LWpurjJ@h~TTXKeeLQ-PKkdGvNZ(v~5u|U_`5c_~DwuK5* zC~tZdY0rvnd?I-wH?$rjftFRZ(r!}AImnx{nWksX5W?*RpzB;^t%X! zdT6kFnqEqk7N*}tstlcqR6$7(kfmf7)b9NzYK z`4ae|^;qAvB7dXh%)_XBa*M*O-<$ujH~&2=^3LGE?*-EcRwrI7< zu3r~qp@(c%(-y!ChPR#GPqnKrFXsz&ui=I-M0`%Eb4H;DVqwh}eW~)WQ#AsjVSyMU z&uY-|HJ8^>Desx-_(s~SWi#e@FyC20(?)z9W}z?F#&Q>p2sh#1tWCN2f9IyW>DWfJ zsW6PyW4qu8`f5kQo-Zi@UK(8GjKTwtc!06lW<12ATuwJpj3NrG>_l5niBn+liYO|& zb7|l-m_|ieL^4>C&Ku z#1;2VZZ(}HG}hgNu`Win-uy0_raSkk*BYxAZ-V0(0NPG|IrFskh@j)Z*AFWWpq|U_9I9EUG{|4&L(jL^}&(S11U1+ZW11>pddqz?_|$Hin%{ znE{6Rad!zuTN|;RN2&K%vWIcO*u#f$NBsfYxqA&RvC2a=5#RmuH#EVvyXs>*zj_ET zHa%6vcKbZsO9+e7A~;s>TXC`?N3y*geiREc@-zXs`z{rd$WauRZQ#c@Zd#GIytX&= zd^j4&4*Pq(EB=5du#%EJ;esw~Dj3W&W+TetEtu)L3$n@mLhicvUF)e7#26g*?=Nff&Z8i%jv?d z5Xv`%X?(k{5rJG|S&J+5Cs)G=nooDv#XIf?7T`17Fgue1rm$9w(|g4H}+Auw)1#`UDD1Hp2F`~o~^i;lQZ7(eCitK=Z$}LczlinNV=K%_dL=Z3Ad7Khq zI%2;V&m-EHf%aUq8JLQj25Wv1|0-V0#sB6PdCTF>4vwO&Nd>gy0uzj1P>~e#f_8K% zCJlL;2CGjsFNlWe_Dm6$tRB;XUx0n^MKnQO+406{0$5@C&}Ef+a*$YMDXd-~SjL2kCFcAqRVj_~yA!0gHO%zWFmDAV6@fV~VQ&MWhtSMzy5;nEd-R8azUf#U2i!|AwGxPY zpm%tZ$YYo~nQ$$e4a z8mv6bJgN6DkQG!t2#xj4#fAcP|B?GX9nC9@qJbRy%cpfM8918^6)FfuXJrj^JS<;reabXPjKb5Ax_+c zu?k2pSY6$K9jq83%+AKXYP8Yx@CTSbKRulHPbNxCAD!HYgUW#1IHJE_N9$KK_`t*t zy5sB>tleOrDRk}59>0$(qMxXMvAteFKZeW8)6fcrP&(U_@ew>k! z?&ydQ#}2mhP#7N2=VVYbV+P0#jDSyM475k`h-sV!?>bfAS{`GASuuCM3ftXh1f1y= zl0j_d?0z5h$Hd!mpvsRuabv>H-&&eiD>r*G%Scjodo~x2R?OZ(^Z~Jei0OU#l8JXE zeeQ}D*m7Bg4-Li`A6i9=eaN1}<^&(@$T(;_O_=4Toe0;_1_Ro8gPpVo&;cEWcK}Rm zUJ!d1<_4Y1u?+4?lay-gOoQsEdT?%CKJZ+CVcFZ&AST{hV}d>mK~a-o7uu&bJ472R z_@e-p#QP_!`6Qx=tCVK^OFF?^u2pv^uG47?P? z762ZP*v#M4MoFbZ?m@zY7G|hucIqYfHGrDy8NrK29X?UVWMPs_hH z&VL`(Q2!i%GY$WCUnl7{afafgqFA<(Y6E4ti*lH6SHKGOZsTBgMzdFDc=5r$!Du>c zEDVHTC4obG0|VPa{x7{9x6sf9wo>{yj08J_t5A5(heSqc`$yjP`G|qPOk(@7aIjBQ z^@D;=V|l*^Z!U(gmK!T7X{v~9@KCCURm;JgClKYi<6cU#w|^m5KYWzyzN)Ssrr6~Ybv6$jx`cn7OG=Yyk7Tph=BgVa-LnWOq5o$6nhqD z`P_xUq=)qn(L;Bu+zIN2zK^JbrpZ7R`OWhV(& z%AcJ`xLWiNPbffP(wpz=&ZX>QmFrI`l0RaGSaw77`Ome)DApCQu^t-bTXloZ_#i`; zirz(NbJ+2sg?1{@j-xMuVJbGQS6>)lZYC%_=#I{%mxi2~=qb32z$L~%&abniGsI*^ zVCfB*Bwdk@nx$_z{>7?uchfMNei$lB)mn7$A#Km}{j?kEWK^MZ4y{eYIkZM3)9NwE zPX8(9>(en`7iWI*OLCnCx>GT#26>iJF z6tB;GOjlj+VoyMC;)k4Wg6(f+yHb zjd!NrI!2S)p3gDg80^WOf~ir=BclSvJ24;9a5C}}qU?IxV-{?^+?ll{`*JpXGi~qp zZ)^N}|5BInH(kbj4*IQQ;b<9Vk9T4w_BGqHgNERl7@eM#bx8vE*DXe)bYj#r5j~aH z5P|7=34Oh6+tZ`O@=^cSvGTEo3rw$ag0{!^cM%vrS-r?7J`(V3AivRl6IYJ^N4 zZ;4(W9sV4iK-HLqeg7D2$Fl>9K9CJPi&t9@HGXWNm5-3WIPCxRSlH(1%=#Q1!Qt3C zkGFxogr4toxe_mM1sgE4qcbwX*t~-c6}D#!sX2qI`E-@{Zj;eYA-os!Wzz(Zb`yKg zR;+9eGd%}vmL=o(sDA{s%##s&W6<*Om7iEm&5JG+xZRBM2?TmSmO@}R^U|RvZS~yP zmyc#cTy~-&#v3Djj{~CfP&8iH(msr`W1z1Zr&QyoRsvQtOS{eflW`}Po;M_g~0SFm6NZB^eD>H)N<{<(u63=zH%iUOGRzkD9RF| zsG_gGavdUo_*_cN9!j>L&Jnv~ujyS_FN{|$p<~KD`eqGf3ui|!+KXmxU*>V61 zdy_3&orF-;o=CGM30a$jP_0C}%IxY^EDH{JR}MlkI-wy`dKE*ig$hto4s$ioko^cs zDE6lkE_RjJ?0spjYt0p?~woXmg`9(sM*GwWT<24J#{m81{;po zz&3^bhrBDVgODK%s{_;wMLh_LD|DnS)Cj2XrE1CclXEfFzDv`=cruOc1bwCPR`_d3 zOpuNAVVB+JFe}^6QyZj=l%-w{YA}%z6z{YIFT=7@_T;f7|yVPgk-| zE*JYm`re^_{J^$=yM3(sFVqHO!x}cG72?ZQ*tNEu?=GWOYdYWmhU~&1mrpZLCfRH{ zK03o2MYb=-cea&QqeDsy`zGG73C~34N-4`J~54NgXAaJ z1CPLTz6&C}&~m?P3+y!vS%XdsEaH&2<8sU_gsZUy&;1_MIsqg>6av0Lt;J^<<0GH~(n`Mne?KOB&ddP4xA%VMM>uo-XYIAueyzRF z-fOR&7=^Z9ud8vQ&?gsGVuKvK_c+zEPC$?2yH&LH{*s?uSVXEhpn5{JllCvCp(-F1 zW+bcED5}6+`7ras=WiSO(Z-n00n4>J4+2HBV)%__xBNpSOk0JP$DD=oYmW8S=ZM*A z3*I2+z&BY=Rgl({o5YTZ1F%r;M%%j_@OUik-<*$y1MHSO5&J1& zI6|E!b-a679SxS~pF-}F$;q~zYB+URkXZFaq|GAIk5LU|^ORoI(NIeG)mYCLh7;+oaT1WgkhbW0@trh)D+DG*> zIKsEN8M+Rk#SC5*20|F_dFOZDkDn_j?w9_VFctGZ?LSR9VUpCvt+p#^h^B{Z%oEZNF zlCRnXw}ryVNqj)MJPRy-iEQO;W&BgLCMsQ}{S#fk8vbRNhv2v*j2c$!)D_5VNNwP- znJCNjZfK2jfp~WmeP088Ul2bDGU|pNKl|tc!|_wf{KK-L5E*KIWjc`@PL9aUD#s#K ze7IN<((CbQ=LejB)VLR5Z%qw0&daa*luTvCJ>9Fps6AywcYm z%lrZ-ijIwW^87+0tPOgsj(@;m({rH_f3=*4#9WK}7)K5JgPdg$t5;PwW0oP0dE4=( zpQ{4+wDbDr-~zIkZ}=<1+HR=9b{DR~Pch#xU4E{P<{-d%cYJj4Q+R`qV5pHd4u_l# z<$WRlW_$;KnhS%a9Ik`Ioz5XT>3AU!Sq@Tu2*V;kL{i)}!L_$z-eK@dp}zGX!T0cY zWCYxf0Xqn6sSoi2OF46wr3(D zwSL>thz@1Qug+2JDmHE{zr}K!_BH%A*WOJ@xj^2I+awRLQbbh^|O5M{$;he{U@`>ihP>e zK1CMyC#aHQ{%Y_icq8kRn!nn{`Kyjxn)Y>?^H;6&t&VpvcXfEYYj4X%pG6}CId?Tf zGF>g1Ce2;F$O?jL&_8!|LK0`xp)Ngl^(BmI_R=GO|5GHt5?dxFI2Ae;G`PN=(~u%2 z1r-NVZnWA9Jo2gKm#K8tRiZ$(2G*UFnqHCn>^W1lnc-PMevKa@tA36jXwK!E#fK-p z6kx4CbEYr@U@@Thj?WtJj;WmJPOU`A#xP=9K`D?lQ9$s>BeFT#c08R>u=s@HEf&5I z(0TuUH=}ZYPbzrV7;RN;X?Y0S0glhIq7zXoo^Aayzxz-#wpqnu^ow+f?JAbLQm}Rg zmnBBbLOYl5pah&Q!k!N~(TgdgDWdmGJjUVqfNl~#WIwt&9#*qRU&EMyvq%eZ_tbx3 zUoZ<{11Bh# z93%o0YtO(kLGTQ_qs87mr-a+|tj@8ypu?a)?CT8H&%jSiGPDgMNv(S^7oNk|l)jck z(%mJKBR*C2hBB-;ioNVk^-$pk$GNIRSX(Z10LO-wa3hAeV5a%t1OIrPfvk8Z zaNQOOYv{?vhh76;!HTu*bC|@%%#5`rO|5M$b8o(&;F`9A>*ux=OmA(S+c+CXn$M^zXlh$f z((7-WJ_j*hH+M!;!G$tH!AreA8Z*%1h@YKiN zSEXj4OfZhqZN$;FZB3w|OSmGr;4n;o}Ql>{7?0rE&Q%lR-mI6MY&J|pb zr7dbb# zxv9UVo9|O{D*jCGn@1Mhs7RPjo{D@yfyz5Rq{+LqG+K^KJZ8_B z#*7hBC1}|GX1889y{&Opff6F|PGn=K#!GOQc zY(o5rQ+4~bNI~PQrpE8+rk6~UQl1`7=<^LxY0tXla$nZG{H)Uk56oQ&g-)DniM;aV zP5fVh|M|zOfr>wvmmkRv<_%ryugPo9{(IigO+YpT^KyfE&5`V-_*xg&Wc)uz{T653 zjLpkmo;@~iXw*M8uV6*a*u0{TtU8f`Ga`{ksR1bE z1-ss?NY2vZR%GAh_y0L7I;4?bqrAr8Zy3{uOPo=IR9!N7K>pI~y2!xg{%FpMsM0|PMb)%%ETFyCzN~(h$Qhh^D~%Nxpbh&)W7-jD#85- z8M}0#&e|!*PD*h^IoNW@=M!i2WR&O9yfsn&)4da~Ffv;O{LJKE^x3r__&{yaie9>1xMV-WS)6a5kQ{nTy`g1|ncg%7{?Mo<7 z*5lu(aN-Q64EaWVQtdw<>XUlJt3JWx+}2qbCbvz$2EX+E=Ig}sjOlIDedk`&+Uh&E zt!ZAH@7$KT5|Ve)m!4bUI~RlNrgJZyIOUwyw&{)E@txZ=Yue0~>DM(OK+~M*IxK%C z-uwhH^J2;W7Jr!F5!d?!aS`WP0~-IlQf+LpOtr>`8#rh6HBNuiyvXMf{ArxtGI)^> zTZ6{y4SIeGYy3q6|Gj|=26)!;Fdklc1aR>N^P&WwGZpTYhnrA&@y2uw<^!&3gZ>YA z*798Hp&ufseZFsGpuf&TKTOf<2{8WWg{y*YR)1T>~=X+lIm{>2L2Qu(^Faw`oWuWgh z=$S66cV3?vILlVcIYbG@n^`}fq&P)xt^ox zA2RUA4g72>BV1m2rYl_Mr!C2R*BdyO0yY071|Ks&R~Yov0h<0ngWk-aL1GG1%JYOl z&*L3Jh-M`?ZGwu z{U=E|nLkhBPv`S$VM&xK|G^A+!zq%FH@(jqIP-Hk32^N+a5F#az98RI9<$%PRpAUy zK2s%`Z@GaN0Mqh6Xz(%X^P>hm`OHv!HW>7#et5>9A8zn}!=N|o|8YYlLoMeV#s6dj z|FXg79ECHzrktY<`Vj`bZP1(X#ti&V2K`3{9y9RaRHnEXZwLN#zI{L?h>N(X-|nHZ zz(w5T-)-PAywiMEehCk_ynI?um$=R!-F`1(rr^?en|$=y23`zI^Piz`@;CGCI)i?s zK_4;b&3t>+z+(pe9%ec&@{i$9$GfBu54eb%`S7HH$M8R^_|yEqoq_)G zB6923dz$~N8SuUg`0%sS^SRK#nQ!+EwSo-7D{mTc;6a#-yKKc$D_!wYXp3~2h1YUX0QaICfp+SG4L2t_Q6N8@l@Egh2 z_ZtJ}T9b})du~W2E7@tT`40<C`E1di{;ZMgq(?j2-=ocIGod*5?@z8fG`iBjA^3ePr z_0aEB^e<+hpUTRIOUu7oJo$XLE1dG1^8DDqH{+d-_c0HjJ&Mn(2EEDWj4DaMc&XnC z75%6Tc#Xm-j~VZT4D?eo;J0MJAIN||kpb^A@LI^E^WpCX&UVqO(v{6dh>P-@^?#7U znGfUer}+#w=*{|8WYAw~&|hlcjQ1e^cwJ-gG2{J?L2rRh$Ggy=H{)Gq(1#5AUm7^$ z6>HnLJ!SAQ&@)|@ z;`6vcZ>DRbK|c}nn*YlNy(#A*gP#2B6#v{H9&l0qN%+%z3KZ^@^K65@&Y-{8pf}@P zXwWlWJ@5PrgWl{%wtMKs5-Y;}Ed%`lgTBd-=j5??z@^J&R+fA&R=77^6$brGkm`IG zZ_u0Ry3C-z)}Wtj;7o6`ig%g8$JC$SGw5d-e12)roALf%gMPL_|BQh%-gzqCw+%jK zydN0!-!}NL}MwQ-jg)`sGc*hv@H{qR@|8j%gjCYZN zKWorO4L)Xh-Q&S)5Qf(;JUIIRUJrZl$rAQG=E0{b{5=moL*a)#_#B1ja}b70*DID8 zuP=M>TP5tP@ZgITeyxGCe4kPI>?oZ1Y_^ME8T8Db<%-Xv2K`oGI{%-@KtF_oKU`XV z&8O7B=i$BPbD4ot&gYe!Hz}NQn)TsM5B;l({)Yy=*+2f;L;sedUz>rx!=S&}kn<&j z-mGs89IW7?oPWZfPS+0&JZ9jJDcqYs9R|Ib&s`bl&r}uC%V)fSGe6%`>1|TDx7?dO z^xXE!%Qfhq!Lv@+4?Oh$RP?{gK>vh?URhE5Udll4;~)u_H(h6Bz%R&v-;@FWLk9f) z4EQM=RHc!pBm+J%1KySazdHl|`waN@40vw_eD)+MKg<2M_|xV13x#|0d3y%Ds7~_n z(pv`3`ZkyZxTYBREqK=PHY?oQu5U8v$!Cb-v)rIJ+x6WZ`eBNGbq4z18T8*Z!be(C?lg~)S=OTmNOxL9b{cQ&Ss||Wn&Ib*8 z@~=?*HyQL>3_c$k_&NhW@p3%iVsP>qqxh65+^aY04ElROuk+!011Fyv#m6=HnEL!4 zgZ^HF&%*}2ncm+S^gl4@w;4F&wN<=(3_fPOdky*@8hi#`fd^bnuNiNi!pZhN{ORlDs-&3xEs&@)~06rUFi`ac+aUNh)_ zVc;Jd^k%+&?kW)BB3trbp!lC=;12@V`B1KKubg8H`iBhq%ME%n-a8CDX3!UW0}r^! z|4;bS@qW|5V+MZwH}Qar^xN>K=?n0i7n8$x`l?hvG@h@Xn?1Px4(;;bs}wUmkEQvn z$(4lq`&;7;LnR(l{lCWZPnWnb&BITPul%yaR};Xcao<_;d5;HQdA7ubiL^mqH&Wuw z9HipXd>YP^&#OFmuflhF@NSi1l`7quPhC**ndiat)puYeD-$kF->meha8zU9b*f$p zlV<~OQ1yd6{=3&8Fi^=#VpXl4t_~!@K2=l+@bmbkvOR(E#{(+d0utb2xL@N>*Ed!4 zzSGn@uMA%rffs2m9bUg0jvuUEnZmEqgz8@4c|H@*lx=_q*YU4WZAib?Z9+e@Dlxn_ z51ySbDb{#ic*9qy@MV%b@&9cLwjv{0$VplK*>jY4Wpv(&6+oyNq=5 z>+rp*u4;PKl=Y(s>&<(3vxR{L;MaQq}&n#f+ z!cV2*$JM1GWccIp=MCT5G-uAVrfb^Ho%^){UM1px`JenP{~ujZA;8M>N-8DNaKi1i z_PFe4uQV7%tFM^BIftQIe-VV`&c7AAG%GtV#Sf0&l|IqkY;%BDBtP4ms1 z+k%JbbLPx#oF@KDrW>ZsncbR9 zQ97zjkZ@n$w8ptD9tNeOO3y7h_q-ITB zEY0TWvs;jdH#W6Q^YOU_JFjNTpW;<(6L%dk8~Aq4?CYDjCGOjvTp3;IN%VQ6l7aI| zlAlY@EB68wkf}5UEt9CXY+9PccFE+zWYxQFddqjF>5{|VFH|0Y&C~D`2J3CDvQCO! zQ`4?%pVKytNuN1q?oFdBM4d{ltI14Sreh=5^p=+CH>bue_A`2OMzT$+&C}*xH@nS~ z{L20YrR$$aN^4VFYDC!7>5XQzhu?YU0hp-UR5^3eTQSdLEl5Sr*JvWND4CSdqcxq; zcF*%tjXpnFuJgQdj;5R@2X9Rp?WswnqlMU>R#!S&h?9Z}(MwYrAewzM)YRN|D5K=; z#T&WJRaW@MS##$=L!>DKz1eh{FS&x;(B9O7x{;KqN^h!1c~V{JP4%dX6q#A*g=1@x z>y??_P3zYKnQ0Olg>fdzm}(*kpbkv}*b-C39F-1aQKV3^3RdwG0H1>rMDC-h0^k-xKgy}(HTS)T~>0|W2}%= z6lhsV&!v?f6*Vd)N>5`Q);JyDdNFY?n9th7=nt`t-#E-!k%sMx7v7@47>Q%g=p zg-7ZNZ!*vKL{Z@_fb&yTju9K`=`=fd#pG#rZEzfGOGmE`?SUZK{fr@rgoA zlf-fln+i`kl$Chubwx_Kc#68*lWAoonew1trj(5E@GL74O*aJ@sRYj zk^Ce_YGx8KK2R)@vftaolvQ~0(L2s6tMF)PsNW=xWfdt3(L+$~At>{EtMX{uyqUNQbY#gbvaeSJBmZz1hoLV%6wjwQU zh3Lk;GE}5ZTY1`4l&4KadD>Kzr%y#%8Oo^+Qc_W#R!(fPiIf=mwAVGp1d!^H<_uxI4qleJ$%!^ z3(+m9A3svwq#EEU|1yjKliqvV48Ek3-g^hPWfiGvM?_m#clo3`yFO0@D6RJ4y2RJ4y2RJ6MkRJ6MkRA@UdI$E@HFM3{D8O}=|Tl%yKP2=S& zW_40>XH;4lMyHoIZET~{#wI?)Q(_yPHf`c-CY3gAiYwB_Rv~niC&lM`YG$c-(0jh8 zYLpOlJ9=N;^nibm~4 zOGI-hH>bOkeslUg$G5jH2~-dMlvNw~!k>0VpKCmx#fStS@9K@_le#j(rL!z!#pJ7s z2kkkCtEIujJpPXb-p^l4a6r+QsPJ6J;x!NnCLdcqCirkK0P#A77wNmg=XvPqgConx z2fc1_mBRJ2zTd8Jy}qRJ{}A|q#JY!;pGUT5Vbx31Yy5LqD50F%Hc&00`o5&_)gC#| zRrqfduIVpQ_)ZV~B!Lg`>Gc~OZTVl;Rqxy zUA{k2_(+9o`bPvlz*i*66FJ_Ya9tm?JTEDn>vp^}{=UM;NI1c#PvO-H*Yqc2(TeFR zQG%!?Y~NQDu5H`3oOA_F`l$*iR{X{(T-!uz`YRQ_+(Un@!q+NX({rtw^}+JUxkBN( z-fHyqtmrm;jeo5->dj&J*Lz3u%h3s=+9O0{8{1oXy3eaer{2G{wU#u zemJP;hbVew7U8=X389=t3Ll}uO;Wh+;ol(e0lp_Z{BKnFMi0JP@u^dMwBDr)YQ{TD z;kur5DSV|T-dzg6N8x9xc;X6w!b5*Z;W35l`g{Tw;Ti8+9{SS+K0w%&k+shMQiVV7 zN!O(cf7OFut?;)z_+0`Y=-Z>>)%oyKg=>Xfq{2O-@S+?E=<PTLeDPH(AM}`^QBJ*Y4rIs=|F= z;j299`h~)&*Lmswx>yMu*yhPzDm~V~3D?Icuh0pNNZx{FgU!f=7 zzbjmiH&ifR$zWOkXDMK$%8zP=-{awbnZO75Dm?seQ}p*K`m+?DsKR3&K0i@>#(4PT zeNM`=QPFEXdAh>i^6>eZ!uKeAq>A@qg%3eLz)R<6ox+DI{0#Zp*P!r95B&`aAER(R zu3o6{dJp~g6+Ttrrz-wGSNJ>+{T~#5tHO19Hz@pm5B>83&q<7nbo>2C-~)U$DxqlR z;yON0)=zEnqq50&hQjr@PUE8#-ry;h2@0R(!KW)++hA%wHz|Cchd!$C1s?nt3fJRC z&F3+Nuk_GwQ}}%z{B4D=^5Fka_-YS+BJ2X$e%E;LvlOn!rCOc~6&~}@U!m|W4?bJr z-5&gQh41v>_bPn12miIg_jvFQh4*^!mjpi0w@TF?U2pd&{0UFJ`c&aDh3k5I0zSyt zKfdarKTYAg6|VLCNQEPaxRhAF3k5#FchDo}|g&|A)d0JoJw%yvT!hE4;*mzpd~}4}M7DdVH(n4V)IUf3V72d4yFDUv?6~4?vf5J(!J}g(b zmgkEKU+tm)s=|Mxa9yu1P~fUQl?EhyERfk5srGhwN9l?V%rdvdp)^o^%aUxc-jQ=`B_GFc1AW zg%^78Zz^27!Pb156<(p})y=m=;gudfKUR3P2Y*E2mIvRcaQ!`~ z{!?WB=w3F;ZIKjV9t{7b6jv)19zFN`anb#N40MpT50)FZ6x(xX1(7%+knH3Kg=QVgy|EA;fW#FW*Zk2Q^RX!|N zcz2t`*Wmk;S1b6De!)WdT#fH!UYB8hfOw1*8&@407OrNzC!YU*fZ`6 z-V<{EPU5RT$Lj*%>EgXK1OAxeQ}DD5->d5F3kom!i^LZoe|epQ`p9_KbjfF}CpM%z z60qKKKI5r?SK|Q64OV2QZ*^8+@eTyE-3d6+e5>s|ZAIS6widqOJBZUioy|2)m$mS9 zAH309+dqix&ayh*9psN$9r4`ITE^Flzm9jZBX4ANypcPoH}ZN`ctlsn>n9J|7wU)? z4%)l$oxZ*^4hMk*@vwkNxczCeL!WnvsT`jrtq_+D1!f}RYBWU6{!=oHq7=JeP$VGj` zpgejpgnWJl2Mw0TLJp4qYx0GvUe)>i7;0*$aZX`9&ch3=n7}6-gPv0PLnst+ zXs9!ai3uKvv0k^=;Cwu*a~#^BI_TDO1h@ZL95pG<1JAddVK~2AXkmG>W8&00b$~Pu z3$F_|+J#ejXe&;jbzZgIy8KDeskwf<%Ei%r^;W2A=OlOVsiDZL$P~@(wR9nk8 z6u>ejgcKudWx8*G9WoqOp@qxwkbzS4^ z!D-1s|HiQMy44utS;@8T=^>nKY&j1UfLo2z^o-@)n=c}a4i&dYi^Odml@<;m&K0+4 zow(gwk6VrNz%1Mlp(Q|ZsIu)mT1n7-fKpILeiJP+p(E)T8(9%p!DV?U%Y56tqz;Mk zeZIG6u%JSt4P2fH4BH* zBXUNB6L7Pj!ff}p1tA$l$W_N^QvRzT|I3JNXW0KT<(KD6`zil6E7Ae^x8i(h2tFRl z2GZ~(Vvu)EaC0C_c!A|ElXh5mdIM7XF^+xC4i~=xwe@<~|0dIwQ#kXIz$rO{jYE$&wY-2lll%nt zP}L``-wZi88{RI>Lfq?-WZU0qyX`9{GTTueVfV+3D(rrr5rhBB_qF+r3PnalJ|bcY3O=eN~NmP};Wb!8lPi#XhGHsEMm zB>BFu^KnQd>~%!?MsmW27zul-n%42l@98}U71{hhfsn~ zTdpiYcTAS$e;TFNtCQ8&4!vSU+n?!sv>8I9`(9BW!#sbTsv?SI*!Q}^|ESx%X>Yi9pNR^R3LH>1A-FrFxCy>sD+lZRW*mr;pmX_QO!=wo;fz~g`5*@NP@vY z7b_7MwiY5wd7`!wO&+Yh9kGQRalSSqecyJaJ}Zvd$b-J81Ixd7gj`#URD^_(zr?^2 zrwlVt@m6LS&Xh(LZnLA8A;;E>96Qx^r!1r3PcyqVBfC)hs-8x64bAi>#Ju_;^Qw50 z<+d-gqB)(GD>AB^8HM-AsGFq>3n2ppz#-SDsLLpXjSLDqTSP>~uOTCLG5VLnQ5-*v zbL*K|14L$(+EqJRUI;mx*&4vK^-Sx)YgV*oKo&Bs!}23iaC9qPlG&AI`!_S{_gM*V zdqzq&WwjLzuTevf$SMlm*!~Q{M_A*a?i)f;dlVUpDrgsXg`+j2*!~0ohNr6$%bM}d zkmGr3cw`;>7hhoc75IijFU=lheD+yaZa)`&X26AwHHKAQ6h zexZ8D0#;;quT{L;a_~=fWv)v(ttI;dE8gM{_wLn#7Kg%r(~2BMt@|sA%yN2Bital0 ze&BJKMW=PLRn^tPlJ9zcHWN=J95cx^6_!1Eb+1G$QYHzt#-yGe9oQ>#*Lk@-?F=Xma zWa?{49c(!}*ncw1Lsg$LQy-Fvk?Pv%#bNawcGYI)?GnDhvG@6we-kQaSE!F~pe`Ko z2B*%GfO#8X%4^F|5D%09vZGVFf|u7_9(D(@rGyrC#PGg6)~5zaH$i7lSqZ%jon4#I z*#)(W_XifABTC?IR%p~~Sz&hsR-6JDb;okHqorH!&EcprUm{UW2$dEDFlU)1M+^}P3LkF$Tx2rl@-cVI)0?sc-VNXICJROMqnk+E- ziMCzTXB~K1S8xA|&_UZ!!@J`SDAbYdh-xwhImmG2^noz+jsI`DH}!v{gqY+OQizF8 zp*6{!ajJ-al2bU5!wZP9TZw`1D4eG*JI+va0;Opk4oSvG+fEmfK!m^}FKL0KH2JlQ z`vQwkMY?TQ)LUc@>t&er5@%B*mv)4muG;cfEZ1dSFW(>9zQ=a|AS)}{{EMgs2#I$~x`uvfLprg`6Q~z#*di8&X^m+ z?yY_isqKtuvHW`(_im^%3TVd7EIO>>ea-Td?Ov4*#JwGHj|Ow`f#7VkoTjz^4t-k0 zT7GnW`Y>i%EN3t3t-FpvEVNLx|Mh5sonn}b(x*NZ@2a*Y^r?7ubDp*wjD`C;EDVLI zPYG*%`gOs&SL##Ad-vggRiBD*$@-K~dVMO0-6(Ht^DbN6vFX#h`}OGy2$ZT%3q+(! zpQ5#=(Wi%?@MdE|&T?K9*~uW7a1#2|$j?nepNf}N`x5$;V%InzX9+iTot2 z^eNe&2=*ao`+rxTlB;UP=u4$OMMH)@F3E(vL-lLeOK-ot((ix|2aN=}z&^(4FErRd*8By7N52TIo*7`(M|cB3!cWB$Qrv z3Sw7GGa0%QL;ItSMWyZ(L;Li)Ghak{RNXlqi$hv>GDt?~y@QSKJ?I4yq#)8G2dNH^<+R{rKV!_lAU@DF|gz&1n7$etDc(Q?qBp%wjOVT{C)&IT)bj~T!&oELVU4q@$>DnKk#^Yb*+@osK-#MV&9 z8yAbUU9r*&@VwwU^k#S+FAObQzl1y+?~%Nh?69Iw6s{%|nE2dZxB?y?(H-h|eT?nI z5nyO}EIeqt{CKyWE4yuHZp?P3VS!;<7w!iw=gK|6dPPe57nHGnZI3`XU{qV!5Ly@m z+v*x;Jr}Qc=lFLF0-u=m6-sY)?7>>)xS`<@n-HjD_sOA-J%xk17rr4^vv*@PyL;h! zxtcv+)?$%4%oJo?gUmwb@8VwL{zfDVpYU!@p)SAqW5X^cxMQ|!7h+xDmio|vzl9p@ zh5xiM2Nrnbmb$R}jiDiD*MzEJnDN|&QtV*K2bPRNcF0ovORYPr9MeLe{(+Tillrfp?I{`?bZuttv}H ze>n^-MpFT>V4G?{N>PhZS9@+_3(vIlE0$)xT4)%;CbW=Ru@)?9oF`ZD9qRWQ+(jyn zqCY|hHp$|7odFka?85Epga+Bb90WHOj5GG1f}ty$VEo%qy-*5lj^q%Zg=dxj2&Ica zhZaF=Tv;w)L5{90t@vnYL4y;1vN`jLUw~IAOx5PWo^RNeiRkw4#O)~54MZH5BSn;S zDjLk_pmM|)V2#?wiXbM}OjD7)HJA+A{(&xW*og>pk$A2@Cd=A-oUEx42KB;N1g0XP z5wD4Yw>o+f1>f=J$%8&hDfWf$u-uaiJT;S#Q~}bg{VR(PS&5HQyzzPHHUnqWpaGt- znCVdcffaeLxwiZ*baho{g&ZtHV8kk|YWPhMc1MS+-mx)xufXpyU}S#1Z~j-yV?Cb> zb}qdKWT?)4eX+26W3HfnBe4d4CSLZu{4XZ!OvG`_CJi?t<|FY(yGiL+tG_B^IJVyV zb4QJ#Ati=76~nRh+&@6w4m!2yk~TI6zZJYXIFu-(gt+D_dp+xy9C%6iml$WJ?uzOKOXY-X=}SwqNO$SAO^m)ky5E}+!pFz5GjJ+rtggw+## z)i5X~u_i_bKaF+0n(etMD4-@Kv$Rprm758HOW*-(>8DhLUIhKo6woRCa z=bZb8ahEh=ndTkw?Yad_F>}9)IU9KsF+Id^c64GEXH~IkX%!ztXL!)^AHtA)AXX4h z$r;GFpO1y%0}$oZ-U^d@SE8 z{?jTvWA^M%vOe72U^|89g{!u={6eK!eUdd})@^TVy(O!O9UYvl1hI=9vOpbm$O5$% z!<~xW2~I_B&)K53L~rX375|PzBK3Wnkf^{Ty&?Y%a!e!=?=E4@=VX*@3MdItA#tCw z2Fq&8>QR{jMaba6Xf2{ag&W`B7nruN3yk*#zSRXH@i`TWPChwX|WBq&#bT`zNa{1PQ-il_ZJ9`CyKjx<>Xr~bO4QyFeXEX2YVfv*m-r~;sZ!~ zGd=>V^Y@RPmxH1&2`r(ex2ndYT z&Cq^TNL1$GUJ38bAiW0&C78V__{1f(fv%S2Wi*@)M7z=K|GW@QV_d->h1Ce_{ zX?48ew~LW;le=;)Ow(fB0q?NT{$0s<8)z^{2PYa+g`=&oLfD5i?G5{T`3*Wi*dOI3 zxQDA=hW(DS1)2FWYD#Mbs?T;rVEa4p>Fc-syO0OnT zk3}`ZSH>na$`DP#cJ`q7p<$||E)?Bk`-Mi?SkBm7&qo+mN#bvc@6}i0-{SY`=6DV| z7qp-FH*inUzN*oQs>RiY%V5x@OwZaXR28rrgHtW1E|+g>oa(7iqjh$12XbUAO1UL} zypuCP)rX#dtPP@aFpQ|44i-^HA;nO@A}O$6=z=|qWxLncfy=wLJ1#$5{1o`0o(fTH zS-ryU4RxUduL+Bsz#}(UVfU*1VB})oBxgu@f~5*@4kNIg>vKEDO@(sC&)K=Kz(ghS z-8u$FvupSJvf932WPm#b=?!;@9AJ;9dK~i>{|VY)jT=NK@;#vsoQF6o6pZXfXK=Hq z(wCu1&t*+)4CB+N%j!6Iv2~z3G(uG9O=6t`YBjotjoE9fK)q!}*72P$u;Mf%#76I6 z%ih6?9D?Ca1mY_atlPXhnCa@87#;Q$a8&tMxX^C9>&U4V(-8ibS@S;TG#GS*D&6OJ$O7Ls(o5HpuM8=ZX-VB~lB+s3pybf|@A`Y6HHEi#s+gDM9M8 zpnG7djcjq2>_pTlWyIcypS50NulVF?y)GH9sT{d&3+u&K?Z@ylgwyk7kMusgy_Oznqc7C>vKcSUl^)du0h3S}eJQUJN-qK+>&5YAt~{Dg~%46lr|a zKAtu{Plxcj<*rx-)?#pVGy0JE)1_8_5o?}c zZbyebi`PcmA&1OuCsftZdIl|fkq@MVDQZZSg={cf*LIiim0Gfo{~qiaaf^(2hKyJi zi=b022IYY+qc_oFXgoO}xy6KqwZ%>fQHU`D28Y{G5M+W*4s)uX5Bp&QH&`~44$({u zNqUMccj+ofBfAQD30~^9x&6KZ`>)9yC?h5N$%;??v+k zaw6m|k=8{pB77PQLhhrSm$4%M$ZZdYgc0Fm7%SM)=;Z+hQJJ?1DH2v`%)1X^-5rQH z4CzWDH)kuXGq#9PC#+q1nkBPV$xNyV%`N1>Lg)ply!RmQdTjp(%)442$DlP|@)_!4 zSIhGjW)o4L5T(dHa)B{>iRIsb+|x0#FXbENUM}@9Qp%LsdWQRfN}yNN1ux?;9Se!w z3A47~<(AvpYq=BTs0ot^1$T-e&f-{L@g|WwdNi{ZPvx8cg3Lz3@7;s=(CD|n+jgBA zHi+*vOMb7x82tDw7@Jqx(YE8Wkui3$FwaJUr7fv@Ndv#1)TnTxJGC+wbrWO8->(9H zG$FBRAnbm-VUja-6h1VbZg~(B*yyRE6Y-rUMql_sRg((ty{lPR#cLQC`L%{!k>%Dm z!0Zi%NQ2Ao6#W#_#Fl0?Ufr!aT8z?|%JP^>S9B-SwF9gz-rf57-{cOry`S+mL#cg_V!<9eh~e7GWw>ch1aWFs$P z)%qEdNNYZkL`u>+QYX>>k?M($n95#+VJe?tDkJM+cti@hDA8YX1ZBy!qU2WLDR4$L zCioVB3YjLpxBth>k3yK`M=_3=vV$P-l;3VZDdk77zx=41|9_PqCGnIW#W`Xs^U+Qh z$J(Z;NeD4Rf-e=J^COS3?)v7BMV~`0YPr7?I9I>+(FQ;8$nSQGBK#3mC&o0fgH*4m z{)(MdwU8|4KXs>26KNu%ezYQwQKQO;s8$e>z|DxLhb{L<)H3NKB8&M?K{1I%cV}aK z0#|8c@v$F?+Xme9=SbPd0@@^R6XY`P*Rg&J@@H|=qp*=&%8kWi@;3G$o;JtJKNa8) zc-tJG&Sl=s@lCjil_@OGh!wkg#~@>2?Y`QM*8YaM=8LQ&l+`|%lbM*|jDHbpy_^$X zS54A%tGd{x;oV4A1WvXSUM5(Aiw+)@AIH%tD{Gt!#LJ`1v{Q=s55y|7=8;x}`%*;s ziWFhhvBVM|iWrjGgIM3aQtaMr!0t^<>Ia|91xK;^$W@^_>{`Uv73O)@u~J~}tPqRL zUFh1do3pOo!Y7_{``S=oBD$)%_+Gvi6>csJKCj#je2)-HtTkF|k*#8bYsVWo7#0>< zBgPF)EGE`jWLRxs@lgZ`xmRP_`I7oeqB*`LvH53WGgM*Z;NZZDUt(4@+!%u)FcvSd zcOr?J--atJh*^W}NZ32)RuoF3YUk!SE& zw4uL+++nBLRd0qOuVM93EN`_9!9cW(GKr7~#1P?PY+QN=+I}1Cp$Cy)b_lz2!N_*6 ztOGOKotAI8w_6#Qo{S~(GEAqWaAkK%V?Xp26FPJ735upx)zx}DN#m@YT%|_Y9G^ub zdTC##y93AmKe0US70jrO>~1N*j2Avkym{CH)ORTX8Z8L5VjIy z0tg}o>+lV1={e%goC_GG6zqS0f3)p1=7$n{qbWt`ab0z+NMq4q*2U1m2C*$Vj4jgP z;p2-!ZoAJO{;eWWZMi7n&a3zLIrHjSg{=^%(BpNErC9+I7Dgf6JoGWvbMm*G@05^f z*l8#T<7LR1T^Dk%!!ThAHY@Ltb$d!RA=|mlQgvEnU!qcrt>8J6^mN?^sssIa#4b`T>y=L7DN=CVPM6}AJvvEl3@yJ~mXc_S1J zWreU$Go2 zEZf53IvVpu`#ZAQPGvTRFb9ZP4%C{A^xBbA}5J*=oxeDOS5A?)~eo(;Qe z#5bVxeAr#P8*#u`1Vic9@b{sOq|6EzziGp#Hs!#axV({b3F$|fbL)HYQcFqjcZ`ud`c?^DO;FQ4( z4hk8(HgHuJ-+qDN@pcHq4?uWK+UAPbYXehX#>Zy;E|Q(8m=ux;$o8X2lkDS}VDu&_ zz6M6PwH+$KSSpt+M}7@2r+z{n&-2wq1jn4o5QhnFv#JgT7QKL>BShVRzwP*2A1LaY z88{h>SoIzFX+_6mA;Sk)RZq1}2)ipqp>npF+h~hlM7?5eqsi0o{jgOGV|=@?8D%2& z$?XeF%{jyJA4W!9m2)Dt5VJVJs^ztiTW7HVX9m93abrPg0hN%>fG#>X?0RoP(tw(;g2hU;)Bg&Ob0_3vpu!_d8dO(2boAUST-r z3r1`EA_ubqckIH*>B;+8nVtQArVZB~1V>XoB`7*ux+8G1xrCQzJJT^Nxu^yNVuzPyYiO?H+*u5y|+_4hBz{6QYiw-1RT)j_*+yPj1uM{u&t2*(^ zO8lymziej}=Zg^nzZw$1W+i?#Cw|RK{91rt!N_M>ZBsbF}$+WH3_BC|rBmx{rI936+< zbHmPULxW;SEF_p!f~c*|U;+5Z*k;v*-8^^-sfJ1ea!S~_1p|?b>=Dz7LJKzltA@>9 z(UbZ36>>*&gdhq8l1j@z)Z;K*fUrG;(IJM5cVU=$DmYjeU2<<9=KoP=uSAb{DaLq( z`J(I~f;fI%3~ofK=goo~Vdqy1v>4YkqY%T+uU7%E@X6v{Y&Bjvm;)W8T8!g=xDu~K z<~?~Ii7A80eFQ6%gfJxM?+GOAOPr z$a0+6xqvmLUvBo!qEsKw2QG5-7e4%wa+k1Hxu-FE8wX-9KhuDP(Mh{SWx?LfRRw|; zb$)FTewD|LC^e(@NKHse&ALpf>jVoC0d__$TSYjsmPP5Cf4;?~C|tcyTJC+T@PiWu za#V#qdVxpo69rB81h`sQ{hHfba$rCY|=p}wcM6Vv~+oYz>!JOV?JRA(5p(*V0l3`OQ| zjb8)?M^wG_DXO=gLpG@129ae68^|$*HO^ev$xbeuCte)on?3$p&NduL>CZ}uc^0SF z5Oeb}MNowZ)Wn>+iP2x=y*i8E>gby27s{^sht~Q$-o$dRz&IbfR1a!YECD$uBW6VX zkH{?;&aI%%wG8J&V3G*YR-ip8!L}71Va#`-K+WHJp1|rmM&H%BWQiqrpL<#Tk{$DJ za-I|8T`=0-(>6{{W)|N7TRPiEU3CL=RVbfRrp}mBi{Hw{lV~n537-|0=1+nT0r;M2 zh2=rm*R!7gb2co5+A!K$B2XHKb(UFd3b(I4KL0 zVm3F-9}5=F|nzJrYc+q=0f;lu^2!~+83Vc}}=0G4=Iv<45B z_$qv00e?m|)^SjO%VIOJU2K+WUS&%=au4z$}vd&nu&Ie<6hZoTTEH{ff%2rGAV-eDT!c3|E|TjF~B zw)LCgCV%hQBQ_|%ZLoAt_-&)5d$0WB!<3Hfm_wbl`9hq>_&+rfQxa(^IviSux+m@X z-P5gwjnZLTV$uSGiSY2b7@7>QhSwMI$-Q!(?O^F~yOjQQdYub9-8IgR(8Ar~yAsmB z0k3oMLH-@E!N*2|?G*dFO-UL;MkRK19tPdZvRb-(y@kj*lkeK32GGx!OyBZNJn zPJ6cv-xtnpUE#**@T~S$xbf@|=8OW9o~N0em^nyZnXZkc1J|Yl*TA{j4s5Lgw-+*T zTb(Z8suU25JXOzG^z5d6r+s<~m$`roCuUo;mK_lJF4W7gpxlQ=YZRDZCU11wAK~Xq zR@*CZy;kGA4nr8{O}JpAEv-{~4{Zi9eHEl`idLejTh5~e;fQp%->?c8etgg=Zr z+#KQd&32+(k%N~tn#tJCx_ROj$CkRf;2Id#wp!R`j~)=iqVML1Fr(lOt_<#9D5XJ1 zIIObgx!_@#-EImlIG8wUijnTK{tAUJCJx<4g-q}^ zWlM)uwk!HG%%U}fqgTPiYbQQ1UWREFIy7Y=@p-O53#;KU-I!rzo;<=;&$gnQUbzZU zf{ExMoh}6KrV$FfeXR-=?+E#0io4jf1t9_~8?(da(t(pKZMuUFuCR(SiW0LsBeECI}&E^@Kls`Zt8> zs-v5t(IuHFniUOZ2@iKo$UioKnDh;|5O(jjI}G2C+R0cwGr?81wRbayunWg@?r&M# zNXOc+vyt{K2@h)TFiW)uHCkUN$zPzOv4_YGE4nhUh$B?>eCxQdD_GmnniH~gY#0(C zpF3>#>b2qGeK6`R3Hv*+{Qn#V#|T89Y4pa|3D@Zfj>B%EcMT~#nzk|#26q-5ZKWYG zW(=O<%tyF54*u_k{XLWzh6tE-sySI0B6Nxr!9e4A_PzJK+g!D_q!gYhnA^p#-dG`#pW__hG!%jRD#!jLp`9*J`*y ziwR|l&Yo`2?h$U#PDIhbX9p!mGiiWp9TAgogSL#IaOf41UdN8=1`S3i;rlo-nBoHs zPQB8<5f0E?#-tsfQS`wc?`PLZInI}IF#FxBp`89puFr-e52fp~@O>Hmo>j8q{i}Y@ z&OQ;zI0nCGYnVl8{hpZEs??fLQ zc7e61)(>dj|EkX(5iZ&91R?0~G(OM-v3oCXX?>uLlWL)ew<`A_nrC2fnZW+QsRii+ z?GwOI5Xl1;VVDO`HDV%yF6H)tDB%MQrgYP!@!Lr<&BCP|dwLp1Q>Q28Cw-uam(0&! zF*a8`!%p7oQ;uZur9vQjtot*}!?DyypFOez5I)eJf^Bk=542rLKF|iCC#m@iNs>;` zUO-qe2$8NUu`dbTF!=84^%6<=M_asck z`otgxO=uNV_FAZHsO#E=4NCW8wfA&`{jgnzRO9~SFT z-B6I|Xl^J({rFd0_%OgRxS{aIoxu%-h(6(lLKy#Z)b2DbNN7`@kcUyhZkD(9D9P_B z3=eh!JCaAq0-Yq`9=m8Mt_^85k;i?HHl%&^ zcrsJ^Q*!$k{q|V>iW6g)s7yqP;>314zA-%Y^m~mwOJ8Jr~vr@Gm{Xfd=75*QO?D$bglJLF*$B#S{6N4Id)~4e}cG>7Aj_mlc zVJ$*oPe!cmtElm+5*@+uW3s;czQ`uiIl7i3RVFRRBiH|jv>c;NujTm0&~otK zAhcW^S`|KAqi!`DW%M?!uOACIl3BS*bG`ux*A*W)pAGj&nP5G_-BNVv45YI zQGQ&9SbUac_;1E zH^)1;NF0k7!j2Cw|Bf49UV%Az4B|LD9G@*+ot?#)cEtBfk7swo3mGORZ~U0Ekeq3Z zzYYU+20adUO!?l34Iw!&2B~X^H)*?Zv5O*|{gK?4r?vz2J0v>?T>?BwVX<rIh zQi7KF2YYDRMZYlK^#pb@Vdp6<^EuC8H33tP!ffx5u(Q<%i?p|d+-!bT*JHsqF;71j z3xGapjMVcjD~g_kDrj9D>#TDrJ&~tPnP_l{B*ifMCf8#;Q~X>62&}j#SI&~V*)W6* zD$`BddBt|7U`DURcG_cZo)d>qR(A{ zw-DOgi;r&lbf5$IG4gN&`uTu25m=kiw>xG{dNB*Nm)kN!ReM`L48x-RChQP{Baw>D z@Xn5B?3`rSTKgVhRusC%Ee#&>stsb z|04VL^b%5a6@ zws*nvn3Geeon8G5D|S`2YXZ^VA{QmtK9o)KBfJPZd*f#yt9id3cjO~SxVHOaMgju` z)cfCa=1Jt-attMqnMI=b?&JcZ?f!W;Zg45F8n=+}8L$JdLy!_3seF8<%vl|OSFtZ%ytc$?f+0^*UI@!zeR8N%Mo5K}jo!0h!s{2itd zX&3){88)MT#osnsly2vLI8Fhksn`j4XZ*WD66l}*Kk-8>nzqely3+#f+ehX z&O?==`aLAxIG+fKdSF?_vL6`o_n{44l`}Z(e?y8DZ}}@e=0s3e1jP|k{AL>;9h1jO zfxj5yDFQShI%W_oq*W9&lva_#IvPt*)iPdEhMl+V;t#mIWc%YR`YocGu;{05DPSvZ z7wb)JC!;cd7B21q>4&y|58k(JDPe(=rb*DuxX>4l&MAbUv|vapYA_Y{(l9~}`)Gx1 zpX{@vbD<~%Bb3i3Fe8iG1dCfG3m8jF7Br_O4^}!_G9w}|nIV|uXeOw7yT}Far-=8H zB^Ovre-Mgnq_yf!2&A061`#MFKf}vP#p(B>8wReea<3U{!&9a zi&lzX?Y>UYso_E3FuT695)Xkz_X0tDi!40R7(1{i0;E%Lz>fqqzcd1i4jg2f@)z*~ zL{h&Eq*KH~>d0+tv)hNW3gT^73pQib`Z^b|yF^10yyAaE0B%>|nSl#C_zKz`=};do zlsdi=G!#)rx+o>m=A=l|L^25kkwlJItyf;U|W@pU-T*>-k}HABZsouzJvnG`!n;K z<*+ZXzAI~HVE#7$q4=MGiFvE|Z}AHj#gRk)z~VLH_f7f2U|H^id&z>|B{ye2>>Ms) zt6V@cMEqDU+y|3gCwlUpZ$}OdxIJiLpykeo&HY5~WrJE`^ap0|Sd$4=wi#q*@@U7R@uLmc(xLJLhjW@V7`O?@S{8?yx`- zDB6XeKV+2*6ul0u`BT>qU+ye)PH9Jenk(-aC##=94}}P zpC{xdfVPtm`_SN@sUB=67d(2V^$*^upD=h|n`!VawihP` z?`ysQ$wdA14Bms0n>l)a4I*J?Fyxlg;^Y4j_bu>I7U$lZ>;e&JHYy4#YLr#cP|S^+ zp_;{Ac^7vjDkxfPzz~HB5_9p=0tPpsyuL}mBOd9gJqq}{U774LvsL_(fdvqzHr)=WhNol(eR;K%o15N)yzh*U@DNT1ewBdSbx(mtR z{)kgU_Tat$mTI|Yqhm+3u-w-tEO!+Mmiu6F%ohpS>OxwuVC)?<9HPMx(oNf7Vc8wyg^v!x_}*?JzbN zTrEV0lSxqhgu^u0-wQ8E?q>Z8ne+Gd#X<{qjK1e>9*MyYC%D{?7RTFGOu}`h=HvXf zvTSeLFubBdp<2gkL55TMVqc*sBKEVfA5aSEuEi=GIR2~I;%%%|P&p0tq_P6N3hJ=u zRR4kU;qYO_v62p5;X7@Jx9J0j2uDGeXF5y=`&h6sjHdoO1f`W{(J3(Ha^g>nAk%rN zXa(M*0_ueDu+*5&&RI`Wes6oDOA!tOFt1@s`E_jS1cm~-U55XNc-o&LFG&T|fq@ZP zPZciUgI{7=0i6z4=6KI`Iv6H`5~B51vV?Y^gmBE}+f+iH931>|1!5E@Z@x_>g#B*l zU?bR1cgMg)**MK4E?GVhc00tFPitSCQ+v^I<%!h8<`eymS_rSa+c3mWt1X>8>X~Q^ zK%*4z-sb5T)QX)CLhN>r?c?$y`{h7zHTIv51hNKiY%s!Hz(&!*%4R&XOEjfW6qM0m zIL7(-YDxb%?i-`mYKCtNH&{Bw(nYq##2u>RDg;I)+(|ryi~KHl2#2b9hxqmtT&pXP zKMdbINim^2@LJyBdaJbtE&SWwmLmKpMt+{R3U;8J;Zwa4a=(EUXSbij6NFSefzPR@ z_k4`+*P)V1XPNH4!+z}gjbsUB@|NWZL5~lC7_f0q?cea`&D!V!-};TTMKrK6AOELp zg!?<)*NK1ioq0FGDG7Au)5ny~Lbyzu;4E*-3&2_4l#l<@Hyx9+40WaL6t%6wS+*RJ zkmZQ^e>;9SF&UiYP}v*aC>^oS$Ak!Zza``i%j-H1P9P({8lK4;weQ7l2Vn@c)Z4O1 zbeWhe!}Q;YIOgU~h!}3l&4Aa4vTnT-W&Dn}Wh#)c{SHnxh&#<+!G+x;6cA(zEEt_n6eF?>mpD|m!F$h35T)S~L-e$%7$XrRdXx&J zyKsnbiKTfLrj8PgnK&2|9mm`F!%f4V)?waQ2w#-)=O|?igH6ZXff!qa>WvM##b^yE zYu`c(**XIXL7pSI0LS9o4o@gKi#z*ymva9$-UQx z99((a8+UCVrxc-WU$qC!s3CF-#C`g>N*YynTqVh3l8^|&7#{Cj+^I}1V zc_z(SIWuB=OFFv5F^Lc#&elgSARjQ?Ta)ly%IVi5crK#lNZ6o9@mvN&Yh>>(YK-B+tHYV??KJUlu#4I` zZ}T7UK@L#}O+9uKz3w`&4&84PehXDyi3x}M5r=}*#YIRj^y z!vUcSGj78sputDY)1R_%1vdA?>t|g=msnX}=3L9QKnR6IY*yFEI6m z$se$%E*Etm^U#O*Ip9o%<0tO_AWg*PE(3+}{^Cz;n(%Y>#y1t!$B)gTSnj%g}Iu_%l-FXJI!Lkp+Dv$m{ zEW6qalM*&8_5+r^KxaN4uDcz}Qoq2FU^p493-7R5XUVWJVvMlcDJ;B;i2XX9@=J&L z(tL`08?}?!XsA#2^jEHgh4V8o<3bm96SKNgaHmsF*p0#9p^Cq-P;p+m@FB2m6gu77 zfF-8EHKI&}d5?vC&eS2Oyv{{_=eB9RUG_zk!w{xlu+S8(2Uiy8c0JBpAAs|b5FpPU zVAtRKb*OBsxAlHV)?aqm+j=j)l=Q~lLK7w4e}s1gYd8sDH$Z$Gpfc}`1yQcT%l6y% z(V(WZQN8wkat!Yh%lVr$OCO|!TF$aU5-z2yFBy)`vQ>b?&QGLu`rvT{9CY%LWH+bi0Rvo(L`NG?H1;9%%os)nHn*;lK)@Qli6ey%RN29{+tTIQDH|q zsA_mNllia(U#~-z>&4I@8HmrrZhZwBAj^Hev|Cq^-3o_OO!a(U8Li>ga#{W%AR$^Q z`UW<4;Nl3(-R%hDiVXYbG@(M)>W|=7(g;t$ZdeY>Cy$yaTNpEzEtU+DU*m|)2VrL( zlG%V{E+kdS!`a=iscBZKAmn~cs7)!)0EOZ5zX`WfaCX4ik({NOgtJcbMLgnn9EgKq zN@?Tr`e#7duyH9(!pN2BA|qF&iEZ7t5r>O%;@lu~85T4=Dzt(Sv8^H3M9dD#{A?#Z^XXi^YfWc20z+SQ} z2M&(3E&_qzAr0WKsQfMw1~7$&bt^-Y0ZhTwEhyg5H z9JaHOEZZ-slHgoW!9*Cqmk`-_Vgj-+*#Q0mHH&721fvU=6UhiK1=S{nLS-FkEns2( z%2FfqH-M58=5N})ey8gv)S}W8axNjF@;H&Qfr*G(S|&nkh{1{e(Z35L zbkU%a?e>FmswvSTlRriLZ$F{yC&Fw&Sace(0<5!<2r8ODPLV5bD$wAg6^-?QvY{i1 zeTs<|*qR=1%Tf@cFG3yM<;CHC2Rl*aTn!C!^L!rmU1wuopa+MgEtrXGjL;_*VE7wX z!5rKXa&N#bCbyr6Z4h}~o_|L$argxqF`RxqHILHxsrPQrz36m3IJB?!6LMUlV_-Vd z&t0B-WC)DDZ>YsO0by(JeIqeGVA{_^AfpH@XIR15Ux@h{*wHV;0_=eiZB-4Sk$!&{ zBiVS+Fh17#c*=B*^H(;nauWOR$hu-Ao;e)RzYxpU=**``fv}=H1@5 z$3WnB`tcOOukl7x1lY$c?{zv4agc$%5T`HWU@i$hg2bWy!ojp6cO zUY9tc7)61$3eyA&U3+IItZf=P!YF;Ww8zpKf*tscEx=HhYbX*ZGnKrPSDPu25rPg{ zh+87y)qjs(0`jb6C)=3>8ylC>p#K$<2KctKAFfA|i+iT7qMZ2;c94>Ko4>&aI%MZs zbXXV(l=+Y1C#z~A>};_Nhw>J3j>m8>4Bc^#P*Sn1=Wo)=K2uDD6?_5@^bX7oOwRL* zF*59tECT)B`xA2mQop^;gQ1r)&^iQ~m>ehzfnwiBoK#R;CiTct5T^l+jqN6J;k%kN zAm3S-+CtQ6B}_(ms;PTEGKrD(Lqgg|F|lL+BKzyebD3!k>YW$JSoR!KEOkeZg|sDk zrT|KF4kC%*3KL|f@mL~)x6lJVv9*W~drwv#m`JOoKBQ82maU|ZvdOU9-xR>#GTZHB z{W?EsCo(c1SK|xL22C>EXF$I&Z$+lN+++4EjBHqcWV&~g>AtCM0ZjMxFx}VDp}yFX zyMONwrRiRPuo(VFQ%Ca&78Z%n5g}dZ_BDF6)4OAfH$gXJM-9Ik@6 z7AL`Y+Zxbb02>>!d!5K?%NA9y*M(D0+l$c7#A$Zm-mkGH z(A#<*$s7$$CO%H}nRtm)y^mKgm4qdD0sUhrPMT^U z8wcl$&`ptc^>VA=TAEY9v0Bc=A=o^cci=LbQaGQ=1e4EJ*%g>lkQX6bQ;r1~!g^`- zyo_>$WtY6S5G8$C1;!+a22+;gR)w7(pr^t7&ozu=qm10VD4bC=D_G=4Cggf58#&D& zj_4OZd!xUiXq?B1Bi4{VOPkop1%h$8Uulrl9ZB?(0V2@Q*=!pl*F8e2*Qjc7280| zAgH9E4Ky;f6e*>ti1-wQK!keiLg~`V3y{GR5<_R=RyVRfFcK%edz+sERV)jM#In2X zT&iItPEJ7d10ot%TbLr~mN5ZwyqtiDI5;;~oIb_pSmN9O>D={t+iDOc4iF%(F61m< zg%6zTkPp59$;U(KlNHX#6G|7)OS(>uU2`At4eRt;wt&wX(BlW;-l6hLLf7$yw`Dbc zvFt;r={S@?op9NO9YVKXh(adjxIcqpgiF>VJd0<^vv^*37F6&g2RaWQr}{>E$Owm^ z#A-d9s*L4&Nh|hNPzvM%4=|Tpr}pUQiNe3y4&AHYF8sai!r$8t?`^sdhc-^H-zKLc zw#n&;Z8RP63Vgj+#B{_fVmjiLZ{h3p)V9gX>(ZpD5os0v-v4fTj^yigd83u03l@dW zTkBvv^+4nvFd2AH_HHr#qWOr)>8 zEx!g5vcC!!V8G=)ID2o1yU>45O%(Zn_Rnc90w3h&(MGZ*QOGG^|7wS*q2dM?EGd$6 z8lu_?@2{1}vCKyVR=(gLqy`}UaH?$&EfJ&s225P&r>@^qYS57?pK8WIGiU`Xe1JOuB4=k`;tVboJrBT2VK!M(vv)?gx2Lr zS2EH5lba@7$rBM$`I4{|ViR!(0YhlY(FKf)mC9=gKEld9t4m(5f?vciHoUEbGdcXo z&ZJegW5G`Y?D!y6riO($eHC7el`=KVN!I&DVjAZIcF zk4252;k;-ZzBU{C7GMyRjiF21*?ZZ5Y($((aCmfluR{G*s?*(zM*Slkc{CBnF2DMT z_kwQhHbCclZw<-@G%ME0FVoNx9xq=)@QuP{(3<^v1bb=e*S9(q_d+BK2D)`D26`+4 z?L1-xID1e|w8ZBQDma2^#}on0R$y=3Y=5Qy2XwzKpJz8!O!;EU4QFp}q1)zzB_Cod zE!moHu+P|#XJ^^j{;s}AVsGqC$SqRVAM?fgJdJl1gvhy%uosmOr72s zt;Y*h{b-t4@Q(wry=^vB6j!KMgq$DZ7^%HzDZUBeoIyIddw-~)E9{JSN6KEHjW~$| z*Bj2pM5pC`%PKp#2m^7T4A`dx>LQ9ACxo9Cs+v4KR1m4aI8_95OH*;+!}$IUoxB*rWw-mrKBfKz6A5a)i#-2vD%zk58b3J`Z539mhV195l@McD zpRdZQ4_eJ1*7tQTosI+PvA3yQX z-GIIRh%G^RN=r~)03OHO)Lf68-n3kuzgqH!m3I`;Hlc72O(2YY3=EQ%vIL{;u$mzh`I1 zDQVm^{;P};>t}l^1dN*kLah^L(^b73prOX^{Dky1h4U2O>^R$oN$ONh&O|(hDL%B{ zD)xq9AnQ)gEI&c!T}CV3)D}iqIb!`iDvP)6BlHW@*5=vMeHiN+;ln1Jki8F!51pYt zy3Pl;M$|#U=o*{vTQKZi#NV^H5g8lia;>sYEZlq}7X#Mc7;q-x4iy%GDRNj8D7QSM z1I=Sj??%6kOH*X|;qdqxCC+6lL4lV19b6MgdzEl4kNC-tqjUFOq-zPslPJ(32wBoW z+?j9J#5*AxIrK|+t(7hCDlKXpK2;lk{kxpJMkgzfNR9-sfmu^mm z^f0)Lj<=w5lH=*etoQ!%fG|oi;MM8D>JRaPboSE8G>(Yf!ujrr1A8qnqqUr#{>(ux zfK?k|SvK}WTz;g>Oqe%R5&_&y5VvyHoUWuq&4UT?c~;3{wW(A#t~V!##S zs8ePCq^rC|Q&-+TPpVdioPe)_L!pvwia4ke6l5iWz}Li`vSV=J^|U~ug*oSPoZYCx$0Jo6e^5t zQD(7;V1x=ek?Qxt(OPW9~?A!=Tc3=Eh?ptB7 zE5#}PF!l^yBQTYTCayQ$CM!V|dkEjD7I7s^SN%M`WCI5C8K*)t5!;g8P`n(K;s`aE z;^Sp>>P9;C>s;JcgoEyf97_d`?SYw>QlY#}PXLbn8vl-x^nh=8a@x_EEIW{Rc}VIKtg;_t0`gz@hWik4 z<9$c+bd)d$#mYYC@))G%Oq#Ywj7+VAh#&JQv1=~yCvhD7}Ex0a3Y4{ zOlWa*15CizXpGNI1G1j7B<`G|XiR zObGr}m>z;2YoIrR0(ZRQlAnJZhRV3Np)fwlL0MpMZ4;)157Lyd9LtUV4WyKHOz?&ir2V2&ultyg44#BA{v>?@!GlC#Cf>oLBLBd;Lp zgB)?)1dOSy3(;MZ;usrT)`AU6xwwlqYCF)S zL_s0MhgCD*fKUqm1Ke04h5tGUAKQf1L-=o#@CC6q`WGVY{0D^pa}vH)fTcQ9J|^MQ zULgy+2R@3?u^EYiewW^4QGq$mM+~>(DrpSYL7G@QOTrgdfqU}w7$JP}(%$BX>n_I2 zmxv8hvLasGl;eyaV7Wmzo?^yIQV1WD+43+mUHC!{${Y|aBn00M!3#zS!QYLg>3cA9 z8@pL-S{Gk?F$_fW=br+i&k%L~y|EfHUwUJ22rGv7r^Y6s)m|>{msNKbu7Q{_@)L$9 zDh3R&I6(I_*80eQ_d91K4GXLSM&qhjx;D8z47+wU0DQ;VZ|sM7kW`8E%LR*(e!*bD zg9G5qV`M?{OX-cJ*V+zRZlA-gExv~Y(`D_78#M;I@DkThW`_8M;RnBWC2_FJ<-!=E z|5G}8?&IVT13JYDB1#Ck;qEjsi28yUDr5{RMgGu3U!8__xrnsMS1xE9$#PKSxFdEH zenlQs;&HK&1-_P`RRa#*Hb1>5{7fnZY<-xKq0?;giEcjbYEC0VO2m28&W(k^$+0Ki znK6nQN<%z~n$!Moqxi{Egv=OAqaMpo8bO+mzhlbF;tizDn!`zZb6B<*KOjY=BB}6S z6+yRvH(D%bLDNW|N#kbVQ^bUUJh(+TG(rvvgn4Yh_RprvXv6Xbps;feQieX&UlV~P zskYD9SL4!_AgV)qBYu^`>>4l2UQGE#4q3n?jVUA*d-7}{5inc!0@{-3T7jegTrYn9NGY@f$E7zY#mCNN zxN3zUj#OPYEmHQnxA`TJJTGoIo)#|Hj@I?c3fyu$1lQlf`^^hus3l@wIV0>$!@|nz zW@G3DqpDZd;Bz=W@5Cq0Qn;@XOz;)UnC>G%;%hm+iaO_1Solh!16qNv?f5FL4=xDN zyhRA}7FQx3F@6%Z2lfwPrUJ7fZM)D<(4|pu;)l@17_I$~IoxIFZT=1NEZ51%ih^bW zR}&g~X7MR*s#0SOK#8+L#-ULDKbAEB% zo>lcShNv*BLl@^2hV9L`n6O8jmO(z0sMI7PXw02>rSgCb@ha*t5YkOTEc?NB@q^f| zAyS;~HuA@OM3ruy;>M~oNBZHD?CGx_^7pO_;Qn1=A1Hfy(IXhd94@A|9>YjS zzmgBByO7n>55q#JMzCqOx5)=H?kM$)hK5un3;XILaTl@SR#lhcr9Xw7lleF?A&IdmeZ}7o5c0l2XQD9 z?O?hJ@FZyBU3rm$L)fNt{A7D5Zn>iNRR|Q#1opDgDqCEHj(Uq>*zB-fp2I5;pqaRq znKDF?euk2g^;A}Fi~)xZzJ|Cf!tU9Pn)4~B-F>+*1MOAfA{DM<>6 z*<0L_qE76iSS<|bB!s0BNVhf)P3py&Kk_(qTY^c$s04#!3|)cHV#vJ=CgeX;M`L%#Mhc3Dd}~m^|G#eW zZt}I0e&Mm~CYh4drdRgGLVux7ROsXyi{hqI7P@@7JuoL0Bwrwzni{(b=wu%HhRxvu z6jq??&}7?leC(IVKG%sUT{zV3%A8o=bTY%ajKo&90I@G%f>Z0ujrTDQ8ImDILxw@S zB40LFsTDjgV4t1ow;=)hBJtZ%8vX#<{QTGnNTaIgvGb3f;3i)q(w8z;*vMmrOVg#w zu3Smx6?MeNlCapjpVCO4nx8hu^Kz(a+g}Hq3viWs07nY7ic{25oQQ}s5aY2y47-I} zZ`jIhY{WS}=oAN?9}SGya$uD#nIf=^F5K!`bX-@k8_kt#Z$Eqii2mvy7Is78C{mH~ zuyZ0u7jPn5DROflF=$W1Wv0zzQU4LKa~gJNPFL-_U77GiR)KlEO_mwJ_0G80!|F2@ z5%U&Cq<~-5t({>;{FUqyu2GC?kVi~_QQB$bkPnj%@6^OnULHuMmXdcmCQ_i za8)Me?Fr`J+Q(th1dn9^@|Y*mlDE@DsxS_=J8XYxb$)q?b#QxV*sGTFcdBa#{4@qR zl!~hCE{s8*K;Pv3fSa0WX=;`+7G{h6KUluuZF`G!AA6U>yq}pyBxmA$Qw&W#fn`V$ z`^!nK12=*QqcCV;-^JlZ>q~mE6AhzaU*up(1r9M32flt;`(dQ)Rd2Kfq;d%CsUAd) zp{&cDFpW$Od{wMae-$H>x5x-)A_B~TWAK7j-A7v0O>^%=Qbs0w=rEozwsv7;@=G-G z+d^3X=);#T8Y^>tPElcG634vt54&HD*jSq1+X)(6up{>v?ak*LVh1Po(^1H<+do6f zho$v^SoJDfnJ^}I(^Y$FWW=3CtSnq_yv?=fzVB@%X*X^5HvJV+5c2&4zJzUz<95hH zL`!;cRcHNNtY4-iC#?^}OvL2Yxvngn{^X4m{I;D~cpv>Om2kwlZU*d?0=n8E8+6D) zq~NDa@l#1b4pi8igVMl-e*;g&mcrUUOl}RkvO=wQ^@hrN>&`*d#%PxiRe?=`AqBDL z9cJ1Lj9DGV#Y8!gssjD#r<4$= zR9Ui0QM@4fsU*6Oh*GrbH=0%*t{a}DRTQ4Iio(ZBTPl{I`_pi!%YntzwL_6kmx^=< z#NMVnyg-BKt}tUCPl^)lM*zsTkb-MUL>nVv`V+3 zRXRZWgB`p=cf$quQh4aky%Y(KA(I7N`Z12)8<5Fj!O-|l8XA8Ni!b?W4!+Wm_$_pt z>*m;Ie4ygTy2Dc*OKahq2ozv`)Dc;V&@5iU0Fj_LXtfxX)*2$> z3zi^FF=iF&x@lJqCaU!J!Kcb

!FLZ$Wq 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 z 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

7O=88BkZh}uCh5J?5q~8 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

E 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

yGP<>}7vSmug!W`~a1lZ~IEkO~JHw3*#nH+)O+ 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 1 ) +| x - components of x +| nf - number of components of f ( nf >= 1 ) +| nh - number of components of h ( nh >= 0 ) +| iusr - integer array: iusr(1) = idtab, iusr(2) = ifsin +| rusr - pointer for ffd +| ------- OUTPUT +| f - f(x) +| g - g(nf,nx) +| h - not used +| !========================================================================== +******************************************************************************/ + +/****************************************************************************** +| Solver to evaluate f, g, and h which called by ISATAB +| +| \param All pointers which definde in ISATAB +| +| \return No return needed +******************************************************************************/ +void USRFGH(int need[], int *nx, double x[], int *nf, int *nh, int iusr[], double rusr[], double f[], double** g, double h[]){ + + if (need[1] == 1 && useNumericalDifferentiation == 1) { + need[1] = 0; /*disable g evaluation form solver*/ + numericalDifferentiation(g); + } + + ffd_ISAT(need, x, f, g, (void *)iusr); + + return; +} diff --git a/Buildings/Resources/src/ISAT/usrfgh.h b/Buildings/Resources/src/ISAT/usrfgh.h new file mode 100644 index 00000000000..4280939f99c --- /dev/null +++ b/Buildings/Resources/src/ISAT/usrfgh.h @@ -0,0 +1,26 @@ +/****************************************************************************** +| +| \file usrfgh.c +| +| \brief user-define function (FFD call) requested by isat +| +| \author Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 10/18/2018 +| +| \ All RIGHTS RESERVED. +******************************************************************************/ + + +#ifndef USRFGH_H_INCLUDED +#define USRFGH_H_INCLUDED +#include"ffd_wrap.h" +#include "utility_isat.h" + +void USRFGH(int need[], int *nx, double x[], int *nf, int *nh, int iusr[], double rusr[], double f[], double** g, double h[]); + +#endif \ No newline at end of file diff --git a/Buildings/Resources/src/ISAT/utarray.h b/Buildings/Resources/src/ISAT/utarray.h new file mode 100644 index 00000000000..29237f0d9b2 --- /dev/null +++ b/Buildings/Resources/src/ISAT/utarray.h @@ -0,0 +1,232 @@ +/**************************************************************************** +Copyright (c) 2008-2014, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************/ + +/* a dynamic array implementation using macros + */ +#ifndef UTARRAY_H +#define UTARRAY_H + +#define UTARRAY_VERSION 1.9.9 + +#ifdef __GNUC__ +#define _UNUSED_ __attribute__ ((__unused__)) +#else +#define _UNUSED_ +#endif + +#include /* size_t */ +#include /* memset, etc */ +#include /* exit */ + +#define oom() exit(-1) + +typedef void (ctor_f)(void *dst, const void *src); +typedef void (dtor_f)(void *elt); +typedef void (init_f)(void *elt); +typedef struct { + size_t sz; + init_f *init; + ctor_f *copy; + dtor_f *dtor; +} UT_icd; + +typedef struct { + unsigned i,n;/* i: index of next available slot, n: num slots */ + UT_icd icd; /* initializer, copy and destructor functions */ + char *d; /* n slots of size icd->sz*/ +} UT_array; + +#define utarray_init(a,_icd) do { \ + memset(a,0,sizeof(UT_array)); \ + (a)->icd=*_icd; \ +} while(0) + +#define utarray_done(a) do { \ + if ((a)->n) { \ + if ((a)->icd.dtor) { \ + size_t _ut_i; \ + for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \ + (a)->icd.dtor(utarray_eltptr(a,_ut_i)); \ + } \ + } \ + free((a)->d); \ + } \ + (a)->n=0; \ +} while(0) + +#define utarray_new(a,_icd) do { \ + a=(UT_array*)malloc(sizeof(UT_array)); \ + utarray_init(a,_icd); \ +} while(0) + +#define utarray_free(a) do { \ + utarray_done(a); \ + free(a); \ +} while(0) + +#define utarray_reserve(a,by) do { \ + if (((a)->i+by) > ((a)->n)) { \ + while(((a)->i+by) > ((a)->n)) { (a)->n = ((a)->n ? (2*(a)->n) : 8); } \ + if ( ((a)->d=(char*)realloc((a)->d, (a)->n*(a)->icd.sz)) == NULL) oom(); \ + } \ +} while(0) + +#define utarray_push_back(a,p) do { \ + utarray_reserve(a,1); \ + if ((a)->icd.copy) { (a)->icd.copy( _utarray_eltptr(a,(a)->i++), p); } \ + else { memcpy(_utarray_eltptr(a,(a)->i++), p, (a)->icd.sz); }; \ +} while(0) + +#define utarray_pop_back(a) do { \ + if ((a)->icd.dtor) { (a)->icd.dtor( _utarray_eltptr(a,--((a)->i))); } \ + else { (a)->i--; } \ +} while(0) + +#define utarray_extend_back(a) do { \ + utarray_reserve(a,1); \ + if ((a)->icd.init) { (a)->icd.init(_utarray_eltptr(a,(a)->i)); } \ + else { memset(_utarray_eltptr(a,(a)->i),0,(a)->icd.sz); } \ + (a)->i++; \ +} while(0) + +#define utarray_len(a) ((a)->i) + +#define utarray_eltptr(a,j) (((j) < (a)->i) ? _utarray_eltptr(a,j) : NULL) +#define _utarray_eltptr(a,j) ((char*)((a)->d + ((a)->icd.sz*(j) ))) + +#define utarray_insert(a,p,j) do { \ + if (j > (a)->i) utarray_resize(a,j); \ + utarray_reserve(a,1); \ + if ((j) < (a)->i) { \ + memmove( _utarray_eltptr(a,(j)+1), _utarray_eltptr(a,j), \ + ((a)->i - (j))*((a)->icd.sz)); \ + } \ + if ((a)->icd.copy) { (a)->icd.copy( _utarray_eltptr(a,j), p); } \ + else { memcpy(_utarray_eltptr(a,j), p, (a)->icd.sz); }; \ + (a)->i++; \ +} while(0) + +#define utarray_inserta(a,w,j) do { \ + if (utarray_len(w) == 0) break; \ + if (j > (a)->i) utarray_resize(a,j); \ + utarray_reserve(a,utarray_len(w)); \ + if ((j) < (a)->i) { \ + memmove(_utarray_eltptr(a,(j)+utarray_len(w)), \ + _utarray_eltptr(a,j), \ + ((a)->i - (j))*((a)->icd.sz)); \ + } \ + if ((a)->icd.copy) { \ + size_t _ut_i; \ + for(_ut_i=0;_ut_i<(w)->i;_ut_i++) { \ + (a)->icd.copy(_utarray_eltptr(a,j+_ut_i), _utarray_eltptr(w,_ut_i)); \ + } \ + } else { \ + memcpy(_utarray_eltptr(a,j), _utarray_eltptr(w,0), \ + utarray_len(w)*((a)->icd.sz)); \ + } \ + (a)->i += utarray_len(w); \ +} while(0) + +#define utarray_resize(dst,num) do { \ + size_t _ut_i; \ + if (dst->i > (size_t)(num)) { \ + if ((dst)->icd.dtor) { \ + for(_ut_i=num; _ut_i < dst->i; _ut_i++) { \ + (dst)->icd.dtor(utarray_eltptr(dst,_ut_i)); \ + } \ + } \ + } else if (dst->i < (size_t)(num)) { \ + utarray_reserve(dst,num-dst->i); \ + if ((dst)->icd.init) { \ + for(_ut_i=dst->i; _ut_i < num; _ut_i++) { \ + (dst)->icd.init(utarray_eltptr(dst,_ut_i)); \ + } \ + } else { \ + memset(_utarray_eltptr(dst,dst->i),0,(dst)->icd.sz*(num-dst->i)); \ + } \ + } \ + dst->i = num; \ +} while(0) + +#define utarray_concat(dst,src) do { \ + utarray_inserta((dst),(src),utarray_len(dst)); \ +} while(0) + +#define utarray_erase(a,pos,len) do { \ + if ((a)->icd.dtor) { \ + size_t _ut_i; \ + for(_ut_i=0; _ut_i < len; _ut_i++) { \ + (a)->icd.dtor(utarray_eltptr((a),pos+_ut_i)); \ + } \ + } \ + if ((a)->i > (pos+len)) { \ + memmove( _utarray_eltptr((a),pos), _utarray_eltptr((a),pos+len), \ + (((a)->i)-(pos+len))*((a)->icd.sz)); \ + } \ + (a)->i -= (len); \ +} while(0) + +#define utarray_renew(a,u) do { \ + if (a) utarray_clear(a); \ + else utarray_new((a),(u)); \ +} while(0) + +#define utarray_clear(a) do { \ + if ((a)->i > 0) { \ + if ((a)->icd.dtor) { \ + size_t _ut_i; \ + for(_ut_i=0; _ut_i < (a)->i; _ut_i++) { \ + (a)->icd.dtor(utarray_eltptr(a,_ut_i)); \ + } \ + } \ + (a)->i = 0; \ + } \ +} while(0) + +#define utarray_sort(a,cmp) do { \ + qsort((a)->d, (a)->i, (a)->icd.sz, cmp); \ +} while(0) + +#define utarray_find(a,v,cmp) bsearch((v),(a)->d,(a)->i,(a)->icd.sz,cmp) + +#define utarray_front(a) (((a)->i) ? (_utarray_eltptr(a,0)) : NULL) +#define utarray_next(a,e) (((e)==NULL) ? utarray_front(a) : ((((a)->i) > (utarray_eltidx(a,e)+1)) ? _utarray_eltptr(a,utarray_eltidx(a,e)+1) : NULL)) +#define utarray_prev(a,e) (((e)==NULL) ? utarray_back(a) : ((utarray_eltidx(a,e) > 0) ? _utarray_eltptr(a,utarray_eltidx(a,e)-1) : NULL)) +#define utarray_back(a) (((a)->i) ? (_utarray_eltptr(a,(a)->i-1)) : NULL) +#define utarray_eltidx(a,e) (((char*)(e) >= (char*)((a)->d)) ? (((char*)(e) - (char*)((a)->d))/(size_t)(a)->icd.sz) : -1) + +/* last we pre-define a few icd for common utarrays of ints and strings */ +static void utarray_str_cpy(void *dst, const void *src) { + char **_src = (char**)src, **_dst = (char**)dst; + *_dst = (*_src == NULL) ? NULL : strdup(*_src); +} +static void utarray_str_dtor(void *elt) { + char **eltc = (char**)elt; + if (*eltc) free(*eltc); +} +static const UT_icd ut_str_icd _UNUSED_ = {sizeof(char*),NULL,utarray_str_cpy,utarray_str_dtor}; +static const UT_icd ut_int_icd _UNUSED_ = {sizeof(int),NULL,NULL,NULL}; +static const UT_icd ut_ptr_icd _UNUSED_ = {sizeof(void*),NULL,NULL,NULL}; + + +#endif /* UTARRAY_H */ diff --git a/Buildings/Resources/src/ISAT/uthash.h b/Buildings/Resources/src/ISAT/uthash.h new file mode 100644 index 00000000000..a1839c2150d --- /dev/null +++ b/Buildings/Resources/src/ISAT/uthash.h @@ -0,0 +1,960 @@ +/**************************************************************************** +Copyright (c) 2003-2014, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************/ + +#ifndef UTHASH_H +#define UTHASH_H + +#include /* memcmp,strlen */ +#include /* ptrdiff_t */ +#include /* exit() */ + +/* These macros use decltype or the earlier __typeof GNU extension. + As decltype is only available in newer compilers (VS2010 or gcc 4.3+ + when compiling c++ source) this code uses whatever method is needed + or, for VS2008 where neither is available, uses casting workarounds. */ +#if defined(_MSC_VER) /* MS compiler */ +#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ +#define DECLTYPE(x) (decltype(x)) +#else /* VS2008 or older (or VS2010 in C mode) */ +#define NO_DECLTYPE +#define DECLTYPE(x) +#endif +#elif defined(__BORLANDC__) || defined(__LCC__) || defined(__WATCOMC__) +#define NO_DECLTYPE +#define DECLTYPE(x) +#else /* GNU, Sun and other compilers */ +#define DECLTYPE(x) (__typeof(x)) +#endif + +#ifdef NO_DECLTYPE +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + char **_da_dst = (char**)(&(dst)); \ + *_da_dst = (char*)(src); \ +} while(0) +#else +#define DECLTYPE_ASSIGN(dst,src) \ +do { \ + (dst) = DECLTYPE(dst)(src); \ +} while(0) +#endif + +/* a number of the hash function use uint32_t which isn't defined on Pre VS2010 */ +#if defined (_WIN32) +#if defined(_MSC_VER) && _MSC_VER >= 1600 +#include +#elif defined(__WATCOMC__) +#include +#else +typedef unsigned int uint32_t; +typedef unsigned char uint8_t; +#endif +#else +#include +#endif + +#define UTHASH_VERSION 1.9.9 + +#ifndef uthash_fatal +#define uthash_fatal(msg) exit(-1) /* fatal error (out of memory,etc) */ +#endif +#ifndef uthash_malloc +#define uthash_malloc(sz) malloc(sz) /* malloc fcn */ +#endif +#ifndef uthash_free +#define uthash_free(ptr,sz) free(ptr) /* free fcn */ +#endif + +#ifndef uthash_noexpand_fyi +#define uthash_noexpand_fyi(tbl) /* can be defined to log noexpand */ +#endif +#ifndef uthash_expand_fyi +#define uthash_expand_fyi(tbl) /* can be defined to log expands */ +#endif + +/* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS 256 /* initial number of buckets */ +#define HASH_INITIAL_NUM_BUCKETS_LOG2 8 /* lg2 of initial number of buckets */ +#define HASH_BKT_CAPACITY_THRESH 100 /* expand when bucket count reaches */ + +/* calculate the element whose hash handle address is hhe */ +#define ELMT_FROM_HH(tbl,hhp) ((void*)(((char*)(hhp)) - ((tbl)->hho))) + +#define HASH_FIND(hh,head,keyptr,keylen,out) \ +do { \ + out=NULL; \ + if (head) { \ + unsigned _hf_bkt,_hf_hashv; \ + HASH_FCN(keyptr,keylen, (head)->hh.tbl->num_buckets, _hf_hashv, _hf_bkt); \ + if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) { \ + HASH_FIND_IN_BKT((head)->hh.tbl, hh, (head)->hh.tbl->buckets[ _hf_bkt ], \ + keyptr,keylen,out); \ + } \ + } \ +} while (0) + +#ifdef HASH_BLOOM +#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM) +#define HASH_BLOOM_BYTELEN (HASH_BLOOM_BITLEN/8) + ((HASH_BLOOM_BITLEN%8) ? 1:0) +#define HASH_BLOOM_MAKE(tbl) \ +do { \ + (tbl)->bloom_nbits = HASH_BLOOM; \ + (tbl)->bloom_bv = (uint8_t*)uthash_malloc(HASH_BLOOM_BYTELEN); \ + if (!((tbl)->bloom_bv)) { uthash_fatal( "out of memory"); } \ + memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN); \ + (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE; \ +} while (0) + +#define HASH_BLOOM_FREE(tbl) \ +do { \ + uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \ +} while (0) + +#define HASH_BLOOM_BITSET(bv,idx) (bv[(idx)/8] |= (1U << ((idx)%8))) +#define HASH_BLOOM_BITTEST(bv,idx) (bv[(idx)/8] & (1U << ((idx)%8))) + +#define HASH_BLOOM_ADD(tbl,hashv) \ + HASH_BLOOM_BITSET((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) + +#define HASH_BLOOM_TEST(tbl,hashv) \ + HASH_BLOOM_BITTEST((tbl)->bloom_bv, (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1))) + +#else +#define HASH_BLOOM_MAKE(tbl) +#define HASH_BLOOM_FREE(tbl) +#define HASH_BLOOM_ADD(tbl,hashv) +#define HASH_BLOOM_TEST(tbl,hashv) (1) +#define HASH_BLOOM_BYTELEN 0 +#endif + +#define HASH_MAKE_TABLE(hh,head) \ +do { \ + (head)->hh.tbl = (UT_hash_table*)uthash_malloc( \ + sizeof(UT_hash_table)); \ + if (!((head)->hh.tbl)) { uthash_fatal( "out of memory"); } \ + memset((head)->hh.tbl, 0, sizeof(UT_hash_table)); \ + (head)->hh.tbl->tail = &((head)->hh); \ + (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS; \ + (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \ + (head)->hh.tbl->hho = (char*)(&(head)->hh) - (char*)(head); \ + (head)->hh.tbl->buckets = (UT_hash_bucket*)uthash_malloc( \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + if (! (head)->hh.tbl->buckets) { uthash_fatal( "out of memory"); } \ + memset((head)->hh.tbl->buckets, 0, \ + HASH_INITIAL_NUM_BUCKETS*sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_MAKE((head)->hh.tbl); \ + (head)->hh.tbl->signature = HASH_SIGNATURE; \ +} while(0) + +#define HASH_ADD(hh,head,fieldname,keylen_in,add) \ + HASH_ADD_KEYPTR(hh,head,&((add)->fieldname),keylen_in,add) + +#define HASH_REPLACE(hh,head,fieldname,keylen_in,add,replaced) \ +do { \ + replaced=NULL; \ + HASH_FIND(hh,head,&((add)->fieldname),keylen_in,replaced); \ + if (replaced!=NULL) { \ + HASH_DELETE(hh,head,replaced); \ + }; \ + HASH_ADD(hh,head,fieldname,keylen_in,add); \ +} while(0) + +#define HASH_ADD_KEYPTR(hh,head,keyptr,keylen_in,add) \ +do { \ + unsigned _ha_bkt; \ + (add)->hh.next = NULL; \ + (add)->hh.key = (char*)(keyptr); \ + (add)->hh.keylen = (unsigned)(keylen_in); \ + if (!(head)) { \ + head = (add); \ + (head)->hh.prev = NULL; \ + HASH_MAKE_TABLE(hh,head); \ + } else { \ + (head)->hh.tbl->tail->next = (add); \ + (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \ + (head)->hh.tbl->tail = &((add)->hh); \ + } \ + (head)->hh.tbl->num_items++; \ + (add)->hh.tbl = (head)->hh.tbl; \ + HASH_FCN(keyptr,keylen_in, (head)->hh.tbl->num_buckets, \ + (add)->hh.hashv, _ha_bkt); \ + HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt],&(add)->hh); \ + HASH_BLOOM_ADD((head)->hh.tbl,(add)->hh.hashv); \ + HASH_EMIT_KEY(hh,head,keyptr,keylen_in); \ + HASH_FSCK(hh,head); \ +} while(0) + +#define HASH_TO_BKT( hashv, num_bkts, bkt ) \ +do { \ + bkt = ((hashv) & ((num_bkts) - 1)); \ +} while(0) + +/* delete "delptr" from the hash table. + * "the usual" patch-up process for the app-order doubly-linked-list. + * The use of _hd_hh_del below deserves special explanation. + * These used to be expressed using (delptr) but that led to a bug + * if someone used the same symbol for the head and deletee, like + * HASH_DELETE(hh,users,users); + * We want that to work, but by changing the head (users) below + * we were forfeiting our ability to further refer to the deletee (users) + * in the patch-up process. Solution: use scratch space to + * copy the deletee pointer, then the latter references are via that + * scratch pointer rather than through the repointed (users) symbol. + */ +#define HASH_DELETE(hh,head,delptr) \ +do { \ + struct UT_hash_handle *_hd_hh_del; \ + if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) { \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + head = NULL; \ + } else { \ + unsigned _hd_bkt; \ + _hd_hh_del = &((delptr)->hh); \ + if ((delptr) == ELMT_FROM_HH((head)->hh.tbl,(head)->hh.tbl->tail)) { \ + (head)->hh.tbl->tail = \ + (UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ + (head)->hh.tbl->hho); \ + } \ + if ((delptr)->hh.prev) { \ + ((UT_hash_handle*)((ptrdiff_t)((delptr)->hh.prev) + \ + (head)->hh.tbl->hho))->next = (delptr)->hh.next; \ + } else { \ + DECLTYPE_ASSIGN(head,(delptr)->hh.next); \ + } \ + if (_hd_hh_del->next) { \ + ((UT_hash_handle*)((ptrdiff_t)_hd_hh_del->next + \ + (head)->hh.tbl->hho))->prev = \ + _hd_hh_del->prev; \ + } \ + HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets, _hd_bkt); \ + HASH_DEL_IN_BKT(hh,(head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \ + (head)->hh.tbl->num_items--; \ + } \ + HASH_FSCK(hh,head); \ +} while (0) + + +/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */ +#define HASH_FIND_STR(head,findstr,out) \ + HASH_FIND(hh,head,findstr,(unsigned)strlen(findstr),out) +#define HASH_ADD_STR(head,strfield,add) \ + HASH_ADD(hh,head,strfield[0],strlen(add->strfield),add) +#define HASH_REPLACE_STR(head,strfield,add,replaced) \ + HASH_REPLACE(hh,head,strfield[0],(unsigned)strlen(add->strfield),add,replaced) +#define HASH_FIND_INT(head,findint,out) \ + HASH_FIND(hh,head,findint,sizeof(int),out) +#define HASH_ADD_INT(head,intfield,add) \ + HASH_ADD(hh,head,intfield,sizeof(int),add) +#define HASH_REPLACE_INT(head,intfield,add,replaced) \ + HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced) +#define HASH_FIND_PTR(head,findptr,out) \ + HASH_FIND(hh,head,findptr,sizeof(void *),out) +#define HASH_ADD_PTR(head,ptrfield,add) \ + HASH_ADD(hh,head,ptrfield,sizeof(void *),add) +#define HASH_REPLACE_PTR(head,ptrfield,add,replaced) \ + HASH_REPLACE(hh,head,ptrfield,sizeof(void *),add,replaced) +#define HASH_DEL(head,delptr) \ + HASH_DELETE(hh,head,delptr) + +/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined. + * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined. + */ +#ifdef HASH_DEBUG +#define HASH_OOPS(...) do { fprintf(stderr,__VA_ARGS__); exit(-1); } while (0) +#define HASH_FSCK(hh,head) \ +do { \ + struct UT_hash_handle *_thh; \ + if (head) { \ + unsigned _bkt_i; \ + unsigned _count; \ + char *_prev; \ + _count = 0; \ + for( _bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) { \ + unsigned _bkt_count = 0; \ + _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head; \ + _prev = NULL; \ + while (_thh) { \ + if (_prev != (char*)(_thh->hh_prev)) { \ + HASH_OOPS("invalid hh_prev %p, actual %p\n", \ + _thh->hh_prev, _prev ); \ + } \ + _bkt_count++; \ + _prev = (char*)(_thh); \ + _thh = _thh->hh_next; \ + } \ + _count += _bkt_count; \ + if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) { \ + HASH_OOPS("invalid bucket count %u, actual %u\n", \ + (head)->hh.tbl->buckets[_bkt_i].count, _bkt_count); \ + } \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("invalid hh item count %u, actual %u\n", \ + (head)->hh.tbl->num_items, _count ); \ + } \ + /* traverse hh in app order; check next/prev integrity, count */ \ + _count = 0; \ + _prev = NULL; \ + _thh = &(head)->hh; \ + while (_thh) { \ + _count++; \ + if (_prev !=(char*)(_thh->prev)) { \ + HASH_OOPS("invalid prev %p, actual %p\n", \ + _thh->prev, _prev ); \ + } \ + _prev = (char*)ELMT_FROM_HH((head)->hh.tbl, _thh); \ + _thh = ( _thh->next ? (UT_hash_handle*)((char*)(_thh->next) + \ + (head)->hh.tbl->hho) : NULL ); \ + } \ + if (_count != (head)->hh.tbl->num_items) { \ + HASH_OOPS("invalid app item count %u, actual %u\n", \ + (head)->hh.tbl->num_items, _count ); \ + } \ + } \ +} while (0) +#else +#define HASH_FSCK(hh,head) +#endif + +/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to + * the descriptor to which this macro is defined for tuning the hash function. + * The app can #include to get the prototype for write(2). */ +#ifdef HASH_EMIT_KEYS +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) \ +do { \ + unsigned _klen = fieldlen; \ + write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \ + write(HASH_EMIT_KEYS, keyptr, fieldlen); \ +} while (0) +#else +#define HASH_EMIT_KEY(hh,head,keyptr,fieldlen) +#endif + +/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */ +#ifdef HASH_FUNCTION +#define HASH_FCN HASH_FUNCTION +#else +#define HASH_FCN HASH_JEN +#endif + +/* The Bernstein hash function, used in Perl prior to v5.6. Note (x<<5+x)=x*33. */ +#define HASH_BER(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _hb_keylen=keylen; \ + char *_hb_key=(char*)(key); \ + (hashv) = 0; \ + while (_hb_keylen--) { (hashv) = (((hashv) << 5) + (hashv)) + *_hb_key++; } \ + bkt = (hashv) & (num_bkts-1); \ +} while (0) + + +/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at + * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */ +#define HASH_SAX(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _sx_i; \ + char *_hs_key=(char*)(key); \ + hashv = 0; \ + for(_sx_i=0; _sx_i < keylen; _sx_i++) \ + hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; \ + bkt = hashv & (num_bkts-1); \ +} while (0) +/* FNV-1a variation */ +#define HASH_FNV(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _fn_i; \ + char *_hf_key=(char*)(key); \ + hashv = 2166136261UL; \ + for(_fn_i=0; _fn_i < keylen; _fn_i++) { \ + hashv = hashv ^ _hf_key[_fn_i]; \ + hashv = hashv * 16777619; \ + } \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#define HASH_OAT(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _ho_i; \ + char *_ho_key=(char*)(key); \ + hashv = 0; \ + for(_ho_i=0; _ho_i < keylen; _ho_i++) { \ + hashv += _ho_key[_ho_i]; \ + hashv += (hashv << 10); \ + hashv ^= (hashv >> 6); \ + } \ + hashv += (hashv << 3); \ + hashv ^= (hashv >> 11); \ + hashv += (hashv << 15); \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#define HASH_JEN_MIX(a,b,c) \ +do { \ + a -= b; a -= c; a ^= ( c >> 13 ); \ + b -= c; b -= a; b ^= ( a << 8 ); \ + c -= a; c -= b; c ^= ( b >> 13 ); \ + a -= b; a -= c; a ^= ( c >> 12 ); \ + b -= c; b -= a; b ^= ( a << 16 ); \ + c -= a; c -= b; c ^= ( b >> 5 ); \ + a -= b; a -= c; a ^= ( c >> 3 ); \ + b -= c; b -= a; b ^= ( a << 10 ); \ + c -= a; c -= b; c ^= ( b >> 15 ); \ +} while (0) + +#define HASH_JEN(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned _hj_i,_hj_j,_hj_k; \ + unsigned char *_hj_key=(unsigned char*)(key); \ + hashv = 0xfeedbeef; \ + _hj_i = _hj_j = 0x9e3779b9; \ + _hj_k = (unsigned)(keylen); \ + while (_hj_k >= 12) { \ + _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \ + + ( (unsigned)_hj_key[2] << 16 ) \ + + ( (unsigned)_hj_key[3] << 24 ) ); \ + _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \ + + ( (unsigned)_hj_key[6] << 16 ) \ + + ( (unsigned)_hj_key[7] << 24 ) ); \ + hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \ + + ( (unsigned)_hj_key[10] << 16 ) \ + + ( (unsigned)_hj_key[11] << 24 ) ); \ + \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + \ + _hj_key += 12; \ + _hj_k -= 12; \ + } \ + hashv += keylen; \ + switch ( _hj_k ) { \ + case 11: hashv += ( (unsigned)_hj_key[10] << 24 ); \ + case 10: hashv += ( (unsigned)_hj_key[9] << 16 ); \ + case 9: hashv += ( (unsigned)_hj_key[8] << 8 ); \ + case 8: _hj_j += ( (unsigned)_hj_key[7] << 24 ); \ + case 7: _hj_j += ( (unsigned)_hj_key[6] << 16 ); \ + case 6: _hj_j += ( (unsigned)_hj_key[5] << 8 ); \ + case 5: _hj_j += _hj_key[4]; \ + case 4: _hj_i += ( (unsigned)_hj_key[3] << 24 ); \ + case 3: _hj_i += ( (unsigned)_hj_key[2] << 16 ); \ + case 2: _hj_i += ( (unsigned)_hj_key[1] << 8 ); \ + case 1: _hj_i += _hj_key[0]; \ + } \ + HASH_JEN_MIX(_hj_i, _hj_j, hashv); \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +/* The Paul Hsieh hash function */ +#undef get16bits +#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \ + || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__) +#define get16bits(d) (*((const uint16_t *) (d))) +#endif + +#if !defined (get16bits) +#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ + +(uint32_t)(((const uint8_t *)(d))[0]) ) +#endif +#define HASH_SFH(key,keylen,num_bkts,hashv,bkt) \ +do { \ + unsigned char *_sfh_key=(unsigned char*)(key); \ + uint32_t _sfh_tmp, _sfh_len = keylen; \ + \ + int _sfh_rem = _sfh_len & 3; \ + _sfh_len >>= 2; \ + hashv = 0xcafebabe; \ + \ + /* Main loop */ \ + for (;_sfh_len > 0; _sfh_len--) { \ + hashv += get16bits (_sfh_key); \ + _sfh_tmp = (uint32_t)(get16bits (_sfh_key+2)) << 11 ^ hashv; \ + hashv = (hashv << 16) ^ _sfh_tmp; \ + _sfh_key += 2*sizeof (uint16_t); \ + hashv += hashv >> 11; \ + } \ + \ + /* Handle end cases */ \ + switch (_sfh_rem) { \ + case 3: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 16; \ + hashv ^= (uint32_t)(_sfh_key[sizeof (uint16_t)] << 18); \ + hashv += hashv >> 11; \ + break; \ + case 2: hashv += get16bits (_sfh_key); \ + hashv ^= hashv << 11; \ + hashv += hashv >> 17; \ + break; \ + case 1: hashv += *_sfh_key; \ + hashv ^= hashv << 10; \ + hashv += hashv >> 1; \ + } \ + \ + /* Force "avalanching" of final 127 bits */ \ + hashv ^= hashv << 3; \ + hashv += hashv >> 5; \ + hashv ^= hashv << 4; \ + hashv += hashv >> 17; \ + hashv ^= hashv << 25; \ + hashv += hashv >> 6; \ + bkt = hashv & (num_bkts-1); \ +} while(0) + +#ifdef HASH_USING_NO_STRICT_ALIASING +/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads. + * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error. + * MurmurHash uses the faster approach only on CPU's where we know it's safe. + * + * Note the preprocessor built-in defines can be emitted using: + * + * gcc -m64 -dM -E - < /dev/null (on gcc) + * cc -## a.c (where a.c is a simple test file) (Sun Studio) + */ +#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86)) +#define MUR_GETBLOCK(p,i) p[i] +#else /* non intel */ +#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0) +#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1) +#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2) +#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3) +#define WP(p) ((uint32_t*)((unsigned long)(p) & ~3UL)) +#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || defined(__ppc64__)) +#define MUR_THREE_ONE(p) ((((*WP(p))&0x00ffffff) << 8) | (((*(WP(p)+1))&0xff000000) >> 24)) +#define MUR_TWO_TWO(p) ((((*WP(p))&0x0000ffff) <<16) | (((*(WP(p)+1))&0xffff0000) >> 16)) +#define MUR_ONE_THREE(p) ((((*WP(p))&0x000000ff) <<24) | (((*(WP(p)+1))&0xffffff00) >> 8)) +#else /* assume little endian non-intel */ +#define MUR_THREE_ONE(p) ((((*WP(p))&0xffffff00) >> 8) | (((*(WP(p)+1))&0x000000ff) << 24)) +#define MUR_TWO_TWO(p) ((((*WP(p))&0xffff0000) >>16) | (((*(WP(p)+1))&0x0000ffff) << 16)) +#define MUR_ONE_THREE(p) ((((*WP(p))&0xff000000) >>24) | (((*(WP(p)+1))&0x00ffffff) << 8)) +#endif +#define MUR_GETBLOCK(p,i) (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) : \ + (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \ + (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) : \ + MUR_ONE_THREE(p)))) +#endif +#define MUR_ROTL32(x,r) (((x) << (r)) | ((x) >> (32 - (r)))) +#define MUR_FMIX(_h) \ +do { \ + _h ^= _h >> 16; \ + _h *= 0x85ebca6b; \ + _h ^= _h >> 13; \ + _h *= 0xc2b2ae35l; \ + _h ^= _h >> 16; \ +} while(0) + +#define HASH_MUR(key,keylen,num_bkts,hashv,bkt) \ +do { \ + const uint8_t *_mur_data = (const uint8_t*)(key); \ + const int _mur_nblocks = (keylen) / 4; \ + uint32_t _mur_h1 = 0xf88D5353; \ + uint32_t _mur_c1 = 0xcc9e2d51; \ + uint32_t _mur_c2 = 0x1b873593; \ + uint32_t _mur_k1 = 0; \ + const uint8_t *_mur_tail; \ + const uint32_t *_mur_blocks = (const uint32_t*)(_mur_data+_mur_nblocks*4); \ + int _mur_i; \ + for(_mur_i = -_mur_nblocks; _mur_i; _mur_i++) { \ + _mur_k1 = MUR_GETBLOCK(_mur_blocks,_mur_i); \ + _mur_k1 *= _mur_c1; \ + _mur_k1 = MUR_ROTL32(_mur_k1,15); \ + _mur_k1 *= _mur_c2; \ + \ + _mur_h1 ^= _mur_k1; \ + _mur_h1 = MUR_ROTL32(_mur_h1,13); \ + _mur_h1 = _mur_h1*5+0xe6546b64; \ + } \ + _mur_tail = (const uint8_t*)(_mur_data + _mur_nblocks*4); \ + _mur_k1=0; \ + switch((keylen) & 3) { \ + case 3: _mur_k1 ^= _mur_tail[2] << 16; \ + case 2: _mur_k1 ^= _mur_tail[1] << 8; \ + case 1: _mur_k1 ^= _mur_tail[0]; \ + _mur_k1 *= _mur_c1; \ + _mur_k1 = MUR_ROTL32(_mur_k1,15); \ + _mur_k1 *= _mur_c2; \ + _mur_h1 ^= _mur_k1; \ + } \ + _mur_h1 ^= (keylen); \ + MUR_FMIX(_mur_h1); \ + hashv = _mur_h1; \ + bkt = hashv & (num_bkts-1); \ +} while(0) +#endif /* HASH_USING_NO_STRICT_ALIASING */ + +/* key comparison function; return 0 if keys equal */ +#define HASH_KEYCMP(a,b,len) memcmp(a,b,len) + +/* iterate over items in a known bucket to find desired item */ +#define HASH_FIND_IN_BKT(tbl,hh,head,keyptr,keylen_in,out) \ +do { \ + if (head.hh_head) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,head.hh_head)); \ + else out=NULL; \ + while (out) { \ + if ((out)->hh.keylen == keylen_in) { \ + if ((HASH_KEYCMP((out)->hh.key,keyptr,keylen_in)) == 0) break; \ + } \ + if ((out)->hh.hh_next) DECLTYPE_ASSIGN(out,ELMT_FROM_HH(tbl,(out)->hh.hh_next)); \ + else out = NULL; \ + } \ +} while(0) + +/* add an item to a bucket */ +#define HASH_ADD_TO_BKT(head,addhh) \ +do { \ + head.count++; \ + (addhh)->hh_next = head.hh_head; \ + (addhh)->hh_prev = NULL; \ + if (head.hh_head) { (head).hh_head->hh_prev = (addhh); } \ + (head).hh_head=addhh; \ + if (head.count >= ((head.expand_mult+1) * HASH_BKT_CAPACITY_THRESH) \ + && (addhh)->tbl->noexpand != 1) { \ + HASH_EXPAND_BUCKETS((addhh)->tbl); \ + } \ +} while(0) + +/* remove an item from a given bucket */ +#define HASH_DEL_IN_BKT(hh,head,hh_del) \ + (head).count--; \ + if ((head).hh_head == hh_del) { \ + (head).hh_head = hh_del->hh_next; \ + } \ + if (hh_del->hh_prev) { \ + hh_del->hh_prev->hh_next = hh_del->hh_next; \ + } \ + if (hh_del->hh_next) { \ + hh_del->hh_next->hh_prev = hh_del->hh_prev; \ + } + +/* Bucket expansion has the effect of doubling the number of buckets + * and redistributing the items into the new buckets. Ideally the + * items will distribute more or less evenly into the new buckets + * (the extent to which this is true is a measure of the quality of + * the hash function as it applies to the key domain). + * + * With the items distributed into more buckets, the chain length + * (item count) in each bucket is reduced. Thus by expanding buckets + * the hash keeps a bound on the chain length. This bounded chain + * length is the essence of how a hash provides constant time lookup. + * + * The calculation of tbl->ideal_chain_maxlen below deserves some + * explanation. First, keep in mind that we're calculating the ideal + * maximum chain length based on the *new* (doubled) bucket count. + * In fractions this is just n/b (n=number of items,b=new num buckets). + * Since the ideal chain length is an integer, we want to calculate + * ceil(n/b). We don't depend on floating point arithmetic in this + * hash, so to calculate ceil(n/b) with integers we could write + * + * ceil(n/b) = (n/b) + ((n%b)?1:0) + * + * and in fact a previous version of this hash did just that. + * But now we have improved things a bit by recognizing that b is + * always a power of two. We keep its base 2 log handy (call it lb), + * so now we can write this with a bit shift and logical AND: + * + * ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0) + * + */ +#define HASH_EXPAND_BUCKETS(tbl) \ +do { \ + unsigned _he_bkt; \ + unsigned _he_bkt_i; \ + struct UT_hash_handle *_he_thh, *_he_hh_nxt; \ + UT_hash_bucket *_he_new_buckets, *_he_newbkt; \ + _he_new_buckets = (UT_hash_bucket*)uthash_malloc( \ + 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + if (!_he_new_buckets) { uthash_fatal( "out of memory"); } \ + memset(_he_new_buckets, 0, \ + 2 * tbl->num_buckets * sizeof(struct UT_hash_bucket)); \ + tbl->ideal_chain_maxlen = \ + (tbl->num_items >> (tbl->log2_num_buckets+1)) + \ + ((tbl->num_items & ((tbl->num_buckets*2)-1)) ? 1 : 0); \ + tbl->nonideal_items = 0; \ + for(_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++) \ + { \ + _he_thh = tbl->buckets[ _he_bkt_i ].hh_head; \ + while (_he_thh) { \ + _he_hh_nxt = _he_thh->hh_next; \ + HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets*2, _he_bkt); \ + _he_newbkt = &(_he_new_buckets[ _he_bkt ]); \ + if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) { \ + tbl->nonideal_items++; \ + _he_newbkt->expand_mult = _he_newbkt->count / \ + tbl->ideal_chain_maxlen; \ + } \ + _he_thh->hh_prev = NULL; \ + _he_thh->hh_next = _he_newbkt->hh_head; \ + if (_he_newbkt->hh_head) _he_newbkt->hh_head->hh_prev = \ + _he_thh; \ + _he_newbkt->hh_head = _he_thh; \ + _he_thh = _he_hh_nxt; \ + } \ + } \ + uthash_free( tbl->buckets, tbl->num_buckets*sizeof(struct UT_hash_bucket) ); \ + tbl->num_buckets *= 2; \ + tbl->log2_num_buckets++; \ + tbl->buckets = _he_new_buckets; \ + tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \ + (tbl->ineff_expands+1) : 0; \ + if (tbl->ineff_expands > 1) { \ + tbl->noexpand=1; \ + uthash_noexpand_fyi(tbl); \ + } \ + uthash_expand_fyi(tbl); \ +} while(0) + + +/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */ +/* Note that HASH_SORT assumes the hash handle name to be hh. + * HASH_SRT was added to allow the hash handle name to be passed in. */ +#define HASH_SORT(head,cmpfcn) HASH_SRT(hh,head,cmpfcn) +#define HASH_SRT(hh,head,cmpfcn) \ +do { \ + unsigned _hs_i; \ + unsigned _hs_looping,_hs_nmerges,_hs_insize,_hs_psize,_hs_qsize; \ + struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail; \ + if (head) { \ + _hs_insize = 1; \ + _hs_looping = 1; \ + _hs_list = &((head)->hh); \ + while (_hs_looping) { \ + _hs_p = _hs_list; \ + _hs_list = NULL; \ + _hs_tail = NULL; \ + _hs_nmerges = 0; \ + while (_hs_p) { \ + _hs_nmerges++; \ + _hs_q = _hs_p; \ + _hs_psize = 0; \ + for ( _hs_i = 0; _hs_i < _hs_insize; _hs_i++ ) { \ + _hs_psize++; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + if (! (_hs_q) ) break; \ + } \ + _hs_qsize = _hs_insize; \ + while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) { \ + if (_hs_psize == 0) { \ + _hs_e = _hs_q; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_qsize--; \ + } else if ( (_hs_qsize == 0) || !(_hs_q) ) { \ + _hs_e = _hs_p; \ + if (_hs_p){ \ + _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ + ((void*)((char*)(_hs_p->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + } \ + _hs_psize--; \ + } else if (( \ + cmpfcn(DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_p)), \ + DECLTYPE(head)(ELMT_FROM_HH((head)->hh.tbl,_hs_q))) \ + ) <= 0) { \ + _hs_e = _hs_p; \ + if (_hs_p){ \ + _hs_p = (UT_hash_handle*)((_hs_p->next) ? \ + ((void*)((char*)(_hs_p->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + } \ + _hs_psize--; \ + } else { \ + _hs_e = _hs_q; \ + _hs_q = (UT_hash_handle*)((_hs_q->next) ? \ + ((void*)((char*)(_hs_q->next) + \ + (head)->hh.tbl->hho)) : NULL); \ + _hs_qsize--; \ + } \ + if ( _hs_tail ) { \ + _hs_tail->next = ((_hs_e) ? \ + ELMT_FROM_HH((head)->hh.tbl,_hs_e) : NULL); \ + } else { \ + _hs_list = _hs_e; \ + } \ + if (_hs_e) { \ + _hs_e->prev = ((_hs_tail) ? \ + ELMT_FROM_HH((head)->hh.tbl,_hs_tail) : NULL); \ + } \ + _hs_tail = _hs_e; \ + } \ + _hs_p = _hs_q; \ + } \ + if (_hs_tail){ \ + _hs_tail->next = NULL; \ + } \ + if ( _hs_nmerges <= 1 ) { \ + _hs_looping=0; \ + (head)->hh.tbl->tail = _hs_tail; \ + DECLTYPE_ASSIGN(head,ELMT_FROM_HH((head)->hh.tbl, _hs_list)); \ + } \ + _hs_insize *= 2; \ + } \ + HASH_FSCK(hh,head); \ + } \ +} while (0) + +/* This function selects items from one hash into another hash. + * The end result is that the selected items have dual presence + * in both hashes. There is no copy of the items made; rather + * they are added into the new hash through a secondary hash + * hash handle that must be present in the structure. */ +#define HASH_SELECT(hh_dst, dst, hh_src, src, cond) \ +do { \ + unsigned _src_bkt, _dst_bkt; \ + void *_last_elt=NULL, *_elt; \ + UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh=NULL; \ + ptrdiff_t _dst_hho = ((char*)(&(dst)->hh_dst) - (char*)(dst)); \ + if (src) { \ + for(_src_bkt=0; _src_bkt < (src)->hh_src.tbl->num_buckets; _src_bkt++) { \ + for(_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head; \ + _src_hh; \ + _src_hh = _src_hh->hh_next) { \ + _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh); \ + if (cond(_elt)) { \ + _dst_hh = (UT_hash_handle*)(((char*)_elt) + _dst_hho); \ + _dst_hh->key = _src_hh->key; \ + _dst_hh->keylen = _src_hh->keylen; \ + _dst_hh->hashv = _src_hh->hashv; \ + _dst_hh->prev = _last_elt; \ + _dst_hh->next = NULL; \ + if (_last_elt_hh) { _last_elt_hh->next = _elt; } \ + if (!dst) { \ + DECLTYPE_ASSIGN(dst,_elt); \ + HASH_MAKE_TABLE(hh_dst,dst); \ + } else { \ + _dst_hh->tbl = (dst)->hh_dst.tbl; \ + } \ + HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets, _dst_bkt); \ + HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],_dst_hh); \ + (dst)->hh_dst.tbl->num_items++; \ + _last_elt = _elt; \ + _last_elt_hh = _dst_hh; \ + } \ + } \ + } \ + } \ + HASH_FSCK(hh_dst,dst); \ +} while (0) + +#define HASH_CLEAR(hh,head) \ +do { \ + if (head) { \ + uthash_free((head)->hh.tbl->buckets, \ + (head)->hh.tbl->num_buckets*sizeof(struct UT_hash_bucket)); \ + HASH_BLOOM_FREE((head)->hh.tbl); \ + uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \ + (head)=NULL; \ + } \ +} while(0) + +#define HASH_OVERHEAD(hh,head) \ + ((head) ? ( \ + (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) + \ + ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \ + (sizeof(UT_hash_table)) + \ + (HASH_BLOOM_BYTELEN)))) : 0) + +#ifdef NO_DECLTYPE +#define HASH_ITER(hh,head,el,tmp) \ +for((el)=(head), (*(char**)(&(tmp)))=(char*)((head)?(head)->hh.next:NULL); \ + el; (el)=(tmp),(*(char**)(&(tmp)))=(char*)((tmp)?(tmp)->hh.next:NULL)) +#else +#define HASH_ITER(hh,head,el,tmp) \ +for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL); \ + el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL)) +#endif + +/* obtain a count of items in the hash */ +#define HASH_COUNT(head) HASH_CNT(hh,head) +#define HASH_CNT(hh,head) ((head)?((head)->hh.tbl->num_items):0) + +typedef struct UT_hash_bucket { + struct UT_hash_handle *hh_head; + unsigned count; + + /* expand_mult is normally set to 0. In this situation, the max chain length + * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If + * the bucket's chain exceeds this length, bucket expansion is triggered). + * However, setting expand_mult to a non-zero value delays bucket expansion + * (that would be triggered by additions to this particular bucket) + * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH. + * (The multiplier is simply expand_mult+1). The whole idea of this + * multiplier is to reduce bucket expansions, since they are expensive, in + * situations where we know that a particular bucket tends to be overused. + * It is better to let its chain length grow to a longer yet-still-bounded + * value, than to do an O(n) bucket expansion too often. + */ + unsigned expand_mult; + +} UT_hash_bucket; + +/* random signature used only to find hash tables in external analysis */ +#define HASH_SIGNATURE 0xa0111fe1 +#define HASH_BLOOM_SIGNATURE 0xb12220f2 + +typedef struct UT_hash_table { + UT_hash_bucket *buckets; + unsigned num_buckets, log2_num_buckets; + unsigned num_items; + struct UT_hash_handle *tail; /* tail hh in app order, for fast append */ + ptrdiff_t hho; /* hash handle offset (byte pos of hash handle in element */ + + /* in an ideal situation (all buckets used equally), no bucket would have + * more than ceil(#items/#buckets) items. that's the ideal chain length. */ + unsigned ideal_chain_maxlen; + + /* nonideal_items is the number of items in the hash whose chain position + * exceeds the ideal chain maxlen. these items pay the penalty for an uneven + * hash distribution; reaching them in a chain traversal takes >ideal steps */ + unsigned nonideal_items; + + /* ineffective expands occur when a bucket doubling was performed, but + * afterward, more than half the items in the hash had nonideal chain + * positions. If this happens on two consecutive expansions we inhibit any + * further expansion, as it's not helping; this happens when the hash + * function isn't a good fit for the key domain. When expansion is inhibited + * the hash will still work, albeit no longer in constant time. */ + unsigned ineff_expands, noexpand; + + uint32_t signature; /* used only to find hash tables in external analysis */ +#ifdef HASH_BLOOM + uint32_t bloom_sig; /* used only to test bloom exists in external analysis */ + uint8_t *bloom_bv; + char bloom_nbits; +#endif + +} UT_hash_table; + +typedef struct UT_hash_handle { + struct UT_hash_table *tbl; + void *prev; /* prev element in app order */ + void *next; /* next element in app order */ + struct UT_hash_handle *hh_prev; /* previous hh in bucket order */ + struct UT_hash_handle *hh_next; /* next hh in bucket order */ + void *key; /* ptr to enclosing struct's key */ + unsigned keylen; /* enclosing struct's key len */ + unsigned hashv; /* result of hash-fcn(key) */ +} UT_hash_handle; + +#endif /* UTHASH_H */ diff --git a/Buildings/Resources/src/ISAT/utility_isat.c b/Buildings/Resources/src/ISAT/utility_isat.c new file mode 100644 index 00000000000..fe0fb14dc91 --- /dev/null +++ b/Buildings/Resources/src/ISAT/utility_isat.c @@ -0,0 +1,418 @@ +/****************************************************************************** +| +| \file utility_isat.c +| +| \brief define utility functions for isat_ffd +| +| \author Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 4/5/2020 +| +| \ All RIGHTS RESERVED. +******************************************************************************/ +#include "utility_isat.h" +extern double ffdInput[]; +extern double ffdOutput[]; +extern char filepath[]; + +/****************************************************************************** +| Write the log file +| +| \param message Pointer the message +| \param msg_type Type ogf message +| +| \return No return needed +******************************************************************************/ +void mpc_log(char *message, MPC_MSG_TYPE msg_type) { + if(msg_type==MPC_NEW) { + if((file_log=fopen("log.mpc","w+"))==NULL) { + fprintf(stderr, "Error:can not open error file!\n"); + exit(1); + } + } + else if((file_log=fopen("log.mpc","a+"))==NULL) { + fprintf(stderr,"Error:can not open error file!\n"); + exit(1); + } + + switch(msg_type) { + case MPC_WARNING: + fprintf(file_log, "WARNING in %s\n", message); + break; + case MPC_ERROR: + fprintf(file_log, "ERROR in %s\n", message); + break; + /* Normal log */ + default: + fprintf(file_log, "%s\n", message); + } + fclose(file_log); +} /* End of mpc_log() */ + + + +int write_output_data(PARA_DATA *para, REAL **var, int **BINDEX) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + char string[400], tmp[400], tmp1[400]; + int num_output, i, j, k; + float wOutput[5] = {0}; + OUTPUT_TYPE outp_name[5] = {temp_occ}; + + /* Open the output.isat file */ + char filenametmp[400]; + snprintf(filenametmp, sizeof(filenametmp), "%s%s", filepath, "set.isat"); + + if ((file_params = fopen(filenametmp, "r")) == NULL) { + sprintf(msg, "read_sci_input(): Could not open the file %s.",filenametmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + else { + sprintf(msg, "write_output_data(): Start to read the file %s", filenametmp); + ffd_log(msg, FFD_NORMAL); + } + + /* Read the settings for outputs */ + int next = 0; + while (next == 0) { + + if (fgets(string, 400, file_params) == NULL) + next = 1; + if (EOF == sscanf(string, "%s", tmp)) { + continue; + } + + /* Read isat.num_output */ + if (!strcmp(tmp, "isat.num_output")) { + sscanf(string, "%s%d", tmp, &num_output); + if (num_output < 6) { + sprintf(msg, "write_output_data(): %s=%d", tmp, num_output); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "write_output_data(): the current version only supports no more than five outputs"); + ffd_log(msg, FFD_ERROR); + return 1; + } + } + + /* Read outp.outp_name */ + else if (!strcmp(tmp, "/*outp.outp_name:")) { + for (i = 0; i < num_output; i++) { + fgets(string, 400, file_params); + sscanf(string, "%s", tmp); + if (!strcmp(tmp, "outp.outp_name")) { + sscanf(string, "%s%s", tmp, tmp1); + if (!strcmp(tmp1, "temp_roo")) + outp_name[i] = temp_roo; + else if (!strcmp(tmp1, "temp_occ")) + outp_name[i] = temp_occ; + else if (!strcmp(tmp1, "vel_occ")) + outp_name[i] = vel_occ; + else if (!strcmp(tmp1, "temp_sen")) + outp_name[i] = temp_sen; + else if (!strcmp(tmp1, "vel_sen")) + outp_name[i] = vel_sen; + else if (!strcmp(tmp1, "temp_rack")) + outp_name[i] = temp_rack; + else { + sprintf(msg, "write_output_data(): %s is not valid input for %s", tmp1, tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + sprintf(msg, "write_output_data(): %s[%d]=%s", tmp, i, tmp1); + ffd_log(msg, FFD_NORMAL); + } /*end of if (!strcmp(tmp, "outp.outp_name"))*/ + else { + sprintf(msg, "write_output_data(): wrong format for %s, which should be outp.outp_name", tmp); + ffd_log(msg, FFD_ERROR); + return 1; + } + } /*End of for (i = 0; i < num_output; i++)*/ + } /*End of else if (!strcmp(tmp, "/*outp.outp_name:"))*/ + } /* End of while (next = 0)*/ + + fclose(file_params); + + /* Write outputs */ + for (i = 0; i < num_output; i++) { + if (outp_name[i] == temp_roo) { + ffdOutput[i] = average_room_temp(para, var); + sprintf(msg, "write_output_data(): ffdOutput[%d]=%lf", i, ffdOutput[i]); + ffd_log(msg, FFD_NORMAL); + } + else if (outp_name[i] == temp_occ) { + ffdOutput[i] = average_volume_temp(para, var); + sprintf(msg, "write_output_data(): ffdOutput[%d]=%lf", i, ffdOutput[i]); + ffd_log(msg, FFD_NORMAL); + } + else if (outp_name[i] == vel_occ) { + ffdOutput[i] = average_volume_vel(para, var); + sprintf(msg, "write_output_data(): ffdOutput[%d]=%lf", i, ffdOutput[i]); + ffd_log(msg, FFD_NORMAL); + } + else if (outp_name[i] == temp_sen) { + ffdOutput[i] = sensor_temp(para, var); + sprintf(msg, "write_output_data(): ffdOutput[%d]=%lf", i, ffdOutput[i]); + ffd_log(msg, FFD_NORMAL); + } + else if (outp_name[i] == vel_sen) { + ffdOutput[i] = sensor_vel(para, var); + sprintf(msg, "write_output_data(): ffdOutput[%d]=%lf", i, ffdOutput[i]); + ffd_log(msg, FFD_NORMAL); + } + else if (outp_name[i] == temp_rack) { + ffdOutput[i] = maximum_rack_temp(para, var); + sprintf(msg, "write_output_data(): ffdOutput[%d]=%lf", i, ffdOutput[i]); + ffd_log(msg, FFD_NORMAL); + } + else { + sprintf(msg, "write_output_data(): wrong format for names of outputs"); + ffd_log(msg, FFD_ERROR); + return 1; + } + } + + sprintf(msg, "write_output_data(): finish writing output data"); + ffd_log(msg, FFD_NORMAL); + + return 0; +} /* End of write_output_data() */ + + + /****************************************************************************** + | Calculate volume weighted averaged value of temperature in a space + | + | The average is weighted by volume of each cell + | + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | + | \return Volume weighted average + ******************************************************************************/ +REAL average_room_temp(PARA_DATA *para, REAL **var) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int i, j, k, k_occ; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL tmp1 = 0, tmp2 = 0, tmp3 = 0; + + FOR_EACH_CELL + if (var[FLAGP][IX(i, j, k)] == FLUID) { + tmp1 = vol(para, var, i, j, k); + tmp2 += var[TEMP][IX(i, j, k)] * tmp1; + tmp3 += tmp1; + } + else + continue; + END_FOR + + if (tmp3 > 0) { + return tmp2 / tmp3 + 273.15; + } + else { + sprintf(msg, "average_room_temp(): the volume of fluid is zero."); + ffd_log(msg, FFD_ERROR); + return 0; + } +}/* End of average_volume_temp( ) */ + + /****************************************************************************** + | Calculate volume weighted averaged value of temperature in a space + | + | The average is weighted by volume of each cell + | + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | + | \return Volume weighted average + ******************************************************************************/ +REAL average_volume_temp(PARA_DATA *para, REAL **var) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int i, j, k, k_occ; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL tmp1 = 0, tmp2 = 0, tmp3 = 0; + + /*k_occ represents the height of occupant zone, which can be defined by users*/ + /*here k_occ is set as kmax by default, which calculates room-averaged value*/ + k_occ = kmax; + + FOR_EACH_CELL + if (var[FLAGP][IX(i, j, k)] == FLUID && k < k_occ) { + tmp1 = vol(para, var, i, j, k); + tmp2 += var[TEMP][IX(i, j, k)] * tmp1; + tmp3 += tmp1; + } + else + continue; + END_FOR + + if (tmp3 > 0) { + return tmp2 / tmp3 + 273.15; + } + else { + sprintf(msg, "average_volume_temp(): the volume of fluid is zero."); + ffd_log(msg, FFD_ERROR); + return 0; + } +}/* End of average_volume_temp( ) */ + + /****************************************************************************** + | Calculate volume weighted averaged value of velocity in a space + | + | The average is weighted by volume of each cell + | + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | + | \return Volume weighted average + ******************************************************************************/ +REAL average_volume_vel(PARA_DATA *para, REAL **var) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int i, j, k, k_occ; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + REAL tmp1 = 0, tmp2 = 0, tmp3 = 0, u, v, w; + + /*k_occ represents the height of occupant zone, which can be defined by users + here k_occ is set as kmax by default, which calculates room-averaged value*/ + k_occ = kmax; + + FOR_EACH_CELL + if (var[FLAGP][IX(i, j, k)] == FLUID && k < k_occ) { + u = var[VX][IX(i, j, k)]; + v = var[VY][IX(i, j, k)]; + w = var[VZ][IX(i, j, k)]; + tmp1 = vol(para, var, i, j, k); + tmp2 += sqrt(u*u + v*v + w*w) * tmp1; + tmp3 += tmp1; + } + else + continue; + END_FOR + + if (tmp3 > 0){ + return tmp2 / tmp3; + } + else{ + sprintf(msg, "average_room_vel(): the volume of fluid is zero."); + ffd_log(msg, FFD_ERROR); + return 0; + } +}/* End of average_volume_vel( ) */ + + /****************************************************************************** + | Return value of temperature at sensor location + ******************************************************************************/ +REAL sensor_temp(PARA_DATA *para, REAL **var) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + int i, j, k; + + /*i, j and k represent the location of the sensor, which can be defined by users + here i, j and k are set in the center of the room by default*/ + i = imax / 2; + j = jmax / 2; + k = kmax / 2; + + return var[TEMPM][IX(i, j, k)] + 273.15; + +}/* End of sensor_temp( ) */ + + /****************************************************************************** + | Return value of velocity at sensor location + ******************************************************************************/ +REAL sensor_vel(PARA_DATA *para, REAL **var) { + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + int i, j, k; + double u, v, w; + + /*i, j and k represent the location of the sensor, which can be defined by users. + here i, j and k are set in the center of the room by default*/ + i = imax / 2; + j = jmax / 2; + k = kmax / 2; + + /*calcualte velocity in x, y and z direction at sensor location*/ + u = var[VX][IX(i, j, k)]; + v = var[VY][IX(i, j, k)]; + w = var[VZ][IX(i, j, k)]; + + /*return velocity magnitude at sensor location*/ + return sqrt(u*u + v*v + w*w); +}/* End of sensor_temp( ) */ + + /****************************************************************************** + | Calculate volume weighted averaged value of temperature in a space + | + | The average is weighted by volume of each cell + | + | \param para Pointer to FFD parameters + | \param var Pointer to FFD simulation variables + | + | \return Volume weighted average + ******************************************************************************/ +REAL maximum_rack_temp(PARA_DATA *para, REAL **var) { + int i, j; + int ip, jp, kp; + REAL T1, T2, T3, T4, Tave = 0, Tmax = 0; + int imax = para->geom->imax, jmax = para->geom->jmax; + int kmax = para->geom->kmax; + int IMAX = imax + 2, IJMAX = (imax + 2)*(jmax + 2); + + if (para->bc->nb_rack > 0) { + /*find monitor index*/ + if (get_monitor_index(para, var) != 0) { + ffd_log("write_monitor_data(): cannot find the index of monitoring cells", FFD_ERROR); + } + + /*get temperatures at monitored points of each rack*/ + for (i = 0;i < para->bc->nb_rack;i++) { + /*Point1*/ + ip = para->sens->indexMoniPoints[i][0][0]; + jp = para->sens->indexMoniPoints[i][0][1]; + kp = para->sens->indexMoniPoints[i][0][2]; + T1 = var[TEMP][IX(ip, jp, kp)]; + /*Point2*/ + ip = para->sens->indexMoniPoints[i][1][0]; + jp = para->sens->indexMoniPoints[i][1][1]; + kp = para->sens->indexMoniPoints[i][1][2]; + T2 = var[TEMP][IX(ip, jp, kp)]; + /*Point3*/ + ip = para->sens->indexMoniPoints[i][2][0]; + jp = para->sens->indexMoniPoints[i][2][1]; + kp = para->sens->indexMoniPoints[i][2][2]; + T3 = var[TEMP][IX(ip, jp, kp)]; + /*Point4*/ + ip = para->sens->indexMoniPoints[i][3][0]; + jp = para->sens->indexMoniPoints[i][3][1]; + kp = para->sens->indexMoniPoints[i][3][2]; + T4 = var[TEMP][IX(ip, jp, kp)]; + + /*calculate average rack-inlet temperature*/ + Tave = (T1 + T2 + T3 + T4) / 4; + if (Tave > Tmax) { + Tmax = Tave; + } + } + } + else { + sprintf(msg, "maximum_rack_temp(): there's no rack in this case."); + ffd_log(msg, FFD_ERROR); + return 0; + } + + return Tmax + 273.15; +}/* End of maximum_rack_temp() */ diff --git a/Buildings/Resources/src/ISAT/utility_isat.h b/Buildings/Resources/src/ISAT/utility_isat.h new file mode 100644 index 00000000000..514503ad3da --- /dev/null +++ b/Buildings/Resources/src/ISAT/utility_isat.h @@ -0,0 +1,55 @@ +/****************************************************************************** +| +| \file utility_isat.h +| +| \brief define utility functions for isat_ffd +| +| \author Xu Han +| Univeristy of Colorado Boulder, xuha3556@colorado.edu +| Wei Tian +| University of Miami, Schneider Electric +| w.tian@umiami.edu, Wei.Tian@Schneider-Electric.com +| Dan Li +| University of Miami +| +| \date 4/5/2020 +| +| \ All RIGHTS RESERVED. +******************************************************************************/ + + +#ifndef UTILITY_IAST_H_INCLUDED +#define UTILITY_IAST_H_INCLUDED + +#ifndef _COMMON_H +#define _COMMON_H +#include "common.h" +#endif + +#ifndef _DATA_STRUCTURE_H +#define _DATA_STRUCTURE_H +#include "../FastFluidDynamics/data_structure.h" +#endif + +#ifndef _GEOMETRY_H +#define _GEOMETRY_H +#include "../FastFluidDynamics/geometry.h" +#endif + +FILE *file_log; +FILE *file_params; + +void mpc_log(char *message, MPC_MSG_TYPE msg_type); +int write_output_data(PARA_DATA *para, REAL **var, int **BINDEX); +REAL average_room_temp(PARA_DATA *para, REAL **var); +REAL average_volume_temp(PARA_DATA *para, REAL **var); +REAL average_volume_vel(PARA_DATA *para, REAL **var); +REAL sensor_temp(PARA_DATA *para, REAL **var); +REAL sensor_vel(PARA_DATA *para, REAL **var); +REAL maximum_rack_temp(PARA_DATA *para, REAL **var); + +#endif + + + + diff --git a/Buildings/Resources/src/ISAT/utlist.h b/Buildings/Resources/src/ISAT/utlist.h new file mode 100644 index 00000000000..7fd7d553a90 --- /dev/null +++ b/Buildings/Resources/src/ISAT/utlist.h @@ -0,0 +1,757 @@ +/**************************************************************************** +Copyright (c) 2007-2014, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************/ + +#ifndef UTLIST_H +#define UTLIST_H + +#define UTLIST_VERSION 1.9.9 + +#include + +/* + * This file contains macros to manipulate singly and doubly-linked lists. + * + * 1. LL_ macros: singly-linked lists. + * 2. DL_ macros: doubly-linked lists. + * 3. CDL_ macros: circular doubly-linked lists. + * + * To use singly-linked lists, your structure must have a "next" pointer. + * To use doubly-linked lists, your structure must "prev" and "next" pointers. + * Either way, the pointer to the head of the list must be initialized to NULL. + * + * ----------------.EXAMPLE ------------------------- + * struct item { + * int id; + * struct item *prev, *next; + * } + * + * struct item *list = NULL: + * + * int main() { + * struct item *item; + * ... allocate and populate item ... + * DL_APPEND(list, item); + * } + * -------------------------------------------------- + * + * For doubly-linked lists, the append and delete macros are O(1) + * For singly-linked lists, append and delete are O(n) but prepend is O(1) + * The sort macro is O(n log(n)) for all types of single/double/circular lists. + */ + +/* These macros use decltype or the earlier __typeof GNU extension. + As decltype is only available in newer compilers (VS2010 or gcc 4.3+ + when compiling c++ code), this code uses whatever method is needed + or, for VS2008 where neither is available, uses casting workarounds. */ +#ifdef _MSC_VER /* MS compiler */ +#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */ +#define LDECLTYPE(x) decltype(x) +#else /* VS2008 or older (or VS2010 in C mode) */ +#define NO_DECLTYPE +#define LDECLTYPE(x) char* +#endif +#elif defined(__ICCARM__) +#define NO_DECLTYPE +#define LDECLTYPE(x) char* +#else /* GNU, Sun and other compilers */ +#define LDECLTYPE(x) __typeof(x) +#endif + +/* for VS2008 we use some workarounds to get around the lack of decltype, + * namely, we always reassign our tmp variable to the list head if we need + * to dereference its prev/next pointers, and save/restore the real head.*/ +#ifdef NO_DECLTYPE +#define _SV(elt,list) _tmp = (char*)(list); {char **_alias = (char**)&(list); *_alias = (elt); } +#define _NEXT(elt,list,next) ((char*)((list)->next)) +#define _NEXTASGN(elt,list,to,next) { char **_alias = (char**)&((list)->next); *_alias=(char*)(to); } +/* #define _PREV(elt,list,prev) ((char*)((list)->prev)) */ +#define _PREVASGN(elt,list,to,prev) { char **_alias = (char**)&((list)->prev); *_alias=(char*)(to); } +#define _RS(list) { char **_alias = (char**)&(list); *_alias=_tmp; } +#define _CASTASGN(a,b) { char **_alias = (char**)&(a); *_alias=(char*)(b); } +#else +#define _SV(elt,list) +#define _NEXT(elt,list,next) ((elt)->next) +#define _NEXTASGN(elt,list,to,next) ((elt)->next)=(to) +/* #define _PREV(elt,list,prev) ((elt)->prev) */ +#define _PREVASGN(elt,list,to,prev) ((elt)->prev)=(to) +#define _RS(list) +#define _CASTASGN(a,b) (a)=(b) +#endif + +/****************************************************************************** + * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort * + * Unwieldy variable names used here to avoid shadowing passed-in variables. * + *****************************************************************************/ +#define LL_SORT(list, cmp) \ + LL_SORT2(list, cmp, next) + +#define LL_SORT2(list, cmp, next) \ +do { \ + LDECLTYPE(list) _ls_p; \ + LDECLTYPE(list) _ls_q; \ + LDECLTYPE(list) _ls_e; \ + LDECLTYPE(list) _ls_tail; \ + int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \ + if (list) { \ + _ls_insize = 1; \ + _ls_looping = 1; \ + while (_ls_looping) { \ + _CASTASGN(_ls_p,list); \ + list = NULL; \ + _ls_tail = NULL; \ + _ls_nmerges = 0; \ + while (_ls_p) { \ + _ls_nmerges++; \ + _ls_q = _ls_p; \ + _ls_psize = 0; \ + for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \ + _ls_psize++; \ + _SV(_ls_q,list); _ls_q = _NEXT(_ls_q,list,next); _RS(list); \ + if (!_ls_q) break; \ + } \ + _ls_qsize = _ls_insize; \ + while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \ + if (_ls_psize == 0) { \ + _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ + _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ + } else if (_ls_qsize == 0 || !_ls_q) { \ + _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ + _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ + } else if (cmp(_ls_p,_ls_q) <= 0) { \ + _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ + _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ + } else { \ + _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ + _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ + } \ + if (_ls_tail) { \ + _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \ + } else { \ + _CASTASGN(list,_ls_e); \ + } \ + _ls_tail = _ls_e; \ + } \ + _ls_p = _ls_q; \ + } \ + if (_ls_tail) { \ + _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,NULL,next); _RS(list); \ + } \ + if (_ls_nmerges <= 1) { \ + _ls_looping=0; \ + } \ + _ls_insize *= 2; \ + } \ + } \ +} while (0) + + +#define DL_SORT(list, cmp) \ + DL_SORT2(list, cmp, prev, next) + +#define DL_SORT2(list, cmp, prev, next) \ +do { \ + LDECLTYPE(list) _ls_p; \ + LDECLTYPE(list) _ls_q; \ + LDECLTYPE(list) _ls_e; \ + LDECLTYPE(list) _ls_tail; \ + int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \ + if (list) { \ + _ls_insize = 1; \ + _ls_looping = 1; \ + while (_ls_looping) { \ + _CASTASGN(_ls_p,list); \ + list = NULL; \ + _ls_tail = NULL; \ + _ls_nmerges = 0; \ + while (_ls_p) { \ + _ls_nmerges++; \ + _ls_q = _ls_p; \ + _ls_psize = 0; \ + for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \ + _ls_psize++; \ + _SV(_ls_q,list); _ls_q = _NEXT(_ls_q,list,next); _RS(list); \ + if (!_ls_q) break; \ + } \ + _ls_qsize = _ls_insize; \ + while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \ + if (_ls_psize == 0) { \ + _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ + _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ + } else if (_ls_qsize == 0 || !_ls_q) { \ + _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ + _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ + } else if (cmp(_ls_p,_ls_q) <= 0) { \ + _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ + _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ + } else { \ + _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ + _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ + } \ + if (_ls_tail) { \ + _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \ + } else { \ + _CASTASGN(list,_ls_e); \ + } \ + _SV(_ls_e,list); _PREVASGN(_ls_e,list,_ls_tail,prev); _RS(list); \ + _ls_tail = _ls_e; \ + } \ + _ls_p = _ls_q; \ + } \ + _CASTASGN(list->prev, _ls_tail); \ + _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,NULL,next); _RS(list); \ + if (_ls_nmerges <= 1) { \ + _ls_looping=0; \ + } \ + _ls_insize *= 2; \ + } \ + } \ +} while (0) + +#define CDL_SORT(list, cmp) \ + CDL_SORT2(list, cmp, prev, next) + +#define CDL_SORT2(list, cmp, prev, next) \ +do { \ + LDECLTYPE(list) _ls_p; \ + LDECLTYPE(list) _ls_q; \ + LDECLTYPE(list) _ls_e; \ + LDECLTYPE(list) _ls_tail; \ + LDECLTYPE(list) _ls_oldhead; \ + LDECLTYPE(list) _tmp; \ + int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \ + if (list) { \ + _ls_insize = 1; \ + _ls_looping = 1; \ + while (_ls_looping) { \ + _CASTASGN(_ls_p,list); \ + _CASTASGN(_ls_oldhead,list); \ + list = NULL; \ + _ls_tail = NULL; \ + _ls_nmerges = 0; \ + while (_ls_p) { \ + _ls_nmerges++; \ + _ls_q = _ls_p; \ + _ls_psize = 0; \ + for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \ + _ls_psize++; \ + _SV(_ls_q,list); \ + if (_NEXT(_ls_q,list,next) == _ls_oldhead) { \ + _ls_q = NULL; \ + } else { \ + _ls_q = _NEXT(_ls_q,list,next); \ + } \ + _RS(list); \ + if (!_ls_q) break; \ + } \ + _ls_qsize = _ls_insize; \ + while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \ + if (_ls_psize == 0) { \ + _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ + _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ + if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \ + } else if (_ls_qsize == 0 || !_ls_q) { \ + _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ + _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ + if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \ + } else if (cmp(_ls_p,_ls_q) <= 0) { \ + _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ + _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ + if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \ + } else { \ + _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ + _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ + if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \ + } \ + if (_ls_tail) { \ + _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \ + } else { \ + _CASTASGN(list,_ls_e); \ + } \ + _SV(_ls_e,list); _PREVASGN(_ls_e,list,_ls_tail,prev); _RS(list); \ + _ls_tail = _ls_e; \ + } \ + _ls_p = _ls_q; \ + } \ + _CASTASGN(list->prev,_ls_tail); \ + _CASTASGN(_tmp,list); \ + _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_tmp,next); _RS(list); \ + if (_ls_nmerges <= 1) { \ + _ls_looping=0; \ + } \ + _ls_insize *= 2; \ + } \ + } \ +} while (0) + +/****************************************************************************** + * singly linked list macros (non-circular) * + *****************************************************************************/ +#define LL_PREPEND(head,add) \ + LL_PREPEND2(head,add,next) + +#define LL_PREPEND2(head,add,next) \ +do { \ + (add)->next = head; \ + head = add; \ +} while (0) + +#define LL_CONCAT(head1,head2) \ + LL_CONCAT2(head1,head2,next) + +#define LL_CONCAT2(head1,head2,next) \ +do { \ + LDECLTYPE(head1) _tmp; \ + if (head1) { \ + _tmp = head1; \ + while (_tmp->next) { _tmp = _tmp->next; } \ + _tmp->next=(head2); \ + } else { \ + (head1)=(head2); \ + } \ +} while (0) + +#define LL_APPEND(head,add) \ + LL_APPEND2(head,add,next) + +#define LL_APPEND2(head,add,next) \ +do { \ + LDECLTYPE(head) _tmp; \ + (add)->next=NULL; \ + if (head) { \ + _tmp = head; \ + while (_tmp->next) { _tmp = _tmp->next; } \ + _tmp->next=(add); \ + } else { \ + (head)=(add); \ + } \ +} while (0) + +#define LL_DELETE(head,del) \ + LL_DELETE2(head,del,next) + +#define LL_DELETE2(head,del,next) \ +do { \ + LDECLTYPE(head) _tmp; \ + if ((head) == (del)) { \ + (head)=(head)->next; \ + } else { \ + _tmp = head; \ + while (_tmp->next && (_tmp->next != (del))) { \ + _tmp = _tmp->next; \ + } \ + if (_tmp->next) { \ + _tmp->next = ((del)->next); \ + } \ + } \ +} while (0) + +/* Here are VS2008 replacements for LL_APPEND and LL_DELETE */ +#define LL_APPEND_VS2008(head,add) \ + LL_APPEND2_VS2008(head,add,next) + +#define LL_APPEND2_VS2008(head,add,next) \ +do { \ + if (head) { \ + (add)->next = head; /* use add->next as a temp variable */ \ + while ((add)->next->next) { (add)->next = (add)->next->next; } \ + (add)->next->next=(add); \ + } else { \ + (head)=(add); \ + } \ + (add)->next=NULL; \ +} while (0) + +#define LL_DELETE_VS2008(head,del) \ + LL_DELETE2_VS2008(head,del,next) + +#define LL_DELETE2_VS2008(head,del,next) \ +do { \ + if ((head) == (del)) { \ + (head)=(head)->next; \ + } else { \ + char *_tmp = (char*)(head); \ + while ((head)->next && ((head)->next != (del))) { \ + head = (head)->next; \ + } \ + if ((head)->next) { \ + (head)->next = ((del)->next); \ + } \ + { \ + char **_head_alias = (char**)&(head); \ + *_head_alias = _tmp; \ + } \ + } \ +} while (0) +#ifdef NO_DECLTYPE +#undef LL_APPEND +#define LL_APPEND LL_APPEND_VS2008 +#undef LL_DELETE +#define LL_DELETE LL_DELETE_VS2008 +#undef LL_DELETE2 +#define LL_DELETE2 LL_DELETE2_VS2008 +#undef LL_APPEND2 +#define LL_APPEND2 LL_APPEND2_VS2008 +#undef LL_CONCAT /* no LL_CONCAT_VS2008 */ +#undef DL_CONCAT /* no DL_CONCAT_VS2008 */ +#endif +/* end VS2008 replacements */ + +#define LL_COUNT(head,el,counter) \ + LL_COUNT2(head,el,counter,next) \ + +#define LL_COUNT2(head,el,counter,next) \ +{ \ + counter = 0; \ + LL_FOREACH2(head,el,next){ ++counter; } \ +} + +#define LL_FOREACH(head,el) \ + LL_FOREACH2(head,el,next) + +#define LL_FOREACH2(head,el,next) \ + for(el=head;el;el=(el)->next) + +#define LL_FOREACH_SAFE(head,el,tmp) \ + LL_FOREACH_SAFE2(head,el,tmp,next) + +#define LL_FOREACH_SAFE2(head,el,tmp,next) \ + for((el)=(head);(el) && (tmp = (el)->next, 1); (el) = tmp) + +#define LL_SEARCH_SCALAR(head,out,field,val) \ + LL_SEARCH_SCALAR2(head,out,field,val,next) + +#define LL_SEARCH_SCALAR2(head,out,field,val,next) \ +do { \ + LL_FOREACH2(head,out,next) { \ + if ((out)->field == (val)) break; \ + } \ +} while(0) + +#define LL_SEARCH(head,out,elt,cmp) \ + LL_SEARCH2(head,out,elt,cmp,next) + +#define LL_SEARCH2(head,out,elt,cmp,next) \ +do { \ + LL_FOREACH2(head,out,next) { \ + if ((cmp(out,elt))==0) break; \ + } \ +} while(0) + +#define LL_REPLACE_ELEM(head, el, add) \ +do { \ + LDECLTYPE(head) _tmp; \ + assert(head != NULL); \ + assert(el != NULL); \ + assert(add != NULL); \ + (add)->next = (el)->next; \ + if ((head) == (el)) { \ + (head) = (add); \ + } else { \ + _tmp = head; \ + while (_tmp->next && (_tmp->next != (el))) { \ + _tmp = _tmp->next; \ + } \ + if (_tmp->next) { \ + _tmp->next = (add); \ + } \ + } \ +} while (0) + +#define LL_PREPEND_ELEM(head, el, add) \ +do { \ + LDECLTYPE(head) _tmp; \ + assert(head != NULL); \ + assert(el != NULL); \ + assert(add != NULL); \ + (add)->next = (el); \ + if ((head) == (el)) { \ + (head) = (add); \ + } else { \ + _tmp = head; \ + while (_tmp->next && (_tmp->next != (el))) { \ + _tmp = _tmp->next; \ + } \ + if (_tmp->next) { \ + _tmp->next = (add); \ + } \ + } \ +} while (0) \ + + +/****************************************************************************** + * doubly linked list macros (non-circular) * + *****************************************************************************/ +#define DL_PREPEND(head,add) \ + DL_PREPEND2(head,add,prev,next) + +#define DL_PREPEND2(head,add,prev,next) \ +do { \ + (add)->next = head; \ + if (head) { \ + (add)->prev = (head)->prev; \ + (head)->prev = (add); \ + } else { \ + (add)->prev = (add); \ + } \ + (head) = (add); \ +} while (0) + +#define DL_APPEND(head,add) \ + DL_APPEND2(head,add,prev,next) + +#define DL_APPEND2(head,add,prev,next) \ +do { \ + if (head) { \ + (add)->prev = (head)->prev; \ + (head)->prev->next = (add); \ + (head)->prev = (add); \ + (add)->next = NULL; \ + } else { \ + (head)=(add); \ + (head)->prev = (head); \ + (head)->next = NULL; \ + } \ +} while (0) + +#define DL_CONCAT(head1,head2) \ + DL_CONCAT2(head1,head2,prev,next) + +#define DL_CONCAT2(head1,head2,prev,next) \ +do { \ + LDECLTYPE(head1) _tmp; \ + if (head2) { \ + if (head1) { \ + _tmp = (head2)->prev; \ + (head2)->prev = (head1)->prev; \ + (head1)->prev->next = (head2); \ + (head1)->prev = _tmp; \ + } else { \ + (head1)=(head2); \ + } \ + } \ +} while (0) + +#define DL_DELETE(head,del) \ + DL_DELETE2(head,del,prev,next) + +#define DL_DELETE2(head,del,prev,next) \ +do { \ + assert((del)->prev != NULL); \ + if ((del)->prev == (del)) { \ + (head)=NULL; \ + } else if ((del)==(head)) { \ + (del)->next->prev = (del)->prev; \ + (head) = (del)->next; \ + } else { \ + (del)->prev->next = (del)->next; \ + if ((del)->next) { \ + (del)->next->prev = (del)->prev; \ + } else { \ + (head)->prev = (del)->prev; \ + } \ + } \ +} while (0) + +#define DL_COUNT(head,el,counter) \ + DL_COUNT2(head,el,counter,next) \ + +#define DL_COUNT2(head,el,counter,next) \ +{ \ + counter = 0; \ + DL_FOREACH2(head,el,next){ ++counter; } \ +} + +#define DL_FOREACH(head,el) \ + DL_FOREACH2(head,el,next) + +#define DL_FOREACH2(head,el,next) \ + for(el=head;el;el=(el)->next) + +/* this version is safe for deleting the elements during iteration */ +#define DL_FOREACH_SAFE(head,el,tmp) \ + DL_FOREACH_SAFE2(head,el,tmp,next) + +#define DL_FOREACH_SAFE2(head,el,tmp,next) \ + for((el)=(head);(el) && (tmp = (el)->next, 1); (el) = tmp) + +/* these are identical to their singly-linked list counterparts */ +#define DL_SEARCH_SCALAR LL_SEARCH_SCALAR +#define DL_SEARCH LL_SEARCH +#define DL_SEARCH_SCALAR2 LL_SEARCH_SCALAR2 +#define DL_SEARCH2 LL_SEARCH2 + +#define DL_REPLACE_ELEM(head, el, add) \ +do { \ + assert(head != NULL); \ + assert(el != NULL); \ + assert(add != NULL); \ + if ((head) == (el)) { \ + (head) = (add); \ + (add)->next = (el)->next; \ + if ((el)->next == NULL) { \ + (add)->prev = (add); \ + } else { \ + (add)->prev = (el)->prev; \ + (add)->next->prev = (add); \ + } \ + } else { \ + (add)->next = (el)->next; \ + (add)->prev = (el)->prev; \ + (add)->prev->next = (add); \ + if ((el)->next == NULL) { \ + (head)->prev = (add); \ + } else { \ + (add)->next->prev = (add); \ + } \ + } \ +} while (0) + +#define DL_PREPEND_ELEM(head, el, add) \ +do { \ + assert(head != NULL); \ + assert(el != NULL); \ + assert(add != NULL); \ + (add)->next = (el); \ + (add)->prev = (el)->prev; \ + (el)->prev = (add); \ + if ((head) == (el)) { \ + (head) = (add); \ + } else { \ + (add)->prev->next = (add); \ + } \ +} while (0) \ + + +/****************************************************************************** + * circular doubly linked list macros * + *****************************************************************************/ +#define CDL_PREPEND(head,add) \ + CDL_PREPEND2(head,add,prev,next) + +#define CDL_PREPEND2(head,add,prev,next) \ +do { \ + if (head) { \ + (add)->prev = (head)->prev; \ + (add)->next = (head); \ + (head)->prev = (add); \ + (add)->prev->next = (add); \ + } else { \ + (add)->prev = (add); \ + (add)->next = (add); \ + } \ +(head)=(add); \ +} while (0) + +#define CDL_DELETE(head,del) \ + CDL_DELETE2(head,del,prev,next) + +#define CDL_DELETE2(head,del,prev,next) \ +do { \ + if ( ((head)==(del)) && ((head)->next == (head))) { \ + (head) = 0L; \ + } else { \ + (del)->next->prev = (del)->prev; \ + (del)->prev->next = (del)->next; \ + if ((del) == (head)) (head)=(del)->next; \ + } \ +} while (0) + +#define CDL_COUNT(head,el,counter) \ + CDL_COUNT2(head,el,counter,next) \ + +#define CDL_COUNT2(head, el, counter,next) \ +{ \ + counter = 0; \ + CDL_FOREACH2(head,el,next){ ++counter; } \ +} + +#define CDL_FOREACH(head,el) \ + CDL_FOREACH2(head,el,next) + +#define CDL_FOREACH2(head,el,next) \ + for(el=head;el;el=((el)->next==head ? 0L : (el)->next)) + +#define CDL_FOREACH_SAFE(head,el,tmp1,tmp2) \ + CDL_FOREACH_SAFE2(head,el,tmp1,tmp2,prev,next) + +#define CDL_FOREACH_SAFE2(head,el,tmp1,tmp2,prev,next) \ + for((el)=(head), ((tmp1)=(head)?((head)->prev):NULL); \ + (el) && ((tmp2)=(el)->next, 1); \ + ((el) = (((el)==(tmp1)) ? 0L : (tmp2)))) + +#define CDL_SEARCH_SCALAR(head,out,field,val) \ + CDL_SEARCH_SCALAR2(head,out,field,val,next) + +#define CDL_SEARCH_SCALAR2(head,out,field,val,next) \ +do { \ + CDL_FOREACH2(head,out,next) { \ + if ((out)->field == (val)) break; \ + } \ +} while(0) + +#define CDL_SEARCH(head,out,elt,cmp) \ + CDL_SEARCH2(head,out,elt,cmp,next) + +#define CDL_SEARCH2(head,out,elt,cmp,next) \ +do { \ + CDL_FOREACH2(head,out,next) { \ + if ((cmp(out,elt))==0) break; \ + } \ +} while(0) + +#define CDL_REPLACE_ELEM(head, el, add) \ +do { \ + assert(head != NULL); \ + assert(el != NULL); \ + assert(add != NULL); \ + if ((el)->next == (el)) { \ + (add)->next = (add); \ + (add)->prev = (add); \ + (head) = (add); \ + } else { \ + (add)->next = (el)->next; \ + (add)->prev = (el)->prev; \ + (add)->next->prev = (add); \ + (add)->prev->next = (add); \ + if ((head) == (el)) { \ + (head) = (add); \ + } \ + } \ +} while (0) + +#define CDL_PREPEND_ELEM(head, el, add) \ +do { \ + assert(head != NULL); \ + assert(el != NULL); \ + assert(add != NULL); \ + (add)->next = (el); \ + (add)->prev = (el)->prev; \ + (el)->prev = (add); \ + (add)->prev->next = (add); \ + if ((head) == (el)) { \ + (head) = (add); \ + } \ +} while (0) \ + +#endif /* UTLIST_H */ + diff --git a/Buildings/Resources/src/ISAT/utstring.h b/Buildings/Resources/src/ISAT/utstring.h new file mode 100644 index 00000000000..de18e0c536a --- /dev/null +++ b/Buildings/Resources/src/ISAT/utstring.h @@ -0,0 +1,393 @@ +/**************************************************************************** +Copyright (c) 2008-2014, Troy D. Hanson http://troydhanson.github.com/uthash/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +****************************************************************************/ + +/* a dynamic string implementation using macros + */ +#ifndef UTSTRING_H +#define UTSTRING_H + +#define UTSTRING_VERSION 1.9.9 + +#ifdef __GNUC__ +#define _UNUSED_ __attribute__ ((__unused__)) +#else +#define _UNUSED_ +#endif + +#include +#include +#include +#include +#define oom() exit(-1) + +typedef struct { + char *d; + size_t n; /* allocd size */ + size_t i; /* index of first unused byte */ +} UT_string; + +#define utstring_reserve(s,amt) \ +do { \ + if (((s)->n - (s)->i) < (size_t)(amt)) { \ + (s)->d = (char*)realloc((s)->d, (s)->n + amt); \ + if ((s)->d == NULL) oom(); \ + (s)->n += amt; \ + } \ +} while(0) + +#define utstring_init(s) \ +do { \ + (s)->n = 0; (s)->i = 0; (s)->d = NULL; \ + utstring_reserve(s,100); \ + (s)->d[0] = '\0'; \ +} while(0) + +#define utstring_done(s) \ +do { \ + if ((s)->d != NULL) free((s)->d); \ + (s)->n = 0; \ +} while(0) + +#define utstring_free(s) \ +do { \ + utstring_done(s); \ + free(s); \ +} while(0) + +#define utstring_new(s) \ +do { \ + s = (UT_string*)calloc(sizeof(UT_string),1); \ + if (!s) oom(); \ + utstring_init(s); \ +} while(0) + +#define utstring_renew(s) \ +do { \ + if (s) { \ + utstring_clear(s); \ + } else { \ + utstring_new(s); \ + } \ +} while(0) + +#define utstring_clear(s) \ +do { \ + (s)->i = 0; \ + (s)->d[0] = '\0'; \ +} while(0) + +#define utstring_bincpy(s,b,l) \ +do { \ + utstring_reserve((s),(l)+1); \ + if (l) memcpy(&(s)->d[(s)->i], b, l); \ + (s)->i += l; \ + (s)->d[(s)->i]='\0'; \ +} while(0) + +#define utstring_concat(dst,src) \ +do { \ + utstring_reserve((dst),((src)->i)+1); \ + if ((src)->i) memcpy(&(dst)->d[(dst)->i], (src)->d, (src)->i); \ + (dst)->i += (src)->i; \ + (dst)->d[(dst)->i]='\0'; \ +} while(0) + +#define utstring_len(s) ((unsigned)((s)->i)) + +#define utstring_body(s) ((s)->d) + +_UNUSED_ static void utstring_printf_va(UT_string *s, const char *fmt, va_list ap) { + int n; + va_list cp; + while (1) { +#ifdef _WIN32 + cp = ap; +#else + va_copy(cp, ap); +#endif + n = vsnprintf (&s->d[s->i], s->n-s->i, fmt, cp); + va_end(cp); + + if ((n > -1) && ((size_t) n < (s->n-s->i))) { + s->i += n; + return; + } + + /* Else try again with more space. */ + if (n > -1) utstring_reserve(s,n+1); /* exact */ + else utstring_reserve(s,(s->n)*2); /* 2x */ + } +} +#ifdef __GNUC__ +/* support printf format checking (2=the format string, 3=start of varargs) */ +static void utstring_printf(UT_string *s, const char *fmt, ...) + __attribute__ (( format( printf, 2, 3) )); +#endif +_UNUSED_ static void utstring_printf(UT_string *s, const char *fmt, ...) { + va_list ap; + va_start(ap,fmt); + utstring_printf_va(s,fmt,ap); + va_end(ap); +} + +/******************************************************************************* + * begin substring search functions * + ******************************************************************************/ +/* Build KMP table from left to right. */ +_UNUSED_ static void _utstring_BuildTable( + const char *P_Needle, + size_t P_NeedleLen, + long *P_KMP_Table) +{ + long i, j; + + i = 0; + j = i - 1; + P_KMP_Table[i] = j; + while (i < (long) P_NeedleLen) + { + while ( (j > -1) && (P_Needle[i] != P_Needle[j]) ) + { + j = P_KMP_Table[j]; + } + i++; + j++; + if (i < (long) P_NeedleLen) + { + if (P_Needle[i] == P_Needle[j]) + { + P_KMP_Table[i] = P_KMP_Table[j]; + } + else + { + P_KMP_Table[i] = j; + } + } + else + { + P_KMP_Table[i] = j; + } + } + + return; +} + + +/* Build KMP table from right to left. */ +_UNUSED_ static void _utstring_BuildTableR( + const char *P_Needle, + size_t P_NeedleLen, + long *P_KMP_Table) +{ + long i, j; + + i = P_NeedleLen - 1; + j = i + 1; + P_KMP_Table[i + 1] = j; + while (i >= 0) + { + while ( (j < (long) P_NeedleLen) && (P_Needle[i] != P_Needle[j]) ) + { + j = P_KMP_Table[j + 1]; + } + i--; + j--; + if (i >= 0) + { + if (P_Needle[i] == P_Needle[j]) + { + P_KMP_Table[i + 1] = P_KMP_Table[j + 1]; + } + else + { + P_KMP_Table[i + 1] = j; + } + } + else + { + P_KMP_Table[i + 1] = j; + } + } + + return; +} + + +/* Search data from left to right. ( Multiple search mode. ) */ +_UNUSED_ static long _utstring_find( + const char *P_Haystack, + size_t P_HaystackLen, + const char *P_Needle, + size_t P_NeedleLen, + long *P_KMP_Table) +{ + long i, j; + long V_FindPosition = -1; + + /* Search from left to right. */ + i = j = 0; + while ( (j < (int)P_HaystackLen) && (((P_HaystackLen - j) + i) >= P_NeedleLen) ) + { + while ( (i > -1) && (P_Needle[i] != P_Haystack[j]) ) + { + i = P_KMP_Table[i]; + } + i++; + j++; + if (i >= (int)P_NeedleLen) + { + /* Found. */ + V_FindPosition = j - i; + break; + } + } + + return V_FindPosition; +} + + +/* Search data from right to left. ( Multiple search mode. ) */ +_UNUSED_ static long _utstring_findR( + const char *P_Haystack, + size_t P_HaystackLen, + const char *P_Needle, + size_t P_NeedleLen, + long *P_KMP_Table) +{ + long i, j; + long V_FindPosition = -1; + + /* Search from right to left. */ + j = (P_HaystackLen - 1); + i = (P_NeedleLen - 1); + while ( (j >= 0) && (j >= i) ) + { + while ( (i < (int)P_NeedleLen) && (P_Needle[i] != P_Haystack[j]) ) + { + i = P_KMP_Table[i + 1]; + } + i--; + j--; + if (i < 0) + { + /* Found. */ + V_FindPosition = j + 1; + break; + } + } + + return V_FindPosition; +} + + +/* Search data from left to right. ( One time search mode. ) */ +_UNUSED_ static long utstring_find( + UT_string *s, + long P_StartPosition, /* Start from 0. -1 means last position. */ + const char *P_Needle, + size_t P_NeedleLen) +{ + long V_StartPosition; + long V_HaystackLen; + long *V_KMP_Table; + long V_FindPosition = -1; + + if (P_StartPosition < 0) + { + V_StartPosition = s->i + P_StartPosition; + } + else + { + V_StartPosition = P_StartPosition; + } + V_HaystackLen = s->i - V_StartPosition; + if ( (V_HaystackLen >= (long) P_NeedleLen) && (P_NeedleLen > 0) ) + { + V_KMP_Table = (long *)malloc(sizeof(long) * (P_NeedleLen + 1)); + if (V_KMP_Table != NULL) + { + _utstring_BuildTable(P_Needle, P_NeedleLen, V_KMP_Table); + + V_FindPosition = _utstring_find(s->d + V_StartPosition, + V_HaystackLen, + P_Needle, + P_NeedleLen, + V_KMP_Table); + if (V_FindPosition >= 0) + { + V_FindPosition += V_StartPosition; + } + + free(V_KMP_Table); + } + } + + return V_FindPosition; +} + + +/* Search data from right to left. ( One time search mode. ) */ +_UNUSED_ static long utstring_findR( + UT_string *s, + long P_StartPosition, /* Start from 0. -1 means last position. */ + const char *P_Needle, + size_t P_NeedleLen) +{ + long V_StartPosition; + long V_HaystackLen; + long *V_KMP_Table; + long V_FindPosition = -1; + + if (P_StartPosition < 0) + { + V_StartPosition = s->i + P_StartPosition; + } + else + { + V_StartPosition = P_StartPosition; + } + V_HaystackLen = V_StartPosition + 1; + if ( (V_HaystackLen >= (long) P_NeedleLen) && (P_NeedleLen > 0) ) + { + V_KMP_Table = (long *)malloc(sizeof(long) * (P_NeedleLen + 1)); + if (V_KMP_Table != NULL) + { + _utstring_BuildTableR(P_Needle, P_NeedleLen, V_KMP_Table); + + V_FindPosition = _utstring_findR(s->d, + V_HaystackLen, + P_Needle, + P_NeedleLen, + V_KMP_Table); + + free(V_KMP_Table); + } + } + + return V_FindPosition; +} +/******************************************************************************* + * end substring search functions * + ******************************************************************************/ + +#endif /* UTSTRING_H */ diff --git a/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo b/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo index 726488c96d7..1d67adc1401 100644 --- a/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo +++ b/Buildings/ThermalZones/Detailed/BaseClasses/CFDExchange.mo @@ -1,106 +1,68 @@ within Buildings.ThermalZones.Detailed.BaseClasses; block CFDExchange "Block that exchanges data with the CFD code" - extends Buildings.ThermalZones.Detailed.BaseClasses.PartialExchange; +extends Buildings.ThermalZones.Detailed.BaseClasses.PartialExchange; + + replaceable CFDThread CFDThre = CFDThread() + "Allocate memory for cosimulation variables via constructor and send stop command to FFD via destructor"; + /////////////////////////////////////////////////////////////////////////// // Function that sends the parameters of the model from Modelica to CFD - function sendParameters - input String cfdFilNam "CFD input file name"; - input String[nSur] name "Surface names"; - input Modelica.SIunits.Area[nSur] A "Surface areas"; - input Modelica.SIunits.Angle[nSur] til "Surface tilt"; - input Buildings.ThermalZones.Detailed.Types.CFDBoundaryConditions[nSur] bouCon - "Type of boundary condition"; - input Integer nPorts(min=0) - "Number of fluid ports for the HVAC inlet and outlets"; - input String portName[nPorts] - "Names of fluid ports as declared in the CFD input file"; - input Boolean haveSensor "Flag, true if the model has at least one sensor"; - input String sensorName[nSen] - "Names of sensors as declared in the CFD input file"; - input Boolean haveShade "Flag, true if the windows have a shade"; - input Integer nSur(min=2) "Number of surfaces"; - input Integer nSen(min=0) - "Number of sensors that are connected to CFD output"; - input Integer nConExtWin(min=0) - "number of exterior construction with window"; - input Boolean verbose "Set to true for verbose output"; - input Integer nXi - "Number of independent species concentration of the inflowing medium"; - input Integer nC "Number of trace substances of the inflowing medium"; - input Boolean haveSource - "Flag, true if the model has at least one source"; - input Integer nSou(min=0) - "Number of sources that are connected to CFD output"; - input String sourceName[nSou] - "Names of sources as declared in the CFD input file"; - input Modelica.SIunits.Density rho_start "Density at initial state"; - protected - Integer coSimFlag=0; + replaceable function sendParameters + extends Buildings.ThermalZones.Detailed.BaseClasses.PartialsendParameters; + algorithm - if verbose then - Modelica.Utilities.Streams.print("CFDExchange:sendParameter"); - end if; + if verbose then + Modelica.Utilities.Streams.print("CFDExchange:sendParameter"); + end if; - for i in 1:nSur loop - assert(A[i] > 0, "Surface must be bigger than zero."); - end for; + for i in 1:nSur loop + assert(A[i] > 0, "Surface must be bigger than zero."); + end for; - Modelica.Utilities.Streams.print(string="Start cosimulation"); - coSimFlag := cfdStartCosimulation( - cfdFilNam, - name, - A, - til, - bouCon, - nPorts, - portName, - haveSensor, - sensorName, - haveShade, - nSur, - nSen, - nConExtWin, - nXi, - nC, - haveSource, - nSou, - sourceName, - rho_start); - assert(coSimFlag < 0.5, "Could not start the cosimulation."); + Modelica.Utilities.Streams.print(string="Start cosimulation"); + coSimFlag := cfdStartCosimulation( + cfdFilNam, + name, + A, + til, + bouCon, + nPorts, + portName, + haveSensor, + sensorName, + haveShade, + nSur, + nSen, + nConExtWin, + nXi, + nC, + haveSource, + nSou, + sourceName, + rho_start); + assert(coSimFlag < 0.5, "Could not start the cosimulation."); end sendParameters; /////////////////////////////////////////////////////////////////////////// // Function that exchanges data during the time stepping between // Modelica and CFD. - function exchange - input Integer flag "Communication flag to write to CFD"; - input Modelica.SIunits.Time t "Current simulation time in seconds to write"; - input Modelica.SIunits.Time dt(min=100*Modelica.Constants.eps) - "Requested time step length"; - input Real[nU] u "Input for CFD"; - input Integer nU "Number of inputs for CFD"; - input Real[nY] yFixed "Fixed values (used for debugging only)"; - input Integer nY "Number of outputs from CFD"; - output Modelica.SIunits.Time modTimRea - "Current model time in seconds read from CFD"; - input Boolean verbose "Set to true for verbose output"; - output Real[nY] y "Output computed by CFD"; - output Integer retVal - "The exit value, which is negative if an error occurred"; + replaceable function exchange + extends Buildings.ThermalZones.Detailed.BaseClasses.Partialexchange; + algorithm if verbose then Modelica.Utilities.Streams.print("CFDExchange:exchange at t=" + String(t)); end if; - (modTimRea,y,retVal) := cfdExchangeData( - flag, - t, - dt, - u, - nU, - nY); + (modTimRea,y,retVal) := cfdExchangeData( + flag, + t, + dt, + u, + nU, + nY); end exchange; initial equation @@ -128,8 +90,6 @@ initial equation rho_start=rho_start, verbose=verbose); -equation - algorithm when sampleTrigger then // Exchange data @@ -155,7 +115,6 @@ algorithm " Aborting simulation. Check CFD log file.\n" + " Received: retVal = " + String(retVal)); end when; - annotation ( Documentation(info="

@@ -169,6 +128,10 @@ Buildings.ThermalZones.Detailed.UsersGuide.CFD. ", revisions="