Browse Source

new materials can be used in simulation

Konstantin Ladutenko 3 years ago
parent
commit
f3eeebc6e0

+ 8 - 1
guiapp/src/App.vue

@@ -10,7 +10,14 @@ export default defineComponent({
   setup(){
     const $store = useStore()
     void (async () => $store.dispatch('simulationSetup/loadScattnlay'))()
-
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/Ag/McPeak.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/Au/McPeak.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/Al/McPeak.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/Cu/McPeak.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/Si/Green-2008.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/SiO2/Lemarchand.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/TiO2/Siefke.yml')
+    void $store.dispatch('guiRuntime/activateMaterial', 'main/Pt/Werner.yml')
   }
 })
 </script>

+ 1 - 1
guiapp/src/components/GetParticleParameters.vue

@@ -235,7 +235,7 @@ export default defineComponent({
         layers.push(
             {
               layerWidth: coreR*0.1,
-              material: {name:'nk-constant', fileFullPath:undefined,
+              material: {name:'nk-constant',
                 spectrumRangeStart:undefined, spectrumRangeEnd: undefined,
                 nSpline: undefined, kSpline: undefined},
               n: 4.0,

+ 6 - 5
guiapp/src/components/MaterialsActivated.vue

@@ -39,16 +39,18 @@
 
           <q-td auto-width>
             <q-tooltip
+                v-if=" props.row.spectrumRangeStart > fromWavelengthStore ||
+                       props.row.spectrumRangeEnd   <   toWavelengthStore"
                 anchor="top middle" self="bottom middle"
                 class="bg-red">
               Mismatch with spectrum simulation
             </q-tooltip>
-            <span :class="props.row.spectrumRangeStart>=fromWavelengthStore?'text-red':'text-black'">
-              {{ props.row.spectrumRangeStart }}
+            <span :class="props.row.spectrumRangeStart>fromWavelengthStore?'text-red':'text-black'">
+              {{ Math.ceil(props.row.spectrumRangeStart) }}
             </span>
             &ndash;
-            <span :class="props.row.spectrumRangeEnd<=toWavelengthStore?'text-red':'text-black'">
-              {{ props.row.spectrumRangeEnd }}
+            <span :class="props.row.spectrumRangeEnd<toWavelengthStore?'text-red':'text-black'">
+              {{ Math.floor(props.row.spectrumRangeEnd) }}
             </span>
             &NonBreakingSpace;nm
           </q-td>
@@ -97,7 +99,6 @@ export default defineComponent({
       {name: 'spectrumRangeStart', label: 'RangeStart', field: 'spectrumRangeStart'},
       {name: 'spectrumRangeEnd', label: 'RangeEnd', field: 'spectrumRangeEnd'},
       {name: 'name', label: 'name', field: 'name'},
-      {name: 'fileFullPath', fileFullPath: 'fileFullPath', field: 'fileFullPath'},
       {name: 'nSpline', nSpline: 'nSpline', field: 'nSpline'},
       {name: 'kSpline', kSpline: 'kSpline', field: 'kSpline'},
     ]

+ 4 - 4
guiapp/src/components/MaterialsSelector.vue

@@ -70,17 +70,17 @@
 
           <q-td auto-width>
             <q-tooltip
-                v-if="props.row.spectrumRangeStart>=fromWavelengthStore/1000 ||
-                 props.row.spectrumRangeEnd<=toWavelengthStore/1000"
+                v-if="props.row.spectrumRangeStart>fromWavelengthStore/1000 ||
+                 props.row.spectrumRangeEnd<toWavelengthStore/1000"
                 anchor="top middle" self="center middle"
                 class="bg-red">
               Mismatch with spectrum simulation
             </q-tooltip>
-            <span :class="props.row.spectrumRangeStart>=fromWavelengthStore/1000?'text-red':'text-black'">
+            <span :class="props.row.spectrumRangeStart>fromWavelengthStore/1000?'text-red':'text-black'">
               {{ props.row.spectrumRangeStart }}
             </span>
             <span v-if="props.row.spectrumRangeStart">&ndash;</span>
-            <span :class="props.row.spectrumRangeEnd<=toWavelengthStore/1000?'text-red':'text-black'">
+            <span :class="props.row.spectrumRangeEnd<toWavelengthStore/1000?'text-red':'text-black'">
               {{ props.row.spectrumRangeEnd }}
             </span>
             <span v-if="props.row.spectrumRangeStart">&NonBreakingSpace;mkm</span>

+ 37 - 9
guiapp/src/store/gui-runtime/actions.ts

@@ -3,8 +3,10 @@ import { StateInterface } from '../index'
 import { guiRuntimeStateInterface } from './state'
 import { composeLabelFromPageData } from 'components/utils'
 import { load } from 'js-yaml'
+import Spline from 'cubic-spline-ts'
 
-async function loadMaterialData(filename:string){ /* eslint-disable */
+
+async function loadMaterialData(filename:string):Promise<number[][] | undefined>{ /* eslint-disable */
   // TODO enable eslint, which is disabled now due to unknown result type of load() from js-yaml
   // TODO implement formulas
   // TODO implement multiple '- type:' in one file (e.g. it can be 'tabulated n' and 'tabulated k'
@@ -16,12 +18,10 @@ async function loadMaterialData(filename:string){ /* eslint-disable */
     const Ag_data = await response.text()
 
     const doc = await load(Ag_data) as any
-    console.log(doc)
     if (doc.DATA[0].type == 'tabulated nk' || doc.DATA[0].type == 'tabulated n') {
       const csv = doc.DATA[0].data
       const rows:string[] = csv.split("\n")
       let data =  rows.map(row =>row.split(" "))
-      console.log(data)
       data.pop()
       let data_num = data.map(elem => elem.map(elem2 => parseFloat(elem2)))
 
@@ -34,21 +34,49 @@ async function loadMaterialData(filename:string){ /* eslint-disable */
 
       for (let i=0; i<data_columns[0].length; i++)
         data_columns[0][i] *= 1000
-      console.log(data_columns)
       return data_columns
     }
   } catch (e) {
     console.log(e)
   }
+  return undefined
 }
 
 
 const actions: ActionTree<guiRuntimeStateInterface, StateInterface> = {
-  activateMaterial({commit,state}/* context */, filepath:string) {
-    // console.log(composeLabelFromPageData(filepath))
-    let data_columns = loadMaterialData(filepath)
-    console.log(data_columns)
-    return {state, filepath}
+  async activateMaterial({commit,state}/* context */, filepath:string) {
+    const data_columns:number[][]|undefined = await loadMaterialData(filepath)
+    if (!data_columns) return
+    let xs:number[] = data_columns[0]
+    let ys1:number[] = data_columns[1]
+    let ys2:number[] = data_columns[1].map(()=>0)
+    if (data_columns[2]) ys2 = data_columns[2]
+    const maxVal = 550
+    if (xs.length > maxVal) {
+      const delta = Math.floor(xs.length / maxVal);
+      let tmp_xs:number[] = []
+      let tmp_ys1:number[] = []
+      let tmp_ys2:number[] = []
+      for (let i = 0; i < xs.length; i = i + delta) {
+        tmp_xs.push(xs[i])
+        tmp_ys1.push(ys1[i])
+        tmp_ys2.push(ys2[i])
+      }
+      xs = tmp_xs
+      ys1 = tmp_ys1
+      ys2 = tmp_ys2
+    }
+    console.log(xs.length)
+
+    const spline_n = new Spline(xs, ys1);
+    const spline_k = new Spline(xs, ys2);
+
+    const name = composeLabelFromPageData(filepath)
+    const spectrumRangeStart = xs[0]
+    const spectrumRangeEnd = xs[xs.length-1]
+    commit('addMaterial', {name:name,
+      spectrumRangeStart:spectrumRangeStart, spectrumRangeEnd:spectrumRangeEnd,
+      nSpline:spline_n, kSpline:spline_k})
   },
 
 }

+ 16 - 2
guiapp/src/store/gui-runtime/mutations.ts

@@ -1,5 +1,17 @@
 import { MutationTree } from 'vuex'
 import { guiRuntimeStateInterface as grsi} from './state'
+import { material } from 'src/store/simulation-setup/state'
+
+function compare( a:material, b:material ) {
+  if (a.name == 'link') return -1
+  if (b.name == 'link') return 1
+  if (a.name == 'nk-constant') return -1
+  if (b.name == 'nk-constant') return 1
+
+  if (a.name < b.name ) return -1
+  if (a.name > b.name) return 1
+  return 0;
+}
 
 const mutation: MutationTree<grsi> = {
   setIsShowingHelpForInputWithUnits (state: grsi, val: boolean) {state.isShowingHelpForInputWithUnits = val},
@@ -7,8 +19,10 @@ const mutation: MutationTree<grsi> = {
   setSourceUnits       (state: grsi, val: string ) {state.sourceUnits       = val},
   setIsSourceSameUnits (state: grsi, val: boolean) {state.isSourceSameUnits = val},
 
-  addMaterial(state: grsi, filepath: string) {
-    return {state, filepath}
+
+  addMaterial(state: grsi, material:material) {
+    state.activatedMaterials.push(material)
+    state.activatedMaterials.sort( compare );
   },
 
   deleteMaterial(state: grsi, label: string) {

+ 2 - 6
guiapp/src/store/gui-runtime/state.ts

@@ -19,13 +19,9 @@ function state(): guiRuntimeStateInterface {
     isSourceSameUnits: true,
     activatedMaterials: [
         // 'PEC',
-      {name:'link', fileFullPath:'', spectrumRangeStart:0, spectrumRangeEnd:1e300,
+      {name:'link',  spectrumRangeStart:0, spectrumRangeEnd:1e300,
         nSpline: undefined, kSpline: undefined},
-      {name:'nk-constant', fileFullPath:'', spectrumRangeStart:0, spectrumRangeEnd:1e300,
-        nSpline: undefined, kSpline: undefined},
-      {name:'Ag_McPeak', fileFullPath:'main/Ag/McPeak.yml', spectrumRangeStart:300, spectrumRangeEnd:1700,
-        nSpline: undefined, kSpline: undefined},
-      {name:'Au_McPeak', fileFullPath:'main/Au/McPeak.yml', spectrumRangeStart:300, spectrumRangeEnd:1700,
+      {name:'nk-constant',  spectrumRangeStart:0, spectrumRangeEnd:1e300,
         nSpline: undefined, kSpline: undefined},
     ]
   }

+ 1 - 2
guiapp/src/store/simulation-setup/state.ts

@@ -5,7 +5,6 @@ import Spline from 'cubic-spline-ts'
 
 export interface material {
   name: string
-  fileFullPath:string|undefined
   spectrumRangeStart:number|undefined
   spectrumRangeEnd:number|undefined
   nSpline: Spline|undefined
@@ -41,7 +40,7 @@ function setupFactory(hostIndex = 1,
                       fromWL = 400, toWL=1000, pointsWL=201, currentWL = 400,
                       layers = [
                         {layerWidth:100, n:4, k:0.01,
-                          material: {name:'nk-constant', fileFullPath:undefined,
+                          material: {name:'nk-constant',
                             spectrumRangeStart:undefined, spectrumRangeEnd: undefined,
                             nSpline: undefined, kSpline: undefined},
                         },