/*
 * rcs_sphere.java
 */

import com.comsol.model.*;
import com.comsol.model.util.*;

/** Model exported on May 12 2026, 10:41 by COMSOL 6.4.0.418. */
public class rcs_sphere {

  public static Model run() {
    Model model = ModelUtil.create("Model");

//    From the File menu, choose New.
//    In the New window, click Model Wizard.
//    In the Model Wizard window, click 3D.
//    In the Select Physics tree, select Radio Frequency > Electromagnetic Waves, Frequency Domain (emw).
//    Click Add.
//    Click Study.
//    In the Select Study tree, select General Studies > Frequency Domain.
//    Click Done.

    model.component().create("comp1", true);

    model.component("comp1").geom().create("geom1", 3);
    model.component("comp1").geom("geom1").geomRep("comsol");

    model.component("comp1").mesh().create("mesh1");
    model.component("comp1").mesh("mesh1").contribute("geom/detail", true);

    model.component("comp1").physics().create("emw", "ElectromagneticWaves", "geom1");

    model.study().create("std1");
    model.study("std1").create("freq", "Frequency");
    model.study("std1").feature("freq").set("solnum", "auto");
    model.study("std1").feature("freq").set("notsolnum", "auto");
    model.study("std1").feature("freq").set("outputmap", new String[]{});
    model.study("std1").feature("freq").set("ngenAUX", "1");
    model.study("std1").feature("freq").set("goalngenAUX", "1");
    model.study("std1").feature("freq").set("ngenAUX", "1");
    model.study("std1").feature("freq").set("goalngenAUX", "1");

//    In the Model Builder window, under Global Definitions, click Parameters 1.
//    In the Settings window for Parameters, locate the Parameters section.
//    In the table, enter the following settings:

    model.param().set("r_lda", "0.5");
    model.param().descr("r_lda", "Sphere radius in wavelengths");
    model.param().set("r0", "5[cm]");
    model.param().descr("r0", "Sphere radius");
    model.param().set("lda", "r0/r_lda");
    model.param().descr("lda", "Wavelength");
    model.param().set("k0", "2*pi/lda");
    model.param().descr("k0", "Wavenumber");
    model.param().set("f0", "c_const/lda");
    model.param().descr("f0", "Frequency");
    model.param().set("t_air", "lda/2");
    model.param().descr("t_air", "Thickness of air around sphere");
    model.param().set("t_pml", "lda/2");
    model.param().descr("t_pml", "Thickness of PML");
    model.param().set("h_size", "8");
    model.param().descr("h_size", "Number of elements per wavelength");
    model.param().set("E0", "1[V/m]");
    model.param().descr("E0", "Incident field magnitude");
    model.param().set("rho", "2*pi*r_lda");
    model.param().descr("rho", "Sphere circumference in wavelengths");

//    To compute the RCS using the analytical expression, the spherical Bessel functions of the first and second kinds and the spherical Hankel function of the second kind need to be defined. One <l>Variables</l> node will be created for each function to avoid clustering all the variables in a single <l>Variables</l> node. For the frequency range of interest in this model, we truncate the summation in the analytical expression of the RCS at n=7.
//    In the Model Builder window, expand the Component 1 (comp1) > Definitions node.
//    Right-click Definitions and choose Variables.

    model.component("comp1").variable().create("var1");

    model.component("comp1").geom("geom1").run();

//    In the Settings window for Variables, type Spherical Bessel Function of the First Kind in the Label text field.

    model.component("comp1").variable("var1").label("Spherical Bessel Function of the First Kind");

//    Locate the Variables section.
//    In the table, enter the following settings:

    model.component("comp1").variable("var1").set("sbesselj1", "sqrt(pi/(2*rho))*besselj(1.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj1", "Order 1");
    model.component("comp1").variable("var1").set("sbesselj2", "sqrt(pi/(2*rho))*besselj(2.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj2", "Order 2");
    model.component("comp1").variable("var1").set("sbesselj3", "sqrt(pi/(2*rho))*besselj(3.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj3", "Order 3");
    model.component("comp1").variable("var1").set("sbesselj4", "sqrt(pi/(2*rho))*besselj(4.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj4", "Order 4");
    model.component("comp1").variable("var1").set("sbesselj5", "sqrt(pi/(2*rho))*besselj(5.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj5", "Order 5");
    model.component("comp1").variable("var1").set("sbesselj6", "sqrt(pi/(2*rho))*besselj(6.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj6", "Order 6");
    model.component("comp1").variable("var1").set("sbesselj7", "sqrt(pi/(2*rho))*besselj(7.5,rho)");
    model.component("comp1").variable("var1").descr("sbesselj7", "Order 7");

//    Right-click Definitions and choose Variables.

    model.component("comp1").variable().create("var2");

//    In the Settings window for Variables, type Spherical Bessel Function of the Second Kind in the Label text field.

    model.component("comp1").variable("var2").label("Spherical Bessel Function of the Second Kind");

//    Locate the Variables section.
//    In the table, enter the following settings:

    model.component("comp1").variable("var2").set("sbessely1", "sqrt(pi/(2*rho))*bessely(1.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely1", "Order 1");
    model.component("comp1").variable("var2").set("sbessely2", "sqrt(pi/(2*rho))*bessely(2.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely2", "Order 2");
    model.component("comp1").variable("var2").set("sbessely3", "sqrt(pi/(2*rho))*bessely(3.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely3", "Order 3");
    model.component("comp1").variable("var2").set("sbessely4", "sqrt(pi/(2*rho))*bessely(4.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely4", "Order 4");
    model.component("comp1").variable("var2").set("sbessely5", "sqrt(pi/(2*rho))*bessely(5.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely5", "Order 5");
    model.component("comp1").variable("var2").set("sbessely6", "sqrt(pi/(2*rho))*bessely(6.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely6", "Order 6");
    model.component("comp1").variable("var2").set("sbessely7", "sqrt(pi/(2*rho))*bessely(7.5,rho)");
    model.component("comp1").variable("var2").descr("sbessely7", "Order 7");

//    Right-click Definitions and choose Variables.

    model.component("comp1").variable().create("var3");

//    In the Settings window for Variables, type Spherical Hankel Function of the Second Kind in the Label text field.

    model.component("comp1").variable("var3").label("Spherical Hankel Function of the Second Kind");

//    Locate the Variables section.
//    In the table, enter the following settings:

    model.component("comp1").variable("var3").set("shankel1", "sbesselj1+1j*sbessely1");
    model.component("comp1").variable("var3").descr("shankel1", "Order 1");
    model.component("comp1").variable("var3").set("shankel2", "sbesselj2+1j*sbessely2");
    model.component("comp1").variable("var3").descr("shankel2", "Order 2");
    model.component("comp1").variable("var3").set("shankel3", "sbesselj3+1j*sbessely3");
    model.component("comp1").variable("var3").descr("shankel3", "Order 3");
    model.component("comp1").variable("var3").set("shankel4", "sbesselj4+1j*sbessely4");
    model.component("comp1").variable("var3").descr("shankel4", "Order 4");
    model.component("comp1").variable("var3").set("shankel5", "sbesselj5+1j*sbessely5");
    model.component("comp1").variable("var3").descr("shankel5", "Order 5");
    model.component("comp1").variable("var3").set("shankel6", "sbesselj6+1j*sbessely6");
    model.component("comp1").variable("var3").descr("shankel6", "Order 6");
    model.component("comp1").variable("var3").set("shankel7", "sbesselj7+1j*sbessely7");
    model.component("comp1").variable("var3").descr("shankel7", "Order 7");

//    Right-click Definitions and choose Variables.

    model.component("comp1").variable().create("var4");

//    In the Settings window for Variables, type Coefficient a in the Label text field.

    model.component("comp1").variable("var4").label("Coefficient a");

//    Locate the Variables section.
//    In the table, enter the following settings:

    model.component("comp1").variable("var4").set("a1", "sbesselj1/shankel1");
    model.component("comp1").variable("var4").descr("a1", "");
    model.component("comp1").variable("var4").set("a2", "sbesselj2/shankel2");
    model.component("comp1").variable("var4").descr("a2", "");
    model.component("comp1").variable("var4").set("a3", "sbesselj3/shankel3");
    model.component("comp1").variable("var4").descr("a3", "");
    model.component("comp1").variable("var4").set("a4", "sbesselj4/shankel4");
    model.component("comp1").variable("var4").descr("a4", "");
    model.component("comp1").variable("var4").set("a5", "sbesselj5/shankel5");
    model.component("comp1").variable("var4").descr("a5", "");
    model.component("comp1").variable("var4").set("a6", "sbesselj6/shankel6");
    model.component("comp1").variable("var4").descr("a6", "");
    model.component("comp1").variable("var4").set("a7", "sbesselj7/shankel7");
    model.component("comp1").variable("var4").descr("a7", "");

//    Computing the coefficient b requires taking the derivative with respect to <c>rho</c>. This can be done conveniently by using the built-in <c>d(f,x)</c> operator.
//    Right-click Definitions and choose Variables.

    model.component("comp1").variable().create("var5");

//    In the Settings window for Variables, type Coefficient b in the Label text field.

    model.component("comp1").variable("var5").label("Coefficient b");

//    Locate the Variables section.
//    In the table, enter the following settings:

    model.component("comp1").variable("var5").set("b1", "-d(rho*sbesselj1,rho)/d(rho*shankel1,rho)");
    model.component("comp1").variable("var5").descr("b1", "");
    model.component("comp1").variable("var5").set("b2", "-d(rho*sbesselj2,rho)/d(rho*shankel2,rho)");
    model.component("comp1").variable("var5").descr("b2", "");
    model.component("comp1").variable("var5").set("b3", "-d(rho*sbesselj3,rho)/d(rho*shankel3,rho)");
    model.component("comp1").variable("var5").descr("b3", "");
    model.component("comp1").variable("var5").set("b4", "-d(rho*sbesselj4,rho)/d(rho*shankel4,rho)");
    model.component("comp1").variable("var5").descr("b4", "");
    model.component("comp1").variable("var5").set("b5", "-d(rho*sbesselj5,rho)/d(rho*shankel5,rho)");
    model.component("comp1").variable("var5").descr("b5", "");
    model.component("comp1").variable("var5").set("b6", "-d(rho*sbesselj6,rho)/d(rho*shankel6,rho)");
    model.component("comp1").variable("var5").descr("b6", "");
    model.component("comp1").variable("var5").set("b7", "-d(rho*sbesselj7,rho)/d(rho*shankel7,rho)");
    model.component("comp1").variable("var5").descr("b7", "");

//    Right-click Definitions and choose Variables.

    model.component("comp1").variable().create("var6");

//    In the Settings window for Variables, type Analytical Expression of the RCS in the Label text field.

    model.component("comp1").variable("var6").label("Analytical Expression of the RCS");

//    Locate the Variables section.
//    In the table, enter the following settings:

    model.component("comp1").variable("var6")
         .set("RCS_analytical", "1/(rho)^2*abs(-3*(a1+b1)+5*(a2+b2)-7*(a3+b3)+9*(a4+b4)-11*(a5+b5)+13*(a6+b6)-15*(a7+b7))^2");
    model.component("comp1").variable("var6").descr("RCS_analytical", "Analytically calculated RCS");

//    With the calculated coefficients, the RCS can be evaluated according to the analytical expression.
//    First, create a sphere with two layer definitions. The outermost layer represents the PMLs and the core represents the PEC sphere for RCS analysis. The median layer is the air domain.
//    In the Geometry toolbar, click Sphere.

    model.component("comp1").geom("geom1").create("sph1", "Sphere");

//    In the Settings window for Sphere, locate the Size section.
//    In the Radius text field, type r0+t_air+t_pml.

    model.component("comp1").geom("geom1").feature("sph1").set("r", "r0+t_air+t_pml");

//    Click to expand the Layers section.
//    In the table, enter the following settings:

    model.component("comp1").geom("geom1").feature("sph1").setIndex("layername", "Layer 1", 0);
    model.component("comp1").geom("geom1").feature("sph1").setIndex("layer", "t_pml", 0);
    model.component("comp1").geom("geom1").feature("sph1").setIndex("layername", "Layer 2", 1);
    model.component("comp1").geom("geom1").feature("sph1").setIndex("layer", "t_air", 1);

//    Click Build All Objects.

    model.component("comp1").geom("geom1").runPre("fin");

//    Add a view with a different angle of perspective.
//    In the Model Builder window, right-click Component 1 (comp1) > Definitions and choose View.

    model.component("comp1").view().create("view2", "geom1");

//    In the Model Builder window, expand the View 2 node, then click Camera.
//    Change only the sign of <l>y</l> in the <l>Position</l> and <l>Up Vector</l> sections so that the former value becomes positive and the latter negative.
//    In the Settings window for Camera, click Update.
//    Click the Zoom Extents button in the Graphics toolbar.
//    Click the Wireframe Rendering button in the Graphics toolbar.

    model.component("comp1").view("view2").set("renderwireframe", true);

//     to get a better view of the interior parts.
//    Due to the symmetry of the structure, it is sufficient to model only one quarter of the sphere. Delete the domains which are not part of the modeling domain.
//    In the Model Builder window, right-click Component 1 (comp1) > Geometry 1 and choose Delete Entities.

    model.component("comp1").geom("geom1").create("del1", "Delete");

//    In the Settings window for Delete Entities, locate the Entities or Objects to Delete section.
//    From the Geometric entity level list, select Domain.

    model.component("comp1").geom("geom1").feature("del1").selection("input").init(3);

//    On the object sph1, select Domain 9.

    model.component("comp1").geom("geom1").feature("del1").selection("input").set("sph1", 9);

//    Click Build All Objects.

    model.component("comp1").geom("geom1").runPre("fin");

//    After removing unnecessary domains, change the view to the first view definition which gives a better angle showing all layers later.
//    Click the Zoom Extents button in the Graphics toolbar.

    model.component("comp1").geom("geom1").run();

//    Now set up the physics. You will solve the model for the scattered field, which requires background electric field (E-field) information. The background plane wave is traveling in the positive <eqv>x</eqv> direction, with the electric field polarized along the <eqv>z</eqv>-axis. The default boundary condition is perfect electric conductor, which applies to all exterior boundaries including the boundaries perpendicular to the background E-field polarization.
//    In the Model Builder window, under Component 1 (comp1), click Electromagnetic Waves, Frequency Domain (emw).
//    In the Settings window for Electromagnetic Waves, Frequency Domain, locate the Formulation section.
//    From the list, select Scattered field.

    model.component("comp1").physics("emw").prop("BackgroundField").set("SolveFor", "scatteredField");

//    Specify the \[\mathbf{E}_{\textrm{b}}\] vector as

    model.component("comp1").physics("emw").prop("BackgroundField")
         .set("Eb", new String[]{"0", "0", "E0*exp(-j*k0*x)"});

//    Choose wireframe rendering in the current view to get a better view of the interior parts.
//    Click the Wireframe Rendering button in the Graphics toolbar.

    model.component("comp1").view("view1").set("renderwireframe", true);

//    The outermost domains from the center of the sphere are the PMLs.
//    In the Definitions toolbar, click Perfectly Matched Layer.

    model.component("comp1").coordSystem().create("pml1", "PML");

//    Select Domains 1, 2, 3, 4, 9, 10, 13, 16.

    model.component("comp1").coordSystem("pml1").selection().set(1, 2, 3, 4, 9, 10, 13, 16);

//    In the Settings window for Perfectly Matched Layer, locate the Geometry section.
//    From the Type list, select Spherical.

    model.component("comp1").coordSystem("pml1").set("ScalingType", "Spherical");

//    In the Physics toolbar, click Domains and choose Far-Field Domain.

    model.component("comp1").physics("emw").create("ffd1", "FarFieldDomain", 3);

//    To set up the physics and geometry quickly with a symmetry plane, use the toolbar buttons at the top of the physics interface's <l>Settings</l> window.
//    In the Model Builder window, click Electromagnetic Waves, Frequency Domain (emw).
//    In the Settings window for Electromagnetic Waves, Frequency Domain, click PEC XY-symmetry Plane in the window toolbar.

    model.component("comp1").physics("emw").prop("Toolbar").runCommand("PECXYSymmetryPlane");

//    In the Model Builder window, click Electromagnetic Waves, Frequency Domain (emw).
//    Click PMC ZX-symmetry Plane in the window toolbar.

    model.component("comp1").physics("emw").prop("Toolbar").runCommand("PMCZXSymmetryPlane");

//    Click the Zoom Extents button in the Graphics toolbar.
//    This is the modeling domain for RCS analysis.
//    Next, assign material properties. Use air for all domains.
//    In the Materials toolbar, click Add Material to open the Add Material window.
//    In the tree, select Built-in > Air.
//    Click Add to Component in the window toolbar.

    model.component("comp1").material().create("mat1", "Common");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("eta", "Piecewise");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("Cp", "Piecewise");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("rho", "Analytic");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("k", "Piecewise");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("cs", "Analytic");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("an1", "Analytic");
    model.component("comp1").material("mat1").propertyGroup("def").func().create("an2", "Analytic");
    model.component("comp1").material("mat1").propertyGroup()
         .create("RefractiveIndex", "RefractiveIndex", "Refractive index");
    model.component("comp1").material("mat1").propertyGroup()
         .create("NonlinearModel", "NonlinearModel", "Nonlinear model");
    model.component("comp1").material("mat1").propertyGroup().create("idealGas", "idealGas", "Ideal gas");
    model.component("comp1").material("mat1").propertyGroup("idealGas").func().create("Cp", "Piecewise");
    model.component("comp1").material("mat1").label("Air");
    model.component("comp1").material("mat1").set("family", "air");
    model.component("comp1").material("mat1").propertyGroup("def").func("eta").set("arg", "T");
    model.component("comp1").material("mat1").propertyGroup("def").func("eta")
         .set("pieces", new String[][]{{"200.0", "1600.0", "-8.38278E-7+8.35717342E-8*T^1-7.69429583E-11*T^2+4.6437266E-14*T^3-1.06585607E-17*T^4"}});
    model.component("comp1").material("mat1").propertyGroup("def").func("eta").set("argunit", "K");
    model.component("comp1").material("mat1").propertyGroup("def").func("eta").set("fununit", "Pa*s");
    model.component("comp1").material("mat1").propertyGroup("def").func("Cp").set("arg", "T");
    model.component("comp1").material("mat1").propertyGroup("def").func("Cp")
         .set("pieces", new String[][]{{"200.0", "1600.0", "1047.63657-0.372589265*T^1+9.45304214E-4*T^2-6.02409443E-7*T^3+1.2858961E-10*T^4"}});
    model.component("comp1").material("mat1").propertyGroup("def").func("Cp").set("argunit", "K");
    model.component("comp1").material("mat1").propertyGroup("def").func("Cp").set("fununit", "J/(kg*K)");
    model.component("comp1").material("mat1").propertyGroup("def").func("rho")
         .set("expr", "pA*0.02897/R_const[K*mol/J]/T");
    model.component("comp1").material("mat1").propertyGroup("def").func("rho").set("args", new String[]{"pA", "T"});
    model.component("comp1").material("mat1").propertyGroup("def").func("rho").set("fununit", "kg/m^3");
    model.component("comp1").material("mat1").propertyGroup("def").func("rho")
         .set("argunit", new String[]{"Pa", "K"});
    model.component("comp1").material("mat1").propertyGroup("def").func("rho")
         .set("plotaxis", new String[]{"off", "on"});
    model.component("comp1").material("mat1").propertyGroup("def").func("rho")
         .set("plotfixedvalue", new String[]{"101325", "273.15"});
    model.component("comp1").material("mat1").propertyGroup("def").func("rho")
         .set("plotargs", new String[][]{{"pA", "101325", "101325"}, {"T", "273.15", "293.15"}});
    model.component("comp1").material("mat1").propertyGroup("def").func("k").set("arg", "T");
    model.component("comp1").material("mat1").propertyGroup("def").func("k")
         .set("pieces", new String[][]{{"200.0", "1600.0", "-0.00227583562+1.15480022E-4*T^1-7.90252856E-8*T^2+4.11702505E-11*T^3-7.43864331E-15*T^4"}});
    model.component("comp1").material("mat1").propertyGroup("def").func("k").set("argunit", "K");
    model.component("comp1").material("mat1").propertyGroup("def").func("k").set("fununit", "W/(m*K)");
    model.component("comp1").material("mat1").propertyGroup("def").func("cs")
         .set("expr", "sqrt(1.4*R_const[K*mol/J]/0.02897*T)");
    model.component("comp1").material("mat1").propertyGroup("def").func("cs").set("args", new String[]{"T"});
    model.component("comp1").material("mat1").propertyGroup("def").func("cs").set("fununit", "m/s");
    model.component("comp1").material("mat1").propertyGroup("def").func("cs").set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("def").func("cs")
         .set("plotfixedvalue", new String[]{"273.15"});
    model.component("comp1").material("mat1").propertyGroup("def").func("cs")
         .set("plotargs", new String[][]{{"T", "273.15", "373.15"}});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1").set("funcname", "alpha_p");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("expr", "-1/rho(pA,T)*d(rho(pA,T),T)");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1").set("args", new String[]{"pA", "T"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1").set("fununit", "1/K");
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("argunit", new String[]{"Pa", "K"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("plotaxis", new String[]{"off", "on"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("plotfixedvalue", new String[]{"101325", "273.15"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an1")
         .set("plotargs", new String[][]{{"pA", "101325", "101325"}, {"T", "273.15", "373.15"}});
    model.component("comp1").material("mat1").propertyGroup("def").func("an2").set("funcname", "muB");
    model.component("comp1").material("mat1").propertyGroup("def").func("an2").set("expr", "0.6*eta(T)");
    model.component("comp1").material("mat1").propertyGroup("def").func("an2").set("args", new String[]{"T"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an2").set("fununit", "Pa*s");
    model.component("comp1").material("mat1").propertyGroup("def").func("an2").set("argunit", new String[]{"K"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an2")
         .set("plotfixedvalue", new String[]{"200"});
    model.component("comp1").material("mat1").propertyGroup("def").func("an2")
         .set("plotargs", new String[][]{{"T", "200", "1600"}});
    model.component("comp1").material("mat1").propertyGroup("def").set("thermalexpansioncoefficient", "");
    model.component("comp1").material("mat1").propertyGroup("def").set("molarmass", "");
    model.component("comp1").material("mat1").propertyGroup("def").set("bulkviscosity", "");
    model.component("comp1").material("mat1").propertyGroup("def")
         .set("thermalexpansioncoefficient", new String[]{"alpha_p(pA,T)", "0", "0", "0", "alpha_p(pA,T)", "0", "0", "0", "alpha_p(pA,T)"});
    model.component("comp1").material("mat1").propertyGroup("def").set("molarmass", "0.02897[kg/mol]");
    model.component("comp1").material("mat1").propertyGroup("def").set("bulkviscosity", "muB(T)");
    model.component("comp1").material("mat1").propertyGroup("def")
         .set("relpermeability", new String[]{"1", "0", "0", "0", "1", "0", "0", "0", "1"});
    model.component("comp1").material("mat1").propertyGroup("def")
         .set("relpermittivity", new String[]{"1", "0", "0", "0", "1", "0", "0", "0", "1"});
    model.component("comp1").material("mat1").propertyGroup("def").set("dynamicviscosity", "eta(T)");
    model.component("comp1").material("mat1").propertyGroup("def").set("ratioofspecificheat", "1.4");
    model.component("comp1").material("mat1").propertyGroup("def")
         .set("electricconductivity", new String[]{"0[S/m]", "0", "0", "0", "0[S/m]", "0", "0", "0", "0[S/m]"});
    model.component("comp1").material("mat1").propertyGroup("def").set("heatcapacity", "Cp(T)");
    model.component("comp1").material("mat1").propertyGroup("def").set("density", "rho(pA,T)");
    model.component("comp1").material("mat1").propertyGroup("def")
         .set("thermalconductivity", new String[]{"k(T)", "0", "0", "0", "k(T)", "0", "0", "0", "k(T)"});
    model.component("comp1").material("mat1").propertyGroup("def").set("soundspeed", "cs(T)");
    model.component("comp1").material("mat1").propertyGroup("def").addInput("temperature");
    model.component("comp1").material("mat1").propertyGroup("def").addInput("pressure");
    model.component("comp1").material("mat1").propertyGroup("RefractiveIndex")
         .set("n", new String[]{"1", "0", "0", "0", "1", "0", "0", "0", "1"});
    model.component("comp1").material("mat1").propertyGroup("NonlinearModel").set("BA", "def.gamma-1");
    model.component("comp1").material("mat1").propertyGroup("idealGas").func("Cp").label("Piecewise 2");
    model.component("comp1").material("mat1").propertyGroup("idealGas").func("Cp").set("arg", "T");
    model.component("comp1").material("mat1").propertyGroup("idealGas").func("Cp")
         .set("pieces", new String[][]{{"200.0", "1600.0", "1047.63657-0.372589265*T^1+9.45304214E-4*T^2-6.02409443E-7*T^3+1.2858961E-10*T^4"}});
    model.component("comp1").material("mat1").propertyGroup("idealGas").func("Cp").set("argunit", "K");
    model.component("comp1").material("mat1").propertyGroup("idealGas").func("Cp").set("fununit", "J/(kg*K)");
    model.component("comp1").material("mat1").propertyGroup("idealGas").set("Rs", "R_const/Mn");
    model.component("comp1").material("mat1").propertyGroup("idealGas").set("heatcapacity", "Cp(T)");
    model.component("comp1").material("mat1").propertyGroup("idealGas").set("ratioofspecificheat", "1.4");
    model.component("comp1").material("mat1").propertyGroup("idealGas").set("molarmass", "0.02897[kg/mol]");
    model.component("comp1").material("mat1").propertyGroup("idealGas").addInput("temperature");
    model.component("comp1").material("mat1").propertyGroup("idealGas").addInput("pressure");
    model.component("comp1").material("mat1").materialType("nonSolid");

//    In the Materials toolbar, click Add Material to close the Add Material window.
//    In the Settings window for Mesh, locate the Sequence Type section.
//    From the list, select User-controlled mesh.

    model.component("comp1").mesh("mesh1").automatic(false);

//    In the Model Builder window, under Component 1 (comp1) > Mesh 1, click Size.
//    In the Settings window for Size, locate the Element Size Parameters section.
//    In the Maximum element size text field, type lda/h_size.

    model.component("comp1").mesh("mesh1").feature("size").set("hmax", "lda/h_size");

//    In the Minimum element size text field, type lda/h_size.

    model.component("comp1").mesh("mesh1").feature("size").set("hmin", "lda/h_size");

//    In the Model Builder window, right-click Size 1 and choose Disable.

    model.component("comp1").mesh("mesh1").feature("size1").active(false);

//    In the Settings window for Size, click Build All.

    model.component("comp1").mesh("mesh1").run();

//    In the Study toolbar, click Parametric Sweep.

    model.study("std1").create("param", "Parametric");

//    In the Settings window for Parametric Sweep, locate the Study Settings section.
//    Click Add.

    model.study("std1").feature("param").setIndex("pname", "r_lda", 0);
    model.study("std1").feature("param").setIndex("plistarr", "", 0);
    model.study("std1").feature("param").setIndex("punit", "", 0);
    model.study("std1").feature("param").setIndex("pname", "r_lda", 0);
    model.study("std1").feature("param").setIndex("plistarr", "", 0);
    model.study("std1").feature("param").setIndex("punit", "", 0);

//    In the table, enter the following settings:

    model.study("std1").feature("param").setIndex("pname", "r_lda", 0);
    model.study("std1").feature("param").setIndex("plistarr", "range(0.1,0.025,0.8)", 0);

//    In the Model Builder window, click Step 1: Frequency Domain.
//    In the Settings window for Frequency Domain, locate the Study Settings section.
//    In the Frequencies text field, type f0.

    model.study("std1").feature("freq").set("plist", "f0");

//    In the Model Builder window, click Study 1.
//    In the Settings window for Study, locate the Study Settings section.
//    Clear the Generate default plots checkbox.

    model.study("std1").setGenPlots(false);

//    In the Study toolbar, click Compute.

    model.study("std1").createAutoSequences("all");

    model.sol().create("sol2");
    model.sol("sol2").study("std1");
    model.sol("sol2").label("Parametric Solutions 1");

    model.batch("p1").feature("so1").set("psol", "sol2");
    model.batch("p1").run("compute");

//    In the Model Builder window, expand the Results node.
//    Right-click Results > Derived Values and choose More Derived Values > Global Evaluation Sweep.

    model.result().numerical().create("gevs1", "EvalGlobalSweep");

//    By default, the analytically calculated RCS variable will be evaluated at the simulated frequencies. However, a finer frequency resolution can be achieved without actually running the simulation by utilizing a <l>Global Evaluation Sweep</l>, where the parameter <c>rho</c> is swept at a much finer spacing. This way, the analytically calculated RCS will show a smooth curve.
//    In the Settings window for Global Evaluation Sweep, locate the Parameters section.
//    In the table, enter the following settings:

    model.result().numerical("gevs1").setIndex("pname", "r_lda", 0);
    model.result().numerical("gevs1").setIndex("plistarr", "range(0.1,0.005,0.8)", 0);
    model.result().numerical("gevs1").setIndex("expr", "RCS_analytical", 0);

//    Locate the Expressions section.
//    In the table, enter the following settings:

    model.result().numerical("gevs1").setIndex("unit", "", 0);
    model.result().numerical("gevs1").setIndex("descr", "Analytically calculated RCS", 0);

//    Click Evaluate.

    model.result().table().create("tbl1", "Table");
    model.result().table("tbl1").comments("Global Evaluation Sweep 1");
    model.result().numerical("gevs1").set("table", "tbl1");
    model.result().numerical("gevs1").setResult();

//    In the Results toolbar, click 1D Plot Group.

    model.result().create("pg1", "PlotGroup1D");
    model.result("pg1").run();

//    In the Settings window for 1D Plot Group, locate the Data section.
//    From the Dataset list, select Study 1/Parametric Solutions 1 (sol2).

    model.result("pg1").set("data", "dset2");

//    Click to expand the Title section.

    return model;
  }

  public static Model run2(Model model) {
//    From the Title type list, select Custom.

    model.result("pg1").set("titletype", "custom");

//    Find the Type and data subsection.
//    Clear the Unit checkbox.

    model.result("pg1").set("unitintitle", false);

//    Clear the Description checkbox.

    model.result("pg1").set("descriptionintitle", false);

//    Clear the Type checkbox.

    model.result("pg1").set("typeintitle", false);

//    Find the User subsection.
//    In the Prefix text field, type RCS Calculation.

    model.result("pg1").set("prefixintitle", "RCS Calculation");

//    Locate the Plot Settings section.
//    Select the x-axis label checkbox.

    model.result("pg1").set("xlabelactive", true);

//    In the associated text field, type Sphere radius in wavelengths (a/\lambda<sub>0</sub>).

    model.result("pg1").set("xlabel", "Sphere radius in wavelengths (a/\\lambda<sub>0</sub>)");

//    Select the y-axis label checkbox.

    model.result("pg1").set("ylabelactive", true);

//    In the associated text field, type Normalized monostatic RCS (\sigma<sub>3-D</sub>/\pi a<sup>2</sup>).

    model.result("pg1").set("ylabel", "Normalized monostatic RCS (\\sigma<sub>3-D</sub>/\\pi a<sup>2</sup>)");

//    Locate the Axis section.
//    Select the y-axis log scale checkbox.

    model.result("pg1").set("ylog", true);

//    Right-click 1D Plot Group 1 and choose Point Graph.

    model.result("pg1").create("ptgr1", "PointGraph");
    model.result("pg1").feature("ptgr1").set("markerpos", "datapoints");
    model.result("pg1").feature("ptgr1").set("linewidth", "preference");

//    Select Point 2.

    model.result("pg1").feature("ptgr1").selection().set(2);

//    In the Settings window for Point Graph, locate the y-Axis Data section.
//    In the Expression text field, type emw.bRCS3D/(pi*r0^2).

    model.result("pg1").feature("ptgr1").set("expr", "emw.bRCS3D/(pi*r0^2)");

//    Locate the x-Axis Data section.
//    From the Axis source data list, select Outer solutions.

    model.result("pg1").feature("ptgr1").set("xdatasolnumtype", "outer");

//    Click to expand the Coloring and Style section.
//    Find the Line style subsection.
//    From the Line list, select None.

    model.result("pg1").feature("ptgr1").set("linestyle", "none");

//    Find the Line markers subsection.
//    From the Marker list, select Square.

    model.result("pg1").feature("ptgr1").set("linemarker", "square");

//    Click to expand the Legends section.
//    Select the Show legends checkbox.

    model.result("pg1").feature("ptgr1").set("legend", true);

//    From the Legends list, select Manual.

    model.result("pg1").feature("ptgr1").set("legendmethod", "manual");

//    In the table, enter the following settings:

    model.result("pg1").feature("ptgr1").setIndex("legends", "Simulated", 0);

//    In the 1D Plot Group 1 toolbar, click Plot.

    model.result("pg1").run();
    model.result("pg1").run();

//    In the Model Builder window, right-click 1D Plot Group 1 and choose Table Graph.

    model.result("pg1").create("tblp1", "Table");
    model.result("pg1").feature("tblp1").set("markerpos", "datapoints");
    model.result("pg1").feature("tblp1").set("linewidth", "preference");

//    In the Settings window for Table Graph, click to expand the Legends section.
//    Select the Show legends checkbox.

    model.result("pg1").feature("tblp1").set("legend", true);

//    From the Legends list, select Manual.

    model.result("pg1").feature("tblp1").set("legendmethod", "manual");

//    In the table, enter the following settings:

    model.result("pg1").feature("tblp1").setIndex("legends", "Analytical", 0);

//    In the 1D Plot Group 1 toolbar, click Plot.

    model.result("pg1").run();

//    The observed RCS graph pattern is oscillatory in the Mie region. The simulation and the analytical calculation agree very well as expected.
//    Next, proceed to perform the mesh convergence study at the first resonance in the Mie region.
//    Start by extending the parameter list with the resonant radius and the associated theoretical RCS value.
//    Add the two rows at the end and change the first line according to.
//    In the Model Builder window, under Global Definitions, click Parameters 1.
//    In the Settings window for Parameters, locate the Parameters section.
//    In the table, enter the following settings:

    model.param().set("r_lda", "0.5", "Sphere radius in wavelengths");
    model.param().set("r_lda", "r1");
    model.param().descr("r_lda", "Sphere radius in wavelengths");
    model.param().set("r0", "5[cm]", "Sphere radius");
    model.param().set("r0", "5[cm]");
    model.param().descr("r0", "Sphere radius");
    model.param().set("lda", "r0/r_lda", "Wavelength");
    model.param().set("lda", "r0/r_lda");
    model.param().descr("lda", "Wavelength");
    model.param().set("k0", "2*pi/lda", "Wavenumber");
    model.param().set("k0", "2*pi/lda");
    model.param().descr("k0", "Wavenumber");
    model.param().set("f0", "c_const/lda", "Frequency");
    model.param().set("f0", "c_const/lda");
    model.param().descr("f0", "Frequency");
    model.param().set("t_air", "lda/2", "Thickness of air around sphere");
    model.param().set("t_air", "lda/2");
    model.param().descr("t_air", "Thickness of air around sphere");
    model.param().set("t_pml", "lda/2", "Thickness of PML");
    model.param().set("t_pml", "lda/2");
    model.param().descr("t_pml", "Thickness of PML");
    model.param().set("h_size", "8", "Number of elements per wavelength");
    model.param().set("h_size", "8");
    model.param().descr("h_size", "Number of elements per wavelength");
    model.param().set("E0", "1[V/m]", "Incident field magnitude");
    model.param().set("E0", "1[V/m]");
    model.param().descr("E0", "Incident field magnitude");
    model.param().set("rho", "2*pi*r_lda", "Sphere circumference in wavelengths");
    model.param().set("rho", "2*pi*r_lda");
    model.param().descr("rho", "Sphere circumference in wavelengths");
    model.param().set("r1", "0.16363636363636364");
    model.param().descr("r1", "Relative radius at 1st resonance");
    model.param().set("RCS1", "3.6549540474068576");
    model.param().descr("RCS1", "RCS at 1st resonance");

    model.component("comp1").geom("geom1").run();

//    Add a new mesh with some tweaks to make sure that the curvature of the sphere is always resolved.
//    This is to avoid inverted mesh elements.
//    In the Model Builder window, right-click Component 1 (comp1) > Mesh 1 and choose Duplicate.

    model.component("comp1").mesh().duplicate("mesh2", "mesh1");

//    In the Model Builder window, expand the Mesh 2 node, then click Size.
//    In the Settings window for Size, locate the Element Size Parameters section.
//    In the Minimum element size text field, type if(lda/h_size>r0/2,r0/2,lda/h_size).

    model.component("comp1").mesh("mesh2").feature("size").set("hmin", "if(lda/h_size>r0/2,r0/2,lda/h_size)");

//    In the Model Builder window, right-click Free Tetrahedral 1 and choose Size.

    model.component("comp1").mesh("mesh2").feature("ftet1").create("size1", "Size");

//    In the Settings window for Size, locate the Geometric Entity Selection section.
//    From the Geometric entity level list, select Boundary.

    model.component("comp1").mesh("mesh2").feature("ftet1").feature("size1").selection().geom("geom1", 2);

//    Click Paste Selection.
//    In the Paste Selection dialog, type 7,10 in the Selection text field.
//    Click OK.

    model.component("comp1").mesh("mesh2").feature("ftet1").feature("size1").selection().set(7, 10);

//    In the Settings window for Size, locate the Element Size section.
//    Click the Custom button.

    model.component("comp1").mesh("mesh2").feature("ftet1").feature("size1").set("custom", true);

//    Locate the Element Size Parameters section.
//    Select the Maximum element size checkbox.

    model.component("comp1").mesh("mesh2").feature("ftet1").feature("size1").set("hmaxactive", true);

//    In the associated text field, type if(lda/h_size>r0/2,r0/2,lda/h_size).

    model.component("comp1").mesh("mesh2").feature("ftet1").feature("size1")
         .set("hmax", "if(lda/h_size>r0/2,r0/2,lda/h_size)");

//    Add a new frequency domain study for the mesh convergence analysis.
//    In the Home toolbar, click Add Study to open the Add Study window.
//    Find the Studies subsection.
//    In the Select Study tree, select General Studies > Frequency Domain.
//    Click Add Study in the window toolbar.

    model.study().create("std2");
    model.study("std2").create("freq", "Frequency");
    model.study("std2").feature("freq").set("plotgrouparr", new String[]{"Default"});
    model.study("std2").feature("freq").set("solnum", "auto");
    model.study("std2").feature("freq").set("notsolnum", "auto");
    model.study("std2").feature("freq").set("outputmap", new String[]{});
    model.study("std2").feature("freq").set("ngenAUX", "1");
    model.study("std2").feature("freq").set("goalngenAUX", "1");
    model.study("std2").feature("freq").set("ngenAUX", "1");
    model.study("std2").feature("freq").set("goalngenAUX", "1");

//    In the Home toolbar, click Add Study to close the Add Study window.
//    A parametric sweep is needed to loop over the mesh sizes.
//    In the Study toolbar, click Parametric Sweep.

    model.study("std2").create("param", "Parametric");

//    In the Settings window for Parametric Sweep, locate the Study Settings section.
//    Click Add.

    model.study("std2").feature("param").setIndex("pname", "r_lda", 0);
    model.study("std2").feature("param").setIndex("plistarr", "", 0);
    model.study("std2").feature("param").setIndex("punit", "", 0);
    model.study("std2").feature("param").setIndex("pname", "r_lda", 0);
    model.study("std2").feature("param").setIndex("plistarr", "", 0);
    model.study("std2").feature("param").setIndex("punit", "", 0);

//    In the table, enter the following settings:

    model.study("std2").feature("param").setIndex("pname", "h_size", 0);
    model.study("std2").feature("param").setIndex("plistarr", "3 6 9 12 15 20", 0);

//    In the Model Builder window, click Step 1: Frequency Domain.
//    In the Settings window for Frequency Domain, locate the Study Settings section.
//    In the Frequencies text field, type f0.

    model.study("std2").feature("freq").set("plist", "f0");

//    In the Model Builder window, click Study 2.
//    In the Settings window for Study, locate the Study Settings section.
//    Clear the Generate default plots checkbox.

    model.study("std2").setGenPlots(false);

//    In the Study toolbar, click Compute.

    model.study("std2").createAutoSequences("all");

    model.sol().create("sol33");
    model.sol("sol33").study("std2");
    model.sol("sol33").label("Parametric Solutions 2");

    model.batch("p2").feature("so1").set("psol", "sol33");
    model.batch("p2").run("compute");

//    Continue to plot the relative error versus elements per wavelength.
//    In the Results toolbar, click 1D Plot Group.

    model.result().create("pg2", "PlotGroup1D");
    model.result("pg2").run();

//    In the Settings window for 1D Plot Group, locate the Data section.
//    From the Dataset list, select Study 2/Parametric Solutions 2 (sol33).

    model.result("pg2").set("data", "dset4");

//    Locate the Plot Settings section.
//    Select the x-axis label checkbox.

    model.result("pg2").set("xlabelactive", true);

//    In the associated text field, type Number of elements / \lambda<sub>0</sub>.

    model.result("pg2").set("xlabel", "Number of elements / \\lambda<sub>0</sub>");

//    Select the y-axis label checkbox.

    model.result("pg2").set("ylabelactive", true);

//    In the associated text field, type Relative error.

    model.result("pg2").set("ylabel", "Relative error");

//    Right-click 1D Plot Group 2 and choose Point Graph.

    model.result("pg2").create("ptgr1", "PointGraph");
    model.result("pg2").feature("ptgr1").set("markerpos", "datapoints");
    model.result("pg2").feature("ptgr1").set("linewidth", "preference");

//    In the Settings window for Point Graph, locate the Selection section.
//    Click Paste Selection.
//    In the Paste Selection dialog, type 2 in the Selection text field.
//    Click OK.

    model.result("pg2").feature("ptgr1").selection().set(2);

//    In the Settings window for Point Graph, locate the y-Axis Data section.
//    In the Expression text field, type (emw.bRCS3D/(pi*r0^2)-RCS1)/RCS1.

    model.result("pg2").feature("ptgr1").set("expr", "(emw.bRCS3D/(pi*r0^2)-RCS1)/RCS1");

//    Locate the x-Axis Data section.
//    From the Axis source data list, select h_size.

    model.result("pg2").feature("ptgr1").set("xdatasolnumtype", "level2");

//    From the Parameter list, select Expression.

    model.result("pg2").feature("ptgr1").set("xdata", "expr");

//    In the Expression text field, type h_size.

    model.result("pg2").feature("ptgr1").set("xdataexpr", "h_size");

//    Locate the Coloring and Style section.
//    From the Width list, select 2.

    model.result("pg2").feature("ptgr1").set("linewidth", 2);

//    Find the Line markers subsection.
//    From the Marker list, select Square.

    model.result("pg2").feature("ptgr1").set("linemarker", "square");

//    Click the x-Axis Log Scale button in the Graphics toolbar.
//    Click the y-Axis Log Scale button in the Graphics toolbar.
//    In the 1D Plot Group 2 toolbar, click Plot.

    model.result("pg2").run();

//    In the Model Builder window, expand the Results > Datasets node.
//    Right-click Results > Datasets and choose More 3D Datasets > Mirror 3D.

    model.result().dataset().create("mir1", "Mirror3D");

//    In the Settings window for Mirror 3D, locate the Data section.
//    From the Dataset list, select Study 1/Parametric Solutions 1 (sol2).

    model.result().dataset("mir1").set("data", "dset2");

//    Locate the Plane Data section.
//    From the Plane list, select ZX-planes.

    model.result().dataset("mir1").set("quickplane", "zx");

//    Click to expand the Advanced section.
//    In the Results toolbar, click More Datasets and choose Mirror 3D.

    model.result().dataset().create("mir2", "Mirror3D");

//    In the Settings window for Mirror 3D, locate the Data section.
//    From the Dataset list, select Mirror 3D 1.

    model.result().dataset("mir2").set("data", "mir1");

//    Locate the Plane Data section.
//    From the Plane list, select xy-planes.

    model.result().dataset("mir2").set("quickplane", "xy");

//    In the Results toolbar, click 3D Plot Group.

    model.result().create("pg3", "PlotGroup3D");
    model.result("pg3").run();

//    In the Settings window for 3D Plot Group, locate the Data section.
//    From the Dataset list, select Mirror 3D 2.

    model.result("pg3").set("data", "mir2");

//    Locate the Plot Settings section.
//    Clear the Plot dataset edges checkbox.

    model.result("pg3").set("edges", false);

//    Click to expand the Selection section.
//    From the Geometric entity level list, select Domain.

    model.result("pg3").selection().geom("geom1", 3);

//    Select Domains 2, 3.

    model.result("pg3").selection().geom("geom1", 3);
    model.result("pg3").selection().set(2, 3);

//    Right-click 3D Plot Group 3 and choose Slice.

    model.result("pg3").create("slc1", "Slice");
    model.result("pg3").feature("slc1").set("evaluationsettings", "parent");

//    In the Settings window for Slice, locate the Expression section.
//    In the Expression text field, type emw.normEi.

    model.result("pg3").feature("slc1").set("expr", "emw.normEi");

//    Locate the Plane Data section.
//    From the Plane list, select xy-planes.

    model.result("pg3").feature("slc1").set("quickplane", "xy");

//    From the Entry method list, select Coordinates.

    model.result("pg3").feature("slc1").set("quickzmethod", "coord");

//    Locate the Coloring and Style section.
//    From the Color table list, select Opadometa.

    model.result("pg3").feature("slc1").set("colortable", "Opadometa");
    model.result("pg3").run();

//    In the Model Builder window, right-click 3D Plot Group 3 and choose Surface.

    model.result("pg3").create("surf1", "Surface");
    model.result("pg3").feature("surf1").set("evaluationsettings", "parent");

//    In the Settings window for Surface, locate the Coloring and Style section.
//    From the Color table list, select Amber.

    model.result("pg3").feature("surf1").set("colortable", "Amber");

//    Locate the Expression section.
//    In the Expression text field, type emw.normEi.

    model.result("pg3").feature("surf1").set("expr", "emw.normEi");

//    Right-click Surface 1 and choose Selection.

    model.result("pg3").feature("surf1").create("sel1", "Selection");

//    Select Boundaries 7, 10.

    model.result("pg3").feature("surf1").feature("sel1").selection().set(7, 10);
    model.result("pg3").run();

//    In the Model Builder window, right-click Surface 1 and choose Material Appearance.

    model.result("pg3").feature("surf1").create("mtrl1", "MaterialAppearance");
    model.result("pg3").run();

//    In the Settings window for Material Appearance, locate the Appearance section.
//    From the Appearance list, select Custom.

    model.result("pg3").feature("surf1").feature("mtrl1").set("appearance", "custom");

//    From the Material type list, select Chrome.

    model.result("pg3").feature("surf1").feature("mtrl1").set("family", "chrome");

//    Locate the Color section.
//    Select the Use the plot's color checkbox.

    model.result("pg3").feature("surf1").feature("mtrl1").set("useplotcolors", true);

//    In the 3D Plot Group 3 toolbar, click Plot.

    model.result("pg3").run();

//    Click the Zoom Extents button in the Graphics toolbar.

    model.title("Computing the Radar Cross Section of a Perfectly Conducting Sphere");

    model
         .description("A classic benchmark problem in computational electromagnetics is to solve for the radar cross section (RCS) of a sphere in free space illuminated by a plane wave. This example solves for the RCS of a metallic sphere that has a very high conductivity, which can be treated as a material with infinite conductivity. The results are compared to the analytic solution, and agreement is shown.");

    return model;
  }

  public static void main(String[] args) {
    Model model = run();
    run2(model);
  }

}
