| |
| /************************************************************************ |
| * * |
| * Commonwealth Scientific and Industrial Research Organisation (CSIRO) * |
| * - Division of Information Technology (DIT) * |
| * - Division of Atmospheric Research (DAR) * |
| * * |
| * Shallow water weather model - Distributed Memory Version * |
| * * |
| * Finite difference model of shallow water equations based on :- * |
| * "The dynamics of finite difference models of the shallow water * |
| * equations" by R. Sadourney, JAS, 32, 1975. * |
| * Code from:- * |
| * "An introduction to three-dimensional climate modelling" * |
| * by Washington and Parkinson * |
| * * |
| * Programmers = David Abramson (DIT) rcoda@koel.co.rmit.oz * |
| * = Paul Whiting (DIT) rcopw@koel.co.rmit.oz * |
| * = Martin Dix (DAR) mrd@koel.co.rmit.oz * |
| * Language = BSD c using Argonne NL macros * |
| * O/S = Unix System V * |
| * H/W = Encore Multimax 320 * |
| * * |
| ************************************************************************/ |
| |
| #include "decs.h" |
| |
| void timetend(jstart,jend,dpdt,dudt,dvdt,cu,cv,h,z) |
| int jstart,jend; |
| float dudt[n][m]; |
| float dvdt[n][m]; |
| float dpdt[n][m]; |
| float z[n][m]; |
| float cv[n][m]; |
| float cu[n][m]; |
| float h[n][m]; |
| { |
| int i,j,ip,jp; |
| float invdx, invdy; |
| |
| invdx = 1./dx; invdy=1./dy; |
| for(j=jstart;j<=jend;j++) { |
| jp = (j+1) % n; |
| for (i = 0; i < m; i++) { |
| ip = (i+1) % m; |
| /* ENERGY CONSERVING */ |
| dpdt[j][i] = -(cu[j][ip]-cu[j][i])*invdx - (cv[jp][i]-cv[j][i])*invdy; |
| dudt[j][ip] = |
| 0.125 * (z[jp][ip] * (cv[jp][ip] + cv[jp][i]) + z[j][ip] * |
| (cv[j][ip]+cv[j][i])) - (h[j][ip] - h[j][i]) * invdx; |
| dvdt[jp][i] = |
| -0.125 * (z[jp][ip] * (cu[jp][ip] + cu[j][ip]) + z[jp][i] * |
| (cu[jp][i]+cu[j][i])) - (h[jp][i] - h[j][i]) * invdy; |
| } |
| } |
| } |