Browse Source

create a dedicated nmie instance for spectrum, near and far field simulations

Konstantin Ladutenko 3 years ago
parent
commit
d3974890f5

+ 12 - 13
guiapp/src/components/GetNearFieldSettings.vue

@@ -6,38 +6,37 @@
       </div>
     </div>
     <div class="col-xs-grow col-sm">
-
       <div class="row justify-center items-baseline">
         <div class="col-auto text-center q-py-xs q-pr-md">
           <div :style="flexRowTitleStyle" >
-        relative size
+            max side resolution
           </div>
         </div>
         <div class="col-xs-grow col-sm">
           <div class="row justify-xs-center justify-sm-start items-center">
             <input-with-units
-            v-model:input-result="relativePlotSize"
-            v-model:is-showing-help="isShowingHelpForInputWithUnits"
-            :initial-expression="relativePlotSize.toString()"
-            title="x / 2R"
-            units=""
+                v-model:input-result="plotSideResolution"
+                v-model:is-showing-help="isShowingHelpForInputWithUnits"
+                :initial-expression="plotSideResolution.toString()"
+                title="points"
+                units=""
             /></div>
         </div>
       </div>
       <div class="row justify-center items-baseline">
         <div class="col-auto text-center q-py-xs q-pr-md">
           <div :style="flexRowTitleStyle" >
-            resolution
+        relative side length
           </div>
         </div>
         <div class="col-xs-grow col-sm">
           <div class="row justify-xs-center justify-sm-start items-center">
             <input-with-units
-                v-model:input-result="plotSideResolution"
-                v-model:is-showing-help="isShowingHelpForInputWithUnits"
-                :initial-expression="plotSideResolution.toString()"
-                title="points"
-                units=""
+            v-model:input-result="relativePlotSize"
+            v-model:is-showing-help="isShowingHelpForInputWithUnits"
+            :initial-expression="relativePlotSize.toString()"
+            title="𝐿&thinsp;/&hairsp;𝟐𝑅"
+            units=""
             /></div>
         </div>
       </div>

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

@@ -54,13 +54,13 @@ export default defineComponent({
     const $store = useStore()
 
     const isRunning = computed({
-      get: ()=> $store.state.simulationSetup.isNmieRunning,
+      get: ()=> $store.state.simulationSetup.nmies.spectrum.isNmieRunning,
       set: val => {
         val ? $store.commit('simulationSetup/markNmieAsStarted') : $store.commit('simulationSetup/markNmieAsFinished')
       }
     })
 
-    const isNmieLoaded = computed(()=>{ return $store.state.simulationSetup.isNmieLoaded })
+    const isNmieLoaded = computed(()=>{ return $store.state.simulationSetup.nmies.spectrum.instance })
 
     const sourceUnits = computed( ()=>$store.state.guiRuntime.sourceUnits)
 
@@ -80,8 +80,7 @@ export default defineComponent({
         return WLs
       }
       const stepWL = (toWL-fromWL)/(pointsWL-1)
-      const WLs = range(fromWL, toWL, stepWL);
-      return WLs
+      return range(fromWL, toWL, stepWL)
     }
 
     function initQ(mode_n:number[], mode_types:number[]) {
@@ -120,8 +119,8 @@ export default defineComponent({
         let {Qsca, Qabs, Qext, Qsca_n, Qabs_n, Qext_n} = initQ(mode_n, mode_types)
 
         try {
-          if (!$store.state.simulationSetup.nmie) throw 'ERROR! Scattnlay module was not loaded'
-          const nmie = $store.state.simulationSetup.nmie
+          if (!$store.state.simulationSetup.nmies.spectrum.instance) throw 'ERROR! Scattnlay module was not loaded'
+          const nmie = $store.state.simulationSetup.nmies.spectrum.instance
           const layers = cloneDeep($store.state.simulationSetup.current.layers)
           const nmieStartedTime = performance.now()
           for (const WL of WLs) {

+ 1 - 1
guiapp/src/layouts/MainLayout.vue

@@ -77,7 +77,7 @@
         <q-separator inset spaced/>
 
         <q-item class="q-mt-auto">
-          Last simulation took {{$store.state.simulationSetup.nmieTotalRunTime.toFixed(2)}} s.
+          Last spectrum simulation took {{$store.state.simulationSetup.nmies.spectrum.nmieTotalRunTime.toFixed(2)}} s.
         </q-item>
       </q-list>
 

+ 6 - 1
guiapp/src/pages/Near-field.vue

@@ -5,6 +5,8 @@
     <GetWlFromPlot/>
     <div class="q-ma-xs"/>
     <GetNearFieldSettings/>
+    <div class="q-ma-xs"/>
+<!--    <RunSimulationNearField/>-->
     <div class="col-auto">
       Input result: {{$store.state.simulationSetup.gui.nearFieldSetup.crossSection}}
     </div>
@@ -24,13 +26,16 @@ import {
 import GetWlFromPlot from 'components/GetWlFromPlot.vue'
 import GetNearFieldSettings from 'components/GetNearFieldSettings.vue'
 import RunSimulationSpectrum from 'components/RunSimulationSpectrum.vue'
+// import RunSimulationNearField from 'components/RunSimulationNearField.vue'
 
 // import { useStore } from 'src/store'
 
 
 export default defineComponent({
   name: 'NearField',
-  components: {GetWlFromPlot, RunSimulationSpectrum,
+  components: {
+    // RunSimulationNearField,
+    GetWlFromPlot, RunSimulationSpectrum,
     GetNearFieldSettings,
   },
   setup() {

+ 5 - 6
guiapp/src/store/simulation-setup/actions.ts

@@ -6,7 +6,7 @@ import { useQuasar } from 'quasar'
 
 
 const actions: ActionTree<simulationSetupStateInterface, StateInterface> = {
-  async loadScattnlay ({commit,state}/* context */) {
+  async loadScattnlay ({commit/*,state*/}/* context */) {
     const $q = useQuasar()
     $q.loading.show({
       message: 'Loading Mie calculator. Please wait...',
@@ -14,8 +14,10 @@ const actions: ActionTree<simulationSetupStateInterface, StateInterface> = {
       spinnerColor: 'primary'
     })
     const module = await nmiejs()
-    const nmie = new module.nmie()
-    commit('setNmie', nmie)
+    const nmies = {spectrum: new module.nmie(),
+      nearField: new module.nmie(),
+      farField: new module.nmie()}
+    commit('setNmies', nmies)
     // // Test nmiejs if working
     // if (state.nmie && !state.isNmieRunning) {
     //   commit('markNmieAsStarted')
@@ -37,9 +39,6 @@ const actions: ActionTree<simulationSetupStateInterface, StateInterface> = {
     //   console.log('Field Eabs:', state.nmie.GetFieldEabs())
     //   commit('markNmieAsFinished')
     // }
-    if (state.nmie) {
-      commit('markNmieAsLoaded')
-    }
     $q.loading.hide()
   }
 };

+ 13 - 7
guiapp/src/store/simulation-setup/mutations.ts

@@ -4,18 +4,24 @@ import { cloneDeep } from 'lodash'
 import { markRaw} from 'vue'
 
 const mutation: MutationTree<sssi> = {
-  setNmie (state: sssi,
-           newVal: import('src/nmiejs').nmie_class) {
-    state.nmie = markRaw(newVal)
+  setNmies (state: sssi,
+           newVal: {spectrum: import('src/nmiejs').nmie_class,
+             nearField: import('src/nmiejs').nmie_class,
+             farField: import('src/nmiejs').nmie_class
+           }) {
+    state.nmies.spectrum.instance = markRaw(newVal.spectrum)
+    state.nmies.nearField.instance = markRaw(newVal.nearField)
+    state.nmies.farField.instance = markRaw(newVal.farField)
   },
-  markNmieAsLoaded  (state: sssi) {state.isNmieLoaded  = true },
   markNmieAsStarted (state: sssi) {
-    state.isNmieRunning = true
+    state.nmies.spectrum.isNmieRunning = true
   },
   markNmieAsFinished(state: sssi) {
-    state.isNmieRunning = false
+    state.nmies.spectrum.isNmieRunning = false
+  },
+  setNmieTotalRunTime(state: sssi, val:number) {
+    state.nmies.spectrum.nmieTotalRunTime = val
   },
-  setNmieTotalRunTime(state: sssi, val:number) {state.nmieTotalRunTime = val},
 
   setCurrentState (state: sssi,
                    newVal: simulationSetup) {

+ 13 - 12
guiapp/src/store/simulation-setup/state.ts

@@ -44,14 +44,18 @@ export interface simulationSetup {
   farFieldWL:number
 }
 
+export interface nmieModule {
+  //nmie instance
+  instance: import('src/nmiejs').nmie_class|undefined
+  isNmieRunning: boolean
+  nmieTotalRunTime: number
+}
+
 export interface simulationSetupStateInterface {
   library: Map<string,simulationSetup>
   gui: simulationSetup
   current: simulationSetup
-  nmie: import('src/nmiejs').nmie_class|undefined
-  isNmieLoaded: boolean
-  isNmieRunning: boolean
-  nmieTotalRunTime: number
+  nmies: {spectrum: nmieModule, nearField: nmieModule, farField:nmieModule}
 }
 
 function setupFactory(hostIndex = 1,
@@ -95,18 +99,15 @@ function state(): simulationSetupStateInterface {
   const current = cloneDeep(gui)
   const library = new Map<string,simulationSetup>()
   library.set('default', cloneDeep(gui))
-  const nmie = undefined
-  const isNmieLoaded = false
-  const isNmieRunning = false
-  const nmieTotalRunTime = 0
-
+  const nmies = {spectrum: {instance:undefined, isNmieRunning:false, nmieTotalRunTime:0},
+    nearField: {instance:undefined, isNmieRunning:false, nmieTotalRunTime:0},
+    farField: {instance:undefined, isNmieRunning:false, nmieTotalRunTime:0}}
   return {
     library,
     gui, // simulation setup config as shown in GUI
     current, // simulation setup used for the latest simulation
-    nmie,
-    isNmieLoaded, isNmieRunning, nmieTotalRunTime
+    nmies,
   }
-};
+}
 
 export default state;