Hi Chaitanya, I think you're correct. It seems that term should be multiplied by the time step. The tests all pass with your change. Would you like to submit a pull-request for that change?
The way time stepping works is a bit weird in that equation so it wasn't clear to me what my intention was when I wrote that code. Anyway, I'll add it as an issue in FiPy. Thanks! On Thu, Jan 9, 2020 at 9:13 PM Chaitanya Joshi <chaitanya.4...@gmail.com> wrote: > > Hi, > > I am working with the leveler.py script in the level set examples. The script > chooses dt value for solving the equations based on the maximum velocity of > the interface at any given instant and the CFL number. > > Script: leveler.py > dt = cflNumber * cellSize / extOnInt.max() > > I changed that to a user specified fixed dt. To test the changes I made, I > ran the script for a flat interface and plotted acceleratorVar.interfaceVar > as a function of time for different dt values. Unfortunately, I was unable to > get dt convergence. By trial and error, I found out that if I call > AdsorbingSurfactantEquation with consumptionCoeff=None, > I get dt convergence. I then went through the AdsorbingSurfactantEquation.py > to see if I can find something. I think there is a dt term missing in the > AdsorbingSurfactantEquation.py. > > Script: AdsorbingSurfactantEquation.py > self.eq = TransientTerm(coeff = 1) - > ExplicitUpwindConvectionTerm(SurfactantConvectionVariable(distanceVar)) > self.dt = Variable(0.) > mesh = distanceVar.mesh > adsorptionCoeff = self.dt * bulkVar * rateConstant #dt multiplication > spCoeff = adsorptionCoeff * distanceVar._cellInterfaceFlag > scCoeff = adsorptionCoeff * distanceVar.cellInterfaceAreas / > mesh.cellVolumes > self.eq += ImplicitSourceTerm(spCoeff) - scCoeff > if otherVar is not None: > otherSpCoeff = self.dt * otherBulkVar * otherRateConstant * > distanceVar._cellInterfaceFlag #dt multiplication > otherScCoeff = -otherVar.interfaceVar * scCoeff > self.eq += ImplicitSourceTerm(otherSpCoeff) - otherScCoeff > > if consumptionCoeff is not None: > self.eq += ImplicitSourceTerm(consumptionCoeff) #This is where > I think a dt term is missing > > I believe the line should be > if consumptionCoeff is not None: > self.eq += ImplicitSourceTerm(consumptionCoeff*self.dt) > > Please let me know if I am thinking on the right lines. > > Regards, > Chaitanya > > > > _______________________________________________ > fipy mailing list > fipy@nist.gov > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] -- Daniel Wheeler _______________________________________________ fipy mailing list fipy@nist.gov http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]