/* * Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg. * All rights reserved. This file is part of nusif-solver. * Use of this source code is governed by a MIT style * license that can be found in the LICENSE file. */ #include "stdlib.h" #include "stdio.h" #include "math.h" #include "solver.h" #include "parameter.h" #include "allocate.h" #define PI 3.14159265358979323846 #define P(i,j) p[(j)*(imax+2) + (i)] #define RHS(i,j) rhs[(j)*(imax+2) + (i)] void initSolver(Solver *solver, Parameter *params, int problem) { solver->imax = params->imax; solver->jmax = params->jmax; solver->dx = params->xlength/params->imax; solver->dy = params->ylength/params->jmax; solver->eps = params->eps; solver->omega = params->omg; solver->itermax = params->itermax; int imax = solver->imax; int jmax = solver->jmax; size_t bytesize = (imax+2) * (jmax+2) * sizeof(double); solver->p = allocate(64, bytesize); solver->rhs = allocate(64, bytesize); double dx = solver->dx; double dy = solver->dy; double* p = solver->p; double* rhs = solver->rhs; for( int j=0; jimax; int jmax = solver->jmax; double eps= solver->eps; double omega = solver->omega; int itermax = solver->itermax; double dx2 = solver->dx * solver->dx; double dy2 = solver->dy * solver->dy; double idx2 = 1.0/dx2; double idy2 = 1.0/dy2; double factor = omega * 0.5 * (dx2*dy2) / (dx2+dy2); double* p = solver->p; double* rhs = solver->rhs; res = eps + 1.0; while((res >= eps) && (it < itermax)) { res = 0.0; for( int j=1; jimax; int jmax = solver->jmax; double* p = solver->p; FILE *fp; fp= fopen("p.dat", "w"); if (fp== NULL) { printf("Error!\n"); exit(EXIT_FAILURE); } for( int j=0; j