CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > General Forums > Main CFD Forum

UDF call Python permission error

Register Blogs Community New Posts Updated Threads Search

 
 
LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
Old   February 26, 2024, 16:35
Default UDF call Python permission error
  #1
New Member
 
Yifan Gu
Join Date: Oct 2023
Posts: 5
Rep Power: 2
yifan998 is on a distinguished road
Hello all,

I am trying to write a UDF to calculate the reaction rate. For my solution, I am writing a text file to output the parameter and call Python to do the calculation. The reason to do that is I want to fast coverage. Then, after I calculate the rate, I output the rates as a text file. the udf will read the file and put the rate to the reaction.

Here is my udf:
#include "udf.h"
//#include <stdlib.h>
#include <stdio.h>
// #include <iostream>

DEFINE_SR_RATE(my_rate, c, t, r, mw, yi, rr)
//DEFINE_ON_DEMAND(CalculateReactionRate)
{
int i;
real temp, pres;
//double ID_H2, ID_O2, ID_H2O, ID_CH4, ID_CO, ID_CO2;
//real concentration_H2, concentration_O2, concentration_H2O, concentration_CH4, concentration_CO, concentration_CO2;

/* Get the domain and thread */
temp = C_T(c, t);
pres = C_P(c, t);
int check_list[6] = { 0 };
if (yi != check_list) {
/* Write data to a file */
FILE* fp_out;
fp_out = fopen("fluent_data.txt", "w");
//fprintf(fp_out, "%f\n", zone_ID);
for (i = 0; i < sizeof(yi); i++)
{
fprintf(fp_out, "%f, ", yi[i]);
// Message0("species index=%d,species name=%s\n", i, spe_name);
}
fprintf(fp_out, "%f, ", temp);
fprintf(fp_out, "%f", pres);

// for (i = 0; i < MAX_SPE_EQNS; i++) {
// fprintf(fp_out, "%d %f\n", i, yi[i]);
// }
fclose(fp_out);
}


putenv("PYTHONHOME=C:/Users/guyifan/Anaconda3/envs/ct-env");
putenv("PATH=C:/Users/guyifan/Anaconda3/envs/ct-env");

int status = system("python python_data_process.py");

if (status != 0) {
Message("Error: Failed to execute Python script\n");
return;
}



FILE* fp_in;

fp_in = fopen("reaction_rate.txt", "r");
if (fp_in == NULL) {
Message("Error: Failed to open reaction rate file\n");
return;
}
double reaction_rate[77];

fscanf(fp_in, "%lf", &reaction_rate[0]);
fscanf(fp_in, "%lf", &reaction_rate[1]);
fscanf(fp_in, "%lf", &reaction_rate[2]);
fscanf(fp_in, "%lf", &reaction_rate[3]);
fscanf(fp_in, "%lf", &reaction_rate[4]);
fscanf(fp_in, "%lf", &reaction_rate[5]);
fscanf(fp_in, "%lf", &reaction_rate[6]);
fscanf(fp_in, "%lf", &reaction_rate[7]);
fscanf(fp_in, "%lf", &reaction_rate[8]);
fscanf(fp_in, "%lf", &reaction_rate[9]);
fscanf(fp_in, "%lf", &reaction_rate[10]);
fscanf(fp_in, "%lf", &reaction_rate[11]);
fscanf(fp_in, "%lf", &reaction_rate[12]);
fscanf(fp_in, "%lf", &reaction_rate[13]);
fscanf(fp_in, "%lf", &reaction_rate[14]);
fscanf(fp_in, "%lf", &reaction_rate[15]);
fscanf(fp_in, "%lf", &reaction_rate[16]);
fscanf(fp_in, "%lf", &reaction_rate[17]);
fscanf(fp_in, "%lf", &reaction_rate[18]);
fscanf(fp_in, "%lf", &reaction_rate[19]);
fscanf(fp_in, "%lf", &reaction_rate[20]);
fscanf(fp_in, "%lf", &reaction_rate[21]);
fscanf(fp_in, "%lf", &reaction_rate[22]);
fscanf(fp_in, "%lf", &reaction_rate[23]);
fscanf(fp_in, "%lf", &reaction_rate[24]);
fscanf(fp_in, "%lf", &reaction_rate[25]);
fscanf(fp_in, "%lf", &reaction_rate[26]);
fscanf(fp_in, "%lf", &reaction_rate[27]);
fscanf(fp_in, "%lf", &reaction_rate[28]);
fscanf(fp_in, "%lf", &reaction_rate[29]);
fscanf(fp_in, "%lf", &reaction_rate[30]);
fscanf(fp_in, "%lf", &reaction_rate[31]);
fscanf(fp_in, "%lf", &reaction_rate[32]);
fscanf(fp_in, "%lf", &reaction_rate[33]);
fscanf(fp_in, "%lf", &reaction_rate[34]);
fscanf(fp_in, "%lf", &reaction_rate[35]);
fscanf(fp_in, "%lf", &reaction_rate[36]);
fscanf(fp_in, "%lf", &reaction_rate[37]);
fscanf(fp_in, "%lf", &reaction_rate[38]);
fscanf(fp_in, "%lf", &reaction_rate[39]);
fscanf(fp_in, "%lf", &reaction_rate[40]);
fscanf(fp_in, "%lf", &reaction_rate[41]);
fscanf(fp_in, "%lf", &reaction_rate[42]);
fscanf(fp_in, "%lf", &reaction_rate[43]);
fscanf(fp_in, "%lf", &reaction_rate[44]);
fscanf(fp_in, "%lf", &reaction_rate[45]);
fscanf(fp_in, "%lf", &reaction_rate[46]);
fscanf(fp_in, "%lf", &reaction_rate[47]);
fscanf(fp_in, "%lf", &reaction_rate[48]);
fscanf(fp_in, "%lf", &reaction_rate[49]);
fscanf(fp_in, "%lf", &reaction_rate[50]);
fscanf(fp_in, "%lf", &reaction_rate[51]);
fscanf(fp_in, "%lf", &reaction_rate[52]);
fscanf(fp_in, "%lf", &reaction_rate[53]);
fscanf(fp_in, "%lf", &reaction_rate[54]);
fscanf(fp_in, "%lf", &reaction_rate[55]);
fscanf(fp_in, "%lf", &reaction_rate[56]);
fscanf(fp_in, "%lf", &reaction_rate[57]);
fscanf(fp_in, "%lf", &reaction_rate[58]);
fscanf(fp_in, "%lf", &reaction_rate[59]);
fscanf(fp_in, "%lf", &reaction_rate[60]);
fscanf(fp_in, "%lf", &reaction_rate[61]);
fscanf(fp_in, "%lf", &reaction_rate[62]);
fscanf(fp_in, "%lf", &reaction_rate[63]);
fscanf(fp_in, "%lf", &reaction_rate[64]);
fscanf(fp_in, "%lf", &reaction_rate[65]);
fscanf(fp_in, "%lf", &reaction_rate[66]);
fscanf(fp_in, "%lf", &reaction_rate[67]);
fscanf(fp_in, "%lf", &reaction_rate[68]);
fscanf(fp_in, "%lf", &reaction_rate[69]);
fscanf(fp_in, "%lf", &reaction_rate[70]);
fscanf(fp_in, "%lf", &reaction_rate[71]);
fscanf(fp_in, "%lf", &reaction_rate[72]);
fscanf(fp_in, "%lf", &reaction_rate[73]);
fscanf(fp_in, "%lf", &reaction_rate[74]);
fscanf(fp_in, "%lf", &reaction_rate[75]);
fscanf(fp_in, "%lf", &reaction_rate[76]);
fscanf(fp_in, "%lf", &reaction_rate[77]);

fclose(fp_in);



if (strcmp(r->name, "ATR1") == 0) {
*rr = reaction_rate[0];
}
else if (strcmp(r->name, "ATR2") == 0) {
*rr = reaction_rate[1];
}
else if (strcmp(r->name, "ATR3") == 0) {
*rr = reaction_rate[2];
}
else if (strcmp(r->name, "ATR4") == 0) {
*rr = reaction_rate[3];
}
else if (strcmp(r->name, "ATR5") == 0) {
*rr = reaction_rate[4];
}
else if (strcmp(r->name, "ATR6") == 0) {
*rr = reaction_rate[5];
}
else if (strcmp(r->name, "ATR7") == 0) {
*rr = reaction_rate[6];
}
else if (strcmp(r->name, "ATR8") == 0) {
*rr = reaction_rate[7];
}
else if (strcmp(r->name, "ATR9") == 0) {
*rr = reaction_rate[8];
}
else if (strcmp(r->name, "ATR10") == 0) {
*rr = reaction_rate[9];
}
else if (strcmp(r->name, "ATR11") == 0) {
*rr = reaction_rate[10];
}
else if (strcmp(r->name, "ATR12") == 0) {
*rr = reaction_rate[11];
}
else if (strcmp(r->name, "ATR13") == 0) {
*rr = reaction_rate[12];
}
else if (strcmp(r->name, "ATR14") == 0) {
*rr = reaction_rate[13];
}
else if (strcmp(r->name, "ATR15") == 0) {
*rr = reaction_rate[14];
}
else if (strcmp(r->name, "ATR16") == 0) {
*rr = reaction_rate[15];
}
else if (strcmp(r->name, "ATR17") == 0) {
*rr = reaction_rate[16];
}
else if (strcmp(r->name, "ATR18") == 0) {
*rr = reaction_rate[17];
}
else if (strcmp(r->name, "ATR19") == 0) {
*rr = reaction_rate[18];
}
else if (strcmp(r->name, "ATR20") == 0) {
*rr = reaction_rate[19];
}
else if (strcmp(r->name, "ATR21") == 0) {
*rr = reaction_rate[20];
}
else if (strcmp(r->name, "ATR22") == 0) {
*rr = reaction_rate[21];
}
else if (strcmp(r->name, "ATR23") == 0) {
*rr = reaction_rate[22];
}
else if (strcmp(r->name, "ATR24") == 0) {
*rr = reaction_rate[23];
}
else if (strcmp(r->name, "ATR25") == 0) {
*rr = reaction_rate[24];
}
else if (strcmp(r->name, "ATR26") == 0) {
*rr = reaction_rate[25];
}
else if (strcmp(r->name, "ATR27") == 0) {
*rr = reaction_rate[26];
}
else if (strcmp(r->name, "ATR28") == 0) {
*rr = reaction_rate[27];
}
else if (strcmp(r->name, "ATR29") == 0) {
*rr = reaction_rate[28];
}
else if (strcmp(r->name, "ATR30") == 0) {
*rr = reaction_rate[29];
}
else if (strcmp(r->name, "ATR31") == 0) {
*rr = reaction_rate[30];
}
else if (strcmp(r->name, "ATR32") == 0) {
*rr = reaction_rate[31];
}
else if (strcmp(r->name, "ATR33") == 0) {
*rr = reaction_rate[32];
}
else if (strcmp(r->name, "ATR34") == 0) {
*rr = reaction_rate[33];
}
else if (strcmp(r->name, "ATR35") == 0) {
*rr = reaction_rate[34];
}
else if (strcmp(r->name, "ATR36") == 0) {
*rr = reaction_rate[35];
}
else if (strcmp(r->name, "AIR1") == 0) {
*rr = reaction_rate[36];
}
else if (strcmp(r->name, "AIR2") == 0) {
*rr = reaction_rate[37];
}
else if (strcmp(r->name, "AIR3") == 0) {
*rr = reaction_rate[38];
}
else if (strcmp(r->name, "AIR4") == 0) {
*rr = reaction_rate[39];
}
else if (strcmp(r->name, "AIR5") == 0) {
*rr = reaction_rate[40];
}
else if (strcmp(r->name, "AIR6") == 0) {
*rr = reaction_rate[41];
}
else if (strcmp(r->name, "AIR7") == 0) {
*rr = reaction_rate[42];
}
else if (strcmp(r->name, "AIR8") == 0) {
*rr = reaction_rate[43];
}
else if (strcmp(r->name, "AIR9") == 0) {
*rr = reaction_rate[44];
}
else if (strcmp(r->name, "AIR10") == 0) {
*rr = reaction_rate[45];
}
else if (strcmp(r->name, "AIR11") == 0) {
*rr = reaction_rate[46];
}
else if (strcmp(r->name, "AIR12") == 0) {
*rr = reaction_rate[47];
}
else if (strcmp(r->name, "AIR13") == 0) {
*rr = reaction_rate[48];
}
else if (strcmp(r->name, "AIR14") == 0) {
*rr = reaction_rate[49];
}
else if (strcmp(r->name, "AIR15") == 0) {
*rr = reaction_rate[50];
}
else if (strcmp(r->name, "AIR16") == 0) {
*rr = reaction_rate[51];
}
else if (strcmp(r->name, "AIR17") == 0) {
*rr = reaction_rate[52];
}
else if (strcmp(r->name, "AIR18") == 0) {
*rr = reaction_rate[53];
}
else if (strcmp(r->name, "AIR19") == 0) {
*rr = reaction_rate[54];
}
else if (strcmp(r->name, "AIR20") == 0) {
*rr = reaction_rate[55];
}
else if (strcmp(r->name, "AIR21") == 0) {
*rr = reaction_rate[56];
}
else if (strcmp(r->name, "AIR22") == 0) {
*rr = reaction_rate[57];
}
else if (strcmp(r->name, "AIR23") == 0) {
*rr = reaction_rate[58];
}
else if (strcmp(r->name, "AIR24") == 0) {
*rr = reaction_rate[59];
}
else if (strcmp(r->name, "AIR25") == 0) {
*rr = reaction_rate[60];
}
else if (strcmp(r->name, "AIR26") == 0) {
*rr = reaction_rate[61];
}
else if (strcmp(r->name, "AIR27") == 0) {
*rr = reaction_rate[62];
}
else if (strcmp(r->name, "AIR28") == 0) {
*rr = reaction_rate[63];
}
else if (strcmp(r->name, "AIR29") == 0) {
*rr = reaction_rate[64];
}
else if (strcmp(r->name, "AIR30") == 0) {
*rr = reaction_rate[65];
}
else if (strcmp(r->name, "AIR31") == 0) {
*rr = reaction_rate[66];
}
else if (strcmp(r->name, "AIR32") == 0) {
*rr = reaction_rate[67];
}
else if (strcmp(r->name, "AIR33") == 0) {
*rr = reaction_rate[68];
}
else if (strcmp(r->name, "AIR34") == 0) {
*rr = reaction_rate[69];
}
else if (strcmp(r->name, "AIR35") == 0) {
*rr = reaction_rate[70];
}
else if (strcmp(r->name, "AIR36") == 0) {
*rr = reaction_rate[71];
}
else if (strcmp(r->name, "AIR37") == 0) {
*rr = reaction_rate[72];
}
else if (strcmp(r->name, "AIR38") == 0) {
*rr = reaction_rate[73];
}
else if (strcmp(r->name, "AIR39") == 0) {
*rr = reaction_rate[74];
}
else if (strcmp(r->name, "AIR40") == 0) {
*rr = reaction_rate[75];
}
else if (strcmp(r->name, "AIR41") == 0) {
*rr = reaction_rate[76];
}
else if (strcmp(r->name, "AIR42") == 0) {
*rr = reaction_rate[77];
}
else {
*rr = 0;
}
}

And here is my python code:


from tkinter import END
from IPython import get_ipython
import numpy as np
import cantera as ct
# import os
# import sys
# import time

# get_ipython().magic('reset -sf')

def calculate_reaction_rate_ATR(temperature, pressure, concentration):
gas = ct.Solution('methane_pox_on_pt.yaml','gas')
surf = ct.Interface('methane_pox_on_pt.yaml', 'Pt_surf',[gas])

surf.TP = temperature, pressure
# gas = surf.adjacent['gas']
gas.TPY = temperature, pressure, concentration

surf.advance_coverages(0.01)
# Get reaction rates
reaction_rates = surf.net_rates_of_progress
# def write_reaction_rates_to_file(reaction_rates, filename):
# with open(filename, 'w') as file:
# for rate in reaction_rates:
# file.write(str(rate) + '\n')
return reaction_rates


def calculate_reaction_rate_AIR(temperature, pressure, concentration):
gas = ct.Solution('sm_Ni.yaml','gas')
surf = ct.Interface('sm_Ni.yaml', 'surf',[gas])

surf.TP = temperature, pressure
# gas = surf.adjacent['gas']
gas.TPY = temperature, pressure, concentration

surf.advance_coverages(0.01)
# Get reaction rates
reaction_rates = surf.net_rates_of_progress
return reaction_rates

def calculate_reaction_rate_Other(temperature, pressure, concentration):
reaction_rates = [0]
return reaction_rates

with open("fluent_data.txt", "r") as f:
f_list = [float(i) for line in f for i in line.split(',') if i.strip()]
species_concentrations = f_list[0:7]
temperature = f_list[7]
pressure = f_list[8]
f.close()

test_array = [0,0,0,0,0,0,0]
if species_concentrations != test_array:
reaction_rate_ATR = calculate_reaction_rate_ATR(temperature, pressure, species_concentrations)
reaction_rate_AIR = calculate_reaction_rate_AIR(temperature, pressure, species_concentrations)
else:
reaction_rate_ATR = [0.5] * 36
reaction_rate_AIR = [0.5] * 42

with open("reaction_rate.txt", "w+") as f:
for rr in reaction_rate_ATR:
f.write(str(rr) + "\n")
for rr in reaction_rate_AIR:
f.write(str(rr) + "\n")
f.close()


When I compile the udf, the error is below:
PermissionError: [Errno 13] Permission denied: 'reaction_rate.txt'.

I hope I described the issue clearly, can anyone help me with this error?

Thank you
yifan998 is offline   Reply With Quote

 

Tags
python script, surface reaction udf, udf and programming


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
UDF Error: Error code 126 cilliant FLUENT 0 June 30, 2023 06:52
[swak4Foam] swak4foam openfoam 7 installation problem Andrea23 OpenFOAM Community Contributions 1 February 17, 2020 18:11
Compiling dynamicTopoFvMesh for OpenFOAM 2.1.x Saxwax OpenFOAM Installation 25 November 29, 2013 05:34
Ansys Fluent 13.0 UDF compilation problem in Window XP (32 bit) Yogini Fluent UDF and Scheme Programming 7 October 3, 2012 07:24
Installation OF1.5-dev ttdtud OpenFOAM Installation 46 May 5, 2009 02:32


All times are GMT -4. The time now is 03:51.