1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
<center><a href="p2.c">Actual source code: p2.c</a></center><br>
<html>
<head>
<title></title>
<meta name="generator" content="c2html 0.9.5">
<meta name="date" content="2010-04-08T19:58:00+00:00">
</head>
<body bgcolor="#FFFFFF">
<pre width="80">
<a name="line2"> 2: </a>static char help[] = <font color="#666666">"Model single-physics solver. Modified from ex19.c \n\\n"</font>;
<a name="line4"> 4: </a><font color="#B22222">/* ------------------------------------------------------------------------</font>
<a name="line6"> 6: </a><font color="#B22222"> See ex19.c for discussion of the problem </font>
<a name="line8"> 8: </a><font color="#B22222"> ------------------------------------------------------------------------- */</font>
<a name="line9"> 9: </a> #include <A href="mp.h.html">mp.h</A>
<a name="line17"> 17: </a><strong><font color="#4169E1"><a name="main"></a>int main(int argc,char **argv)</font></strong>
<a name="line18"> 18: </a>{
<a name="line19"> 19: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A> *dmmg; <font color="#B22222">/* multilevel grid structure */</font>
<a name="line20"> 20: </a> AppCtx user; <font color="#B22222">/* user-defined work context */</font>
<a name="line21"> 21: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscInt.html#PetscInt">PetscInt</A> mx,my,its;
<a name="line23"> 23: </a> <A href="tutorials/../../docs/manualpages/Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> comm;
<a name="line24"> 24: </a> <A href="tutorials/../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> snes;
<a name="line25"> 25: </a> <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A> da2;
<a name="line27"> 27: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscInitialize.html#PetscInitialize">PetscInitialize</A>(&argc,&argv,(char *)0,help);
<a name="line28"> 28: </a> <A href="tutorials/../../docs/manualpages/Profiling/PetscLogEventRegister.html#PetscLogEventRegister">PetscLogEventRegister</A>(<font color="#666666">"FormFunc2"</font>, 0,&EVENT_FORMFUNCTIONLOCAL2);
<a name="line29"> 29: </a> comm = <A href="tutorials/../../docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>;
<a name="line31"> 31: </a> <font color="#B22222">/* Problem parameters (velocity of lid, prandtl, and grashof numbers) */</font>
<a name="line32"> 32: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-lidvelocity"</font>,&user.lidvelocity,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
<a name="line33"> 33: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-prandtl"</font>,&user.prandtl,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
<a name="line34"> 34: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscOptionsGetReal.html#PetscOptionsGetReal">PetscOptionsGetReal</A>(<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,<font color="#666666">"-grashof"</font>,&user.grashof,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>);
<a name="line36"> 36: </a> <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line37"> 37: </a><font color="#B22222"> Create user context, set problem data, create vector data structures.</font>
<a name="line38"> 38: </a><font color="#B22222"> Also, compute the initial guess.</font>
<a name="line39"> 39: </a><font color="#B22222"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line41"> 41: </a> <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line42"> 42: </a><font color="#B22222"> Setup Physics 2: </font>
<a name="line43"> 43: </a><font color="#B22222"> - Lap(T) + PR*Div([U*T,V*T]) = 0 </font>
<a name="line44"> 44: </a><font color="#B22222"> where U and V are given by the given x.u and x.v</font>
<a name="line45"> 45: </a><font color="#B22222"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line46"> 46: </a> <A href="tutorials/../../docs/manualpages/DA/DACreate2d.html#DACreate2d">DACreate2d</A>(comm,DA_NONPERIODIC,<A href="tutorials/../../docs/manualpages/DA/DA_STENCIL_STAR.html#DA_STENCIL_STAR">DA_STENCIL_STAR</A>,-4,-4,<A href="tutorials/../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,<A href="tutorials/../../docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE">PETSC_DECIDE</A>,1,1,0,0,&da2);
<a name="line47"> 47: </a> <A href="tutorials/../../docs/manualpages/DA/DASetFieldName.html#DASetFieldName">DASetFieldName</A>(da2,0,<font color="#666666">"temperature"</font>);
<a name="line49"> 49: </a> <font color="#B22222">/* Create the solver object and attach the grid/physics info */</font>
<a name="line50"> 50: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGCreate.html#DMMGCreate">DMMGCreate</A>(comm,1,&user,&dmmg);
<a name="line51"> 51: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetDM.html#DMMGSetDM">DMMGSetDM</A>(dmmg,(<A href="tutorials/../../docs/manualpages/DA/DM.html#DM">DM</A>)da2);
<a name="line52"> 52: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetISColoringType.html#DMMGSetISColoringType">DMMGSetISColoringType</A>(dmmg,IS_COLORING_GLOBAL);
<a name="line54"> 54: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetInitialGuess.html#DMMGSetInitialGuess">DMMGSetInitialGuess</A>(dmmg,FormInitialGuess);
<a name="line55"> 55: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetSNES.html#DMMGSetSNES">DMMGSetSNES</A>(dmmg,FormFunction,0);
<a name="line56"> 56: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGSetFromOptions.html#DMMGSetFromOptions">DMMGSetFromOptions</A>(dmmg);
<a name="line58"> 58: </a> <A href="tutorials/../../docs/manualpages/DA/DAGetInfo.html#DAGetInfo">DAGetInfo</A>(da2,<A href="tutorials/../../docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL">PETSC_NULL</A>,&mx,&my,0,0,0,0,0,0,0,0);
<a name="line59"> 59: </a> user.lidvelocity = 1.0/(mx*my);
<a name="line60"> 60: </a> user.prandtl = 1.0;
<a name="line61"> 61: </a> user.grashof = 1.0;
<a name="line63"> 63: </a> <font color="#B22222">/* Solve the nonlinear system */</font>
<a name="line64"> 64: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGSolve.html#DMMGSolve">DMMGSolve</A>(dmmg);
<a name="line65"> 65: </a> snes = <A href="tutorials/../../docs/manualpages/DMMG/DMMGGetSNES.html#DMMGGetSNES">DMMGGetSNES</A>(dmmg);
<a name="line66"> 66: </a> <A href="tutorials/../../docs/manualpages/SNES/SNESGetIterationNumber.html#SNESGetIterationNumber">SNESGetIterationNumber</A>(snes,&its);
<a name="line67"> 67: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscPrintf.html#PetscPrintf">PetscPrintf</A>(comm,<font color="#666666">"Physics 2: Number of Newton iterations = %D\n\n"</font>, its);
<a name="line69"> 69: </a> <font color="#B22222">/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</font>
<a name="line70"> 70: </a><font color="#B22222"> Free spaces </font>
<a name="line71"> 71: </a><font color="#B22222"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */</font>
<a name="line72"> 72: </a> <A href="tutorials/../../docs/manualpages/DA/DADestroy.html#DADestroy">DADestroy</A>(da2);
<a name="line73"> 73: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMGDestroy.html#DMMGDestroy">DMMGDestroy</A>(dmmg);
<a name="line74"> 74: </a> <A href="tutorials/../../docs/manualpages/Sys/PetscFinalize.html#PetscFinalize">PetscFinalize</A>();
<a name="line75"> 75: </a> <font color="#4169E1">return</font> 0;
<a name="line76"> 76: </a>}
<a name="line80"> 80: </a><strong><font color="#4169E1"><a name="FormInitialGuess"></a><A href="tutorials/../../docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> FormInitialGuess(<A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A> dmmg,<A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X)</font></strong>
<a name="line81"> 81: </a>{
<a name="line83"> 83: </a> AppCtx *user = (AppCtx*)dmmg->user;
<a name="line84"> 84: </a> <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A> da2 = (<A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A>)dmmg->dm;
<a name="line85"> 85: </a> Field2 **x2;
<a name="line86"> 86: </a> <A href="tutorials/../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info2;
<a name="line89"> 89: </a> <font color="#B22222">/* Access the arrays inside of X */</font>
<a name="line90"> 90: </a> <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da2,X,(void**)&x2);
<a name="line92"> 92: </a> <A href="tutorials/../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da2,&info2);
<a name="line94"> 94: </a> <font color="#B22222">/* Evaluate local user provided function */</font>
<a name="line95"> 95: </a> FormInitialGuessLocal2(&info2,x2,user);
<a name="line97"> 97: </a> <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da2,X,(void**)&x2);
<a name="line98"> 98: </a> <font color="#4169E1">return</font>(0);
<a name="line99"> 99: </a>}
<a name="line103">103: </a><strong><font color="#4169E1"><a name="FormFunction"></a><A href="tutorials/../../docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> FormFunction(<A href="tutorials/../../docs/manualpages/SNES/SNES.html#SNES">SNES</A> snes,<A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X,<A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> F,void *ctx)</font></strong>
<a name="line104">104: </a>{
<a name="line106">106: </a> <A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A> dmmg = (<A href="tutorials/../../docs/manualpages/DMMG/DMMG.html#DMMG">DMMG</A>)ctx;
<a name="line107">107: </a> AppCtx *user = (AppCtx*)dmmg->user;
<a name="line108">108: </a> <A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A> da2 = (<A href="tutorials/../../docs/manualpages/DA/DA.html#DA">DA</A>)dmmg->dm;
<a name="line109">109: </a> <A href="tutorials/../../docs/manualpages/DA/DALocalInfo.html#DALocalInfo">DALocalInfo</A> info2;
<a name="line110">110: </a> Field2 **x2,**f2;
<a name="line111">111: </a> <A href="tutorials/../../docs/manualpages/Vec/Vec.html#Vec">Vec</A> X2;
<a name="line114">114: </a> <A href="tutorials/../../docs/manualpages/DA/DAGetLocalInfo.html#DAGetLocalInfo">DAGetLocalInfo</A>(da2,&info2);
<a name="line116">116: </a> <font color="#B22222">/* Get local vectors to hold ghosted parts of X */</font>
<a name="line117">117: </a> <A href="tutorials/../../docs/manualpages/DA/DAGetLocalVector.html#DAGetLocalVector">DAGetLocalVector</A>(da2,&X2);
<a name="line118">118: </a> <A href="tutorials/../../docs/manualpages/DA/DAGlobalToLocalBegin.html#DAGlobalToLocalBegin">DAGlobalToLocalBegin</A>(da2,X,<A href="tutorials/../../docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES">INSERT_VALUES</A>,X2);
<a name="line119">119: </a> <A href="tutorials/../../docs/manualpages/DA/DAGlobalToLocalEnd.html#DAGlobalToLocalEnd">DAGlobalToLocalEnd</A>(da2,X,<A href="tutorials/../../docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES">INSERT_VALUES</A>,X2);
<a name="line121">121: </a> <font color="#B22222">/* Access the array inside of X1 */</font>
<a name="line122">122: </a> <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da2,X2,(void**)&x2);
<a name="line124">124: </a> <font color="#B22222">/* Access the subvectors in F. </font>
<a name="line125">125: </a><font color="#B22222"> These are not ghosted so directly access the memory locations in F */</font>
<a name="line126">126: </a> <A href="tutorials/../../docs/manualpages/DA/DAVecGetArray.html#DAVecGetArray">DAVecGetArray</A>(da2,F,(void**)&f2);
<a name="line128">128: </a> <font color="#B22222">/* Evaluate local user provided function */</font>
<a name="line129">129: </a> FormFunctionLocal2(&info2,0,x2,f2,(void**)user);
<a name="line131">131: </a> <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da2,F,(void**)&f2);
<a name="line132">132: </a> <A href="tutorials/../../docs/manualpages/DA/DAVecRestoreArray.html#DAVecRestoreArray">DAVecRestoreArray</A>(da2,X2,(void**)&x2);
<a name="line133">133: </a> <A href="tutorials/../../docs/manualpages/DA/DARestoreLocalVector.html#DARestoreLocalVector">DARestoreLocalVector</A>(da2,&X2);
<a name="line134">134: </a> <font color="#4169E1">return</font>(0);
<a name="line135">135: </a>}
</pre>
</body>
</html>
|