Time::timeName(): no longer needed, calls replaced by name()
The timeName() function simply returns the dimensionedScalar::name() which holds the user-time name of the current time and now that timeName() is no longer virtual the dimensionedScalar::name() can be called directly. The timeName() function implementation is maintained for backward-compatibility.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -177,7 +177,7 @@ int main(int argc, char *argv[])
|
||||
typeIOobject<volScalarField> omegaHeader
|
||||
(
|
||||
"omega",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
@ -205,7 +205,7 @@ int main(int argc, char *argv[])
|
||||
typeIOobject<volScalarField> nuTildaHeader
|
||||
(
|
||||
"nuTilda",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -29,7 +29,7 @@ volVectorField U
|
||||
IOobject
|
||||
(
|
||||
"U",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
@ -63,7 +63,7 @@ volScalarField mask
|
||||
IOobject
|
||||
(
|
||||
"mask",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -62,7 +62,7 @@ int main(int argc, char *argv[])
|
||||
U.correctBoundaryConditions();
|
||||
|
||||
Info<< "k("
|
||||
<< runTime.timeName()
|
||||
<< runTime.name()
|
||||
<< ") = "
|
||||
<< 3.0/2.0*average(magSqr(U)).value() << endl;
|
||||
|
||||
@ -73,7 +73,7 @@ int main(int argc, char *argv[])
|
||||
runTime.path()
|
||||
/functionObjects::writeFile::outputPrefix
|
||||
/"graphs"
|
||||
/runTime.timeName(),
|
||||
/runTime.name(),
|
||||
"Ek",
|
||||
runTime.graphFormat()
|
||||
);
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
IOobject
|
||||
(
|
||||
"U",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
|
||||
@ -457,7 +457,7 @@ int main(int argc, char *argv[])
|
||||
else
|
||||
{
|
||||
runTime.setTime(times[timei], timei);
|
||||
instance = runTime.timeName();
|
||||
instance = runTime.name();
|
||||
}
|
||||
|
||||
#include "createNamedMesh.H"
|
||||
|
||||
@ -64,7 +64,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
const word fieldName = args[1];
|
||||
|
||||
IOobjectList objects(IOobjectList(mesh, mesh.time().timeName()));
|
||||
IOobjectList objects(IOobjectList(mesh, mesh.time().name()));
|
||||
|
||||
label processed = -1;
|
||||
processField<scalar>(mesh, objects, fieldName, processed);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2013-2018 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -45,7 +45,7 @@ void processField
|
||||
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
|
||||
|
||||
const word timeName(mesh.time().timeName());
|
||||
const word timeName(mesh.time().name());
|
||||
|
||||
IOobjectList fieldObjbjects(objects.lookupClass(fieldType::typeName));
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -55,7 +55,7 @@ int main(int argc, char *argv[])
|
||||
)
|
||||
);
|
||||
|
||||
Info<< "Initialising dsmc for Time = " << runTime.timeName() << nl << endl;
|
||||
Info<< "Initialising dsmc for Time = " << runTime.name() << nl << endl;
|
||||
|
||||
dsmcCloud dsmc("dsmc", mesh, dsmcInitialiseDict);
|
||||
|
||||
|
||||
@ -49,7 +49,7 @@ volVectorField U
|
||||
IOobject
|
||||
(
|
||||
"U",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -159,7 +159,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
"facesAgglomeration",
|
||||
mesh.time().timeName(),
|
||||
mesh.time().name(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
|
||||
@ -61,7 +61,7 @@ void MapConsistentVolFields
|
||||
typeIOobject<fieldType> fieldTargetIOobject
|
||||
(
|
||||
fieldIter()->name(),
|
||||
meshTarget.time().timeName(),
|
||||
meshTarget.time().name(),
|
||||
meshTarget,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
|
||||
@ -74,7 +74,7 @@ void MapLagrangianFields
|
||||
IOobject
|
||||
(
|
||||
fieldIter()->name(),
|
||||
meshTarget.time().timeName(),
|
||||
meshTarget.time().name(),
|
||||
cloud::prefix/cloudName,
|
||||
meshTarget,
|
||||
IOobject::NO_READ,
|
||||
@ -113,7 +113,7 @@ void MapLagrangianFields
|
||||
IOobject
|
||||
(
|
||||
fieldIter()->name(),
|
||||
meshTarget.time().timeName(),
|
||||
meshTarget.time().name(),
|
||||
cloud::prefix/cloudName,
|
||||
meshTarget,
|
||||
IOobject::NO_READ,
|
||||
@ -151,7 +151,7 @@ void MapLagrangianFields
|
||||
IOobject
|
||||
(
|
||||
fieldIter()->name(),
|
||||
meshTarget.time().timeName(),
|
||||
meshTarget.time().name(),
|
||||
cloud::prefix/cloudName,
|
||||
meshTarget,
|
||||
IOobject::NO_READ,
|
||||
|
||||
@ -55,7 +55,7 @@ void MapVolFields
|
||||
typeIOobject<fieldType> fieldTargetIOobject
|
||||
(
|
||||
fieldIter()->name(),
|
||||
meshTarget.time().timeName(),
|
||||
meshTarget.time().name(),
|
||||
meshTarget,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
|
||||
@ -192,7 +192,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
targetRegion,
|
||||
runTimeTarget.timeName(),
|
||||
runTimeTarget.name(),
|
||||
runTimeTarget
|
||||
),
|
||||
false
|
||||
@ -218,7 +218,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
sourceRegion,
|
||||
runTimeSource.timeName(),
|
||||
runTimeSource.name(),
|
||||
runTimeSource
|
||||
),
|
||||
false
|
||||
@ -267,7 +267,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
sourceRegion,
|
||||
runTimeSource.timeName(),
|
||||
runTimeSource.name(),
|
||||
runTimeSource
|
||||
),
|
||||
false
|
||||
@ -291,7 +291,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
targetRegion,
|
||||
runTimeTarget.timeName(),
|
||||
runTimeTarget.name(),
|
||||
runTimeTarget
|
||||
),
|
||||
false
|
||||
@ -360,7 +360,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
sourceRegion,
|
||||
runTimeSource.timeName(),
|
||||
runTimeSource.name(),
|
||||
runTimeSource
|
||||
),
|
||||
false
|
||||
@ -396,7 +396,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
targetRegion,
|
||||
runTimeTarget.timeName(),
|
||||
runTimeTarget.name(),
|
||||
runTimeTarget
|
||||
),
|
||||
false
|
||||
@ -445,7 +445,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
sourceRegion,
|
||||
runTimeSource.timeName(),
|
||||
runTimeSource.name(),
|
||||
runTimeSource
|
||||
),
|
||||
false
|
||||
@ -456,7 +456,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
targetRegion,
|
||||
runTimeTarget.timeName(),
|
||||
runTimeTarget.name(),
|
||||
runTimeTarget
|
||||
),
|
||||
false
|
||||
|
||||
@ -116,7 +116,7 @@ void mapLagrangian(const meshToMesh0& meshToMesh0Interp)
|
||||
IOobjectList objects
|
||||
(
|
||||
meshSource,
|
||||
meshSource.time().timeName(),
|
||||
meshSource.time().name(),
|
||||
cloud::prefix/cloudDirs[cloudI]
|
||||
);
|
||||
|
||||
|
||||
@ -45,11 +45,11 @@ void Foam::mapConsistentMesh
|
||||
|
||||
Info<< nl
|
||||
<< "Consistently creating and mapping fields for time "
|
||||
<< meshSource.time().timeName() << nl << endl;
|
||||
<< meshSource.time().name() << nl << endl;
|
||||
|
||||
{
|
||||
// Search for list of objects for this time
|
||||
IOobjectList objects(meshSource, meshSource.time().timeName());
|
||||
IOobjectList objects(meshSource, meshSource.time().name());
|
||||
|
||||
// Map volFields
|
||||
// ~~~~~~~~~~~~~
|
||||
@ -87,7 +87,7 @@ void Foam::mapConsistentMesh
|
||||
|
||||
{
|
||||
// Search for list of target objects for this time
|
||||
IOobjectList objects(meshTarget, meshTarget.time().timeName());
|
||||
IOobjectList objects(meshTarget, meshTarget.time().name());
|
||||
|
||||
// Mark surfaceFields as unmapped
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@ -129,12 +129,12 @@ void Foam::mapSubMesh
|
||||
);
|
||||
|
||||
Info<< nl
|
||||
<< "Mapping fields for time " << meshSource.time().timeName()
|
||||
<< "Mapping fields for time " << meshSource.time().name()
|
||||
<< nl << endl;
|
||||
|
||||
{
|
||||
// Search for list of source objects for this time
|
||||
IOobjectList objects(meshSource, meshSource.time().timeName());
|
||||
IOobjectList objects(meshSource, meshSource.time().name());
|
||||
|
||||
// Map volFields
|
||||
// ~~~~~~~~~~~~~
|
||||
@ -172,7 +172,7 @@ void Foam::mapSubMesh
|
||||
|
||||
{
|
||||
// Search for list of target objects for this time
|
||||
IOobjectList objects(meshTarget, meshTarget.time().timeName());
|
||||
IOobjectList objects(meshTarget, meshTarget.time().name());
|
||||
|
||||
// Mark surfaceFields as unmapped
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -387,7 +387,7 @@ Foam::meshToMesh0::interpolate
|
||||
IOobject
|
||||
(
|
||||
"interpolated(" + fromVf.name() + ')',
|
||||
toMesh_.time().timeName(),
|
||||
toMesh_.time().name(),
|
||||
toMesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
|
||||
@ -85,7 +85,7 @@ void mapCloudTypeFields
|
||||
: IOobject
|
||||
(
|
||||
fieldName,
|
||||
srcMesh.time().timeName(),
|
||||
srcMesh.time().name(),
|
||||
cloud::prefix/cloudDir,
|
||||
srcMesh,
|
||||
IOobject::NO_READ,
|
||||
@ -105,7 +105,7 @@ void mapCloudTypeFields
|
||||
IOobject
|
||||
(
|
||||
fieldName,
|
||||
tgtMesh.time().timeName(),
|
||||
tgtMesh.time().name(),
|
||||
cloud::prefix/cloudDir,
|
||||
tgtMesh,
|
||||
IOobject::NO_READ,
|
||||
@ -263,7 +263,7 @@ void Foam::mapClouds(const fvMeshToFvMesh& interp)
|
||||
IOobjectList objects
|
||||
(
|
||||
srcMesh,
|
||||
srcMesh.time().timeName(),
|
||||
srcMesh.time().name(),
|
||||
cloud::prefix/cloudDirs[cloudi]
|
||||
);
|
||||
|
||||
|
||||
@ -50,7 +50,7 @@ void mapConsistentMesh
|
||||
)
|
||||
{
|
||||
Info<< nl << "Consistently creating and mapping fields for time "
|
||||
<< srcMesh.time().timeName() << nl << endl;
|
||||
<< srcMesh.time().name() << nl << endl;
|
||||
|
||||
fvMeshToFvMesh interp(srcMesh, tgtMesh, mapMethod);
|
||||
|
||||
@ -82,7 +82,7 @@ void mapSubMesh
|
||||
)
|
||||
{
|
||||
Info<< nl << "Creating and mapping fields for time "
|
||||
<< srcMesh.time().timeName() << nl << endl;
|
||||
<< srcMesh.time().name() << nl << endl;
|
||||
|
||||
fvMeshToFvMesh interp
|
||||
(
|
||||
@ -240,7 +240,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
sourceRegion,
|
||||
runTimeSource.timeName(),
|
||||
runTimeSource.name(),
|
||||
runTimeSource
|
||||
),
|
||||
false
|
||||
@ -251,7 +251,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
targetRegion,
|
||||
runTimeTarget.timeName(),
|
||||
runTimeTarget.name(),
|
||||
runTimeTarget
|
||||
),
|
||||
false
|
||||
|
||||
@ -141,7 +141,7 @@ void mapVolTypeFields
|
||||
typeIOobject<VolField<Type>> targetIO
|
||||
(
|
||||
fieldName,
|
||||
tgtMesh.time().timeName(),
|
||||
tgtMesh.time().name(),
|
||||
tgtMesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
@ -209,7 +209,7 @@ void Foam::mapGeometricFields
|
||||
|
||||
{
|
||||
// Search for list of source objects for this time
|
||||
IOobjectList objects(srcMesh, srcMesh.time().timeName());
|
||||
IOobjectList objects(srcMesh, srcMesh.time().name());
|
||||
|
||||
// Map the fields
|
||||
#define MapVolTypeFields(Type, nullArg) \
|
||||
@ -225,7 +225,7 @@ void Foam::mapGeometricFields
|
||||
|
||||
{
|
||||
// Search for list of target objects for this time
|
||||
IOobjectList objects(tgtMesh, tgtMesh.time().timeName());
|
||||
IOobjectList objects(tgtMesh, tgtMesh.time().name());
|
||||
|
||||
// Mark surface and point fields as unmapped
|
||||
#define UnMappedTypeFields(Type, GeoField) \
|
||||
|
||||
@ -79,7 +79,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
UName,
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
),
|
||||
@ -88,7 +88,7 @@ int main(int argc, char *argv[])
|
||||
IOobject kIO
|
||||
(
|
||||
kName,
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
@ -99,7 +99,7 @@ int main(int argc, char *argv[])
|
||||
IOobject epsilonIO
|
||||
(
|
||||
epsilonName,
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
|
||||
@ -63,7 +63,7 @@ bool setCellFieldType
|
||||
typeIOobject<fieldType> fieldHeader
|
||||
(
|
||||
fieldName,
|
||||
mesh.time().timeName(),
|
||||
mesh.time().name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
@ -209,7 +209,7 @@ bool setFaceFieldType
|
||||
typeIOobject<fieldType> fieldHeader
|
||||
(
|
||||
fieldName,
|
||||
mesh.time().timeName(),
|
||||
mesh.time().name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2017-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2017-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -108,7 +108,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
alphaName,
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
),
|
||||
@ -119,7 +119,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
UName,
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ
|
||||
),
|
||||
@ -129,37 +129,37 @@ int main(int argc, char *argv[])
|
||||
// Create modelled fields on both cells and points
|
||||
volScalarField h
|
||||
(
|
||||
IOobject("h", runTime.timeName(), mesh),
|
||||
IOobject("h", runTime.name(), mesh),
|
||||
mesh,
|
||||
dimensionedScalar(dimLength, 0)
|
||||
);
|
||||
pointScalarField hp
|
||||
(
|
||||
IOobject("hp", runTime.timeName(), mesh),
|
||||
IOobject("hp", runTime.name(), mesh),
|
||||
pMesh,
|
||||
dimensionedScalar(dimLength, 0)
|
||||
);
|
||||
volVectorField uGas
|
||||
(
|
||||
IOobject("uGas", runTime.timeName(), mesh),
|
||||
IOobject("uGas", runTime.name(), mesh),
|
||||
mesh,
|
||||
dimensionedVector(dimVelocity, vector::zero)
|
||||
);
|
||||
pointVectorField uGasp
|
||||
(
|
||||
IOobject("uGasp", runTime.timeName(), mesh),
|
||||
IOobject("uGasp", runTime.name(), mesh),
|
||||
pMesh,
|
||||
dimensionedVector(dimVelocity, vector::zero)
|
||||
);
|
||||
volVectorField uLiq
|
||||
(
|
||||
IOobject("uLiq", runTime.timeName(), mesh),
|
||||
IOobject("uLiq", runTime.name(), mesh),
|
||||
mesh,
|
||||
dimensionedVector(dimVelocity, vector::zero)
|
||||
);
|
||||
pointVectorField uLiqp
|
||||
(
|
||||
IOobject("uLiqp", runTime.timeName(), mesh),
|
||||
IOobject("uLiqp", runTime.name(), mesh),
|
||||
pMesh,
|
||||
dimensionedVector(dimVelocity, vector::zero)
|
||||
);
|
||||
|
||||
@ -303,7 +303,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
"qr",
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
@ -338,7 +338,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
"coarse:" + mesh.name(),
|
||||
runTime.timeName(),
|
||||
runTime.name(),
|
||||
runTime,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
@ -847,7 +847,7 @@ int main(int argc, char *argv[])
|
||||
IOobject
|
||||
(
|
||||
"viewFactorField",
|
||||
mesh.time().timeName(),
|
||||
mesh.time().name(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
|
||||
Reference in New Issue
Block a user