// // sample script to create volumetric mesh from // multiple levelsets of a binary segmented head image. // Arguments : void // Return Type : void // static void c_meshing() { double fid; static double face[362368]; static double elem[565750]; static double node[100564]; static int idx[113150]; int k; boolean_T p; static int idx0[113150]; int i; int i2; int j; int pEnd; int nb; int b_k; int qEnd; int kEnd; emxArray_real_T *b; double x; int32_T exitg1; int exponent; emxArray_real_T *b_b; // create volumetric tetrahedral mesh from the two-layer 3D images // head surface element size bound b_fprintf(); TCHAR pwd[MAX_PATH]; GetCurrentDirectory(MAX_PATH,pwd); std::string str= pwd; std::string const command=char(34)+str+"\\bin\\cgalmesh.exe" +char(34)+" pre_cgalmesh.inr post_cgalmesh.mesh 30 4 0.5 3 100 1648335518"; system(command.c_str()); b_readmedit(node, elem, face); // node=node*double(vol(1,1,1)); for (k = 0; k < 113150; k++) { idx[k] = k + 1; } for (k = 0; k < 113150; k += 2) { if ((elem[452600 + k] <= elem[k + 452601]) || rtIsNaN(elem[k + 452601])) { p = true; } else { p = false; } if (p) { } else { idx[k] = k + 2; idx[k + 1] = k + 1; } } for (i = 0; i < 113150; i++) { idx0[i] = 1; } i = 2; while (i < 113150) { i2 = i << 1; j = 1; for (pEnd = 1 + i; pEnd < 113151; pEnd = qEnd + i) { nb = j; b_k = pEnd - 1; qEnd = j + i2; if (qEnd > 113151) { qEnd = 113151; } k = 0; kEnd = qEnd - j; while (k + 1 <= kEnd) { if ((elem[idx[nb - 1] + 452599] <= elem[idx[b_k] + 452599]) || rtIsNaN (elem[idx[b_k] + 452599])) { p = true; } else { p = false; } if (p) { idx0[k] = idx[nb - 1]; nb++; if (nb == pEnd) { while (b_k + 1 < qEnd) { k++; idx0[k] = idx[b_k]; b_k++; } } } else { idx0[k] = idx[b_k]; b_k++; if (b_k + 1 == qEnd) { while (nb < pEnd) { k++; idx0[k] = idx[nb - 1]; nb++; } } } k++; } for (k = 0; k + 1 <= kEnd; k++) { idx[(j + k) - 1] = idx0[k]; } j = qEnd; } i = i2; } emxInit_real_T(&b, 1); i2 = b->size[0]; b->size[0] = 113150; emxEnsureCapacity((emxArray__common *)b, i2, (int)sizeof(double)); for (k = 0; k < 113150; k++) { b->data[k] = elem[idx[k] + 452599]; } k = 0; while ((k + 1 <= 113150) && rtIsInf(b->data[k]) && (b->data[k] < 0.0)) { k++; } b_k = k; k = 113150; while ((k >= 1) && rtIsNaN(b->data[k - 1])) { k--; } pEnd = 113150 - k; while ((k >= 1) && rtIsInf(b->data[k - 1]) && (b->data[k - 1] > 0.0)) { k--; } i2 = 113150 - (k + pEnd); nb = -1; if (b_k > 0) { nb = 0; } i = (b_k + k) - b_k; while (b_k + 1 <= i) { x = b->data[b_k]; do { exitg1 = 0; b_k++; if (b_k + 1 > i) { exitg1 = 1; } else { fid = fabs(x / 2.0); if ((!rtIsInf(fid)) && (!rtIsNaN(fid))) { if (fid <= 2.2250738585072014E-308) { fid = 4.94065645841247E-324; } else { frexp(fid, &exponent); fid = ldexp(1.0, exponent - 53); } } else { fid = rtNaN; } if ((fabs(x - b->data[b_k]) < fid) || (rtIsInf(b->data[b_k]) && rtIsInf (x) && ((b->data[b_k] > 0.0) == (x > 0.0)))) { p = true; } else { p = false; } if (!p) { exitg1 = 1; } } } while (exitg1 == 0); nb++; b->data[nb] = x; } if (i2 > 0) { nb++; b->data[nb] = b->data[i]; } b_k = i + i2; for (j = 1; j <= pEnd; j++) { nb++; b->data[nb] = b->data[(b_k + j) - 1]; } if (1 > nb + 1) { i = -1; } else { i = nb; } emxInit_real_T(&b_b, 1); i2 = b_b->size[0]; b_b->size[0] = i + 1; emxEnsureCapacity((emxArray__common *)b_b, i2, (int)sizeof(double)); for (i2 = 0; i2 <= i; i2++) { b_b->data[i2] = b->data[i2]; } i2 = b->size[0]; b->size[0] = b_b->size[0]; emxEnsureCapacity((emxArray__common *)b, i2, (int)sizeof(double)); i = b_b->size[0]; for (i2 = 0; i2 < i; i2++) { b->data[i2] = b_b->data[i2]; } emxFree_real_T(&b_b); c_fprintf((double)b->size[0]); d_fprintf(); emxFree_real_T(&b); }
/* * % assign structure fields to variables * inputparams - originally simulink inputs * Arguments : const struct0_T *inputparams * const struct1_T *testparams * const struct2_T *fahrparams * const struct3_T *tst_array_struct * const struct4_T *fzg_array_struct * emxArray_real_T *engKinOptVec * emxArray_real_T *batEngDltOptVec * emxArray_real_T *fulEngDltOptVec * emxArray_real_T *staVec * emxArray_real_T *psiEngKinOptVec * double *fulEngOpt * boolean_T *resVld * Return Type : void */ void clcDP_port(const struct0_T *inputparams, const struct1_T *testparams, const struct2_T *fahrparams, const struct3_T *tst_array_struct, const struct4_T *fzg_array_struct, emxArray_real_T *engKinOptVec, emxArray_real_T *batEngDltOptVec, emxArray_real_T *fulEngDltOptVec, emxArray_real_T *staVec, emxArray_real_T *psiEngKinOptVec, double *fulEngOpt, boolean_T *resVld) { emxArray_real_T *optPreInxTn3; emxArray_real_T *batFrcOptTn3; emxArray_real_T *fulEngOptTn3; emxArray_real_T *cos2goActMat; emxInit_real_T(&optPreInxTn3, 3); emxInit_real_T(&batFrcOptTn3, 3); emxInit_real_T(&fulEngOptTn3, 3); b_emxInit_real_T(&cos2goActMat, 2); /* --- Ausgangsgrößen: */ /* Vektor - Trajektorie der optimalen kin. Energien */ /* Vektor - optimale Batterieenergieänderung */ /* Vektor - optimale Kraftstoffenergieänderung */ /* Vektor - Trajektorie des optimalen Antriebsstrangzustands */ /* Vektor - costate für kinetische Energie */ /* Skalar - optimale Kraftstoffenergie */ /* testparams - originally tstDat800 structure */ /* % Calculating optimal predecessors with DP + PMP */ b_fprintf(); /* --- Ausgangsgrößen: */ /* Tensor 3. Stufe für opt. Vorgängerkoordinaten */ /* Tensor 3. Stufe der Batteriekraft */ /* Tensor 3. Stufe für die Kraftstoffenergie */ /* Matrix der optimalen Kosten der Hamiltonfunktion */ /* FUNKTION */ /* --- Eingangsgrößen: */ /* Skalar - Flag für Ausgabe in das Commandwindow */ /* Skalar für die Wegschrittweite in m */ /* Skalar der Batteriediskretisierung in J */ /* Skalar für die Batterieenergie am Beginn in Ws */ /* Skalar für die Nebenverbrauchlast in W */ /* Skalar für den Co-State der Batterieenergie */ /* Skalar für den Co-State der Zeit */ /* Skalar für die Strafkosten beim Zustandswechsel */ /* Skalar für Anfangsindex in den Eingangsdaten */ /* Skalar für Endindex in den Eingangsdaten */ /* Skalar für den Index der Anfangsgeschwindigkeit */ /* Skalar für die max. Anz. an engKin-Stützstellen */ /* Skalar für die max. Anzahl an Zustandsstützstellen */ /* Skalar für die max. Anzahl an Wegstützstellen */ /* Skalar für den Startzustand des Antriebsstrangs */ /* Vektor der Anzahl der kinetischen Energien */ /* Vektor der Steigungen in rad */ /* Matrix der kinetischen Energien in J */ /* struct der Fahrzeugparameter - NUR SKALARS */ /* struct der Fahrzeugparameter - NUR ARRAYS */ clcDP_olyHyb_port(inputparams->disFlg, inputparams->wayStp, inputparams->batEngStp, inputparams->batEngBeg, inputparams->batPwrAux, inputparams->psiBatEng, inputparams->psiTim, inputparams->staChgPenCosVal, inputparams->wayInxBeg, inputparams->wayInxEnd, inputparams->engKinBegInx, testparams->engKinNum, testparams->staNum, testparams->wayNum, inputparams->staBeg, tst_array_struct->engKinNumVec_wayInx, tst_array_struct->slpVec_wayInx, tst_array_struct->engKinMat_engKinInx_wayInx, fahrparams, fzg_array_struct, optPreInxTn3, batFrcOptTn3, fulEngOptTn3, cos2goActMat); // print out some outputs int m; // optPreInxTn3 for (m = 0; m < 52800; m++) printf("optPreInxTn3 data[%d]: %4.3f\n", m, optPreInxTn3->data[m]); printf("\n\noptPreInxTn3 dims: %d\n", optPreInxTn3->numDimensions); for (m = 0; m < optPreInxTn3->numDimensions; m++) printf("optPreInxTn3 size[%d]: %d\n", m, optPreInxTn3->size[m]); printf("optPreInxTn3 allocatedSize: %d\n:", optPreInxTn3->allocatedSize); printf("optPreInxTn3.canFreeData: %d\n", optPreInxTn3->canFreeData); // batFrcOptTn3 //for (m = 0; m < 52800; m++) // printf("batFrcOptTn3 data[%d]: %4.3f\n", m, batFrcOptTn3->data[m]); //printf("\n\batFrcOptTn3 dims: %d\n", batFrcOptTn3->numDimensions); for (m = 0; m < batFrcOptTn3->numDimensions; m++) printf("batFrcOptTn3 size[%d]: %d\n", m, batFrcOptTn3->size[m]); printf("batFrcOptTn3 allocatedSize: %d\n:", batFrcOptTn3->allocatedSize); printf("batFrcOptTn3.canFreeData: %d\n", batFrcOptTn3->canFreeData); //// fulEngOptTn3 //for (m = 0; m < fulEngOptTn3->allocatedSize; m++) // printf("fulEngOptTn3 data[%d]: %4.3f\n", m, fulEngOptTn3->data[m]); //printf("\nfulEngOptTn3 dims: %d\n", fulEngOptTn3->numDimensions); //for (m = 0; m < fulEngOptTn3->numDimensions; m++) // printf("fulEngOptTn3 size[%d]: %d\n", m, fulEngOptTn3->size[m]); //printf("fulEngOptTn3 allocateSize: %d\n", fulEngOptTn3->allocatedSize); //printf("fulEngOptTn3.canFreeData: %d\n", fulEngOptTn3->canFreeData); //// cos2goActMat //for (m = 0; m < cos2goActMat->allocatedSize; m++) // printf("cos2goActMat data[%d]: %4.3f\n", m, cos2goActMat->data[m]); //printf("cos2goActMat dims: %d\n", cos2goActMat->numDimensions); //for (m = 0; m < cos2goActMat->numDimensions; m++) // printf("cos2goActMat size[%d]: %d\n", m, cos2goActMat->size[m]); //printf("cos2goActMat allocateSize: %d\n", cos2goActMat->allocatedSize); //printf("cos2goActMat.canFreeData: %d\n", cos2goActMat->canFreeData); /* % Calculating optimal trajectories for result of DP + PMP */ /* Vektor - Trajektorie der optimalen kin. Energien */ /* Vektor - optimale Batterieenergieänderung */ /* Vektor - optimale Kraftstoffenergieänderung */ /* Vektor - Trajektorie des optimalen Antriebsstrangzustands */ /* Vektor - costate für kinetische Energie */ /* Skalar - optimale Kraftstoffenergie */ /* FUNKTION */ /* Flag, ob Zielzustand genutzt werden muss */ /* Skalar für die Wegschrittweite in m */ /* Skalar für die max. Anzahl an Wegstützstellen */ /* Skalar für Anfangsindex in den Eingangsdaten */ /* Skalar für Endindex in den Eingangsdaten */ /* Skalar für den finalen Zustand */ /* Skalar für die max. Anz. an engKin-Stützstellen */ /* Skalar für Zielindex der kinetischen Energie */ /* Skalar für die max. Anzahl an Zustandsstützstellen */ /* Vektor der Anzahl der kinetischen Energien */ /* Matrix der kinetischen Energien in J */ /* Tensor 3. Stufe für opt. Vorgängerkoordinaten */ /* Tensor 3. Stufe der Batteriekraft */ /* Tensor 3. Stufe für die Kraftstoffenergie */ /* Matrix der optimalen Kosten der Hamiltonfunktion */ // note: some portion of clcOptTrj_port is causing a memory overflow and is currently // not working as a direct MATLAB port. Need to look into function to see what // is going wrong // clcOptTrj_port(inputparams->wayStp, testparams->wayNum, inputparams->wayInxBeg, // inputparams->wayInxEnd, testparams->engKinNum, // tst_array_struct->engKinNumVec_wayInx, // tst_array_struct->engKinMat_engKinInx_wayInx, optPreInxTn3, // batFrcOptTn3, fulEngOptTn3, cos2goActMat, engKinOptVec, // batEngDltOptVec, fulEngDltOptVec, staVec, psiEngKinOptVec, // fulEngOpt); /* engKinOptVec=0; */ /* batEngDltOptVec=0; */ /* fulEngDltOptVec=0; */ /* staVec=0; */ /* psiEngKinOptVec=0; */ /* fulEngOpt=0; */ // *resVld = true; f_fprintf(); emxFree_real_T(&cos2goActMat); emxFree_real_T(&fulEngOptTn3); emxFree_real_T(&batFrcOptTn3); emxFree_real_T(&optPreInxTn3); }
/* * % assign structure fields to variables * inputparams - originally simulink inputs * Arguments : const struct0_T *inputparams * const struct1_T *testparams * const struct2_T *fahrparams * const struct3_T *tst_array_struct * const struct4_T *fzg_array_struct * emxArray_real_T *engKinOptVec * emxArray_real_T *batEngDltOptVec * emxArray_real_T *fulEngDltOptVec * emxArray_real_T *staVec * emxArray_real_T *psiEngKinOptVec * double *fulEngOpt * boolean_T *resVld * Return Type : void */ void clcDP_port(const struct0_T *inputparams, const struct1_T *testparams, const struct2_T *fahrparams, const struct3_T *tst_array_struct, const struct4_T *fzg_array_struct, emxArray_real_T *engKinOptVec, emxArray_real_T *batEngDltOptVec, emxArray_real_T *fulEngDltOptVec, emxArray_real_T *staVec, emxArray_real_T *psiEngKinOptVec, double *fulEngOpt, boolean_T *resVld) { emxArray_real_T *optPreInxTn3; emxArray_real_T *batFrcOptTn3; emxArray_real_T *fulEngOptTn3; emxArray_real_T *cos2goActMat; emxInit_real_T(&optPreInxTn3, 3); emxInit_real_T(&batFrcOptTn3, 3); emxInit_real_T(&fulEngOptTn3, 3); b_emxInit_real_T(&cos2goActMat, 2); /* --- Ausgangsgrößen: */ /* Vektor - Trajektorie der optimalen kin. Energien */ /* Vektor - optimale Batterieenergieänderung */ /* Vektor - optimale Kraftstoffenergieänderung */ /* Vektor - Trajektorie des optimalen Antriebsstrangzustands */ /* Vektor - costate für kinetische Energie */ /* Skalar - optimale Kraftstoffenergie */ /* testparams - originally tstDat800 structure */ /* % Calculating optimal predecessors with DP + PMP */ b_fprintf(); /* --- Ausgangsgrößen: */ /* Tensor 3. Stufe für opt. Vorgängerkoordinaten */ /* Tensor 3. Stufe der Batteriekraft */ /* Tensor 3. Stufe für die Kraftstoffenergie */ /* Matrix der optimalen Kosten der Hamiltonfunktion */ /* FUNKTION */ /* --- Eingangsgrößen: */ /* Skalar - Flag für Ausgabe in das Commandwindow */ /* Skalar für die Wegschrittweite in m */ /* Skalar der Batteriediskretisierung in J */ /* Skalar für die Batterieenergie am Beginn in Ws */ /* Skalar für die Nebenverbrauchlast in W */ /* Skalar für den Co-State der Batterieenergie */ /* Skalar für den Co-State der Zeit */ /* Skalar für die Strafkosten beim Zustandswechsel */ /* Skalar für Anfangsindex in den Eingangsdaten */ /* Skalar für Endindex in den Eingangsdaten */ /* Skalar für den Index der Anfangsgeschwindigkeit */ /* Skalar für die max. Anz. an engKin-Stützstellen */ /* Skalar für die max. Anzahl an Zustandsstützstellen */ /* Skalar für die max. Anzahl an Wegstützstellen */ /* Skalar für den Startzustand des Antriebsstrangs */ /* Vektor der Anzahl der kinetischen Energien */ /* Vektor der Steigungen in rad */ /* Matrix der kinetischen Energien in J */ /* struct der Fahrzeugparameter - NUR SKALARS */ /* struct der Fahrzeugparameter - NUR ARRAYS */ clcDP_olyHyb_port(inputparams->disFlg, inputparams->wayStp, inputparams->batEngStp, inputparams->batEngBeg, inputparams->batPwrAux, inputparams->psiBatEng, inputparams->psiTim, inputparams->staChgPenCosVal, inputparams->wayInxBeg, inputparams->wayInxEnd, inputparams->engKinBegInx, testparams->engKinNum, testparams->staNum, testparams->wayNum, inputparams->staBeg, tst_array_struct->engKinNumVec_wayInx, tst_array_struct->slpVec_wayInx, tst_array_struct->engKinMat_engKinInx_wayInx, fahrparams, fzg_array_struct, optPreInxTn3, batFrcOptTn3, fulEngOptTn3, cos2goActMat); /* % Calculating optimal trajectories for result of DP + PMP */ /* Vektor - Trajektorie der optimalen kin. Energien */ /* Vektor - optimale Batterieenergieänderung */ /* Vektor - optimale Kraftstoffenergieänderung */ /* Vektor - Trajektorie des optimalen Antriebsstrangzustands */ /* Vektor - costate für kinetische Energie */ /* Skalar - optimale Kraftstoffenergie */ /* FUNKTION */ /* Flag, ob Zielzustand genutzt werden muss */ /* Skalar für die Wegschrittweite in m */ /* Skalar für die max. Anzahl an Wegstützstellen */ /* Skalar für Anfangsindex in den Eingangsdaten */ /* Skalar für Endindex in den Eingangsdaten */ /* Skalar für den finalen Zustand */ /* Skalar für die max. Anz. an engKin-Stützstellen */ /* Skalar für Zielindex der kinetischen Energie */ /* Skalar für die max. Anzahl an Zustandsstützstellen */ /* Vektor der Anzahl der kinetischen Energien */ /* Matrix der kinetischen Energien in J */ /* Tensor 3. Stufe für opt. Vorgängerkoordinaten */ /* Tensor 3. Stufe der Batteriekraft */ /* Tensor 3. Stufe für die Kraftstoffenergie */ /* Matrix der optimalen Kosten der Hamiltonfunktion */ clcOptTrj_port(inputparams->wayStp, testparams->wayNum, inputparams->wayInxBeg, inputparams->wayInxEnd, testparams->engKinNum, tst_array_struct->engKinNumVec_wayInx, tst_array_struct->engKinMat_engKinInx_wayInx, optPreInxTn3, batFrcOptTn3, fulEngOptTn3, cos2goActMat, engKinOptVec, batEngDltOptVec, fulEngDltOptVec, staVec, psiEngKinOptVec, fulEngOpt); /* engKinOptVec=0; */ /* batEngDltOptVec=0; */ /* fulEngDltOptVec=0; */ /* staVec=0; */ /* psiEngKinOptVec=0; */ /* fulEngOpt=0; */ *resVld = true; f_fprintf(); emxFree_real_T(&cos2goActMat); emxFree_real_T(&fulEngOptTn3); emxFree_real_T(&batFrcOptTn3); emxFree_real_T(&optPreInxTn3); }