List of commits:
Subject Hash Author Date (UTC)
Updated OpenQBMM code base d79f6a5e703145ce57b27980ec75443e390ac288 Anurag Misra 2019-05-15 13:23:25
Update OpenQBMM code base 0ef2e7e1462125ecb2efb03904ce1649271b7aae Anurag Misra 2018-11-05 15:35:04
Updated code to reflect latest changes in upstream OpenQBMM 1764c04587a9f47865f353ffa857e04fd369cb81 Anurag Misra 2018-09-18 13:14:48
Updated case mesh, dictionaries and boundary conditions, merged squaredSettler case with batchSettler using a separate blockMeshDict file 0db9d9362d1ef519dfd48ed79eb7fb69dbfdc74a Anurag M 2018-08-24 21:02:19
Disabled -DFULLDEBUG option from OpenQBMM library compilation 802f24f41f1fc065a7d4cc203584f6d68c0b3e03 Anurag Misra 2018-08-21 13:18:38
Updated Grimes Kernel 2be4035a22eb74ca3af27524cd162db8851581c8 Anurag Misra 2018-08-21 13:08:21
Added temperature-dependence in Grimes Kernel f3a435a0c455df0e4e4908f562f26f5b86ffb63a Anurag M 2018-08-20 06:55:19
Fixed conflict in the use of T in TEqns.H and UEqns.H bb96a2c1c38d89aeef45bc2614c0abce3e2bac37 Anurag M 2018-08-17 08:59:30
Fixed division by zero errors in Grimes kernel e0a0aa507d1159306afae9f7885a9f57e7698eff Anurag M 2018-08-17 08:58:50
Updated Grimes kernel with collision frequency limits, Added mixture temperature equation 2294a5b9a45433d75edee92e86db104a3b94ab65 Anurag M 2018-08-16 21:36:02
Updated Grimes Kernel f608acb3b6da226f28f41de412f6af9f55dc1f42 Anurag M 2018-08-16 13:35:57
Minor changes to Grimes kernel, still not functional cc44c1e64b44719780ae6b0f3445055854f7cf99 Anurag M 2018-08-16 08:12:02
Updated code to be compatible with OpenFOAM6, integrated latest commits from OpenQBMM-dev a6cab1ad0759989cf0d8b3d5a3dafa7e25fdde82 Anurag M 2018-08-15 17:29:12
update coalescence buoyancyInducedSI, small speedup ce96614597feb467bc73ff4b3d8d3b622c2942f2 Cyrille Bonamy 2018-05-17 22:38:21
Updated test cases to work with OF5.0 a94165663b5086612bd57bed9915bb0b13c616ae Anurag.Misra 2018-04-27 11:57:40
Moved ifPorous back to time directory due to problems with case decomposition, changed write settings instead d7c92de5c17607f86b7fe614ac49964762826e84 Anurag M 2018-04-27 09:29:51
moved location of ifPorous to constant directory to avoid problems with restarting case 7765cfdc95e2733af395f004754f21d4310fb249 Anurag M 2018-04-27 08:17:50
Added lower bound for the efficiency term in buoyancyInduced kernel 37484d897975e1c3ecb20462a68bd0cd09925f9e Anurag M 2018-04-26 13:16:23
moved lookup of fields to constructor for efficiency, added spatially inhomogeneous buoyancyInduced kernel 7a444cf89c257318fabfee2618a45a96231eebcc Anurag M 2018-04-24 17:14:42
included constant coalescence kernel for testing... 21d0518c24475f61f326fbf4942345ac7bd8106b Anurag M 2018-04-23 17:56:36
Commit d79f6a5e703145ce57b27980ec75443e390ac288 - Updated OpenQBMM code base
Author: Anurag Misra
Author date (UTC): 2019-05-15 13:23
Committer name: Anurag Misra
Committer date (UTC): 2019-05-15 13:23
Parent(s): 0ef2e7e1462125ecb2efb03904ce1649271b7aae
Signer:
Signing key:
Signing status: N
Tree: 753de602e7d2b158aafbd6b6294a0b59c561f402
File Lines added Lines deleted
multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/univariatePDFTransportModel/univariatePDFTransportModel.C 3 1
multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/univariatePDFTransportModel/univariatePDFTransportModel.H 3 0
multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/velocityPDFTransportModel/velocityPDFTransportModel.C 3 1
multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/velocityPDFTransportModel/velocityPDFTransportModel.H 3 0
multiphaseEulerPbeFoam/quadratureMethods/momentAdvection/velocity/firstOrderKineticVelocityAdvection/firstOrderKineticVelocityAdvection.C 1 1
multiphaseEulerPbeFoam/quadratureMethods/momentAdvection/velocity/velocityMomentAdvection/velocityMomentAdvection.C 2 1
multiphaseEulerPbeFoam/quadratureMethods/momentAdvection/velocity/velocityMomentAdvection/velocityMomentAdvection.H 3 0
multiphaseEulerPbeFoam/quadratureMethods/momentInversion/multivariate/hyperbolic/hyperbolicConditionalMomentInversion.C 89 17
multiphaseEulerPbeFoam/quadratureMethods/momentInversion/multivariate/hyperbolic/hyperbolicConditionalMomentInversion.H 12 0
multiphaseEulerPbeFoam/quadratureMethods/momentSets/univariateMomentSet/univariateMomentSet.C 3 3
multiphaseEulerPbeFoam/quadratureMethods/populationBalanceModels/populationBalanceSubModels/collisionKernels/esBGKCollision/esBGKCollision.C 5 5
multiphaseEulerPbeFoam/quadratureMethods/populationBalanceModels/populationBalanceSubModels/collisionKernels/esBGKCollision/esBGKCollision.H 1 1
File multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/univariatePDFTransportModel/univariatePDFTransportModel.C changed (mode: 100644) (index 9ac0824..2f312ee)
... ... Foam::PDFTransportModels::univariatePDFTransportModel
49 49 facMin_(readScalar(dict.subDict("odeCoeffs").lookup("facMin"))), facMin_(readScalar(dict.subDict("odeCoeffs").lookup("facMin"))),
50 50 facMax_(readScalar(dict.subDict("odeCoeffs").lookup("facMax"))), facMax_(readScalar(dict.subDict("odeCoeffs").lookup("facMax"))),
51 51 minLocalDt_(readScalar(dict.subDict("odeCoeffs").lookup("minLocalDt"))), minLocalDt_(readScalar(dict.subDict("odeCoeffs").lookup("minLocalDt"))),
52 localDt_(mesh.nCells(), mesh.time().deltaTValue()/10.0),
52 53 quadrature_(name, mesh, support), quadrature_(name, mesh, support),
53 54 momentAdvection_ momentAdvection_
54 55 ( (
 
... ... void Foam::PDFTransportModels::univariatePDFTransportModel
94 95 scalar localT = 0.0; scalar localT = 0.0;
95 96
96 97 // Initialize the local step // Initialize the local step
97 scalar localDt = globalDt/100.0;
98 scalar localDt = localDt_[celli];
98 99
99 100 // Initialize RK parameters // Initialize RK parameters
100 101 scalarList k1(nMoments, 0.0); scalarList k1(nMoments, 0.0);
 
... ... void Foam::PDFTransportModels::univariatePDFTransportModel
229 230 break; break;
230 231 } }
231 232
233 localDt_[celli] = localDt;
232 234 localT += localDt; localT += localDt;
233 235 } }
234 236 else else
File multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/univariatePDFTransportModel/univariatePDFTransportModel.H changed (mode: 100644) (index bbb834b..9fb6b8d)
... ... class univariatePDFTransportModel
80 80 //- Minimum local step in realizable ODE solver //- Minimum local step in realizable ODE solver
81 81 scalar minLocalDt_; scalar minLocalDt_;
82 82
83 //- Stored time step values
84 scalarField localDt_;
85
83 86
84 87 protected: protected:
85 88
File multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/velocityPDFTransportModel/velocityPDFTransportModel.C changed (mode: 100644) (index c5debc3..778a2c9)
... ... Foam::PDFTransportModels::velocityPDFTransportModel::velocityPDFTransportModel
47 47 facMin_(readScalar(dict.subDict("odeCoeffs").lookup("facMin"))), facMin_(readScalar(dict.subDict("odeCoeffs").lookup("facMin"))),
48 48 facMax_(readScalar(dict.subDict("odeCoeffs").lookup("facMax"))), facMax_(readScalar(dict.subDict("odeCoeffs").lookup("facMax"))),
49 49 minLocalDt_(readScalar(dict.subDict("odeCoeffs").lookup("minLocalDt"))), minLocalDt_(readScalar(dict.subDict("odeCoeffs").lookup("minLocalDt"))),
50 localDt_(mesh.nCells(), mesh.time().deltaTValue()/10.0),
50 51 quadrature_(name, mesh, support), quadrature_(name, mesh, support),
51 52 momentAdvection_ momentAdvection_
52 53 ( (
 
... ... void Foam::PDFTransportModels::velocityPDFTransportModel::explicitMomentSource()
89 90 scalar localT = 0.0; scalar localT = 0.0;
90 91
91 92 // Initialize the local step // Initialize the local step
92 scalar localDt = globalDt/100.0;
93 scalar localDt = localDt_[celli];
93 94
94 95 // Initialize RK parameters // Initialize RK parameters
95 96 scalarList k1(nMoments, 0.0); scalarList k1(nMoments, 0.0);
 
... ... void Foam::PDFTransportModels::velocityPDFTransportModel::explicitMomentSource()
224 225 break; break;
225 226 } }
226 227
228 localDt_[celli] = localDt;
227 229 localT += localDt; localT += localDt;
228 230 } }
229 231 else else
File multiphaseEulerPbeFoam/quadratureMethods/PDFTransportModels/velocityPDFTransportModel/velocityPDFTransportModel.H changed (mode: 100644) (index dc5fd95..0c407be)
... ... class velocityPDFTransportModel
81 81 //- Minimum local step in realizable ODE solver //- Minimum local step in realizable ODE solver
82 82 label minLocalDt_; label minLocalDt_;
83 83
84 //- Stored time step values
85 scalarField localDt_;
86
84 87
85 88 protected: protected:
86 89
File multiphaseEulerPbeFoam/quadratureMethods/momentAdvection/velocity/firstOrderKineticVelocityAdvection/firstOrderKineticVelocityAdvection.C changed (mode: 100644) (index adbbf54..e376a4f)
... ... void Foam::velocityAdvection::firstOrderKinetic::updateWallCollisions()
189 189 bfwNei[facei] = bfwOwn[facei]; bfwNei[facei] = bfwOwn[facei];
190 190 bfUNei[facei] = bfUNei[facei] =
191 191 bfUOwn[facei] bfUOwn[facei]
192 - 2.0*(bfUOwn[facei] & bfNorm[facei])
192 - (1.0 + this->ew_)*(bfUOwn[facei] & bfNorm[facei])
193 193 *bfNorm[facei]; *bfNorm[facei];
194 194 } }
195 195 } }
File multiphaseEulerPbeFoam/quadratureMethods/momentAdvection/velocity/velocityMomentAdvection/velocityMomentAdvection.C changed (mode: 100644) (index 955a2b2..5ea62e4)
... ... Foam::velocityMomentAdvection::velocityMomentAdvection
71 71 support_(support), support_(support),
72 72 momentOrders_(quadrature.momentOrders()), momentOrders_(quadrature.momentOrders()),
73 73 nodeIndexes_(quadrature.nodeIndexes()), nodeIndexes_(quadrature.nodeIndexes()),
74 divMoments_(nMoments_)
74 divMoments_(nMoments_),
75 ew_(dict.lookupOrDefault("ew", 1.0))
75 76 { {
76 77 forAll(divMoments_, momenti) forAll(divMoments_, momenti)
77 78 { {
File multiphaseEulerPbeFoam/quadratureMethods/momentAdvection/velocity/velocityMomentAdvection/velocityMomentAdvection.H changed (mode: 100644) (index 6cd7f49..ace315d)
... ... protected:
96 96 //- Advection terms for moment transport equations //- Advection terms for moment transport equations
97 97 PtrList<volScalarField> divMoments_; PtrList<volScalarField> divMoments_;
98 98
99 //- Coefficient of restitution
100 scalar ew_;
101
99 102
100 103 public: public:
101 104
File multiphaseEulerPbeFoam/quadratureMethods/momentInversion/multivariate/hyperbolic/hyperbolicConditionalMomentInversion.C changed (mode: 100644) (index 2ed61ca..f022d72)
... ... Foam::hyperbolicConditionalMomentInversion::hyperbolicConditionalMomentInversion
116 116 }; };
117 117
118 118
119 Foam::label Foam::hyperbolicConditionalMomentInversion::getNMoments
120 (
121 const label nDims
122 ) const
123 {
124 if (nDims == 1)
125 {
126 return 5;
127 }
128 else if (nDims == 2)
129 {
130 return 10;
131 }
132 else if (nDims == 3)
133 {
134 return 16;
135 }
136 return 0;
137 }
138
139
140 Foam::labelListList Foam::hyperbolicConditionalMomentInversion::getMomentOrders
141 (
142 const label nDims
143 ) const
144 {
145 if (nDims == 1)
146 {
147 return {{0}, {1}, {2}, {3}, {4}};
148 }
149 else if (nDims == 2)
150 {
151 return twoDimMomentOrders;
152 }
153 else if (nDims == 3)
154 {
155 return threeDimMomentOrders;
156 }
157 return {{}};
158 }
159
160
161 Foam::label Foam::hyperbolicConditionalMomentInversion::getNNodes
162 (
163 const label nDims
164 ) const
165 {
166 if (nDims == 1)
167 {
168 return 3;
169 }
170 else if (nDims == 2)
171 {
172 return 9;
173 }
174 else if (nDims == 3)
175 {
176 return 27;
177 }
178 return 0;
179 }
180
181
182 Foam::labelListList Foam::hyperbolicConditionalMomentInversion::getNodeIndexes
183 (
184 const label nDims
185 ) const
186 {
187 if (nDims == 1)
188 {
189 return {{1}, {2}, {3}};
190 }
191 else if (nDims == 2)
192 {
193 return twoDimNodeIndexes;
194 }
195 else if (nDims == 3)
196 {
197 return threeDimNodeIndexes;
198 }
199 return {{}};
200 }
201
202
119 203 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
120 204
121 205 Foam::hyperbolicConditionalMomentInversion::hyperbolicConditionalMomentInversion Foam::hyperbolicConditionalMomentInversion::hyperbolicConditionalMomentInversion
 
... ... Foam::hyperbolicConditionalMomentInversion::hyperbolicConditionalMomentInversion
125 209 ) )
126 210 : :
127 211 nDimensions_(nDimensions), nDimensions_(nDimensions),
128 nMoments_(nDimensions == 2 ? 10 : 16),
129 nNodes_(nDimensions == 2 ? 9 : 27),
212 nMoments_(getNMoments(nDimensions)),
213 nNodes_(getNNodes(nDimensions)),
130 214 support_("R"), support_("R"),
131 moments_
132 (
133 nMoments_,
134 nDimensions == 2 ? twoDimMomentOrders : threeDimMomentOrders
135 ),
136 abscissae_
137 (
138 nNodes_,
139 nDimensions == 2 ? twoDimNodeIndexes : threeDimNodeIndexes
140 ),
141 weights_
142 (
143 nNodes_,
144 nDimensions == 2 ? twoDimNodeIndexes : threeDimNodeIndexes
145 ),
215 moments_(nMoments_, getMomentOrders(nDimensions)),
216 abscissae_(nNodes_, getNodeIndexes(nDimensions)),
217 weights_(nNodes_, getNodeIndexes(nDimensions)),
146 218 univariateInverter_ univariateInverter_
147 219 ( (
148 220 new hyperbolicMomentInversion(dict.subDict("basicQuadrature")) new hyperbolicMomentInversion(dict.subDict("basicQuadrature"))
File multiphaseEulerPbeFoam/quadratureMethods/momentInversion/multivariate/hyperbolic/hyperbolicConditionalMomentInversion.H changed (mode: 100644) (index de39289..1de2655)
... ... class hyperbolicConditionalMomentInversion
140 140 //- Reset inverter //- Reset inverter
141 141 void reset(); void reset();
142 142
143 //- Return the number of moments given a number of dimensions
144 label getNMoments(const label nDims) const;
145
146 //- Return the moment orders give a number of dimensions
147 labelListList getMomentOrders(const label nDims) const;
148
149 //- Return the number of nodes given a number of dimensions
150 label getNNodes(const label nDims) const;
151
152 //- Return the node indexes give a number of dimensions
153 labelListList getNodeIndexes(const label nDims) const;
154
143 155 //- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
144 156 //hyperbolicConditionalMomentInversion(const hyperbolicConditionalMomentInversion&); //hyperbolicConditionalMomentInversion(const hyperbolicConditionalMomentInversion&);
145 157
File multiphaseEulerPbeFoam/quadratureMethods/momentSets/univariateMomentSet/univariateMomentSet.C changed (mode: 100644) (index c043387..bc1e975)
2 2 ========= | ========= |
3 3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 4 \\ / O peration | \\ / O peration |
5 \\ / A nd | Copyright (C) 2014-2018 Alberto Passalacqua
5 \\ / A nd | Copyright (C) 2014-2019 Alberto Passalacqua
6 6 \\/ M anipulation | \\/ M anipulation |
7 7 ------------------------------------------------------------------------------- -------------------------------------------------------------------------------
8 8 License License
 
... ... void Foam::univariateMomentSet::checkRealizability
419 419
420 420 if (support_ == "R") if (support_ == "R")
421 421 { {
422 if (beta_[zetai] < 0.0)
422 if (beta_[zetai] <= 0.0)
423 423 { {
424 424 realizabilityChecked_ = true; realizabilityChecked_ = true;
425 425 nRealizableMoments_ = 2*zetai; nRealizableMoments_ = 2*zetai;
 
... ... void Foam::univariateMomentSet::checkRealizability
516 516 alpha_[nD] = zRecurrence[nD][nD + 1]/zRecurrence[nD][nD] alpha_[nD] = zRecurrence[nD][nD + 1]/zRecurrence[nD][nD]
517 517 - zRecurrence[nD - 1][nD]/zRecurrence[nD - 1][nD - 1]; - zRecurrence[nD - 1][nD]/zRecurrence[nD - 1][nD - 1];
518 518
519 if (beta_[nD] < 0.0)
519 if (beta_[nD] <= 0.0)
520 520 { {
521 521 realizabilityChecked_ = true; realizabilityChecked_ = true;
522 522 nRealizableMoments_ = 2*nD; nRealizableMoments_ = 2*nD;
File multiphaseEulerPbeFoam/quadratureMethods/populationBalanceModels/populationBalanceSubModels/collisionKernels/esBGKCollision/esBGKCollision.C changed (mode: 100644) (index 599e21b..7000a50)
... ... void Foam::populationBalanceSubModels::collisionKernels::esBGKCollision
63 63 // Variances of velocities // Variances of velocities
64 64 scalar sigma = max(moments(2)[celli]/m0 - uSqr, 0.0); scalar sigma = max(moments(2)[celli]/m0 - uSqr, 0.0);
65 65 scalar sigma1 = (a1_ + b1_)*sigma; scalar sigma1 = (a1_ + b1_)*sigma;
66 Theta_[celli] = sigma1/3.0;
66 Theta_[celli] = sigma1;
67 67
68 68 Meq_(0) = moments(0)[celli]; Meq_(0) = moments(0)[celli];
69 69 Meq_(1) = moments(1)[celli]; Meq_(1) = moments(1)[celli];
 
... ... void Foam::populationBalanceSubModels::collisionKernels::esBGKCollision
87 87 // Variances of velocities // Variances of velocities
88 88 scalar sigma1 = max(moments(2,0)[celli]/m00 - uSqr, 0.0); scalar sigma1 = max(moments(2,0)[celli]/m00 - uSqr, 0.0);
89 89 scalar sigma2 = max(moments(0,2)[celli]/m00 - vSqr, 0.0); scalar sigma2 = max(moments(0,2)[celli]/m00 - vSqr, 0.0);
90 Theta_[celli] = (sigma1 + sigma2)/3.0;
90 Theta_[celli] = (sigma1 + sigma2)/2.0;
91 91
92 92 scalar sigma11 = a1_*Theta_[celli] + b1_*sigma1; scalar sigma11 = a1_*Theta_[celli] + b1_*sigma1;
93 93 scalar sigma22 = a1_*Theta_[celli] + b1_*sigma2; scalar sigma22 = a1_*Theta_[celli] + b1_*sigma2;
 
... ... void Foam::populationBalanceSubModels::collisionKernels::esBGKCollision
165 165 dimensionedScalar zeroVar("zero", sqr(dimVelocity), 0.0); dimensionedScalar zeroVar("zero", sqr(dimVelocity), 0.0);
166 166 volScalarField sigma(max(moments(2)/m0 - uSqr, zeroVar)); volScalarField sigma(max(moments(2)/m0 - uSqr, zeroVar));
167 167 volScalarField sigma1((a1_ + b1_)*sigma); volScalarField sigma1((a1_ + b1_)*sigma);
168 Theta_ = sigma1/3.0;
168 Theta_ = sigma1;
169 169
170 170 Meqf_(0) = moments(0); Meqf_(0) = moments(0);
171 171 Meqf_(1) = moments(1); Meqf_(1) = moments(1);
 
... ... Foam::populationBalanceSubModels::collisionKernels::esBGKCollision
280 280 mesh, mesh,
281 281 dimensionedScalar("0", sqr(dimVelocity), 0.0) dimensionedScalar("0", sqr(dimVelocity), 0.0)
282 282 ), ),
283 dp_(readScalar(dict.lookup("d"))),
283 dp_("d", dimLength, dict),
284 284 zeta_(dict_.lookupOrDefault("zeta", 1.0)), zeta_(dict_.lookupOrDefault("zeta", 1.0)),
285 285 Meqf_(quadrature.moments().size(), momentOrders_), Meqf_(quadrature.moments().size(), momentOrders_),
286 286 Meq_(quadrature.moments().size(), momentOrders_) Meq_(quadrature.moments().size(), momentOrders_)
 
... ... Foam::populationBalanceSubModels::collisionKernels::esBGKCollision
373 373 scalar c = quadrature_.moments()[0][celli]/0.63; scalar c = quadrature_.moments()[0][celli]/0.63;
374 374 scalar gs0 = (2.0 - c)/(2.0*pow3(1.0 - c)) + 1.1603*c; scalar gs0 = (2.0 - c)/(2.0*pow3(1.0 - c)) + 1.1603*c;
375 375 scalar tauC = scalar tauC =
376 zeta_*sqrt(Foam::constant::mathematical::pi)*dp_
376 zeta_*sqrt(Foam::constant::mathematical::pi)*dp_.value()
377 377 /max /max
378 378 ( (
379 379 12.0*gs0*quadrature_.moments()[0][celli]*sqrt(Theta_[celli]), 12.0*gs0*quadrature_.moments()[0][celli]*sqrt(Theta_[celli]),
File multiphaseEulerPbeFoam/quadratureMethods/populationBalanceModels/populationBalanceSubModels/collisionKernels/esBGKCollision/esBGKCollision.H changed (mode: 100644) (index 4a8b6fe..ada6e4f)
... ... class esBGKCollision
74 74 // autoPtr<radialDistributionModel> radialModel_; // autoPtr<radialDistributionModel> radialModel_;
75 75
76 76 //- Diameter //- Diameter
77 scalar dp_;
77 dimensionedScalar dp_;
78 78
79 79 //- Coefficient related to Prandtl number //- Coefficient related to Prandtl number
80 80 scalar zeta_; scalar zeta_;
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/velagala/MultiPhaseQBMM

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/velagala/MultiPhaseQBMM

Clone this repository using git:
git clone git://git.rocketgit.com/user/velagala/MultiPhaseQBMM

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main