/* * calc_ramo.java */ import com.comsol.model.*; import com.comsol.model.util.*; import java.util.Arrays; import java.io.*; //import java.lang.*; public class calc_ramo { public static void main(String[] args) { System.out.println("Starting"); Model model; model = ModelUtil.model(System.getProperty("cs.currentmodel")); /* if (args.legth!=6) { System.out.println("expected 6 arguments!"); return; } */ double xStart=Double.parseDouble(args[0]); double xStop=Double.parseDouble(args[1]); double xStep=Double.parseDouble(args[2]); double yStart=Double.parseDouble(args[3]); double yStop=Double.parseDouble(args[4]); double yStep=Double.parseDouble(args[5]); double x=xStart; String outpath="/home/mberger/fopiroot/fopiroot_dev/outfiles/padresponse/comsol_data/"; while(x<=xStop) { double y=yStart; while(y<=yStop) { model.param().set("Xrel",x); model.param().set("Yrel",y); String Xrel=model.param().get("Xrel"); String Yrel=model.param().get("Yrel"); Xrel=Xrel.replace("[m]",""); Yrel=Yrel.replace("[m]",""); String fieldf="elecDrift_"+Xrel+"_"+Yrel+".txt"; File runfile=new File(outpath+"/"+fieldf+".run"); System.out.println("Checking Fieldfile: "+outpath+fieldf); if (true) { if ( new File(outpath+"/"+fieldf).isFile() ) { System.out.println("Field already calculated. skipping"); y+=yStep; continue; //return; } if (new File(outpath+"/"+fieldf+".run").isFile()) { System.out.println("Field is calculated at the moment"); y+=yStep; continue; // return ; } try { runfile.createNewFile(); } catch (IOException e) { System.err.println("Error opening lockfile" + e.getMessage()); y+=yStep; continue; //return ; } } //runSim(model); writeToFile(model,outpath,fieldf); runfile.delete(); y+=yStep; } x+=xStep; } System.out.println("Done"); return; } public static void runSim(Model model) { System.out.println("starting study"); System.out.println("Parameters are set to:"); System.out.println("Xrel="+model.param().get("Xrel")+" Yrel="+model.param().get("Yrel")); System.out.println("Make geometry"); model.geom("geom1").run(); System.out.println("Meshing"); model.mesh("mesh2").run(); //model.study("std2").run(); System.out.println("Solving"); model.sol("sol6").run(); System.out.println("solving done"); } public static int writeToFile(Model model, String outpath, String fieldf) { /* model.result().numerical().create("par1", "Particle"); model.result().numerical("par1").name("Particle posX"); model.result().numerical("par1").set("expr", "qx"); model.result().numerical("par1").set("descr", "Particle position"); model.result().numerical("par1").set("unit", "m"); model.result().numerical().create("par2", "Particle"); model.result().numerical("par2").name("Particle posY"); model.result().numerical("par2").set("expr", "qy"); model.result().numerical("par2").set("descr", "Particle position"); model.result().numerical("par2").set("unit", "m"); model.result().numerical().create("par3", "Particle"); model.result().numerical("par3").name("Particle posZ"); model.result().numerical("par3").set("expr", "qz"); model.result().numerical("par3").set("descr", "Particle position"); model.result().numerical("par3").set("unit", "m"); model.result().numerical().create("par5", "Particle"); model.result().numerical("par5").name("Particle velX"); model.result().numerical("par5").set("unit", "m/s"); model.result().numerical("par5").set("expr", "cpt.vx"); model.result().numerical("par5").set("descr", "Particle velocity, x component"); model.result().numerical().create("par6", "Particle"); model.result().numerical("par6").name("Particle VelY"); model.result().numerical("par6").set("expr", "cpt.vy"); model.result().numerical("par6").set("descr", "Particle velocity, y component"); model.result().numerical("par6").set("unit", "m/s"); model.result().numerical().create("par7", "Particle"); model.result().numerical("par7").name("Particle VelZ"); model.result().numerical("par7").set("expr", "cpt.vz"); model.result().numerical("par7").set("descr", "Particle velocity, z component"); model.result().numerical("par7").set("unit", "m/s"); model.result().dataset().create("cpt1", "CutPoint3D"); model.result().dataset("cpt1").set("data", "dset3"); System.out.println("ficken"); model.result().numerical().create("pev1", "EvalPoint"); model.result().numerical("pev1").name("Weighting field Ex"); model.result().numerical("pev1").set("probetag", "none"); model.result().numerical("pev1").set("data", "cpt1"); model.result().numerical("pev1").set("expr", "es2.Ex"); model.result().numerical("pev1").set("unit", "V/m"); model.result().numerical("pev1").set("descr", "Electric field, x component"); model.result().numerical().create("pev2", "EvalPoint"); model.result().numerical("pev2").name("Weighting field Ey"); model.result().numerical("pev2").set("probetag", "none"); model.result().numerical("pev2").set("data", "cpt1"); model.result().numerical("pev2").set("expr", "es2.Ey"); model.result().numerical("pev2").set("unit", "V/m"); model.result().numerical("pev2").set("descr", "Electric field, y component"); model.result().numerical().create("pev3", "EvalPoint"); model.result().numerical("pev3").name("Weighting field Ez"); model.result().numerical("pev3").set("probetag", "none"); model.result().numerical("pev3").set("data", "cpt1"); model.result().numerical("pev3").set("expr", "es2.Ez"); model.result().numerical("pev3").set("unit", "V/m"); model.result().numerical("pev3").set("descr", "Electric field, z component"); System.out.println("ficken2"); */ //String outpath="/home/mberger/fopiroot/fopiroot_dev/outfiles/padresponse/comsol_data/"; //String fieldf="elecDrift_"+Xrel+"_"+Yrel+".txt"; File outfile=new File(outpath+fieldf); FileWriter writer; try { writer=new FileWriter(outfile,false); writer.write("# px=Particle position X\n"); writer.write("# py=Particle position Y\n"); writer.write("# pz=Particle position Y\n"); writer.write("# wEx=Weighting field component X\n"); writer.write("# wEy=Weighting field component Y\n"); writer.write("# wEz=Weighting field component Z\n"); writer.write("# vx=Particle velocity X\n"); writer.write("# vy=Particle velocity Y\n"); writer.write("# vz=Particle velocity Z\n"); writer.write("# px py pz wEx wEy wEz vx vy vz\n"); double[][] particleX; double[][] particleY; double[][] particleZ; double[][] particleVx; double[][] particleVy; double[][] particleVz; double[][] wFieldX; double[][] wFieldY; double[][] wFieldZ; double[] times; times=model.sol("sol6").getPVals(); System.out.println("Collecting particle positions"); model.result().numerical("par1").set("timeinterp", "on"); model.result().numerical("par1").set("t", times); model.result().numerical("par2").set("timeinterp", "on"); model.result().numerical("par2").set("t", times); model.result().numerical("par3").set("timeinterp", "on"); model.result().numerical("par3").set("t", times); particleX=model.result().numerical("par1").getReal(); particleY=model.result().numerical("par2").getReal(); particleZ=model.result().numerical("par3").getReal(); System.out.println("Collecting particle velocities"); model.result().numerical("par5").set("timeinterp", "on"); model.result().numerical("par5").set("t", times); model.result().numerical("par6").set("timeinterp", "on"); model.result().numerical("par6").set("t", times); model.result().numerical("par7").set("timeinterp", "on"); model.result().numerical("par7").set("t", times); particleVx=model.result().numerical("par5").getReal(); particleVy=model.result().numerical("par6").getReal(); particleVz=model.result().numerical("par7").getReal(); System.out.println("Start loop over particles"); int ipart,ipos; for(ipart=0;ipart