
/************************************************************************
*									*
* 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 "decs.h"

void diag(ncycle,time,p,u,v,h,z)
int ncycle;
float time;
float p[n][m];
float u[n][m];
float v[n][m];
float h[n][m];
float z[n][m];
/*
Calculate global integrals of kinetic and potential energy and
potential enstrophy
*/
{
  float	ptot,ketot,etot,enstot,ptime,pmean;
  int	i,j,ip,jp;

  ptot=0.; ketot=0.; etot=0.; enstot = 0.; pmean = 0.; 
  for (j = 0; j < n; j++) {
    for (i = 0; i < m; i++) {
      pmean = pmean+p[j][i];
    }
  }
  pmean = pmean/(m*n);
  for (j = 0; j < n; j++){
    jp = (j+1) % n;
    for (i = 0; i < m; i++){
      ip = (i+1) % m;
      ketot += p[j][i]*0.25*(u[j][ip]*u[j][ip]+u[j][i]*u[j][i]
		   +v[jp][i]*v[jp][i]+v[j][i]*v[j][i]);
      ptot += (p[j][i]-pmean)*(p[j][i]-pmean);
      etot += h[j][i];
      enstot += z[jp][ip]*z[jp][ip] * 0.25*
	     (p[j][i]+p[j][ip]+p[jp][ip]+p[jp][i]);
    }
  }
  ptot *= 0.5/(m*n);
  ketot /= (m*n);
  etot /= (m*n);
  enstot /= (m*n);
  ptime = time/secs_pd;

  if ( ncycle > 0 ) {
	  printf("Cycle number %5d    Model time in days %6.2f \n \
  Potential energy %12.3f  Kinetic Energy %12.3f \n \
  Total Energy     %12.3f  Pot. Enstrophy  %15.6e \n\n",
  ncycle,ptime,ptot,ketot,ptot+ketot,enstot);
  }
}
