Giter VIP home page Giter VIP logo

Comments (11)

enricogussoni avatar enricogussoni commented on August 21, 2024

Here is the link to Dropbox 7z file with turbine data and .fst>
https://www.dropbox.com/s/ez55oi4redh0gzp/EnricoGussoni_exampleALMadvanced.7z?dl=0

from sowfa.

enricogussoni avatar enricogussoni commented on August 21, 2024

If I check the line where you I the error:
https://github.com/OpenFAST/openfast/blob/0769598a17e19b3ccd00a85cde389995f55024a8/glue-codes/openfast-cpp/src/OpenFAST.cpp

Line 432,
hubShftVec[0] = cDriver_Input_from_FAST[iTurbLoc].pOrientation[0] ;

Which means that probably "pOrientation[0]" is wrong, since iTurbLoc should be ok since I just have a single wind turbine.

How can I act on pOrientation? Which term of the FAST input files is relevant here?

from sowfa.

enricogussoni avatar enricogussoni commented on August 21, 2024

A file turbineAlloc.0.txt is created and inside there is just:

Proc 0 loc iTurb 0 glob iTurb 0

from sowfa.

ewquon avatar ewquon commented on August 21, 2024

Hi Enrico,

There doesn't appear to be anything obviously wrong with your ElastoDyn inputs. I did try running your model without external inflow from OpenFOAM (i.e., I changed CompInflow to 1) and noticed that your AeroDyn input is incompatible with the latest version of OpenFAST. I've attached an updated input file (renamed to permit uploading to github). Can you check to see if your model runs with OpenFAST alone?

Eliot

AeroDyn15.dat.txt

from sowfa.

enricogussoni avatar enricogussoni commented on August 21, 2024

Hi @ewquon,

I've run the case with OpenFAST alone and the changes you suggest and it works. However I've tried to run again windPlantSolver.ALMAdvancedOpenFAST and the error is still the same.

from sowfa.

ewquon avatar ewquon commented on August 21, 2024

Looks like the issue is caused by dryRun being set to true in constant/turbineArrayProperties. This bypasses the calls to FAST and therefore leaves variables to be exchanged (in this case, cDriver_Input_from_FAST[iTurbLoc].pOrientation) uninitialized.

from sowfa.

enricogussoni avatar enricogussoni commented on August 21, 2024

The problem now is in AeroDyn:

Running ElastoDyn. Running AeroDyn. [0] #0 Foam::error::printStack(Foam::Ostream&) at ??:? [0] #1 Foam::sigSegv::sigHandler(int) at ??:? [0] #2 ? in "/lib64/libpthread.so.0" [0] #3 FAST_OpFM_Init at /marconi/home/userexternal/pbenitoc/git/openfast/modules-local/openfast-library/src/FAST_Library.f90:494 [0] #4 fast::OpenFAST::init() at /marconi/home/userexternal/pbenitoc/git/openfast/glue-codes/openfast-cpp/src/OpenFAST.cpp:75 [0] #5 Foam::turbineModels::horizontalAxisWindTurbinesALMOpenFAST::initialize() at ??:? [0] #6 Foam::turbineModels::horizontalAxisWindTurbinesALMOpenFAST::horizontalAxisWindTurbinesALMOpenFAST(Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh> const&) at ??:? [0] #7 ? at ??:? [0] #8 __libc_start_main in "/lib64/libc.so.6" [0] #9 ? at ??:? [r065c02s03:19327] *** Process received signal *** [r065c02s03:19327] Signal: Segmentation fault (11) [r065c02s03:19327] Signal code: (-6) [r065c02s03:19327] Failing at address: 0x741900004b7f [r065c02s03:19327] [ 0] /lib64/libpthread.so.0(+0xf370)[0x2ae05042e370] [r065c02s03:19327] [ 1] /lib64/libpthread.so.0(raise+0x2b)[0x2ae05042e23b] [r065c02s03:19327] [ 2] /lib64/libpthread.so.0(+0xf370)[0x2ae05042e370] [r065c02s03:19327] [ 3] /marconi_work/Pra16_4200/SowfaRoot/OpenFAST_20180724/lib/libopenfastlib.so(FAST_OpFM_Init+0x4be)[0x2ae04c9a8a1e] [r065c02s03:19327] [ 4] /marconi_work/Pra16_4200/SowfaRoot/OpenFAST_20180724/lib/libopenfastcpplib.so(_ZN4fast8OpenFAST4initEv+0x821)[0x2ae04c795461] [r065c02s03:19327] [ 5] /marconi_work/Pra16_4200/SowfaRoot/SOWFA_20180724/lib/libuserTurbineModelsOpenFAST.so(_ZN4Foam13turbineModels37horizontalAxisWindTurbinesALMOpenFAST10initializeEv+0x35)[0x2ae045fae805] [r065c02s03:19327] [ 6] /marconi_work/Pra16_4200/SowfaRoot/SOWFA_20180724/lib/libuserTurbineModelsOpenFAST.so(_ZN4Foam13turbineModels37horizontalAxisWindTurbinesALMOpenFASTC1ERKNS_14GeometricFieldINS_6VectorIdEENS_12fvPatchFieldENS_7volMeshEEE+0x1e2d)[0x2ae045fb08dd] [r065c02s03:19327] [ 7] windPlantSolver.ALMAdvancedOpenFAST[0x42f6a1] [r065c02s03:19327] [ 8] /lib64/libc.so.6(__libc_start_main+0xf5)[0x2ae05065cb35] [r065c02s03:19327] [ 9] windPlantSolver.ALMAdvancedOpenFAST[0x43edc1] [r065c02s03:19327] *** End of error message ***

from sowfa.

ewquon avatar ewquon commented on August 21, 2024

In the AeroFile (referenced in your .fst input file), a number of blade aerodynamics properties files are referenced. Does this file(s) exist in the same place as the AeroFile? I can recreate the error with your input files if the "AeroDyn_blade.dat" file is missing, otherwise the solver runs without issue for me.

from sowfa.

enricogussoni avatar enricogussoni commented on August 21, 2024

I checked the "AeroDyn_blade.dat" file and I found an uncommented line and NumBlNds was set to 19 but that extra line made the total to be 20.
The file was as it is in the OpenFAST/r-test folder on github:
r-test/glue-codes/openfast/5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat
The extra lines to be removed are 26-27:

!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m
6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8

from sowfa.

tonino102008 avatar tonino102008 commented on August 21, 2024

Hi guys,
I'm trying to run the 5MW NREL simulation too, but I'm having a similar error to the last one of @enricogussoni !!
It happens when OpenFast is launched in the OpenFoam simulation.
Here is the error:

Running ElastoDyn.
Running AeroDyn.
[0] #0 Foam::error::printStack(Foam::Ostream&) at ??:?
[0] #1 Foam::sigSegv::sigHandler(int) at ??:?
[0] #2 ? in "/lib/x86_64-linux-gnu/libpthread.so.0"
[0] #3 FAST_OpFM_Init at ??:?
[0] #4 fast::OpenFAST::init() at ??:?
[0] #5 Foam::turbineModels::horizontalAxisWindTurbinesALMOpenFAST::initialize() at ??:?
[0] #6 Foam::turbineModels::horizontalAxisWindTurbinesALMOpenFAST::horizontalAxisWindTurbinesALMOpenFAST(Foam::GeometricField<Foam::Vector, Foam::fvPatchField, Foam::volMesh> const&) at ??:?
[0] #7 ? in "/home/antonio/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64GccDPOpt/bin/pisoFoamTurbine.ALMAdvancedOpenFAST"
[0] #8 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
[0] #9 ? in "/home/antonio/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64GccDPOpt/bin/pisoFoamTurbine.ALMAdvancedOpenFAST"
[antonio-X556URK:17711] *** Process received signal ***
[antonio-X556URK:17711] Signal: Segmentation fault (11)
[antonio-X556URK:17711] Signal code: (-6)
[antonio-X556URK:17711] Failing at address: 0x3e80000452f
[antonio-X556URK:17711] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x13f40)[0x7fd7c25bff40]
[antonio-X556URK:17711] [ 1] /lib/x86_64-linux-gnu/libpthread.so.0(raise+0xc7)[0x7fd7c25bfdd7]
[antonio-X556URK:17711] [ 2] /lib/x86_64-linux-gnu/libpthread.so.0(+0x13f40)[0x7fd7c25bff40]
[antonio-X556URK:17711] [ 3] /home/antonio/SOWFA/lib/linux64GccDPOpt/libSOWFATurbineModelsOpenFAST.so(FAST_OpFM_Init+0x5a5)[0x7fd7c59d8d35]
[antonio-X556URK:17711] [ 4] /home/antonio/SOWFA/lib/linux64GccDPOpt/libSOWFATurbineModelsOpenFAST.so(_ZN4fast8OpenFAST4initEv+0x5a3)[0x7fd7c59d4a63]
[antonio-X556URK:17711] [ 5] /home/antonio/SOWFA/lib/linux64GccDPOpt/libSOWFATurbineModelsOpenFAST.so(_ZN4Foam13turbineModels37horizontalAxisWindTurbinesALMOpenFAST10initializeEv+0x43)[0x7fd7c5997773]
[antonio-X556URK:17711] [ 6] /home/antonio/SOWFA/lib/linux64GccDPOpt/libSOWFATurbineModelsOpenFAST.so(_ZN4Foam13turbineModels37horizontalAxisWindTurbinesALMOpenFASTC2ERKNS_14GeometricFieldINS_6VectorIdEENS_12fvPatchFieldENS_7volMeshEEE+0x1ea7)[0x7fd7c5999967]
[antonio-X556URK:17711] [ 7] pisoFoamTurbine.ALMAdvancedOpenFAST(+0x42b28)[0x5598a4356b28]
[antonio-X556URK:17711] [ 8] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb)[0x7fd7c23e7b6b]
[antonio-X556URK:17711] [ 9] pisoFoamTurbine.ALMAdvancedOpenFAST(+0x4887a)[0x5598a435c87a]
[antonio-X556URK:17711] *** End of error message ***

Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.

mpirun noticed that process rank 0 with PID 0 on node antonio-X556URK exited on signal 11 (Segmentation fault).

I've also modified the AeroDyn_blade.dat file as enrico suggested. I've changed the density in file turbineArrayProperties to 1.225 as was set in AeroDyn15.dat. Still I don't know if there's to debug something in the input files or if it's completely another problem.
Thanks for any help!!

from sowfa.

SebastianoStipa avatar SebastianoStipa commented on August 21, 2024

Hallo, I had the same problem and I solved with the following
-AeroDyn15
-NREL5MWRef.0.fst
attached files, updated for OpenFAST:

note1: in turbineArrayProperties parameter nFASTSubSteps must be equal to deltaT (in controlDict) divided by DT (in NREL5MWRef.0.fst).
note2: of course delete line 26 and 27 from AeroDyn_blade.dat file.

------- AERODYN v15.03.* INPUT FILE ------------------------------------------------
NREL 5.0 MW offshore baseline aerodynamic input properties.
====== General Options ============================================================================
False Echo - Echo the input to ".AD.ech"? (flag)
"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s)
0 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT}
2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model}
1 TwrPotent - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction}
False TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag)
True TwrAero - Calculate tower aerodynamic loads? (flag)
False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing]
False CavitCheck - Perform cavitation check
====== Environmental Conditions ===================================================================
1.225 AirDens - Air density (kg/m^3)
1.464E-05 KinVisc - Kinematic air viscosity (m^2/s)
335 SpdSound - Speed of sound (m/s)
101325 Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True]
2000 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True]
0.6 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True]
====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1]
2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1]
"default" SkewModFactor
True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1]
True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1]
true TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1]
False AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1]
False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE]
"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1]
100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1]
====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2]
2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2]
4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1]
====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2]
3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez�s variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2]
True FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2]
====== Airfoil Information =========================================================================
1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-)
2 InCol_Cl - The column in the airfoil tables that contains the lift coefficient (-)
3 InCol_Cd - The column in the airfoil tables that contains the drag coefficient (-)
4 InCol_Cm - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-)
0 InCol_Cpmin - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-)
8 NumAFfiles - Number of airfoil files used (-)
"Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings)
"Airfoils/Cylinder2.dat"
"Airfoils/DU40_A17.dat"
"Airfoils/DU35_A17.dat"
"Airfoils/DU30_A17.dat"
"Airfoils/DU25_A17.dat"
"Airfoils/DU21_A17.dat"
"Airfoils/NACA64_A17.dat"
====== Rotor/Blade Properties =====================================================================
True UseBlCm - Include aerodynamic pitching moment in calculations? (flag)
"AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-)
"AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2]
"AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3]
====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]
12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]
TwrElev TwrDiam TwrCd
(m) (m) (-)
0.0000000E+00 6.0000000E+00 1.0000000E+00
8.5261000E+00 5.7870000E+00 1.0000000E+00
1.7053000E+01 5.5740000E+00 1.0000000E+00
2.5579000E+01 5.3610000E+00 1.0000000E+00
3.4105000E+01 5.1480000E+00 1.0000000E+00
4.2633000E+01 4.9350000E+00 1.0000000E+00
5.1158000E+01 4.7220000E+00 1.0000000E+00
5.9685000E+01 4.5090000E+00 1.0000000E+00
6.8211000E+01 4.2960000E+00 1.0000000E+00
7.6738000E+01 4.0830000E+00 1.0000000E+00
8.5268000E+01 3.8700000E+00 1.0000000E+00
8.7600000E+01 3.8700000E+00 1.0000000E+00
====== Outputs ====================================================================================
True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag)
0 NBlOuts - Number of blade node outputs [0 - 9] (-)
1, 9, 19 BlOutNd - Blade nodes whose values will be output (-)
0 NTwOuts - Number of tower node outputs [0 - 9] (-)
1, 2, 6 TwOutNd - Tower nodes whose values will be output (-)
OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)
END of input file (the word "END" must appear in the first 3 columns of this last OutList line)

------- OpenFAST* INPUT FILE ------------------------------------------------
OpenFAST Certification Test #1: NREL 5.0 MW Baseline Wind Turbine (Onshore)
---------------------- SIMULATION CONTROL --------------------------------------
false Echo - Echo input data to .ech (flag)
"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"}
10400.000 TMax - Total run time (s)
0.00375 DT - Recommended module time step (s)
2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic}
0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections}
99999 DT_UJac - Time between calls to get Jacobians (s)
1E+06 UJacSclFact - Scaling factor used in Jacobians (-)
---------------------- FEATURE SWITCHES AND FLAGS ------------------------------
1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades}
2 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from OpenFOAM}
2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDyn v14; 2=AeroDyn v15}
1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn}
0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn}
0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn}
0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex}
0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn}
---------------------- INPUT FILES ---------------------------------------------
"5MW_Baseline/ElastoDyn.1.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string)
"5MW_Baseline/BeamDyn.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string)
"5MW_Baseline/BeamDyn.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string)
"5MW_Baseline/BeamDyn.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string)
"5MW_Baseline/InflowWind_12mps.dat" InflowFile - Name of file containing inflow wind input parameters (quoted string)
"5MW_Baseline/AeroDyn15.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string)
"5MW_Baseline/ServoDyn.1.dat" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string)
"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string)
"unused" SubFile - Name of file containing sub-structural input parameters (quoted string)
"unused" MooringFile - Name of file containing mooring system input parameters (quoted string)
"unused" IceFile - Name of file containing ice input parameters (quoted string)
---------------------- OUTPUT --------------------------------------------------
True SumPrint - Print summary data to ".sum" (flag)
5 SttsTime - Amount of time between screen status messages (s)
10 ChkptTime - Amount of time between creating checkpoint files for potential restart (s)
"default" DT_Out - Time step for tabular output (s) (or "default")
0 TStart - Time to begin tabular output (s)
3 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both}
True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false}
"ES10.3E2" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string)
---------------------- LINEARIZATION -------------------------------------------
False Linearize - Linearization analysis (flag)
2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False]
30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [unused if Linearize=False]
1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False]
1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False]
False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2]
False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False]
---------------------- VISUALIZATION ------------------------------------------
0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation}
1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0]
true VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0]
15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2]

from sowfa.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.