blob: b14b76f90cacdf83d41b298bd845334de94e18b9 [file] [log] [blame]
/************************************************************************
* *
* 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 <stdio.h>
#include <math.h>
#include "decs.h"
void initialise(p, u, v, psi, pold, uold, vold, di, dj, z)
float p[n][m];
float u[n][m];
float v[n][m];
float psi[n][m];
float pold[n][m];
float uold[n][m];
float vold[n][m];
float di, dj;
float z[n][m];
{
int i,j,ip,jp;
/* initialise values of the streamfunction */
for (j = 0; j < n; j++){
for (i = 0; i < m; i++){
float sin1 = sin((double)((i+0.5)*di));
float sin2 = sin((double)((j+0.5)*dj));
psi[j][i] = a*sin1*sin2;
}
}
/* initialise velocities */
for (j = 0; j < n; j++){
jp = (j+1) % n;
for (i = 0; i < m; i++){
ip = (i+1) % m;
u[j][ip] = -(psi[jp][ip]-psi[j][ip])/dy;
v[jp][i] = -(psi[jp][ip]-psi[jp][i])/dx;
}
}
for (j = 0; j < n; j++) {
for (i = 0; i < m; i++) {
uold[j][i] = u[j][i];
vold[j][i] = v[j][i];
/* free surface height * gravitational acceleration */
pold[j][i] = 50000.;
p[j][i] = 50000.;
}
}
for (j = 0; j < n; j++) {
for (i = 0; i < m; i++) {
z[j][i] = 0.;
}
}
printf("\n");
printf("Shallow water weather model - Distributed Memory Version 0.6\n\n");
printf("Number of points in the X direction%8d\n", n);
printf("Number of points in the Y direction%8d\n", m);
printf("Grid spacing in the X direction %8.2f\n", dx);
printf("Grid spacing in the Y direction %8.2f\n", dy);
printf("Time step %8.3f\n", dt);
printf("Time filter parameter %8.3f\n", alpha);
}