LCOV - code coverage report
Current view: top level - src/Integrator - CahnHilliard.cpp (source / functions) Hit Total Coverage
Test: coverage_merged.info Lines: 0 42 0.0 %
Date: 2024-11-18 05:28:54 Functions: 0 7 0.0 %

          Line data    Source code
       1             : #include <AMReX_MLPoisson.H>
       2             : 
       3             : #include "CahnHilliard.H"
       4             : #include "BC/Nothing.H"
       5             : #include "Numeric/Stencil.H"
       6             : 
       7             : namespace Integrator
       8             : {
       9           0 : CahnHilliard::CahnHilliard() : Integrator()
      10             : {
      11           0 :     bc = new BC::Nothing();
      12           0 :     ic = new IC::Random(geom,2.0);
      13           0 :     RegisterNewFab(etanewmf, bc, ncomp, nghost, "Eta",true);
      14           0 :     RegisterNewFab(etaoldmf, bc, ncomp, nghost, "EtaOld",false);
      15           0 :     RegisterNewFab(intermediate, bc, ncomp, nghost, "int",false);
      16           0 :     LPInfo info;
      17           0 :     op.define(geom,grids,dmap,*bc,info);
      18           0 : }
      19             : 
      20             : 
      21             : void
      22           0 : CahnHilliard::TimeStepBegin(amrex::Real /*time*/, int /*iter*/)
      23             : {
      24             :     // amrex::MLPoisson myop(geom,grids,dmap);
      25             :     // amrex::MLMG solver(myop);
      26             :     // solver.setMaxIter(elastic.max_iter);
      27             :     // solver.setMaxFmgIter(elastic.max_fmg_iter);
      28             :     // solver.setVerbose(elastic.verbose);
      29             :     // solver.setCGVerbose(elastic.cgverbose);
      30             : 
      31             :     // etanewmf[0]->setVal(0.0);
      32             :     // etanewmf[0]->setVal(0.0);
      33             : 
      34             :     // Set::Scalar tol_rel = 1E-8;
      35             :     // Set::Scalar tol_abs = 0.0;
      36             :     // solver.solve(GetVecOfPtrs(etanewmf),
      37             :     //       GetVecOfConstPtrs(etaoldmf),
      38             :     //       tol_rel,
      39             :     //       tol_abs);
      40             :     
      41           0 : }
      42             : 
      43             : void
      44           0 : CahnHilliard::Advance (int lev, Set::Scalar /*time*/, Set::Scalar dt)
      45             : {
      46           0 :     std::swap(etaoldmf[lev], etanewmf[lev]);
      47           0 :     const amrex::Real* DX = geom[lev].CellSize();
      48           0 :     for ( amrex::MFIter mfi(*etanewmf[lev],true); mfi.isValid(); ++mfi )
      49             :     {
      50           0 :         const amrex::Box& bx = mfi.tilebox();
      51           0 :         amrex::Array4<const amrex::Real> const& eta = etaoldmf[lev]->array(mfi);
      52           0 :         amrex::Array4<amrex::Real> const& inter    = intermediate[lev]->array(mfi);
      53           0 :         amrex::Array4<amrex::Real> const& etanew    = etanewmf[lev]->array(mfi);
      54             : 
      55           0 :         amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k){
      56             :                                     Set::Scalar lap =
      57           0 :                                         Numeric::Stencil<Set::Scalar,2,0,0>::D(eta,i,j,k,0,DX) +
      58           0 :                                         Numeric::Stencil<Set::Scalar,2,0,0>::D(eta,i,j,k,0,DX);
      59             : 
      60           0 :                                     inter(i,j,k) =
      61           0 :                                         eta(i,j,k)*eta(i,j,k)*eta(i,j,k)
      62           0 :                                         - eta(i,j,k)
      63           0 :                                         - gamma*lap;
      64             : 
      65             : 
      66           0 :                                     etanew(i,j,k) = eta(i,j,k) - dt*inter(i,j,k); // Allen Cahn
      67           0 :                                 });
      68             : 
      69           0 :         amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k){
      70             :                                     Set::Scalar lap = 
      71           0 :                                         Numeric::Stencil<Set::Scalar,2,0,0>::D(inter,i,j,k,0,DX) +
      72           0 :                                         Numeric::Stencil<Set::Scalar,2,0,0>::D(inter,i,j,k,0,DX);
      73             : 
      74           0 :                                     etanew(i,j,k) = eta(i,j,k) + dt*lap;
      75           0 :                                 });
      76             : 
      77             :     }
      78           0 : }
      79             : 
      80             : void
      81           0 : CahnHilliard::Initialize (int lev)
      82             : {
      83           0 :     etanewmf[lev]->setVal(-1.);
      84           0 :     etaoldmf[lev]->setVal(-1.);
      85           0 :     ic->Add(lev,etanewmf);
      86           0 :     ic->Add(lev,etaoldmf);
      87           0 : }
      88             : 
      89             : 
      90             : void
      91           0 : CahnHilliard::TagCellsForRefinement (int /*lev*/, amrex::TagBoxArray& /*tags*/, amrex::Real /*time*/, int /*ngrow*/)
      92             : {
      93           0 : }
      94             : 
      95             : 
      96             : }

Generated by: LCOV version 1.14