/************************************************************************ | |
* * | |
* 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 tstep( | |
int m_, | |
int n_, | |
float alpha_, | |
int jstart, | |
int jend, | |
float pold[n][m], | |
float uold[n][m], | |
float vold[n][m], | |
float p[n][m], | |
float u[n][m], | |
float v[n][m], | |
float pnew[n][m], | |
float unew[n][m], | |
float vnew[n][m], | |
float dpdt[n][m], | |
float dudt[n][m], | |
float dvdt[n][m], | |
int firststep, | |
float tdt) | |
{ | |
int i,j; | |
for (j = jstart; j <= jend; j++){ | |
for (i = 0; i < m; i++){ | |
pnew[j][i] = pold[j][i] + tdt*dpdt[j][i]; | |
unew[j][i] = uold[j][i] + tdt*dudt[j][i]; | |
vnew[j][i] = vold[j][i] + tdt*dvdt[j][i]; | |
} | |
} | |
/* Don't apply time filter on first step */ | |
if ( !firststep ) { | |
for (j = jstart; j <= jend; j++) { | |
for (i = 0; i < m; i++) { | |
pold[j][i] = p[j][i]+alpha*(pnew[j][i]-2.*p[j][i]+pold[j][i]); | |
uold[j][i] = u[j][i]+alpha*(unew[j][i]-2.*u[j][i]+uold[j][i]); | |
vold[j][i] = v[j][i]+alpha*(vnew[j][i]-2.*v[j][i]+vold[j][i]); | |
} | |
} | |
} | |
for (j = jstart; j <= jend; j++) { | |
for (i = 0; i < m; i++) { | |
p[j][i] = pnew[j][i]; | |
u[j][i] = unew[j][i]; | |
v[j][i] = vnew[j][i]; | |
} | |
} | |
} |