Changeset 4411 for palm


Ignore:
Timestamp:
Feb 18, 2020 2:28:02 PM (5 years ago)
Author:
maronga
Message:

Added NetCDf output for wind turbine model. Added new features to palmrungui

Location:
palm/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SCRIPTS/.palm.iofiles

    r4400 r4411  
    8585PARTICLE_DATA*             out:lnpe *         $base_data/$run_identifier/OUTPUT         _prt_dat
    8686#
    87 WTM_OUTPUT_DATA*           out:tr   *         $base_data/$run_identifier/MONITORING     _wtm
     87#WTM_OUTPUT_DATA*           out:tr   *         $base_data/$run_identifier/MONITORING     _wtm
     88DATA_1D_TS_WTM_NETCDF*     out:tr   *         $fast_io_catalog/$run_identifier/OUTPUT   _wtm       nc
  • palm/trunk/SCRIPTS/palmrungui

    r4405 r4411  
    2525# -----------------
    2626# $Id$
     27# Added new features: individual tag for submitted runs, automatic finding of
     28# configuration, start of palmbuild from GUI
     29#
     30# 4405 2020-02-12 19:11:11Z maronga
    2731# Major revisions: New layout. Merged with palm job manager (palm_jm).
    2832# Minor revisions: Misc. bugs fixed.
     
    127131        self.load_jobs()
    128132
     133        # look up configuration files and add to combo box
     134       
     135        self.group_execution.findChild(QtGui.QComboBox,"combo_configuration").addItem("")
     136       
     137        for files in os.listdir(palm_dir):
     138           if files.startswith(".palm.config"):
     139              tmpstring = filter(None,files.split(".palm.config."))[0]
     140              self.group_execution.findChild(QtGui.QComboBox,"combo_configuration").addItem(tmpstring)
     141
    129142        commandline = self.groupBox.findChild(QtGui.QLineEdit,"commandline")
    130143        commandline.setText("")
     
    154167
    155168
     169
    156170   
    157171        QtGui.QApplication.processEvents()
     
    166180       
    167181        # Check for empty line
    168         palmrunline_save = palmrunline;
     182        palmrunline_save = palmrunline
    169183        if (userline != ""):
    170184            palmrunline = "%s %s" % (palmrunline,userline)
     
    174188        self.tabWidget.setEnabled(False)
    175189        self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(False)
     190        self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(False)
    176191        self.groupBox.findChild(QtGui.QPushButton,"button_start").setText("wait...")     
    177192        self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText("Executing palmrun in xterm...")       
     
    195210       
    196211        mString = "xterm %s" % (palmrunline)
    197         palmrun.start(mString);
     212        palmrun.start(mString)
    198213   
    199214        if( palmrun.waitForStarted() is False ):
     
    201216       
    202217        # Wait until palmrun has finished or wait for 200 minutes
    203         palmrun.waitForFinished(3600000);       
     218        palmrun.waitForFinished(3600000)       
    204219       
    205220        # Jobs has been submitted or aborted. Continuing...
     
    207222        filename = "%s/.palmrungui.history" % (palm_dir)
    208223        tmstamp = strftime("%Y/%m/%d %H:%M")
     224        tag = str(self.groupBox.findChild(QtGui.QLineEdit,"line_tag").text())
    209225   
    210226        file = open(filename,"a")
    211         s = "%s %s\n" % (tmstamp,history_line)
     227        s = "%s %s (%s)\n" % (tmstamp,history_line,tag)
    212228        file.write(s)
    213229        file.close()             
     
    216232        self.tabWidget.setEnabled(True)
    217233        self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(True)
    218         self.groupBox.findChild(QtGui.QPushButton,"button_start").setText("Start palmrun")
    219         self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline_save);
     234        self.groupBox.findChild(QtGui.QPushButton,"button_start").setText("palmrun")
     235        self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline_save)
     236        self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
    220237       
    221238        # Reload recent jobs
     
    223240       
    224241       
     242       
     243    # starts xterm with palmbuild commandline
     244    #######################################
     245    def startpalmbuild(self):
     246        palmbuildline = 'palmbuild -c ' + str(self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").currentText())
     247       
     248        # Disable the main window
     249        self.tabWidget.setEnabled(False)
     250        self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(False)
     251        self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(False) 
     252        self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText("Executing palmbuild in xterm...")       
     253       
     254        # Wait until all commands have been executed (ugly) ?
     255        #for i in range(0,21):
     256        #    qApp->processEvents()       
     257       
     258        # Start xterm as QProcess
     259        palmbuild = QProcess()
     260        palmbuild.setProcessChannelMode(QProcess.MergedChannels) # mergedChannels
     261        palmbuild.setWorkingDirectory(palm_dir)
     262   
     263        geomet = self.frameGeometry()
     264       
     265        posx = geomet.x()+geomet.width()
     266        posy = geomet.y()
     267     
     268        s = " -title \"Executing palmbuild...\" -fa \"Monospace\" -fs 11 -geometry \"80x38+%d+%d\" -e \"" % (posx,posy)
     269        palmbuildline = "%s%s;echo -n '--> Press enter to continue...';read yesno\"</dev/stdin" % (s, palmbuildline.replace("\"","\'"))
     270       
     271        mString = "xterm %s" % (palmbuildline)
     272        palmbuild.start(mString)
     273   
     274        if( palmbuild.waitForStarted() is False ):
     275            return
     276       
     277        # Wait until palmbuild has finished or wait for 200 minutes
     278        palmbuild.waitForFinished(3600000)       
     279       
     280         
     281       
     282        # Enable main window again
     283        self.tabWidget.setEnabled(True)
     284        self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(True)
     285        self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
     286       
     287        # Reload recent jobs
     288        self.recent_jobs(50)
     289
    225290    # loads recent jobs
    226291    ######################################
     
    235300        history = file.readlines()
    236301        tmphistory = list()
    237         file.close();
    238         j = 0;
     302        tmptag = list()
     303        file.close()
     304        j = 0
    239305
    240306        list_jobname = self.group_history.findChild(QtGui.QListWidget,"list_jobname")
     
    247313            timestamp = history[i][:16]
    248314            listitem = history[i][17:len(history[i])-1]
     315            tagitem = listitem
    249316            matchitems = list_jobname.findItems(listitem, QtCore.Qt.MatchExactly)
    250317
     
    252319                listitem = filter(None,listitem.split(" -r"))[1]
    253320                listitem = filter(None,listitem.split(" -"))[0]
    254                 listitem = listitem.replace(" ","");
    255                 list_jobname.addItem(listitem);
    256                 s = "%s (%s)" % (listitem,timestamp)
    257                 tmphistory.append(s);
     321                listitem = listitem.replace(" ","")
     322                list_jobname.addItem(listitem)
     323                s = "%s: %s" % (timestamp,listitem)
     324                tmphistory.append(s)
     325               
     326               
     327                tagitem = filter(None,tagitem.split(" ("))[1]
     328                tagitem = tagitem.replace(")","") 
     329                if ( len(tagitem) == 0 ):
     330                   s = "Tag: empty"
     331                else:
     332                   s = "Tag: %s" % (tagitem)               
     333                tmptag.append(s)
    258334                count = count +1
     335
    259336                j = j+1
    260337               
     
    264341           
    265342        # Send to list
    266         list_jobname.clear();
     343        list_jobname.clear()
    267344       
    268345        i=0
    269346        while i<len(tmphistory):
    270             list_jobname.addItem(tmphistory[i]);
     347            list_jobname.addItem(tmphistory[i])
     348            list_jobname.item(i).setToolTip(tmptag[i])
    271349            i = i+1
    272350           
     
    291369        filename = str(list_jobname.currentItem().text())
    292370           
    293         timestamp = filename[len(filename)-17:][:16]
    294         jobname = filename[:len(filename) - 19];
    295        
     371        timestamp = filename[:16]
     372        jobname = filename[18:]
     373               
    296374        itemint = list_jobname.currentRow()
    297375
     
    301379   
    302380        # Set selected item to jobname
    303         list_jobname.item(itemint).setSelected(True);
     381        list_jobname.item(itemint).setSelected(True)
    304382   
    305383        # Set selected item to jobname in "available jobs" list
    306384        item2int = self.list_jobs.findItems(jobname,QtCore.Qt.MatchCaseSensitive)
    307         self.list_jobs.setCurrentItem(item2int[0])
     385       
     386        if ( item2int != [] ):
     387           self.list_jobs.setCurrentItem(item2int[0])
    308388        self.update_input()
     389           
    309390   
    310391        fileDir = "%s/.palmrungui.history" % (palm_dir)
     
    312393        history = file.readlines()
    313394        tmphistory = list()
    314         file.close();       
     395        file.close()       
    315396   
    316397        i = len(history)
     
    319400            listitem = filter(None,listitem.split(" -r"))[1]
    320401            listitem = filter(None,listitem.split(" -"))[0]
    321             listitem = listitem.replace(" ","");               
     402            listitem = listitem.replace(" ","") 
    322403
    323404            # Select command line with correct timestamp and jobname
     
    326407                palmrunline = palmrunline[17:]
    327408                palmrunline = palmrunline[:len(palmrunline)-1]
    328                 self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline);
    329                 self.setup_gui(palmrunline);
    330                 self.list_jobname.item(itemint).setSelected(True);   
     409                palmrunline = filter(None,palmrunline.split("("))[0]
     410                self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline)
     411               
     412             
     413                tag = history[i-1].split('\n')[0]
     414                tag = filter(None,tag.split("("))[1]
     415                tag = tag.replace(")","")
     416
     417                self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setText(tag)
     418                self.setup_gui(palmrunline)
     419                self.list_jobname.item(itemint).setSelected(True)   
    331420               
    332421                return
     
    389478                self.groupBox.findChild(QtGui.QPushButton,"button_start").setEnabled(True)
    390479                self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(True)
     480                self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
    391481           
    392482            elif ( param[0] == ""):           
     
    396486                self.menuBar.findChild(QtGui.QMenu,"menuStart").actions()[3].setEnabled(False)
    397487                self.group_advanced.setEnabled(False)
     488                self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
    398489                self.delete_commandline("r")
    399490                self.change_commandline("a","remove")
     
    504595                self.button_start.setEnabled(True)
    505596                self.action_save.setEnabled(True)
     597                self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
    506598
    507599        # Change in any other parameter
     
    528620    ###################################################################################
    529621    def change_lineinput(self):
    530         if ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit, "line_host") ):
    531             tmptext = self.group_execution.findChild(QtGui.QLineEdit,"line_host").text()
    532             self.change_commandline("c",tmptext)
     622        if ( self.sender() == self.group_execution.findChild(QtGui.QComboBox, "combo_configuration") ):
     623            tmptext = self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").currentText()
     624            if tmptext.isEmpty():
     625               self.change_commandline("c"," ")
     626               self.group_execution.findChild(QtGui.QPushButton,'button_palmbuild').setEnabled(False)
     627            else:
     628               self.change_commandline("c",tmptext)
     629               self.group_execution.findChild(QtGui.QPushButton,'button_palmbuild').setEnabled(True)         
    533630
    534631        elif ( self.sender() == self.group_execution.findChild(QtGui.QLineEdit,"line_q")):
     
    819916               
    820917            elif ( parameter == "c"):
    821                 self.group_execution.findChild(QtGui.QLineEdit,"line_host").setText(options)
    822              
     918                tmpindex = self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").findText(options,QtCore.Qt.MatchExactly)
     919                if tmpindex != -1:
     920                   self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").setCurrentIndex(tmpindex)
     921                else:
     922                   self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").setCurrentIndex(0)
    823923            elif ( parameter == "q"):
    824924                self.group_execution.findChild(QtGui.QLineEdit,"line_q").setText(options)
     
    9751075            self.group_advanced.setEnabled(False)
    9761076            self.check_advanced.setEnabled(False)
     1077            self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(False)
    9771078         
    9781079        else:
     
    9821083            self.group_execution.findChild(QtGui.QComboBox, "drop_job").setEnabled(True)
    9831084            self.group_advanced.setEnabled(True)
     1085            self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
    9841086         
    9851087        self.tabWidget.setCurrentIndex(0)
     
    10531155       
    10541156       list_of_files = os.listdir(job_dir)
    1055              
     1157     
     1158
    10561159       for i in range(0,len(list_of_files)):
    10571160          tmp_file = job_dir + "/" + list_of_files[i]
    10581161
    10591162          if ( os.path.isdir(tmp_file) ):
    1060              self.list_jobs.addItem(str(list_of_files[i]))
     1163             self.list_jobs.addItem(str(list_of_files[i]))
     1164       
    10611165
    10621166
     
    13101414        selection = self.list_output.selectedItems()
    13111415       
    1312         print("test")
    13131416        if ( len(selection) != 0 ):
    13141417
  • palm/trunk/SCRIPTS/palmrungui_files/mainwindow.ui

    r4405 r4411  
    160160     </property>
    161161    </widget>
     162    <widget class="QLineEdit" name="line_tag">
     163     <property name="enabled">
     164      <bool>false</bool>
     165     </property>
     166     <property name="geometry">
     167      <rect>
     168       <x>430</x>
     169       <y>20</y>
     170       <width>351</width>
     171       <height>20</height>
     172      </rect>
     173     </property>
     174     <property name="text">
     175      <string/>
     176     </property>
     177    </widget>
     178    <widget class="QLabel" name="label_22">
     179     <property name="geometry">
     180      <rect>
     181       <x>340</x>
     182       <y>20</y>
     183       <width>81</width>
     184       <height>21</height>
     185      </rect>
     186     </property>
     187     <property name="text">
     188      <string>Custom tag:</string>
     189     </property>
     190     <property name="alignment">
     191      <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
     192     </property>
     193    </widget>
    162194   </widget>
    163195   <widget class="QTabWidget" name="tabWidget">
     
    219251        <rect>
    220252         <x>310</x>
    221          <y>80</y>
     253         <y>50</y>
    222254         <width>111</width>
    223255         <height>21</height>
     
    235267        <rect>
    236268         <x>230</x>
    237          <y>75</y>
     269         <y>50</y>
    238270         <width>71</width>
    239271         <height>21</height>
     
    257289       </property>
    258290       <property name="text">
    259         <string/>
     291        <string>10240</string>
    260292       </property>
    261293      </widget>
     
    286318       </property>
    287319       <property name="text">
    288         <string/>
     320        <string>100</string>
    289321       </property>
    290322      </widget>
     
    360392       </property>
    361393       <property name="text">
    362         <string/>
     394        <string>432000</string>
    363395       </property>
    364396      </widget>
     
    380412       <property name="alignment">
    381413        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
    382        </property>
    383       </widget>
    384       <widget class="QLineEdit" name="line_host">
    385        <property name="geometry">
    386         <rect>
    387          <x>100</x>
    388          <y>80</y>
    389          <width>101</width>
    390          <height>20</height>
    391         </rect>
    392        </property>
    393        <property name="text">
    394         <string/>
    395414       </property>
    396415      </widget>
     
    501520       <property name="geometry">
    502521        <rect>
    503          <x>100</x>
    504          <y>50</y>
    505          <width>251</width>
    506          <height>25</height>
     522         <x>60</x>
     523         <y>55</y>
     524         <width>191</width>
     525         <height>21</height>
    507526        </rect>
    508527       </property>
     
    529548       <item>
    530549        <property name="text">
    531          <string>Initial run (coupled atmosphere ocean)</string>
     550         <string>Initial run (coupled)</string>
    532551        </property>
    533552       </item>
    534553       <item>
    535554        <property name="text">
    536          <string>Restart run (coupled atmosphere ocean)</string>
     555         <string>Restart run (coupled)</string>
    537556        </property>
    538557       </item>
     
    566585       <property name="geometry">
    567586        <rect>
    568          <x>0</x>
     587         <x>10</x>
    569588         <y>55</y>
    570          <width>91</width>
     589         <width>41</width>
    571590         <height>16</height>
    572591        </rect>
     
    621640       <property name="scaledContents">
    622641        <bool>true</bool>
     642       </property>
     643      </widget>
     644      <widget class="QPushButton" name="button_palmbuild">
     645       <property name="geometry">
     646        <rect>
     647         <x>310</x>
     648         <y>80</y>
     649         <width>111</width>
     650         <height>21</height>
     651        </rect>
     652       </property>
     653       <property name="text">
     654        <string>(re-)build</string>
     655       </property>
     656      </widget>
     657      <widget class="QComboBox" name="combo_configuration">
     658       <property name="geometry">
     659        <rect>
     660         <x>100</x>
     661         <y>80</y>
     662         <width>201</width>
     663         <height>21</height>
     664        </rect>
    623665       </property>
    624666      </widget>
     
    14841526 <tabstops>
    14851527  <tabstop>drop_job</tabstop>
    1486   <tabstop>line_host</tabstop>
    14871528  <tabstop>line_q</tabstop>
    14881529  <tabstop>line_pe</tabstop>
     
    15571598   <hints>
    15581599    <hint type="sourcelabel">
    1559      <x>238</x>
    1560      <y>406</y>
     1600     <x>202</x>
     1601     <y>515</y>
    15611602    </hint>
    15621603    <hint type="destinationlabel">
     
    15731614   <hints>
    15741615    <hint type="sourcelabel">
    1575      <x>276</x>
    1576      <y>406</y>
     1616     <x>240</x>
     1617     <y>515</y>
    15771618    </hint>
    15781619    <hint type="destinationlabel">
     
    15891630   <hints>
    15901631    <hint type="sourcelabel">
    1591      <x>78</x>
    1592      <y>514</y>
     1632     <x>82</x>
     1633     <y>630</y>
    15931634    </hint>
    15941635    <hint type="destinationlabel">
     
    16051646   <hints>
    16061647    <hint type="sourcelabel">
    1607      <x>82</x>
    1608      <y>534</y>
     1648     <x>86</x>
     1649     <y>650</y>
    16091650    </hint>
    16101651    <hint type="destinationlabel">
     
    16211662   <hints>
    16221663    <hint type="sourcelabel">
    1623      <x>63</x>
    1624      <y>554</y>
     1664     <x>67</x>
     1665     <y>670</y>
    16251666    </hint>
    16261667    <hint type="destinationlabel">
     
    17271768  </connection>
    17281769  <connection>
    1729    <sender>line_host</sender>
    1730    <signal>textEdited(QString)</signal>
    1731    <receiver>MainWindow</receiver>
    1732    <slot>change_lineinput()</slot>
    1733    <hints>
    1734     <hint type="sourcelabel">
    1735      <x>169</x>
    1736      <y>421</y>
    1737     </hint>
    1738     <hint type="destinationlabel">
    1739      <x>26</x>
    1740      <y>362</y>
    1741     </hint>
    1742    </hints>
    1743   </connection>
    1744   <connection>
    17451770   <sender>line_pe</sender>
    17461771   <signal>textEdited(QString)</signal>
     
    17491774   <hints>
    17501775    <hint type="sourcelabel">
    1751      <x>166</x>
    1752      <y>446</y>
     1776     <x>170</x>
     1777     <y>570</y>
    17531778    </hint>
    17541779    <hint type="destinationlabel">
     
    17651790   <hints>
    17661791    <hint type="sourcelabel">
    1767      <x>189</x>
    1768      <y>471</y>
     1792     <x>193</x>
     1793     <y>595</y>
    17691794    </hint>
    17701795    <hint type="destinationlabel">
     
    17811806   <hints>
    17821807    <hint type="sourcelabel">
    1783      <x>398</x>
    1784      <y>422</y>
     1808     <x>402</x>
     1809     <y>515</y>
    17851810    </hint>
    17861811    <hint type="destinationlabel">
     
    17971822   <hints>
    17981823    <hint type="sourcelabel">
    1799      <x>421</x>
    1800      <y>471</y>
     1824     <x>425</x>
     1825     <y>595</y>
    18011826    </hint>
    18021827    <hint type="destinationlabel">
     
    18131838   <hints>
    18141839    <hint type="sourcelabel">
    1815      <x>396</x>
    1816      <y>447</y>
     1840     <x>400</x>
     1841     <y>570</y>
    18171842    </hint>
    18181843    <hint type="destinationlabel">
     
    20532078   <hints>
    20542079    <hint type="sourcelabel">
    2055      <x>181</x>
    2056      <y>352</y>
     2080     <x>185</x>
     2081     <y>485</y>
    20572082    </hint>
    20582083    <hint type="destinationlabel">
     
    20852110   <hints>
    20862111    <hint type="sourcelabel">
    2087      <x>272</x>
    2088      <y>572</y>
     2112     <x>276</x>
     2113     <y>690</y>
    20892114    </hint>
    20902115    <hint type="destinationlabel">
     
    21172142   <hints>
    21182143    <hint type="sourcelabel">
    2119      <x>174</x>
    2120      <y>592</y>
     2144     <x>178</x>
     2145     <y>710</y>
    21212146    </hint>
    21222147    <hint type="destinationlabel">
     
    21492174   <hints>
    21502175    <hint type="sourcelabel">
    2151      <x>762</x>
    2152      <y>687</y>
     2176     <x>692</x>
     2177     <y>710</y>
    21532178    </hint>
    21542179    <hint type="destinationlabel">
     
    21652190   <hints>
    21662191    <hint type="sourcelabel">
    2167      <x>622</x>
    2168      <y>687</y>
     2192     <x>552</x>
     2193     <y>710</y>
    21692194    </hint>
    21702195    <hint type="destinationlabel">
     
    21812206   <hints>
    21822207    <hint type="sourcelabel">
    2183      <x>962</x>
    2184      <y>412</y>
     2208     <x>932</x>
     2209     <y>452</y>
    21852210    </hint>
    21862211    <hint type="destinationlabel">
     
    22672292     <x>1182</x>
    22682293     <y>495</y>
     2294    </hint>
     2295   </hints>
     2296  </connection>
     2297  <connection>
     2298   <sender>button_start</sender>
     2299   <signal>clicked()</signal>
     2300   <receiver>MainWindow</receiver>
     2301   <slot>startpalmbuild()</slot>
     2302   <hints>
     2303    <hint type="sourcelabel">
     2304     <x>106</x>
     2305     <y>756</y>
     2306    </hint>
     2307    <hint type="destinationlabel">
     2308     <x>-3</x>
     2309     <y>672</y>
     2310    </hint>
     2311   </hints>
     2312  </connection>
     2313  <connection>
     2314   <sender>button_palmbuild</sender>
     2315   <signal>clicked()</signal>
     2316   <receiver>MainWindow</receiver>
     2317   <slot>startpalmbuild()</slot>
     2318   <hints>
     2319    <hint type="sourcelabel">
     2320     <x>342</x>
     2321     <y>552</y>
     2322    </hint>
     2323    <hint type="destinationlabel">
     2324     <x>1182</x>
     2325     <y>748</y>
     2326    </hint>
     2327   </hints>
     2328  </connection>
     2329  <connection>
     2330   <sender>combo_configuration</sender>
     2331   <signal>currentIndexChanged(QString)</signal>
     2332   <receiver>MainWindow</receiver>
     2333   <slot>change_lineinput()</slot>
     2334   <hints>
     2335    <hint type="sourcelabel">
     2336     <x>134</x>
     2337     <y>547</y>
     2338    </hint>
     2339    <hint type="destinationlabel">
     2340     <x>1183</x>
     2341     <y>538</y>
    22692342    </hint>
    22702343   </hints>
     
    22982371  <slot>openmenuoutput()</slot>
    22992372  <slot>openmenumonitoring()</slot>
     2373  <slot>startpalmbuild()</slot>
    23002374 </slots>
    23012375</ui>
  • palm/trunk/SOURCE/Makefile

    r4400 r4411  
    2525# -----------------
    2626# $Id$
     27# Added output routines for WTM
     28#
     29# 4400 2020-02-10 20:32:41Z suehring
    2730# Add dependency for data-output module
    2831#
     
    12921295        basic_constants_and_equations_mod.o \
    12931296        cpulog_mod.o \
     1297        data_output_module.o \
    12941298        mod_kinds.o \
    12951299        modules.o
  • palm/trunk/SOURCE/module_interface.f90

    r4407 r4411  
    2525! -----------------
    2626! $Id$
     27! Added output routines for WTM
     28!
     29! 4407 2020-02-13 20:31:44Z knoop
    2730! Changed program_debug_output_unit to 9 in dom_init call
    2831!
     
    514517        ONLY:  wtm_parin,                                                      &
    515518               wtm_check_parameters,                                           &
     519               wtm_init,                                                       &
    516520               wtm_init_arrays,                                                &
    517                wtm_init,                                                       &
     521               wtm_init_output,                                                &
    518522               wtm_actions,                                                    &
    519523               wtm_rrd_global,                                                 &
     
    11211125!-- Define module-specific output quantities
    11221126    IF ( virtual_measurement )  CALL vm_init_output
     1127    IF ( wind_turbine )         CALL wtm_init_output
    11231128!
    11241129!-- Leave output-definition state
  • palm/trunk/SOURCE/wind_turbine_model_mod.f90

    r4360 r4411  
    88! version.
    99!
    10 ! PALM is distributed in the hope that it will be useful, but WITHOUT ANY
     10! PALM is distributed in the hope that it will be useful, but WITHOUT ANYr
    1111! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
    1212! A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
     
    2626! -----------------
    2727! $Id$
     28! Added output in NetCDF format using DOM (only netcdf4-parallel is supported).
     29! Old ASCII output is still available at the moment.
     30!
     31! 4360 2020-01-07 11:25:50Z suehring
    2832! Introduction of wall_flags_total_0, which currently sets bits based on static
    2933! topography information used in wall_flags_static_0
     
    111115        ONLY:  coupling_char,                                                  &
    112116               debug_output,                                                   &
    113                dt_3d, dz, message_string, simulated_time,                      &
    114                wind_turbine, initializing_actions
     117               dt_3d, dz, end_time, message_string, time_since_reference_point,&
     118               wind_turbine, initializing_actions, origin_date_time
    115119
    116120    USE cpulog,                                                                &
    117121        ONLY:  cpu_log, log_point_s
    118122
     123    USE data_output_module
     124       
    119125    USE grid_variables,                                                        &
    120126        ONLY:  ddx, dx, ddy, dy
     
    133139    PRIVATE
    134140
     141   
     142   
     143    CHARACTER(LEN=100) ::  variable_name  !< name of output variable
     144    CHARACTER(LEN=30) :: nc_filename
     145   
    135146!
    136147!-- Variables specified in the namelist wind_turbine_par
     
    139150    INTEGER(iwp) ::  nturbines = 1   !< number of turbines
    140151
     152   
     153   
     154    REAL(wp), DIMENSION(:), POINTER   ::  output_values_1d_pointer !< pointer for 2d output array
     155    REAL(wp), POINTER                 ::  output_values_0d_pointer !< pointer for 2d output array 
     156    REAL(wp), DIMENSION(:), ALLOCATABLE, TARGET   ::  output_values_1d_target !< pointer for 2d output array
     157    REAL(wp), TARGET                ::  output_values_0d_target !< pointer for 2d output array     
     158   
    141159    LOGICAL ::  pitch_control = .FALSE.   !< switch for use of pitch controller
    142160    LOGICAL ::  speed_control = .FALSE.   !< switch for use of speed controller
    143161    LOGICAL ::  yaw_control   = .FALSE.   !< switch for use of yaw controller
    144162    LOGICAL ::  tl_cor        = .FALSE.    !< switch for use of tip loss correct.
    145 
     163   
     164    LOGICAL ::  initial_write_coordinates = .FALSE.
     165
     166    REAL(wp) ::  dt_wtm          = 1.0_wp
     167   
    146168    REAL(wp) ::  segment_length  = 1.0_wp          !< length of the segments, the rotor area is divided into
    147169                                                   !< (in tangential direction, as factor of MIN(dx,dy,dz))
     
    151173    REAL(wp) ::  tilt            = 0.0_wp          !< vertical tilt of the rotor [degree] ( positive = backwards )
    152174
     175
    153176    REAL(wp), DIMENSION(1:100) ::  dtow             = 0.0_wp  !< tower diameter [m]
    154     REAL(wp), DIMENSION(1:100) ::  omega_rot        = 0.9_wp  !< inital or constant rotor speed [rad/s]
     177    REAL(wp), DIMENSION(1:100), TARGET ::  omega_rot        = 0.9_wp  !< inital or constant rotor speed [rad/s]
    155178    REAL(wp), DIMENSION(1:100) ::  phi_yaw          = 0.0_wp  !< yaw angle [degree] ( clockwise, 0 = facing west )
    156179    REAL(wp), DIMENSION(1:100) ::  pitch_add        = 0.0_wp  !< constant pitch angle
     
    384407    END INTERFACE wtm_check_parameters
    385408
     409    INTERFACE wtm_data_output
     410       MODULE PROCEDURE wtm_data_output
     411    END INTERFACE wtm_data_output
     412   
    386413    INTERFACE wtm_init_arrays
    387414       MODULE PROCEDURE wtm_init_arrays
     
    392419    END INTERFACE wtm_init
    393420
     421    INTERFACE wtm_init_output
     422       MODULE PROCEDURE wtm_init_output
     423    END INTERFACE wtm_init_output
     424   
    394425    INTERFACE wtm_actions
    395426       MODULE PROCEDURE wtm_actions
     
    409440           wtm_parin,                                                          &
    410441           wtm_check_parameters,                                               &
     442           wtm_data_output,                                                    &
    411443           wtm_init_arrays,                                                    &
     444           wtm_init_output,                                                    &
    412445           wtm_init,                                                           &
    413446           wtm_actions,                                                        &
     
    878911       IMPLICIT NONE
    879912
     913       
     914 
    880915       INTEGER(iwp) ::  i  !< running index
    881916       INTEGER(iwp) ::  j  !< running index
    882917       INTEGER(iwp) ::  k  !< running index
    883918       
     919     
    884920!
    885921!--    Help variables for the smearing function       
     
    12551291       CALL wtm_read_blade_tables
    12561292
     1293       
     1294   
     1295       
     1296     
    12571297       IF ( debug_output )  CALL debug_message( 'wtm_init', 'end' )
    12581298 
     
    12601300
    12611301
     1302   
     1303    SUBROUTINE wtm_init_output
     1304   
     1305   
     1306        INTEGER(iwp) ::  ntimesteps               !< number of timesteps defined in NetCDF output file
     1307        INTEGER(iwp) ::  ntimesteps_max = 80000   !< number of maximum timesteps defined in NetCDF output file
     1308        INTEGER(iwp) ::  return_value             !< returned status value of called function
     1309       
     1310        INTEGER(iwp) ::  n  !< running index       
     1311     
     1312        INTEGER(iwp), DIMENSION(:), ALLOCATABLE ::  ndim !< dummy to write dimension   
     1313       
     1314       
     1315!
     1316!--    Create NetCDF output file
     1317       nc_filename = 'DATA_1D_TS_WTM_NETCDF' // TRIM( coupling_char )     
     1318       return_value = dom_def_file( nc_filename, 'netcdf4-parallel' )
     1319                                                                         
     1320       ntimesteps = MIN( CEILING(                                                 &
     1321                     ( end_time - MAX( time_turbine_on, time_since_reference_point )&
     1322                     ) / MAX( 0.1_wp, dt_wtm ) ), ntimesteps_max )
     1323
     1324       
     1325!
     1326!--    Define dimensions in output file
     1327       ALLOCATE( ndim(1:nturbines) )
     1328       DO  n = 1, nturbines
     1329          ndim(n) = n
     1330       ENDDO
     1331       return_value = dom_def_dim( nc_filename,                                &
     1332                                   dimension_name = 'turbine',                 &
     1333                                   output_type = 'int32',                      &
     1334                                   bounds = (/1_iwp, nturbines/),              &
     1335                                   values_int32 = ndim )
     1336       DEALLOCATE( ndim )
     1337
     1338       
     1339!
     1340!--    time
     1341       return_value = dom_def_dim( nc_filename,                                &
     1342                                   dimension_name = 'time',                   &
     1343                                   output_type = 'real32',                      &
     1344                                   bounds = (/1_iwp, ntimesteps/),             &
     1345                                   values_realwp = (/0.0_wp/) )   
     1346       
     1347 
     1348!
     1349!--    x
     1350       variable_name = 'x'
     1351       return_value = dom_def_var( nc_filename,                        &
     1352                                   variable_name = variable_name,              &
     1353                                   dimension_names = (/'turbine'/),            &
     1354                                   output_type = 'real32' )
     1355!
     1356!--    y
     1357       variable_name = 'y'
     1358       return_value = dom_def_var( nc_filename,                        &
     1359                                   variable_name = variable_name,              &
     1360                                   dimension_names = (/'turbine'/),            &
     1361                                   output_type = 'real32' )
     1362
     1363       variable_name = 'z'
     1364       return_value = dom_def_var( nc_filename,                        &
     1365                                   variable_name = variable_name,              &
     1366                                   dimension_names = (/'turbine'/),            &
     1367                                   output_type = 'real32' )
     1368                                   
     1369
     1370       return_value = dom_def_att( nc_filename,                        &
     1371                                   variable_name = 'time',                     &
     1372                                   attribute_name = 'units',                 &
     1373                                   value = 'seconds since ' // origin_date_time )
     1374                                   
     1375       return_value = dom_def_att( nc_filename,                        &
     1376                                   variable_name = 'x',                        &
     1377                                   attribute_name = 'units',                 &
     1378                                   value = 'm' )
     1379
     1380       return_value = dom_def_att( nc_filename,                        &
     1381                                   variable_name = 'y',                        &
     1382                                   attribute_name = 'units',                 &
     1383                                   value = 'm' )     
     1384
     1385       return_value = dom_def_att( nc_filename,                        &
     1386                                   variable_name = 'z',                        &
     1387                                   attribute_name = 'units',                 &
     1388                                   value = 'm' )                                   
     1389
     1390       return_value = dom_def_att( nc_filename,                        &
     1391                                   variable_name = 'x',                        &
     1392                                   attribute_name = 'long_name',                 &
     1393                                   value = 'x location of rotor center' )
     1394
     1395       return_value = dom_def_att( nc_filename,                        &
     1396                                   variable_name = 'y',                        &
     1397                                   attribute_name = 'long_name',                 &
     1398                                   value = 'y location of rotor center' )     
     1399
     1400       return_value = dom_def_att( nc_filename,                        &
     1401                                   variable_name = 'z',                        &
     1402                                   attribute_name = 'long_name',                 &
     1403                                   value = 'z location of rotor center' )     
     1404                                   
     1405                                   
     1406       return_value = dom_def_att( nc_filename,                        &
     1407                                   variable_name = 'turbine_name',             &
     1408                                   attribute_name = 'long_name',                 &
     1409                                   value = 'turbine name')   
     1410 
     1411       return_value = dom_def_att( nc_filename,                        &
     1412                                   variable_name = 'time',                     &
     1413                                   attribute_name = 'standard_name',             &
     1414                                   value = 'time')
     1415
     1416       return_value = dom_def_att( nc_filename,                        &
     1417                                   variable_name = 'time',                     &
     1418                                   attribute_name = 'axis',                    &
     1419                                   value = 'T')
     1420
     1421       return_value = dom_def_att( nc_filename,                        &
     1422                                   variable_name = 'x',                        &
     1423                                   attribute_name = 'axis',                    &
     1424                                   value = 'X' )
     1425
     1426       return_value = dom_def_att( nc_filename,                        &
     1427                                   variable_name = 'y',                        &
     1428                                   attribute_name = 'axis',                    &
     1429                                   value = 'Y' )                                 
     1430
     1431
     1432       variable_name = 'rotor_speed'
     1433       return_value = dom_def_var( nc_filename,                        &
     1434                                   variable_name = variable_name,      &
     1435                                   dimension_names = (/ 'turbine', 'time' /),     &
     1436                                   output_type = 'real32' )
     1437 
     1438       return_value = dom_def_att( nc_filename,                  &
     1439                                   variable_name = variable_name,        &
     1440                                   attribute_name = 'units',           &
     1441                                   value = 'rad/s' )
     1442 
     1443       variable_name = 'generator_speed'
     1444       return_value = dom_def_var( nc_filename,                        &
     1445                                   variable_name = variable_name,      &
     1446                                   dimension_names = (/ 'turbine', 'time' /),     &
     1447                                   output_type = 'real32' )
     1448 
     1449       return_value = dom_def_att( nc_filename,                  &
     1450                                   variable_name = variable_name,        &
     1451                                   attribute_name = 'units',           &
     1452                                   value = 'rad/s' )
     1453     
     1454     
     1455       variable_name = 'generator_torque'
     1456       return_value = dom_def_var( nc_filename,                        &
     1457                                   variable_name = variable_name,      &
     1458                                   dimension_names = (/ 'turbine', 'time' /),     &
     1459                                   output_type = 'real32' )
     1460 
     1461       return_value = dom_def_att( nc_filename,                  &
     1462                                   variable_name = variable_name,        &
     1463                                   attribute_name = 'units',           &
     1464                                   value = 'Nm' ) 
     1465       
     1466       variable_name = 'rotor_torque'
     1467       return_value = dom_def_var( nc_filename,                        &
     1468                                   variable_name = variable_name,      &
     1469                                   dimension_names = (/ 'turbine', 'time' /),     &
     1470                                   output_type = 'real32' )
     1471 
     1472       return_value = dom_def_att( nc_filename,                  &
     1473                                   variable_name = variable_name,        &
     1474                                   attribute_name = 'units',           &
     1475                                   value = 'Nm' )
     1476
     1477       variable_name = 'pitch_angle'
     1478       return_value = dom_def_var( nc_filename,                        &
     1479                                   variable_name = variable_name,      &
     1480                                   dimension_names = (/ 'turbine', 'time' /),     &
     1481                                   output_type = 'real32' )
     1482 
     1483       return_value = dom_def_att( nc_filename,                  &
     1484                                   variable_name = variable_name,        &
     1485                                   attribute_name = 'units',           &
     1486                                   value = 'degrees' )     
     1487                                   
     1488       variable_name = 'generator_power'
     1489       return_value = dom_def_var( nc_filename,                        &
     1490                                   variable_name = variable_name,      &
     1491                                   dimension_names = (/ 'turbine', 'time' /),     &
     1492                                   output_type = 'real32' )
     1493 
     1494       return_value = dom_def_att( nc_filename,                  &
     1495                                   variable_name = variable_name,        &
     1496                                   attribute_name = 'units',           &
     1497                                   value = 'W' ) 
     1498                                   
     1499       variable_name = 'rotor_power'
     1500       return_value = dom_def_var( nc_filename,                        &
     1501                                   variable_name = variable_name,      &
     1502                                   dimension_names = (/ 'turbine', 'time' /),     &
     1503                                   output_type = 'real32' )
     1504 
     1505       return_value = dom_def_att( nc_filename,                  &
     1506                                   variable_name = variable_name,        &
     1507                                   attribute_name = 'units',           &
     1508                                   value = 'W' ) 
     1509                                   
     1510        variable_name = 'rotor_thrust'
     1511       return_value = dom_def_var( nc_filename,                        &
     1512                                   variable_name = variable_name,      &
     1513                                   dimension_names = (/ 'turbine', 'time' /),     &
     1514                                   output_type = 'real32' )
     1515 
     1516       return_value = dom_def_att( nc_filename,                  &
     1517                                   variable_name = variable_name,        &
     1518                                   attribute_name = 'units',           &
     1519                                   value = 'N' )   
     1520                                   
     1521                                   
     1522       variable_name = 'wind_direction'
     1523       return_value = dom_def_var( nc_filename,                        &
     1524                                   variable_name = variable_name,      &
     1525                                   dimension_names = (/ 'turbine', 'time' /),     &
     1526                                   output_type = 'real32' )
     1527 
     1528       return_value = dom_def_att( nc_filename,                  &
     1529                                   variable_name = variable_name,        &
     1530                                   attribute_name = 'units',           &
     1531                                   value = 'degrees' ) 
     1532                                   
     1533       variable_name = 'yaw_angle'
     1534       return_value = dom_def_var( nc_filename,                        &
     1535                                   variable_name = variable_name,      &
     1536                                   dimension_names = (/ 'turbine', 'time' /),     &
     1537                                   output_type = 'real32' )
     1538 
     1539       return_value = dom_def_att( nc_filename,                  &
     1540                                   variable_name = variable_name,        &
     1541                                   attribute_name = 'units',           &
     1542                                   value = 'degrees' ) 
     1543                                   
     1544    END SUBROUTINE
     1545   
    12621546!------------------------------------------------------------------------------!
    12631547! Description:
     
    15951879       INTEGER(iwp) ::  ring             !<
    15961880       INTEGER(iwp) ::  ii, jj, kk       !<
    1597    
     1881       
    15981882       REAL(wp)     ::  flag               !< flag to mask topography grid points
    15991883       REAL(wp)     ::  sin_rot, cos_rot   !<
     
    16041888       
    16051889       REAL(wp) ::  dist_u_3d, dist_v_3d, dist_w_3d  !< smearing distances
    1606 
     1890     
    16071891       
    16081892!
     
    16191903
    16201904
    1621        IF ( simulated_time >= time_turbine_on ) THEN
     1905       IF ( time_since_reference_point >= time_turbine_on ) THEN
    16221906
    16231907!
     
    23992683          ENDIF
    24002684
     2685         
     2686         
     2687         
    24012688          DO inot = 1, nturbines
    24022689
     2690
     2691         
    24032692             IF ( myid == 0 ) THEN
    24042693                IF ( openfile_turb_mod(400+inot)%opened )  THEN
    2405                    WRITE ( 400+inot, 106 ) simulated_time, omega_rot(inot),    &
     2694                   WRITE ( 400+inot, 106 ) time_since_reference_point, omega_rot(inot),    &
    24062695                             omega_gen(inot), torque_gen_old(inot),            &
    24072696                             torque_total(inot), pitch_add(inot),              &
     
    24192708                                           turbine_id ), FORM='FORMATTED' )
    24202709                   WRITE ( 400+inot, 105 ) inot
    2421                    WRITE ( 400+inot, 106 ) simulated_time, omega_rot(inot),    &
     2710                   WRITE ( 400+inot, 106 ) time_since_reference_point, omega_rot(inot),    &
    24222711                             omega_gen(inot), torque_gen_old(inot),            &
    24232712                             torque_total(inot), pitch_add(inot),              &
     
    24342723          ENDDO                                    !-- end of loop over turbines
    24352724
    2436        ENDIF
    2437 
     2725         
     2726         
     2727       ENDIF   
     2728
     2729
     2730!
     2731!--    NetCDF output, should be moved
     2732       CALL wtm_data_output
     2733       
    24382734       CALL cpu_log( log_point_s(61), 'wtm_forces', 'stop' )
    24392735       
     
    24492745                   F12.1,1X,F12.1,4X,F7.2,4X,F7.2)
    24502746
    2451 
     2747           
     2748                   
    24522749    END SUBROUTINE wtm_forces
    24532750
     
    26922989!
    26932990!--       Apply the x-component of the force to the u-component of the flow:
    2694           IF ( simulated_time >= time_turbine_on )  THEN
     2991          IF ( time_since_reference_point >= time_turbine_on )  THEN
    26952992             DO  i = nxlg, nxrg
    26962993                DO  j = nysg, nyng
     
    27153012!
    27163013!--       Apply the y-component of the force to the v-component of the flow:
    2717           IF ( simulated_time >= time_turbine_on )  THEN
     3014          IF ( time_since_reference_point >= time_turbine_on )  THEN
    27183015             DO  i = nxlg, nxrg
    27193016                DO  j = nysg, nyng
     
    27353032!
    27363033!--       Apply the z-component of the force to the w-component of the flow:
    2737           IF ( simulated_time >= time_turbine_on )  THEN
     3034          IF ( time_since_reference_point >= time_turbine_on )  THEN
    27383035             DO  i = nxlg, nxrg
    27393036                DO  j = nysg, nyng
     
    27813078!
    27823079!--       Apply the x-component of the force to the u-component of the flow:
    2783           IF ( simulated_time >= time_turbine_on )  THEN
     3080          IF ( time_since_reference_point >= time_turbine_on )  THEN
    27843081             DO  k = nzb+1,  MAXVAL(k_hub) + MAXVAL(k_smear)
    27853082!
     
    27993096!
    28003097!--       Apply the y-component of the force to the v-component of the flow:
    2801           IF ( simulated_time >= time_turbine_on )  THEN
     3098          IF ( time_since_reference_point >= time_turbine_on )  THEN
    28023099             DO  k = nzb+1,  MAXVAL(k_hub) + MAXVAL(k_smear)
    28033100                tend_nac_y = 0.5_wp * nac_cd_surf(k,j,i) *                     &
     
    28153112!
    28163113!--       Apply the z-component of the force to the w-component of the flow:
    2817           IF ( simulated_time >= time_turbine_on )  THEN
     3114          IF ( time_since_reference_point >= time_turbine_on )  THEN
    28183115             DO  k = nzb+1,  MAXVAL(k_hub) + MAXVAL(k_smear)
    28193116                tend(k,j,i) = tend(k,j,i) - rot_tend_z(k,j,i)                  &
     
    28323129    END SUBROUTINE wtm_actions_ij
    28333130
     3131   
     3132    SUBROUTINE wtm_data_output
     3133   
     3134   
     3135       INTEGER(iwp)       ::  t_ind = 0       !< time index
     3136   
     3137       INTEGER(iwp) ::  return_value             !< returned status value of called function
     3138   
     3139!
     3140!--    At the first call of this routine write the spatial coordinates.
     3141       IF ( .NOT. initial_write_coordinates )  THEN
     3142          ALLOCATE ( output_values_1d_target(1:nturbines) )
     3143          output_values_1d_target = rcx(1:nturbines)
     3144          output_values_1d_pointer => output_values_1d_target     
     3145          return_value = dom_write_var( nc_filename,                              &
     3146                                     'x',                                         &
     3147                                     values_realwp_1d = output_values_1d_pointer, &
     3148                                     bounds_start = (/1/),                        &
     3149                                     bounds_end   = (/nturbines/) )
     3150
     3151          output_values_1d_target = rcy(1:nturbines)
     3152          output_values_1d_pointer => output_values_1d_target     
     3153          return_value = dom_write_var( nc_filename,                              &
     3154                                     'y',                                         &
     3155                                     values_realwp_1d = output_values_1d_pointer, &
     3156                                     bounds_start = (/1/),                        &
     3157                                     bounds_end   = (/nturbines/) )
     3158
     3159          output_values_1d_target = rcz(1:nturbines)
     3160          output_values_1d_pointer => output_values_1d_target     
     3161          return_value = dom_write_var( nc_filename,                              &
     3162                                     'z',                                         &
     3163                                     values_realwp_1d = output_values_1d_pointer, &
     3164                                     bounds_start = (/1/),                        &
     3165                                     bounds_end   = (/nturbines/) )                                       
     3166                                       
     3167          initial_write_coordinates = .TRUE.
     3168          DEALLOCATE ( output_values_1d_target )
     3169       ENDIF
     3170         
     3171       t_ind = t_ind + 1
     3172         
     3173       ALLOCATE ( output_values_1d_target(1:nturbines) )
     3174       output_values_1d_target = omega_rot(:)
     3175       output_values_1d_pointer => output_values_1d_target
     3176         
     3177       return_value = dom_write_var( nc_filename,                                 &
     3178                                     'rotor_speed',                               &
     3179                                     values_realwp_1d = output_values_1d_pointer, &
     3180                                     bounds_start = (/1, t_ind/),                 &
     3181                                     bounds_end   = (/nturbines, t_ind /) )
     3182
     3183       output_values_1d_target = omega_gen(:)
     3184       output_values_1d_pointer => output_values_1d_target   
     3185       return_value = dom_write_var( nc_filename,                                 &
     3186                                     'generator_speed',                           &
     3187                                     values_realwp_1d = output_values_1d_pointer, &
     3188                                     bounds_start = (/1, t_ind/),                 &
     3189                                     bounds_end   = (/nturbines, t_ind /) )
     3190
     3191       output_values_1d_target = torque_gen_old(:)
     3192       output_values_1d_pointer => output_values_1d_target   
     3193
     3194       return_value = dom_write_var( nc_filename,                                 &
     3195                                     'generator_torque',                          &
     3196                                     values_realwp_1d = output_values_1d_pointer, &
     3197                                     bounds_start = (/1, t_ind/),                 &
     3198                                     bounds_end   = (/nturbines, t_ind /) )
     3199
     3200       output_values_1d_target = torque_total(:)
     3201       output_values_1d_pointer => output_values_1d_target   
     3202   
     3203       return_value = dom_write_var( nc_filename,                                 &
     3204                                     'rotor_torque',                              &
     3205                                     values_realwp_1d = output_values_1d_pointer, &
     3206                                     bounds_start = (/1, t_ind/),                 &
     3207                                     bounds_end   = (/nturbines, t_ind /) )
     3208
     3209       output_values_1d_target = pitch_add(:)
     3210       output_values_1d_pointer => output_values_1d_target   
     3211
     3212       return_value = dom_write_var( nc_filename,                                 &
     3213                                     'pitch_angle',                               &
     3214                                     values_realwp_1d = output_values_1d_pointer, &
     3215                                     bounds_start = (/1, t_ind/),                 &
     3216                                     bounds_end   = (/nturbines, t_ind /) )
     3217
     3218       output_values_1d_target = torque_gen_old(:)*omega_gen(:)*gen_eff
     3219       output_values_1d_pointer => output_values_1d_target   
     3220   
     3221       return_value = dom_write_var( nc_filename,                                 &
     3222                                     'generator_power',                           &
     3223                                     values_realwp_1d = output_values_1d_pointer, &
     3224                                     bounds_start = (/1, t_ind/),                 &
     3225                                     bounds_end   = (/nturbines, t_ind /) )
     3226
     3227       DO inot = 1, nturbines
     3228          output_values_1d_target(inot) = torque_total(inot)*omega_rot(inot)*air_dens
     3229       ENDDO
     3230       output_values_1d_pointer => output_values_1d_target   
     3231                                       
     3232       return_value = dom_write_var( nc_filename,                                 &
     3233                                     'rotor_power',                               &
     3234                                     values_realwp_1d = output_values_1d_pointer, &
     3235                                     bounds_start = (/1, t_ind/),                 &
     3236                                     bounds_end   = (/nturbines, t_ind /) )
     3237
     3238       output_values_1d_target = thrust_rotor(:)
     3239       output_values_1d_pointer => output_values_1d_target   
     3240   
     3241       return_value = dom_write_var( nc_filename,                                 &
     3242                                     'rotor_thrust',                              &
     3243                                     values_realwp_1d = output_values_1d_pointer, &
     3244                                     bounds_start = (/1, t_ind/),                 &
     3245                                     bounds_end   = (/nturbines, t_ind /) )
     3246
     3247       output_values_1d_target = wdir(:)*180.0_wp/pi
     3248       output_values_1d_pointer => output_values_1d_target   
     3249         
     3250       return_value = dom_write_var( nc_filename,                                 &
     3251                                     'wind_direction',                            &
     3252                                     values_realwp_1d = output_values_1d_pointer, &
     3253                                     bounds_start = (/1, t_ind/),                 &
     3254                                     bounds_end   = (/nturbines, t_ind /) )
     3255
     3256       output_values_1d_target = (phi_yaw(:))*180.0_wp/pi
     3257       output_values_1d_pointer => output_values_1d_target   
     3258
     3259       return_value = dom_write_var( nc_filename,                                 &
     3260                                     'yaw_angle',                                 &
     3261                                     values_realwp_1d = output_values_1d_pointer, &
     3262                                     bounds_start = (/1, t_ind/),                 &
     3263                                     bounds_end   = (/nturbines, t_ind /) )
     3264
     3265       output_values_0d_target = time_since_reference_point
     3266       output_values_0d_pointer => output_values_0d_target
     3267   
     3268       return_value = dom_write_var( nc_filename,                                 &
     3269                                     'time',                                      &
     3270                                     values_realwp_0d = output_values_0d_pointer, &
     3271                                     bounds_start = (/t_ind/),                    &
     3272                                     bounds_end   = (/t_ind/) )         
     3273         
     3274       DEALLOCATE ( output_values_1d_target )
     3275       
     3276   
     3277    END SUBROUTINE wtm_data_output
     3278   
    28343279 END MODULE wind_turbine_model_mod
Note: See TracChangeset for help on using the changeset viewer.