Adaptive Comfort recipe - failed to link CFD wind data

Hi,

I wonder if anyone else has come across this. Connecting a .csv of yearly wind velocities to the Adaptive comfort recipe component, produced from CFD data, gives me a “text to float” error. Reading the file, and supplying the tree output of numerical values bypasses this problem but the component doesn’t produce the recipe (I waited 20mins until I stopped it).

In comparison, the UTCI recipe component accepts .csv with no problem and takes about 2 mins to create the same recipe. Might be that this workflow is not yet developed in the AD recipe component?

Kind regards,
Theodore.

Hi Theodoros,

I had the same issue. I avoided it by using a grasshopper data tree and putting it into the comfort recipe.

I have now a different problem: for the PMV and adaptive comfort recipe it gives me the Error. 1. Solution exception:global name ‘testPtNum’ is not defined . For PET it does work.

Best,

David

@davidbriels,
Can you upload a minimal version of your file we can take a look?

@TheodorosGalanos,
Do you still face this problem? I believe you don’t. Right?

Sorry I have to correct my last entry. I found out, that even there´s no Error for PET comfort recipe I think it does not apply the wind speed to the microclimate map analysis.
When I plug in just one constant value the results are different to a data tree with the same value but the number of branches equal to the mesh.

Here the slightly changed file.
180517_Indoor_Microclimate_Map_ERROR_windData2.gh (773.2 KB)

Does someone have an idea, what I´m doing wrong?

Thanks a lot!

Cheers,

David

Hi @davidbriels,

I created a wind file for the values of 10 m/s. wind file
Using this file gives the results similar to when you supply only one wind velocity. You can supply this .csv to the PET. This wind file is basically a file where the number of columns are equal to the number of the test points and the number of rows are 8760. In your case, all the values are 10 m/s.

Hi @devang,

Thanks a lot for your help. Yes I was aware of the workflow with csv files but couldn´t manage it. May I ask how you created the csv file, because always when I was trying to handle with data in grasshopper with 8760 rows and >3000 columns it crashed. Do you have a python script for that?

Thanks!

David

wind file.py (353 Bytes) Here’s the file. Hope this helps.

I have invited @chris to this topic. I am sure he will have something to add to this thread.

Hi I keep forgetting. When I get home I will send the definition with the component that will do this for you very efficiently.

Kind regards,
Theodore.

1 Like

Hi @TheodorosGalanos,

Thank you so much! This will help me a lot! I appreciate that!
I´m trying a quite similar workflow for my Thesis like you and Chris did, very impressive by the way.

Thank you so much,

David

@TheodorosGalanos and I have some scripts that we were using to build the annual CSV from another CSV of wind factors for each of the points. I’ll share this once I get the chance to dig through my records or @TheodorosGalanos beats me to it.

Actually, it was quicker to find than I thought. Here’s the GH file that I mentioned:
https://drive.google.com/file/d/0Bz2PwDvkjovJYkxHTUdIUVVlaEU/view?usp=drivesdk

1 Like

Hi @chris,

I would really appreciate if you could take a look at the file uploaded @davidbriels and check why the results are different when he is supplying the same wind velocity as a tree. While generating a .csv wind file is the best way to supply wind velocity as you have already mentioned on the input description, I believe a lot of people would do what @davidbriels has attempted here.

Thanks in advance!

Hi @devang and @chris ,

thanks again for your help. I managed to set up my workflow right now.
But there´s still some errors with the Comfort Recipes when using a CSV as input for the wind speed.
For UTCI and PET it does work, but for AD and PMV it doesn´t. Could this be a bug in these two components?

I also tried to look at the codes and found some differences between them, but I´m unfortunately not familiar enough with this to find out what´s exactly wrong.

But at first sight I found these differences:

UTCI:

            #See if the data is hourly.
        if simStep == 'hourly' or simStep == 'Hourly': pass
        else:
            dataCheck6 = False
            warning = "Simulation data must be hourly."
            print warning
            ghenv.Component.AddRuntimeMessage(w, warning)

AD

missing

UTCI

#Run all of the EnergyPlus data through the check function.
if outdoorIsThere == False and srfIndoorTemp_.BranchCount > 0 and zoneAirTemp_.BranchCount > 0  and zoneAirFlowVol_.BranchCount > 0 and zoneAirHeatGain_.BranchCount > 0:
    #Indoor only calculation and everything is good.
    checkData1, checkData2, airTempUnits, airTempDataHeaders, airTempDataNumbers, analysisPeriod = checkCreateDataTree(zoneAirTemp_, "zoneAirTemp_", "Air Temperature")
    checkData3, checkData4, srfTempUnits, srfTempHeaders, srfTempNumbers, analysisPeriod = checkCreateDataTree(srfIndoorTemp_, "srfIndoorTemp_", "Inner Surface Temperature")
    checkData21, checkData22, flowVolUnits, flowVolDataHeaders, flowVolDataNumbers, analysisPeriod = checkCreateDataTree(zoneAirFlowVol_, "zoneAirFlowVol_", "Air Flow Volume")
    checkData23, checkData24, heatGainUnits, heatGainDataHeaders, heatGainDataNumbers, analysisPeriod = checkCreateDataTree(zoneAirHeatGain_, "zoneAirHeatGain_", "Air Heat Gain Rate")
    checkData17, checkData18, relHumidUnits, relHumidDataHeaders, relHumidDataNumbers, analysisPeriod = checkCreateDataTree(zoneRelHumid_, "zoneRelHumid_", "Relative Humidity")
    outdoorClac = False
    checkData29, checkData30, outSrfTempUnits, outSrfTempHeaders, outSrfTempNumbers = True, True, 'C', [], []
elif srfIndoorTemp_.BranchCount > 0 and zoneAirTemp_.BranchCount > 0  and zoneAirFlowVol_.BranchCount > 0 and zoneAirHeatGain_.BranchCount > 0:
    #All inputs are provided and it doesn't matter whether the indoor/outdoor is there.
    checkData1, checkData2, airTempUnits, airTempDataHeaders, airTempDataNumbers, analysisPeriod = checkCreateDataTree(zoneAirTemp_, "zoneAirTemp_", "Air Temperature")
    checkData3, checkData4, srfTempUnits, srfTempHeaders, srfTempNumbers, analysisPeriod = checkCreateDataTree(srfIndoorTemp_, "srfIndoorTemp_", "Inner Surface Temperature")
    checkData21, checkData22, flowVolUnits, flowVolDataHeaders, flowVolDataNumbers, analysisPeriod = checkCreateDataTree(zoneAirFlowVol_, "zoneAirFlowVol_", "Air Flow Volume")
    checkData23, checkData24, heatGainUnits, heatGainDataHeaders, heatGainDataNumbers, analysisPeriod = checkCreateDataTree(zoneAirHeatGain_, "zoneAirHeatGain_", "Air Heat Gain Rate")
    checkData17, checkData18, relHumidUnits, relHumidDataHeaders, relHumidDataNumbers, analysisPeriod = checkCreateDataTree(zoneRelHumid_, "zoneRelHumid_", "Relative Humidity")
    checkData29, checkData30, outSrfTempUnits, outSrfTempHeaders, outSrfTempNumbers, analysisPeriod = checkCreateDataTree(_srfOutdoorTemp, "__srfOutdoorTemp", "Outer Surface Temperature")
    outdoorClac = True
elif outdoorIsThere == True:
    #Do a check to see if all of the zone lists are empty (except for the last one, which contains outdoor info.
    allListsEmpty = True
    for zoneList in testPtViewFactor[:-1]:
        if zoneList == []: pass
        else:allListsEmpty = False
    if allListsEmpty == True:
        #The user has input only outdoor srf temperature and only an outdoor mesh.  We can run the calculation just for the outdoors.
        checkData29, checkData30, outSrfTempUnits, outSrfTempHeaders, outSrfTempNumbers, analysisPeriod = checkCreateDataTree(_srfOutdoorTemp, "__srfOutdoorTemp", "Outer Surface Temperature")
        outdoorClac = True
        checkData1, checkData2, checkData3, checkData4, checkData21, checkData22, checkData23, checkData24, checkData17, checkData18 = True, True, True, True, True, True, True, True, True, True
        emptyLists = testPtViewFactor[:-1] + [[]]
        airTempDataHeaders, airTempDataNumbers, srfTempHeaders, srfTempNumbers, flowVolDataHeaders, heatGainDataHeaders, relHumidDataHeaders, relHumidDataNumbers = emptyLists, emptyLists, emptyLists, emptyLists, emptyLists, emptyLists, emptyLists, emptyLists
        numberLists = []
        for zoneCount, zoneList in enumerate(emptyLists):
            numberLists.append(range(len(outSrfTempNumbers[0])))
        flowVolDataNumbers, heatGainDataNumbers = numberLists, numberLists
        flowVolUnits = "m3/s"
        heatGainUnits = "W"
        airTempUnits = srfTempUnits = "C"
        relHumidUnits = "%"
    else:
        checkData1, checkData2, checkData3, checkData4, checkData21, checkData22, checkData23, checkData24, checkData17, checkData18 = False, False, False, False, False, False, False, False, False, False
        warning = 'If you have connected a viewFactorMesh that includes regions on the indoors, you must connect up energy simulation data for zoneAirTemp, srfIndoorTemp, zoneAirFlowVol, zoneAirHeatGain, and zoneRelHumid.'
        print warning
        ghenv.Component.AddRuntimeMessage(gh.GH_RuntimeMessageLevel.Warning, warning)
else:
    checkData1, checkData2, checkData3, checkData4, checkData21, checkData22, checkData23, checkData24, checkData17, checkData18 = False, False, False, False, False, False, False, False, False, False
    warning = 'If you have connected a viewFactorMesh that includes regions on the indoors, you must connect up energy simulation data for zoneAirTemp, srfIndoorTemp, zoneAirFlowVol, zoneAirHeatGain, and zoneRelHumid.'
    print warning
    ghenv.Component.AddRuntimeMessage(gh.GH_RuntimeMessageLevel.Warning, warning)

AD

    #Run all of the EnergyPlus data through the check function.
checkData1, checkData2, airTempUnits, airTempDataHeaders, airTempDataNumbers, analysisPeriod = checkCreateDataTree(_zoneAirTemp, "_zoneAirTemp", "Air Temperature")
checkData3, checkData4, srfTempUnits, srfTempHeaders, srfTempNumbers, analysisPeriod = checkCreateDataTree(_srfIndoorTemp, "_srfIndoorTemp", "Inner Surface Temperature")
checkData21, checkData22, flowVolUnits, flowVolDataHeaders, flowVolDataNumbers, analysisPeriod = checkCreateDataTree(_zoneAirFlowVol, "_zoneAirFlowVol", "Air Flow Volume")
checkData23, checkData24, heatGainUnits, heatGainDataHeaders, heatGainDataNumbers, analysisPeriod = checkCreateDataTree(_zoneAirHeatGain, "_zoneAirHeatGain", "Air Heat Gain Rate")

Here my file, where the error occures and a screenshot of it. Sorry it is still pretty messy.

180606_ComfRecipe_Error_CSV.gh (1.1 MB)

https://syncandshare.lrz.de/dl/fiGqmNRorQHXxeroqgTJveZn/THESIS_PtWindSpeed.csv

Thank you so much!

Cheers David

Hi @davidbriels,

On AD and PMV components, do the following please

right click on windSpeed_ > Type hint > ghdoc

1 Like

I admire the discipline in creating the definition. Sets an example. :ok_hand:

2 Likes

Hi @devang,

thank you so much. It seems to work now. Amazing!

Thank you all for your support!

Cheers

David

1 Like

@devang and @davidbriels ,
I am sorry for being so late to re-join the conversation. Thank you for finding this issue and I just changed the type hint on the AD and PMV recipes:

And I agree that is the most disciplined gigantic GH file that I’ve ever seen!
Do we sill have a discrepancy between the tree input and the csv input? If so, I’ll investigate.