<div dir="ltr"><div>Dear Chirstian, thanks a lot for your reply. I have applied a random number as an initial condition but can't get the required results. Basically, I want to see the spinodal decomposition of the Cahn Hilliard equation. For this  I have used u0=0.02rand(x,y) where rand(x,y) is the random number between -1 and 1 as an initial condition. For this following initial profile is required. Kindly help me about coding.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Aug 24, 2020 at 3:31 PM Christian Engwer <<a href="mailto:christian.engwer@uni-muenster.de">christian.engwer@uni-muenster.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear Rana,<br>
<br>
On Mon, Aug 24, 2020 at 11:31:41AM +0500, Rana Abdul Rauf wrote:<br>
> Hello DUNE developers, I am working on phase field modeling. For the<br>
> numerical simulations, I am using Dune PEDlab. Now I am solving the<br>
> Cahn-Hilliard equation to see the spinodal decomposition. For this I want<br>
> to generate random numbers between -1 to 1. Kindly help me how to put<br>
> rand(x,y) as a initial condition, where rand(x,y) is random number between<br>
> -1 to 1.<br>
<br>
you can cast any lambda into a discrete function in<br>
PDELab. Interpolation aloows then to use this function as an initial<br>
value.<br>
<br>
- use your favorite random number generator, depending on your needs.<br>
- for simpliity I assume a uniform distribution between -1 and 1 is OK<br>
  and I'll use std::uniform_real_distribution (<a href="https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution" rel="noreferrer" target="_blank">https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution</a>)<br>
- you can now create a random scalar function using, working in global coordinates:<br>
  ```<br>
   std::random_device rd;  //Will be used to obtain a seed for the random number engine<br>
   std::mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()<br>
   std::uniform_real_distribution<> dis(-1.0, 1.0);<br>
   auto r = [dis&,gen&](const auto & x){ return dis(gen); };<br>
  ```<br>
  and cast it into a grid function, using infrastruture from dune-functions<br>
  ```<br>
  auto f = Dune::makeAnalyticGridViewFunction(r, gridView);<br>
  ```<br>
- this function `f` an now interpolated into your stating vector using PDELab's `interplate`.<br>
<br>
If you know how to interprate your coeffiients you can further<br>
simplify this approach and perhas even use these random values<br>
directly as coefficients.<br>
<br>
Ciao<br>
Christian<br>
</blockquote></div>