{
  "format": "mathssim",
  "version": 1,
  "title": "Gradient Divergence Curl - Hand Method and M2S Check",
  "computeMode": "standard",
  "functions": [],
  "notation": {
    "r1": "\\mathbf{r}_1",
    "r2": "\\mathbf{r}_2",
    "r3": "\\mathbf{r}_3",
    "gradV1_hand": "\\left.\\nabla V\\right|_{\\mathbf{r}_1,\\,hand}",
    "gradV2_hand": "\\left.\\nabla V\\right|_{\\mathbf{r}_2,\\,hand}",
    "gradV3_hand": "\\left.\\nabla V\\right|_{\\mathbf{r}_3,\\,hand}",
    "divE1_hand": "\\left.\\nabla\\cdot\\mathbf{E}\\right|_{\\mathbf{r}_1,\\,hand}",
    "divE2_hand": "\\left.\\nabla\\cdot\\mathbf{E}\\right|_{\\mathbf{r}_2,\\,hand}",
    "divE3_hand": "\\left.\\nabla\\cdot\\mathbf{E}\\right|_{\\mathbf{r}_3,\\,hand}",
    "curlH1_hand": "\\left.\\nabla\\times\\mathbf{H}\\right|_{\\mathbf{r}_1,\\,hand}",
    "curlH2_hand": "\\left.\\nabla\\times\\mathbf{H}\\right|_{\\mathbf{r}_2,\\,hand}",
    "curlH3_hand": "\\left.\\nabla\\times\\mathbf{H}\\right|_{\\mathbf{r}_3,\\,hand}",
    "gradV1_num": "\\left.\\nabla V\\right|_{\\mathbf{r}_1,\\,M^2S}",
    "gradV2_num": "\\left.\\nabla V\\right|_{\\mathbf{r}_2,\\,M^2S}",
    "gradV3_num": "\\left.\\nabla V\\right|_{\\mathbf{r}_3,\\,M^2S}",
    "divE1_num": "\\left.\\nabla\\cdot\\mathbf{E}\\right|_{\\mathbf{r}_1,\\,M^2S}",
    "divE2_num": "\\left.\\nabla\\cdot\\mathbf{E}\\right|_{\\mathbf{r}_2,\\,M^2S}",
    "divE3_num": "\\left.\\nabla\\cdot\\mathbf{E}\\right|_{\\mathbf{r}_3,\\,M^2S}",
    "curlH1_num": "\\left.\\nabla\\times\\mathbf{H}\\right|_{\\mathbf{r}_1,\\,M^2S}",
    "curlH2_num": "\\left.\\nabla\\times\\mathbf{H}\\right|_{\\mathbf{r}_2,\\,M^2S}",
    "curlH3_num": "\\left.\\nabla\\times\\mathbf{H}\\right|_{\\mathbf{r}_3,\\,M^2S}"
  },
  "regions": [
    {
      "id": "heading-main",
      "type": "text",
      "x": 65,
      "y": 35,
      "w": 990,
      "content": "Gradient, Divergence and Curl: Exam Method + M²S Check",
      "heading": true
    },
    {
      "id": "note-purpose",
      "type": "text",
      "x": 65,
      "y": 160,
      "w": 990,
      "content": "Goal: learn the hand method you would use in an exam, then use M²S numerical partial derivatives only as a check. The hand result is derived first; the M²S result is calculated separately; agreement errors should be zero (up to numerical roundoff).",
      "heading": false
    },
    {
      "id": "point-r1",
      "type": "math",
      "x": 65,
      "y": 285,
      "w": 990,
      "target": "r1",
      "expr": "[1,2,3]"
    },
    {
      "id": "point-r2",
      "type": "math",
      "x": 65,
      "y": 510,
      "w": 990,
      "target": "r2",
      "expr": "[-1,0.5,2]"
    },
    {
      "id": "point-r3",
      "type": "math",
      "x": 65,
      "y": 735,
      "w": 990,
      "target": "r3",
      "expr": "[2,-1,0]"
    },
    {
      "id": "heading-fields",
      "type": "text",
      "x": 65,
      "y": 960,
      "w": 990,
      "content": "Fields used in the examples",
      "heading": true
    },
    {
      "id": "field-v",
      "type": "math",
      "x": 65,
      "y": 1085,
      "w": 990,
      "target": "V(x,y,z)",
      "expr": "x^2+2*y^2+3*z^2"
    },
    {
      "id": "field-ex",
      "type": "math",
      "x": 65,
      "y": 1265,
      "w": 990,
      "target": "Ex(x,y,z)",
      "expr": "x^2*y"
    },
    {
      "id": "field-ey",
      "type": "math",
      "x": 65,
      "y": 1445,
      "w": 990,
      "target": "Ey(x,y,z)",
      "expr": "x*y^2"
    },
    {
      "id": "field-ez",
      "type": "math",
      "x": 65,
      "y": 1625,
      "w": 990,
      "target": "Ez(x,y,z)",
      "expr": "z^3"
    },
    {
      "id": "field-hx",
      "type": "math",
      "x": 65,
      "y": 1805,
      "w": 990,
      "target": "Hx(x,y,z)",
      "expr": "y*z"
    },
    {
      "id": "field-hy",
      "type": "math",
      "x": 65,
      "y": 1985,
      "w": 990,
      "target": "Hy(x,y,z)",
      "expr": "z^2"
    },
    {
      "id": "field-hz",
      "type": "math",
      "x": 65,
      "y": 2165,
      "w": 990,
      "target": "Hz(x,y,z)",
      "expr": "x*y"
    },
    {
      "id": "heading-exam",
      "type": "text",
      "x": 65,
      "y": 2345,
      "w": 990,
      "content": "1. Hand calculation method for an exam",
      "heading": true
    },
    {
      "id": "exam-gradient",
      "type": "text",
      "x": 65,
      "y": 2470,
      "w": 990,
      "content": "GRADIENT OF A SCALAR FIELD\nFormula: ∇V = [∂V/∂x, ∂V/∂y, ∂V/∂z]\nFor V = x^2 + 2y^2 + 3z^2:\n∂V/∂x = 2x,    ∂V/∂y = 4y,    ∂V/∂z = 6z\nTherefore: ∇V = [2x, 4y, 6z]\nExam rule: differentiate first, then substitute the point.",
      "heading": false
    },
    {
      "id": "exam-divergence",
      "type": "text",
      "x": 65,
      "y": 2715,
      "w": 990,
      "content": "DIVERGENCE OF A VECTOR FIELD\nFor E = [Ex,Ey,Ez], formula: ∇·E = ∂Ex/∂x + ∂Ey/∂y + ∂Ez/∂z\nHere Ex=x^2y, Ey=xy^2, Ez=z^3.\n∂Ex/∂x=2xy,    ∂Ey/∂y=2xy,    ∂Ez/∂z=3z^2\nTherefore: ∇·E = 4xy + 3z^2.",
      "heading": false
    },
    {
      "id": "exam-curl",
      "type": "text",
      "x": 65,
      "y": 2936,
      "w": 990,
      "content": "CURL OF A VECTOR FIELD\nFor H=[Hx,Hy,Hz], formula:\n∇×H = [∂Hz/∂y - ∂Hy/∂z,  ∂Hx/∂z - ∂Hz/∂x,  ∂Hy/∂x - ∂Hx/∂y]\nHere Hx=yz, Hy=z^2, Hz=xy.\nFirst component: x - 2z\nSecond component: y - y = 0\nThird component: 0 - z = -z\nTherefore: ∇×H = [x-2z, 0, -z].",
      "heading": false
    },
    {
      "id": "heading-hand-functions",
      "type": "text",
      "x": 65,
      "y": 3229,
      "w": 990,
      "content": "2. Encode the hand-derived formulae",
      "heading": true
    },
    {
      "id": "hand-grad-fn",
      "type": "math",
      "x": 65,
      "y": 3354,
      "w": 990,
      "target": "gradV_hand(x,y,z)",
      "expr": "[2*x,4*y,6*z]"
    },
    {
      "id": "hand-div-fn",
      "type": "math",
      "x": 65,
      "y": 3579,
      "w": 990,
      "target": "divE_hand(x,y,z)",
      "expr": "4*x*y+3*z^2"
    },
    {
      "id": "hand-curl-fn",
      "type": "math",
      "x": 65,
      "y": 3759,
      "w": 990,
      "target": "curlH_hand(x,y,z)",
      "expr": "[x-2*z,0,-z]"
    },
    {
      "id": "substitution-r1",
      "type": "text",
      "x": 65,
      "y": 3984,
      "w": 990,
      "content": "At r1=[1,2,3]:\n∇V = [2(1),4(2),6(3)] = [2,8,18]\n∇·E = 4(1)(2)+3(3^2) = 8+27 = 35\n∇×H = [1-2(3),0,-3] = [-5,0,-3]",
      "heading": false
    },
    {
      "id": "substitution-r2",
      "type": "text",
      "x": 65,
      "y": 4181,
      "w": 990,
      "content": "At r2=[-1,0.5,2]:\n∇V = [2(-1),4(0.5),6(2)] = [-2,2,12]\n∇·E = 4(-1)(0.5)+3(2^2) = -2+12 = 10\n∇×H = [-1-2(2),0,-2] = [-5,0,-2]",
      "heading": false
    },
    {
      "id": "substitution-r3",
      "type": "text",
      "x": 65,
      "y": 4378,
      "w": 990,
      "content": "At r3=[2,-1,0]:\n∇V = [2(2),4(-1),6(0)] = [4,-4,0]\n∇·E = 4(2)(-1)+3(0^2) = -8\n∇×H = [2-2(0),0,-0] = [2,0,0]",
      "heading": false
    },
    {
      "id": "heading-hand-results",
      "type": "text",
      "x": 65,
      "y": 4575,
      "w": 990,
      "content": "3. M²S evaluation of the hand-derived formulae",
      "heading": true
    },
    {
      "id": "grad-hand-r1",
      "type": "math",
      "x": 65,
      "y": 4700,
      "w": 990,
      "target": "gradV1_hand",
      "expr": "gradV_hand(at(r1,0),at(r1,1),at(r1,2))"
    },
    {
      "id": "div-hand-r1",
      "type": "math",
      "x": 65,
      "y": 4880,
      "w": 990,
      "target": "divE1_hand",
      "expr": "divE_hand(at(r1,0),at(r1,1),at(r1,2))"
    },
    {
      "id": "curl-hand-r1",
      "type": "math",
      "x": 65,
      "y": 5060,
      "w": 990,
      "target": "curlH1_hand",
      "expr": "curlH_hand(at(r1,0),at(r1,1),at(r1,2))"
    },
    {
      "id": "grad-hand-r2",
      "type": "math",
      "x": 65,
      "y": 5240,
      "w": 990,
      "target": "gradV2_hand",
      "expr": "gradV_hand(at(r2,0),at(r2,1),at(r2,2))"
    },
    {
      "id": "div-hand-r2",
      "type": "math",
      "x": 65,
      "y": 5420,
      "w": 990,
      "target": "divE2_hand",
      "expr": "divE_hand(at(r2,0),at(r2,1),at(r2,2))"
    },
    {
      "id": "curl-hand-r2",
      "type": "math",
      "x": 65,
      "y": 5600,
      "w": 990,
      "target": "curlH2_hand",
      "expr": "curlH_hand(at(r2,0),at(r2,1),at(r2,2))"
    },
    {
      "id": "grad-hand-r3",
      "type": "math",
      "x": 65,
      "y": 5780,
      "w": 990,
      "target": "gradV3_hand",
      "expr": "gradV_hand(at(r3,0),at(r3,1),at(r3,2))"
    },
    {
      "id": "div-hand-r3",
      "type": "math",
      "x": 65,
      "y": 5960,
      "w": 990,
      "target": "divE3_hand",
      "expr": "divE_hand(at(r3,0),at(r3,1),at(r3,2))"
    },
    {
      "id": "curl-hand-r3",
      "type": "math",
      "x": 65,
      "y": 6140,
      "w": 990,
      "target": "curlH3_hand",
      "expr": "curlH_hand(at(r3,0),at(r3,1),at(r3,2))"
    },
    {
      "id": "heading-numerical",
      "type": "text",
      "x": 65,
      "y": 6320,
      "w": 990,
      "content": "4. Independent M²S numerical partial-derivative check",
      "heading": true
    },
    {
      "id": "grad-num-r1",
      "type": "math",
      "x": 65,
      "y": 6445,
      "w": 990,
      "target": "gradV1_num",
      "expr": "[partial(V(x,at(r1,1),at(r1,2)),x,at(r1,0)),partial(V(at(r1,0),y,at(r1,2)),y,at(r1,1)),partial(V(at(r1,0),at(r1,1),z),z,at(r1,2))]"
    },
    {
      "id": "div-num-r1",
      "type": "math",
      "x": 65,
      "y": 6670,
      "w": 990,
      "target": "divE1_num",
      "expr": "partial(Ex(x,at(r1,1),at(r1,2)),x,at(r1,0))+partial(Ey(at(r1,0),y,at(r1,2)),y,at(r1,1))+partial(Ez(at(r1,0),at(r1,1),z),z,at(r1,2))"
    },
    {
      "id": "curl-num-r1",
      "type": "math",
      "x": 65,
      "y": 6850,
      "w": 990,
      "target": "curlH1_num",
      "expr": "[partial(Hz(at(r1,0),y,at(r1,2)),y,at(r1,1))-partial(Hy(at(r1,0),at(r1,1),z),z,at(r1,2)),partial(Hx(at(r1,0),at(r1,1),z),z,at(r1,2))-partial(Hz(x,at(r1,1),at(r1,2)),x,at(r1,0)),partial(Hy(x,at(r1,1),at(r1,2)),x,at(r1,0))-partial(Hx(at(r1,0),y,at(r1,2)),y,at(r1,1))]"
    },
    {
      "id": "grad-num-r2",
      "type": "math",
      "x": 65,
      "y": 7075,
      "w": 990,
      "target": "gradV2_num",
      "expr": "[partial(V(x,at(r2,1),at(r2,2)),x,at(r2,0)),partial(V(at(r2,0),y,at(r2,2)),y,at(r2,1)),partial(V(at(r2,0),at(r2,1),z),z,at(r2,2))]"
    },
    {
      "id": "div-num-r2",
      "type": "math",
      "x": 65,
      "y": 7300,
      "w": 990,
      "target": "divE2_num",
      "expr": "partial(Ex(x,at(r2,1),at(r2,2)),x,at(r2,0))+partial(Ey(at(r2,0),y,at(r2,2)),y,at(r2,1))+partial(Ez(at(r2,0),at(r2,1),z),z,at(r2,2))"
    },
    {
      "id": "curl-num-r2",
      "type": "math",
      "x": 65,
      "y": 7480,
      "w": 990,
      "target": "curlH2_num",
      "expr": "[partial(Hz(at(r2,0),y,at(r2,2)),y,at(r2,1))-partial(Hy(at(r2,0),at(r2,1),z),z,at(r2,2)),partial(Hx(at(r2,0),at(r2,1),z),z,at(r2,2))-partial(Hz(x,at(r2,1),at(r2,2)),x,at(r2,0)),partial(Hy(x,at(r2,1),at(r2,2)),x,at(r2,0))-partial(Hx(at(r2,0),y,at(r2,2)),y,at(r2,1))]"
    },
    {
      "id": "grad-num-r3",
      "type": "math",
      "x": 65,
      "y": 7705,
      "w": 990,
      "target": "gradV3_num",
      "expr": "[partial(V(x,at(r3,1),at(r3,2)),x,at(r3,0)),partial(V(at(r3,0),y,at(r3,2)),y,at(r3,1)),partial(V(at(r3,0),at(r3,1),z),z,at(r3,2))]"
    },
    {
      "id": "div-num-r3",
      "type": "math",
      "x": 65,
      "y": 7930,
      "w": 990,
      "target": "divE3_num",
      "expr": "partial(Ex(x,at(r3,1),at(r3,2)),x,at(r3,0))+partial(Ey(at(r3,0),y,at(r3,2)),y,at(r3,1))+partial(Ez(at(r3,0),at(r3,1),z),z,at(r3,2))"
    },
    {
      "id": "curl-num-r3",
      "type": "math",
      "x": 65,
      "y": 8110,
      "w": 990,
      "target": "curlH3_num",
      "expr": "[partial(Hz(at(r3,0),y,at(r3,2)),y,at(r3,1))-partial(Hy(at(r3,0),at(r3,1),z),z,at(r3,2)),partial(Hx(at(r3,0),at(r3,1),z),z,at(r3,2))-partial(Hz(x,at(r3,1),at(r3,2)),x,at(r3,0)),partial(Hy(x,at(r3,1),at(r3,2)),x,at(r3,0))-partial(Hx(at(r3,0),y,at(r3,2)),y,at(r3,1))]"
    },
    {
      "id": "heading-agreement",
      "type": "text",
      "x": 65,
      "y": 8335,
      "w": 990,
      "content": "5. Agreement checks: hand method versus M²S partial()",
      "heading": true
    },
    {
      "id": "agreement-note",
      "type": "text",
      "x": 65,
      "y": 8460,
      "w": 990,
      "content": "For vectors, use norm(numerical - hand). For scalars, use abs(numerical - hand). A value of 0 means exact agreement at displayed precision; tiny nonzero values would be numerical roundoff.",
      "heading": false
    },
    {
      "id": "grad-error-r1",
      "type": "math",
      "x": 65,
      "y": 8585,
      "w": 990,
      "target": "gradError1",
      "expr": "norm(gradV1_num-gradV1_hand)"
    },
    {
      "id": "div-error-r1",
      "type": "math",
      "x": 65,
      "y": 8765,
      "w": 990,
      "target": "divError1",
      "expr": "abs(divE1_num-divE1_hand)"
    },
    {
      "id": "curl-error-r1",
      "type": "math",
      "x": 65,
      "y": 8945,
      "w": 990,
      "target": "curlError1",
      "expr": "norm(curlH1_num-curlH1_hand)"
    },
    {
      "id": "grad-error-r2",
      "type": "math",
      "x": 65,
      "y": 9125,
      "w": 990,
      "target": "gradError2",
      "expr": "norm(gradV2_num-gradV2_hand)"
    },
    {
      "id": "div-error-r2",
      "type": "math",
      "x": 65,
      "y": 9305,
      "w": 990,
      "target": "divError2",
      "expr": "abs(divE2_num-divE2_hand)"
    },
    {
      "id": "curl-error-r2",
      "type": "math",
      "x": 65,
      "y": 9485,
      "w": 990,
      "target": "curlError2",
      "expr": "norm(curlH2_num-curlH2_hand)"
    },
    {
      "id": "grad-error-r3",
      "type": "math",
      "x": 65,
      "y": 9665,
      "w": 990,
      "target": "gradError3",
      "expr": "norm(gradV3_num-gradV3_hand)"
    },
    {
      "id": "div-error-r3",
      "type": "math",
      "x": 65,
      "y": 9845,
      "w": 990,
      "target": "divError3",
      "expr": "abs(divE3_num-divE3_hand)"
    },
    {
      "id": "curl-error-r3",
      "type": "math",
      "x": 65,
      "y": 10025,
      "w": 990,
      "target": "curlError3",
      "expr": "norm(curlH3_num-curlH3_hand)"
    },
    {
      "id": "table-hand-results",
      "type": "table",
      "x": 65,
      "y": 10205,
      "w": 990,
      "h": 330,
      "title": "Hand-derived results",
      "headersText": "Point\ngrad V x\ngrad V y\ngrad V z\ndiv E\ncurl H x\ncurl H y\ncurl H z",
      "rowLabels": "",
      "expr": "cols([1,2,3],[at(gradV1_hand,0),at(gradV2_hand,0),at(gradV3_hand,0)],[at(gradV1_hand,1),at(gradV2_hand,1),at(gradV3_hand,1)],[at(gradV1_hand,2),at(gradV2_hand,2),at(gradV3_hand,2)],[divE1_hand,divE2_hand,divE3_hand],[at(curlH1_hand,0),at(curlH2_hand,0),at(curlH3_hand,0)],[at(curlH1_hand,1),at(curlH2_hand,1),at(curlH3_hand,1)],[at(curlH1_hand,2),at(curlH2_hand,2),at(curlH3_hand,2)])",
      "precision": "8"
    },
    {
      "id": "table-agreement",
      "type": "table",
      "x": 65,
      "y": 10612,
      "w": 990,
      "h": 280,
      "title": "Agreement errors: M²S numerical check minus hand result",
      "headersText": "Point\nGradient error norm\nDivergence abs error\nCurl error norm",
      "rowLabels": "",
      "expr": "cols([1,2,3],[gradError1,gradError2,gradError3],[divError1,divError2,divError3],[curlError1,curlError2,curlError3])",
      "precision": "12"
    },
    {
      "id": "exam-summary",
      "type": "text",
      "x": 65,
      "y": 10969,
      "w": 990,
      "content": "EXAM CHECKLIST\nGradient: write [∂/∂x, ∂/∂y, ∂/∂z] acting on one scalar field.\nDivergence: differentiate each vector component with respect to its matching coordinate, then add.\nCurl: write the three-component formula carefully; sign/order mistakes are the common error.\nAlways differentiate before substituting the numerical point. Then substitute x, y, z and simplify.",
      "heading": false
    }
  ]
}