<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>