func GetAndInitSolidModel(mdb *inp.MatDb, matname, simfnk string, ndim int, pstress bool) (mdl msolid.Model, prms fun.Prms, err error) { // material name matdata := mdb.Get(matname) if matdata == nil { err = chk.Err("materials database failed on getting %q (solid) material\n", matname) return } mdlname := matdata.Model // handle groups if mdlname == "group" { if s_matname, found := io.Keycode(matdata.Extra, "s"); found { matname = s_matname matdata = mdb.Get(matname) if matdata == nil { err = chk.Err("materials database failed on getting %q (solid/sub) material\n", matname) return } mdlname = matdata.Model } else { err = chk.Err("cannot find solid model in grouped material data. 's' subkey needed in Extra field") return } } // initialise model mdl, existent := msolid.GetModel(simfnk, matname, mdlname, false) if mdl == nil { err = chk.Err("cannot find solid model named %q", mdlname) return } if !existent { err = mdl.Init(ndim, pstress, matdata.Prms) if err != nil { err = chk.Err("solid model initialisation failed:\n%v", err) return } } // results prms = matdata.Prms return }
func main() { // input data file inpfn := "data/loccmdrv1.inp" flag.Parse() if len(flag.Args()) > 0 { inpfn = flag.Arg(0) } if io.FnExt(inpfn) == "" { inpfn += ".inp" } // read and parse input data var in Input b, err := io.ReadFile(inpfn) if err != nil { io.PfRed("cannot read %s\n", inpfn) return } err = json.Unmarshal(b, &in) if err != nil { io.PfRed("cannot parse %s\n", inpfn) return } in.PostProcess() // print input data io.Pf("%v\n", in) // load simulation sim := inp.ReadSim(in.Dir, in.SimFn, "cmd_", false) if sim == nil { io.PfRed("cannot load simulation\n") return } // get material data mat := sim.Mdb.Get(in.MatName) if mat == nil { io.PfRed("cannot get material\n") return } //io.Pfcyan("mat = %v\n", mat) // get and initialise model mdl, _ := msolid.GetModel(in.SimFn, in.MatName, mat.Model, false) if mdl == nil { io.PfRed("cannot allocate model\n") return } ndim := 3 pstress := false mdl.Init(ndim, pstress, mat.Prms) //io.Pforan("mdl = %v\n", mdl) // load path var pth msolid.Path err = pth.ReadJson(ndim, path.Join(in.Dir, in.PathFn)) if err != nil { io.PfRed("cannot read path file %v\n", err) return } //io.PfYel("pth = %v\n", pth) // driver var drv msolid.Driver drv.InitWithModel(ndim, mdl) // run err = drv.Run(&pth) if err != nil { io.Pfred("driver: Run failed: %v\n", err) } // plot //if false { if true { var plr msolid.Plotter plr.SetFig(false, in.FigEps, in.FigProp, in.FigWid, "/tmp", "cmd_"+in.SimFn) var epm msolid.EPmodel if m, ok := mdl.(msolid.EPmodel); ok { plr.SetModel(m) epm = m } if epm != nil { //plr.Phi = epm.Get_phi() b := epm.Get_bsmp() epm.Set_bsmp(0) plr.YsClr0 = "magenta" plr.Plot(in.PlotSet, drv.Res, nil, true, false) epm.Set_bsmp(b) } plr.YsClr0 = "green" plr.Plot(in.PlotSet, drv.Res, drv.Eps, false, true) } // plot ys if false { //if true { plt.Reset() m := mdl.(*msolid.SmpInvs) φ := m.Get_phi() σcCte := 10.0 M := tsr.Phi2M(φ, "oct") rmin, rmax := 0.0, 1.28*M*σcCte nr, nα := 31, 81 //nr, nα := 31, 1001 npolarc := true simplec := false only0 := false grads := false showpts := false ferr := 10.0 tsr.PlotOct("fig_isofun02.png", σcCte, rmin, rmax, nr, nα, φ, m.Isof.Fa, m.Isof.Ga, npolarc, simplec, only0, grads, showpts, true, true, ferr) } }