-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalcs.c
62 lines (55 loc) · 1.71 KB
/
calcs.c
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
/******************************************************************************
*
* File: calcs.c
*
* Created: 15/04/2024
*
* Authors: Pavel Sakov
* Bureau of Meteorology
*
* Description: contains mathematical utilities
*
* Revisions:
*
*****************************************************************************/
#include "calcs.h"
/**
*/
void arakawa(double h, int m, int n, double** A, double** B, double** J)
{
double c = 12.0 * h * h;
int i, j;
for (j = 1; j < m - 1; ++j) {
double* am1 = A[j - 1];
double* a = A[j];
double* ap1 = A[j + 1];
double* bm1 = B[j - 1];
double* b = B[j];
double* bp1 = B[j + 1];
for (i = 1; i < n - 1; ++i)
J[j][i] = ((am1[i] - a[i - 1]) * bm1[i - 1]
+ (am1[i - 1] + am1[i] - ap1[i - 1] - ap1[i]) * b[i - 1]
+ (a[i - 1] - ap1[i]) * bp1[i - 1]
+ (am1[i + 1] + a[i + 1] - am1[i - 1] - a[i - 1]) * bm1[i]
+ (a[i - 1] + ap1[i - 1] - a[i + 1] - ap1[i + 1]) * bp1[i]
+ (a[i + 1] - am1[i]) * bm1[i + 1]
+ (ap1[i] + ap1[i + 1] - am1[i] - am1[i + 1]) * b[i + 1]
+ (ap1[i] - a[i + 1]) * bp1[i + 1]) / c;
}
}
/**
*/
void laplacian(double h, int m, int n, double** A, double** L)
{
double h2 = 1.0 / h / h;
double h4 = 4.0 * h2;
int i, j;
for (j = 1; j < m - 1; ++j) {
double* am1 = A[j - 1];
double* a = A[j];
double* ap1 = A[j + 1];
double* lj = L[j];
for (i = 1; i < n - 1; ++i)
lj[i] = (am1[i] + ap1[i]) * h2 + (a[i - 1] + a[i + 1]) * h2 - a[i] * h4;
}
}