diff --git a/src/functionObjects/solvers/electricPotential/electricPotential.C b/src/functionObjects/solvers/electricPotential/electricPotential.C index 37aeb615a2..676658d2c5 100644 --- a/src/functionObjects/solvers/electricPotential/electricPotential.C +++ b/src/functionObjects/solvers/electricPotential/electricPotential.C @@ -209,8 +209,17 @@ Foam::functionObjects::electricPotential::electricPotential IOobject::scopedName(typeName, "V") ) ), + Ename_ + ( + dict.getOrDefault + ( + "E", + IOobject::scopedName(typeName, "E") + ) + ), nCorr_(1), - writeDerivedFields_(false) + writeDerivedFields_(false), + electricField_(false) { read(dict); @@ -218,6 +227,28 @@ Foam::functionObjects::electricPotential::electricPotential // look it up volScalarField& eV = getOrReadField(Vname_); eV.correctBoundaryConditions(); + + if (electricField_) + { + auto* ptr = getObjectPtr(Ename_); + + if (!ptr) + { + ptr = new volVectorField + ( + IOobject + ( + Ename_, + mesh_.time().timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + -fvc::grad(eV) + ); + mesh_.objectRegistry::store(ptr); + } + } } @@ -236,6 +267,7 @@ bool Foam::functionObjects::electricPotential::read(const dictionary& dict) dict.readIfPresent("epsilonr", epsilonr_); dict.readIfPresent("nCorr", nCorr_); dict.readIfPresent("writeDerivedFields", writeDerivedFields_); + dict.readIfPresent("electricField", electricField_); // If flow is multiphase if (!phasesDict_.empty()) @@ -334,6 +366,12 @@ bool Foam::functionObjects::electricPotential::execute() eVEqn.solve(); } + if (electricField_) + { + auto& E = lookupObjectRef(Ename_); + E == -fvc::grad(eV); + } + Log << endl; return true; @@ -348,29 +386,17 @@ bool Foam::functionObjects::electricPotential::write() volScalarField& eV = getOrReadField(Vname_); - if (writeDerivedFields_) + if (electricField_) { - // Write the electric field - const volVectorField E - ( - IOobject - ( - IOobject::scopedName(typeName, "E"), - mesh_.time().timeName(), - mesh_.time(), - IOobject::NO_READ, - IOobject::NO_WRITE, - IOobject::NO_REGISTER - ), - -fvc::grad(eV), - fvPatchFieldBase::calculatedType() - ); + const auto& E = lookupObject(Ename_); Log << tab << E.name() << endl; E.write(); + } - + if (writeDerivedFields_) + { // Write the current density field tmp tsigma = this->sigma(); @@ -408,7 +434,7 @@ bool Foam::functionObjects::electricPotential::write() IOobject::NO_WRITE, IOobject::NO_REGISTER ), - fvc::div(tepsilonm*E), + fvc::div(tepsilonm*(-fvc::grad(eV))), fvPatchFieldBase::calculatedType() ); diff --git a/src/functionObjects/solvers/electricPotential/electricPotential.H b/src/functionObjects/solvers/electricPotential/electricPotential.H index f29472c283..027867fddc 100644 --- a/src/functionObjects/solvers/electricPotential/electricPotential.H +++ b/src/functionObjects/solvers/electricPotential/electricPotential.H @@ -121,6 +121,8 @@ Usage nCorr ; writeDerivedFields ; V ; + electricField ; + E ; // Inherited entries ... @@ -137,6 +139,8 @@ Usage nCorr | Number of corrector iterations | int | no | 1 writeDerivedFields | Flag to write extra fields | bool | no | false V | Name of electric potential field | word | no | electricPotential:V + electricField | Flag to calculate electric field | bool | no | false + E | Name of electric field | word | no | electricPotential:E \endtable The inherited entries are elaborated in: @@ -145,7 +149,6 @@ Usage Fields written out when the \c writeDerivedFields entry is \c true: \table Operand | Type | Location - Electric field | volVectorField | \/electricPotential:E Current density | volVectorField | \/electricPotential:J Charge density | volScalarField | \/electricPotential:rho \endtable @@ -202,6 +205,9 @@ class electricPotential //- Name of electric potential field word Vname_; + //- Name of electric field + word Ename_; + //- Number of corrector iterations int nCorr_; @@ -209,6 +215,9 @@ class electricPotential //- electric field, current density and free-charge density bool writeDerivedFields_; + //- Flag to calculate electric field + bool electricField_; + // Private Member Functions