Howdy everybody!
I've been working on combining ThermoCloud, CollidingCloud and KinematicCloud functionality into a single lagragian solver for OFV2006 and I am having an issue that has been reported in previous threads.
https://www.cfd-online.com/Forums/op...dingcloud.html
https://www.cfd-online.com/Forums/op...rmoparcel.html
Unfortunately, the solutions provided in those threads doesn't seem to be working for this case.
Switching the order of the custom cloud inheritance:
[Thermo,Colliding,Kinematic -> Colliding,Thermo,Kinematic]
didn't fix the issue. Nor did adding the following lines:
typedef basicThermoKinematicCollidingParcelSubmodels::coll idingCloudType collidingParcelType;
makeParcelCollisionModels(collidingParcelType);
to the File:
parcels/derived/basicThermoKinematicCollidingParcel/makeBasicThermoKinematicCollidingParcelSubmodels.C
To be more specific here is the error I am getting when I am trying to link the library to the my code: sonicLPTTFoam
Code:
-L/home/john/OpenFOAM/john-v2006/platforms/linux64GccDPInt32Opt/lib -lSonicLPTTLagrangianIntermediate -lSonicLPTTlagrangianTurbulence -lSonicLPTTLagrangianSpray -lfiniteVolume -lfvOptions -lmeshTools -lsampling -lcompressibleTransportModels -lfluidThermophysicalModels -lspecie -lturbulenceModels -lcompressibleTurbulenceModels -lOpenFOAM -ldl \
-lm -o /home/john/OpenFOAM/john-v2006/platforms/linux64GccDPInt32Opt/bin/sonicLPTTFoam
/home/john/OpenFOAM/john-v2006/platforms/linux64GccDPInt32Opt/lib/libSonicLPTTLagrangianIntermediate.so: undefined reference to `Foam::PairModel<Foam::CollidingCloud<Foam::KinematicCloud<Foam::Cloud<Foam::ThermoParcel<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > > > >::dictionaryConstructorTablePtr_'
/home/john/OpenFOAM/john-v2006/platforms/linux64GccDPInt32Opt/lib/libSonicLPTTLagrangianIntermediate.so: undefined reference to `Foam::WallModel<Foam::CollidingCloud<Foam::KinematicCloud<Foam::Cloud<Foam::ThermoParcel<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > > > >::dictionaryConstructorTablePtr_'
collect2: error: ld returned 1 exit status
/opt/OpenFOAM/OpenFOAM-v2006/wmake/makefiles/general:148: recipe for target '/home/john/OpenFOAM/john-v2006/platforms/linux64GccDPInt32Opt/bin/sonicLPTTFoam' failed
make: *** [/home/john/OpenFOAM/john-v2006/platforms/linux64GccDPInt32Opt/bin/sonicLPTTFoam] Error 1
The library compiles, as was mentioned in the other threads, but fails to link.
I am attaching my "lagrangian/intermediate/*" source code additions below:
makeBasicThermoKinematicCollidingParcelSubmodels.C
Code:
#include "basicThermoKinematicCollidingCloud.H"
#include "makeParcelCloudFunctionObjects.H"
// Kinematic
#include "makeThermoParcelForces.H"
//#include "makeParcelForces.H"
#include "makeParcelDispersionModels.H"
#include "makeParcelInjectionModels.H"
#include "makeParcelCollisionModels.H"
#include "makeParcelPatchInteractionModels.H"
#include "makeParcelStochasticCollisionModels.H"
#include "makeParcelSurfaceFilmModels.H"
// Thermodynamic
#include "makeParcelHeatTransferModels.H"
makeParcelCloudFunctionObjects(basicThermoKinematicCollidingCloud);
// Kinematic sub-models
makeThermoParcelForces(basicThermoKinematicCollidingCloud);
makeParcelDispersionModels(basicThermoKinematicCollidingCloud);
makeParcelInjectionModels(basicThermoKinematicCollidingCloud);
makeParcelCollisionModels(basicThermoKinematicCollidingCloud);
// typedef basicThermoKinematicCollidingCloud::collidingCloudType collidingParcelType;
// makeParcelCollisionModels(collidingParcelType);
makeParcelPatchInteractionModels(basicThermoKinematicCollidingCloud);
makeParcelStochasticCollisionModels(basicThermoKinematicCollidingCloud);
makeParcelSurfaceFilmModels(basicThermoKinematicCollidingCloud);
makeParcelHeatTransferModels(basicThermoKinematicCollidingCloud);
basicThermoKinematicCollidingParcel.H
Code:
#ifndef basicThermoKinematicCollidingParcel_H
#define basicThermoKinematicCollidingParcel_H
#include "contiguous.H"
#include "particle.H"
#include "ThermoParcel.H"
#include "KinematicParcel.H"
#include "CollidingParcel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
typedef ThermoParcel<CollidingParcel<KinematicParcel<particle>>>
basicThermoKinematicCollidingParcel;
//- Contiguous data for basicThermoParcel
template<> struct is_contiguous<basicThermoKinematicCollidingParcel> : std::true_type {};
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
defineBasicThermoKinematicCollidingParcel.C
Code:
#include "basicThermoKinematicCollidingParcel.H"
#include "Cloud.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
defineTemplateTypeNameAndDebug(basicThermoKinematicCollidingParcel, 0);
defineTemplateTypeNameAndDebug(Cloud<basicThermoKinematicCollidingParcel>, 0);
//typedef Foam::ThermoParcel<CollidingParcel<KinematicParcel<particle> > > thermoParcel;
//defineTemplateTypeNameAndDebug(thermoParcel, 0);
}
basicThermoKinematicCollidingCloud.H
Code:
#ifndef basicThermoKinematicCollidingCloud_H
#define basicThermoKinematicCollidingCloud_H
#include "Cloud.H"
#include "ThermoCloud.H"
#include "KinematicCloud.H"
#include "CollidingCloud.H"
#include "basicThermoKinematicCollidingParcel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
typedef ThermoCloud<CollidingCloud<KinematicCloud<Cloud<
basicThermoKinematicCollidingParcel
>>>>basicThermoKinematicCollidingCloud;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
Added the following lines to Make/files of the intermediate directory
Code:
/* ThermoKinematicColliding parcel sub-models */
parcels/derived/basicThermoKinematicCollidingParcel/defineBasicThermoKinematicCollidingParcel.C
parcels/derived/basicThermoKinematicCollidingParcel/makeBasicThermoKinematicCollidingParcelSubmodels.C
The code sonicLPTTFOAM.C is attached below
Code:
#include "fvCFD.H"
#include "SLGThermo.H"
#include "psiThermo.H"
#include "turbulentFluidThermoModel.H"
#include "pimpleControl.H"
#include "fvOptions.H"
//#include "basicThermoCloud.H"
#include "basicThermoKinematicCollidingCloud.H"
#include "radiationModel.H"
#include "pressureControl.H"
#include "localEulerDdtScheme.H"
#include "fvcSmooth.H"
//#include "compressibleCourantNo.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::addNote
(
"Transient solver for trans-sonic/supersonic, turbulent flow"
" of a compressible gas."
);
#include "postProcess.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createMesh.H"
#include "createTimeControls.H"
// #include "readGravitationalAcceleration.H"
#include "createControl.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "initContinuityErrs.H"
turbulence->validate();
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
int STRM;
int remeshes;
int Total_Timestep;
bool deformingMesh =
runTime.controlDict().getOrDefault("deformingMesh", false);
// const word& remeshControl =
// runTime.controlDict().getOrDefault("remeshControl", "timeStep");
int remeshTSFreq =
runTime.controlDict().getOrDefault("remeshTSFreq", 100);
double remeshErosionLinearDepth =
runTime.controlDict().getOrDefault("remeshErosionLinearDepth", .0001);
Total_Timestep = 0;
STRM = 10;
while (runTime.run())
{
Info<< "Time = " << runTime.timeName() << nl << endl;
#include "compressibleCourantNo.H"
#include "readTimeControls.H"
#include "setDeltaT.H"
runTime++;
#include "rhoEqn.H"
// --- Pressure-velocity PIMPLE corrector loop
while (pimple.loop())
{
#include "UEqn.H"
#include "EEqn.H"
// --- Pressure corrector loop
while (pimple.correct())
{
#include "pEqn.H"
}
if (pimple.turbCorr())
{
turbulence->correct();
}
}
rho = thermo.rho();
Info << "\nEvolving " << dustParcels.name() << endl;
// Info << "\nDid OpenFOAM Fucking Freeze Again?" << endl;
dustParcels.evolve();
if(STRM<1)
{
STRM=10;
remeshes += 1;
}
Total_Timestep += 1;
STRM = STRM-1;
Info << "\nTimestep Number: " << Total_Timestep << endl;
Info << "Timesteps Until Remesh: " << STRM << endl;
Info << "Remesh Number: " << remeshes << endl;
Info << "\n" << endl;
Info<< "\nREMESHTSFREQ OUTPUT YAY DICKS" << remeshTSFreq << endl;
// Info << "\nREMESH_TRIGGER " << remeshControl << endl;
// Info << "\nNot Yet." << endl;
runTime.write();
runTime.printExecutionTime(Info);
}
Info<< "End\n" << endl;
return 0;
}
creatFields.H is also attached:
Code:
#include "readGravitationalAcceleration.H"
Info<< "Reading thermophysical properties\n" << endl;
autoPtr<psiThermo> pThermo(psiThermo::New(mesh));
psiThermo& thermo = pThermo();
thermo.validate(args.executable(), "h", "e");
SLGThermo slgThermo(mesh, thermo);
volScalarField& p = thermo.p();
// const volScalarField& T = thermo.T();
// const volScalarField& psi = thermo.psi();
multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
fields.add(thermo.he());
volScalarField rho
(
IOobject
(
"rho",
runTime.timeName(),
mesh
),
thermo.rho()
);
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
#include "compressibleCreatePhi.H"
mesh.setFluxRequired(p.name());
Info<< "Creating turbulence model\n" << endl;
autoPtr<compressible::turbulenceModel> turbulence
(
compressible::turbulenceModel::New
(
rho,
U,
phi,
thermo
)
);
#include "createK.H"
#include "createMRF.H"
Info<< "Reading transportProperties\n" <<endl;
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
dimensionedScalar rhoInfValue
(
transportProperties.lookup("rhoInf")
);
dimensionedScalar kappa
(
transportProperties.lookup("kappa")
);
dimensionedScalar invrhoInf("invrhoInf",(1.0/rhoInfValue));
volScalarField rhoInf
(
IOobject
(
"rho",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
rhoInfValue
);
volScalarField mu
(
IOobject
(
"mu",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
turbulence->nu()*rhoInfValue
);
Info<< "\nConstructing dust cloud" << endl;
basicThermoKinematicCollidingCloud dustParcels
(
"dustCloud",
rhoInf,
U,
g,
slgThermo
);
#include "createFvOptions.H"
While playing around with what causes the error I found that by commenting out the models in the makeBasicThermoKinematicCollidingParcelSubmodels.C file I can cause additional linking errors, complaining about undefined references, to appear. The library compiles without issue though.
if anybody has any thoughts as to what might being going on I'd greatly appreciate it.
if needed I can post the rest of the code to aid in troubleshooting.