diff --git a/Microcoil/Formulations.pro b/Microcoil/Formulations.pro index 5d1f7abc962737c138dfb6623d3a2064747f218b..d422eb4dc59181525b1f7462b99a78a95c711e69 100644 --- a/Microcoil/Formulations.pro +++ b/Microcoil/Formulations.pro @@ -272,12 +272,14 @@ Formulation { Galerkin { DtDtDof[ nu[] * ( Normal[] /\ Dof{a} ) /\ Normal[] , {a} ]; In SilverMullerBoundary; Integration I1; Jacobian Sur; } + /* no contribution Galerkin { DtDof[ nu[] * ( Normal[] /\ Dof{d v} ) /\ Normal[] , {a} ]; In SilverMullerBoundary; Integration I1; Jacobian Sur; } Galerkin { DtDtDof[ nu[] * ( Normal[] /\ Dof{a} ) /\ Normal[] , {d v} ]; In SilverMullerBoundary; Integration I1; Jacobian Sur; } Galerkin { DtDof[ nu[] * ( Normal[] /\ Dof{d v} ) /\ Normal[] , {d v} ]; In SilverMullerBoundary; Integration I1; Jacobian Sur; } + */ } } @@ -561,13 +563,15 @@ PostProcessing { { Name v ; Value { Term { [ {v} ] ; In DomainC ; Jacobian Vol ; } } } { Name e ; Value { Term { [ -Dt[{a}]-{d v} ] ; In Domain ; Jacobian Vol ; } } } - { Name j ; Value { + { Name j ; Value {// j = sigma e - dt[d] = sigma e - epsilon dt[e] Term { [ sigma[] *(-Dt[{a}]-{d v}) ] ; In DomainC ; Jacobian Vol ; } - Term { [ epsilon[]*(-Dt[{a}]-{d v}) ] ; In DomainC ; Jacobian Vol ; } + Term { [ -epsilon[]*Dt[-Dt[{a}]-{d v}] ] ; In DomainC ; Jacobian Vol ; } } } { Name d ; Value { Term { [ epsilon[]*(-Dt[{a}]-{d v}) ] ; In Domain ; Jacobian Vol ; } } } + { Name s; Value { Term { [ (-Dt[{a}]-{d v}) /\ (nu[] * {d a}) ]; In Domain; Jacobian Vol; } } } + { Name I ; Value { Term { [ {I} ] ; In SurfaceElec ; } } } { Name U ; Value { Term { [ {U} ] ; In SurfaceElec ; } } } @@ -576,10 +580,24 @@ PostProcessing { Integral { Type Global ; [ -sigma[] * (Dt[{a}] + {d v}) * BF{d v} ] ; In DomainC ; Jacobian Vol ; Integration I1 ; } Integral { Type Global ; - [ -epsilon[] * (Dt[{a}] + {d v}) * BF{d v} ] ; In Domain ; Jacobian Vol ; Integration I1 ; } + [ epsilon[] * Dt[ Dt[{a}] + {d v} ] * BF{d v} ] ; In Domain ; Jacobian Vol ; Integration I1 ; } } } + { Name Wm; Value { // Magnetic energy Wm = 1/2*L*I^2; + Integral { Type Global; + [ 1/2 * nu[] * SquNorm[{d a}] ]; In Domain; Jacobian Vol; Integration I1; } + } } + { Name L_from_Wm; Value { Term { Type Global; [ 2*$MagneticEnergy/SquNorm[$CurrentOfCoil] ]; In DomainDummy; } } } + + + { Name We; Value { // Electric energy We = 1/2*C*V^2; + // We = \int_D e*d dD = \int_D (-dt[a]-grad v)*epsilon*(-dt[a]-grad v) dD + Integral { Type Global; + [ 1/2 * epsilon[] * SquNorm[-Dt[{a}]-{d v}] ]; In Domain; Jacobian Vol; Integration I1; } + } } + { Name C_from_We; Value { Term { Type Global; [ 2*$ElectricEnergy/SquNorm[$VoltageOfCoil] ]; In DomainDummy; } } } + { Name Cpos_fromEnergy ; Value { Integral { Type Global ; diff --git a/Microcoil/microcoil.geo b/Microcoil/microcoil.geo index da0376c5fedd3d9167f0679c2ed2a6253cf243a5..39fa563cdd54bcae4d54e676c7f6d23d1920f33a 100644 --- a/Microcoil/microcoil.geo +++ b/Microcoil/microcoil.geo @@ -101,12 +101,12 @@ Call geoBranch; Call geoBranch; If (nTurns > 1) -For iTurn In {0:nTurns-2} -Call geoBranch; -Call geoBranch; -Call geoBranch; -Call geoBranch; -EndFor + For iTurn In {0:nTurns-2} + Call geoBranch; + Call geoBranch; + Call geoBranch; + Call geoBranch; + EndFor EndIf dl = dl/2 -wWire; @@ -143,11 +143,11 @@ pointRef = p1; iBorderCoil=-1; iBorderCoil++; lBorderCoil[iBorderCoil] = lta_Start; For i In {0:iBorder1} -iBorderCoil++; lBorderCoil[iBorderCoil] = lBorder2[i]; + iBorderCoil++; lBorderCoil[iBorderCoil] = lBorder2[i]; EndFor iBorderCoil++; lBorderCoil[iBorderCoil] = -ltb_End; For i In {0:iBorder2} -iBorderCoil++; lBorderCoil[iBorderCoil] = -lBorder1[iBorder2-i]; + iBorderCoil++; lBorderCoil[iBorderCoil] = -lBorder1[iBorder2-i]; EndFor @@ -179,28 +179,28 @@ surfelecin = allSurfCoil[0] ; surfelecout = allSurfCoil[ #allSurfCoil[]-1] ; For k In {0:#allSurfCoil[]-1} -vol[] = Extrude {0, 0, wair} { Surface{allSurfCoil[k]}; Layers{lv[], bumpv1[]}; Recombine;}; -If(k==0 || k == #allSurfCoil[]-1) - volcoil[] += vol[1] ; -EndIf -If(k>0 &&k< #allSurfCoil[]-1) - volaircut[] += vol[1] ; -EndIf -If(k>0 && k<#allSurfCoil[]-1) - cutcoil[] += vol[5]; - skincoil2[] += vol[0]; -EndIf -If(k==0) - skincoil2[] += vol[4]; -EndIf -If(k==#allSurfCoil[]-1) - skincoil2[] += vol[2]; -EndIf + vol[] = Extrude {0, 0, wair} { Surface{allSurfCoil[k]}; Layers{lv[], bumpv1[]}; Recombine;}; + If(k==0 || k == #allSurfCoil[]-1) + volcoil[] += vol[1] ; + EndIf + If(k>0 &&k< #allSurfCoil[]-1) + volaircut[] += vol[1] ; + EndIf + If(k>0 && k<#allSurfCoil[]-1) + cutcoil[] += vol[5]; + skincoil2[] += vol[0]; + EndIf + If(k==0) + skincoil2[] += vol[4]; + EndIf + If(k==#allSurfCoil[]-1) + skincoil2[] += vol[2]; + EndIf -vol[] = Extrude {0, 0, wcoil} { Surface{vol[0]}; Layers{nl_coil};Recombine;}; -volcoil[] += vol[1] ; -vol[] = Extrude {0, 0, wairtop} { Surface{vol[0]}; Layers{lv[],bumpv2[]};Recombine;}; -volair[] += vol[1] ; + vol[] = Extrude {0, 0, wcoil} { Surface{vol[0]}; Layers{nl_coil};Recombine;}; + volcoil[] += vol[1] ; + vol[] = Extrude {0, 0, wairtop} { Surface{vol[0]}; Layers{lv[],bumpv2[]};Recombine;}; + volair[] += vol[1] ; EndFor //air around @@ -228,39 +228,51 @@ surfbox[] -= {allSurfCoil[], sAir}; skincoil[] = CombinedBoundary{ Volume{volcoil[]};} ; skincoil[] -= {surfelecin, surfelecout}; -Physical Volume (COIL) = {volcoil[]} ; -Physical Surface (ELECIN) = { surfelecin } ; -Physical Surface (ELECOUT) = { surfelecout } ; -Physical Surface (SKINCOIL) = { skincoil[] } ; +Physical Volume ("Coil", COIL) = {volcoil[]} ; +Physical Surface ("Electrode IN", ELECIN) = { surfelecin } ; +Physical Surface ("Electrode OUT", ELECOUT) = { surfelecout } ; +Physical Surface ("Boundary of coil", SKINCOIL) = { skincoil[] } ; Physical Surface (SKINCOIL_2) = { skincoil2[] } ; -Physical Volume (AIR) = {volair[]} ; -Physical Volume (AIRCUT) = {volaircut[]} ; -Physical Surface (SURFBOX) = { -surfbox[], allSurfCoil[], sAir} ; +Physical Volume ("Air", AIR) = {volair[]} ; +Physical Volume ("Air cut", AIRCUT) = {volaircut[]} ; + +bnd_out() = Unique(Abs(CombinedBoundary{Volume{Volume{:}};})); +bnd_out() -= {surfelecin, surfelecout}; +Physical Surface ("Outer boundary", SURFBOX) = {bnd_out()} ; // CutCoil Physical Surface (CUTCOIL) = { cutcoil[] } ; - - Physical Surface (SURFBOXONESIDE) = {allSurfCoil[]} ; - linBndSurfCoil[] = CombinedBoundary{Surface{allSurfCoil[]};}; - Physical Line (CUTCOILLINE) = {linBndSurfCoil[{1:11:2,14}]} ; //For k In{0:#linBndSurfCoil[]-1} //Printf("%g %g",k,linBndSurfCoil[k]); EndFor -Physical Point (POINTREFPOT) = {p1} ; +Physical Point ("Ref. potential point", POINTREFPOT) = {p1} ; + +Recursive Color SkyBlue { Volume{volair[],volaircut[]}; } +Recursive Color Red { Volume{volcoil[]}; } +Recursive Color Blue { Surface{surfelecin}; } +Recursive Color Green { Surface{surfelecout}; } + + +// Hide{ Line{ Line '*'}; Point{ Point '*'}; } +// nice_view[] = Boundary{ Surface{ skincoil[]};}; +// Show{ Line{nice_view[]}; } -Color Red { Volume{volair[],volaircut[]}; } -Color Red { Surface{ Boundary{Volume{volair[],volaircut[]};} }; } -Color Gold { Volume{volcoil[]}; } -Color Gold { Surface{skincoil[]}; } -Color Red { Surface{surfelecin}; } -Color Green { Surface{surfelecout}; } +// Correcting Normals => necessary for Full Wave!!! +// Getting surfaces with z=0, those are correct +bb() = BoundingBox Volume {Volume{:}}; +sX = bb(3)-bb(0); +sY = bb(4)-bb(1); +sZ = bb(5)-bb(2); -Hide{ Line{ Line '*'}; Point{ Point '*'}; } -nice_view[] = Boundary{ Surface{ skincoil[]};}; -Show{ Line{nice_view[]}; } +tol = sZ/20; +cut_z0() = Surface In BoundingBox {bb(0)-tol, bb(1)-tol, -tol, sX, sY, 2*tol}; // 1/2, 1/4 +// Printf("",cut_z0()); +sur_reverse() = bnd_out(); +sur_reverse() -= cut_z0(); +Reverse Surface {sur_reverse()}; diff --git a/Microcoil/microcoil.pro b/Microcoil/microcoil.pro index f3d5d560ddb87eedfdccecf95b083cb680ae53fe..b5ca71eb52bbe66c35c62c154d1d8af3d38f4570 100644 --- a/Microcoil/microcoil.pro +++ b/Microcoil/microcoil.pro @@ -35,12 +35,11 @@ Group { If(Flag_AnalysisType==3) SurfaceGe0 = Region[ {} ] ; - SilverMullerBoundary = Region[ {SURFBOX} ] ; + SilverMullerBoundary = Region[ {SURFBOX, ELECIN, ELECOUT} ] ; DomainU = Region[ {DomainC} ]; // support Domain for the potential - EndIf - If(Flag_AnalysisType!=3) - SurfaceGe0 = Region[ {SURFBOX} ] ; - SilverMullerBoundary = Region[ {SURFBOX} ] ; + Else + SurfaceGe0 = Region[ {SURFBOX, ELECIN, ELECOUT} ] ; + SilverMullerBoundary = Region[ {} ] ; DomainU = Region[ {DomainC, DomainCC} ]; // support Domain for the potential EndIf @@ -53,6 +52,7 @@ Group { Domain = Region[ {DomainCC, DomainC} ] ; DomainTot = Region[ {DomainCC, DomainC, SilverMullerBoundary} ] ; + DomainDummy = Region[{123456}]; } @@ -117,7 +117,7 @@ Constraint { } Dir = "res/"; -ppo = "Output/"; +ppo = "{Output/"; Include "JacInt_Lib.pro" Include "Formulations.pro" @@ -147,10 +147,23 @@ PostOperation PostOp~{1} UsingPost MagDyn_av_3D { Print[ j, OnElementsOf DomainC, File StrCat[Dir,"j.pos"] ] ; Print[ v, OnElementsOf DomainC, File StrCat[Dir,"vs.pos"] ] ; - Print[ U, OnRegion ElecCoil, Format Table, SendToServer StrCat[ppo,"U_RL"], Color "Ivory", File > StrCat[Dir, "U_RL.dat"] ] ; - Print[ I, OnRegion ElecCoil, Format Table, SendToServer StrCat[ppo,"I_RL"], Color "Ivory", File > StrCat[Dir, "I_RL.dat"] ] ; - Print[ Z, OnRegion ElecCoil, Format Table, SendToServer StrCat[ppo,"Z_RL"], Color "Ivory", File > StrCat[Dir, "Z_RL.dat"] ] ; - Print[ L, OnRegion ElecCoil, Format Table, SendToServer StrCat[ppo,"L_RL"], Color "Ivory", File > StrCat[Dir, "L_RL.dat"] ] ; + Print[ U, OnRegion ElecCoil, Format Table, + SendToServer StrCat[ppo,"01Voltage"]{0}, Units "V", Color "Ivory", + File > StrCat[Dir, "U_RL.dat"] ] ; + Print[ I, OnRegion ElecCoil, Format Table, + SendToServer StrCat[ppo,"02Re(Current) RL"]{0}, Units "A", Color "Ivory", + File > StrCat[Dir, "I_RL.dat"] ] ; + Print[ I, OnRegion ElecCoil, Format Table, + SendToServer StrCat[ppo,"03Im(Current) RL"]{1}, Units "A", Color "Ivory"] ; + + Print[ Z, OnRegion ElecCoil, Format Table, + SendToServer StrCat[ppo,"04R"]{0}, Units "Ω", Color "Ivory", + Color "Ivory", File > StrCat[Dir, "Z_RL.dat"] ] ; + Print[ Z, OnRegion ElecCoil, Format Table, + SendToServer StrCat[ppo,"05X"]{1}, Units "Ω", Color "Ivory"] ; + + Print[ L, OnRegion ElecCoil, Format Table, + SendToServer StrCat[ppo,"10L_RL"], Color "LightSeaGreen", Units "H", File > StrCat[Dir, "L_RL.dat"] ] ; } PostOperation PostOp~{2} UsingPost Electrostatics_a0v0_v { @@ -158,20 +171,27 @@ PostOperation PostOp~{2} UsingPost Electrostatics_a0v0_v { Print[ v0, OnElementsOf DomainCC, File StrCat[Dir, Sprintf("v0_flag%g.pos", Flag_AnalysisType)] ] ; Print[ v1, OnElementsOf DomainCC, File StrCat[Dir, Sprintf("v1_flag%g.pos", Flag_AnalysisType)] ] ; Print[ e, OnElementsOf DomainCC, File StrCat[Dir, Sprintf("e_flag%g.pos", Flag_AnalysisType)] ] ; - - Print[ Ipos_RL, OnRegion ElecCoil, Format FrequencyTable ] ; - Print[ Ipos_RLC, OnRegion ElecCoil, Format FrequencyTable ] ; // all Ipos_wcapa - //Print[ Ipos_incapa, OnRegion ElecCoil, Format FrequencyTable ] ; - //Print[ Cpos_incapa, OnRegion ElecCoil, Format FrequencyTable ] ; // == Cpos_fromEnergy - Print[ Cpos_fromEnergy, OnRegion ElecCoil, Format FrequencyTable ] ; - // Print[ Cpos_fromEnergy[Domain], OnRegion ElecCoil, Format FrequencyTable ] ; //== idem previous line - // Print[ Cpos_fromEnergy[Domain], OnGlobal, Format Table ] ; //== idem previous line - - Print[ Ipos_RL, OnRegion #{ElecCoil}, Format FrequencyTable, File > StrCat[Dir, Sprintf("IRL_flag%g.dat", Flag_AnalysisType)] ]; - Print[ Ipos_RLC, OnRegion #{ElecCoil}, Format FrequencyTable, File > StrCat[Dir, Sprintf("IRLC_flag%g.dat", Flag_AnalysisType)] ]; - Print[ Ipos_incapa, OnRegion #{ElecCoil}, Format FrequencyTable, File > StrCat[Dir, Sprintf("Iin_flag%g.dat", Flag_AnalysisType)] ]; - Print[ Cpos_incapa, OnRegion #{ElecCoil}, Format FrequencyTable, File > StrCat[Dir, Sprintf("Cin_flag%g.dat", Flag_AnalysisType)] ]; - Print[ Cpos_fromEnergy, OnRegion #{ElecCoil}, Format FrequencyTable, File > StrCat[Dir, Sprintf("Ce_flag%g.dat", Flag_AnalysisType)] ]; + /* + Print[ Ipos_RL, OnRegion #{ElecCoil}, Format FrequencyTable, + SendToServer StrCat[po,"01Re(Current) RL"]{0}, Units "A", Color "Ivory", + File > StrCat[Dir, Sprintf("IRL_flag%g.dat", Flag_AnalysisType)] ]; + Print[ Ipos_RL, OnRegion #{ElecCoil}, Format FrequencyTable, + SendToServer StrCat[po,"02Im(Current) RL"]{1}, Units "A", Color "Ivory"]; + + Print[ Ipos_RLC, OnRegion #{ElecCoil}, Format FrequencyTable, + SendToServer StrCat[ppo,"11Re(Current) RLC"]{0}, Units "A", Color "Ivory", + File > StrCat[Dir, Sprintf("IRLC_flag%g.dat", Flag_AnalysisType)] ]; + Print[ Ipos_RLC, OnRegion #{ElecCoil}, Format FrequencyTable, + SendToServer StrCat[ppo,"12Im(Current) RLC"]{1}, Units "A", Color "Ivory"]; + + Print[ Ipos_incapa, OnRegion #{ElecCoil}, Format FrequencyTable, + File > StrCat[Dir, Sprintf("Iin_flag%g.dat", Flag_AnalysisType)] ]; + Print[ Cpos_incapa, OnRegion #{ElecCoil}, Format FrequencyTable, + File > StrCat[Dir, Sprintf("Cin_flag%g.dat", Flag_AnalysisType)] ]; + */ + Print[ Cpos_fromEnergy, OnRegion #{ElecCoil}, Format FrequencyTable, + SendToServer StrCat[ppo,"80C MQS+ES"], Units 'F', Color "LightSeaGreen", + File > StrCat[Dir, Sprintf("Ce_flag%g.dat", Flag_AnalysisType)] ]; } PostOperation PostOp~{3} UsingPost FullWave_av_3D { @@ -179,12 +199,26 @@ PostOperation PostOp~{3} UsingPost FullWave_av_3D { Print[ j, OnElementsOf DomainC, File StrCat[Dir, "j_fw.pos"]] ; Print[ v, OnElementsOf DomainC, File StrCat[Dir, "v_fw.pos"]] ; Print[ e, OnElementsOf Domain, File StrCat[Dir, "e_fw.pos"]] ; - //Print[ d, OnElementsOf Domain, File "d_fw.pos"] ; - - Print[ U, OnRegion #{ElecCoil}, Format Table] ; - Print[ I, OnRegion #{ElecCoil}, Format Table] ; - Print[ Ipos, OnRegion #{ElecCoil}, Format Table] ; - Print[ Ipos, OnRegion #{ElecCoil}, Format Table, File > StrCat[Dir, Sprintf("I_flag%g.dat", Flag_AnalysisType)] ]; - - //Print[ Ipos[Domain], OnGlobal, Format FrequencyTable, File > Sprintf("I_flag%g.dat", Flag_FullWave)] ; + Print[ s, OnElementsOf Domain, File StrCat[Dir, "s_fw.pos"]] ; + + Print[ U, OnRegion ElecCoil, Format RegionTable, StoreInVariable $VoltageOfCoil, + SendToServer StrCat[ppo,"00Voltage"], Units "V", Color "Ivory" ]; + Print[ I, OnRegion ElecCoil, Format RegionTable, StoreInVariable $CurrentOfCoil, + SendToServer StrCat[ppo,"01Re(Current)"]{0}, Units "A", Color "Ivory" ]; + Print[ I, OnRegion ElecCoil, Format RegionTable, + SendToServer StrCat[ppo,"02Im(Current)"]{1}, Units "A", Color "Ivory" ]; + + Print[ Wm[Domain], OnGlobal, Format TimeTable, + File > StrCat[Dir,"Wm.dat"], StoreInVariable $MagneticEnergy, + SendToServer StrCat[ppo,"80Wm"], Units "W", Color "LightYellow" ]; + Print[ L_from_Wm, OnRegion DomainDummy, Format Table, + File StrCat[Dir,"Lwm.dat"], + SendToServer StrCat[ppo,"81L from Wm"], Units 'H', Color "Navy" ]; + + Print[ We[Domain], OnGlobal, Format TimeTable, + File > StrCat[Dir,"We.dat"], StoreInVariable $ElectricEnergy, + SendToServer StrCat[ppo,"90We"], Units "W", Color "LightYellow" ]; + Print[ C_from_We, OnRegion DomainDummy, Format Table, StoreInVariable $C_we, + File StrCat[Dir,"Cwe.dat"], + SendToServer StrCat[ppo,"91C from We"], Units 'F', Color "LightSeaGreen" ]; } diff --git a/Microcoil/microcoil_data.pro b/Microcoil/microcoil_data.pro index 183dc0086978f8c3c49bcc9b94127d9199ed6591..8fba3508c15c899e97e20a33cc24bc79e9c4e6fb 100644 --- a/Microcoil/microcoil_data.pro +++ b/Microcoil/microcoil_data.pro @@ -1,5 +1,6 @@ -pp = "Input/1Geometric dimensions/0"; -ppEM = "Input/2Electromagnetic parameters/0"; +pp = "Geo. parameters/0"; +ppEM = "EM parameters/0"; +ppEMm = StrCat[ppEM,"medium/"]; close_menu = 0; colorro = "LightGrey"; @@ -13,15 +14,15 @@ c0 = Sqrt[nu0/eps0]; DefineConstant[ nTurns = {2, Name StrCat[pp, "0Number of turns"], Highlight Str[colorpp], Closed close_menu}, - wWire = {5, Name StrCat[pp, "1Width of wire [microns]"], Highlight Str[colorpp]}, - hWire = {5, Name StrCat[pp, "2Height of wire [microns]"], Highlight Str[colorpp]}, - gWire = {5, Name StrCat[pp, "3Gap between wire [microns]"], Highlight Str[colorpp]}, - - Freq = {1e8, Name StrCat[ppEM, "0Working Frequency [Hz]"], Highlight Str[colorpp] }, - epsilon_r = {5, Name StrCat[ppEM, "1Relative permittivity of medium"], Highlight Str[colorpp] }, - c_medium = {c0/Sqrt[epsilon_r], Name StrCat[ppEM, "5Speed of light in medium"], ReadOnly 1, Highlight Str[colorro] }, - k_medium = {2*Pi*Freq/c_medium, Name StrCat[ppEM, "4Wave number in medium"], ReadOnly 1, Highlight Str[colorro] }, - lambda_medium = {c_medium/Freq, Name StrCat[ppEM, "3Wavelength in medium"], ReadOnly 1, Highlight Str[colorro] } + wWire = {5, Name StrCat[pp, "1Width of wire"], Units "μm", Highlight Str[colorpp]}, + hWire = {5, Name StrCat[pp, "2Height of wire"], Units "μm", Highlight Str[colorpp]}, + gWire = {5, Name StrCat[pp, "3Gap between wire"], Units "μm", Highlight Str[colorpp]}, + + Freq = {1e8, Name StrCat[ppEM, "0Working Frequency"], Units "Hz", Highlight Str[colorpp] }, + epsilon_r = {5, Name StrCat[ppEMm, "1Relative permittivity"], Highlight Str[colorpp] }, + c_medium = {c0/Sqrt[epsilon_r], Name StrCat[ppEMm, "5Speed of light"], Units "m/s", ReadOnly 1, Highlight Str[colorro] }, + k_medium = {2*Pi*Freq/c_medium, Name StrCat[ppEMm, "4Wave number"], ReadOnly 1, Highlight Str[colorro] }, + lambda_medium = {c_medium/Freq, Name StrCat[ppEMm, "3Wavelength"], Units "m", ReadOnly 1, Highlight Str[colorro] } ]; um = 1e-6; // micron