From dfebbad5b7267d8d78737018809864ac04cd2cba Mon Sep 17 00:00:00 2001 From: Erik Schnaubelt <erik.schnaubelt@cern.ch> Date: Wed, 26 Feb 2025 10:41:55 +0100 Subject: [PATCH] add Pancake benchmark Jc fit, use with caution (not tested yet, and no reference) --- all_material_functions.csv | 5 +- .../c/general/CFUN_HTS_JcFit_Benchmark_v1.c | 91 +++++++++++++++++++ 2 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 models/c/general/CFUN_HTS_JcFit_Benchmark_v1.c diff --git a/all_material_functions.csv b/all_material_functions.csv index 3fd1e94..ac44428 100644 --- a/all_material_functions.csv +++ b/all_material_functions.csv @@ -74,8 +74,8 @@ 72,CFUN_kHast_v1,TRUE,CFUN_kHast_v1,TRUE,CFUN_kHast_v1,Tim Mulder,T,1,"np.geomspace(0.1,1000,100)",,,,,,,,,,, 73,CFUN_kHe_v1,FALSE,,FALSE,,,"T, Tref?? Legacy function, I don t think anybody uses it.",2,,,,,,,,,,,, 74,CFUN_kIn_v0,TRUE,CFUN_kIn_v0,TRUE,CFUN_kIn_v0,Tim Mulder,"T needs cleaning, why v0?, TINY T RANGE PLEASE FIX",1,"np.geomspace(15,300,100)",,,,,,,,,,, -75,CFUN_kKapton_v1,TRUE,CFUN_kKapton_v1,TRUE,CFUN_kKapton_v1,Tim Mulder,T,1,"np.geomspace(0.1,1000,100)",,,,,,,,,,, -76,CFUN_kKapton_v2,TRUE,CFUN_kKapton_v2,TRUE,CFUN_kKapton_v2,Tim Mulder,T,1,"np.geomspace(0.1,1000,100)",,,,,,,,,,, +75,CFUN_kKapton_v1,TRUE,CFUN_kKapton_v1,TRUE,CFUN_kKapton_v1,Tim Mulder,T,1,"np.geomspace(0.1,1000,10000)",,,,,,,,,,, +76,CFUN_kKapton_v2,TRUE,CFUN_kKapton_v2,TRUE,CFUN_kKapton_v2,Tim Mulder,T,1,"np.geomspace(0.1,1000,10000)",,,,,,,,,,, 77,CFUN_kSteel_v1,TRUE,CFUN_kSteel_v1,TRUE,CFUN_kSteel_v1,Tim Mulder,T,1,"np.geomspace(0.1,1000,100)",,,,,,,,,,, 78,CFUN_kSteel_v2,TRUE,CFUN_kSteel_v1,FALSE,,,T,1,,,,,,,,,,,, 79,CFUN_kStycast_v1,TRUE,CFUN_kStycast_v1,TRUE,CFUN_kStycast_v1,Tim Mulder,T,1,"np.geomspace(0.1,1000,100)",,,,,,,,,,, @@ -98,3 +98,4 @@ 96,CFUN_rhoHast_v2,TRUE,CFUN_rhoHast_v1,FALSE,,,T,1,,,,,,,,,,,, 97,CFUN_rhoIn_v0,TRUE,CFUN_rhoIn_v0,TRUE,CFUN_rhoIn_v0,Tim Mulder,"T, why v0?, TINY T RANGE",1,"np.geomspace(15,300,100)",,,,,,,,,,, 98,CFUN_rhoSS_v1,TRUE,CFUN_rhoSS_v1,TRUE,CFUN_rhoSS_v1,Tim Mulder,T,1,"np.geomspace(0.1,1000,100)",,,,,,,,,,, +99,CFUN_HTS_JcFit_Benchmark_v1,FALSE,,FALSE,,,"B, dev version without testing for now",1,,,,,,,,,,,, \ No newline at end of file diff --git a/models/c/general/CFUN_HTS_JcFit_Benchmark_v1.c b/models/c/general/CFUN_HTS_JcFit_Benchmark_v1.c new file mode 100644 index 0000000..39beb8a --- /dev/null +++ b/models/c/general/CFUN_HTS_JcFit_Benchmark_v1.c @@ -0,0 +1,91 @@ +#include <math.h> +#include <float.h> +#include <stdlib.h> +#include <string.h> +#include <stdbool.h> +#ifdef _MSC_VER +#define EXPORT __declspec(dllexport) +#else +#define EXPORT +#endif + +#define C0 2.5527e+12 // original value from Davide 6.35E+10 divided by fraction of YBCO, which is 0.0249 // A T / m^2 +#define Birr0 274.84 // T +#define Tirr0 91.317 // K +#define m 0.7008 +#define p 0.75 +#define q 5.69 +#define nu 0.3323 +#define T 4.2 // K +#define T_red 0.045993627 + +static const char *error = NULL; + +EXPORT int init(const char *str) { + return 1; +} + +EXPORT const char * getLastError() { + return error; +} + +EXPORT const char* return_test_yaml() { + return ""; +} + +double Bc(double T_red_value) { + return ((T_red_value > 0 && T_red_value < 1) * (1 - pow(T_red_value, nu)) + + (T_red_value <= 0) * 1) * Birr0 + + (T_red_value >= 1) * 0.001; +} + +double Jc(double B, double T_red_value) { + double Bc_Tred = Bc(T_red_value); + + if (T_red_value < 1 && B < Bc_Tred) { + double factor1 = (1 - pow(T_red_value, nu)) * (1 - pow(T_red_value, m)); + double factor2 = pow((p + q), (p + q)) / (pow(p, p) * pow(q, q)); + double factor3 = pow(B / Bc_Tred, p) * pow(1 - (B / Bc_Tred), q); + + return (C0 / B) * factor1 * factor2 * factor3; + } else { + return pow(10, -3); + } +} + +EXPORT int eval(const char *func, + int nArgs, + const double **inReal, + const double **inImag, + int blockSize, + double *outReal, + double *outImag) { + + if (nArgs != 1) { + // Bnorm_IN + error = "one argument expected"; + return 0; + } + + + // Parfor loop + for (int i = 0; i < blockSize; i++) { + + double Bnorm_IN = inReal[0][i]; + + outReal[i] = Jc(Bnorm_IN, T_red); + + //Consistency check: output + if(outReal[i] != outReal[i]){ + error = "Output is nan"; + return 0; + } + + if (fabs(outReal[i])>DBL_MAX){ + error = "Output is inf"; + return 0; + } + } + + return 1; +} \ No newline at end of file -- GitLab