<div class="gmail_quote">On Sun, Jun 17, 2012 at 7:26 AM, TAY wee-beng <span dir="ltr"><<a href="mailto:zonexo@gmail.com" target="_blank">zonexo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="im">
    <br>
    On 16/6/2012 9:24 AM, Jed Brown wrote:
    <blockquote type="cite">
      <p>It depends how you want to solve the problem. I usually group
        all dofs together. There is a 2D Stokes+Thermodynamics example
        in SNES ex30 (or 31?).</p>
    </blockquote>
    <br></div>
    I tried to understand ex30. I have some questions since it's in C
    and I'm using to Fortran programming.<br></div></blockquote><div><br></div><div>This looks about right, see src/dm/examples/tutorials/ex11f90.F.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
    <br>
    Supposed I have a field - u,v,w,p, so in order to use them, I do the
    following:<br>
    <i><br>
      type field<br>
      <br>
      real u,v,w,p<br>
      <br>
      end type field<br>
      <br>
      type(field), pointer :: field1(:,:,:)    -> make a derived
      variable</i><br>
    <br>
    Also:<br>
    <i><br>
      Vec field_local,field_global<br>
      <br>
      call DMDACreate3d with dof = 4<br>
      <br>
      call DMCreateGlobalVector(da, field_local,ierr)<br>
      <br>
      call DMCreateLocalVector(da,field_global,ierr)<br>
      <br>
      call DMGetLocalVector(da, field_local,ierr)    ->    To insert
      values<br>
      <br>
      call DMDAVecGetArrayF90(da, field_local,field1,ierr)<br>
      <br>
      do k = zs, zs + zm - 1<br>
      <br>
      do j = ys, ys + ym -1 <br>
      <br>
          do i = xs, xs + xm - 1<br>
      <br>
              field1(i,j,k)%u = ...     ->    evaluate u,v,w,p etc<br>
      <br>
          end do<br>
      <br>
      end do<br>
      <br>
      call DMDAVecRestoreArrayF90(da,field_local,field1,ierr)<br>
      <br>
      call
      DMLocalToGlobalBegin(da,field_local,INSERT_VALUES,field_global,ierr)<br>
      <br>
      call
      DMLocalToGlobalEnd(da,field_local,INSERT_VALUES,field_global,ierr)<br>
      <br>
      call DMRestoreLocalVector(da,field_local,ierr)</i><br>
    <br>
    Is this the correct way?<br>
    <br>
    Also, supposed I now want to solve my u,v,w momentum eqns. Although
    they're not coupled together, I believe it's faster if I assemble
    them into 1 big matrix. <br>
    <br>
    So for Ax = b, x =
    (field(1,1,1)%u,field(1,1,1)%v,field(1,1,1)%w,field(2,1,1)%u.... ) <br>
    <br>
    For b, do I duplicate a Vec similar to field_local?<br>
    <br>
    What about matrix A? Do I use the MatSetValuesStencil?<br></div></blockquote><div><br></div><div>Yes</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
    <br>
    Lastly, the type field contains u,v,w and p. However, I'm only
    solving u,v,w. Do I have to skip some values or use identity matrix
    to solve it?<br></div></blockquote><div><br></div><div>Why not make a field that contains only u,v,w. I don't see what you're trying to do.</div></div>