Beispiel #1
0
        public static double noRefF(int N, SimController sim, List <int> plotChoice, MagnetizationByPosition MsByPos, string calccondition)
        {
            //N--;
            string fmt = "000000.##";
            //string file = sim.dir + 'f' + N.ToString(fmt) + ".ovf";
            string file = sim.dir + 'f' + N.ToString() + ".ovf";

            //string file3 = sim.dir + fName(3 * N + 2);
            Console.WriteLine("Dip pos:" + sim.fmrfm.dipole.r0.ToString());
            ovf2 m = new ovf2(file, true);

            //double fzi = sim.fmrfm.CalculateFz(m0, mi);
            double fzi = sim.fmrfm.CalculateFzConditional(null, m, ops.CalcCondition_range, MsByPos, plotChoice, calccondition);

            return(fzi);
        }
Beispiel #2
0
        public static double newF(int N, SimController sim, List <int> plotChoice, MagnetizationByPosition MsByPos, string calccondition)
        {
            //N--;
            double f     = 0;
            string file1 = sim.dir + N.ToString() + "-m0.ovf";
            string file2 = sim.dir + N.ToString() + "-mf.ovf";

            //string file3 = sim.dir + fName(3 * N + 2);
            Console.WriteLine("Dip pos:" + sim.fmrfm.dipole.r0.ToString());
            ovf2 m0 = new ovf2(file1, false);
            ovf2 mi = new ovf2(file2, false);

            //double fzi = sim.fmrfm.CalculateFz(m0, mi);
            //double fzi = sim.fmrfm.CalculateFzConditional(m0, mi, (v) => { return true; }, MsByPos,plotChoice);
            double fzi = sim.fmrfm.CalculateFzConditional(m0, mi, ops.CalcCondition_range, MsByPos, plotChoice, calccondition);

            return(fzi);
        }
Beispiel #3
0
        public void DoSweep(calculator calc, List <int> pltChoice, MagnetizationByPosition MsByPos, string calccondition)
        {
            this.FieldSweep = new List <XY>();
            if (!table.keys.Contains("Hext (T)"))
            {
                Console.WriteLine("error.  no key named Hext");
                return;
            }

            for (int i = 0; i < table.data[table.keys[0]].Count; i++)
            {
                double h = table.data["Hext (T)"][i];
                //double h = table.data["ypos ()"][i];
                //this.fmrfm.dipole.r0.x = h;

                int    fileN = Convert.ToInt16(table.data["fileN ()"][i]);
                double val   = calc(fileN, this, pltChoice, MsByPos, calccondition);
                XY     hf    = new XY(h, val);
                FieldSweep.Add(hf);
            }
        }
Beispiel #4
0
        public double CalculateFzConditional(ovf2 mRef, ovf2 m, CalcCondition ccond, MagnetizationByPosition MsAtPos, List <int> plotChoice, string cond)
        {
            //int Ny = mRef.header.ynodes;
            int    Ny = m.header.ynodes;
            double fz = 0;
            //double vol = mRef.header.xstepsize * mRef.header.ystepsize * mRef.header.zstepsize;
            double vol = m.header.xstepsize * m.header.ystepsize * m.header.zstepsize;

            for (int i = 0; i < Ny; i++)
            {
                Vector[] dm = m.GetRow(i, 0);
                if (mRef != null)
                {
                    Vector[] row0 = mRef.GetRow(i, 0);
                    dm = vecSub(dm, row0);
                }

                for (int j = 0; j < dm.Count(); j++)
                {
                    //Vector mf = new Vector(dm[j].x * mom, dm[j].y * mom, dm[j].z * mom);
                    Vector r = m.GetPos(j, i, 0);
                    //Vector mf = new Vector(0, 0, dm[j].z * MsAtPos(r) * vol);
                    Vector mf  = new Vector(dm[j].x * MsAtPos(r) * vol, dm[j].y * MsAtPos(r) * vol, dm[j].z * MsAtPos(r) * vol);
                    double fzi = 0;
                    if (plotChoice[0] == 0)
                    {
                        if (plotChoice[1] == 1)
                        {
                            fzi = dipole.Fz(mf, r);
                        }
                        else if (plotChoice[1] == 2)
                        {
                            fzi = dipole.Fz_ip(mf, r);
                        }
                        else if (plotChoice[1] == 3)
                        {
                            fzi = dipole.Fz_ipy(mf, r);
                        }
                    }
                    if (plotChoice[0] == 1)
                    {
                        if (plotChoice[1] == 1)
                        {
                            fzi = dm[j].z;
                        }
                        else if (plotChoice[1] == 2)
                        {
                            fzi = dm[j].x;
                        }
                        else if (plotChoice[1] == 3)
                        {
                            fzi = dm[j].y;
                        }
                    }
                    //double fzi = dipole.Fz(mf, r);
                    //double fzi = dipole.Fz_ip(mf, r);
                    if (ccond(r, cond))
                    {
                        fz += fzi;
                    }
                }
            }

            return(fz);
        }