#include #include #include #include #include #include "fkn.h" #include "fknDlg.h" #include "complex.h" #include "spars.h" #include "mesh.h" #include "FemmeDocCore.h" void old_main(void *inptr) { CFknDlg *TheView; CFemmeDocCore Doc; char PathName[256]; CFileDialog *fname_dia; char outstr[1024]; int i; TheView=(CFknDlg *) inptr; if (__argc<2){ fname_dia=new CFileDialog( TRUE, "fem | * ", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "FEMM datafile (*.fem) | *.fem; *.FEM | All Files (*.*) | *.*||", NULL); if(fname_dia->DoModal()==IDCANCEL){ delete[] fname_dia; MsgBox("No file name!"); return; } CString fname=fname_dia->GetPathName(); fname=fname.Left(fname.GetLength()-4); strcpy(PathName,fname); delete[] fname_dia; } else strcpy(PathName,__argv[1]); Doc.PathName=PathName; Doc.TheView=TheView; if (Doc.OnOpenDocument()!=TRUE){ MsgBox("problem loading .fem file"); exit(7); } // load mesh if (Doc.LoadMesh()!=TRUE){ if (Doc.PrevSoln.GetLength()>0) MsgBox("problem loading mesh from previous solution"); else MsgBox("problem loading mesh"); exit(2); } // label the dialog to report which problem is being solved char PaneText[256]; char *ProbName; ProbName=PathName; for(i=0;i< (int) strlen(PathName);i++) if(PathName[i]=='\\') ProbName=PathName+i; if (strlen(PathName)>0){ ProbName++; sprintf(PaneText,"%s - fkern",ProbName); } while(!IsWindow(TheView->m_hWnd)) Sleep(1); TheView->SetWindowText(PaneText); // renumber using Cuthill-McKee // (renumbering not needed if using previous solution mesh) if (Doc.PrevType==0) { TheView->SetDlgItemText(IDC_STATUSWINDOW,"renumbering nodes"); if (Doc.Cuthill()!=TRUE){ MsgBox("problem renumbering node points"); exit(3); } } TheView->SetDlgItemText(IDC_STATUSWINDOW,"solving..."); sprintf(outstr,"Problem Statistics:\n%i nodes\n%i elements\nPrecision: %3.2e\n", Doc.NumNodes,Doc.NumEls,Doc.Precision); TheView->SetDlgItemText(IDC_PROBSTATS,outstr); double mr=(8.*((double) Doc.NumNodes)*((double) Doc.BandWidth))/ 1.e06; if(Doc.Frequency==0){ CBigLinProb L; L.TheView=TheView; L.Precision=Doc.Precision; // initialize the problem, allocating the space required to solve it. if (L.Create(Doc.NumNodes,Doc.BandWidth)==FALSE){ MsgBox("couldn't allocate enough space for matrices"); exit(4); } // Create element matrices and solve the problem; if (Doc.ProblemType==FALSE){ if (Doc.Static2D(L)==FALSE){ MsgBox("Couldn't solve the problem"); exit(5); } TheView->SetDlgItemText(IDC_STATUSWINDOW,"Static 2-D problem solved"); } else{ if (Doc.StaticAxisymmetric(L)==FALSE){ MsgBox("Couldn't solve the problem"); exit(5); } TheView->SetDlgItemText(IDC_STATUSWINDOW,"Static axisymmetric problem solved"); } if (Doc.WriteStatic2D(L)==FALSE) { MsgBox("couldn't write results to disk"); exit(6); } TheView->SetDlgItemText(IDC_STATUSWINDOW,"results written to disk"); } else{ CBigComplexLinProb L; L.TheView=TheView; L.Precision=Doc.Precision; // initialize the problem, allocating the space required to solve it. if (L.Create(Doc.NumNodes+Doc.NumCircProps,Doc.BandWidth,Doc.NumNodes)==FALSE){ MsgBox("couldn't allocate enough space for matrices"); exit(4); } // Create element matrices and solve the problem; if (Doc.ProblemType==FALSE){ if (Doc.Harmonic2D(L)==FALSE){ MsgBox("Couldn't solve the problem"); exit(5); } TheView->SetDlgItemText(IDC_STATUSWINDOW,"Harmonic 2-D problem solved"); } else{ if (Doc.HarmonicAxisymmetric(L)==FALSE){ MsgBox("Couldn't solve the problem"); exit(5); } TheView->SetDlgItemText(IDC_STATUSWINDOW,"Harmonic axisymmetric problem solved"); } if (Doc.WriteHarmonic2D(L)==FALSE) { MsgBox("couldn't write results to disk"); exit(6); } TheView->SetDlgItemText(IDC_STATUSWINDOW,"results written to disk."); } Doc.CleanUp(); exit(0); }