15 extern "C" void CALCULUS_OF_INJECTION_RATE(
int INITIAL,
double*SOP,
double*MFI,
double*SOI,
double*EOI,
double speed,
16 int CAI,
double PCR,
double*A,
double*B,
double*C,
double*D,
double*injection_rate,
double*CAD_injection_rate);
227 inline void CALCULUS_OF_INJECTION_RATE(
int INITIAL,
double *SOP,
double *MFI,
double *SOI,
double *EOI,
double speed,
228 int CAI,
double PCR,
double *A,
double *B,
double *C,
double *D,
double *injection_rate,
double *CAD_injection_rate)
234 injection_rate[0] = 0.;
235 for(k = 1; k < CAI; k++) {
236 injection_rate[k] = 0.;
239 double a = (A[1] * PCR + A[0]) * 1e3;
240 double b = (B[1] * PCR + B[0]) * 1e3;
241 double c = (C[1] * PCR + C[0]) * 1e3;
245 double mftopemini = 1. / 2. * ((b / a) + (b / -c)) * b;
248 for(
int j = 0; j < INITIAL; j++) {
250 SOI[j] = SOP[j] + (D[1] * PCR + D[0]) * (6 * speed);
254 if(MFI[j] >= mftopemini) {
255 double DLM = (MFI[j] - mftopemini) / b;
256 for(
int k = 0; k < CAI; k++) {
258 time = (CAD_injection_rate[k] - SOI[j]) / (6 * speed);
260 if(time > 0. && time <= b / a)
261 injection_rate[k] = time * a;
262 else if(time > b / a && time <= b / a + DLM)
263 injection_rate[k] = b;
264 else if(time > b / a + DLM && time <= b / a + DLM + b / -c)
265 injection_rate[k] = b + ((time - b / a - DLM) * c);
268 EOI[j] = SOI[j] + (b / a + DLM + b / -c) * 6 * speed;
270 double levmaxi = sqrt((2. * MFI[j]) / (1. / a + 1. / -c));
271 double DTL = levmaxi / a;
272 double DTB = levmaxi / -c;
273 for(
int k = 0; k < CAI; k++) {
275 time = (CAD_injection_rate[k] - SOI[j]) / (6 * speed);
276 if(time > 0. && time <= DTL)
277 injection_rate[k] = time * a;
278 else if(time > DTL && time <= DTL + DTB)
279 injection_rate[k] = levmaxi + (time - DTL) * c;
282 EOI[j] = SOI[j] + (DTL + DTB) * 6 * speed;
287 for(
int k = 0; k < CAI; k++) {
288 injection_rate[k] /= 1000.;